From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v7 09/11] drm: uevent for connector status change Date: Thu, 16 May 2019 14:24:55 +0200 Message-ID: <20190516122455.GA3851@phenom.ffwll.local> References: <8aa3980a6948b9b2b989c237f8453ca54e72ad95.camel@bootlin.com> <20190514110242.6f6ba4b0@eldfell.localdomain> <9b6386239ecae396fc4f5cc4467f8e76721f2c83.camel@intel.com> <20190514163602.7d252b12@eldfell.localdomain> <20190515103731.16855195@eldfell.localdomain> <20190515082449.GA17751@phenom.ffwll.local> <20190516112211.1cd5a8c6@eldfell.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x542.google.com (mail-ed1-x542.google.com [IPv6:2a00:1450:4864:20::542]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5253989319 for ; Thu, 16 May 2019 12:25:04 +0000 (UTC) Received: by mail-ed1-x542.google.com with SMTP id a8so5015093edx.3 for ; Thu, 16 May 2019 05:25:04 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20190516112211.1cd5a8c6@eldfell.localdomain> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Pekka Paalanen Cc: "Ser, Simon" , "thomas.petazzoni@bootlin.com" , "maxime.ripard@bootlin.com" , Daniel Vetter , "intel-gfx@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" , "paul.kocialkowski@bootlin.com" , "airlied@linux.ie" , "Vetter, Daniel" List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBNYXkgMTYsIDIwMTkgYXQgMTE6MjI6MTFBTSArMDMwMCwgUGVra2EgUGFhbGFuZW4g d3JvdGU6Cj4gT24gV2VkLCAxNSBNYXkgMjAxOSAxMDoyNDo0OSArMDIwMAo+IERhbmllbCBWZXR0 ZXIgPGRhbmllbEBmZndsbC5jaD4gd3JvdGU6Cj4gCj4gPiBPbiBXZWQsIE1heSAxNSwgMjAxOSBh dCAxMDozNzozMUFNICswMzAwLCBQZWtrYSBQYWFsYW5lbiB3cm90ZToKPiA+ID4gT24gVHVlLCAx NCBNYXkgMjAxOSAxNjozNDowMSArMDIwMAo+ID4gPiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0 dGVyQGZmd2xsLmNoPiB3cm90ZToKPiA+ID4gICAKPiA+ID4gPiBPbiBUdWUsIE1heSAxNCwgMjAx OSBhdCAzOjM2IFBNIFBla2thIFBhYWxhbmVuIDxwcGFhbGFuZW5AZ21haWwuY29tPiB3cm90ZTog IAo+ID4gPiA+ID4KPiA+ID4gPiA+IE9uIFR1ZSwgMTQgTWF5IDIwMTkgMTM6MDI6MDkgKzAyMDAK PiA+ID4gPiA+IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+IHdyb3RlOgo+ ID4gPiA+ID4gICAgCj4gPiA+ID4gPiA+IE9uIFR1ZSwgTWF5IDE0LCAyMDE5IGF0IDEwOjE4IEFN IFNlciwgU2ltb24gPHNpbW9uLnNlckBpbnRlbC5jb20+IHdyb3RlOiAgICAKPiA+ID4gPiA+ID4g Pgo+ID4gPiA+ID4gPiA+IE9uIFR1ZSwgMjAxOS0wNS0xNCBhdCAxMTowMiArMDMwMCwgUGVra2Eg UGFhbGFuZW4gd3JvdGU6ICAgIAo+ID4gPiAKPiA+ID4gLi4uCj4gPiA+ICAgCj4gPiA+ID4gPiA+ ID4gPiBIaSBEYW5pZWwsCj4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4ganVzdCB0byBj bGFyaWZ5IHRoZSBmaXJzdCBjYXNlLCBzcGVjaWZpYyB0byBvbmUgdmVyeSBwYXJ0aWN1bGFyCj4g PiA+ID4gPiA+ID4gPiBwcm9wZXJ0eToKPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiBX aXRoIEhEQ1AsIHRoZXJlIGlzIGEgcHJvcGVydHkgdGhhdCBtYXkgY2hhbmdlIGR5bmFtaWNhbGx5 IGF0IHJ1bnRpbWUKPiA+ID4gPiA+ID4gPiA+ICh0aGUgdW5kZXNpcmVkL2Rlc2lyZWQvZW5hYmxl ZCB0cmlzdGF0ZSkuIFVzZXJzcGFjZSBtdXN0IGJlIG5vdGlmaWVkCj4gPiA+ID4gPiA+ID4gPiB3 aGVuIGl0IGNoYW5nZXMsIEkgZG8gbm90IHdhbnQgdXNlcnNwYWNlIGhhdmUgdG8gcG9sbCB0aGF0 IHByb3BlcnR5Cj4gPiA+ID4gPiA+ID4gPiB3aXRoIGEgdGltZXIuCj4gPiA+ID4gPiA+ID4gPgo+ ID4gPiA+ID4gPiA+ID4gV2hlbiB0aGF0IHByb3BlcnR5IGFsb25lIGNoYW5nZXMsIGFuZCB1c2Vy c3BhY2UgaXMgcHJlcGFyZWQgdG8gaGFuZGxlCj4gPiA+ID4gPiA+ID4gPiB0aGF0IHByb3BlcnR5 IGNoYW5naW5nIGFsb25lLCBpdCBtdXN0IG5vdCB0cmlnZ2VyIGEgcmVwcm9iZSBvZiB0aGUKPiA+ ID4gPiA+ID4gPiA+IGNvbm5lY3Rvci4gVGhlcmUgaXMgbm8gcmVhc29uIHRvIHJlcHJvYmUgYXQg dGhhdCBwb2ludCBBRkFJVS4KPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiBIb3cgZG8g eW91IGVuc3VyZSB0aGF0IHVzZXJzcGFjZSBjYW4gYXZvaWQgdHJpZ2dlcmluZyBhIHJlcHJvYmUg d2l0aCB0aGUKPiA+ID4gPiA+ID4gPiA+IGVwb2NoIGFwcHJvYWNoIG9yIHdpdGggYW55IGFsdGVy bmF0ZSB1ZXZlbnQgZGVzaWduPwo+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+IFdlIG5l ZWQgYW4gZXZlbnQgdG8gdXNlcnNwYWNlIHRoYXQgaW5kaWNhdGVzIHRoYXQgcmUtcmVhZGluZyB0 aGUKPiA+ID4gPiA+ID4gPiA+IHByb3BlcnRpZXMgaXMgZW5vdWdoIGFuZCByZXByb2JlIG9mIHRo ZSBjb25uZWN0b3IgaXMgbm90IG5lY2Vzc2FyeS4KPiA+ID4gPiA+ID4gPiA+IFRoaXMgaXMgY29t cGxlbWVudGFyeSB0byBpbmRpY2F0aW5nIHRvIHVzZXJzcGFjZSB0aGF0IG9ubHkgc29tZQo+ID4g PiA+ID4gPiA+ID4gY29ubmVjdG9ycyBuZWVkIHRvIGJlIHJlcHJvYmVkIGluc3RlYWQgb2YgZXZl cnl0aGluZy4gICAgCj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBDYW4ndCB5b3UgdXNlIHRo ZSBQUk9QRVJUWSBoaW50PyBJZiBQUk9QRVJUWSBpcyB0aGUgSERDUCBvbmUsIHNraXAgdGhlCj4g PiA+ID4gPiA+ID4gcmVwcm9iaW5nLiBXb3VsZCB0aGF0IHdvcms/ICAgIAo+ID4gPiA+ID4KPiA+ ID4gPiA+IEhpLAo+ID4gPiA+ID4KPiA+ID4gPiA+IHllcywgdGhhdCB3b3VsZCB3b3JrLCBpZiBp dCB3YXMgYWNjZXB0YWJsZSB0byBEUk0gdXBzdHJlYW0uIFRoZSByZXBsaWVzCj4gPiA+ID4gPiB0 byBQYXVsIHNlZW1lZCB0byBiZSBnb2luZyBzb3V0aCBzbyBmYXN0IHRoYXQgSSB0aG91Z2h0IHdl IHdvdWxkbid0IGdldAo+ID4gPiA+ID4gYW55IG5ldyB1ZXZlbnQgZmllbGRzIGluIGZhdm91ciBv ZiAiZXBvY2ggY291bnRlcnMiLgo+ID4gPiA+ID4gICAgCj4gPiA+ID4gPiA+IFllcyB0aGF0J3Mg dGhlIGlkZWEsIGRlcGVuZGluZyB1cG9uIHdoaWNoIHByb3BlcnR5IHlvdSBnZXQgeW91IGtub3cK PiA+ID4gPiA+ID4gaXQncyBhIHNpbmsgY2hhbmdlIChuZWVkcyBmdWxsIHJlcHJvYmUpIG9yIHNv bWV0aGluZyBlbHNlIGxpa2UgaGRjcAo+ID4gPiA+ID4gPiBzdGF0ZSBtYWNoaW5lcnkgdXBkYXRl LiAgICAKPiA+ID4gPiA+Cj4gPiA+ID4gPiBSaWdodC4KPiA+ID4gPiA+ICAgIAo+ID4gPiA+ID4g PiBXcnQgYXZvaWRpbmcgdGhlIGZ1bGwgcmVwcm9iZSBmb3Igc2luayBjaGFuZ2VzOiBJIHRoaW5r IHdlIHNob3VsZAo+ID4gPiA+ID4gPiBpbmRlZWQgZGVjb3VwbGUgdGhhdCBmcm9tIHRoZSBwZXIt Y29ubmVjdG9yIGV2ZW50IGZvciBzaW5rIGNoYW5nZXMuCj4gPiA+ID4gPiA+IFRoYXQgYWxvbmcg aXMgYSBnb29kIHdpbiBhbHJlYWR5LCBzaW5jZSB5b3Uga25vdyBmb3Igd2hpY2ggY29ubmVjdG9y Cj4gPiA+ID4gPiA+IHlvdSBuZWVkIHRvIGNhbGwgZHJtR2V0Q29ubmVjdG9yICh3aGljaCBmb3Jj ZXMgdGhlIHJlcHJvYmUpLiBJdCB3b3VsZAo+ID4gPiA+ID4gPiBiZSBuaWNlIHRvIG9ubHkgY2Fs bCBkcm1HZXRDb25uZWN0b3JDdXJyZW50IChhdm9pZHMgdGhlIHJlcHJvYmUpLCBidXQKPiA+ID4g PiA+ID4gaGlzdG9yaWNhbGx5IHNwZWFraW5nIGV2ZXJ5IHRpbWUgd2UgdHJpZWQgdG8gcmVseSBv biB0aGlzIHdlIGVuZGVkIHVwCj4gPiA+ID4gPiA+IHJlZ3JldHRpbmcgdGhpbmdzLiAgICAKPiA+ ID4gPiA+Cj4gPiA+ID4gPiBXaGF0IGNoYW5nZWQ/IFRoaXMgc291bmRzIHZlcnkgbXVjaCB3aGF0 IFBhdWwgc3VnZ2VzdGVkLiBMb29raW5nIGF0IGl0Cj4gPiA+ID4gPiBmcm9tIHVzZXJzcGFjZSBz aWRlOiAgICAKPiA+ID4gPiAKPiA+ID4gPiBUaGlzIHNvdW5kcyBzb2xpZCwgc29tZSByZWZpbmVt ZW50cyBiZWxvdzoKPiA+ID4gPiAgIAo+ID4gPiA+ID4gSE9UUExVRz0xIENPTk5FQ1RPUj14eCBQ Uk9QRVJUWT15eQo+ID4gPiA+ID4KPiA+ID4gPiA+IC0gSWYgeXkgaXMgIkNvbnRlbnQgUHJvdGVj dGlvbiIsIG5vIG5lZWQgdG8gZHJtTW9kZUdldENvbm5lY3RvcigpLCBqdXN0Cj4gPiA+ID4gPiAg IHJlLWdldCB0aGUgY29ubmVjdG9yIHByb3BlcnRpZXMuCj4gPiA+ID4gPgo+ID4gPiA+ID4gLSBL ZXJuZWwgcHJvYmFibHkgc2hvdWxkbid0IGJvdGhlciBzZW5kaW5nIHRoaXMgZm9yIHByb3BlcnRp ZXMgd2hlcmUKPiA+ID4gPiA+ICAgcmUtcHJvYmUgY291bGQgYmUgbmVjZXNzYXJ5LCBhbmQgc2Vu ZCB0aGUgYmVsb3cgaW5zdGVhZC4gICAgCj4gPiA+ID4gCj4gPiA+ID4gCj4gPiA+ID4gSSB0aGlu ayB3ZSBzaG91bGQgYXNzZXJ0IHRoYXQgdGhlIGtlcm5lbCBjYW4gZ2V0IHRoZSBuZXcgcHJvcGVy dHkKPiA+ID4gPiB2YWx1ZXMgdXNpbmcgZHJtTW9kZUdldENvbm5lY3RvckN1cnJlbnQgZm9yIHRo aXMgY2FzZSwgaS5lLiB0aGUga2VybmVsCj4gPiA+ID4gZG9lcyBub3QgZXhwZWN0IGEgZnVsbCBy ZXByb2JlLiBJLmUuIHVwZ3JhZGUgeW91ciBpZGVhIGZyb20gInNob3VsZCIKPiA+ID4gPiB0byAi bXVzdCIgIAo+ID4gPiAKPiA+ID4gSGkgRGFuaWVsLAo+ID4gPiAKPiA+ID4gb2ssIHRoYXQncyBn b29kLgo+ID4gPiAgIAo+ID4gPiA+IEZ1cnRoZXJtb3JlIGRpZmZlcmVudCBwcm9wZXJ0eSBjYW4g aW5kaWNhdGUgZGlmZmVyZW50IGtpbmQgb2YgdXBkYXRlcywKPiA+ID4gPiBlLmcuIGhkY3AgdnMg Z2VuZXJhbCBzaW5rIGNoYW5nZSB2cy4gd2hhdGV2ZXIgZWxzZSBtaWdodCBjb21lIGluIHRoZQo+ ID4gPiA+IGZ1dHVyZS4gIAo+ID4gPiAKPiA+ID4gV2hhdCBkbyB5b3UgbWVhbiBieSBkaWZmZXJl bnQga2luZHMgb2YgdXBkYXRlcz8gIAo+ID4gCj4gPiBBdG0gd2UncmUgZGlzY3Vzc2luZyB0d286 Cj4gPiAKPiA+IC0gIkNvbnRlbnQgUHJvdGVjdGlvbiIKPiA+IC0gInNpbmsgY2hhbmdlZCwgYnV0 IHlvdSBkb24ndCBuZWVkIHRvIHJlcHJvYmUiIHRoaXMgd291bGQgYmUgcXVpdGUgYSBiaXQKPiA+ ICAgYSBjYXRjaCBhbGwgZnJvbSB0aGUgb3V0cHV0IGRldGVjdGlvbi4gUGF1bCB0aGlua3MgZGlm ZmVyZW50bHksIGJ1dCBJJ20KPiA+ICAgbm90IHNvbGQgb24gc3BsaXR0aW5nIHRoaXMgdXAgbW9y ZSwgYXQgbGVhc3Qgbm90IHJpZ2h0IG5vdy4gVGhpcyB3b3VsZAo+ID4gICBpbmNsdWRlIGNvbm5l Y3RvciBzdGF0dXMgKGFuZCByZWxhdGVkIHRoaW5ncyByZXR1cm5lZCBieSBkcm1HZXRDb25uZWN0 b3IKPiA+ICAgd2hpY2ggY3VycmVudGx5IGFyZW4ndCBhIHByb3BlcnR5KSwgRURJRCwgdGhlIG1z dCBwYXRoIGlkLCB0aGF0IGtpbmQgb2YKPiA+ICAgc3R1ZmYuCj4gPiAKPiA+IEltZSBvbmNlIHdl IGhhdmUgMiwgdGhlcmUncyBtb3JlIGJvdW5kIHRvIGNvbWUgOi0pCj4gCj4gSGkgRGFuaWVsLAo+ IAo+IEkgZG9uJ3QgdW5kZXJzdGFuZCB3aGF0IHRoZSAic2luayBjaGFuZ2VkIiB0aGluZyBjb3Vs ZCBiZSwgYnV0IHN1cmUsCj4gdGhlcmUgY2FuIGJlIG1vcmUuCgpTbyBpZiB5b3UgaGF2ZSBhIHJl cGVhdGVyIChoZG1pIG9yIGRwKSBhbmQgeW91IGNoYW5nZSB0aGUgdGhpbmcgeW91IHBsdWcKaW50 byB0aGF0LCB0aGVuIG9uIHRoZSBjb21wdXRlciB5b3UgZG9uJ3QgZ2V0IGEgZnVsbCBob3RwbHVn LCBiZWNhdXNlIHRoZQpyZXBlYXRlciB3YXMgYWx3YXlzIGNvbm5lY3RlZC4gSW5zdGVhZCB5b3Ug Z2V0IGEgc2hvcnQgcHVsc2UgaG90cGx1ZywKaW5kaWNhdGluZyB0aGF0IHNvbWV0aGluZyB3aXRo IHRoZSBzaW5rIGhhcyBjaGFuZ2VkLiBUaGlzIGNvdWxkIGJlIGEKc2xpZ2h0bHkgYWRqdXN0ZWQg RURJRCAoZS5nLiBkaWZmZXJlbnQgZWxkIGluIHRoZSBhdWRpbyBzZWN0aW9uKSwgb3IKc29tZXRo aW5nIGVsc2UuIFRoYXQncyB3aGF0IEkgbWVhbiB3aXRoICJzaW5rIGNoYW5nZWQiLiBTaW1pbGFy IHRoaW5nIGNhbgpoYXBwZW4gaWYgeW91IHVucGx1ZyBhbmQgdGhlbiBwbHVnIGluIHNvbWV0aGlu ZyBlbHNlIHJlYWwgcXVpY2sgKHVzdWFsbHkKb3ZlciBzdXNwZW5kL3Jlc3VtZSksIHdoZXJlIGNv bm5lY3Rvci0+c3RhdHVzIHN0YXlzIHRoZSBzYW1lLCBidXQgdGhlCmFjdHVhbCB0aGluZyBwbHVn Z2VkIGluIGlzIGRpZmZlcmVudC4gSSB0aGluayBmb3IgaGRtaSB0aGlzIGlzIGp1c3QgdGhlCkVE SUQsIGJ1dCB3ZSBkbyBwYXJzZSBhIGJ1bmNoIG9mIHRoaW5ncyBvdXQgb2YgdGhlIEVESUQgdGhh dCBoYXZlIGZ1cnRoZXIKZWZmZWN0cyAoY29sb3Igc3BhY2UsIG1heCBjbG9jaykuIFdpdGggRFAg dGhlcmUncyBhbHNvIGRwIGF1eCBzdHVmZiwgZS5nLgppZiB5b3Ugc3dpdGNoIGZyb20gYSAyIGxh bmUgdG8gYSA0IGxhbmUgY2FibGUgdGhlbiB3aXRoIHNhbWUgc2NyZWVuIG1vcmUKbW9kZXMgY2Fu IHdvcmsuCgpDbGVhcmVyPwoKSSBndWVzcyBmb3IgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoaXMg bmV3IHVhcGkgd2UgbmVlZCB0byBtYWtlIGFuCmV4aGF1c3RpdmUgbGlzdCBvZiBhbGwgdGhlIHRo aW5ncyB0aGF0IG1pZ2h0IGhhdmUgY2hhbmdlZCBmb3IgYSAic2luawpjaGFuZ2VkIiBldmVudCwg d2hhdGV2ZXIgd2UgYWN0dWFsbHkgYWdyZWUgb24gd2hhdCB0aGF0IHNob3VsZCBsb29rIGxpa2Uu Ck9yIHRoZSBQUk9QRVJUWT0wIGZhbGxiYWNrIHlvdSBtZW50aW9uIGJlbG93IGFzIGEgZmFsbGJh Y2sgaWRlYS4KCj4gPiA+IEJ0dy4gSSBzdGFydGVkIHRoaW5raW5nLCBtYXliZSB3ZSBzaG91bGQg Y29tcGxldGVseSBsZWF2ZSBvdXQgdGhlICJJZgo+ID4gPiB5eSBpcyAiQ29udGVudCBQcm90ZWN0 aW9uIiIgYW5kIHJlcXVpcmUgdGhlIGtlcm5lbCB0byBndWFyYW50ZWUsIHRoYXQKPiA+ID4gaWYg UFJPUEVSVFkgaXMgc2V0LCB0aGVuIGRybU1vZGVHZXRDb25uZWN0b3IoKSAocHJvYmluZykgbXVz dCBub3QgYmUKPiA+ID4gbmVjZXNzYXJ5IGJhc2VkIG9uIHRoaXMgZXZlbnQgYWxvbmUuCj4gPiA+ IAo+ID4gPiBXcml0aW5nIGl0IGRvd24gYWdhaW46Cj4gPiA+IAo+ID4gPiBIT1RQTFVHPTEgQ09O TkVDVE9SPXh4IFBST1BFUlRZPXl5Cj4gPiA+IAo+ID4gPiAtIHl5IGRlbm90ZXMgd2hpY2ggY29u bmVjdG9yIHh4IHByb3BlcnR5IGNoYW5nZWQuICAKPiA+IAo+ID4gTWF5YmUgeXkgZGVub3RlcyB3 aGljaCBncm91cCBvZiBwcm9wZXJ0aWVzIGNoYW5nZWQsIGFuZCBwYXJ0IG9mIHRoZSB1YXBpCj4g PiBpcyBwaWNraW5nIHRoZSBjYW5vbmljYWwgb25lLiBFLmcuIGNvbnRlbnQgcHJvdGVjdGlvbiBt aWdodCBhbHNvIGdhaW4gbW9yZQo+ID4gcHJvcGVydGllcyBpbiB0aGUgZnV0dXJlICh0aGVyZSdz IHBhdGNoZXMsIGJ1dCB0aGUgdXNlcnNwYWNlIHdvbid0IGJlIG9wZW4KPiA+IHNvdXJjZWQpLiBB bmQgZm9yIHRoYXQgY2FzZSBJIGRvbid0IHRoaW5rIHdlIHNob3VsZCB0aGVuIHNlbmQgYW4gZXZl biBmb3IKPiA+IGV2ZXJ5IHNpbmdsZSBpbmRpdmlkdWFsIHByb3BlcnR5LCBidXQganVzdCBmb3Ig dGhlIGxlYWQgcHJvcGVydHkuCj4gPiAKPiA+IE1heWJlIHdlIHNob3VsZCBjaGFuZ2UgaXQgdG8g VVBEQVRFX1RZUEU9PHNvbWUtdW5pcXVlLXN0cmluZz4sIGJ1dCBpdCBmZWx0Cj4gPiBiZXR0ZXIg dG8gdXNlIHRoZSBwcm9wZXJ0eSBpZCB3ZSBhbHJlYWR5IGhhdmUgZm9yIHRoaXMuCj4gCj4gSW5k ZWVkLCBpdCBpcyBub3QgcmVhbGx5IG5lY2Vzc2FyeSB0byBpZGVudGlmeSB0aGUgZXhhY3QgcHJv cGVydHkuCj4gCj4gV2UgY291bGQgZXZlbiBqdXN0IHVzZSBQUk9QRVJUWT0wIHRvIGluZGljYXRl ICJzb21ldGhpbmcgbWF5IGhhdmUKPiBjaGFuZ2VkLCB5b3Ugc2hvdWxkIHJlLWdldCB0aGUgcHJv cGVydGllcywgYnV0IG5vIG5lZWQgdG8gcHJvYmUgSQo+IHByb21pc2UiLgo+IAo+IE9yIGxpa2Ug eW91IHNhaWQsIHdoYXRldmVyLiBJIGRvbid0IHJlYWxseSBjYXJlIGFzIGxvbmcgYXMgdGhlCj4g c2VtYW50aWNzIGFyZSB0aGUgc2FtZS4KPiAKPiA+ID4gLSBVc2Vyc3BhY2UgZG9lcyBub3QgbmVl ZCB0byBkbyBkcm1Nb2RlR2V0Q29ubmVjdG9yKCksIGl0IG9ubHkgbmVlZHMgdG8KPiA+ID4gICBk cm1Nb2RlT2JqZWN0R2V0UHJvcGVydGllcygpIG9uIHRoZSBjb25uZWN0b3IgdG8gcmVjZWl2ZSB0 aGUgbmV3Cj4gPiA+ICAgdXBkYXRlZCBwcm9wZXJ0eSB2YWx1ZXMuICAKPiA+IAo+ID4gZHJtTW9k ZUdldENvbm5lY3RvcihDdXJyZW50KSBhbHNvIHN1cHBsaWVzIGFsbCB0aGUgcHJvcGVydGllcyBh bHJlYWR5Lgo+ID4gVGhpcyBpcyBzcGVjaWFsIHdpdGggY29ubmVjdG9ycywgc2luY2UgdGhlIHBy ZWRhdGUgdGhlICJwcm9wZXJ0aWVzIG9uCj4gPiBldmVyeXRoaW5nIiBkZXNpZ24uIEknZCBqdXN0 IG1lbnRpb24gdGhpcyBmdW5jdGlvbiBoZXJlLCBhbmQgaWdub3JlCj4gPiBkcm1Nb2RlT2JqZWN0 R2V0UHJvcGVydGllcy4KPiAKPiBUbyBhdm9pZCBjb25mdXNpb24sIGl0IHdvdWxkIGJlIGJlc3Qg dG8gbWVudGlvbiBhbGwgdGhyZWUgZnVuY3Rpb25zCj4gdGhlbi4gSXQgaXMgdmVyeSBlYXN5IHRv IGZvcmdldCBhYm91dCBsZWdhY3kgdUFQSSBsaWtlIHByb3BlcnRpZXMKPiB0aHJvdWdoIEdldENv bm5lY3Rvci4KPiAKPiA+ID4gLSBLZXJuZWwgbXVzdCBub3Qgc2VuZCB0aGlzIGV2ZW50IGZvciBj aGFuZ2VzIHRoYXQgbWF5IHJlcXVpcmUgcHJvYmluZwo+ID4gPiAgIGZvciBjb3JyZWN0IHJlc3Vs dHMsIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnMgKGJ1Z2d5IGhhcmR3YXJlLCBldGMuKQo+ID4gPiAg IGluY2x1ZGVkLiBJbnN0ZWFkLCB0aGUga2VybmVsIG11c3Qgc2VuZCBvbmUgb2YgdGhlIGJlbG93 IGV2ZW50cy4KPiA+ID4gCj4gPiA+IElzIHRoZXJlIGFjdHVhbGx5IGFueXRoaW5nIGludGVyZXN0 aW5nIHRoYXQKPiA+ID4gZHJtTW9kZUdldENvbm5lY3RvckN1cnJlbnQoKSBjb3VsZCBndWFyYW50 ZWVkIGNvcnJlY3RseSByZXR1cm4gdGhhdCBpcwo+ID4gPiBub3QgYSBwcm9wZXJ0eSBhbHJlYWR5 PyBJJ2QgcHJvYmFibHkgbGVhdmUgdGhpcyBjb25zaWRlcmF0aW9uIG91dAo+ID4gPiBjb21wbGV0 ZWx5LCBhbmQganVzdCBzYXkgZG8gb25lIG9mIHRoZSBuZWVkcy1wcm9iaW5nIGV2ZW50cyBpZiBh bnl0aGluZwo+ID4gPiB0aGVyZSBjaGFuZ2VkLiAgCj4gPiAKPiA+IFRoYXQncyB3aHkgSSdtIHN1 Z2dlc3RpbmcgdGhlIFBST1BFUlRZPTxlcG9jaF9wcm9wX2lkPiB3b3VsZCBpbmRpY2F0ZSBhbGwK PiA+IHNpbmsgcmVsYXRlZCBzdHVmZiwgaW5jbHVkaW5nIHRoZSBub3QtcHJvcGVycGVydHktZmll ZCBzdHVmZiBpcyB1cGRhdGVkLAo+ID4gYW5kIHdpbGwgYmUgcmVwb3J0ZWQgY29ycmVjdGx5IGJ5 IEdldENvbm5lY3RvckN1cnJlbnQuCj4gCj4gSnVzdCBiZWNhdXNlIEdldENvbm5lY3RvckN1cnJl bnQgcmV0dXJucyB0aGUgc2FtZSBwcm9wZXJ0aWVzIGFzCj4gZHJtTW9kZU9iamVjdEdldFByb3Bl cnRpZXM/IE9rIHRoZW4uIFBlcnNvbmFsbHkgSSdtIHF1aXRlIGZpcm1seSBpbiB0aGUKPiBsYW5k IHdoZXJlIGRybU1vZGVPYmplY3RHZXRQcm9wZXJ0aWVzIGV4aXN0cywgc28gZG9uJ3QgcmVhbGx5 IGNhcmUKPiBhYm91dCB0aGUgbGVnYWN5IHN0dWZmLgoKU28gZnJvbSBhIHF1aWNrIHNraW1taW5n IEdldENvbm5lY3RvckN1cnJlbnQgPT0gR2V0UHJvcGVydGllcywgZXhjZXB0IHlvdQpkb24ndCBn ZXQgdGhlIG5vbi1wcm9wZXJ0aWZpZWQgc3R1ZmYgbGlrZSBtb2RlIGxpc3QsIC0+c3RhdHVzLCBh bmQgYSBmZXcKb3RoZXIgdGhpbmdzIHdlIHBhcnNlIG91dCBmcm9tIHZhcmlvdXMgc291cmNlcy4g U28gZm9yIGNvbm5lY3RvcnMgeW91IG5lZWQKdG8gdXNlIEdldENvbm5lY3Rvci9DdXJyZW50IGFu eXdheSBJIHRoaW5rLCBpZiB5b3UgcmVseSBvbiBHZXRQcm9wZXJ0aWVzCm9ubHksIHlvdSdyZSBt aXNzaW5nIHN0dWZmLgoKQWdyZWVkIHRoYXQgd2UgbmVlZCB0byBzcGVsbCB0aGlzIGFsbCBvdXQu Cgo+ID4gPiA+ID4gSE9UUExVRz0xIENPTk5FQ1RPUj14eAo+ID4gPiA+ID4KPiA+ID4gPiA+IC0g TmVlZHMgdG8gZHJtTW9kZUdldENvbm5lY3RvcigpIG9uIHRoZSBvbmUgY29ubmVjdG9yLCBubyBu ZWVkIHRvIHByb2JlCj4gPiA+ID4gPiAgIG90aGVycy4gSW1wbGllcyB0aGF0IG9uZSBuZWVkcyB0 byByZS1nZXQgdGhlIGNvbm5lY3RvciBwcm9wZXJ0aWVzIGFzCj4gPiA+ID4gPiAgIHdlbGwuICAg IAo+ID4gPiA+IAo+ID4gPiA+IFNvdW5kcyBnb29kLgo+ID4gPiA+ICAgCj4gPiA+ID4gPiBIT1RQ TFVHPTEKPiA+ID4gPiA+Cj4gPiA+ID4gPiAtIE5lZWQgdG8gZG8gZHJtTSBvZGVHZXRSZXNvdWNl cygpIHRvIGRpc2NvdmVyIG5ldy9kaXNhcHBlYXJlZAo+ID4gPiA+ID4gICBjb25uZWN0b3JzLCBh bmQgbmVlZCB0byBkcm1Nb2RlR2V0Q29ubmVjdG9yIHRvIHJlLXByb2JlIGV2ZXJ5Cj4gPiA+ID4g PiAgIGNvbm5lY3Rvci4gKEFzIGFsd2F5cy4pICAgIAo+ID4gPiA+IAo+ID4gPiA+IE1heWJlIHdl IHNob3VsZCBjbGFyaWZ5IHRoYXQgdGhpcyBpcyBhbHNvIHdoYXQgeW91IGdldCB3aGVuIGFuIGVu dGlyZQo+ID4gPiA+IGNvbm5lY3RvciBhcHBlYXJzL2Rpc2FwcGVhcnMgKGZvciBkcCBtc3QgaG90 cGx1ZykuICAKPiA+ID4gCj4gPiA+IFllcywgdGhhdCdzIHdoYXQgSSB3cm90ZS4gOi0pCj4gPiA+ IAo+ID4gPiBXZXN0b24gaW1wbGVtZW50cyB0aGUgZGlzY292ZXJ5IG9mIGFwcGVhcmluZy9kaXNh cHBlYXJpbmcgY29ubmVjdG9ycwo+ID4gPiAoYXMgb3Bwb3NlZCB0byBjb25uZWN0aW5nL2Rpc2Nv bm5lY3RpbmcgY29ubmVjdG9ycykuIE5vdCBzdXJlIGFueW9uZQo+ID4gPiBoYXMgZXZlciB0ZXN0 ZWQgaXQgdGhvdWdoLi4uICAKPiA+IAo+ID4gRnJvbSB3aGF0IC1tb2Rlc2V0dGluZyBhbmQgWCBk cml2ZXJzIGRvOiBFeHBlY3Qgc3VycHJpc2VzIGluIHJlYWwgd29ybGQKPiA+IHVzYWdlIDotLwo+ IAo+IEkgZG9uJ3Qga25vdyB3aGF0IHRoZXkgZG8sIGJ1dCBzdXJlLCBhbHdheXMuIDotKQo+IAo+ IEFzIGxvbmcgYXMgbm8tb25lIHVzZXMgdW50ZXN0ZWQgV2VzdG9uIGNvZGUgdG8gc2NyZWFtICJr ZXJuZWwKPiByZWdyZXNzaW9uIi4uLgo+IAo+ID4gPiA+IE1heWJlIHdlIGNvdWxkIG1ha2UgYW4g YWRkaXRpb25hbCBydWxlIHRoYXQgaWYgYSBjb25uZWN0b3IgaGFzIHRoZQo+ID4gPiA+IEVQT0NI IHByb3BlcnR5LCB0aGVuIGl0IGRvZXMgX25vdF8gbmVlZCB0byBiZSByZXByb2JlIGZvciB0aGUg Z2xvYmFsCj4gPiA+ID4gZXZlbnRzLiBGb3IgdGhhdCBjYXNlIHVzZXJzcGFjZSBzaG91bGQgb25s eSBjaGVjayB3aGV0aGVyIHRoZXJlJ3MKPiA+ID4gPiBuZXcvcmVtb3ZlZCBjb25uZWN0b3JzLCBh bmQgdGhlbiBwcm9iZSB0aGUgbmV3IG9uZXMgKGFuZCBkaXNhYmxlIHRoZQo+ID4gPiA+IHJlbW92 ZWQgb25lcyBhcyBuZWVkZWQpLiBXZSBjYW4gYWxzbyB1c2Ugc29tZSBvdGhlciBmbGFnIHRvIGlu ZGljYXRlCj4gPiA+ID4gdGhpcyBpZiB3ZSBkb24ndCBhZGQgdGhlIGVwb2NoIHByb3BydHkuICAK PiA+ID4gCj4gPiA+IFNvdW5kcyBmaW5lIHRvIG1lLCB0aG91Z2ggSSdtIG5vdCB0b28gY2xlYXIg d2hhdCB0aGUgZXBvY2ggcHJvcGVydHkKPiA+ID4gaXMgZGVzaWduZWQgdG8gYWNoaWV2ZS4gSXMg aXQgYWJvdXQgYXZvaWRpbmcgcmUtcHJvYmluZyB3aGVuIHJlLWdhaW5pbmcKPiA+ID4gRFJNIG1h c3RlciBhZnRlciBoYXZpbmcgbGV0IGl0IGdvLCBlLmcuIFZULXN3aXRjaGluZyBiYWNrIGZyb20g YW5vdGhlcgo+ID4gPiBWVD8gVGhhdCB3b3VsZCBiZSBuaWNlLiAgCj4gPiAKPiA+IFl1cCwgcHJl dHR5IG11Y2guIFBsdXMgSSB0aGluayB3ZSBuZWVkIHRoZSBlcG9jaCBpbnRlcm5hbGx5IGluIHRo ZSBrZXJuZWwKPiA+IGFueXdheSwgdG8gZmlndXJlIG91dCB3aGF0IGhhcyBjaGFuZ2VkIHdpdGhv dXQgaGF2aW5nIHRvIHJld3JpdGUgZW5kbGVzcwo+ID4gYW1vdW50cyBvZiBvdXRwdXQgZGV0ZWN0 aW9uIGNvZGUgaW4gYWxsIGRyaXZlcnMgdG8gcGFzcyB1cCBhIG5ldyBzdGF0dXMKPiA+IGNoYW5n ZSByZXR1cm4gY29kZS4gQmVjYXVzZSBhdG0gd2UgdG90YWxseSBmYWlsIHRvIHRyYWNrIHNpbmst cmVsYXRlZAo+ID4gY2hhbmdlcyBmcm9tIHNob3J0IHB1bHNlIGhwZCAoaS5lLiBzdGF5cyBjb25u ZWN0ZWQsIGJ1dCBlLmcuIGVkaWQKPiA+IGNoYW5nZWQpLgo+IAo+IEkgZG8gbm90IGNhcmUgYXQg YWxsIHdoYXQgeW91IG1pZ2h0IG5lZWQgaW50ZXJuYWxseS4gOy0pCj4gCj4gSSBhbSBzb2xlbHkg aW50ZXJlc3RlZCBpbiB0aGUgdUFQSSwgYW5kIHdpbGwgbm90IGxvb2sgYXQga2VybmVsIGNvZGUu IEkKPiBqdXN0IGRvbid0IGhhdmUgdGhlIHRpbWUgZm9yIHRoYXQuCj4gCj4gPiA+ID4gPiBUaGF0 IHNob3VsZCBiZSBhbHNvIGJhY2t3YXJkcy1jb21wYXRpYmxlOiBhbnkgdXNlcnNwYWNlIHRoYXQg ZG9lc24ndAo+ID4gPiA+ID4gdW5kZXJzdGFuZCBDT05ORUNUT1Igd2lsbCBzZWUgSE9UUExVRz0x IGFuZCByZS1wcm9iZSBldmVyeXRoaW5nLiBBbnkKPiA+ID4gPiA+IHVzZXJzcGFjZSB0aGF0IGRv ZXNuJ3QgdW5kZXJzdGFuZCBQUk9QRVJUWSBvciB0aGUgcHJvcGVydHkgaXQgcmVmZXJzIHRvCj4g PiA+ID4gPiB3aWxsIGZhbGwgYmFjayB0byBwcm9iaW5nIGVpdGhlciB0aGUgY29ubmVjdG9yIG9y IGV2ZXJ5dGhpbmcuICAgIAo+ID4gPiA+IAo+ID4gPiA+IEFncmVlZCwgdGhhdCBzaG91bGQgd29y ay4gIAo+ID4gPiAKPiA+ID4gQ29vbC4gVGhlIGVwb2NoIGV4Y2VwdGlvbiB5b3Ugd29yZGVkIHNl ZW1zIHRvIGZpdCBiYWNrd2FyZC1jb21wYXRpYmxlCj4gPiA+IGFzIHdlbGwuCj4gPiA+ICAgCj4g PiA+ID4gICAKPiA+ID4gPiA+IEkgd291bGQgYmUgaGFwcHkgdG8gZ2V0IHRoYXQgYmVoYXZpb3Vy IGludG8gV2VzdG9uLCBwYXJ0aWN1bGFybHkgYXMgdGhlCj4gPiA+ID4gPiBIRENQIGZlYXR1cmUg aXMgYnJld2luZyBmb3IgV2VzdG9uIHRvby4KPiA+ID4gPiA+Cj4gPiA+ID4gPiAtLS0tLS0tLQo+ ID4gPiA+ID4KPiA+ID4gPiA+IFdoZW4gZGlzY3Vzc2luZyB0aGlzIGluIElSQywgSSBoYWQgdGhl IGNvbmNlcm4gYWJvdXQgaG93IHVldmVudHMgYXJlCj4gPiA+ID4gPiBkZWxpdmVyZWQgaW4gdXNl cnNwYWNlLiBJcyB0aGVyZSBhIHBvc3NpYmlsaXR5IHRoYXQgdGhleSBtaWdodCBiZQo+ID4gPiA+ ID4gb3ZlcndyaXR0ZW4sIGNvbnRhaW4gc3RhbGUgYXR0cmlidXRlcywgb3IgZ2V0IHNxdWFzaGVk IHRvZ2V0aGVyPwo+ID4gPiA+ID4KPiA+ID4gPiA+IFBhcnRpY3VsYXJseSBpZiBhIGRpc3BsYXkg c2VydmVyIGlzIGN1cnJlbnQgb24gdGhlIFZUIGFuZCBhY3RpdmUgYW5kCj4gPiA+ID4gPiBtb25p dG9yaW5nIHVkZXYsIGJ1dCBzdHVjayBkb2luZyBzb21ldGhpbmcgYW5kIGNhbm5vdCBzZXJ2aWNl IHVldmVudHMKPiA+ID4gPiA+IHZlcnkgZmFzdCwgYW5kIHRoZSBrZXJuZWwgc2VuZHMgbW9yZSB0 aGFuIG9uZSBldmVudCBiZWZvcmUgdGhlIHByb2Nlc3MKPiA+ID4gPiA+IGdldHMgYmFjayB0byBk aXNwYXRjaGluZy4gVGhlIHRlcm1pbm9sb2d5IGluIGxpYnVkZXYgQVBJIGNvbmZ1c2VkIG1lIGFz Cj4gPiA+ID4gPiBhbiBldmVudCBpcyBhIGRldmljZS4gU3F1YXNoaW5nIHRvZ2V0aGVyIHdvdWxk IG1ha2Ugc2Vuc2UgaWYgdGhlCj4gPiA+ID4gPiB1ZXZlbnQgd2VyZSBqdXN0IHVwZGF0aW5nIGEg ZGV2aWNlIGF0dHJpYnV0ZSBsaXN0LiBQcmV2aW91c2x5IHdoZW4gd2UKPiA+ID4gPiA+IGhhZCBq dXN0IGEgc2luZ2xlIGtpbmQgb2YgdWV2ZW50LCB0aGF0IHdvdWxkIG5vdCBoYXZlIG1hZGUgYQo+ ID4gPiA+ID4gZGlmZmVyZW5jZSwgYnV0IGlmIHdlIGdhaW4gZGlmZmVyZW50IGtpbmRzIG9mIHVl dmVudHMgbGlrZSBoZXJlLCBpdAo+ID4gPiA+ID4gc3RhcnRzIHRvIG1hdHRlci4KPiA+ID4gPiA+ Cj4gPiA+ID4gPiBIb3dldmVyLCBQYXVsIGNhbWUgdG8gdGhlIGNvbmNsdXNpb24gdGhhdCB3ZSB3 aWxsIGJlIG9rIGFzIGxvbmcgYXMgdGhlCj4gPiA+ID4gPiBldmVudHMgY29tZSB2aWEgbmV0bGlu ay4gICAgCj4gPiA+ID4gCj4gPiA+ID4gWWVhaCBuZXRsaW5rIHNob3VsZG4ndCBkcm9wIGV2ZW50 cyBvbiB0aGUgZmxvb3IgSSB0aGluay4gSXQgbWlnaHQKPiA+ID4gPiBzdGlsbCBoYXBwZW4sIGJ1 dCB0aGVuIEkgdGhpbmsgeW91IHNob3VsZCBnZXQgYW4gaW5kaWNhdGlvbiBvZiB0aGF0Cj4gPiA+ ID4gZXJyb3IsIGFuZCB5b3UganVzdCB0cmVhdCBpdCBhcyBhIGdlbmVyYWwgaG90cGx1ZyBldmVu dCBsaWtlIG9uIG9sZGVyCj4gPiA+ID4ga2VybmVscy4gIAo+ID4gPiAKPiA+ID4gQWxyaWdodCwg YWx0aG91Z2ggcmVhZGluZyBQYXVsIGl0IHNvdW5kcyBsaWtlIHRoZXJlIGlzIGFub3RoZXIKPiA+ ID4gKGZhbGxiYWNrPykgbWV0aG9kIGFzIHdlbGwgdGhhdCB3b3VsZG4ndCB3b3JrLiBTaG91bGQg dXNlcnNwYWNlIHdvcnJ5Cj4gPiA+IGFib3V0IHRoYXQ/Cj4gPiA+IAo+ID4gPiBIbW0sIGdldCBh biBpbmRpY2F0aW9uIG9mIGFuIGVycm9yLi4uIEkgZG9uJ3Qga25vdyBob3cgdGhhdCB3b3VsZCBi ZQo+ID4gPiBwcmVzZW50ZWQgaW4gbGlidWRldiBBUEkgYW5kIEkgY2FuJ3QgcG9pbnQgdG8gYW55 IGNvZGUgaW4gV2VzdG9uIHRoYXQKPiA+ID4gd291bGQgZGVhbCB3aXRoIGl0LiBEb2VzIGFueW9u ZSBoYXZlIGEgY2x1ZSBhYm91dCB0aGF0Pwo+ID4gPiAKPiA+ID4gVXNlcnNwYWNlIGNhbm5vdCBy ZWFsbHkgc3RhcnQgdGFraW5nIGFkdmFudGFnZSBvZiBhbnkgbmV3IGZpbmUtZ3JhaW5lZAo+ID4g PiBob3RwbHVnIGV2ZW50cyB1bnRpbCBpdCBjYW4gcmVseSBvbiB0aGUgZXZlbnQgZGVsaXZlcnku IEdyYW50ZWQsIHRoaXMKPiA+ID4gc2VlbXMgcHVyZWx5IGEgdXNlcnNwYWNlIGlzc3VlLCBidXQg SSBiZXQgaXQgY291bGQgYmUgZm9ybXVsYXRlZCBhcyBhCj4gPiA+IGtlcm5lbCByZWdyZXNzaW9u OiB0aGluZ3Mgc3RvcCB3b3JraW5nIGFmdGVyIHVwZ3JhZGluZyB0aGUga2VybmVsIHdoaWxlCj4g PiA+IGhhdmluZyBhbHdheXMgdXNlZCBuZXcgdXNlcnNwYWNlIHdoaWNoIHdhcyByZWFkeSBmb3Ig ZGV0YWlsZWQgaG90cGx1Zwo+ID4gPiBldmVudHMgYnV0IGRpZG4ndCBlbnN1cmUgdGhlIGRlbGl2 ZXJ5IGluIHVzZXJzcGFjZS4gIAo+ID4gCj4gPiBZb3UgaGF2ZSB0aGlzIGFscmVhZHkgKGlmIGl0 J3MgcmVhbGx5IGFuIGlzc3VlIHdpdGggbmV0bGluayByZWxpYWJpbGl0eSwKPiA+IHRiaCBubyBp ZGVhKSwgeW91IGNhbiBhbHJlYWR5IG1pc3MgYSBnbG9iYWwgdWV2ZW50LiBJdCdzIGVhc2llciB0 byBjYXRjaAo+ID4gdXAgaWYgeW91IGRvIG1pc3MgaXQsIHNpbmNlIHlvdSdyZSBmb3JjaW5nIGEg cmVwcm9iZSBvbiBldmVyeXRoaW5nLiBUaGF0J3MKPiA+IHdoeSBJIHRoaW5rIHRoZSBFUE9DSCB0 aGluZyB3b3VsZCBiZSBnb29kLCB1c2Vyc3BhY2UgY291bGQgYmUgZGVmZW5zaXZlCj4gPiBhbmQg YWx3YXlzIGNhbGwgR2V0Q29ubmVjdG9yQ3VycmVudCBvbiBhbGwgY29ubmVjdG9ycyBpZiBpdCBn ZXRzIGFueQo+ID4gaG90cGx1ZyB1ZXZlbnQsIGFuZCBpZiBpdCBnZXRzIGFuIEVQT0NIIGNoYW5n ZSwgZm9yY2UgYSByZXByb2JlLiBCdXQgSSdtCj4gPiBub3Qgc3VyZSB0aGF0J3MgcmVhbGx5IHJl cXVpcmVkIChhc2lkZSBmcm9tIFZUIHN3aXRjaGluZykuCj4gCj4gTm8sIG15IGNvbmNlcm4gaXMg bm90IGFuIGlzc3VlIHdpdGggbmV0bGluayByZWxpYWJpbGl0eS4gSXQgaXMgYQo+IHBvdGVudGlh bCBpc3N1ZSB3aGVuIHVzZXJzcGFjZSBjaG9vc2VzIHRvIG5vdCB1c2UgbmV0bGluaywgYW5kIHVz ZXMKPiBzb21ldGhpbmcgZWxzZSBpbnN0ZWFkLiBJJ20gbm90IHN1cmUgd2hhdCB0aGF0IGVsc2Ug aXMgYnV0IFBhdWwgc2F5cwo+IHRoZXJlIGlzIGNvZGUgaW4gbGlidWRldiBhbmQgdGhhdCBpcyBj b21wbGV0ZWx5IG91dHNpZGUgdGhlIGNvbnRyb2wgb2YKPiBLTVMgYXBwcyBsaWtlIGRpc3BsYXkg c2VydmVycy4KCmFmYWlrIHRoaXMgb3RoZXIgcGF0aCBvbmx5IGV4aXN0cyBiZWNhdXNlIGl0J3Mg dGhlIG9sZGVyIG9uZSwgZm9yIHVhcGkKYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRl ciB1c2Vyc3BhY2UuIFNob3VsZG4ndCBiZSB1c2VkIGZvcgphbnl0aGluZy4KCj4gQ2FuIHlvdSBl eHBsYWluIGhvdyBvbmUgY291bGQgbWlzcyBhIGdsb2JhbCBob3RwbHVnIGV2ZW50IHdoZW4KPiB1 c2Vyc3BhY2UgaXMgdXNpbmcgbmV0bGluayB0byB3YXRjaCBmb3IgZXZlbnRzPyBJIHRob3VnaHQg dGhlIG5ldGxpbmsKPiBwYXRoIHRocm91Z2ggbGlidWRldiB3YXMgcmVsaWFibGUuIEFuZCBob3cg ZG9lcyB1c2Vyc3BhY2UgcmVhbGl6ZSBpdAo+IG1pc3NlZCBhbiBldmVudD8KCkkgdGhvdWdodCBu ZXRsaW5rIGlzIHN1cHBvc2VkIHRvIGJlIHJlbGlhYmxlLCBidXQgdGhlbiBpZiB5b3Ugc2VuZApi YXppbGxpb24gb2YgZXZlbnRzIGFuZCB1c2Vyc3BhY2UgaXMgc3R1Y2ssIGV2ZW50dWFsbHkgeW91 IHdpbGwgcnVuIG91dCBvZgptZW1vcnkuIEkgaGF2ZSBubyBpZGVhIGhvdyBuZXRsaW5rIHNpZ25h bHMgdGhhdCwgYW5kIGhvdyB0aGF0J3MgZm9yd2FyZGVkCm9yIG5vdCBpbiBsaWJ1ZGV2LiBBbHNv IG5vdCBzdXJlIHdoZXRoZXIgd2Ugc2hvdWxkIGFjdHVhbGx5IGNhcmUgYWJvdXQKdGhpcy4KLURh bmllbAotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRp b24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4