From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id C2963A2EEB for ; Mon, 7 Oct 2019 12:47:05 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id E47D11C1E9; Mon, 7 Oct 2019 12:47:04 +0200 (CEST) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 0ABC91BF29 for ; Mon, 7 Oct 2019 12:47:02 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 07 Oct 2019 03:47:01 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.67,267,1566889200"; d="scan'208";a="206386553" Received: from irsmsx153.ger.corp.intel.com ([163.33.192.75]) by fmsmga001.fm.intel.com with ESMTP; 07 Oct 2019 03:46:59 -0700 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.164]) by IRSMSX153.ger.corp.intel.com ([169.254.9.123]) with mapi id 14.03.0439.000; Mon, 7 Oct 2019 11:46:59 +0100 From: "Ananyev, Konstantin" To: Honnappa Nagarahalli , "stephen@networkplumber.org" , "paulmck@linux.ibm.com" CC: "Wang, Yipeng1" , "Medvedkin, Vladimir" , "Ruifeng Wang (Arm Technology China)" , Dharmik Thakkar , "dev@dpdk.org" , nd , nd , nd Thread-Topic: [PATCH v3 2/3] lib/rcu: add resource reclamation APIs Thread-Index: AQHVeCGdR5HV3Y+YjUaapXAJb26OSqdHkBoQgADWrwCAAGr9MIABIRWAgAT+TtA= Date: Mon, 7 Oct 2019 10:46:58 +0000 Message-ID: <2601191342CEEE43887BDE71AB9772580191971FAC@irsmsx105.ger.corp.intel.com> References: <20190906094534.36060-1-ruifeng.wang@arm.com> <20191001062917.35578-1-honnappa.nagarahalli@arm.com> <20191001062917.35578-3-honnappa.nagarahalli@arm.com> <2601191342CEEE43887BDE71AB977258019196FF8E@irsmsx105.ger.corp.intel.com> <2601191342CEEE43887BDE71AB977258019197083A@irsmsx105.ger.corp.intel.com> In-Reply-To: Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZmZiOGZkNDUtY2EwYi00NTFiLTk1N2UtNDc5NWI3Mjk3NGE5IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoieFROVDdUZTcxMzd6b0tjWjFZb3hDXC9TakR1YVRmd0F3RExRQXVCaEoySlRjcjkrTEVGNW96V3JhSHQzYlwvelNrIn0= x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [163.33.239.180] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v3 2/3] lib/rcu: add resource reclamation APIs X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" DQoNCj4gPiA+ID4gPiBBZGQgcmVzb3VyY2UgcmVjbGFtYXRpb24gQVBJcyB0byBtYWtlIGl0IHNp bXBsZSBmb3IgYXBwbGljYXRpb25zDQo+ID4gPiA+ID4gYW5kIGxpYnJhcmllcyB0byBpbnRlZ3Jh dGUgcnRlX3JjdSBsaWJyYXJ5Lg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTog SG9ubmFwcGEgTmFnYXJhaGFsbGkgPGhvbm5hcHBhLm5hZ2FyYWhhbGxpQGFybS5jb20+DQo+ID4g PiA+ID4gUmV2aWV3ZWQtYnk6IE9sYSBMaWxqZWRoYWwgPG9sYS5saWxqZWRoYWxAYXJtLmNvbT4N Cj4gPiA+ID4gPiBSZXZpZXdlZC1ieTogUnVpZmVuZyBXYW5nIDxydWlmZW5nLndhbmdAYXJtLmNv bT4NCj4gPiA+ID4gPiAtLS0NCj4gPiA+ID4gPiAgYXBwL3Rlc3QvdGVzdF9yY3VfcXNici5jICAg ICAgICAgICB8IDI5MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrLQ0KPiA+ID4gPiA+ICBs aWIvbGlicnRlX3JjdS9tZXNvbi5idWlsZCAgICAgICAgIHwgICAyICsNCj4gPiA+ID4gPiAgbGli L2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyLmMgICAgICB8IDE4NSArKysrKysrKysrKysrKysrKysN Cj4gPiA+ID4gPiAgbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyLmggICAgICB8IDE2OSArKysr KysrKysrKysrKysrKw0KPiA+ID4gPiA+ICBsaWIvbGlicnRlX3JjdS9ydGVfcmN1X3FzYnJfcHZ0 LmggIHwgIDQ2ICsrKysrDQo+ID4gPiA+ID4gIGxpYi9saWJydGVfcmN1L3J0ZV9yY3VfdmVyc2lv bi5tYXAgfCAgIDQgKw0KPiA+ID4gPiA+ICBsaWIvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAg ICAgIHwgICA2ICstDQo+ID4gPiA+ID4gIDcgZmlsZXMgY2hhbmdlZCwgNzAwIGluc2VydGlvbnMo KyksIDMgZGVsZXRpb25zKC0pICBjcmVhdGUgbW9kZQ0KPiA+ID4gPiA+IDEwMDY0NCBsaWIvbGli cnRlX3JjdS9ydGVfcmN1X3FzYnJfcHZ0LmgNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IGRpZmYgLS1n aXQgYS9saWIvbGlicnRlX3JjdS9ydGVfcmN1X3FzYnIuYw0KPiA+ID4gPiA+IGIvbGliL2xpYnJ0 ZV9yY3UvcnRlX3JjdV9xc2JyLmMgaW5kZXggY2U3ZjkzZGQzLi43NjgxNGY1MGIgMTAwNjQ0DQo+ ID4gPiA+ID4gLS0tIGEvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyLmMNCj4gPiA+ID4gPiAr KysgYi9saWIvbGlicnRlX3JjdS9ydGVfcmN1X3FzYnIuYw0KPiA+ID4gPiA+IEBAIC0yMSw2ICsy MSw3IEBADQo+ID4gPiA+ID4gICNpbmNsdWRlIDxydGVfZXJybm8uaD4NCj4gPiA+ID4gPg0KPiA+ ID4gPiA+ICAjaW5jbHVkZSAicnRlX3JjdV9xc2JyLmgiDQo+ID4gPiA+ID4gKyNpbmNsdWRlICJy dGVfcmN1X3FzYnJfcHZ0LmgiDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAgLyogR2V0IHRoZSBtZW1v cnkgc2l6ZSBvZiBRU0JSIHZhcmlhYmxlICovICBzaXplX3QgQEAgLTI2Nyw2DQo+ID4gPiA+ID4g KzI2OCwxOTAgQEAgcnRlX3JjdV9xc2JyX2R1bXAoRklMRSAqZiwgc3RydWN0IHJ0ZV9yY3VfcXNi ciAqdikNCj4gPiA+ID4gPiAgCXJldHVybiAwOw0KPiA+ID4gPiA+ICB9DQo+ID4gPiA+ID4NCj4g PiA+ID4gPiArLyogQ3JlYXRlIGEgcXVldWUgdXNlZCB0byBzdG9yZSB0aGUgZGF0YSBzdHJ1Y3R1 cmUgZWxlbWVudHMgdGhhdA0KPiA+ID4gPiA+ICtjYW4NCj4gPiA+ID4gPiArICogYmUgZnJlZWQg bGF0ZXIuIFRoaXMgcXVldWUgaXMgcmVmZXJyZWQgdG8gYXMgJ2RlZmVyIHF1ZXVlJy4NCj4gPiA+ ID4gPiArICovDQo+ID4gPiA+ID4gK3N0cnVjdCBydGVfcmN1X3FzYnJfZHEgKg0KPiA+ID4gPiA+ ICtydGVfcmN1X3FzYnJfZHFfY3JlYXRlKGNvbnN0IHN0cnVjdCBydGVfcmN1X3FzYnJfZHFfcGFy YW1ldGVycw0KPiA+ID4gPiA+ICsqcGFyYW1zKSB7DQo+ID4gPiA+ID4gKwlzdHJ1Y3QgcnRlX3Jj dV9xc2JyX2RxICpkcTsNCj4gPiA+ID4gPiArCXVpbnQzMl90IHFzX2ZpZm9fc2l6ZTsNCj4gPiA+ ID4gPiArDQo+ID4gPiA+ID4gKwlpZiAocGFyYW1zID09IE5VTEwgfHwgcGFyYW1zLT5mID09IE5V TEwgfHwNCj4gPiA+ID4gPiArCQlwYXJhbXMtPnYgPT0gTlVMTCB8fCBwYXJhbXMtPm5hbWUgPT0g TlVMTCB8fA0KPiA+ID4gPiA+ICsJCXBhcmFtcy0+c2l6ZSA9PSAwIHx8IHBhcmFtcy0+ZXNpemUg PT0gMCB8fA0KPiA+ID4gPiA+ICsJCShwYXJhbXMtPmVzaXplICUgOCAhPSAwKSkgew0KPiA+ID4g PiA+ICsJCXJ0ZV9sb2coUlRFX0xPR19FUlIsIHJ0ZV9yY3VfbG9nX3R5cGUsDQo+ID4gPiA+ID4g KwkJCSIlcygpOiBJbnZhbGlkIGlucHV0IHBhcmFtZXRlclxuIiwgX19mdW5jX18pOw0KPiA+ID4g PiA+ICsJCXJ0ZV9lcnJubyA9IEVJTlZBTDsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwkJcmV0 dXJuIE5VTEw7DQo+ID4gPiA+ID4gKwl9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJZHEgPSBy dGVfem1hbGxvYyhOVUxMLA0KPiA+ID4gPiA+ICsJCShzaXplb2Yoc3RydWN0IHJ0ZV9yY3VfcXNi cl9kcSkgKyBwYXJhbXMtPmVzaXplKSwNCj4gPiA+ID4gPiArCQlSVEVfQ0FDSEVfTElORV9TSVpF KTsNCj4gPiA+ID4gPiArCWlmIChkcSA9PSBOVUxMKSB7DQo+ID4gPiA+ID4gKwkJcnRlX2Vycm5v ID0gRU5PTUVNOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCQlyZXR1cm4gTlVMTDsNCj4gPiA+ ID4gPiArCX0NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwkvKiByb3VuZCB1cCBxc19maWZvX3Np emUgdG8gbmV4dCBwb3dlciBvZiB0d28gdGhhdCBpcyBub3QgbGVzcyB0aGFuDQo+ID4gPiA+ID4g KwkgKiBtYXhfc2l6ZS4NCj4gPiA+ID4gPiArCSAqLw0KPiA+ID4gPiA+ICsJcXNfZmlmb19zaXpl ID0gcnRlX2FsaWduMzJwb3cyKCgoKHBhcmFtcy0+ZXNpemUvOCkgKyAxKQ0KPiA+ID4gPiA+ICsJ CQkJCSogcGFyYW1zLT5zaXplKSArIDEpOw0KPiA+ID4gPiA+ICsJZHEtPnIgPSBydGVfcmluZ19j cmVhdGUocGFyYW1zLT5uYW1lLCBxc19maWZvX3NpemUsDQo+ID4gPiA+ID4gKwkJCQkJU09DS0VU X0lEX0FOWSwgMCk7DQo+ID4gPiA+DQo+ID4gPiA+IElmIGl0IGlzIGdvaW5nIHRvIGJlIG5vdCBN VCBzYWZlLCB0aGVuIHdoeSBub3QgdG8gY3JlYXRlIHRoZSByaW5nDQo+ID4gPiA+IHdpdGggKFJJ TkdfRl9TUF9FTlEgfCBSSU5HX0ZfU0NfREVRKSBmbGFncyBzZXQ/DQo+ID4gPiBBZ3JlZS4NCj4g PiA+DQo+ID4gPiA+IFRob3VnaCBJIHRoaW5rIGl0IGNvdWxkIGJlIGNoYW5nZWQgdG8gYWxsb3cg TVQgc2FmZSBtdWx0aXBsZQ0KPiA+ID4gPiBlbnFldWUvc2luZ2xlIGRlcXVldWUsIHNlZSBiZWxv dy4NCj4gPiA+IFRoZSBNVCBzYWZlIGlzc3VlIGlzIGR1ZSB0byByZWNsYWltIGNvZGUuIFRoZSBy ZWNsYWltIGNvZGUgaGFzIHRoZSBmb2xsb3dpbmcNCj4gPiBzZXF1ZW5jZToNCj4gPiA+DQo+ID4g PiBydGVfcmluZ19wZWVrDQo+ID4gPiBydGVfcmN1X3FzYnJfY2hlY2sNCj4gPiA+IHJ0ZV9yaW5n X2RlcXVldWUNCj4gPiA+DQo+ID4gPiBUaGlzIGVudGlyZSBzZXF1ZW5jZSBuZWVkcyB0byBiZSBh dG9taWMgYXMgdGhlIGVudHJ5IGNhbm5vdCBiZSBkZXF1ZXVlZA0KPiA+IHdpdGhvdXQga25vd2lu ZyB0aGF0IHRoZSBncmFjZSBwZXJpb2QgZm9yIHRoYXQgZW50cnkgaXMgb3Zlci4NCj4gPg0KPiA+ IEkgdW5kZXJzdGFuZCB0aGF0LCB0aG91Z2ggSSBiZWxpZXZlIGF0IGxlYXN0IGl0IHNob3VsZCBi ZSBwb3NzaWJsZSB0byBzdXBwb3J0DQo+ID4gbXVsdGlwbGUtZW5xdWV1ZS9zaW5nbGUgZGVxdWV1 ZXIgYW5kIHJlY2xhaW0gbW9kZS4NCj4gPiBXaXRoIHNlcmlhbGl6ZWQgZGVxdWV1ZSgpIGV2ZW4g bXVsdGlwbGUgZGVxdWV1ZSBzaG91bGQgYmUgcG9zc2libGUuDQo+IEFncmVlZC4gUGxlYXNlIHNl ZSB0aGUgcmVzcG9uc2Ugb24gdGhlIG90aGVyIHRocmVhZC4NCj4gDQo+ID4NCj4gPiA+IE5vdGUg dGhhdCBkdWUgdG8gb3B0aW1pemF0aW9ucyBpbiBydGVfcmN1X3FzYnJfY2hlY2sgQVBJLCB0aGlz DQo+ID4gPiBzZXF1ZW5jZSBzaG91bGQgbm90IGJlIGxhcmdlIGluIG1vc3QgY2FzZXMuIEkgZG8g bm90IGhhdmUgaWRlYXMgb24gaG93IHRvDQo+ID4gbWFrZSB0aGlzIHNlcXVlbmNlIGxvY2stZnJl ZS4NCj4gPiA+DQo+ID4gPiBJZiB0aGUgd3JpdGVyIGlzIG9uIHRoZSBjb250cm9sIHBsYW5lLCBt b3N0IHVzZSBjYXNlcyB3aWxsIHVzZSBtdXRleA0KPiA+ID4gbG9ja3MgZm9yIHN5bmNocm9uaXph dGlvbiBpZiB0aGV5IGFyZSBtdWx0aS10aHJlYWRlZC4gVGhhdCBsb2NrIHNob3VsZCBiZQ0KPiA+ IGVub3VnaCB0byBwcm92aWRlIHRoZSB0aHJlYWQgc2FmZXR5IGZvciB0aGVzZSBBUElzLg0KPiA+ DQo+ID4gSW4gdGhhdCBpcyBjYXNlLCB3aHkgZG8gd2UgbmVlZCByaW5nIGF0IGFsbD8NCj4gPiBG b3Igc3VyZSBwZW9wbGUgY2FuIGNyZWF0ZSB0aGVpciBvd24gcXVldWUgcXVpdGUgZWFzaWx5IHdp dGggbXV0ZXggYW5kIFRBSUxRLg0KPiA+IElmIHBlcmZvcm1hbmNlIGlzIG5vdCBhbiBpc3N1ZSwg dGhleSBjYW4gZXZlbiBhZGQgcHRocmVhZF9jb25kIHRvIGl0LCBhbmQgaGF2ZQ0KPiA+IGFuIGFi aWxpdHkgZm9yIHRoZSBjb25zdW1lciB0byBzbGVlcC93YWtldXAgb24gZW1wdHkvZnVsbCBxdWV1 ZS4NCj4gPg0KPiA+ID4NCj4gPiA+IElmIHRoZSB3cml0ZXIgaXMgbXVsdGktdGhyZWFkZWQgYW5k IGxvY2stZnJlZSwgdGhlbiBvbmUgc2hvdWxkIHVzZSBwZXIgdGhyZWFkDQo+ID4gZGVmZXIgcXVl dWUuDQo+ID4NCj4gPiBJZiB0aGF0J3MgdGhlIG9ubHkgd29ya2luZyBtb2RlbCwgdGhlbiB0aGUg cXVlc3Rpb24gaXMgd2h5IGRvIHdlIG5lZWQgdGhhdCBBUEkNCj4gPiBhdCBhbGw/DQo+ID4gSnVz dCBzaW1wbGUgYXJyYXkgd2l0aCBjb3VudGVyIG9yIGxpbmtlZC1saXN0IHNob3VsZCBkbyBmb3Ig bWFqb3JpdHkgb2YgY2FzZXMuDQo+IFBsZWFzZSBzZWUgdGhlIG90aGVyIHRocmVhZC4NCj4gDQo+ ID4NCj4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+ID4gKwlpZiAoZHEtPnIgPT0gTlVMTCkgew0KPiA+ ID4gPiA+ICsJCXJ0ZV9sb2coUlRFX0xPR19FUlIsIHJ0ZV9yY3VfbG9nX3R5cGUsDQo+ID4gPiA+ ID4gKwkJCSIlcygpOiBkZWZlciBxdWV1ZSBjcmVhdGUgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7DQo+ ID4gPiA+ID4gKwkJcnRlX2ZyZWUoZHEpOw0KPiA+ID4gPiA+ICsJCXJldHVybiBOVUxMOw0KPiA+ ID4gPiA+ICsJfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCWRxLT52ID0gcGFyYW1zLT52Ow0K PiA+ID4gPiA+ICsJZHEtPnNpemUgPSBwYXJhbXMtPnNpemU7DQo+ID4gPiA+ID4gKwlkcS0+ZXNp emUgPSBwYXJhbXMtPmVzaXplOw0KPiA+ID4gPiA+ICsJZHEtPmYgPSBwYXJhbXMtPmY7DQo+ID4g PiA+ID4gKwlkcS0+cCA9IHBhcmFtcy0+cDsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwlyZXR1 cm4gZHE7DQo+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKy8qIEVucXVldWUg b25lIHJlc291cmNlIHRvIHRoZSBkZWZlciBxdWV1ZSB0byBmcmVlIGFmdGVyIHRoZQ0KPiA+ID4g PiA+ICtncmFjZQ0KPiA+ID4gPiA+ICsgKiBwZXJpb2QgaXMgb3Zlci4NCj4gPiA+ID4gPiArICov DQo+ID4gPiA+ID4gK2ludCBydGVfcmN1X3FzYnJfZHFfZW5xdWV1ZShzdHJ1Y3QgcnRlX3JjdV9x c2JyX2RxICpkcSwgdm9pZCAqZSkgew0KPiA+ID4gPiA+ICsJdWludDY0X3QgdG9rZW47DQo+ID4g PiA+ID4gKwl1aW50NjRfdCAqdG1wOw0KPiA+ID4gPiA+ICsJdWludDMyX3QgaTsNCj4gPiA+ID4g PiArCXVpbnQzMl90IGN1cl9zaXplLCBmcmVlX3NpemU7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ICsJaWYgKGRxID09IE5VTEwgfHwgZSA9PSBOVUxMKSB7DQo+ID4gPiA+ID4gKwkJcnRlX2xvZyhS VEVfTE9HX0VSUiwgcnRlX3JjdV9sb2dfdHlwZSwNCj4gPiA+ID4gPiArCQkJIiVzKCk6IEludmFs aWQgaW5wdXQgcGFyYW1ldGVyXG4iLCBfX2Z1bmNfXyk7DQo+ID4gPiA+ID4gKwkJcnRlX2Vycm5v ID0gRUlOVkFMOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCQlyZXR1cm4gMTsNCj4gPiA+ID4N Cj4gPiA+ID4gV2h5IGp1c3Qgbm90IHRvIHJldHVybiAtRUlOVkFMIHN0cmFpZ2h0d2F5Pw0KPiA+ ID4gPiBJIHRoaW5rIHRoZXJlIGlzIG5vIG11Y2ggcG9pbnQgdG8gc2V0IHJ0ZV9lcnJubyBpbiB0 aGF0IGZ1bmN0aW9uIGF0DQo+ID4gPiA+IGFsbCwganVzdCByZXR1cm4gdmFsdWUgc2hvdWxkIGRv Lg0KPiA+ID4gSSBhbSB0cnlpbmcgdG8ga2VlcCB0aGVzZSBjb25zaXN0ZW50IHdpdGggdGhlIGV4 aXN0aW5nIEFQSXMuIFRoZXkgcmV0dXJuIDAgb3IgMQ0KPiA+IGFuZCBzZXQgdGhlIHJ0ZV9lcnJu by4NCj4gPg0KPiA+IEEgbG90IG9mIHB1YmxpYyBEUERLIEFQSSBmdW5jdGlvbnMgZG8gdXNlIHJl dHVybiB2YWx1ZSB0byByZXR1cm4gc3RhdHVzIGNvZGUgKDAsDQo+ID4gb3Igc29tZSBwb3NpdGl2 ZSBudW1iZXJzIG9mIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIHZhbHVlcyBvbiBmYWlsdXJlKSwg SSBhbQ0KPiA+IG5vdCBpbnZlbnRpbmcgYW55dGhpbmcgbmV3IGhlcmUuDQo+IEFncmVlLCB5b3Ug YXJlIG5vdCBwcm9wb3NpbmcgYSBuZXcgdGhpbmcgaGVyZS4gTWF5IGJlIEkgd2FzIG5vdCBjbGVh ci4gSSByZWFsbHkgZG8gbm90IGhhdmUgYW4gb3BpbmlvbiBvbiBob3cgdGhpcyBzaG91bGQgYmUg ZG9uZS4gQnV0LCBJIGRvDQo+IGhhdmUgYW4gb3BpbmlvbiBvbiBjb25zaXN0ZW5jeS4gVGhlc2Ug bmV3IEFQSXMgZm9sbG93IHdoYXQgaGFzIGJlZW4gZG9uZSBpbiB0aGUgZXhpc3RpbmcgUkNVIEFQ SXMuIEkgdGhpbmsgd2UgaGF2ZSAyIG9wdGlvbnMgaGVyZS4NCj4gMSkgRWl0aGVyIHdlIGNoYW5n ZSBleGlzdGluZyBSQ1UgQVBJcyB0byBnZXQgcmlkIG9mIHJ0ZV9lcnJubyAoaXMgaXQgYW4gQUJJ IGNoYW5nZT8pIG9yDQo+IDIpIFRoZSBuZXcgQVBJcyBmb2xsb3cgd2hhdCBoYXMgYmVlbiBkb25l IGluIHRoZSBleGlzdGluZyBSQ1UgQVBJcy4NCj4gSSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBhcmUg Y29uc2lzdGVudCBhdCBsZWFzdCB3aXRoaW4gUkNVIEFQSXMuDQoNCkJ1dCBhcyBJIGNhbiBzZWUg cmlnaHQgbm93IHJjdSBBUEkgc2V0cyBydGVfZXJybm8gb25seSBmb3IgY29udHJvbC1wYXRoIGZ1 bmN0aW9ucw0KKGdldF9tZW1zaXplLCBpbml0LCByZWdpc3RlciwgdW5yZWdpc3RlciwgZHVtcCku DQpBbGwgZmFzdC1wYXRoIChpbmxpbmUpIGZ1bmN0aW9uIGRvbid0IHNldC91c2UgaXQuDQpTbyBm cm9tIHBlcnNwZWN0aXZlIHRoYXQgaXMgY29uc2lzdGVudCBiZWhhdmlvciwgbm8/DQoNCj4gDQo+ ID4NCj4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+ID4gKwl9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ICsJLyogU3RhcnQgdGhlIGdyYWNlIHBlcmlvZCAqLw0KPiA+ID4gPiA+ICsJdG9rZW4gPSBydGVf cmN1X3FzYnJfc3RhcnQoZHEtPnYpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCS8qIFJlY2xh aW0gcmVzb3VyY2VzIGlmIHRoZSBxdWV1ZSBpcyAxLzh0aCBmdWxsLiBUaGlzIGhlbHBzDQo+ID4g PiA+ID4gKwkgKiB0aGUgcXVldWUgZnJvbSBncm93aW5nIHRvbyBsYXJnZSBhbmQgYWxsb3dzIHRp bWUgZm9yIHJlYWRlcg0KPiA+ID4gPiA+ICsJICogdGhyZWFkcyB0byByZXBvcnQgdGhlaXIgcXVp ZXNjZW50IHN0YXRlLg0KPiA+ID4gPiA+ICsJICovDQo+ID4gPiA+ID4gKwljdXJfc2l6ZSA9IHJ0 ZV9yaW5nX2NvdW50KGRxLT5yKSAvIChkcS0+ZXNpemUvOCArIDEpOw0KPiA+ID4gPg0KPiA+ID4g PiBQcm9iYWJseSB3b3VsZCBiZSBhIGJpdCBlYXNpZXIgaWYgeW91IGp1c3Qgc3RvcmUgaW4gZHEt PmVzaXplIChlbHQNCj4gPiA+ID4gc2l6ZSArIHRva2VuDQo+ID4gPiA+IHNpemUpIC8gOC4NCj4g PiA+IEFncmVlDQo+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiA+ICsJaWYgKGN1cl9zaXplID4gKGRx LT5zaXplID4+IFJURV9SQ1VfUVNCUl9BVVRPX1JFQ0xBSU1fTElNSVQpKSB7DQo+ID4gPiA+DQo+ ID4gPiA+IFdoeSB0byBtYWtlIHRoaXMgdGhyZXNob2xkIHZhbHVlIGhhcmQtY29kZWQ/DQo+ID4g PiA+IFdoeSBlaXRoZXIgbm90IHRvIHB1dCBpdCBpbnRvIGNyZWF0ZSBwYXJhbWV0ZXIsIG9yIGp1 c3QgcmV0dXJuIGENCj4gPiA+ID4gc3BlY2lhbCByZXR1cm4gdmFsdWUsIHRvIGluZGljYXRlIHRo YXQgdGhyZXNob2xkIGlzIHJlYWNoZWQ/DQo+ID4gPiBNeSB0aGlua2luZyB3YXMgdG8ga2VlcCB0 aGUgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGVhc3kgdG8gdXNlLiBUaGUNCj4gPiA+IG1vcmUgdGhl IHBhcmFtZXRlcnMsIHRoZSBtb3JlIHBhaW5mdWwgaXQgaXMgZm9yIHRoZSB1c2VyLiBJTU8sIHRo ZQ0KPiA+ID4gY29uc3RhbnRzIGNob3NlbiBzaG91bGQgYmUgZ29vZCBlbm91Z2ggZm9yIG1vc3Qg Y2FzZXMuIE1vcmUgYWR2YW5jZWQNCj4gPiB1c2VycyBjb3VsZCBtb2RpZnkgdGhlIGNvbnN0YW50 cy4gSG93ZXZlciwgd2UgY291bGQgbWFrZSB0aGVzZSBhcyBwYXJ0IG9mIHRoZQ0KPiA+IHBhcmFt ZXRlcnMsIGJ1dCBtYWtlIHRoZW0gb3B0aW9uYWwgZm9yIHRoZSB1c2VyLiBGb3IgZXg6IGlmIHRo ZXkgc2V0IHRoZW0gdG8gMCwNCj4gPiBkZWZhdWx0IHZhbHVlcyBjYW4gYmUgdXNlZC4NCj4gPiA+ DQo+ID4gPiA+IE9yIGV2ZW4gcmV0dXJuIG51bWJlciBvZiBmaWxsZWQvZnJlZSBlbnRyb2VzIG9u IHN1Y2Nlc3MsIHNvIGNhbGxlcg0KPiA+ID4gPiBjYW4gZGVjaWRlIHRvIHJlY2xhaW0gb3Igbm90 IGJhc2VkIG9uIHRoYXQgaW5mb3JtYXRpb24gb24gaGlzIG93bj8NCj4gPiA+IFRoaXMgbWVhbnMg bW9yZSBjb2RlIG9uIHRoZSB1c2VyIHNpZGUuDQo+ID4NCj4gPiBJIHBlcnNvbmFsbHkgdGhpbmsg aXQgaXQgcmVhbGx5IHdvdWxkbid0IGJlIHRoYXQgYmlnIHByb2JsZW0gdG8gdGhlIHVzZXIgdG8g cGFzcw0KPiA+IGV4dHJhIHBhcmFtZXRlciB0byB0aGUgZnVuY3Rpb24uDQo+IEkgd2lsbCBjb252 ZXJ0IHRoZSAyIGNvbnN0YW50cyBpbnRvIG9wdGlvbmFsIHBhcmFtZXRlcnMgKHVzZXIgY2FuIHNl dCB0aGVtIHRvIDAgdG8gbWFrZSB0aGUgYWxnb3JpdGhtIHVzZSBkZWZhdWx0IHZhbHVlcykNCj4g DQo+ID4gQWdhaW4gd2hhdCBpZiB1c2VyIGRvZXNuJ3Qgd2FudCB0byByZWNsYWltKCkgaW4gZW5x dWV1ZSgpIHRocmVhZCBhdCBhbGw/DQo+ICdlbnF1ZXVlJyBoYXMgdG8gZG8gcmVjbGFtYXRpb24g aWYgdGhlIGRlZmVyIHF1ZXVlIGlzIGZ1bGwuIEkgZG8gbm90IHRoaW5rIHRoaXMgaXMgdHJpdmlh bC4NCj4gDQo+IEluIHRoZSBjdXJyZW50IGRlc2lnbiwgcmVjbGFtYXRpb24gaW4gZW5xdWV1ZSBp cyBhbHNvIGRvbmUgb24gcmVndWxhciBiYXNpcyAoYXV0b21hdGljIHRyaWdnZXJpbmcgb2YgcmVj bGFtYXRpb24gd2hlbiB0aGUgcXVldWUgcmVhY2hlcw0KPiBjZXJ0YWluIGxpbWl0KSB0byBrZWVw IHRoZSBxdWV1ZSBmcm9tIGdyb3dpbmcgdG9vIGxhcmdlLiBUaGlzIGlzIHJlcXVpcmVkIHdoZW4g d2UgaW1wbGVtZW50IGEgZHluYW1pY2FsbHkgYWRqdXN0aW5nIGRlZmVyIHF1ZXVlLiBUaGUNCj4g Y3VycmVudCBhbGdvcml0aG0ga2VlcHMgdGhlIGNvc3Qgb2YgcmVjbGFtYXRpb24gc3ByZWFkIGFj cm9zcyBtdWx0aXBsZSBjYWxscyBhbmQgcHV0cyBhbiB1cHBlciBib3VuZCBvbiBjeWNsZXMgZm9y IGRlbGV0ZSBBUEkgYnkgcmVjbGFpbWluZw0KPiBhIGZpeGVkIG51bWJlciBvZiBlbnRyaWVzLg0K PiANCj4gVGhpcyBhbGdvcml0aG0gaXMgcHJvdmVuIHRvIHdvcmsgaW4gdGhlIExQTSBpbnRlZ3Jh dGlvbiBwZXJmb3JtYW5jZSB0ZXN0cyBhdCBhIHZlcnkgbG93IHBlcmZvcm1hbmNlIG92ZXIgaGVh ZCAofjElKS4gU28sIEkgZG8gbm90IGtub3cNCj4gd2h5IGEgdXNlciB3b3VsZCBub3Qgd2FudCB0 byB1c2UgdGhpcy4gDQoNClllaCwgSSBsb29rZWQgYXQgTFBNIGltcGxlbWVudGF0aW9uIGFuZCBv bmUgdGhpbmcgSSBmb3VuZCBzdHJhbmdlIC0NCmRlZmVyX3F1ZXVlIGlzIGhpZGRlbiBpbnNpZGUg TFBNIHN0cnVjdCBhbmQgYWxsIHJlY2xhbWF0aW9ucyBhcmUgZG9uZSBpbnRlcm5hbGx5Lg0KWWVz IGZvciBzdXJlIGl0IGFsbG93cyB0byBkZWZlciBhbmQgZ3JvdXAgYWN0dWFsIHJlY2xhaW0oKSwg d2hpY2ggaG9wZWZ1bGx5IHdpbGwgbGVhZCB0byBiZXR0ZXIgcGVyZm9ybWFuY2UuDQpCdXQgd2h5 IG5vdCB0byBhbGxvdyB1c2VyIHRvIGNhbGwgcmVjbGFpbSgpIGZvciBpdCBkaXJlY3RseSB0b28/ DQpJbiB0aGF0IHdheSB1c2VyIG1pZ2h0IGF2b2lkLyhtaW5pbWl6ZSkgZG9pbmcgcmVjbGFpbSgp IGluIExQTSB3cml0ZSgpIGF0IGFsbC4NCkFuZCBsZXQgc2F5IGRvIGl0IHNvbWV3aGVyZSBsYXRl ciBpbiB0aGUgc2FtZSB0aHJlYWQgKHdoZW4gbm8gb3RoZXIgdGFza3MgdG8gZG8pLA0Kb3IgZXZl biBsZWF2ZSBpdCB0byBzb21lIG90aGVyIGhvdXNlLWtlZXBpbmcgdGhyZWFkIHRvIGRvIChzb3J0 IG9mIGdhcmJhZ2UgY29sbGVjdG9yKS4NCk9yIHN1Y2ggbW9kZSBpcyBub3Qgc3VwcG9ydGVkL3Bs YW5uZWQ/DQoNCj4gVGhlIDIgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIHNob3VsZCBnaXZlIHRoZSB1 c2VyIG1vcmUgZmxleGliaWxpdHkuDQoNCk9rLCBsZXQncyBrZWVwIGl0IGFzIGNvbmZpZyBwYXJh bXMuDQpBZnRlciBhbm90aGVyIHRob3VnaCAtIEkgdGhpbmsgeW91IHJpZ2h0LCBpdCBzaG91bGQg YmUgZ29vZCBlbm91Z2guDQoNCj4gDQo+IEhvd2V2ZXIsIGlmIHRoZSB1c2VyIHdhbnRzIGhpcyBv d24gYWxnb3JpdGhtLCBoZSBjYW4gY3JlYXRlIG9uZSB3aXRoIHRoZSBiYXNlIEFQSXMgcHJvdmlk ZWQuDQo+IA0KPiA+DQo+ID4gPiBJIHRoaW5rIGFkZGluZyB0aGVzZSB0byBwYXJhbWV0ZXJzIHNl ZW1zIGxpa2UgYSBiZXR0ZXIgb3B0aW9uLg0KPiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4gPiArCQly dGVfbG9nKFJURV9MT0dfSU5GTywgcnRlX3JjdV9sb2dfdHlwZSwNCj4gPiA+ID4gPiArCQkJIiVz KCk6IFRyaWdnZXJpbmcgcmVjbGFtYXRpb25cbiIsIF9fZnVuY19fKTsNCj4gPiA+ID4gPiArCQly dGVfcmN1X3FzYnJfZHFfcmVjbGFpbShkcSk7DQo+ID4gPiA+ID4gKwl9DQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICsJLyogQ2hlY2sgaWYgdGhlcmUgaXMgc3BhY2UgZm9yIGF0bGVhc3QgZm9yIDEg cmVzb3VyY2UgKi8NCj4gPiA+ID4gPiArCWZyZWVfc2l6ZSA9IHJ0ZV9yaW5nX2ZyZWVfY291bnQo ZHEtPnIpIC8gKGRxLT5lc2l6ZS84ICsgMSk7DQo+ID4gPiA+ID4gKwlpZiAoIWZyZWVfc2l6ZSkg ew0KPiA+ID4gPiA+ICsJCXJ0ZV9sb2coUlRFX0xPR19FUlIsIHJ0ZV9yY3VfbG9nX3R5cGUsDQo+ ID4gPiA+ID4gKwkJCSIlcygpOiBEZWZlciBxdWV1ZSBpcyBmdWxsXG4iLCBfX2Z1bmNfXyk7DQo+ ID4gPiA+ID4gKwkJcnRlX2Vycm5vID0gRU5PU1BDOw0KPiA+ID4gPiA+ICsJCXJldHVybiAxOw0K PiA+ID4gPiA+ICsJfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCS8qIEVucXVldWUgdGhlIHJl c291cmNlICovDQo+ID4gPiA+ID4gKwlydGVfcmluZ19zcF9lbnF1ZXVlKGRxLT5yLCAodm9pZCAq KSh1aW50cHRyX3QpdG9rZW4pOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCS8qIFRoZSByZXNv dXJjZSB0byBlbnF1ZXVlIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNjRiDQo+ID4gPiA+ID4g KwkgKiBkdWUgdG8gdGhlIGxpbWl0YXRpb24gb2YgdGhlIHJ0ZV9yaW5nIGltcGxlbWVudGF0aW9u Lg0KPiA+ID4gPiA+ICsJICovDQo+ID4gPiA+ID4gKwlmb3IgKGkgPSAwLCB0bXAgPSAodWludDY0 X3QgKillOyBpIDwgZHEtPmVzaXplLzg7IGkrKywgdG1wKyspDQo+ID4gPiA+ID4gKwkJcnRlX3Jp bmdfc3BfZW5xdWV1ZShkcS0+ciwgKHZvaWQgKikodWludHB0cl90KSp0bXApOw0KPiA+ID4gPg0K PiA+ID4gPg0KPiA+ID4gPiBUaGF0IHdob2xlIGNvbnN0cnVjdGlvbiBhYm92ZSBsb29rcyBhIGJp dCBjbHVtc3kgYW5kIGVycm9yIHByb25lLi4uDQo+ID4gPiA+IEkgc3VwcG9zZSBqdXN0Og0KPiA+ ID4gPg0KPiA+ID4gPiBjb25zdCB1aW50MzJfdCBuYl9lbHQgPSAgZHEtPmVsdF9zaXplLzggKyAx OyB1aW50MzJfdCBmcmVlLCBuOyAuLi4NCj4gPiA+ID4gbiA9IHJ0ZV9yaW5nX2VucXVldWVfYnVs ayhkcS0+ciwgZSwgbmJfZWx0LCAmZnJlZSk7IGlmIChuID09IDApDQo+ID4gPiBZZXMsIGJ1bGsg ZW5xdWV1ZSBjYW4gYmUgdXNlZC4gQnV0IG5vdGUgdGhhdCBvbmNlIHRoZSBmbGV4aWJsZSBlbGVt ZW50IHNpemUNCj4gPiByaW5nIHBhdGNoIGlzIGRvbmUsIHRoaXMgY29kZSB3aWxsIHVzZSB0aGF0 Lg0KPiA+DQo+ID4gV2VsbCwgd2hlbiBpdCB3aWxsIGJlIGluIHRoZSBtYWlubGluZSwgYW5kIGl0 IHdvdWxkIHByb3ZpZGUgYSBiZXR0ZXIgd2F5LCBmb3Igc3VyZQ0KPiA+IHRoaXMgY29kZSBjYW4g YmUgdXBkYXRlZCB0byB1c2UgbmV3IEFQSSAoaWYgaXQgaXMgcHJvdmlkZSBzb21lIGltcHJvdmVt ZW50cykuDQo+ID4gQnV0IGFzIEkgdWRlbnJzdGFuZCwgcmlnaHQgbm93IGl0IGlzIG5vdCB0aGVy ZSwgd2hpbGUgYnVsayBlbnF1ZXVlL2RlcXVldWUgYXJlLg0KPiBBcG9sb2dpZXMsIEkgd2FzIG5v dCBjbGVhci4gSSBhZ3JlZSB3ZSBjYW4gZ28gd2l0aCBidWxrIEFQSXMgZm9yIG5vdy4NCj4gDQo+ ID4NCj4gPiA+DQo+ID4gPiA+ICAgcmV0dXJuIC1FTk9TUEM7DQo+ID4gPiA+IHJldHVybiBmcmVl Ow0KPiA+ID4gPg0KPiA+ID4gPiBUaGF0IHdheSBJIHRoaW5rIHlvdSBjYW4gaGF2ZSBNVC1zYWZl IHZlcnNpb24gb2YgdGhhdCBmdW5jdGlvbi4NCj4gPiA+IFBsZWFzZSBzZWUgdGhlIGRlc2NyaXB0 aW9uIG9mIE1UIHNhZmUgaXNzdWUgYWJvdmUuDQo+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiA+ICsN Cj4gPiA+ID4gPiArCXJldHVybiAwOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4g PiA+ICsvKiBSZWNsYWltIHJlc291cmNlcyBmcm9tIHRoZSBkZWZlciBxdWV1ZS4gKi8gaW50DQo+ ID4gPiA+ID4gK3J0ZV9yY3VfcXNicl9kcV9yZWNsYWltKHN0cnVjdCBydGVfcmN1X3FzYnJfZHEg KmRxKSB7DQo+ID4gPiA+ID4gKwl1aW50MzJfdCBtYXhfY250Ow0KPiA+ID4gPiA+ICsJdWludDMy X3QgY250Ow0KPiA+ID4gPiA+ICsJdm9pZCAqdG9rZW47DQo+ID4gPiA+ID4gKwl1aW50NjRfdCAq dG1wOw0KPiA+ID4gPiA+ICsJdWludDMyX3QgaTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwlp ZiAoZHEgPT0gTlVMTCkgew0KPiA+ID4gPiA+ICsJCXJ0ZV9sb2coUlRFX0xPR19FUlIsIHJ0ZV9y Y3VfbG9nX3R5cGUsDQo+ID4gPiA+ID4gKwkJCSIlcygpOiBJbnZhbGlkIGlucHV0IHBhcmFtZXRl clxuIiwgX19mdW5jX18pOw0KPiA+ID4gPiA+ICsJCXJ0ZV9lcnJubyA9IEVJTlZBTDsNCj4gPiA+ ID4gPiArDQo+ID4gPiA+ID4gKwkJcmV0dXJuIDE7DQo+ID4gPiA+DQo+ID4gPiA+IFNhbWUgc3Rv cnkgYXMgYWJvdmUgLSBJIHRoaW5rIHJ0ZV9lcnJubyBpcyBleGNlc3NpdmUgaW4gdGhpcyBmdW5j dGlvbi4NCj4gPiA+ID4gSnVzdCByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIGVub3VnaC4NCj4gPiA+ ID4NCj4gPiA+ID4NCj4gPiA+ID4gPiArCX0NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwkvKiBB bnl0aGluZyB0byByZWNsYWltPyAqLw0KPiA+ID4gPiA+ICsJaWYgKHJ0ZV9yaW5nX2NvdW50KGRx LT5yKSA9PSAwKQ0KPiA+ID4gPiA+ICsJCXJldHVybiAwOw0KPiA+ID4gPg0KPiA+ID4gPiBOb3Qg c3VyZSB5b3UgbmVlZCB0aGF0LCBzZWUgYmVsb3cuDQo+ID4gPiA+DQo+ID4gPiA+ID4gKw0KPiA+ ID4gPiA+ICsJLyogUmVjbGFpbSBhdCB0aGUgbWF4IDEvMTZ0aCB0aGUgdG90YWwgbnVtYmVyIG9m IGVudHJpZXMuICovDQo+ID4gPiA+ID4gKwltYXhfY250ID0gZHEtPnNpemUgPj4gUlRFX1JDVV9R U0JSX01BWF9SRUNMQUlNX0xJTUlUOw0KPiA+ID4gPiA+ICsJbWF4X2NudCA9IChtYXhfY250ID09 IDApID8gZHEtPnNpemUgOiBtYXhfY250Ow0KPiA+ID4gPg0KPiA+ID4gPiBBZ2FpbiB3aHkgbm90 IHRvIG1ha2UgbWF4X2NudCBhIGNvbmZpZ3VyYWJsZSBhdCBjcmVhdGUoKSBwYXJhbWV0ZXI/DQo+ ID4gPiBJIHRoaW5rIG1ha2luZyB0aGlzIGFzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciBmb3IgY3Jl YXRpbmcgZGVmZXIgcXVldWUgaXMgYQ0KPiA+IGJldHRlciBvcHRpb24uDQo+ID4gPg0KPiA+ID4g PiBPciBldmVuIGEgcGFyYW1ldGVyIGZvciB0aGF0IGZ1bmN0aW9uPw0KPiA+ID4gPg0KPiA+ID4g PiA+ICsJY250ID0gMDsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwkvKiBDaGVjayByZWFkZXIg dGhyZWFkcyBxdWllc2NlbnQgc3RhdGUgYW5kIHJlY2xhaW0gcmVzb3VyY2VzICovDQo+ID4gPiA+ ID4gKwl3aGlsZSAoKGNudCA8IG1heF9jbnQpICYmIChydGVfcmluZ19wZWVrKGRxLT5yLCAmdG9r ZW4pID09IDApICYmDQo+ID4gPiA+ID4gKwkJKHJ0ZV9yY3VfcXNicl9jaGVjayhkcS0+diwgKHVp bnQ2NF90KSgodWludHB0cl90KXRva2VuKSwgZmFsc2UpDQo+ID4gPiA+ID4gKwkJCT09IDEpKSB7 DQo+ID4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+ID4gKwkJKHZvaWQpcnRlX3Jpbmdfc2NfZGVxdWV1 ZShkcS0+ciwgJnRva2VuKTsNCj4gPiA+ID4gPiArCQkvKiBUaGUgcmVzb3VyY2UgdG8gZGVxdWV1 ZSBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDY0Yg0KPiA+ID4gPiA+ICsJCSAqIGR1ZSB0byB0 aGUgbGltaXRhdGlvbiBvZiB0aGUgcnRlX3JpbmcgaW1wbGVtZW50YXRpb24uDQo+ID4gPiA+ID4g KwkJICovDQo+ID4gPiA+ID4gKwkJZm9yIChpID0gMCwgdG1wID0gKHVpbnQ2NF90ICopZHEtPmU7 IGkgPCBkcS0+ZXNpemUvODsNCj4gPiA+ID4gPiArCQkJaSsrLCB0bXArKykNCj4gPiA+ID4gPiAr CQkJKHZvaWQpcnRlX3Jpbmdfc2NfZGVxdWV1ZShkcS0+ciwNCj4gPiA+ID4gPiArCQkJCQkodm9p ZCAqKSh1aW50cHRyX3QpdG1wKTsNCj4gPiA+ID4NCj4gPiA+ID4gQWdhaW4sIG5vIG5lZWQgZm9y IHN1Y2ggY29uc3RydWN0cyB3aXRoIG11bHRpcGxlIGRlcXVldWVyIEkgYmVsaWV2ZS4NCj4gPiA+ ID4gSnVzdDoNCj4gPiA+ID4NCj4gPiA+ID4gY29uc3QgdWludDMyX3QgbmJfZWx0ID0gIGRxLT5l bHRfc2l6ZS84ICsgMTsgdWludDMyX3QgbjsgdWludHB0cl90DQo+ID4gPiA+IGVsdFtuYl9lbHRd OyAuLi4NCj4gPiA+ID4gbiA9IHJ0ZV9yaW5nX2RlcXVldWVfYnVsayhkcS0+ciwgZWx0LCBuYl9l bHQsIE5VTEwpOyBpZiAobiAhPSAwKQ0KPiA+ID4gPiB7ZHEtPmYoZHEtPnAsIGVsdCk7fQ0KPiA+ ID4gQWdyZWUgb24gYnVsayBBUEkgdXNlLg0KPiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4gU2VlbXMg ZW5vdWdoLg0KPiA+ID4gPiBBZ2FpbiBpbiB0aGF0IGNhc2UgeW91IGNhbiBoYXZlIGVucXVldWUv cmVjbGFpbSBydW5uaW5nIGluIGRpZmZlcmVudA0KPiA+ID4gPiB0aHJlYWRzIHNpbXVsdGFuZW91 c2x5LCBwbHVzIHlvdSBkb24ndCBuZWVkIGRxLT5lIGF0IGFsbC4NCj4gPiA+IFdpbGwgY2hlY2sg b24gZHEtPmUNCj4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+ID4gKwkJZHEtPmYoZHEtPnAsIGRxLT5l KTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwkJY250Kys7DQo+ID4gPiA+ID4gKwl9DQo+ID4g PiA+ID4gKw0KPiA+ID4gPiA+ICsJcnRlX2xvZyhSVEVfTE9HX0lORk8sIHJ0ZV9yY3VfbG9nX3R5 cGUsDQo+ID4gPiA+ID4gKwkJIiVzKCk6IFJlY2xhaW1lZCAldSByZXNvdXJjZXNcbiIsIF9fZnVu Y19fLCBjbnQpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCWlmIChjbnQgPT0gMCkgew0KPiA+ ID4gPiA+ICsJCS8qIE5vIHJlc291cmNlcyB3ZXJlIHJlY2xhaW1lZCAqLw0KPiA+ID4gPiA+ICsJ CXJ0ZV9lcnJubyA9IEVBR0FJTjsNCj4gPiA+ID4gPiArCQlyZXR1cm4gMTsNCj4gPiA+ID4gPiAr CX0NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ID4NCj4gPiA+ID4g SSdkIHN1Z2dlc3QgdG8gcmV0dXJuIGNudCBvbiBzdWNjZXNzLg0KPiA+ID4gSSBhbSB0cnlpbmcg dG8ga2VlcCB0aGUgQVBJcyBzaW1wbGUuIEkgZG8gbm90IHNlZSBtdWNoIHVzZSBmb3IgJ2NudCcN Cj4gPiA+IGFzIHJldHVybiB2YWx1ZSB0byB0aGUgdXNlci4gSXQgZXhwb3NlcyBtb3JlIGRldGFp bHMgd2hpY2ggSSB0aGluayBhcmUgaW50ZXJuYWwNCj4gPiB0byB0aGUgbGlicmFyeS4NCj4gPg0K PiA+IE5vdCBzdXJlIHdoYXQgaXMgdGhlIGhhc3NsZSB0byByZXR1cm4gbnVtYmVyIG9mIGNvbXBs ZXRlZCByZWNsYW1haXRpb25zPw0KPiA+IElmIHVzZXIgZG9lc24ndCBuZWVkIHRoYXQgaW5mb3Jt YXRpb24sIGhlIHNpbXBseSB3b3VsZG4ndCB1c2UgaXQuDQo+ID4gQnV0IG1pZ2h0IGJlIGl0IHdv dWxkIGJlIHVzZWZ1bGwgLSBoZSBjYW4gZGVjaWRlIHNob3VsZCBoZSB0cnkgYW5vdGhlciBhdHRl bXB0DQo+ID4gb2YgcmVjbGFpbSgpIGltbWVkaWF0ZWx5IG9yIGlzIGl0IG9rIHRvIGRvIHNvbWV0 aGluZyBlbHNlLg0KPiBUaGVyZSBpcyBubyBoYXNzbGUgdG8gcmV0dXJuIHRoYXQgaW5mb3JtYXRp b24uDQo+IA0KPiBBcyBwZXIgdGhlIGN1cnJlbnQgZGVzaWduLCB1c2VyIGNhbGxzICdyZWNsYWlt JyB3aGVuIGl0IGlzIG91dCBvZiByZXNvdXJjZXMgd2hpbGUgYWRkaW5nIGFuIGVudHJ5IHRvIHRo ZSBkYXRhIHN0cnVjdHVyZS4gQXQgdGhhdCBwb2ludCB0aGUgdXNlcg0KPiB3YW50cyB0byBrbm93 IGlmIGF0IGxlYXN0IDEgcmVzb3VyY2Ugd2FzIHJlY2xhaW1lZCBiZWNhdXNlIHRoZSB1c2VyIGhh cyB0byBhbGxvY2F0ZSAxIHJlc291cmNlLiBIZSBkb2VzIG5vdCBoYXZlIGEgdXNlIGZvciB0aGUg bnVtYmVyIG9mDQo+IHJlc291cmNlcyByZWNsYWltZWQuDQoNCk9rLCBidXQgd2h5IHVzZXIgY2Fu J3QgZGVjaWRlIHRvIGRvIHJlY2xhaW0gaW4gYWR2YW5jZSwgbGV0IHNheSB3aGVuIGhlIGZvcmVz ZWUgdGhhdCBoZSB3b3VsZCBuZWVkIGEgbG90IG9mIGFsbG9jYXRpb25zIGluIG5lYXJlc3QgZnV0 dXJlPw0KT3Igd2hlbiB0aGVyZSBpcyBzb21lIGlkbGUgdGltZT8gT3Igc29tZSBjb21iaW5hdGlv biBvZiB0aGVzZSB0aGluZ3M/DQpBdCBoZSB3b3VsZCBsaWtlIHRvIGZyZWUgc29tZSBleHRyYSBy ZXNvdXJjZXMgaW4gdGhhdCBjYXNlIHRvIG1pbmltaXplIG51bWJlciBvZiByZWNsYWltcyBpbiBm dXR1cmUgcGVhayBpbnRlcnZhbD8NCg0KPiANCj4gSWYgdGhpcyBBUEkgcmV0dXJucyAwLCB0aGVu IHRoZSB1c2VyIGNhbiBkZWNpZGUgdG8gcmVwZWF0IHRoZSBjYWxsIG9yIHJldHVybiBmYWlsdXJl LiBCdXQgdGhhdCBkZWNpc2lvbiBkZXBlbmRzIG9uIHRoZSBsZW5ndGggb2YgdGhlIGdyYWNlIHBl cmlvZA0KPiB3aGljaCBpcyB1bmRlciB1c2VyJ3MgY29udHJvbC4NCj4gDQo+ID4NCj4gPiA+DQo+ ID4gPiA+DQo+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKy8qIERlbGV0ZSBh IGRlZmVyIHF1ZXVlLiAqLw0KPiA+ID4gPiA+ICtpbnQNCj4gPiA+ID4gPiArcnRlX3JjdV9xc2Jy X2RxX2RlbGV0ZShzdHJ1Y3QgcnRlX3JjdV9xc2JyX2RxICpkcSkgew0KPiA+ID4gPiA+ICsJaWYg KGRxID09IE5VTEwpIHsNCj4gPiA+ID4gPiArCQlydGVfbG9nKFJURV9MT0dfRVJSLCBydGVfcmN1 X2xvZ190eXBlLA0KPiA+ID4gPiA+ICsJCQkiJXMoKTogSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJc biIsIF9fZnVuY19fKTsNCj4gPiA+ID4gPiArCQlydGVfZXJybm8gPSBFSU5WQUw7DQo+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ICsJCXJldHVybiAxOw0KPiA+ID4gPiA+ICsJfQ0KPiA+ID4gPiA+ICsN Cj4gPiA+ID4gPiArCS8qIFJlY2xhaW0gYWxsIHRoZSByZXNvdXJjZXMgKi8NCj4gPiA+ID4gPiAr CWlmIChydGVfcmN1X3FzYnJfZHFfcmVjbGFpbShkcSkgIT0gMCkNCj4gPiA+ID4gPiArCQkvKiBF cnJvciBudW1iZXIgaXMgYWxyZWFkeSBzZXQgYnkgdGhlIHJlY2xhaW0gQVBJICovDQo+ID4gPiA+ ID4gKwkJcmV0dXJuIDE7DQo+ID4gPiA+DQo+ID4gPiA+IEhvdyBkbyB5b3Uga25vdyB0aGF0IHlv dSBoYXZlIHJlY2xhaW1lZCBldmVyeXRoaW5nPw0KPiA+ID4gR29vZCBwb2ludCwgd2lsbCBjb21l IGJhY2sgd2l0aCBhIGRpZmZlcmVudCBzb2x1dGlvbi4NCj4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ICsJcnRlX3JpbmdfZnJlZShkcS0+cik7DQo+ID4gPiA+ID4gKwlydGVf ZnJlZShkcSk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJcmV0dXJuIDA7DQo+ID4gPiA+ID4g K30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gIGludCBydGVfcmN1X2xvZ190eXBlOw0KPiA+ID4g PiA+DQo+ID4gPiA+ID4gIFJURV9JTklUKHJ0ZV9yY3VfcmVnaXN0ZXIpDQo+ID4gPiA+ID4gZGlm ZiAtLWdpdCBhL2xpYi9saWJydGVfcmN1L3J0ZV9yY3VfcXNici5oDQo+ID4gPiA+ID4gYi9saWIv bGlicnRlX3JjdS9ydGVfcmN1X3FzYnIuaCBpbmRleCBjODBmMTVjMDAuLjE4NWQ0YjUwYSAxMDA2 NDQNCj4gPiA+ID4gPiAtLS0gYS9saWIvbGlicnRlX3JjdS9ydGVfcmN1X3FzYnIuaA0KPiA+ID4g PiA+ICsrKyBiL2xpYi9saWJydGVfcmN1L3J0ZV9yY3VfcXNici5oDQo+ID4gPiA+ID4gQEAgLTM0 LDYgKzM0LDcgQEAgZXh0ZXJuICJDIiB7DQo+ID4gPiA+ID4gICNpbmNsdWRlIDxydGVfbGNvcmUu aD4NCj4gPiA+ID4gPiAgI2luY2x1ZGUgPHJ0ZV9kZWJ1Zy5oPg0KPiA+ID4gPiA+ICAjaW5jbHVk ZSA8cnRlX2F0b21pYy5oPg0KPiA+ID4gPiA+ICsjaW5jbHVkZSA8cnRlX3JpbmcuaD4NCj4gPiA+ ID4gPg0KPiA+ID4gPiA+ICBleHRlcm4gaW50IHJ0ZV9yY3VfbG9nX3R5cGU7DQo+ID4gPiA+ID4N Cj4gPiA+ID4gPiBAQCAtMTA5LDYgKzExMCw2NyBAQCBzdHJ1Y3QgcnRlX3JjdV9xc2JyIHsNCj4g PiA+ID4gPiAgCSAqLw0KPiA+ID4gPiA+ICB9IF9fcnRlX2NhY2hlX2FsaWduZWQ7DQo+ID4gPiA+ ID4NCj4gPiA+ID4gPiArLyoqDQo+ID4gPiA+ID4gKyAqIENhbGwgYmFjayBmdW5jdGlvbiBjYWxs ZWQgdG8gZnJlZSB0aGUgcmVzb3VyY2VzLg0KPiA+ID4gPiA+ICsgKg0KPiA+ID4gPiA+ICsgKiBA cGFyYW0gcA0KPiA+ID4gPiA+ICsgKiAgIFBvaW50ZXIgcHJvdmlkZWQgd2hpbGUgY3JlYXRpbmcg dGhlIGRlZmVyIHF1ZXVlDQo+ID4gPiA+ID4gKyAqIEBwYXJhbSBlDQo+ID4gPiA+ID4gKyAqICAg UG9pbnRlciB0byB0aGUgcmVzb3VyY2UgZGF0YSBzdG9yZWQgb24gdGhlIGRlZmVyIHF1ZXVlDQo+ ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gKyAqIEByZXR1cm4NCj4gPiA+ID4gPiArICogICBOb25l DQo+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ICt0eXBlZGVmIHZvaWQgKCpydGVfcmN1X3FzYnJf ZnJlZV9yZXNvdXJjZSkodm9pZCAqcCwgdm9pZCAqZSk7DQo+ID4gPiA+DQo+ID4gPiA+IFN0eWxp c2ggdGhpbmcgLSB1c3VhbGx5IGluIERQREsgd2UgaGF2ZSB0eXBlZGYgbmV3dHlwZV90IC4uLg0K PiA+ID4gPiBUaG91Z2ggSSBhbSBub3Qgc3VyZSB5b3UgbmVlZCBhIG5ldyB0eXBlZGVmIGF0IGFs bCAtIGp1c3QgYSBmdW5jdGlvbg0KPiA+ID4gPiBwb2ludGVyIGluc2lkZSB0aGUgc3RydWN0IHNl ZW1zIGVub3VnaC4NCj4gPiA+IE90aGVyIGxpYnJhcmllcyAoZm9yIGV4OiBydGVfaGFzaCkgdXNl IHRoaXMgYXBwcm9hY2guIEkgdGhpbmsgaXQgaXMgYmV0dGVyIHRvIGtlZXANCj4gPiBpdCBvdXQg b2YgdGhlIHN0cnVjdHVyZSB0byBhbGxvdyBmb3IgYmV0dGVyIGNvbW1lbnRpbmcuDQo+ID4NCj4g PiBJIGFtIHNheWluZyBtYWpvcml0eSBvZiBEUERLIGNvZGUgdXNlIF90IHN1ZmZpeCBmb3IgdHlw ZWRlZjoNCj4gPiB0eXBlZGVmIHZvaWQgKCpydGVfcmN1X3FzYnJfZnJlZV9yZXNvdXJjZV90KSh2 b2lkICpwLCB2b2lkICplKTsNCj4gQXBvbG9naWVzLCBnb3QgaXQsIHdpbGwgY2hhbmdlLg0KPiAN Cj4gPg0KPiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyNkZWZpbmUgUlRF X1JDVV9RU0JSX0RRX05BTUVTSVpFIFJURV9SSU5HX05BTUVTSVpFDQo+ID4gPiA+ID4gKw0KPiA+ ID4gPiA+ICsvKioNCj4gPiA+ID4gPiArICogIFRyaWdnZXIgYXV0b21hdGljIHJlY2xhbWF0aW9u IGFmdGVyIDEvOHRoIHRoZSBkZWZlciBxdWV1ZSBpcyBmdWxsLg0KPiA+ID4gPiA+ICsgKi8NCj4g PiA+ID4gPiArI2RlZmluZSBSVEVfUkNVX1FTQlJfQVVUT19SRUNMQUlNX0xJTUlUIDMNCj4gPiA+ ID4gPiArDQo+ID4gPiA+ID4gKy8qKg0KPiA+ID4gPiA+ICsgKiAgUmVjbGFpbSBhdCB0aGUgbWF4 IDEvMTZ0aCB0aGUgdG90YWwgbnVtYmVyIG9mIHJlc291cmNlcy4NCj4gPiA+ID4gPiArICovDQo+ ID4gPiA+ID4gKyNkZWZpbmUgUlRFX1JDVV9RU0JSX01BWF9SRUNMQUlNX0xJTUlUIDQNCj4gPiA+ ID4NCj4gPiA+ID4NCj4gPiA+ID4gQXMgSSBzYWlkIGFib3ZlLCBJIGRvbid0IHRoaW5rIHRoZXNl IHRocmVzaG9sZHMgbmVlZCB0byBiZSBoYXJkY29kZWQuDQo+ID4gPiA+IEluIGFueSBjYXNlLCB0 aGVyZSBzZWVtcyBub3QgbXVjaCBwb2ludCB0byBwdXQgdGhlbSBpbiB0aGUgcHVibGljIGhlYWRl cg0KPiA+IGZpbGUuDQo+ID4gPiA+DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsvKioNCj4gPiA+ ID4gPiArICogUGFyYW1ldGVycyB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlIGRlZmVyIHF1ZXVlLg0K PiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiArc3RydWN0IHJ0ZV9yY3VfcXNicl9kcV9wYXJhbWV0 ZXJzIHsNCj4gPiA+ID4gPiArCWNvbnN0IGNoYXIgKm5hbWU7DQo+ID4gPiA+ID4gKwkvKio8IE5h bWUgb2YgdGhlIHF1ZXVlLiAqLw0KPiA+ID4gPiA+ICsJdWludDMyX3Qgc2l6ZTsNCj4gPiA+ID4g PiArCS8qKjwgTnVtYmVyIG9mIGVudHJpZXMgaW4gcXVldWUuIFR5cGljYWxseSwgdGhpcyB3aWxs IGJlDQo+ID4gPiA+ID4gKwkgKiAgIHRoZSBzYW1lIGFzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBl bnRyaWVzIHN1cHBvcnRlZCBpbiB0aGUNCj4gPiA+ID4gPiArCSAqICAgbG9jayBmcmVlIGRhdGEg c3RydWN0dXJlLg0KPiA+ID4gPiA+ICsJICogICBEYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmJvdW5k ZWQgbnVtYmVyIG9mIGVudHJpZXMgaXMgbm90DQo+ID4gPiA+ID4gKwkgKiAgIHN1cHBvcnRlZCBj dXJyZW50bHkuDQo+ID4gPiA+ID4gKwkgKi8NCj4gPiA+ID4gPiArCXVpbnQzMl90IGVzaXplOw0K PiA+ID4gPiA+ICsJLyoqPCBTaXplIChpbiBieXRlcykgb2YgZWFjaCBlbGVtZW50IGluIHRoZSBk ZWZlciBxdWV1ZS4NCj4gPiA+ID4gPiArCSAqICAgVGhpcyBoYXMgdG8gYmUgbXVsdGlwbGUgb2Yg OEIgYXMgdGhlIHJ0ZV9yaW5nIEFQSXMNCj4gPiA+ID4gPiArCSAqICAgc3VwcG9ydCA4QiBlbGVt ZW50IHNpemVzIG9ubHkuDQo+ID4gPiA+ID4gKwkgKi8NCj4gPiA+ID4gPiArCXJ0ZV9yY3VfcXNi cl9mcmVlX3Jlc291cmNlIGY7DQo+ID4gPiA+ID4gKwkvKio8IEZ1bmN0aW9uIHRvIGNhbGwgdG8g ZnJlZSB0aGUgcmVzb3VyY2UuICovDQo+ID4gPiA+ID4gKwl2b2lkICpwOw0KPiA+ID4gPg0KPiA+ ID4gPiBTdHlsZSBuaXQgYWdhaW4gLSBJIGxpa2Ugc2hvcnQgbmFtZXMgbXlzZWxmLCBidXQgdGhh dCBzZWVtcyBhIGJpdA0KPiA+ID4gPiBleHRyZW1lLi4uIDopIE1pZ2h0IGJlIGF0IGxlYXN0Og0K PiA+ID4gPiB2b2lkICgqcmVjbGFpbSkodm9pZCAqLCB2b2lkICopOw0KPiA+ID4gTWF5IGJlICdm cmVlX2ZuJz8NCj4gPiA+DQo+ID4gPiA+IHZvaWQgKiByZWNsYWltX2RhdGE7DQo+ID4gPiA+ID8N Cj4gPiA+IFRoaXMgaXMgdGhlIHBvaW50ZXIgdG8gdGhlIGRhdGEgc3RydWN0dXJlIHRvIGZyZWUg dGhlIHJlc291cmNlIGludG8uIEZvciBleDogSW4NCj4gPiBMUE0gZGF0YSBzdHJ1Y3R1cmUsIGl0 IHdpbGwgYmUgcG9pbnRlciB0byBMUE0uICdyZWNsYWltX2RhdGEnDQo+ID4gPiBkb2VzIG5vdCBj b252ZXkgdGhlIG1lYW5pbmcgY29ycmVjdGx5Lg0KPiA+DQo+ID4gT2ssIHBsZWFzZSBmcmVlIHRv IGNvbWV1cCB3aXRoIHlvdXIgb3duIG5hbWVzLg0KPiA+IEkganVzdCB3YW50ZWQgdG8gc2F5IHRo YXQgJ2YnIGFuZCAncCcgYXJlIGEgYml0IGFuIGV4dHJlbWUgZm9yIHB1YmxpYyBBUEkuDQo+IG9r LCB0aGlzIGlzIHRoZSBoYXJkZXN0IHRoaW5nIHRvIGRvIPCfmIoNCj4gDQo+ID4NCj4gPiA+DQo+ ID4gPiA+DQo+ID4gPiA+ID4gKwkvKio8IFBvaW50ZXIgcGFzc2VkIHRvIHRoZSBmcmVlIGZ1bmN0 aW9uLiBUeXBpY2FsbHksIHRoaXMgaXMgdGhlDQo+ID4gPiA+ID4gKwkgKiAgIHBvaW50ZXIgdG8g dGhlIGRhdGEgc3RydWN0dXJlIHRvIHdoaWNoIHRoZSByZXNvdXJjZSB0byBmcmVlDQo+ID4gPiA+ ID4gKwkgKiAgIGJlbG9uZ3MuIFRoaXMgY2FuIGJlIE5VTEwuDQo+ID4gPiA+ID4gKwkgKi8NCj4g PiA+ID4gPiArCXN0cnVjdCBydGVfcmN1X3FzYnIgKnY7DQo+ID4gPiA+DQo+ID4gPiA+IERvZXMg aXQgbmVlZCB0byBiZSBpbnNpZGUgdGhhdCBzdHJ1Y3Q/DQo+ID4gPiA+IE1pZ2h0IGJlIGJldHRl cjoNCj4gPiA+ID4gcnRlX3JjdV9xc2JyX2RxX2NyZWF0ZShzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2 LCBjb25zdCBzdHJ1Y3QNCj4gPiA+ID4gcnRlX3JjdV9xc2JyX2RxX3BhcmFtZXRlcnMgKnBhcmFt cyk7DQo+ID4gPiBUaGUgQVBJIHRha2VzIGEgcGFyYW1ldGVyIHN0cnVjdHVyZSBhcyBpbnB1dCBh bnl3YXksIHdoeSB0byBhZGQNCj4gPiA+IGFub3RoZXIgYXJndW1lbnQgdG8gdGhlIGZ1bmN0aW9u PyBRU0JSIHZhcmlhYmxlIGlzIGFsc28gYW5vdGhlciBwYXJhbWV0ZXIuDQo+ID4gPg0KPiA+ID4g Pg0KPiA+ID4gPiBBbm90aGVyIGFsdGVybmF0aXZlOiBtYWtlIGJvdGggcmVjbGFpbSgpIGFuZCBl bnF1ZXVlKCkgdG8gdGFrZSB2IGFzDQo+ID4gPiA+IGEgcGFyYW1ldGVyLg0KPiA+ID4gQnV0IGJv dGggb2YgdGhlbSBuZWVkIGFjY2VzcyB0byBzb21lIG9mIHRoZSBwYXJhbWV0ZXJzIHByb3ZpZGVk IGluDQo+ID4gPiBydGVfcmN1X3FzYnJfZHFfY3JlYXRlIEFQSS4gV2Ugd291bGQgZW5kIHVwIHBh c3NpbmcgMiBhcmd1bWVudHMgdG8gdGhlDQo+ID4gZnVuY3Rpb25zLg0KPiA+DQo+ID4gUHVyZSBz dHlsaXNoIHRoaW5nLg0KPiA+IEZyb20gbXkgcGVyc3BlY3RpdmUgaXQganVzdCBwcm92aWRlcyBi ZXR0ZXIgdmlzaWJpbGl0eSB3aGF0IGlzIGdvaW5nIGluIHRoZSBjb2RlOg0KPiA+IEZvciBRU0JS IHZhciAndicgY3JlYXRlIGEgbmV3IGRlZmVycmVkIHF1ZXVlLg0KPiA+IEJ1dCBubyBzdHJvbmcg b3BpbmlvbiBoZXJlLg0KPiA+DQo+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiA+ICsJLyoqPCBSQ1Ug UVNCUiB2YXJpYWJsZSB0byB1c2UgZm9yIHRoaXMgZGVmZXIgcXVldWUgKi8gfTsNCj4gPiA+ID4g PiArDQo+ID4gPiA+ID4gKy8qIFJURSBkZWZlciBxdWV1ZSBzdHJ1Y3R1cmUuDQo+ID4gPiA+ID4g KyAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIHRoZSBkZWZlciBxdWV1ZS4gVGhlIGRlZmVyIHF1ZXVl IGlzIHVzZWQNCj4gPiA+ID4gPiArdG8NCj4gPiA+ID4gPiArICogaG9sZCB0aGUgZGVsZXRlZCBl bnRyaWVzIGZyb20gdGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgYXJlIG5vdA0KPiA+ID4gPiA+ICsg KiB5ZXQgZnJlZWQuDQo+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ICtzdHJ1Y3QgcnRlX3JjdV9x c2JyX2RxOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiAgLyoqDQo+ID4gPiA+ID4gICAqIEB3YXJu aW5nDQo+ID4gPiA+ID4gICAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3 aXRob3V0IHByaW9yIG5vdGljZSBAQA0KPiA+ID4gPiA+IC02NDgsNiArNzEwLDExMyBAQCBfX3J0 ZV9leHBlcmltZW50YWwgIGludCAgcnRlX3JjdV9xc2JyX2R1bXAoRklMRQ0KPiA+ID4gPiA+ICpm LCBzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2KTsNCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICsvKioNCj4g PiA+ID4gPiArICogQHdhcm5pbmcNCj4gPiA+ID4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlz IEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+ID4gPiA+ID4gKyAqDQo+ID4g PiA+ID4gKyAqIENyZWF0ZSBhIHF1ZXVlIHVzZWQgdG8gc3RvcmUgdGhlIGRhdGEgc3RydWN0dXJl IGVsZW1lbnRzIHRoYXQNCj4gPiA+ID4gPiArY2FuDQo+ID4gPiA+ID4gKyAqIGJlIGZyZWVkIGxh dGVyLiBUaGlzIHF1ZXVlIGlzIHJlZmVycmVkIHRvIGFzICdkZWZlciBxdWV1ZScuDQo+ID4gPiA+ ID4gKyAqDQo+ID4gPiA+ID4gKyAqIEBwYXJhbSBwYXJhbXMNCj4gPiA+ID4gPiArICogICBQYXJh bWV0ZXJzIHRvIGNyZWF0ZSBhIGRlZmVyIHF1ZXVlLg0KPiA+ID4gPiA+ICsgKiBAcmV0dXJuDQo+ ID4gPiA+ID4gKyAqICAgT24gc3VjY2VzcyAtIFZhbGlkIHBvaW50ZXIgdG8gZGVmZXIgcXVldWUN Cj4gPiA+ID4gPiArICogICBPbiBlcnJvciAtIE5VTEwNCj4gPiA+ID4gPiArICogICBQb3NzaWJs ZSBydGVfZXJybm8gY29kZXMgYXJlOg0KPiA+ID4gPiA+ICsgKiAgIC0gRUlOVkFMIC0gTlVMTCBw YXJhbWV0ZXJzIGFyZSBwYXNzZWQNCj4gPiA+ID4gPiArICogICAtIEVOT01FTSAtIE5vdCBlbm91 Z2ggbWVtb3J5DQo+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ICtfX3J0ZV9leHBlcmltZW50YWwN Cj4gPiA+ID4gPiArc3RydWN0IHJ0ZV9yY3VfcXNicl9kcSAqDQo+ID4gPiA+ID4gK3J0ZV9yY3Vf cXNicl9kcV9jcmVhdGUoY29uc3Qgc3RydWN0IHJ0ZV9yY3VfcXNicl9kcV9wYXJhbWV0ZXJzDQo+ ID4gPiA+ID4gKypwYXJhbXMpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArLyoqDQo+ID4gPiA+ ID4gKyAqIEB3YXJuaW5nDQo+ID4gPiA+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkg bWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPiA+ID4gPiA+ICsgKg0KPiA+ID4gPiA+ ICsgKiBFbnF1ZXVlIG9uZSByZXNvdXJjZSB0byB0aGUgZGVmZXIgcXVldWUgYW5kIHN0YXJ0IHRo ZSBncmFjZSBwZXJpb2QuDQo+ID4gPiA+ID4gKyAqIFRoZSByZXNvdXJjZSB3aWxsIGJlIGZyZWVk IGxhdGVyIGFmdGVyIGF0IGxlYXN0IG9uZSBncmFjZQ0KPiA+ID4gPiA+ICtwZXJpb2QNCj4gPiA+ ID4gPiArICogaXMgb3Zlci4NCj4gPiA+ID4gPiArICoNCj4gPiA+ID4gPiArICogSWYgdGhlIGRl ZmVyIHF1ZXVlIGlzIGZ1bGwsIGl0IHdpbGwgYXR0ZW1wdCB0byByZWNsYWltIHJlc291cmNlcy4N Cj4gPiA+ID4gPiArICogSXQgd2lsbCBhbHNvIHJlY2xhaW0gcmVzb3VyY2VzIGF0IHJlZ3VsYXIg aW50ZXJ2YWxzIHRvIGF2b2lkDQo+ID4gPiA+ID4gKyAqIHRoZSBkZWZlciBxdWV1ZSBmcm9tIGdy b3dpbmcgdG9vIGJpZy4NCj4gPiA+ID4gPiArICoNCj4gPiA+ID4gPiArICogVGhpcyBBUEkgaXMg bm90IG11bHRpLXRocmVhZCBzYWZlLiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZQ0KPiA+ID4gPiA+ ICtjYWxsZXINCj4gPiA+ID4gPiArICogcHJvdmlkZXMgbXVsdGktdGhyZWFkIHNhZmV0eSBieSBs b2NraW5nIGEgbXV0ZXggb3Igc29tZSBvdGhlciBtZWFucy4NCj4gPiA+ID4gPiArICoNCj4gPiA+ ID4gPiArICogQSBsb2NrIGZyZWUgbXVsdGktdGhyZWFkIHdyaXRlciBhbGdvcml0aG0gY291bGQg YWNoaWV2ZQ0KPiA+ID4gPiA+ICttdWx0aS10aHJlYWQNCj4gPiA+ID4gPiArICogc2FmZXR5IGJ5 IGNyZWF0aW5nIGFuZCB1c2luZyBvbmUgZGVmZXIgcXVldWUgcGVyIHRocmVhZC4NCj4gPiA+ID4g PiArICoNCj4gPiA+ID4gPiArICogQHBhcmFtIGRxDQo+ID4gPiA+ID4gKyAqICAgRGVmZXIgcXVl dWUgdG8gYWxsb2NhdGUgYW4gZW50cnkgZnJvbS4NCj4gPiA+ID4gPiArICogQHBhcmFtIGUNCj4g PiA+ID4gPiArICogICBQb2ludGVyIHRvIHJlc291cmNlIGRhdGEgdG8gY29weSB0byB0aGUgZGVm ZXIgcXVldWUuIFRoZSBzaXplIG9mDQo+ID4gPiA+ID4gKyAqICAgdGhlIGRhdGEgdG8gY29weSBp cyBlcXVhbCB0byB0aGUgZWxlbWVudCBzaXplIHByb3ZpZGVkIHdoZW4gdGhlDQo+ID4gPiA+ID4g KyAqICAgZGVmZXIgcXVldWUgd2FzIGNyZWF0ZWQuDQo+ID4gPiA+ID4gKyAqIEByZXR1cm4NCj4g PiA+ID4gPiArICogICBPbiBzdWNjZXNzIC0gMA0KPiA+ID4gPiA+ICsgKiAgIE9uIGVycm9yIC0g MSB3aXRoIHJ0ZV9lcnJubyBzZXQgdG8NCj4gPiA+ID4gPiArICogICAtIEVJTlZBTCAtIE5VTEwg cGFyYW1ldGVycyBhcmUgcGFzc2VkDQo+ID4gPiA+ID4gKyAqICAgLSBFTk9TUEMgLSBEZWZlciBx dWV1ZSBpcyBmdWxsLiBUaGlzIGNvbmRpdGlvbiBjYW4gbm90IGhhcHBlbg0KPiA+ID4gPiA+ICsg KgkJaWYgdGhlIGRlZmVyIHF1ZXVlIHNpemUgaXMgZXF1YWwgKG9yIGxhcmdlcikgdGhhbiB0aGUN Cj4gPiA+ID4gPiArICoJCW51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUu DQo+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gPiA+ID4g PiAraW50DQo+ID4gPiA+ID4gK3J0ZV9yY3VfcXNicl9kcV9lbnF1ZXVlKHN0cnVjdCBydGVfcmN1 X3FzYnJfZHEgKmRxLCB2b2lkICplKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKy8qKg0KPiA+ ID4gPiA+ICsgKiBAd2FybmluZw0KPiA+ID4gPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMg QVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4gPiA+ID4gPiArICoNCj4gPiA+ ID4gPiArICogUmVjbGFpbSByZXNvdXJjZXMgZnJvbSB0aGUgZGVmZXIgcXVldWUuDQo+ID4gPiA+ ID4gKyAqDQo+ID4gPiA+ID4gKyAqIFRoaXMgQVBJIGlzIG5vdCBtdWx0aS10aHJlYWQgc2FmZS4g SXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUNCj4gPiA+ID4gPiArY2FsbGVyDQo+ID4gPiA+ID4gKyAq IHByb3ZpZGVzIG11bHRpLXRocmVhZCBzYWZldHkgYnkgbG9ja2luZyBhIG11dGV4IG9yIHNvbWUg b3RoZXIgbWVhbnMuDQo+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gKyAqIEEgbG9jayBmcmVlIG11 bHRpLXRocmVhZCB3cml0ZXIgYWxnb3JpdGhtIGNvdWxkIGFjaGlldmUNCj4gPiA+ID4gPiArbXVs dGktdGhyZWFkDQo+ID4gPiA+ID4gKyAqIHNhZmV0eSBieSBjcmVhdGluZyBhbmQgdXNpbmcgb25l IGRlZmVyIHF1ZXVlIHBlciB0aHJlYWQuDQo+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gKyAqIEBw YXJhbSBkcQ0KPiA+ID4gPiA+ICsgKiAgIERlZmVyIHF1ZXVlIHRvIHJlY2xhaW0gYW4gZW50cnkg ZnJvbS4NCj4gPiA+ID4gPiArICogQHJldHVybg0KPiA+ID4gPiA+ICsgKiAgIE9uIHN1Y2Nlc3Nm dWwgcmVjbGFtYXRpb24gb2YgYXQgbGVhc3QgMSByZXNvdXJjZSAtIDANCj4gPiA+ID4gPiArICog ICBPbiBlcnJvciAtIDEgd2l0aCBydGVfZXJybm8gc2V0IHRvDQo+ID4gPiA+ID4gKyAqICAgLSBF SU5WQUwgLSBOVUxMIHBhcmFtZXRlcnMgYXJlIHBhc3NlZA0KPiA+ID4gPiA+ICsgKiAgIC0gRUFH QUlOIC0gTm9uZSBvZiB0aGUgcmVzb3VyY2VzIGhhdmUgY29tcGxldGVkIGF0IGxlYXN0IDEgZ3Jh Y2UNCj4gPiA+ID4gcGVyaW9kLA0KPiA+ID4gPiA+ICsgKgkJdHJ5IGFnYWluLg0KPiA+ID4gPiA+ ICsgKi8NCj4gPiA+ID4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gPiA+ID4gK2ludA0KPiA+ ID4gPiA+ICtydGVfcmN1X3FzYnJfZHFfcmVjbGFpbShzdHJ1Y3QgcnRlX3JjdV9xc2JyX2RxICpk cSk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsvKioNCj4gPiA+ID4gPiArICogQHdhcm5pbmcN Cj4gPiA+ID4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhv dXQgcHJpb3Igbm90aWNlDQo+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gKyAqIERlbGV0ZSBhIGRl ZmVyIHF1ZXVlLg0KPiA+ID4gPiA+ICsgKg0KPiA+ID4gPiA+ICsgKiBJdCB0cmllcyB0byByZWNs YWltIGFsbCB0aGUgcmVzb3VyY2VzIG9uIHRoZSBkZWZlciBxdWV1ZS4NCj4gPiA+ID4gPiArICog SWYgYW55IG9mIHRoZSByZXNvdXJjZXMgaGF2ZSBub3QgY29tcGxldGVkIHRoZSBncmFjZSBwZXJp b2QNCj4gPiA+ID4gPiArICogdGhlIHJlY2xhbWF0aW9uIHN0b3BzIGFuZCByZXR1cm5zIGltbWVk aWF0ZWx5LiBUaGUgcmVzdCBvZg0KPiA+ID4gPiA+ICsgKiB0aGUgcmVzb3VyY2VzIGFyZSBub3Qg cmVjbGFpbWVkIGFuZCB0aGUgZGVmZXIgcXVldWUgaXMgbm90DQo+ID4gPiA+ID4gKyAqIGZyZWVk Lg0KPiA+ID4gPiA+ICsgKg0KPiA+ID4gPiA+ICsgKiBAcGFyYW0gZHENCj4gPiA+ID4gPiArICog ICBEZWZlciBxdWV1ZSB0byBkZWxldGUuDQo+ID4gPiA+ID4gKyAqIEByZXR1cm4NCj4gPiA+ID4g PiArICogICBPbiBzdWNjZXNzIC0gMA0KPiA+ID4gPiA+ICsgKiAgIE9uIGVycm9yIC0gMQ0KPiA+ ID4gPiA+ICsgKiAgIFBvc3NpYmxlIHJ0ZV9lcnJubyBjb2RlcyBhcmU6DQo+ID4gPiA+ID4gKyAq ICAgLSBFSU5WQUwgLSBOVUxMIHBhcmFtZXRlcnMgYXJlIHBhc3NlZA0KPiA+ID4gPiA+ICsgKiAg IC0gRUFHQUlOIC0gU29tZSBvZiB0aGUgcmVzb3VyY2VzIGhhdmUgbm90IGNvbXBsZXRlZCBhdCBs ZWFzdCAxDQo+ID4gZ3JhY2UNCj4gPiA+ID4gPiArICoJCXBlcmlvZCwgdHJ5IGFnYWluLg0KPiA+ ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gPiA+ID4gK2lu dA0KPiA+ID4gPiA+ICtydGVfcmN1X3FzYnJfZHFfZGVsZXRlKHN0cnVjdCBydGVfcmN1X3FzYnJf ZHEgKmRxKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gICNpZmRlZiBfX2NwbHVzcGx1cw0KPiA+ ID4gPiA+ICB9DQo+ID4gPiA+ID4gICNlbmRpZg0KPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9saWIv bGlicnRlX3JjdS9ydGVfcmN1X3FzYnJfcHZ0LmgNCj4gPiA+ID4gPiBiL2xpYi9saWJydGVfcmN1 L3J0ZV9yY3VfcXNicl9wdnQuaA0KPiA+ID4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4g PiA+ID4gaW5kZXggMDAwMDAwMDAwLi4yMTIyYmMzNmENCj4gPiA+ID4gPiAtLS0gL2Rldi9udWxs DQo+ID4gPiA+ID4gKysrIGIvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyX3B2dC5oDQo+ID4g PiA+DQo+ID4gPiA+IEFnYWluIHN0eWxlIHN1Z2dlc3Rpb246IGFzIGl0IGlzIG5vdCBwdWJsaWMg aGVhZGVyIC0gZG9uJ3QgdXNlIHJ0ZV8NCj4gPiA+ID4gcHJlZml4IGZvciBuYW1pbmcuDQo+ID4g PiA+IEZyb20gbXkgcGVyc3BlY3RpdmUgLSBlYXNpZXIgdG8gcmVsYWxpemUgZm9yIHJlYWRlciB3 aGF0IGlzIHB1YmxpYw0KPiA+ID4gPiBoZWFkZXIsIHdoYXQgaXMgbm90Lg0KPiA+ID4gTG9va3Mg bGlrZSB0aGUgZ3VpZGVsaW5lcyBhcmUgbm90IGRlZmluZWQgdmVyeSB3ZWxsLiBJIHNlZSBvbmUg cHJpdmF0ZQ0KPiA+ID4gZmlsZSB3aXRoIHJ0ZV8gcHJlZml4LiBJIHNlZSBTdGVwaGVuIG5vdCB1 c2luZyBydGVfIHByZWZpeC4gSSBkbyBub3QgaGF2ZSBhbnkNCj4gPiBwcmVmZXJlbmNlLiBCdXQs IGEgY29uc2lzdGVudCBhcHByb2FjaCBpcyByZXF1aXJlZC4NCj4gPg0KPiA+IFRoYXQncyBqdXN0 IGEgc3VnZ2VzdGlvbi4NCj4gPiBGb3IgbWUgKGFuZCBJIGhvcGUgZm9yIG90aGVycykgaXQgd291 bGQgYmUgYSBiaXQgZWFzaWVyLg0KPiA+IFdoZW4gbG9va2luZyBhdCB0aGUgY29kZSBmb3IgZmly c3QgdGltZSBJIGhhZCB0byBsb29rIGEgdCBtZXNvbi5idWlsZCB0byBjaGVjayBpcw0KPiA+IGl0 IGEgcHVibGljIGhlYWRlciBvciBub3QuDQo+ID4gSWYgdGhlIGZpbGUgZG9lc24ndCBoYXZlICdy dGVfJyBwcmVmaXgsIEkgYXNzdW1lIHRoYXQgaXQgaXMgYW4gaW50ZXJuYWwgb25lDQo+ID4gc3Ry YWlnaHR3YXkuDQo+ID4gQnV0ICwgYXMgeW91IHNhaWQsIHRoZXJlIGlzIG5vIGV4YWN0IGd1aWRl bGluZXMgaGVyZSwgc28gdXAgdG8geW91IHRvIGRlY2lkZS4NCj4gSSB0aGluayBpdCBtYWtlcyBz ZW5zZSB0byByZW1vdmUgJ3J0ZV8nIHByZWZpeC4gSSB3aWxsIGFsc28gY2hhbmdlIHRoZSBmaWxl IG5hbWUgdG8gaGF2ZSAnX3ByaXZhdGUnIHN1ZmZpeC4NCj4gVGhlcmUgYXJlIHNvbWUgaW5jb25z aXN0ZW5jaWVzIGluIHRoZSBleGlzdGluZyBjb2RlLCB3aWxsIHNlbmQgYSBwYXRjaCB0byBjb3Jy ZWN0IHRoZW0gdG8gZm9sbG93IHRoaXMgYXBwcm9hY2guDQo+IA0KPiA+DQo+ID4gPg0KPiA+ID4g Pg0KPiA+ID4gPiA+IEBAIC0wLDAgKzEsNDYgQEANCj4gPiA+ID4gPiArLyogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiA+ID4gPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIw MTkgQXJtIExpbWl0ZWQgICovDQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsjaWZuZGVmIF9SVEVf UkNVX1FTQlJfUFZUX0hfDQo+ID4gPiA+ID4gKyNkZWZpbmUgX1JURV9SQ1VfUVNCUl9QVlRfSF8N Cj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKy8qKg0KPiA+ID4gPiA+ICsgKiBUaGlzIGZpbGUgaXMg cHJpdmF0ZSB0byB0aGUgUkNVIGxpYnJhcnkuIEl0IHNob3VsZCBub3QgYmUNCj4gPiA+ID4gPiAr aW5jbHVkZWQNCj4gPiA+ID4gPiArICogYnkgdGhlIHVzZXIgb2YgdGhpcyBsaWJyYXJ5Lg0KPiA+ ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyNpZmRlZiBfX2NwbHVzcGx1cw0K PiA+ID4gPiA+ICtleHRlcm4gIkMiIHsNCj4gPiA+ID4gPiArI2VuZGlmDQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICsjaW5jbHVkZSAicnRlX3JjdV9xc2JyLmgiDQo+ID4gPiA+ID4gKw0KPiA+ID4g PiA+ICsvKiBSVEUgZGVmZXIgcXVldWUgc3RydWN0dXJlLg0KPiA+ID4gPiA+ICsgKiBUaGlzIHN0 cnVjdHVyZSBob2xkcyB0aGUgZGVmZXIgcXVldWUuIFRoZSBkZWZlciBxdWV1ZSBpcyB1c2VkDQo+ ID4gPiA+ID4gK3RvDQo+ID4gPiA+ID4gKyAqIGhvbGQgdGhlIGRlbGV0ZWQgZW50cmllcyBmcm9t IHRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IGFyZSBub3QNCj4gPiA+ID4gPiArICogeWV0IGZyZWVk Lg0KPiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiArc3RydWN0IHJ0ZV9yY3VfcXNicl9kcSB7DQo+ ID4gPiA+ID4gKwlzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2OyAvKio8IFJDVSBRU0JSIHZhcmlhYmxl IHVzZWQgYnkgdGhpcyBxdWV1ZS4qLw0KPiA+ID4gPiA+ICsJc3RydWN0IHJ0ZV9yaW5nICpyOyAg ICAgLyoqPCBSQ1UgUVNCUiBkZWZlciBxdWV1ZS4gKi8NCj4gPiA+ID4gPiArCXVpbnQzMl90IHNp emU7DQo+ID4gPiA+ID4gKwkvKio8IE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZGVmZXIgcXVl dWUgKi8NCj4gPiA+ID4gPiArCXVpbnQzMl90IGVzaXplOw0KPiA+ID4gPiA+ICsJLyoqPCBTaXpl IChpbiBieXRlcykgb2YgZGF0YSBzdG9yZWQgb24gdGhlIGRlZmVyIHF1ZXVlICovDQo+ID4gPiA+ ID4gKwlydGVfcmN1X3FzYnJfZnJlZV9yZXNvdXJjZSBmOw0KPiA+ID4gPiA+ICsJLyoqPCBGdW5j dGlvbiB0byBjYWxsIHRvIGZyZWUgdGhlIHJlc291cmNlLiAqLw0KPiA+ID4gPiA+ICsJdm9pZCAq cDsNCj4gPiA+ID4gPiArCS8qKjwgUG9pbnRlciBwYXNzZWQgdG8gdGhlIGZyZWUgZnVuY3Rpb24u IFR5cGljYWxseSwgdGhpcyBpcyB0aGUNCj4gPiA+ID4gPiArCSAqICAgcG9pbnRlciB0byB0aGUg ZGF0YSBzdHJ1Y3R1cmUgdG8gd2hpY2ggdGhlIHJlc291cmNlIHRvIGZyZWUNCj4gPiA+ID4gPiAr CSAqICAgYmVsb25ncy4NCj4gPiA+ID4gPiArCSAqLw0KPiA+ID4gPiA+ICsJY2hhciBlWzBdOw0K PiA+ID4gPiA+ICsJLyoqPCBUZW1wb3Jhcnkgc3RvcmFnZSB0byBjb3B5IHRoZSBkZWZlciBxdWV1 ZSBlbGVtZW50LiAqLw0KPiA+ID4gPg0KPiA+ID4gPiBEbyB5b3UgcmVhbGx5IG5lZWQgJ2UnIGF0 IGFsbD8NCj4gPiA+ID4gQ2FuJ3QgaXQgYmUganVzdCB0ZW1wb3Jhcnkgc3RhY2sgdmFyaWFibGU/ DQo+ID4gPiBPaywgd2lsbCBjaGVjay4NCj4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+ID4gK307DQo+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsjaWZkZWYgX19jcGx1c3BsdXMNCj4gPiA+ID4gPiArfQ0K PiA+ID4gPiA+ICsjZW5kaWYNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyNlbmRpZiAvKiBfUlRF X1JDVV9RU0JSX1BWVF9IXyAqLw0KPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3Jj dS9ydGVfcmN1X3ZlcnNpb24ubWFwDQo+ID4gPiA+ID4gYi9saWIvbGlicnRlX3JjdS9ydGVfcmN1 X3ZlcnNpb24ubWFwDQo+ID4gPiA+ID4gaW5kZXggZjhiOWVmMmFiLi5kZmFjODhhMzcgMTAwNjQ0 DQo+ID4gPiA+ID4gLS0tIGEvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV92ZXJzaW9uLm1hcA0KPiA+ ID4gPiA+ICsrKyBiL2xpYi9saWJydGVfcmN1L3J0ZV9yY3VfdmVyc2lvbi5tYXANCj4gPiA+ID4g PiBAQCAtOCw2ICs4LDEwIEBAIEVYUEVSSU1FTlRBTCB7DQo+ID4gPiA+ID4gIAlydGVfcmN1X3Fz YnJfc3luY2hyb25pemU7DQo+ID4gPiA+ID4gIAlydGVfcmN1X3FzYnJfdGhyZWFkX3JlZ2lzdGVy Ow0KPiA+ID4gPiA+ICAJcnRlX3JjdV9xc2JyX3RocmVhZF91bnJlZ2lzdGVyOw0KPiA+ID4gPiA+ ICsJcnRlX3JjdV9xc2JyX2RxX2NyZWF0ZTsNCj4gPiA+ID4gPiArCXJ0ZV9yY3VfcXNicl9kcV9l bnF1ZXVlOw0KPiA+ID4gPiA+ICsJcnRlX3JjdV9xc2JyX2RxX3JlY2xhaW07DQo+ID4gPiA+ID4g KwlydGVfcmN1X3FzYnJfZHFfZGVsZXRlOw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gIAlsb2NhbDog KjsNCj4gPiA+ID4gPiAgfTsNCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL21lc29uLmJ1aWxk IGIvbGliL21lc29uLmJ1aWxkIGluZGV4DQo+ID4gPiA+ID4gZTVmZjgzODkzLi4wZTFiZTg0MDcg MTAwNjQ0DQo+ID4gPiA+ID4gLS0tIGEvbGliL21lc29uLmJ1aWxkDQo+ID4gPiA+ID4gKysrIGIv bGliL21lc29uLmJ1aWxkDQo+ID4gPiA+ID4gQEAgLTExLDcgKzExLDkgQEANCj4gPiA+ID4gPiAg bGlicmFyaWVzID0gWw0KPiA+ID4gPiA+ICAJJ2t2YXJncycsICMgZWFsIGRlcGVuZHMgb24ga3Zh cmdzDQo+ID4gPiA+ID4gIAknZWFsJywgIyBldmVyeXRoaW5nIGRlcGVuZHMgb24gZWFsDQo+ID4g PiA+ID4gLQkncmluZycsICdtZW1wb29sJywgJ21idWYnLCAnbmV0JywgJ21ldGVyJywgJ2V0aGRl dicsICdwY2knLCAjIGNvcmUNCj4gPiA+ID4gPiArCSdyaW5nJywNCj4gPiA+ID4gPiArCSdyY3Un LCAjIHJjdSBkZXBlbmRzIG9uIHJpbmcNCj4gPiA+ID4gPiArCSdtZW1wb29sJywgJ21idWYnLCAn bmV0JywgJ21ldGVyJywgJ2V0aGRldicsICdwY2knLCAjIGNvcmUNCj4gPiA+ID4gPiAgCSdjbWRs aW5lJywNCj4gPiA+ID4gPiAgCSdtZXRyaWNzJywgIyBiaXRyYXRlL2xhdGVuY3kgc3RhdHMgZGVw ZW5kcyBvbiB0aGlzDQo+ID4gPiA+ID4gIAknaGFzaCcsICAgICMgZWZkIGRlcGVuZHMgb24gdGhp cw0KPiA+ID4gPiA+IEBAIC0yMiw3ICsyNCw3IEBAIGxpYnJhcmllcyA9IFsNCj4gPiA+ID4gPiAg CSdncm8nLCAnZ3NvJywgJ2lwX2ZyYWcnLCAnam9ic3RhdHMnLA0KPiA+ID4gPiA+ICAJJ2tuaScs ICdsYXRlbmN5c3RhdHMnLCAnbHBtJywgJ21lbWJlcicsDQo+ID4gPiA+ID4gIAkncG93ZXInLCAn cGR1bXAnLCAncmF3ZGV2JywNCj4gPiA+ID4gPiAtCSdyY3UnLCAncmVvcmRlcicsICdzY2hlZCcs ICdzZWN1cml0eScsICdzdGFjaycsICd2aG9zdCcsDQo+ID4gPiA+ID4gKwkncmVvcmRlcicsICdz Y2hlZCcsICdzZWN1cml0eScsICdzdGFjaycsICd2aG9zdCcsDQo+ID4gPiA+ID4gIAkjIGlwc2Vj IGxpYiBkZXBlbmRzIG9uIG5ldCwgY3J5cHRvIGFuZCBzZWN1cml0eQ0KPiA+ID4gPiA+ICAJJ2lw c2VjJywNCj4gPiA+ID4gPiAgCSMgYWRkIHBrdCBmcmFtZXdvcmsgbGlicyB3aGljaCB1c2Ugb3Ro ZXIgbGlicyBmcm9tIGFib3ZlDQo+ID4gPiA+ID4gLS0NCj4gPiA+ID4gPiAyLjE3LjENCg0K