From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH 09/60] drm/bridge: Add connector-related bridge operations and data Date: Tue, 20 Aug 2019 01:32:09 +0300 Message-ID: <20190819223209.GV5011@pendragon.ideasonboard.com> References: <20190711073548.GD15868@phenom.ffwll.local> <1d48919c-e876-152c-0f05-64eb4c62fcaf@samsung.com> <20190711131816.GM15868@phenom.ffwll.local> <6bbb03e6-0228-a3ea-f1bb-8ed6e52114d7@samsung.com> <20190711155035.GO15868@phenom.ffwll.local> <7797e98a-9587-b501-9869-9393b6fc6bd2@samsung.com> <20190716090039.GW15868@phenom.ffwll.local> <9c21691c-ffd1-43ed-13f8-121271ff053e@samsung.com> <20190808193214.GA6055@pendragon.ideasonboard.com> <20190814123510.GC7444@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6DD816E40F for ; Mon, 19 Aug 2019 22:32:17 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190814123510.GC7444@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: Maxime Ripard , Sebastian Reichel , dri-devel@lists.freedesktop.org, Tomi Valkeinen , Sean Paul List-Id: dri-devel@lists.freedesktop.org SGkgRGFuaWVsLAoKT24gV2VkLCBBdWcgMTQsIDIwMTkgYXQgMDI6MzU6MTBQTSArMDIwMCwgRGFu aWVsIFZldHRlciB3cm90ZToKPiBPbiBUaHUsIEF1ZyAwOCwgMjAxOSBhdCAxMDozMjoxNFBNICsw MzAwLCBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+ID4gT24gVHVlLCBKdWwgMTYsIDIwMTkgYXQg MDM6NTc6MjFQTSArMDIwMCwgQW5kcnplaiBIYWpkYSB3cm90ZToKPiA+PiBPbiAxNi4wNy4yMDE5 IDExOjAwLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ID4+PiBPbiBGcmksIEp1bCAxMiwgMjAxOSBh dCAxMTowMTozOEFNICswMjAwLCBBbmRyemVqIEhhamRhIHdyb3RlOgo+ID4+Pj4gT24gMTEuMDcu MjAxOSAxNzo1MCwgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+Pj4+PiBPbiBUaHUsIEp1bCAxMSwg MjAxOSBhdCAwNToxMjoyNlBNICswMjAwLCBBbmRyemVqIEhhamRhIHdyb3RlOgo+ID4+Pj4+PiBP biAxMS4wNy4yMDE5IDE1OjE4LCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ID4+Pj4+Pj4gT24gVGh1 LCBKdWwgMTEsIDIwMTkgYXQgMDI6NDE6MDFQTSArMDIwMCwgQW5kcnplaiBIYWpkYSB3cm90ZToK PiA+Pj4+Pj4+PiBPbiAxMS4wNy4yMDE5IDA5OjM1LCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ID4+ Pj4+Pj4+PiBPbiBXZWQsIEp1bCAxMCwgMjAxOSBhdCAwMjoxMjoxNFBNICswMjAwLCBBbmRyemVq IEhhamRhIHdyb3RlOgo+ID4+Pj4+Pj4+Pj4gSGkgTGF1cmVudCwKPiA+Pj4+Pj4+Pj4+Cj4gPj4+ Pj4+Pj4+PiBJIGxpa2UgdGhlIGFwcHJvYWNoLCBjdXJyZW50IHByYWN0aWNlIHdoZW4gYWxtb3N0 IGV2ZXJ5IGJyaWRnZSBzaG91bGQKPiA+Pj4+Pj4+Pj4+IG9wdGlvbmFsbHkgaW1wbGVtZW50IGNv bm5lY3Rvciwgb3IgYWx0ZXJuYXRpdmVseSBkb3duc3RyZWFtIGJyaWRnZSBvcgo+ID4+Pj4+Pj4+ Pj4gcGFuZWwgaXMgdmVyeSBwYWluZnVsLgo+ID4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+PiBZZWFoIEkg dGhpbmsgdGhpcyBsb29rcyBtb3N0bHkgcmVhc29uYWJsZS4gU29tZSBhcGkgZGVzaWduIGNvbW1l bnRzIG9uIHRvcAo+ID4+Pj4+Pj4+PiBvZiBBbmRyemVqJywgd2l0aCB0aGUgZmFpciB3YXJuaW5n IHRoYXQgSSBkaWRuJ3QgYm90aGVyIHRvIHJlYWQgdXAgb24gaG93Cj4gPj4+Pj4+Pj4+IGl0J3Mg YWxsIHVzZWQgaW4gdGhlIGVuZC4gSSBwcm9iYWJseSBzaG91bGQgZ28gYW5kIGRvIHRoYXQsIGF0 IGxlYXN0IHRvCj4gPj4+Pj4+Pj4+IGdldCBhIGZlZWxpbmcgZm9yIHdoYXQgeW91ciBocGRfY2Ig dXN1YWxseSBkb2VzLgo+ID4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+Pj4gTW9yZSBjb21tZW50cyBpbmxp bmVkLgo+ID4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+IE9uIDA3LjA3LjIwMTkgMjA6MTgsIExhdXJl bnQgUGluY2hhcnQgd3JvdGU6Cj4gPj4+Pj4+Pj4+Pj4gVG8gc3VwcG9ydCBpbXBsZW1lbnRhdGlv biBvZiBEUk0gY29ubmVjdG9ycyBvbiB0b3Agb2YgRFJNIGJyaWRnZXMKPiA+Pj4+Pj4+Pj4+PiBp bnN0ZWFkIG9mIGJ5IGJyaWRnZXMsIHRoZSBkcm1fYnJpZGdlIG5lZWRzIHRvIGV4cG9zZSBuZXcg b3BlcmF0aW9ucyBhbmQKPiA+Pj4+Pj4+Pj4+PiBkYXRhOgo+ID4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+ Pj4+Pj4gLSBPdXRwdXQgZGV0ZWN0aW9uLCBob3QtcGx1ZyBub3RpZmljYXRpb24sIG1vZGUgcmV0 cmlldmFsIGFuZCBFRElECj4gPj4+Pj4+Pj4+Pj4gICByZXRyaWV2YWwgb3BlcmF0aW9ucwo+ID4+ Pj4+Pj4+Pj4+IC0gQml0bWFzayBvZiBzdXBwb3J0ZWQgb3BlcmF0aW9ucwo+ID4+Pj4+Pj4+Pj4K PiA+Pj4+Pj4+Pj4+IFdoeSBkbyB3ZSBuZWVkIHRoZXNlIGJpdG1hc2sgYXQgYWxsPyBXaHkgY2Fu bm90IHdlIHJlbHkgb24gcHJlc2VuY2Ugb2YKPiA+Pj4+Pj4+Pj4+IG9wZXJhdGlvbidzIGNhbGxi YWNrPwo+ID4+Pj4+Pj4+PiBZZWFoIGFsc28gbm90IGEgaHVnZSBmYW4gb2YgdGhlc2UgYml0bWFz a3MuIFNtZWxscyBsaWtlCj4gPj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+IERSSVZFUl9HRU18RFJJVkVS X01PREVTRVQsIGFuZCBJIHBlcnNvbmFsbHkgcmVhbGx5IGhhdGUgdGhvc2UuIEVhc3kgdG8KPiA+ Pj4+Pj4+Pj4gYWRkLCBnZW5lcmFsbHkgZ29vZCBleGN1c2UgdG8gbm90IGhhdmUgdG8gdGhpbmsg dGhyb3VnaCB0aGUgZGVzaWduIGJldHdlZW4KPiA+Pj4+Pj4+Pj4gZGlmZmVyZW50IHBhcnRzIG9m IGRyaXZlcnMgLSAianVzdCIgYWRkIGFub3RoZXIgZmxhZy4KPiA+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+ Pj4+PiAtIEJyaWRnZSBvdXRwdXQgdHlwZQo+ID4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+Pj4gQWRk IGFuZCBkb2N1bWVudCB0aGVzZS4KPiA+Pj4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+Pj4+IFRocmVlIG5l dyBicmlkZ2UgaGVscGVyIGZ1bmN0aW9ucyBhcmUgYWxzbyBhZGRlZCB0byBoYW5kbGUgaG90IHBs dWcKPiA+Pj4+Pj4+Pj4+PiBub3RpZmljYXRpb24gaW4gYSB3YXkgdGhhdCBpcyBhcyB0cmFuc3Bh cmVudCBhcyBwb3NzaWJsZSBmb3IgdGhlCj4gPj4+Pj4+Pj4+Pj4gYnJpZGdlcy4KPiA+Pj4+Pj4+ Pj4+Cj4gPj4+Pj4+Pj4+PiBEb2N1bWVudGF0aW9uIG9mIG5ldyBvcHNlcyBkb2VzIG5vdCBleHBs YWluIGhvdyBpdCBzaG91bGQgY29vcGVyYXRlIHdpdGgKPiA+Pj4+Pj4+Pj4+IGJyaWRnZSBjaGFp bmluZywgSSBzdXBwb3NlIHRoZXkgc2hvdWxkIGJlIGNoYWluZWQgZXhwbGljaXRseSwgYW0gSQo+ ID4+Pj4+Pj4+Pj4gcmlnaHQ/IE1vcmUgY29tbWVudHMgYWJvdXQgaXQgbGF0ZXIuCj4gPj4+Pj4+ Pj4+Pgo+ID4+Pj4+Pj4+Pj4+IFNpZ25lZC1vZmYtYnk6IExhdXJlbnQgUGluY2hhcnQgPGxhdXJl bnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNvbT4KPiA+Pj4+Pj4+Pj4+PiAtLS0KPiA+Pj4+Pj4+ Pj4+PiAgZHJpdmVycy9ncHUvZHJtL2RybV9icmlkZ2UuYyB8ICA5MiArKysrKysrKysrKysrKysr KysrCj4gPj4+Pj4+Pj4+Pj4gIGluY2x1ZGUvZHJtL2RybV9icmlkZ2UuaCAgICAgfCAxNzAgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KPiA+Pj4+Pj4+Pj4+PiAgMiBmaWxlcyBj aGFuZ2VkLCAyNjEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ID4+Pj4+Pj4+Pj4+Cj4g Pj4+Pj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMgYi9k cml2ZXJzL2dwdS9kcm0vZHJtX2JyaWRnZS5jCj4gPj4+Pj4+Pj4+Pj4gaW5kZXggNTE5NTc3ZjM2 M2UzLi4zYzJhMjU1ZGY3YWYgMTAwNjQ0Cj4gPj4+Pj4+Pj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2RybV9icmlkZ2UuYwo+ID4+Pj4+Pj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1f YnJpZGdlLmMKPiA+Pj4+Pj4+Pj4+PiBAQCAtNzAsNiArNzAsOCBAQCBzdGF0aWMgTElTVF9IRUFE KGJyaWRnZV9saXN0KTsKPiA+Pj4+Pj4+Pj4+PiAgICovCj4gPj4+Pj4+Pj4+Pj4gIHZvaWQgZHJt X2JyaWRnZV9hZGQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiA+Pj4+Pj4+Pj4+PiAgewo+ ID4+Pj4+Pj4+Pj4+ICsJbXV0ZXhfaW5pdCgmYnJpZGdlLT5ocGRfbXV0ZXgpOwo+ID4+Pj4+Pj4+ Pj4+ICsKPiA+Pj4+Pj4+Pj4+PiAgCW11dGV4X2xvY2soJmJyaWRnZV9sb2NrKTsKPiA+Pj4+Pj4+ Pj4+PiAgCWxpc3RfYWRkX3RhaWwoJmJyaWRnZS0+bGlzdCwgJmJyaWRnZV9saXN0KTsKPiA+Pj4+ Pj4+Pj4+PiAgCW11dGV4X3VubG9jaygmYnJpZGdlX2xvY2spOwo+ID4+Pj4+Pj4+Pj4+IEBAIC04 Niw2ICs4OCw4IEBAIHZvaWQgZHJtX2JyaWRnZV9yZW1vdmUoc3RydWN0IGRybV9icmlkZ2UgKmJy aWRnZSkKPiA+Pj4+Pj4+Pj4+PiAgCW11dGV4X2xvY2soJmJyaWRnZV9sb2NrKTsKPiA+Pj4+Pj4+ Pj4+PiAgCWxpc3RfZGVsX2luaXQoJmJyaWRnZS0+bGlzdCk7Cj4gPj4+Pj4+Pj4+Pj4gIAltdXRl eF91bmxvY2soJmJyaWRnZV9sb2NrKTsKPiA+Pj4+Pj4+Pj4+PiArCj4gPj4+Pj4+Pj4+Pj4gKwlt dXRleF9kZXN0cm95KCZicmlkZ2UtPmhwZF9tdXRleCk7Cj4gPj4+Pj4+Pj4+Pj4gIH0KPiA+Pj4+ Pj4+Pj4+PiAgRVhQT1JUX1NZTUJPTChkcm1fYnJpZGdlX3JlbW92ZSk7Cj4gPj4+Pj4+Pj4+Pj4g IAo+ID4+Pj4+Pj4+Pj4+IEBAIC00NjMsNiArNDY3LDk0IEBAIHZvaWQgZHJtX2F0b21pY19icmlk Z2VfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gPj4+Pj4+Pj4+Pj4gIH0KPiA+ Pj4+Pj4+Pj4+PiAgRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2JyaWRnZV9lbmFibGUpOwo+ID4+ Pj4+Pj4+Pj4+ICAKPiA+Pj4+Pj4+Pj4+PiArLyoqCj4gPj4+Pj4+Pj4+Pj4gKyAqIGRybV9icmlk Z2VfaHBkX2VuYWJsZSAtIGVuYWJsZSBob3QgcGx1ZyBkZXRlY3Rpb24gZm9yIHRoZSBicmlkZ2UK PiA+Pj4+Pj4+Pj4+PiArICogQGJyaWRnZTogYnJpZGdlIGNvbnRyb2wgc3RydWN0dXJlCj4gPj4+ Pj4+Pj4+Pj4gKyAqIEBjYjogaG90LXBsdWcgZGV0ZWN0aW9uIGNhbGxiYWNrCj4gPj4+Pj4+Pj4+ Pj4gKyAqIEBkYXRhOiBkYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaG90LXBsdWcgZGV0ZWN0aW9u IGNhbGxiYWNrCj4gPj4+Pj4+Pj4+Pj4gKyAqCj4gPj4+Pj4+Pj4+Pj4gKyAqIENhbGwgJmRybV9i cmlkZ2VfZnVuY3MuaHBkX2VuYWJsZSBhbmQgcmVnaXN0ZXIgdGhlIGdpdmVuIEBjYiBhbmQgQGRh dGEgYXMKPiA+Pj4+Pj4+Pj4+PiArICogaG90IHBsdWcgbm90aWZpY2F0aW9uIGNhbGxiYWNrLiBG cm9tIG5vdyBvbiB0aGUgQGNiIHdpbGwgYmUgY2FsbGVkIHdpdGgKPiA+Pj4+Pj4+Pj4+PiArICog QGRhdGEgd2hlbiBhbiBvdXRwdXQgc3RhdHVzIGNoYW5nZSBpcyBkZXRlY3RlZCBieSB0aGUgYnJp ZGdlLCB1bnRpbCBob3QgcGx1Zwo+ID4+Pj4+Pj4+Pj4+ICsgKiBub3RpZmljYXRpb24gZ2V0cyBk aXNhYmxlZCB3aXRoIGRybV9icmlkZ2VfaHBkX2Rpc2FibGUoKS4KPiA+Pj4+Pj4+Pj4+PiArICoK PiA+Pj4+Pj4+Pj4+PiArICogSG90IHBsdWcgZGV0ZWN0aW9uIGlzIHN1cHBvcnRlZCBvbmx5IGlm IHRoZSBEUk1fQlJJREdFX09QX0hQRCBmbGFnIGlzIHNldCBpbgo+ID4+Pj4+Pj4+Pj4+ICsgKiBi cmlkZ2UtPm9wcy4gVGhpcyBmdW5jdGlvbiBzaGFsbCBub3QgYmUgY2FsbGVkIHdoZW4gdGhlIGZs YWcgaXMgbm90IHNldC4KPiA+Pj4+Pj4+Pj4+PiArICoKPiA+Pj4+Pj4+Pj4+PiArICogT25seSBv bmUgaG90IHBsdWcgZGV0ZWN0aW9uIGNhbGxiYWNrIGNhbiBiZSByZWdpc3RlcmVkIGF0IGEgdGlt ZSwgaXQgaXMgYW4KPiA+Pj4+Pj4+Pj4+PiArICogZXJyb3IgdG8gY2FsbCB0aGlzIGZ1bmN0aW9u IHdoZW4gaG90IHBsdWcgZGV0ZWN0aW9uIGlzIGFscmVhZHkgZW5hYmxlZCBmb3IKPiA+Pj4+Pj4+ Pj4+PiArICogdGhlIGJyaWRnZS4KPiA+Pj4+Pj4+Pj4+PiArICovCj4gPj4+Pj4+Pj4+PiBUbyBz aW1wbGlmeSBhcmNoaXRlY3R1cmUgbWF5YmUgd291bGQgYmUgYmV0dGVyIHRvIGVuYWJsZSBocGQg anVzdCBvbgo+ID4+Pj4+Pj4+Pj4gYnJpZGdlIGF0dGFjaDoKPiA+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+ Pj4+PiBicmlkZ2UtPmhwZF9jYiA9IGNiOwo+ID4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+IGJyaWRn ZS0+aHBkX2RhdGEgPSBkYXRhOwo+ID4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+IHJldCA9IGRybV9i cmlkZ2VfYXR0YWNoKC4uLik7Cj4gPj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+IFllYWggSSBsaWtlIHRo aXMgbW9yZS4gVGhlIG90aGVyIHByb2JsZW0gaGVyZSBpcywgd2hhdCBpZiB5b3UgbmVlZCBtb3Jl Cj4gPj4+Pj4+Pj4+IHRoYW4gMSBjYWxsYmFjayByZWdpc3RlcnMgb24gdGhlIHNhbWUgYnJpZGdl IGhkcCBzaWduYWw/Cj4gPj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+PiBUaGlzIHdheSB3ZSBjb3VsZCBh dm9pZCBhZGRpbmcgbmV3IGNhbGxiYWNrcyBocGRfKGVuYWJsZXxkaXNhYmxlKQo+ID4+Pj4+Pj4+ Pj4gd2l0aG91dCBiaWcgc2FjcmlmaWNlcy4KPiA+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+PiBPbmUg bW9yZSB0aGluZzogSFBEIGluIERpc3BsYXlQb3J0L0hETUkgYmVzaWRlIHNpZ25hbGxpbmcgcGx1 Zy91bnBsdWcsCj4gPj4+Pj4+Pj4+PiBub3RpZmllcyBhYm91dCBzaW5rIHN0YXR1cyBjaGFuZ2Us IGhvdyBpdCB0cmFuc2xhdGVzIHRvIHRoaXMgY2I/Cj4gPj4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+Pj4+ ICt2b2lkIGRybV9icmlkZ2VfaHBkX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ ID4+Pj4+Pj4+Pj4+ICsJCQkgICB2b2lkICgqY2IpKHZvaWQgKmRhdGEsCj4gPj4+Pj4+Pj4+Pj4g KwkJCQkgICAgICBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cyksCj4gPj4+Pj4+Pj4+ Pj4gKwkJCSAgIHZvaWQgKmRhdGEpCj4gPj4+Pj4+Pj4+Pj4gK3sKPiA+Pj4+Pj4+Pj4+PiArCWlm ICghYnJpZGdlIHx8ICFicmlkZ2UtPmZ1bmNzLT5ocGRfZW5hYmxlKQo+ID4+Pj4+Pj4+Pj4+ICsJ CXJldHVybjsKPiA+Pj4+Pj4+Pj4+PiArCj4gPj4+Pj4+Pj4+Pj4gKwltdXRleF9sb2NrKCZicmlk Z2UtPmhwZF9tdXRleCk7Cj4gPj4+Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+Pj4+ICsJaWYgKFdBUk4o YnJpZGdlLT5ocGRfY2IsICJIb3QgcGx1ZyBkZXRlY3Rpb24gYWxyZWFkeSBlbmFibGVkXG4iKSkK PiA+Pj4+Pj4+Pj4+PiArCQlnb3RvIHVubG9jazsKPiA+Pj4+Pj4+Pj4+PiArCj4gPj4+Pj4+Pj4+ Pj4gKwlicmlkZ2UtPmhwZF9jYiA9IGNiOwo+ID4+Pj4+Pj4+Pj4+ICsJYnJpZGdlLT5ocGRfZGF0 YSA9IGRhdGE7Cj4gPj4+Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+Pj4+ICsJYnJpZGdlLT5mdW5jcy0+ aHBkX2VuYWJsZShicmlkZ2UpOwo+ID4+Pj4+Pj4+Pj4+ICsKPiA+Pj4+Pj4+Pj4+PiArdW5sb2Nr Ogo+ID4+Pj4+Pj4+Pj4+ICsJbXV0ZXhfdW5sb2NrKCZicmlkZ2UtPmhwZF9tdXRleCk7Cj4gPj4+ Pj4+Pj4+Pj4gK30KPiA+Pj4+Pj4+Pj4+PiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2JyaWRnZV9o cGRfZW5hYmxlKTsKPiA+Pj4+Pj4+Pj4+PiArCj4gPj4+Pj4+Pj4+Pj4gKy8qKgo+ID4+Pj4+Pj4+ Pj4+ICsgKiBkcm1fYnJpZGdlX2hwZF9kaXNhYmxlIC0gZGlzYWJsZSBob3QgcGx1ZyBkZXRlY3Rp b24gZm9yIHRoZSBicmlkZ2UKPiA+Pj4+Pj4+Pj4+PiArICogQGJyaWRnZTogYnJpZGdlIGNvbnRy b2wgc3RydWN0dXJlCj4gPj4+Pj4+Pj4+Pj4gKyAqCj4gPj4+Pj4+Pj4+Pj4gKyAqIENhbGwgJmRy bV9icmlkZ2VfZnVuY3MuaHBkX2Rpc2FibGUgYW5kIHVucmVnaXN0ZXIgdGhlIGhvdCBwbHVnIGRl dGVjdGlvbgo+ID4+Pj4+Pj4+Pj4+ICsgKiBjYWxsYmFjayBwcmV2aW91c2x5IHJlZ2lzdGVyZWQg d2l0aCBkcm1fYnJpZGdlX2hwZF9lbmFibGUoKS4gT25jZSB0aGlzCj4gPj4+Pj4+Pj4+Pj4gKyAq IGZ1bmN0aW9uIHJldHVybnMgdGhlIGNhbGxiYWNrIHdpbGwgbm90IGJlIGNhbGxlZCBieSB0aGUg YnJpZGdlIHdoZW4gYW4KPiA+Pj4+Pj4+Pj4+PiArICogb3V0cHV0IHN0YXR1cyBjaGFuZ2Ugb2Nj dXJzLgo+ID4+Pj4+Pj4+Pj4+ICsgKgo+ID4+Pj4+Pj4+Pj4+ICsgKiBIb3QgcGx1ZyBkZXRlY3Rp b24gaXMgc3VwcG9ydGVkIG9ubHkgaWYgdGhlIERSTV9CUklER0VfT1BfSFBEIGZsYWcgaXMgc2V0 IGluCj4gPj4+Pj4+Pj4+Pj4gKyAqIGJyaWRnZS0+b3BzLiBUaGlzIGZ1bmN0aW9uIHNoYWxsIG5v dCBiZSBjYWxsZWQgd2hlbiB0aGUgZmxhZyBpcyBub3Qgc2V0Lgo+ID4+Pj4+Pj4+Pj4+ICsgKi8K PiA+Pj4+Pj4+Pj4+PiArdm9pZCBkcm1fYnJpZGdlX2hwZF9kaXNhYmxlKHN0cnVjdCBkcm1fYnJp ZGdlICpicmlkZ2UpCj4gPj4+Pj4+Pj4+Pj4gK3sKPiA+Pj4+Pj4+Pj4+PiArCWlmICghYnJpZGdl IHx8ICFicmlkZ2UtPmZ1bmNzLT5ocGRfZGlzYWJsZSkKPiA+Pj4+Pj4+Pj4+PiArCQlyZXR1cm47 Cj4gPj4+Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+Pj4+ICsJbXV0ZXhfbG9jaygmYnJpZGdlLT5ocGRf bXV0ZXgpOwo+ID4+Pj4+Pj4+Pj4+ICsJYnJpZGdlLT5mdW5jcy0+aHBkX2Rpc2FibGUoYnJpZGdl KTsKPiA+Pj4+Pj4+Pj4+PiArCj4gPj4+Pj4+Pj4+Pj4gKwlicmlkZ2UtPmhwZF9jYiA9IE5VTEw7 Cj4gPj4+Pj4+Pj4+Pj4gKwlicmlkZ2UtPmhwZF9kYXRhID0gTlVMTDsKPiA+Pj4+Pj4+Pj4+PiAr CW11dGV4X3VubG9jaygmYnJpZGdlLT5ocGRfbXV0ZXgpOwo+ID4+Pj4+Pj4+Pj4+ICt9Cj4gPj4+ Pj4+Pj4+Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9icmlkZ2VfaHBkX2Rpc2FibGUpOwo+ID4+ Pj4+Pj4+Pj4+ICsKPiA+Pj4+Pj4+Pj4+PiArLyoqCj4gPj4+Pj4+Pj4+Pj4gKyAqIGRybV9icmlk Z2VfaHBkX25vdGlmeSAtIG5vdGlmeSBob3QgcGx1ZyBkZXRlY3Rpb24gZXZlbnRzCj4gPj4+Pj4+ Pj4+Pj4gKyAqIEBicmlkZ2U6IGJyaWRnZSBjb250cm9sIHN0cnVjdHVyZQo+ID4+Pj4+Pj4+Pj4+ ICsgKiBAc3RhdHVzOiBvdXRwdXQgY29ubmVjdGlvbiBzdGF0dXMKPiA+Pj4+Pj4+Pj4+PiArICoK PiA+Pj4+Pj4+Pj4+PiArICogQnJpZGdlIGRyaXZlcnMgc2hhbGwgY2FsbCB0aGlzIGZ1bmN0aW9u IHRvIHJlcG9ydCBob3QgcGx1ZyBldmVudHMgd2hlbiB0aGV5Cj4gPj4+Pj4+Pj4+Pj4gKyAqIGRl dGVjdCBhIGNoYW5nZSBpbiB0aGUgb3V0cHV0IHN0YXR1cywgd2hlbiBob3QgcGx1ZyBkZXRlY3Rp b24gaGFzIGJlZW4KPiA+Pj4+Pj4+Pj4+PiArICogZW5hYmxlZCBieSB0aGUgJmRybV9icmlkZ2Vf ZnVuY3MuaHBkX2VuYWJsZSBjYWxsYmFjay4KPiA+Pj4+Pj4+Pj4+PiArICoKPiA+Pj4+Pj4+Pj4+ PiArICogVGhpcyBmdW5jdGlvbiBzaGFsbCBiZSBjYWxsZWQgaW4gYSBjb250ZXh0IHRoYXQgY2Fu IHNsZWVwLgo+ID4+Pj4+Pj4+Pj4+ICsgKi8KPiA+Pj4+Pj4+Pj4+PiArdm9pZCBkcm1fYnJpZGdl X2hwZF9ub3RpZnkoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiA+Pj4+Pj4+Pj4+PiArCQkJ ICAgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMpCj4gPj4+Pj4+Pj4+Pj4gK3sKPiA+ Pj4+Pj4+Pj4+PiArCW11dGV4X2xvY2soJmJyaWRnZS0+aHBkX211dGV4KTsKPiA+Pj4+Pj4+Pj4+ PiArCWlmIChicmlkZ2UtPmhwZF9jYikKPiA+Pj4+Pj4+Pj4+PiArCQlicmlkZ2UtPmhwZF9jYihi cmlkZ2UtPmhwZF9kYXRhLCBzdGF0dXMpOwo+ID4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+PiBTbyB0aGlz IGlzbid0IHF1aXRlIHdoYXQgSSBoYWQgaW4gbWluZC4gSW5zdGVhZCBzb21ldGhpbmcgbGlrZSB0 aGlzOgo+ID4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+PiAJLyogaXRlcmF0ZXMgb3ZlciBhbGwgYnJpZGdl cyBpbiB0aGUgY2hhaW4gY29udGFpbmluZyBAYnJpZGdlICovCj4gPj4+Pj4+Pj4+IAlmb3JfZWFj aF9icmlkZ2UodG1wX2JyaWRnZSwgYnJpZGdlKSB7Cj4gPj4+Pj4+Pj4+IAkJaWYgKHRtcF9icmlk Z2UgPT0gYnJpZGdlKQo+ID4+Pj4+Pj4+PiAJCQljb250aW51ZTsKPiA+Pj4+Pj4+Pj4gCQlpZiAo YnJpZGdlLT5ocGRfbm90aWZ5KTsKPiA+Pj4+Pj4+Pj4gCQkJYnJpZGdlLT5ocGRfbm90aWZ5KHRt cF9icmlkZ2UsIGJyaWRnZSwgc3RhdHVzKTsKPiA+Pj4+Pj4+Pj4gCX0KPiA+Pj4+Pj4+Pj4KPiA+ Pj4+Pj4+Pj4gCWVuY29kZXIgPSBlbmNvZGVyX2Zvcl9icmlkZ2UoYnJpZGdlKTsKPiA+Pj4+Pj4+ Pj4gCWlmIChlbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZS0+YnJpZGdlX2hwZF9ub3RpZnkpCj4gPj4+ Pj4+Pj4+IAkJZW5jb2Rlci0+aGVscGVyX3ByaXZhdGUtPmJyaWRnZV9ocGRfbm90aWZ5KGVuY29k ZXIsIGJyaWRnZSwgc3RhdHVzKTsKPiA+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4gCWRldiA9IGJyaWRn ZS0+ZGV2Cj4gPj4+Pj4+Pj4+IAlpZiAoZGV2LT5tb2RlX2NvbmZpZy5oZWxwZXJfcHJpdmF0ZS0+ YnJpZGdlX2hwZF9ub3RpZnkpCj4gPj4+Pj4+Pj4+IAkJZGV2LT5tb2RlX2NvbmZpZy5oZWxwZXJf cHJpdmF0ZS0+YnJpZGdlX2hwZF9ub3RpZnkoZGV2LCBicmlkZ2UsIHN0YXR1cykKPiA+Pj4+Pj4+ Pj4KPiA+Pj4+Pj4+Pj4gTm8gcmVnaXN0ZXIgY2FsbGJhY2sgbmVlZGVkLCBubyBsb2NraW5nIG5l ZWRlZCwgZXZlcnlvbmUgZ2V0cyBleGFjdGx5IHRoZQo+ID4+Pj4+Pj4+PiBocGQgdGhleSB3YW50 L25lZWQuCj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+PiBBcyBJIHVuZGVyc3RhbmQgeW91IHdhbnQgdG8g bm90aWZ5IGV2ZXJ5IG1lbWJlciBvZiB0aGUgcGlwZWxpbmUuCj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+ PiBJIHRoaW5rIGl0IHNob3VsZCBiZSBlbm91Z2ggdG8gbm90aWZ5IG9ubHkgdGhlIHNvdXJjZSwg YW5kIHRoZW4gc291cmNlCj4gPj4+Pj4+Pj4gc2hvdWxkIGRlY2lkZSBpZi93aGVuIHRoZSBocGQg c2hvdWxkIGJlIHByb3BhZ2F0ZWQgdXBzdHJlYW0uCj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+PiBJdCBs b29rcyBtb3JlIGdlbmVyaWMgZm9yIG1lLgo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+IEknbSBub3QgcGFy c2luZyAuLi4gZG8geW91IHRoaW5rIG15IGlkZWEgaXMgbW9yZSBnZW5lcmljIGFuZCB1c2VmdWws IG9yCj4gPj4+Pj4+PiB0aGUgb25lIGZyb20gTGF1cmVudD8gS2luZGEgY29uZnVzZWQgaGVyZS4K PiA+Pj4+Pj4KPiA+Pj4+Pj4gUmVnYXJkaW5nIGdlbmVyYWwgaWRlYToKPiA+Pj4+Pj4KPiA+Pj4+ Pj4gMS4gTGF1cmVudCdzIGFwcHJvYWNoIGlzIHRvIG5vdGlmeSBvbmx5IGNvbnN1bWVyLCBJIGd1 ZXNzIHVzdWFsbHkgdmlkZW8KPiA+Pj4+Pj4gc291cmNlLgo+ID4+Pj4+Pgo+ID4+Pj4+PiAyLiBZ b3VyIGlzIHRvIG5vdGlmeSBhbGwgb3RoZXIgYnJpZGdlcyBhbmQgZW5jb2Rlci4KPiA+Pj4+Pj4K PiA+Pj4+Pj4gQW5kIEkgcHJlZmVyIDFzdCBhcHByb2FjaCwgd2h5Ogo+ID4+Pj4+Pgo+ID4+Pj4+ PiAtIHRoZSBzb3VyY2UgY2FuIGRlY2lkZSBpZi93aGVuIGFuZCB0byB3aG8gcHJvcGFnYXRlIHRo ZSBzaWduYWwsCj4gPj4+Pj4+Cj4gPj4+Pj4+IC0gaXMgbW9yZSBnZW5lcmljLCBmb3IgZXhhbXBs ZSBpZiBicmlkZ2Ugc2VuZCBzaWduYWwgdG8gdHdvCj4gPj4+Pj4+IG1vbml0b3JzL3BhbmVscywg aXQgY2FuIGRlbGF5IGhwZCBwcm9wYWdhdGlvbiB0aWxsIGJvdGggc2lua3MgYXJlIHByZXNlbnQs Cj4gPj4+Pj4KPiA+Pj4+PiBXaXRoIExhdXJlbnQncyBhcHByb2FjaCB0aGUgYnJpZGdlIGNhbm5v dCBzZW5kIHRoZSBocGQgdG8gbW9yZSB0aGFuIG9uZQo+ID4+Pj4+IGNvbnN1bWVyLiBUaGVyZSdz IG9ubHkgMSBjYWxsYmFjay4gU28geW91J3JlIGV4YW1wbGUgZG9lc24ndCB3b3JrLgo+ID4+Pj4K PiA+Pj4+IElmIHRoZXJlIHdpbGwgYmUgdHdvIGNvbnN1bWVycywgdGhlcmUgd2lsbCBiZSB0d28g YnJpZGdlIGF0dGFjaG1lbnRzLAo+ID4+Pj4gdGh1cyB0aGVyZSB3aWxsIGJlIHR3byBub3RpZmlj YXRpb25zLCBpdCBzaG91bGQgd29yay4KPiA+Pj4KPiA+Pj4gMiBjb25zdW1lcnMsIDEgcHJvZHVj ZXIuIFRoZXJlJ3Mgb25seSBfb25lXyBjYWxsYmFjayBpbiB0aGUgcHJvZHVjZXIuIFRoZQo+ID4+ PiBjYWxsYmFjayBpcyByZWdpc3RlcmVkIG9uIHRoZSBwcm9kdWNlIGJyaWRnZSwgbm90IG9uIHRo ZSBjb25zdW1lciBicmlkZ2UKPiA+Pj4gKG9yIEknbSB0b3RhbGxseSBtaXNyZWFkaW5nIHdoYXQg TGF1cmVudCBkb2VzIGhlcmUpLgo+ID4+IAo+ID4+IEkgaGF2ZSBhc3N1bWVkIHRoYXQgaWYgZGV2 aWNlcyBleHBvc2VzIHR3byBoYXJkd2FyZSBzaW5rIGludGVyZmFjZXMgaXQKPiA+PiB3aWxsIGV4 cG9zZSB0d28gc2VwYXJhdGUgYnJpZGdlcyAtIG9mIGNvdXJzZSBpdCB3aWxsIG5vdCB3b3JrIHdp dGgKPiA+PiAiYnJpZGdlIGNoYWluaW5nIiB0aGluZywgYnV0IHRoaXMgaXMgYSBkaWZmZXJlbnQg c3RvcnkuCj4gPiAKPiA+IERhbmllbCBpcyByaWdodCB0aGF0IHRoZSBjdXJyZW50IGltcGxlbWVu dGF0aW9uIG9ubHkgYWxsb3dzIG9uZQo+ID4gY29uc3VtZXIuIFRoaXMgaXMgaG93ZXZlciBub3Qg YSBsaW1pdGF0aW9uIG9mIHRoZSBBUEksIGJ1dCBvZiBpdHMKPiA+IGltcGxlbWVudGF0aW9uLCBh cyBJIG9ubHkgbmVlZGVkIGEgc2luZ2xlIGNvbnN1bWVyLiBUaGUgaGVscGVycyBpbiB0aGlzCj4g PiBzZXJpZXMgZW5zdXJlIHRoYXQgbmVpdGhlciB0aGUgY29uc3VtZXIgbm9yIHRoZSBwcm9kdWNl ciBwb2tlIGluIHRoZQo+ID4gZHJtX2JyaWRnZSBzdHJ1Y3R1cmUgdG8gY2FsbCBiYWNrIHRvIHRo ZSBIUEQgaGFuZGxlcjoKPiA+IAo+ID4gLSBUaGUgY29uc3VtZXIgY2FsbHMgZHJtX2JyaWRnZV9o cGRfZW5hYmxlKCkgYW5kCj4gPiAgIGRybV9icmlkZ2VfaHBkX2Rpc2FibGUoKSwgd2hpY2ggY291 bGQgb2ZmZXIgYSByZWZlcmVuY2UtY291bnRlZAo+ID4gICBiZWhhdmlvdXIgaWYgZGVzaXJlZCB3 aXRob3V0IGNoYW5nZXMgdG8gdGhlIGNvbnN1bWVyLgo+ID4gCj4gPiAtIFRoZSBwcm9kdWNlciBn ZXRzIGNvbmZpZ3VyZWQgYnkgLmhwZF9lbmFibGUoKSBhbmQgLmhwZF9kaXNhYmxlKCksCj4gPiAg IHdoaWNoIGNvdWxkIGFsc28gZWFzaWx5IGFjY29tbW9kYXRlIHJlZmVyZW5jZS1jb3VudGluZyBp biB0aGUgZHJtCj4gPiAgIGJyaWRnZSBjb3JlIHdpdGhvdXQgY2hhbmdlcyB0byB0aGUgcHJvZHVj ZXIuCj4gPiAKPiA+IC0gVGhlIHByb2R1Y2VyIG5vdGlmaWVzIEhQRCB3aXRoIGRybV9icmlkZ2Vf aHBkX25vdGlmeSgpLCB3aGljaCBjb3VsZAo+ID4gICBlYXNpbHkgYmUgZXh0ZW5kZWQgdG8gc3Vw cG9ydCBtdWx0aXBsZSBjb25zdW1lcnMgd2l0aG91dCBjaGFuZ2VzIHRvCj4gPiAgIHRoZSBwcm9k dWNlci4KPiA+IAo+ID4gVGhpcyBpcyBhY3R1YWxseSBteSBzZWNvbmQgdmVyc2lvbiBvZiB0aGUg SFBEIG1lY2hhbmlzbS4gVGhlIGZpcnN0Cj4gPiB2ZXJzaW9uIHdhcyBuZXZlciBwb3N0ZWQsIHBv a2VkIGludG8gZHJtX2JyaWRnZSwgYW5kIHJlcXVpcmVkIHRoZQo+ID4gcHJvZHVjZXIgdG8gYmUg YXdhcmUgb2YgdGhlIGNhbGxiYWNrcy4gQWZ0ZXIgZGlzY3Vzc2luZyB0aGlzIHByaXZhdGVseQo+ ID4gd2l0aCBEYW5pZWwsIEkgY2FtZSB1cCB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiB0aGlz IHNlcmllcyB0aGF0LAo+ID4gd2hpbGUgbm90IHN1cHBvcnRpbmcgbXVsdGlwbGUgY29uc3VtZXJz IG5vdywgbWFrZXMgaXQgZWFzeSB0byBleHRlbmQKPiA+IGxhdGVyIHdpdGhvdXQgbWluaW1hbCBl ZmZvcnQuCj4gPiAKPiA+IERhbmllbCdzIHByb3Bvc2VkIGltcGxlbWVudGF0aW9uIGFib3ZlIGxv b2tzIHJlYXNvbmFibGUgdG8gbWUsIHByb3ZpZGVkCj4gPiB3ZSBjYW4gaXRlcmF0ZSBvdmVyIHRo ZSBicmlkZ2VzIGluIGFuIG9yZGVyIHRoYXQgZG9uJ3QgZGVwZW5kIG9uIHRoZQo+ID4gcG9zaXRp b24gb2YgdGhlIHByb2R1Y2VyIGluIHRoZSBjaGFpbiAoc2hvdWxkIGJlIGVhc3kgdG8gc29sdmUg YnkKPiA+IHN0YXJ0aW5nIGF0IHRoZSBlbmNvZGVyIGZvciBpbnN0YW5jZSkuIEl0IGhvd2V2ZXIg bG9va3MgYSBiaXQgbGlrZSBhCj4gPiBtaWRsYXllciB0byBtZSA6LSkgVGhhdCdzIHdoeSBJIGhh dmUgYSBzaW1pbGFyIGltcGxlbWVudGF0aW9uIGluIHRoZQo+ID4gY29ubmVjdG9yLWJyaWRnZSBo ZWxwZXIsIHdoaWNoIGNvdWxkIGJlIGV4dGVuZGVkIHRvIGNhbGwKPiA+IGVuY29kZXItPmhlbHBl cl9wcml2YXRlLT5icmlkZ2VfaHBkX25vdGlmeSgpIGFuZAo+ID4gZGV2LT5tb2RlX2NvbmZpZy5o ZWxwZXJfcHJpdmF0ZS0+YnJpZGdlX2hwZF9ub3RpZnkoKSBpbnN0ZWFkIG9mCj4gPiBoYXJkY29k aW5nIGRybV9rbXNfaGVscGVyX2hvdHBsdWdfZXZlbnQoKS4gTW92aW5nIHRoZSBjb2RlIHRvCj4g PiBkcm1fYnJpZGdlX2hwZF9ub3RpZnkoKSB3b3VsZCBvbiB0aGUgb3RoZXIgaGFuZCBzZXQgdGhl IG5vdGlmaWNhdGlvbgo+ID4gc2VxdWVuY2UgdG93YXJkcyB0aGUgZW5jb2RlciBhbmQgZHJpdmVy IGluIHN0b25lLiBEYW5pZWwsIGRvIHlvdSB0aGluawo+ID4gdGhhdCB3b3VsZCBiZSBiZXR0ZXIg Pwo+IAo+IFNvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG1pZGxheWVyIGFuZCB0aGUgaGVs cGVyIGlzIHRoYXQgdGhlIGhlbHBlcgo+IGNhbiBiZSBpZ25vcmVkLiBXaGljaCB0aGUgYWJvdmUg c3RpbGwgY2FuOgo+IAo+IC0gcHJvZHVjZXIgY2FuIGNob29zZSB0byBub3QgY2FsbCB0aGF0IGZ1 bmN0aW9uCj4gLSBjb25zdW1lciBjYW4gY2hvb3NlIG5vdCB0byBoYXZlIHRoZSBjYWxsYmFjawo+ IAo+IE5vdyBncmVhdCBoZWxwZXJzIGFsbG93IHlvdSB0byBpZ25vcmUgb25seSBwYXJ0cyBvZiB0 aGVtLCBzbyB0aGF0IHlvdSBjYW4KPiBtaXgmbWF0Y2guIFdoaWNoIGFnYWluIEkgdGhpbmsgd2l0 aCB0aGUgYnJpZGdlIHN0dWZmIHdlJ3JlIGRpc2N1c3NpbmcgaGVyZQo+IGlzIGFzc3VyZWQuCgpU aGF0J3MgYSBiaXQgZGlmZmljdWx0IGZvciB0aGUgZmlyc3QgcGFydCwgYXMgaWYgdGhlIHByb2R1 Y2VyIGRvZXNuJ3QKbm90aWZ5IG9mIEhQRCBldmVudHMsIGNvbnN1bWVycyB3b24ndCBiZSBhYmxl IHRvIGdldCB0aGVtIDotKSBUaGUgc2Vjb25kCnBhcnQsIGNvbnN1bWVycyBub3QgaGF2aW5nIHRo ZSBjYWxsYmFjaywgaXMgYWxyZWFkeSBzdXBwb3J0ZWQuCgo+IFNvIHRoZSBmaW5hbCBiaXQgaXMg aG93IG9waW5pb25hdGVkIGEgaGVscGVyIGNhbiBiZSwgYW5kIGltbyBpdCBjYW4gYmUKPiB2ZXJ5 IG9waW5pb25hdGVkIGFuZCBzdHJpY3QgYW5kIGluZmxleGlibGUuIFRoYXQgbWVhbnMgaXQgd29u J3QgYmUgdXNlZnVsCj4gZm9yIGV2ZXJ5IHBvc3NpYmxlIGNhc2UsIGJ1dCB0aG9zZSBjYW4gYmUg aGFuZGxlZCBieSBzaW1wbHkgbm90IHVzaW5nIHRoZQo+IGhlbHBlciAob3IgdGhhdCBwYXJ0IG9m IHRoZSBoZWxwZXJzKS4gRXhhbXBsZXMKPiAKPiAtIHNpbXBsZSBkaXNwbGF5IHBpcGUgaXMgdmVy eSBvcGluaW9uYXRlZCwgYnV0IHRyYWRlcyB0aGF0IGluIGZvciBiZWluZwo+ICAgdmVyeSB1c2Vm dWwgZm9yIHJlYWxseSBzaW1wbGUgZGlzcGxheXMKPiAKPiAtIHNpbWlsYXIgd2l0aCBhdG9taWMg aGVscGVycywgdGhlcmUncyBhIHZlcnkgc3Ryb25nIHN1Z2dlc3Rpb24gdGhhdCAiaWYKPiAgIGl0 IGRvZXNuJ3QgZml0LCB3cml0ZSB5b3VyIG93biBjb21taXRfdGFpbCgpIgoKKE9uIGEgc2lkZSBu b3RlLCBkb2luZyBzbyBpcyBxdWl0ZSBjb21wbGV4LCBhbmQgSSB1bmRlcnN0YW5kIHdoeSBub2Jv ZHkKd2FudHMgdG8gcmVhbGx5IGRpdGNoIHRoZSBhdG9taWMgaGVscGVycykKCj4gQW5kIEkgdGhp bmsgYnJpZGdlIGhlbHBlcnMgcHJvYmFibHkgYWxzbyBuZWVkIGZhaXJseSBvcGluaW9hdGVkLCBz aW1wbHkgdG8KPiBtYWtlIHN1cmUgdGhhdCBhbGwgdGhlIGJyaWRnZSBkcml2ZXJzIHdvcmsgdG9n ZXRoZXIgaW4gYSBjb2hlcmVudCBmYXNoaW9uLgo+IElmIHdlIGFsbG93IHRvbyBtdWNoIGZsZXhp YmlsaXR5IGV2ZXJ5b25lIGJlbmRzIHRoZSBydWxlcyBhIGJpdCwgYW5kCj4gbm90aGluZyBmaXRz LgoKSSBhZ3JlZSB3aXRoIHlvdSBvbiB0aGF0LgoKPiBXcnQgeW91ciBxdWVzdGlvbjogT25lIG9w dGlvbiB3b3VsZCBiZSB0byBkbyB0aGUgc2FtZSB0aGluZyBsaWtlIHNoYXJlZAo+IGludGVycnVw dCBsaW5lIGhhbmRsZXJzLiBBcyBzb29uIGFzIHRoZSBmaXJzdCBpbnRlcnJ1cHQgaGFuZGxlciBz YXlzICJJJwo+IHZlIGhhbmRsZWQgdGhpcyBvbmUiIHdlIHN0b3AgcHJvY2Vzc2luZy4gQnV0IHRo YXQgbWlnaHQgbGVhZCB0byBtb3JlCj4gY29uZnVzaW9uIGFib3V0IHdobydzIHJlc3BvbnNpYmxl IGZvciBhbiBpbnRlcnJ1cHQuCgpJIGRvbid0IHRoaW5rIHRoYXQncyBhIGdvb2QgaWRlYSwgYXMg bW9yZSB0aGFuIG9uZSBjb25zdW1lciBtYXkgbmVlZCB0bwpwcm9jZXNzIHRoZSBldmVudC4gQSBy ZWFsIGxpZmUgZXhhbXBsZSB3aXRoIHR3byBjb25zdW1lcnMgd291bGQgYmUgYSBDRUMKY29udHJv bGxlciBwYXJ0IG9mIGEgYnJpZGdlIG5lZWRpbmcgdG8gZ2V0IGluZm9ybWVkIGFib3V0IEhETUkK cGx1Zy91bnBsdWcgdG8gc2V0IHRoZSBDRUMgYWRkcmVzcyBpbiB0aGUgZGV2aWNlICh0aGlzIG5v dGlmaWNhdGlvbiBpcwpoYW5kbGVkIHRocm91Z2ggdGhlIGJyaWRnZSBub3RpZmljYXRpb24gb3Bl cmF0aW9uKSwgYW5kIHRoZSBkaXNwbGF5CmRyaXZlciBuZWVkaW5nIHRvIHJlcG9ydCBIUEQgdG8g dGhlIERSTSBjb3JlLgoKQXMgSSdtIHN0aWxsIG5vdCBzdXJlIHdoeSB5b3UgdGhpbmsgSSBzaG91 bGQgcmVwbGFjZSB0aGUgZXhpc3RpbmcKaW1wbGVtZW50YXRpb24gd2l0aCB5b3VyIGFib3ZlIHBy b3Bvc2FsLCBzbyBJJ2xsIGtlZXAgdGhlIGV4aXN0aW5nIGNvZGUKZm9yIHRoZSB2MiB0aGF0IEkg d2lsbCBwb3N0IHNvb24gdW50aWwgd2UgY29tcGxldGUgdGhpcyBkaXNjdXNzaW9uLgoKVG8gaG9w ZWZ1bGx5IGhlbHAgd2l0aCB0aGUgZGlzY3Vzc2lvbiwgSSB3b3VsZCBsaWtlIHRvIHJlcGVhdCBt eSBtYWluCmFyZ3VtZW50IDogbW92aW5nIHRoZSBkaXNwYXRjaGluZyBvZiB0aGUgbm90aWZpY2F0 aW9uIHRvCmRybV9icmlkZ2VfaHBkX25vdGlmeSgpIHNldHMgdGhlIG9yZGVyIGluIHdoaWNoIGNv bXBvbmVudHMgKGJyaWRnZXMsCmVuY29kZXJzLCBkcml2ZXJzKSBhcmUgbm90aWZpZWQgaW4gc3Rv bmUsIHdoaWxlIGtlZXBpbmcgaXQgaW4gdGhlCmRybV9icmlkZ2VfY29ubmVjdG9yIGhlbHBlciBh bGxvd3MgZHJpdmVycyB0byBub3QgdXNlIHRoZSBoZWxwZXIgYW5kCmNvbWUgdXAgd2l0aCBhIGRp ZmZlcmVudCBpbXBsZW1lbnRhdGlvbiB0aGF0IGZpdHMgdGhlaXIgbmVlZHMgYmV0dGVyLgoKPiA+ IEkgd291bGQgbGlrZSB0byByZW1pbmQgZXZlcnlib2R5IHRoYXQgdGhpcyBzZXJpZXMgaXNuJ3Qg dGhlIGxhc3QgSSB3aWxsCj4gPiBldmVyIHN1Ym1pdCwgYW5kIEkgcGxhbiB0byBkbyBtb3JlIHdv cmsgb24gZHJtX2JyaWRnZSBhbmQgZHJtX3BhbmVsLiBJJ20KPiA+IG9wZW4gdG8gc3VnZ2VzdGlv bnMsIGFuZCBjYW4gYWRkcmVzcyBwcm9ibGVtcyBvbiB0b3Agb2YgdGhlc2UgcGF0Y2hlcywKPiA+ IHByb3ZpZGVkIG9idmlvdXNseSB0aGF0IHRoaXMgc2VyaWVzIGRvZXNuJ3QgZ28gaW4gdGhlIHdy b25nIGRpcmVjdGlvbi4KPiA+IEknbSBvZiBjb3Vyc2UgYWxzbyB3aWxsaW5nIHRvIHJld29yayB0 aGlzIHNlcmllcywgYnV0IGdpdmVuIHRoZSBhbW91bnQKPiA+IG9mIHdvcmsgd2UgaGF2ZSBpbiB0 aGUgZHJtX2JyaWRnZSByZWFsbSwgSSBjYW4ndCBmaXggZXZlcnl0aGluZyBpbiBvbmUKPiA+IGdv IDotKQo+ID4gCj4gPj4+Pj4+IC0gaXQgcmVzZW1ibGVzIGhhcmR3YXJlIHdpcmVzIDopCj4gPj4+ Pj4KPiA+Pj4+PiBUaGlzIGlzbid0IGZvciB0aGUgaHcgd2lyZXMgYWZhaXVpLiBUaGUgaHcgaHBk IHRlcm1pbmF0ZXMgaW4gdGhlIHNvdXJjZQo+ID4+Pj4+IGJyaWRnZSwgd2hpY2ggdGhlbiBjYWxs cyBkcm1fYnJpZGdlX2hwZF9ub3RpZnkoKSB0byBpbmZvcm0gYW55b25lIGVsc2UKPiA+Pj4+PiBp bnRlcmVzdGVkIGluIHRoYXQgaHBkIHNpbmdhbC4gVGhpcyBpbmNsdWRlczoKPiA+Pj4+PiAtIE90 aGVyIGJyaWRnZXMsIGUuZy4gaWYgdGhleSBwcm92aWRlIENFQyBzdXBwb3J0Lgo+ID4+Pj4+IC0g T3RoZXIgYnJpZGdlcywgbWF5YmUgdGhleSBuZWVkIHRvIHJlLXJ1biB0aGUgSERDUCBzdGF0ZSBl bmdpbmUKPiA+Pj4+PiAtIE92ZXJhbGwgZHJpdmVyLCBzbyBpdCBjYW4gdXBkYXRlIHRoZSBtb2Rl cy9jb25uZWN0b3Igc3RhdHVzIGFuZCBzZW5kIHRoZQo+ID4+Pj4+ICAgdWV2ZW50IHRvIHRoZSBk cml2ZXIuCj4gPj4+Pj4gLSBPdmVyYWxsIGRpc3BsYXkgcGlwZWxpbmUgZm9yIHRoaXMgc3BlY2lm aWMgYnJpZGdlLCBtYXliZSB5b3UgbmVlZCB0bwo+ID4+Pj4+ICAgc2h1dCBkb3duL3JlLWVuYWJs ZSB0aGUgcGlwZSBiZWNhdXNlICRyZWFzb25zLgo+ID4+Pj4+ICAKPiA+Pj4+PiBUaGF0J3MgYXQg bGVhc3QgbXkgdW5kZXJzdGFuZGluZyBmcm9tIGxvdHMgb2YgY2hhdHMgd2l0aCBMYXVyZW50IGFi b3V0Cj4gPj4+Pj4gd2hhdCBoZSB3YW50cyB0byBkbyBoZXJlLgo+ID4gCj4gPiBUaGF0J3MgY29y cmVjdCwgYW5kIHRoYXQncyB3aGF0IEkgd2FzIHRyeWluZyB0byBpbXBsZW1lbnQgOi0pIFRoZQo+ ID4gbm90aWZpY2F0aW9uLCBpbiB0aGlzIHBhdGNoIHNlcmllcywgZ29lcyBmcm9tIHRoZSBwcm9k dWNlciBicmlkZ2UgdG8gYQo+ID4gY2VudHJhbCBwbGFjZSAobmFtZWx5IHRoZSBjb25uZWN0b3Is IHdpdGggYSBoZWxwZXIgaW1wbGVtZW50YXRpb24KPiA+IGF2YWlsYWJsZSBhcyBwYXJ0IG9mIHRo aXMgc2VyaWVzLCBidXQgY3VzdG9tIGltcGxlbWVudGF0aW9ucyBpbiBkaXNwbGF5Cj4gPiBkcml2 ZXJzIGFyZSBmaW5lIGlmIG5lZWRlZCkgdGhhdCB0aGVuIGRpc3BhdGNoZXMgdGhlIG5vdGlmaWNh dGlvbiB0byBhbGwKPiA+IGJyaWRnZXMgKHRocm91Z2ggdGhlIC5sb3N0X2hvdHBsdWcoKSBvcGVy YXRpb24sIHdoaWNoIHdlIGNvdWxkIHJlcGxhY2UKPiA+IGJ5IGFuIC5ocGRfbm90aWZ5KCkgb3Bl cmF0aW9uKSBmb3IgdGhlIGZpcnN0IHR3byBwdXJwb3NlcyBsaXN0ZWQgYWJvdmUsCj4gPiBhbmQg dGhlbiB0byB0aGUgb3ZlcmFsbCBkcml2ZXIuIFRoZSBvbmx5IHRoaW5nIEkgZG9uJ3Qgc3VwcG9y dCB5ZXQgaXMKPiA+IGRpc3BhdGNoaW5nIHRvIHRoZSBkaXNwbGF5IHBpcGVsaW5lIChpdGVtIDQg aW4gdGhlIGxpc3QgYWJvdmUpIGFzIEkgaGFkCj4gPiBubyBuZWVkIGZvciB0aGF0LCBhbmQgZGlk bid0IHdhbnQgdG8gZGV2ZWxvcCBhbiBBUEkgd2l0aCBubyB1c2VyLiBUaGlzCj4gPiB3b3VsZCBo b3dldmVyIG5vdCBiZSBkaWZmaWN1bHQgdG8gZG8gd2hlbiBuZWVkZWQsIHRoZSBuZWVkIGlzIHRh a2VuIGludG8KPiA+IGFjY291bnQgaW4gdGhlIHByb3Bvc2VkIGltcGxlbWVudGF0aW9uLgo+ID4g Cj4gPj4+PiBJIGRvIG5vdCBrbm93IHRoZSBmdWxsIHBpY3R1cmUsIGJ1dCB0aGUgc29sdXRpb24g d2hlcmUgcGFydGljdWxhciBicmlkZ2UKPiA+Pj4+IG5vdGlmaWVzIGV2ZXJ5dGhpbmcgdW5jb25k aXRpb25hbGx5IHNlZW1zIHRvIG1lIG11Y2ggbGVzcyBmbGV4aWJsZS4KPiA+Pj4+Cj4gPj4+PiBJ ZiBIUEQgc2lnbmFscyBpcyByZWNlaXZlZCBieSB0aGUgY29uc3VtZXIsIGlmIHRoZXJlIGFyZSBu byBvYnN0YWNsZXMgaXQKPiA+Pj4+IGNhbiBwcm9wYWdhdGUgaXQgZnVydGhlciwgdXBzdHJlYW0g YnJpZGdlL2VuY29kZXIgb3IgdG8gZHJtIGNvcmUgLSBpdAo+ID4+Pj4gd2lsbCBtaW1pYyB5b3Vy IHNjZW5hcmlvLgo+ID4+Pj4KPiA+Pj4+IEJ1dCB0aGVyZSBhcmUgYWxzbyBvdGhlciBzY2VuYXJp b3Mgd2hlcmUgYnJpZGdlIGRvZXMgbm90IHdhbnQgdG8KPiA+Pj4+IHByb3BhZ2F0ZSBzaWduYWws IGJlY2F1c2UgZm9yIGV4YW1wbGU6Cj4gPj4+Pgo+ID4+Pj4gLSBpdCB3YW50cyB0byB3YWl0IGZv ciBvdGhlciBzaW5rcyB0byB3YWtlIHVwLAo+ID4+Pgo+ID4+PiBUaGUgb3RoZXIgc2luayBjYW4g anVzdCBkbyB0aGF0IGluIHRoZWlyIGhwZCBjYWxsYmFjay4KPiA+Pj4KPiA+Pj4+IC0gaXQgcHJv cGFnYXRlcyBIUEQgc2lnbmFsIHZpYSBoYXJkd2FyZSB3aXJlLAo+ID4+Pgo+ID4+PiBBZ2Fpbiwg dGhlIG90aGVyIHNpbmsgY2FuIGp1c3Qgbm90IGxpc3RlbiB0byBzdyBocGQgaW4gdGhhdCBjYXNl LCBhbmQgdXNlCj4gPj4+IHRoZSB3aXJlL2h3IGhwZCBpbnRlcnJ1cHQuCj4gPj4gCj4gPj4gSWYg aXQgc2hvdWxkIGlnbm9yZSBIUEQsIHdoeSBpdCBzaG91bGQgcmVjZWl2ZSBpdCBhdCBhbGwgLSBp dCBpcwo+ID4+IHVubmVjZXNzYXJ5IG5vaXNlLiBBbmQgSSBhbSBhZnJhaWQgd2l0aCBtb3JlIGNv bXBsaWNhdGVkIHBpcGVsaW5lcyBpdAo+ID4+IHdpbGwgYmUgaW1wb3NzaWJsZSBmb3IgcGFydGlj dWxhciBjb21wb25lbnQgKGJyaWRnZS9lbmNvZGVyL3doYXRldmVyKSB0bwo+ID4+IGRpc3Rpbmd1 aXNoIGlmIEhQRCBub3RpZmljYXRpb24gd2hpY2ggY2FtZSBmcm9tIG5vbi1kaXJlY3RseSBjb25u ZWN0ZWQKPiA+PiBjb21wb25lbnQgc2hvdWxkIGJlIGlnbm9yZWQgb3Igbm90Lgo+ID4+IAo+ID4+ Pj4gLSBmaXJzdCBpdCB3YW50cyB0byB2ZXJpZnkgaWYgdGhlIHNpbmsgaXMgdmFsaWQvY29tcGF0 aWJsZS9hdXRob3JpemVkCj4gPj4+PiBkZXZpY2UuCj4gPj4+Cj4gPj4+IE5vdyB5b3UgbG9zdCBt ZS4gV2h5IHdvdWxkIHNvbWVvbmUgZ2x1ZSBpbmNvbXBhdGlibGUgSVAgaW50byBhIFNvQyBvcgo+ ID4+PiBib2FyZD8KPiA+PiAKPiA+PiBCcmlkZ2UgY2FuIGhhdmUgZXh0ZXJuYWwgY29ubmVjdG9y cywgYW5kIHRoZSB1c2VyIGNhbiBjb25uZWN0IHRoZXJlCj4gPj4gYW55dGhpbmcuCj4gPj4gCj4g Pj4+PiBJbiBnZW5lcmFsIEhQRCBpcyBpbnB1dCBzaWduYWwgZm9yIG5vdGlmeSBvZiBzdGF0ZSBj aGFuZ2VzIG9uIHBhcnRpY3VsYXIKPiA+Pj4+IGJ1cywgaW4gY2FzZSBvZiB0eXBpY2FsIHZpZGVv IGJyaWRnZSBvbiBpdHMgb3V0cHV0IHZpZGVvIGJ1cy4KPiA+Pj4+Cj4gPj4+PiBJbiBjYXNlIG9m IGJyaWRnZXMgdGhleSBoYXZlIGFsc28gaW5wdXQgdmlkZW8gYnVzZXMsIGFuZCB0aGV5IGNhbiBz ZW5kCj4gPj4+PiBIUEQgc2lnbmFsIHZpYSB0aGlzIGJ1cywgYnV0IHRoaXMgaXMgaW5kZWVkIGRp ZmZlcmVudCBIUEQgc2lnbmFsLCBldmVuCj4gPj4+PiBpZiBmb3IgbW9zdCBjYXNlcyB0aGV5IGxv b2tzIHNpbWlsYXIuCj4gPj4+Cj4gPj4+IEFoLCBJIHRoaW5rIHRoaXMgaXMgYSBwcm9ibGVtIHdl IHdpbGwgZXZlbnR1YWxseSBoYXZlLiBCdXQgaXQncyBub3QKPiA+Pj4gc29tZXRoaW5nIHdlJ3Jl IGN1cnJlbnRseSBzb2x2aW5nIGhlcmUgYXQgYWxsIEkgdGhpbmsuCj4gPj4gCj4gPj4gQ3VycmVu dGx5IHNpaTg2MjAgZGV2aWNlIGluIHRtMiBzZW5kcyBocGQgc2lnbmFsIHVwc3RyZWFtIHZpYSBo YXJkd2FyZQo+ID4+IGxpbmUsIHNvIHRoaXMgaXMgbm90IHNvbWV0aGluZyBmcm9tIGZhciBmdXR1 cmUuIEFuZCBJIGd1ZXNzIHdpdGggSFBECj4gPj4gYnJvYWRjYXN0aW5nIGl0IGNvdWxkIGJlIHJh Y3kvZXJyb3IgcHJvbmUsIGZvciBleGFtcGxlIEVESUQgcmVhZGluZyBjYW4KPiA+PiBmYWlsIGR1 ZSB0byBicmlkZ2UgYmVpbmcgbm90IHJlYWR5IChkZGMgb2Ygc2lpODYyMCBpcyBjb25uZWN0ZWQg dG8gaTJjCj4gPj4gY29udHJvbGxlciB2aWEgaHcgd2lyZXMgYWxzbykuCj4gPj4gCj4gPj4+Pj4+ IEFuZCByZWdhcmRpbmcgaW1wbGVtZW50YXRpb246Cj4gPj4+Pj4+Cj4gPj4+Pj4+IDEuIExhdXJl bnQgcHJvcG9zZXMgdG8gcmVnaXN0ZXIgY2FsbGJhY2sgZHJtX2JyaWRnZV9ocGRfZW5hYmxlLgo+ ID4+Pj4+Pgo+ID4+Pj4+PiAyLiBZb3UgcHJvcG9zZSB0byBhZGQgb3BzIGhwZF9ub3RpZnkgaW4g YnJpZGdlcyBhbmQgZW5jb2RlcnMuCj4gPj4+Pj4+Cj4gPj4+Pj4+IFlvdXIgcHJvcG9zaXRpb24g aXMgbW9yZSBzdHJhaWdodGZvcndhcmQsIGJ1dCBpZiB3ZSB3YW50IHRvIG5vdGlmeSBvbmx5Cj4g Pj4+Pj4+IHNvdXJjZSB3ZSBzaG91bGQgbG9jYXRlIGl0IGJ5IHBhcnNpbmcgbm90aWZpY2F0aW9u IGNoYWluICh3aGF0IGFib3V0Cj4gPj4+Pj4+IHVuY2hhaW5lZCBicmlkZ2VzKSwgb3Igc3RvcmUg cG9pbnRlciBzb21ld2hlcmUgZHVyaW5nIGF0dGFjaG1lbnQuCj4gPj4+Pj4+Cj4gPj4+Pj4+IEl0 IHN0aWxsIGxlYXZlcyB1cyB3aXRoIHRoaXMgdWdseSBkdWFsaXNtIC0gc291cmNlIGlzIGVuY29k ZXIgb3IgYnJpZGdlLAo+ID4+Pj4+PiBzaW1pbGFybHkgdG8gc2luayBhcyBicmlkZ2Ugb3IgcGFu ZWwsIGJ1dCBmaXhpbmcgaXQgY2FuIGJlIGRvbmUgbGF0ZXIuCj4gPj4+Pj4KPiA+Pj4+PiBVaCBJ IHRoaW5rIHdlJ3JlIG5vdCB0YWxraW5nIGFib3V0IHRoZSBzYW1lIHRoaW5nIHJlYWxseS4gTXkg dW5kZXJzdGFuZGluZwo+ID4+Pj4+IGlzIHRoYXQgdGhpcyBjYWxsYmFjayBpcyBpZiBzb21lb25l IChvdXRzaWRlIG9mIHRoaXMgYnJpZGdlKSBpcyBpbnRlcmVzdGVkCj4gPj4+Pj4gaW4gYSBocGQg c2lnbmFsIF9mcm9tXyB0aGlzIGJyaWRnZS4gV2hpY2ggbWVhbnMgeW91IGNhbiBvbmx5IGV2ZXIg aGF2ZSAxCj4gPj4+Pj4gbGlzdGVuZXIuCj4gPj4+Pgo+ID4+Pj4gRG8gd2UgaGF2ZSByZWFsIGxp ZmUgZXhhbXBsZXM/Cj4gPj4+Pgo+ID4+Pj4gSSB3YW50IHRvIGRpc3Rpbmd1aXNoIHR3byBzaXR1 YXRpb25zOgo+ID4+Pj4KPiA+Pj4+IC0gYW5vdGhlciBkZXZpY2Ugd2FudHMgdG8ga25vdyBpZiBp bnB1dCBidXMgb2YgdGhlIGJyaWRnZSBoYXMgY2hhbmdlZCBzdGF0ZSwKPiA+Pj4+Cj4gPj4+PiAt IGFub3RoZXIgZGV2aWNlIHdhbnRzIHRvIGtub3cgaWYgb3V0cHV0IGJ1cyBvZiB0aGUgYnJpZGdl IGhhcyBjaGFuZ2VkCj4gPj4+PiBzdGF0ZS4KPiA+Pj4KPiA+Pj4gVWgsIHRoYXQncyB3aGF0IGRy bV9icmlkZ2Vfc3RhdGUgaXMgZm9yIChpZiBpdCBldmVyIGhhcHBlbnMpLiBUaGF0J3MgaG93Cj4g Pj4+IGJyaWRnZXMgY2FuIGV4Y2hhbmdlIHN0YXRlIGFuZCBpbmZvcm1hdGlvbiBhYm91dCBlYWNo IGFub3RoZXIuIGhwZCBpcwo+ID4+PiBhYm91dCB0aGUgcGh5c2ljYWwgd29ybGQsIGkuZS4gImlz IHRoZXJlIGEgY2FibGUgcGx1Z2dlZCBpbnRvIHRoZSBwb3J0Cj4gPj4+IEknbSBkcml2aW5nPyIu IFdlJ3JlIG5vdCBnb2luZyB0byB1c2UgZmFrZSBocGQgdG8gdXBkYXRlIGJyaWRnZSBzdGF0ZSBh bmQKPiA+Pj4gZnVuIHN0dWZmIGxpa2UgdGhhdCwgd2UgaGF2ZSB0aGUgYXRvbWljX2NoZWNrIG1h Y2hpbmVyeSBmb3IgdGhpcy4KPiA+PiAKPiA+PiBNeSBxdWVzdGlvbiB3YXMgaWYgd2UgaGF2ZSBy ZWFsIGV4YW1wbGVzIHRoYXQgdXBzdHJlYW0gZGV2aWNlIHJlcXVpcmVzCj4gPj4ga25vd2xlZGdl IGFib3V0IHN0YXRlIG9mIG91dHB1dCBsaW5lIG9mIHRoZSBicmlkZ2U/Cj4gPj4gCj4gPj4gVG8g YmUgbW9yZSBwcmVjaXNlLCB3ZSBoYXZlIGZvbGxvd2luZyBkaXNwbGF5IHBpcGVsaW5lOgo+ID4+ IAo+ID4+IEEtLT5CLS0+Qwo+ID4+IAo+ID4+IEFuZCBDIHNlbmRzIEhQRCB0byBCIChpZSBzaWdu YWwgdGhhdCBzdGF0ZSBvZiBsaW5lIGJldHdlZW4gQiBhbmQgQwo+ID4+IGNoYW5nZWQpLiBEb2Vz IEEgcmVhbGx5IHdhbnRzIHRvIGtub3cgdGhpcyBpbmZvcm1hdGlvbj8gb3IgaXQgc2hvdWxkCj4g Pj4ganVzdCBuZWVkIHRvIGtub3cgaWYgc3RhdGUgb2YgbGluZSBBLS0+QiBjaGFuZ2VkPwo+ID4g Cj4gPiBUaGVyZSdzIG9uZSByZWFsIGxpZmUgZXhhbXBsZSwgd2hlcmUgQSBpcyBhbiBIRE1JIGVu Y29kZXIsIEIgaXMgYW4gSERNSQo+ID4gRVNEIHByb3RlY3RvciBhbmQgbGV2ZWwgc2hpZnRlciwg YW5kIEMgaXMgdGhlIHBoeXNpY2FsIEhETUkgY29ubmVjdG9yLgo+ID4gV2hlbiB0aGUgSERNSSBj YWJsZSBpcyB1bnBsdWdnZWQsIHRoZSBDRUMgY29udHJvbGxlciBwYXJ0IG9mIEEgbmVlZHMgdG8K PiA+IGJlIG5vdGlmaWVkIGluIG9yZGVyIHRvIHJlc2V0IHRoZSBDRUMgc3RhdGUgbWFjaGluZS4g T25lIGNvdWxkIGhvd2V2ZXIKPiA+IGFyZ3VlIHRoYXQgaW4gdGhhdCBjYXNlIHRoZSBBLUIgbGlu ayBzdGF0ZSBjaGFuZ2VzIHRvbywgYnV0IHRoZQo+ID4gaW1wb3J0YW50IHBhcnQgaXMgdGhhdCBI UEQgZGV0ZWN0aW9uIGlzIG5vdCBwZXJmb3JtZWQgYnkgQSwgd2hpbGUgQQo+ID4gbmVlZHMgdG8g YmUgaW5mb3JtZWQgb2YgbG9zdCBob3RwbHVnLgo+ID4gCj4gPj4+Pj4gWW91IHNlZW0gdG8gaGF2 ZSBzb21lIG90aGVyIGlkZWEgaGVyZS4KPiA+Pj4+Pgo+ID4+Pj4+Pj4+Pj4+ICsJbXV0ZXhfdW5s b2NrKCZicmlkZ2UtPmhwZF9tdXRleCk7Cj4gPj4+Pj4+Pj4+Pj4gK30KPiA+Pj4+Pj4+Pj4+PiAr RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2JyaWRnZV9ocGRfbm90aWZ5KTsKPiA+Pj4+Pj4+Pj4+PiAr Cj4gPj4+Pj4+Pj4+Pj4gICNpZmRlZiBDT05GSUdfT0YKPiA+Pj4+Pj4+Pj4+PiAgLyoqCj4gPj4+ Pj4+Pj4+Pj4gICAqIG9mX2RybV9maW5kX2JyaWRnZSAtIGZpbmQgdGhlIGJyaWRnZSBjb3JyZXNw b25kaW5nIHRvIHRoZSBkZXZpY2Ugbm9kZSBpbgo+ID4+Pj4+Pj4+Pj4+IGRpZmYgLS1naXQgYS9p bmNsdWRlL2RybS9kcm1fYnJpZGdlLmggYi9pbmNsdWRlL2RybS9kcm1fYnJpZGdlLmgKPiA+Pj4+ Pj4+Pj4+PiBpbmRleCAwOGRjMTVmOTNkZWQuLmI5NDQ1YWE1YjFlZiAxMDA2NDQKPiA+Pj4+Pj4+ Pj4+PiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fYnJpZGdlLmgKPiA+Pj4+Pj4+Pj4+PiArKysgYi9p bmNsdWRlL2RybS9kcm1fYnJpZGdlLmgKPiA+Pj4+Pj4+Pj4+PiBAQCAtMjMsOCArMjMsOSBAQAo+ ID4+Pj4+Pj4+Pj4+ICAjaWZuZGVmIF9fRFJNX0JSSURHRV9IX18KPiA+Pj4+Pj4+Pj4+PiAgI2Rl ZmluZSBfX0RSTV9CUklER0VfSF9fCj4gPj4+Pj4+Pj4+Pj4gIAo+ID4+Pj4+Pj4+Pj4+IC0jaW5j bHVkZSA8bGludXgvbGlzdC5oPgo+ID4+Pj4+Pj4+Pj4+ICAjaW5jbHVkZSA8bGludXgvY3R5cGUu aD4KPiA+Pj4+Pj4+Pj4+PiArI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KPiA+Pj4+Pj4+Pj4+PiAr I2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4gPj4+Pj4+Pj4+Pj4gICNpbmNsdWRlIDxkcm0vZHJt X21vZGVfb2JqZWN0Lmg+Cj4gPj4+Pj4+Pj4+Pj4gICNpbmNsdWRlIDxkcm0vZHJtX21vZGVzLmg+ Cj4gPj4+Pj4+Pj4+Pj4gIAo+ID4+Pj4+Pj4+Pj4+IEBAIC0zMzQsNiArMzM1LDExMCBAQCBzdHJ1 Y3QgZHJtX2JyaWRnZV9mdW5jcyB7Cj4gPj4+Pj4+Pj4+Pj4gIAkgKi8KPiA+Pj4+Pj4+Pj4+PiAg CXZvaWQgKCphdG9taWNfcG9zdF9kaXNhYmxlKShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ ID4+Pj4+Pj4+Pj4+ICAJCQkJICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7Cj4g Pj4+Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+Pj4+ICsJLyoqCj4gPj4+Pj4+Pj4+Pj4gKwkgKiBAZGV0 ZWN0Ogo+ID4+Pj4+Pj4+Pj4+ICsJICoKPiA+Pj4+Pj4+Pj4+PiArCSAqIENoZWNrIGlmIGFueXRo aW5nIGlzIGF0dGFjaGVkIHRvIHRoZSBicmlkZ2Ugb3V0cHV0Lgo+ID4+Pj4+Pj4+Pj4+ICsJICoK PiA+Pj4+Pj4+Pj4+PiArCSAqIFRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwsIGlmIG5vdCBpbXBs ZW1lbnRlZCB0aGUgYnJpZGdlIHdpbGwgYmUKPiA+Pj4+Pj4+Pj4+PiArCSAqIGNvbnNpZGVyZWQg YXMgYWx3YXlzIGhhdmluZyBhIGNvbXBvbmVudCBhdHRhY2hlZCB0byBpdHMgb3V0cHV0Lgo+ID4+ Pj4+Pj4+Pj4+ICsJICogQnJpZGdlcyB0aGF0IGltcGxlbWVudCB0aGlzIGNhbGxiYWNrIHNoYWxs IHNldCB0aGUKPiA+Pj4+Pj4+Pj4+PiArCSAqIERSTV9CUklER0VfT1BfREVURUNUIGZsYWcgaW4g dGhlaXIgJmRybV9icmlkZ2UtPm9wcy4KPiA+Pj4+Pj4+Pj4+PiArCSAqCj4gPj4+Pj4+Pj4+Pj4g KwkgKiBSRVRVUk5TOgo+ID4+Pj4+Pj4+Pj4+ICsJICoKPiA+Pj4+Pj4+Pj4+PiArCSAqIGRybV9j b25uZWN0b3Jfc3RhdHVzIGluZGljYXRpbmcgdGhlIGJyaWRnZSBvdXRwdXQgc3RhdHVzLgo+ID4+ Pj4+Pj4+Pj4+ICsJICovCj4gPj4+Pj4+Pj4+Pj4gKwllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVz ICgqZGV0ZWN0KShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKTsKPiA+Pj4+Pj4+Pj4+PiArCj4g Pj4+Pj4+Pj4+Pj4gKwkvKioKPiA+Pj4+Pj4+Pj4+PiArCSAqIEBnZXRfbW9kZXM6Cj4gPj4+Pj4+ Pj4+Pj4gKwkgKgo+ID4+Pj4+Pj4+Pj4+ICsJICogRmlsbCBhbGwgbW9kZXMgY3VycmVudGx5IHZh bGlkIGZvciB0aGUgc2luayBpbnRvIHRoZSAmZHJtX2Nvbm5lY3Rvcgo+ID4+Pj4+Pj4+Pj4+ICsJ ICogd2l0aCBkcm1fbW9kZV9wcm9iZWRfYWRkKCkuCj4gPj4+Pj4+Pj4+Pj4gKwkgKgo+ID4+Pj4+ Pj4+Pj4+ICsJICogVGhlIEBnZXRfbW9kZXMgY2FsbGJhY2sgaXMgbW9zdGx5IGludGVuZGVkIHRv IHN1cHBvcnQgbm9uLXByb2JhYmxlCj4gPj4+Pj4+Pj4+Pj4gKwkgKiBkaXNwbGF5cyBzdWNoIGFz IG1hbnkgZml4ZWQgcGFuZWxzLiBCcmlkZ2VzIHRoYXQgc3VwcG9ydCByZWFkaW5nCj4gPj4+Pj4+ Pj4+Pj4gKwkgKiBFRElEIHNoYWxsIGxlYXZlIEBnZXRfbW9kZXMgdW5pbXBsZW1lbnRlZCBhbmQg aW1wbGVtZW50IHRoZQo+ID4+Pj4+Pj4+Pj4+ICsJICogJmRybV9icmlkZ2VfZnVuY3MtPmdldF9l ZGlkIGNhbGxiYWNrIGluc3RlYWQuCj4gPj4+Pj4+Pj4+Pj4gKwkgKgo+ID4+Pj4+Pj4+Pj4+ICsJ ICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4gQnJpZGdlcyB0aGF0IGltcGxlbWVudCBpdCBz aGFsbCBzZXQgdGhlCj4gPj4+Pj4+Pj4+Pj4gKwkgKiBEUk1fQlJJREdFX09QX01PREVTIGZsYWcg aW4gdGhlaXIgJmRybV9icmlkZ2UtPm9wcy4KPiA+Pj4+Pj4+Pj4+PiArCSAqCj4gPj4+Pj4+Pj4+ Pj4gKwkgKiBSRVRVUk5TOgo+ID4+Pj4+Pj4+Pj4+ICsJICoKPiA+Pj4+Pj4+Pj4+PiArCSAqIFRo ZSBudW1iZXIgb2YgbW9kZXMgYWRkZWQgYnkgY2FsbGluZyBkcm1fbW9kZV9wcm9iZWRfYWRkKCku Cj4gPj4+Pj4+Pj4+Pj4gKwkgKi8KPiA+Pj4+Pj4+Pj4+PiArCWludCAoKmdldF9tb2Rlcykoc3Ry dWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiA+Pj4+Pj4+Pj4+PiArCQkJIHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpOwo+ID4+Pj4+Pj4+Pj4+ICsKPiA+Pj4+Pj4+Pj4+PiArCS8qKgo+ ID4+Pj4+Pj4+Pj4+ICsJICogQGdldF9lZGlkOgo+ID4+Pj4+Pj4+Pj4+ICsJICoKPiA+Pj4+Pj4+ Pj4+PiArCSAqIFJlYWQgYW5kIHBhcnNlIHRoZSBFRElEIGRhdGEgb2YgdGhlIGNvbm5lY3RlZCBk aXNwbGF5Lgo+ID4+Pj4+Pj4+Pj4+ICsJICoKPiA+Pj4+Pj4+Pj4+PiArCSAqIFRoZSBAZ2V0X2Vk aWQgY2FsbGJhY2sgaXMgdGhlIHByZWZlcnJlZCB3YXkgb2YgcmVwb3J0aW5nIG1vZGUKPiA+Pj4+ Pj4+Pj4+PiArCSAqIGluZm9ybWF0aW9uIGZvciBhIGRpc3BsYXkgY29ubmVjdGVkIHRvIHRoZSBi cmlkZ2Ugb3V0cHV0LiBCcmlkZ2VzCj4gPj4+Pj4+Pj4+Pj4gKwkgKiB0aGF0IHN1cHBvcnQgcmVh ZGluZCBFRElEIHNoYWxsIGltcGxlbWVudCB0aGlzIGNhbGxiYWNrIGFuZCBsZWF2ZQo+ID4+Pj4+ Pj4+Pj4+ICsJICogdGhlIEBnZXRfbW9kZXMgY2FsbGJhY2sgdW5pbXBsZW1lbnRlZC4KPiA+Pj4+ Pj4+Pj4+PiArCSAqCj4gPj4+Pj4+Pj4+Pj4gKwkgKiBUaGUgY2FsbGVyIG9mIHRoaXMgb3BlcmF0 aW9uIHNoYWxsIGZpcnN0IHZlcmlmeSB0aGUgb3V0cHV0Cj4gPj4+Pj4+Pj4+Pj4gKwkgKiBjb25u ZWN0aW9uIHN0YXR1cyBhbmQgcmVmcmFpbiBmcm9tIHJlYWRpbmcgRURJRCBmcm9tIGEgZGlzY29u bmVjdGVkCj4gPj4+Pj4+Pj4+Pj4gKwkgKiBvdXRwdXQuCj4gPj4+Pj4+Pj4+Pj4gKwkgKgo+ID4+ Pj4+Pj4+Pj4+ICsJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4gQnJpZGdlcyB0aGF0IGlt cGxlbWVudCBpdCBzaGFsbCBzZXQgdGhlCj4gPj4+Pj4+Pj4+Pj4gKwkgKiBEUk1fQlJJREdFX09Q X0VESUQgZmxhZyBpbiB0aGVpciAmZHJtX2JyaWRnZS0+b3BzLgo+ID4+Pj4+Pj4+Pj4+ICsJICoK PiA+Pj4+Pj4+Pj4+PiArCSAqIFJFVFVSTlM6Cj4gPj4+Pj4+Pj4+Pj4gKwkgKgo+ID4+Pj4+Pj4+ Pj4+ICsJICogQW4gZWRpZCBzdHJ1Y3R1cmUgbmV3bHkgYWxsb2NhdGVkIHdpdGgga21hbGxvYygp IChvciBzaW1pbGFyKSBvbgo+ID4+Pj4+Pj4+Pj4+ICsJICogc3VjY2Vzcywgb3IgTlVMTCBvdGhl cndpc2UuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcKPiA+Pj4+Pj4+Pj4+ PiArCSAqIHRoZSByZXR1cm5lZCBlZGlkIHN0cnVjdHVyZSB3aXRoIGtmcmVlKCkuCj4gPj4+Pj4+ Pj4+Pj4gKwkgKi8KPiA+Pj4+Pj4+Pj4+PiArCXN0cnVjdCBlZGlkICooKmdldF9lZGlkKShzdHJ1 Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ID4+Pj4+Pj4+Pj4+ICsJCQkJIHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpOwo+ID4+Pj4+Pj4+Pj4gSXQgb3ZlcmxhcHMgd2l0aCBnZXRfbW9k ZXMsIEkgZ3Vlc3MgcHJlc2VuY2Ugb2Ygb25lIG9wcyBzaG91bGQgZGlzYWxsb3cKPiA+Pj4+Pj4+ Pj4+IHByZXNlbmNlIG9mIGFub3RoZXIgb25lPwo+ID4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+IEkg YW0gbm90IHJlYWxseSBjb252aW5jZWQgd2UgbmVlZCB0aGlzIG9wIGF0IGFsbCwgY2Fubm90IHdl IGp1c3QgYXNzaWduCj4gPj4+Pj4+Pj4+PiBzb21lIGhlbHBlciBmdW5jdGlvbiB0byAuZ2V0X21v ZGVzIGNiLCB3aGljaCB3aWxsIGRvIHRoZSBzYW1lPwo+ID4+Pj4+Pj4+PiBQbGFuIEIpOiBkaXRj aCAtPmdldF9lZGlkLCByZXF1aXJlIHRoYXQgdGhlIGRyaXZlciBoYXMgLT5nZXRfbW9kZXMgaW4g dGhhdAo+ID4+Pj4+Pj4+PiBjYXNlLCBhbmQgcmVxdWlyZSB0aGF0IGlmIGl0IGhhcyBhbiBlZGlk IGl0IG11c3QgZmlsbCBvdXQgY29ubmVjdG9yLT5pbmZvCj4gPj4+Pj4+Pj4+IGFuZCBjb25uZWN0 b3ItPmVkaWQgY29ycmVjdGx5Lgo+ID4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+PiBCdHcgaWYgYSBocGQg aGFwcGVucywgd2hvJ3MgcmVzcG9uaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhlIGVkaWQvbW9kZSBs aXN0Cj4gPj4+Pj4+Pj4+IGluIHRoZSBjb25uZWN0b3IgaXMgdXAtdG8tZGF0ZT8gV2l0aCB5b3Vy IGN1cnJlbnQgY2FsbGJhY2sgZGVzaWduIHRoYXQncwo+ID4+Pj4+Pj4+PiB1cCB0byB0aGUgY2Fs bGJhY2ssIHdoaWNoIGRvZXNuJ3QgZmVlbCBncmVhdC4gTWF5YmUgIGRybV9icmlkZ2VfaHBkX25v dGlmeQo+ID4+Pj4+Pj4+PiBzaG91bGQgZ3VhcmFudGVlIHRoYXQgaXQnbGwgZmlyc3Qgd2FsayB0 aGUgY29ubmVjdG9ycyB0byB1cGRhdGUgc3RhdHVzIGFuZAo+ID4+Pj4+Pj4+PiBlZGlkL21vZGUg bGlzdCBmb3IgdGhlIGZpbmFsIGRybV9jb25uZWN0b3IuIEFuZCB0aGVuIGluc3RlYWQgb2YganVz dAo+ID4+Pj4+Pj4+PiBwYXNzaW5nIHRoZSBzaW1wbGUgInN0YXR1cyIsIGl0J2xsIHBhc3MgdGhl IGNvbm5lY3Rvciwgd2l0aCBldmVyeXRoaW5nCj4gPj4+Pj4+Pj4+IGNvcnJlY3RseSB1cGRhdGVk Lgo+ID4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+PiBPdGhlcndpc2UgZXZlcnlvbmUgaW50ZXJlc3RlZCBp biB0aGF0IGhwZCBzaWduYWwgd2lsbCBnbyBhbmQgcmUtZmV0Y2ggdGhlCj4gPj4+Pj4+Pj4+IGVk aWQsIHdoaWNoIGlzIG5vdCBzbyBhd2Vzb21lIDotKQo+ID4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+Pj4+ ICsKPiA+Pj4+Pj4+Pj4+PiArCS8qKgo+ID4+Pj4+Pj4+Pj4+ICsJICogQGxvc3RfaG90cGx1ZzoK PiA+Pj4+Pj4+Pj4+PiArCSAqCj4gPj4+Pj4+Pj4+Pj4gKwkgKiBOb3RpZnkgdGhlIGJyaWRnZSBv ZiBkaXNwbGF5IGRpc2Nvbm5lY3Rpb24uCj4gPj4+Pj4+Pj4+Pj4gKwkgKgo+ID4+Pj4+Pj4+Pj4+ ICsJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCwgaXQgbWF5IGJlIGltcGxlbWVudGVkIGJ5 IGJyaWRnZXMgdGhhdAo+ID4+Pj4+Pj4+Pj4+ICsJICogbmVlZCB0byBiZSBub3RpZmllZCBvZiBk aXNwbGF5IGRpc2Nvbm5lY3Rpb24gZm9yIGludGVybmFsIHJlYXNvbnMuCj4gPj4+Pj4+Pj4+Pj4g KwkgKiBPbmUgdXNlIGNhc2UgaXMgdG8gcmVzZXQgdGhlIGludGVybmFsIHN0YXRlIG9mIENFQyBj b250cm9sbGVycyBmb3IKPiA+Pj4+Pj4+Pj4+PiArCSAqIEhETUkgYnJpZGdlcy4KPiA+Pj4+Pj4+ Pj4+PiArCSAqLwo+ID4+Pj4+Pj4+Pj4+ICsJdm9pZCAoKmxvc3RfaG90cGx1Zykoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSk7Cj4gPj4+Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+Pj4+ICsJLyoqCj4g Pj4+Pj4+Pj4+Pj4gKwkgKiBAaHBkX2VuYWJsZToKPiA+Pj4+Pj4+Pj4+PiArCSAqCj4gPj4+Pj4+ Pj4+Pj4gKwkgKiBFbmFibGUgaG90IHBsdWcgZGV0ZWN0aW9uLiBGcm9tIG5vdyBvbiB0aGUgYnJp ZGdlIHNoYWxsIGNhbGwKPiA+Pj4+Pj4+Pj4+PiArCSAqIGRybV9icmlkZ2VfaHBkX25vdGlmeSgp IGVhY2ggdGltZSBhIGNoYW5nZSBpcyBkZXRlY3RlZCBpbiB0aGUgb3V0cHV0Cj4gPj4+Pj4+Pj4+ Pj4gKwkgKiBjb25uZWN0aW9uIHN0YXR1cywgdW50aWwgaG90IHBsdWcgZGV0ZWN0aW9uIGdldHMg ZGlzYWJsZWQgd2l0aAo+ID4+Pj4+Pj4+Pj4+ICsJICogQGhwZF9kaXNhYmxlLgo+ID4+Pj4+Pj4+ Pj4+ICsJICoKPiA+Pj4+Pj4+Pj4+PiArCSAqIFRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwgYW5k IHNoYWxsIG9ubHkgYmUgaW1wbGVtZW50ZWQgYnkgYnJpZGdlcwo+ID4+Pj4+Pj4+Pj4+ICsJICog dGhhdCBzdXBwb3J0IGhvdC1wbHVnIG5vdGlmaWNhdGlvbiB3aXRob3V0IHBvbGxpbmcuIEJyaWRn ZXMgdGhhdAo+ID4+Pj4+Pj4+Pj4+ICsJICogaW1wbGVtZW50IGl0IHNoYWxsIGFsc28gaW1wbGVt ZW50IHRoZSBAaHBkX2Rpc2FibGUgY2FsbGJhY2sgYW5kIHNldAo+ID4+Pj4+Pj4+Pj4+ICsJICog dGhlIERSTV9CUklER0VfT1BfSFBEIGZsYWcgaW4gdGhlaXIgJmRybV9icmlkZ2UtPm9wcy4KPiA+ Pj4+Pj4+Pj4+PiArCSAqLwo+ID4+Pj4+Pj4+Pj4+ICsJdm9pZCAoKmhwZF9lbmFibGUpKHN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2UpOwo+ID4+Pj4+Pj4+Pj4+ICsKPiA+Pj4+Pj4+Pj4+PiArCS8q Kgo+ID4+Pj4+Pj4+Pj4+ICsJICogQGhwZF9kaXNhYmxlOgo+ID4+Pj4+Pj4+Pj4+ICsJICoKPiA+ Pj4+Pj4+Pj4+PiArCSAqIERpc2FibGUgaG90IHBsdWcgZGV0ZWN0aW9uLiBPbmNlIHRoaXMgZnVu Y3Rpb24gcmV0dXJucyB0aGUgYnJpZGdlCj4gPj4+Pj4+Pj4+Pj4gKwkgKiBzaGFsbCBub3QgY2Fs bCBkcm1fYnJpZGdlX2hwZF9ub3RpZnkoKSB3aGVuIGEgY2hhbmdlIGluIHRoZSBvdXRwdXQKPiA+ Pj4+Pj4+Pj4+PiArCSAqIGNvbm5lY3Rpb24gc3RhdHVzIG9jY3Vycy4KPiA+Pj4+Pj4+Pj4+PiAr CSAqCj4gPj4+Pj4+Pj4+Pj4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsIGFuZCBzaGFs bCBvbmx5IGJlIGltcGxlbWVudGVkIGJ5IGJyaWRnZXMKPiA+Pj4+Pj4+Pj4+PiArCSAqIHRoYXQg c3VwcG9ydCBob3QtcGx1ZyBub3RpZmljYXRpb24gd2l0aG91dCBwb2xsaW5nLiBCcmlkZ2VzIHRo YXQKPiA+Pj4+Pj4+Pj4+PiArCSAqIGltcGxlbWVudCBpdCBzaGFsbCBhbHNvIGltcGxlbWVudCB0 aGUgQGhwZF9lbmFibGUgY2FsbGJhY2sgYW5kIHNldAo+ID4+Pj4+Pj4+Pj4+ICsJICogdGhlIERS TV9CUklER0VfT1BfSFBEIGZsYWcgaW4gdGhlaXIgJmRybV9icmlkZ2UtPm9wcy4KPiA+Pj4+Pj4+ Pj4+PiArCSAqLwo+ID4+Pj4+Pj4+Pj4+ICsJdm9pZCAoKmhwZF9kaXNhYmxlKShzdHJ1Y3QgZHJt X2JyaWRnZSAqYnJpZGdlKTsKPiA+Pj4+Pj4+Pj4+PiAgfTsKPiA+Pj4+Pj4+Pj4+PiAgCj4gPj4+ Pj4+Pj4+Pj4gIC8qKgo+ID4+Pj4+Pj4+Pj4+IEBAIC0zNzIsNiArNDc3LDM4IEBAIHN0cnVjdCBk cm1fYnJpZGdlX3RpbWluZ3Mgewo+ID4+Pj4+Pj4+Pj4+ICAJYm9vbCBkdWFsX2xpbms7Cj4gPj4+ Pj4+Pj4+Pj4gIH07Cj4gPj4+Pj4+Pj4+Pj4gIAo+ID4+Pj4+Pj4+Pj4+ICsvKioKPiA+Pj4+Pj4+ Pj4+PiArICogZW51bSBkcm1fYnJpZGdlX29wcyAtIEJpdG1hc2sgb2Ygb3BlcmF0aW9ucyBzdXBw b3J0ZWQgYnkgdGhlIGJyaWRnZQo+ID4+Pj4+Pj4+Pj4+ICsgKi8KPiA+Pj4+Pj4+Pj4+PiArZW51 bSBkcm1fYnJpZGdlX29wcyB7Cj4gPj4+Pj4+Pj4+Pj4gKwkvKioKPiA+Pj4+Pj4+Pj4+PiArCSAq IEBEUk1fQlJJREdFX09QX0RFVEVDVDogVGhlIGJyaWRnZSBjYW4gZGV0ZWN0IGRpc3BsYXlzIGNv bm5lY3RlZCB0bwo+ID4+Pj4+Pj4+Pj4+ICsJICogaXRzIG91dHB1dC4gQnJpZGdlcyB0aGF0IHNl dCB0aGlzIGZsYWcgc2hhbGwgaW1wbGVtZW50IHRoZQo+ID4+Pj4+Pj4+Pj4+ICsJICogJmRybV9i cmlkZ2VfZnVuY3MtPmRldGVjdCBjYWxsYmFjay4KPiA+Pj4+Pj4+Pj4+PiArCSAqLwo+ID4+Pj4+ Pj4+Pj4+ICsJRFJNX0JSSURHRV9PUF9ERVRFQ1QgPSBCSVQoMCksCj4gPj4+Pj4+Pj4+Pj4gKwkv KioKPiA+Pj4+Pj4+Pj4+PiArCSAqIEBEUk1fQlJJREdFX09QX0VESUQ6IFRoZSBicmlkZ2UgY2Fu IHJldHJpZXZlIHRoZSBFRElEIG9mIHRoZSBkaXNwbGF5Cj4gPj4+Pj4+Pj4+Pj4gKwkgKiBjb25u ZWN0ZWQgdG8gaXRzIG91dHB1dC4gQnJpZGdlcyB0aGF0IHNldCB0aGlzIGZsYWcgc2hhbGwgaW1w bGVtZW50Cj4gPj4+Pj4+Pj4+Pj4gKwkgKiB0aGUgJmRybV9icmlkZ2VfZnVuY3MtPmdldF9lZGlk IGNhbGxiYWNrLgo+ID4+Pj4+Pj4+Pj4+ICsJICovCj4gPj4+Pj4+Pj4+Pj4gKwlEUk1fQlJJREdF X09QX0VESUQgPSBCSVQoMSksCj4gPj4+Pj4+Pj4+Pj4gKwkvKioKPiA+Pj4+Pj4+Pj4+PiArCSAq IEBEUk1fQlJJREdFX09QX0hQRDogVGhlIGJyaWRnZSBjYW4gZGV0ZWN0IGhvdC1wbHVnIGFuZCBo b3QtdW5wbHVnCj4gPj4+Pj4+Pj4+Pj4gKwkgKiB3aXRob3V0IHJlcXVpcmluZyBwb2xsaW5nLiBC cmlkZ2VzIHRoYXQgc2V0IHRoaXMgZmxhZyBzaGFsbAo+ID4+Pj4+Pj4+Pj4+ICsJICogaW1wbGVt ZW50IHRoZSAmZHJtX2JyaWRnZV9mdW5jcy0+aHBkX2VuYWJsZSBhbmQKPiA+Pj4+Pj4+Pj4+PiAr CSAqICZkcm1fYnJpZGdlX2Z1bmNzLT5kaXNhYmxlX2hwZF9jYiBjYWxsYmFja3MuCj4gPj4+Pj4+ Pj4+Pj4gKwkgKi8KPiA+Pj4+Pj4+Pj4+PiArCURSTV9CUklER0VfT1BfSFBEID0gQklUKDIpLAo+ ID4+Pj4+Pj4+Pj4+ICsJLyoqCj4gPj4+Pj4+Pj4+Pj4gKwkgKiBARFJNX0JSSURHRV9PUF9NT0RF UzogVGhlIGJyaWRnZSBjYW4gcmV0cmlldmluZyB0aGUgbW9kZXMgc3VwcG9ydGVkCj4gPj4+Pj4+ Pj4+Pj4gKwkgKiBieSB0aGUgZGlzcGxheSBhdCBpdHMgb3V0cHV0LiBUaGlzIGRvZXMgbm90IGlu Y2x1ZGUgcmVhZGluZCBFRElECj4gPj4+Pj4+Pj4+Pj4gKwkgKiB3aGljaCBpcyBzZXBhcmF0ZWx5 IGNvdmVyZWQgYnkgQERSTV9CUklER0VfT1BfRURJRC4gQnJpZGdlcyB0aGF0IHNldAo+ID4+Pj4+ Pj4+Pj4+ICsJICogdGhpcyBmbGFnIHNoYWxsIGltcGxlbWVudCB0aGUgJmRybV9icmlkZ2VfZnVu Y3MtPmdldF9tb2RlcyBjYWxsYmFjay4KPiA+Pj4+Pj4+Pj4+PiArCSAqLwo+ID4+Pj4+Pj4+Pj4+ ICsJRFJNX0JSSURHRV9PUF9NT0RFUyA9IEJJVCgzKSwKPiA+Pj4+Pj4+Pj4+PiArfTsKPiA+Pj4+ Pj4+Pj4+PiArCj4gPj4+Pj4+Pj4+Pj4gIC8qKgo+ID4+Pj4+Pj4+Pj4+ICAgKiBzdHJ1Y3QgZHJt X2JyaWRnZSAtIGNlbnRyYWwgRFJNIGJyaWRnZSBjb250cm9sIHN0cnVjdHVyZQo+ID4+Pj4+Pj4+ Pj4+ICAgKi8KPiA+Pj4+Pj4+Pj4+PiBAQCAtMzk4LDYgKzUzNSwyOSBAQCBzdHJ1Y3QgZHJtX2Jy aWRnZSB7Cj4gPj4+Pj4+Pj4+Pj4gIAljb25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyAqZnVu Y3M7Cj4gPj4+Pj4+Pj4+Pj4gIAkvKiogQGRyaXZlcl9wcml2YXRlOiBwb2ludGVyIHRvIHRoZSBi cmlkZ2UgZHJpdmVyJ3MgaW50ZXJuYWwgY29udGV4dCAqLwo+ID4+Pj4+Pj4+Pj4+ICAJdm9pZCAq ZHJpdmVyX3ByaXZhdGU7Cj4gPj4+Pj4+Pj4+Pj4gKwkvKiogQG9wczogYml0bWFzayBvZiBvcGVy YXRpb25zIHN1cHBvcnRlZCBieSB0aGUgYnJpZGdlICovCj4gPj4+Pj4+Pj4+Pj4gKwllbnVtIGRy bV9icmlkZ2Vfb3BzIG9wczsKPiA+Pj4+Pj4+Pj4+PiArCS8qKgo+ID4+Pj4+Pj4+Pj4+ICsJICog QHR5cGU6IFR5cGUgb2YgdGhlIGNvbm5lY3Rpb24gYXQgdGhlIGJyaWRnZSBvdXRwdXQKPiA+Pj4+ Pj4+Pj4+PiArCSAqIChEUk1fTU9ERV9DT05ORUNUT1JfKikuIEZvciBicmlkZ2VzIGF0IHRoZSBl bmQgb2YgdGhpcyBjaGFpbiB0aGlzCj4gPj4+Pj4+Pj4+Pj4gKwkgKiBpZGVudGlmaWVzIHRoZSB0 eXBlIG9mIGNvbm5lY3RlZCBkaXNwbGF5Lgo+ID4+Pj4+Pj4+Pj4+ICsJICovCj4gPj4+Pj4+Pj4+ Pj4gKwlpbnQgdHlwZTsKPiA+Pj4+Pj4+Pj4+PiArCS8qKiBwcml2YXRlOiAqLwo+ID4+Pj4+Pj4+ Pj4+ICsJLyoqCj4gPj4+Pj4+Pj4+Pj4gKwkgKiBAaHBkX211dGV4OiBQcm90ZWN0cyB0aGUgQGhw ZF9jYiBhbmQgQGhwZF9kYXRhIGZpZWxkcy4KPiA+Pj4+Pj4+Pj4+PiArCSAqLwo+ID4+Pj4+Pj4+ Pj4+ICsJc3RydWN0IG11dGV4IGhwZF9tdXRleDsKPiA+Pj4+Pj4+Pj4+PiArCS8qKgo+ID4+Pj4+ Pj4+Pj4+ICsJICogQGhwZF9jYjogSG90IHBsdWcgZGV0ZWN0aW9uIGNhbGxiYWNrLCByZWdpc3Rl cmVkIHdpdGgKPiA+Pj4+Pj4+Pj4+PiArCSAqIGRybV9icmlkZ2VfaHBkX2VuYWJsZSgpLgo+ID4+ Pj4+Pj4+Pj4+ICsJICovCj4gPj4+Pj4+Pj4+Pj4gKwl2b2lkICgqaHBkX2NiKSh2b2lkICpkYXRh LCBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cyk7Cj4gPj4+Pj4+Pj4+Pj4gKwkvKioK PiA+Pj4+Pj4+Pj4+PiArCSAqIEBocGRfZGF0YTogUHJpdmF0ZSBkYXRhIHBhc3NlZCB0byB0aGUg SG90IHBsdWcgZGV0ZWN0aW9uIGNhbGxiYWNrCj4gPj4+Pj4+Pj4+Pj4gKwkgKiBAaHBkX2NiLgo+ ID4+Pj4+Pj4+Pj4+ICsJICovCj4gPj4+Pj4+Pj4+Pj4gKwl2b2lkICpocGRfZGF0YTsKPiA+Pj4+ Pj4+Pj4+PiAgfTsKPiA+Pj4+Pj4+Pj4+PiAgCj4gPj4+Pj4+Pj4+Pj4gIHZvaWQgZHJtX2JyaWRn ZV9hZGQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSk7Cj4gPj4+Pj4+Pj4+Pj4gQEAgLTQyOCw2 ICs1ODgsMTQgQEAgdm9pZCBkcm1fYXRvbWljX2JyaWRnZV9wcmVfZW5hYmxlKHN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UsCj4gPj4+Pj4+Pj4+Pj4gIHZvaWQgZHJtX2F0b21pY19icmlkZ2VfZW5h YmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gPj4+Pj4+Pj4+Pj4gIAkJCSAgICAgIHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7Cj4gPj4+Pj4+Pj4+Pj4gIAo+ID4+Pj4+Pj4+ Pj4+ICt2b2lkIGRybV9icmlkZ2VfaHBkX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl LAo+ID4+Pj4+Pj4+Pj4+ICsJCQkgICB2b2lkICgqY2IpKHZvaWQgKmRhdGEsCj4gPj4+Pj4+Pj4+ Pj4gKwkJCQkgICAgICBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cyksCj4gPj4+Pj4+ Pj4+Pj4gKwkJCSAgIHZvaWQgKmRhdGEpOwo+ID4+Pj4+Pj4+Pj4+ICt2b2lkIGRybV9icmlkZ2Vf aHBkX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSk7Cj4gPj4+Pj4+Pj4+Pj4gK3Zv aWQgZHJtX2JyaWRnZV9ocGRfbm90aWZ5KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gPj4+ Pj4+Pj4+Pj4gKwkJCSAgIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzKTsKPiA+Pj4+ Pj4+Pj4+PiArCj4gPj4+Pj4+Pj4+Pj4gICNpZmRlZiBDT05GSUdfRFJNX1BBTkVMX0JSSURHRQo+ ID4+Pj4+Pj4+Pj4+ICBzdHJ1Y3QgZHJtX2JyaWRnZSAqZHJtX3BhbmVsX2JyaWRnZV9hZGQoc3Ry dWN0IGRybV9wYW5lbCAqcGFuZWwsCj4gPj4+Pj4+Pj4+Pj4gIAkJCQkJdTMyIGNvbm5lY3Rvcl90 eXBlKTsKCi0tIApSZWdhcmRzLAoKTGF1cmVudCBQaW5jaGFydApfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1k ZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=