From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexey G Subject: Re: [RFC PATCH 07/12] hvmloader: allocate MMCONFIG area in the MMIO hole + minor code refactoring Date: Thu, 22 Mar 2018 03:41:49 +1000 Message-ID: <20180322034149.00005ee3@gmail.com> References: <62c7a3037bb9f5631542f635dc36ae3338c7bf47.1520867741.git.x1917x@gmail.com> <20180319155802.immvsgqttrs3yezg@MacBook-Pro-de-Roger.local> <20180320054922.00005669@gmail.com> <20180320085048.orjv67qtwhe35ntl@MacBook-Pro-de-Roger.local> <20180321105840.00004698@gmail.com> <20180321090911.qd6epofdaywc4blb@MacBook-Pro-de-Roger.local> <20180322002540.000032f1@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1eyhkV-0005Z2-1g for xen-devel@lists.xenproject.org; Wed, 21 Mar 2018 17:42:07 +0000 Received: by mail-lf0-x236.google.com with SMTP id x205-v6so9134511lfa.0 for ; Wed, 21 Mar 2018 10:42:04 -0700 (PDT) In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Paul Durrant Cc: Stefano Stabellini , Wei Liu , Andrew Cooper , Jan Beulich , Ian Jackson , Anthony Perard , "xen-devel@lists.xenproject.org" , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org T24gV2VkLCAyMSBNYXIgMjAxOCAxNDo1NDoxNiArMDAwMApQYXVsIER1cnJhbnQgPFBhdWwuRHVy cmFudEBjaXRyaXguY29tPiB3cm90ZToKCj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4+ IEZyb206IEFsZXhleSBHIFttYWlsdG86eDE5MTd4QGdtYWlsLmNvbV0KPj4gU2VudDogMjEgTWFy Y2ggMjAxOCAxNDoyNgo+PiBUbzogUm9nZXIgUGF1IE1vbm5lIDxyb2dlci5wYXVAY2l0cml4LmNv bT4KPj4gQ2M6IHhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsgQW5kcmV3IENvb3Blcgo+ PiA8QW5kcmV3LkNvb3BlcjNAY2l0cml4LmNvbT47IElhbiBKYWNrc29uIDxJYW4uSmFja3NvbkBj aXRyaXguY29tPjsKPj4gSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPjsgV2VpIExpdSA8 d2VpLmxpdTJAY2l0cml4LmNvbT47IFBhdWwKPj4gRHVycmFudCA8UGF1bC5EdXJyYW50QGNpdHJp eC5jb20+OyBBbnRob255IFBlcmFyZAo+PiA8YW50aG9ueS5wZXJhcmRAY2l0cml4LmNvbT47IFN0 ZWZhbm8gU3RhYmVsbGluaQo+PiA8c3N0YWJlbGxpbmlAa2VybmVsLm9yZz4gU3ViamVjdDogUmU6 IFtYZW4tZGV2ZWxdIFtSRkMgUEFUQ0ggMDcvMTJdCj4+IGh2bWxvYWRlcjogYWxsb2NhdGUgTU1D T05GSUcgYXJlYSBpbiB0aGUgTU1JTyBob2xlICsgbWlub3IgY29kZQo+PiByZWZhY3RvcmluZwo+ PiAKPj4gT24gV2VkLCAyMSBNYXIgMjAxOCAwOTowOToxMSArMDAwMAo+PiBSb2dlciBQYXUgTW9u bsOpIDxyb2dlci5wYXVAY2l0cml4LmNvbT4gd3JvdGU6Cj4+ICAgCj4+ID5PbiBXZWQsIE1hciAy MSwgMjAxOCBhdCAxMDo1ODo0MEFNICsxMDAwLCBBbGV4ZXkgRyB3cm90ZTogIAo+PiBbLi4uXSAg Cj4+ID4+IEFjY29yZGluZyB0byBwdWJsaWMgc2xpZGVzIGZvciB0aGUgZmVhdHVyZSwgYm90aCBQ Q0kgY29uZiBhbmQgTU1JTwo+PiA+PiBhY2Nlc3NlcyBjYW4gYmUgcm91dGVkIHRvIHRoZSBkZXNp Z25hdGVkIGRldmljZSBtb2RlbC4gSXQgbG9va3MKPj4gPj4gbGlrZSBmb3IgdGhpcyBwYXJ0aWN1 bGFyIHNldHVwIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlciB3aGljaAo+PiA+PiBwYXJ0aWN1bGFy IGlvcmVxIHR5cGUgbXVzdCBiZSB1c2VkIGZvciBNTUNPTkZJRyBhY2Nlc3NlcyAtLSBlaXRoZXIK Pj4gPj4gSU9SRVFfVFlQRV9QQ0lfQ09ORklHIG9yIElPUkVRX1RZUEVfQ09QWSAoTU1JTyBhY2Nl c3Nlcykgc2hvdWxkICAKPj4gYmUgIAo+PiA+PiBhY2NlcHRhYmxlLiAgCj4+ID4KPj4gPklzbid0 IHRoYXQgZ29pbmcgdG8gYmUgcXVpdGUgbWVzc3k/IEhvdyBpcyB0aGUgSU9SRVEgc2VydmVyIHN1 cHBvc2VkCj4+ID50byBkZWNvZGUgYSBNQ0ZHIGFjY2VzcyByZWNlaXZlZCBhcyBJT1JFUV9UWVBF X0NPUFk/ICAKPj4gCj4+IFRoaXMgY29kZSBpcyBhbHJlYWR5IGF2YWlsYWJsZSBhbmQgaW4gc3lu YyB3aXRoIFFFTVUgbGVnYWN5IFBDSSBjb25mCj4+IGVtdWxhdGlvbiBpbmZyYXN0cnVjdHVyZS4K Pj4gICAKPj4gPkkgZG9uJ3QgdGhpbmsgdGhlIElPUkVRIHNlcnZlciBuZWVkcyB0byBrbm93IHRo ZSBzdGFydCBvZiB0aGUgTUNGRwo+PiA+cmVnaW9uLCBpbiB3aGljaCBjYXNlIGl0IHdvbid0IGJl IGFibGUgdG8gZGV0ZWN0IGFuZCBkZWNvZGUgdGhlCj4+ID5hY2Nlc3MgaWYgaXQncyBvZiB0eXBl IElPUkVRX1RZUEVfQ09QWS4gIAo+PiAKPj4gSG93IGRvIHlvdSB0aGluayBYZW4gd2lsbCBiZSBh YmxlIHRvIGtub3cgaWYgYXJiaXRyYXJ5IE1NSU8KPj4gYWNjZXNzIHRhcmdldHMgTU1DT05GSUcg YXJlYSBhbmQgdG8gd2hpY2ggQkRGIHRoZSBvZmZzZXQgaW4gdGhpcyBhcmVhCj4+IGJlbG9uZ3Ms IHdpdGhvdXQga25vd2luZyB3aGVyZSBNTUNPTkZJRyBpcyBsb2NhdGVkIGFuZCB3aGF0IFBDSSBi dXMKPj4gbGF5b3V0IGlzPyBJdCdzIFFFTVUgd2hvIGVtdWxhdGUgUENJRVhCQVIgYW5kIGNhbiB0 ZWxsIFhlbiB3aGVyZQo+PiBNTUNPTkZJRyBpcyBleHBlY3RlZCB0byBiZS4KPj4gICAKPj4gPk1D RkcgYWNjZXNzZXMgbmVlZCB0byBiZSBzZW50IHRvIHRoZSBJT1JFUSBzZXJ2ZXIgYXMKPj4gPklP UkVRX1RZUEVfUENJX0NPTkZJRywgb3IgZWxzZSB5b3UgYXJlIGZvcmNpbmcgZWFjaCBJT1JFUSBz ZXJ2ZXIgdG8KPj4gPmtub3cgdGhlIHBvc2l0aW9uIG9mIHRoZSBNQ0ZHIGFyZWEgaW4gb3JkZXIg dG8gZG8gdGhlIGRlY29kaW5nLiBJbgo+PiA+eW91ciBjYXNlIHRoaXMgd291bGQgd29yayBiZWNh dXNlIFFFTVUgY29udHJvbHMgdGhlIHBvc2l0aW9uIG9mIHRoZQo+PiA+TUNGRyByZWdpb24sIGJ1 dCB0aGVyZSdzIG5vIG5lZWQgZm9yIG90aGVyIElPUkVRIHNlcnZlcnMgdG8ga25vdyB0aGUKPj4g PnBvc2l0aW9uIG9mIHRoZSBNQ0ZHIGFyZWEuCj4+ID4gIAo+PiA+PiBUaGUgb25seSB0aGluZyB3 aGljaCBtYXR0ZXJzIGlzIGlvcmVxIHJvdXRpbmcgaXRzZWxmIC0tCj4+ID4+IG1ha2luZyBkZWNp c2lvbnMgdG8gd2hpY2ggZGV2aWNlIG1vZGVsIHRoZSBQQ0kgY29uZi9NTUlPIGlvcmVxCj4+ID4+ IHNob3VsZCBiZSBzZW50LiAgCj4+ID4KPj4gPkhtLCBzZWUgYWJvdmUsIGJ1dCBJJ20gZmFpcmx5 IHN1cmUgeW91IG5lZWQgdG8gZm9yd2FyZCB0aG9zZSBNQ0ZHCj4+ID5hY2Nlc3NlcyBhcyBJT1JF UV9UWVBFX1BDSV9DT05GSUcgdG8gdGhlIElPUkVRIHNlcnZlci4gIAo+PiAKPj4gKGEgZGV0YWls ZWQgYW5zd2VyIGJlbG93KQo+PiAgIAo+PiA+PiA+VHJhZGl0aW9uYWwgUENJIGNvbmZpZyBzcGFj ZSBhY2Nlc3NlcyBhcmUgbm90IElPIHBvcnQgc3BhY2UKPj4gPj4gPmFjY2Vzc2VzLiAgCj4+ID4+ Cj4+ID4+IChhc3N1bWluZyAnbm90JyBtaXN0eXBlZCBoZXJlKSAgCj4+ID4KPj4gPk5vdCByZWFs bHksIHRoaXMgc2hvdWxkIGluc3RlYWQgYmU6Cj4+ID4KPj4gPiJUcmFkaXRpb25hbCBQQ0kgY29u ZmlnIHNwYWNlIGFjY2Vzc2VzIGFyZSBub3QgZm9yd2FyZGVkIHRvIHRoZQo+PiA+SU9SRVEgc2Vy dmVyIGFzIElPIHBvcnQgc3BhY2UgYWNjZXNzZXMgKElPUkVRX1RZUEVfUElPKSBidXQgcmF0aGVy Cj4+ID5hcyBQQ0kgY29uZmlnIHNwYWNlIGFjY2Vzc2VzIChJT1JFUV9UWVBFX1BDSV9DT05GSUcp LiIKPj4gPgo+PiA+U29ycnkgZm9yIHRoZSBjb25mdXNpb24uCj4+ID4gIAo+PiA+PiA+VGhlIElP UkVRIGNvZGUgaW4gWGVuIGRldGVjdHMgYWNjZXNzZXMgdG8gcG9ydHMgMHhjZjgvMHhjZmMgYW5k Cj4+ID4+ID5JT1JFUSBzZXJ2ZXJzIGNhbiByZWdpc3RlciBkZXZpY2VzIHRoZXkgd291bGQgbGlr ZSB0byByZWNlaXZlCj4+ID4+ID5jb25maWd1cmF0aW9uIHNwYWNlIGFjY2Vzc2VzIGZvci4gUUVN VSBpcyBhbHJlYWR5IG1ha2luZyB1c2Ugb2YKPj4gPj4gPnRoaXMsIHNlZSBmb3IgIAo+PiA+Pgo+ PiA+PiBUaGF0J3Mgb25lIG9mIHRoZSByZWFzb25zIHdoeSBjdXJyZW50IElPUkVRX1RZUEVfUENJ X0NPTkZJRwo+PiA+PiBpbXBsZW1lbnRhdGlvbiBpcyBhIGJpdCBpbmNvbnZlbmllbnQgZm9yIE1N Q09ORklHIE1NSU8gYWNjZXNzZXMgLS0KPj4gPj4gaXQncyB0b28gbXVjaCBDRjhoL0NGQ2gtY2Vu dHJpYyBpbiBpdHMgaW1wbGVtZW50YXRpb24sIG1pZ2h0IGJlCj4+ID4+IHBhaW5mdWwgdG8gY2hh bmdlIHNvbWV0aGluZyBpbiB0aGUgY29kZSB3aGljaCB3YXMgaW50ZW5kZWQgZm9yCj4+ID4+IENG OGgvQ0ZDaCBoYW5kbGluZyAoYW5kIG5vdCBmb3IgTU1JTyBwcm9jZXNzaW5nKS4gIAo+PiA+Cj4+ ID5JJ20gbm90IHN1cmUgSSBmb2xsb3cuIERvIHlvdSBtZWFuIHRoYXQgY2hhbmdlcyBzaG91bGQg YmUgbWFkZSB0bwo+PiA+dGhlIGlvcmVxIHN0cnVjdCBpbiBvcmRlciB0byBmb3J3YXJkIE1DRkcg YWNjZXNzZXMgdXNpbmcKPj4gPklPUkVRX1RZUEVfUENJX0NPTkZJRyBhcyBpdCdzIHR5cGU/ICAK Pj4gCj4+IE5vIGNoYW5nZXMgZm9yIGlvcmVxIHN0cnVjdHVyZXMgbmVlZGVkIGZvciBub3cuCj4+ ICAgCj4+ID4+IEl0IHdpbGwgYmUgaGFuZGxlZCBieSBJT1JFUSB0b28sIGp1c3QgdXNpbmcgYSBk aWZmZXJlbnQgSU9SRVEgdHlwZQo+PiA+PiAoTU1JTyBvbmUpLiBUaGUgYmFzaWMgcXVlc3Rpb24g aXMgd2h5IGRvIHdlIGhhdmUgdG8gc3RpY2sgdG8gUENJCj4+ID4+IGNvbmYgc3BhY2UgaW9yZXFz IGZvciBlbXVsYXRpbmcgTU1JTyBhY2Nlc3NlcyB0byBNTUNPTkZJRy4gIAo+PiA+Cj4+ID5CZWNh dXNlIG90aGVyIElPUkVRIHNlcnZlcnMgZG9uJ3QgbmVlZCB0byBrbm93IGFib3V0IHRoZQo+PiA+ cG9zaXRpb24vc2l6ZSBvZiB0aGUgTUNGRyBhcmVhLCBhbmQgY2Fubm90IHJlZ2lzdGVyIE1NSU8g cmFuZ2VzCj4+ID50aGF0IGNvdmVyIHRoZWlyIGRldmljZSdzIFBDSSBjb25maWd1cmF0aW9uIHNw YWNlIGluIHRoZSBNQ0ZHCj4+ID5yZWdpb24uCj4+ID4KPj4gPk5vdCB0byBtZW50aW9uIHRoYXQg aXQgd291bGQgd291bGQgYmUgYSB0ZXJyaWJsZSBkZXNpZ24gZmxhdyB0bwo+PiA+Zm9yY2UgSU9S RVEgc2VydmVycyB0byByZWdpc3RlciBQQ0kgZGV2aWNlcyBhbmQgTUNGRyBhcmVhcwo+PiA+YmVs b25naW5nIHRvIHRob3NlIGRldmljZXMgc2VwYXJhdGVseSBhcyBNTUlPIGluIG9yZGVyIHRvIHRy YXAgYWxsCj4+ID5wb3NzaWJsZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBhY2Nlc3Nlcy4gIAo+ PiAKPj4gUENJIGNvbmYgc3BhY2UgbGF5b3V0IGlzIHNoYXJlZCBieSB0aGUgZW11bGF0ZWQgbWFj aGluZS4gQW5kIE1NQ09ORklHCj4+IGxheW91dCBpcyBtYW5kYXRlZCBieSB0aGlzIGNvbW1vbiBQ Q0kgYnVzIG1hcC4KPj4gCj4+IEV2ZW4gaWYgdGhvc2UgJ211bHRpcGxlIGRldmljZSBtb2RlbHMn IHNlZSBhIGRpZmZlcmVudCBwaWN0dXJlIG9mIFBDSQo+PiBjb25mIHNwYWNlLCB0aGVpciB2aXNp b25zIG9mIFBDSSBidXMgbXVzdCBub3Qgb3ZlcmxhcCArIE1NQ09ORklHCj4+IGxheW91dCBtdXN0 IGJlIGNvbnNpc3RlbnQgYmV0d2VlbiBkaWZmZXJlbnQgZGV2aWNlIG1vZGVscy4KPj4gCj4+IEFs dGhvdWdoIGl0IGlzIGEgdGVycmlibGUgbWlzdGFrZSB0byB0aGluayBhYm91dCB0aGUgZW11bGF0 ZWQgUENJIGJ1cwo+PiBsaWtlIGl0J3MgYSBzZXQgb2YgZGlzdGluY3QgUENJIGRldmljZXMgdW5y ZWxhdGVkIHRvIGVhY2ggb3RoZXIuIEl0J3MKPj4gYWxsIGNvdXBsZWQgdG9nZXRoZXIuIEFuZCB0 aGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBmb3IgUENJZS4KPj4gTWFueSBQQ0llIGZlYXR1cmVzIHJl bHkgb24gUENJZSBkZXZpY2UgaW50ZXJhY3Rpb24gaW4gUENJZSBmYWJyaWMsCj4+IGVnLiBQQ0ll IGVuZHBvaW50cyBtYXkgaW50ZXJhY3Qgd2l0aCBSb290IENvbXBsZXggaW4gbWFueSB3YXlzLiBU aGlzCj4+IGNvb3BlcmF0aW9uIG1heSAgbmVlZCB0byBiZSBlbXVsYXRlZCBzb21laG93LCBlZy4g dG8gcHJvdmlkZSBzb21lCj4+IHN1cHBvcnQgZm9yIFBNIGZlYXR1cmVzLCBsaW5rIG1hbmFnZW1l bnQgb3IgbmF0aXZlIGhvdHBsdWcKPj4gZmFjaWxpdGllcy4gRXZlbiBpZiB3ZSBoYXZlIGEgcmVh bCBwYXNzZWQgdGhyb3VnaCBkZXZpY2UsIHdlIG1pZ2h0Cj4+IG5lZWQgdG8gcHJvdmlkZSBhbiBl bXVsYXRlZCBQQ0llIFN3aXRjaCBvciBhIFJvb3QgUG9ydCBmb3IgaXQgdG8KPj4gZnVuY3Rpb24g cHJvcGVybHkgd2l0aGluIHRoZSBQQ0llIGhpZXJhcmNoeS4KPj4gCj4+IERlZGljYXRpbmcgYW4g aXNvbGF0ZWQgUENJIGRldmljZSB0byBzb21lIGlzb2xhdGVkIGRldmljZSBtb2RlbCAtLQo+PiB0 aGF0J3Mgd2hhdCBtaWdodCBiZSB0aGUgZGVzaWduIGZsYXcsIGNvbnNpZGVyaW5nIHRoZSBQQ0ll IHdvcmxkLgo+PiAgIAo+Cj5JIHRoaW5rIHRoYXQgaXMgdGhlIGNydXggb2YgdGhlIHByb2JsZW0u IFRoZSBjdXJyZW50Cj5tdWx0aS1pb3JlcS1zZXJ2ZXIgcmVsaWVzIG9uIGJlaW5nIGFibGUgdG8g Y29uc2lkZXIgUENJIGRldmljZXMgYXMKPmJlaW5nIGlzb2xhdGVkIGZyb20gZWFjaCBvdGhlci4u LiBhbmQgdGhhdCBpcyBiYXNpY2FsbHkgZmluZSBiZWNhdXNlCj53ZSBvbmx5IHVzZSBhIHNpbmds ZSBQQ0kgYnVzIHdpdGggbm8gYnJpZGdlcy4gVG8gbW92ZSB0byBQQ0llIHdpbGwKPnJlcXVpcmUg bW9yZSBlbXVsYXRpb24gaW4gWGVuLCBidXQgSSB0aGluayB0aGF0IGlzIHRoZSBvbmx5IHdheSB0 byBkbwo+aXQgcHJvcGVybHkuCgpVbmZvcnR1bmF0ZWx5LCB0aGlzIGFwcHJvYWNoIHdvbid0IHdv cmsgYW55bW9yZSBmb3IgUENJZS4gV2UgY2FuJ3QganVzdApzZXBhcmF0ZSBQQ0kgYnVzIGVtdWxh dGlvbiB3aXRoIHRoZSBjaGlwc2V0LXNwZWNpZmljIGVtdWxhdGlvbi4gRXZlbgpNTUNPTkZJRyBp cyBhIGNoaXBzZXQtc3BlY2lmaWMgZmVhdHVyZS4gSW4gb3JkZXIgdG8gZG8gdGhpcywgWGVuIHNo b3VsZAplbXVsYXRlIG1hbnkgZGV2aWNlIG1vZGVsIGZlYXR1cmVzIGl0c2VsZiwgcHJvYmFibHkg dG8gdGhlIHBvaW50IHdoZW4KUUVNVSBjYW4gYmUgc2FmZWx5IGRyb3BwZWQgYXMgRE0uCgpUaGUg c2luZ2xlIGJ1cyBoYXMgYmVjb21lIGEgbWFqb3IgaXNzdWUgZm9yIHBhc3N0aHJvdWdoIGFscmVh ZHk6Cmh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9xZW11LWRldmVsLzIwMTgtMDMv bXNnMDM1OTMuaHRtbAoKSSB3YW50IHRvIHJlcGxhY2UgdGhpcyB3b3JrYXJvdW5kIHdpdGggYWN0 dWFsIG11bHRpcGxlIGJ1cyBzdXBwb3J0LAphbHRob3VnaCBub3cgSSdtIG5vdCBzdXJlIGlmIEkg Y2FuIG1ha2UgaXQgdGhyb3VnaCAtLSB0aGVyZSB3aWxsIGJlIGEKbG90IG9mIHJlc2lzdGFuY2Ug bGlrZWx5LiBBbHRob3VnaCB0aGlzIGlzIGEgbWFuZGF0b3J5IGZlYXR1cmUgZm9yIFBDSWUKUFQu Cgo+PiBbLi4uXSAgCj4+ID4KPj4gPk1heWJlIHlvdSBjb3VsZCBkZXRlY3Qgb2Zmc2V0cyA+PSAy NTYgYW5kIHJlcGxheSB0aGVtIGluIFFFTVUgbGlrZQo+PiA+bW1pbyBhY2Nlc3Nlcz8gVXNpbmcg dGhlIGFkZHJlc3Nfc3BhY2Vfd3JpdGUgb3IKPj4gPnBjaWVfbW1jZmdfZGF0YV9yZWFkL3dyaXRl IGZ1bmN0aW9ucz8KPj4gPkkgaGF2ZSB0byBhZG1pdCBteSBrbm93bGVkZ2Ugb2YgUUVNVSBpcyBx dWl0ZSBsaW1pdGVkLCBzbyBJJ20gbm90Cj4+ID5zdXJlIG9mIHRoZSBiZXN0IHdheSB0byBoYW5k bGUgdGhpcy4KPj4gPgo+PiA+SWRlYWxseSB3ZSBzaG91bGQgZmluZCBhIHdheSB0aGF0IGRvZXNu J3QgaW52b2x2ZSBoYXZpbmcgdG8gbW9kaWZ5Cj4+ID5lYWNoIGNoaXBzZXQgdG8gaGFuZGxlIE1D RkcgYWNjZXNzZXMgZnJvbSBYZW4uIEl0IHdvdWxkIGJlIG5pY2UgdG8KPj4gPmhhdmUgc29tZSBr aW5kIG9mIGludGVyZmFjZSBpbnNpZGUgb2YgUUVNVSBzbyBhbGwgY2hpcHNldHMgY2FuCj4+ID5y ZWdpc3RlciBNQ0ZHIGFyZWFzIG9yIG1vZGlmeSB0aGVtLCBidXQgdGhpcyBpcyBvdXQgb2YgdGhl IHNjb3BlIG9mCj4+ID50aGlzIHdvcmsuICAKPj4gCj4+IFJvZ2VyLCBQYXVsLAo+PiAKPj4gSGVy ZSBpcyB3aGF0IHlvdSBzdWdnZXN0LCBqdXN0IHRvIGNsYXJpZnk6Cj4+IAo+PiAxLiBBZGQgdG8g WGVuIGEgbmV3IGh5cGVyY2FsbCAoK2NvcnJlc3BvbmRpbmcgZG1vcCkgc28gUUVNVSBjYW4gdGVs bAo+PiBYZW4gd2hlcmUgUUVNVSBlbXVsYXRlcyBtYWNoaW5lJ3MgTU1DT05GSUcgKGNoaXBzZXQt c3BlY2lmaWMKPj4gZW11bGF0aW9uCj4+IG9mIFBDSUVYQkFSL0hFQ0JBU0UvZXRjIG1tY2ZnIHJl bG9jYXRpb24pLiBYZW4gd2lsbCByZWx5IG9uIHRoaXMKPj4gaW5mb3JtYXRpb24gdG8ga25vdyB0 byB3aGljaCBQQ0kgZGV2aWNlIHRoZSBhZGRyZXNzIHdpdGhpbiBNTUNPTkZJRwo+PiBiZWxvbmcu Cj4+IAo+PiAyLiBYZW4gd2lsbCB0cmFwIHRoaXMgYXJlYSArIHJlbWFwIGl0cyB0cmFwcGluZyB0 byBvdGhlciBhZGRyZXNzIGlmCj4+IFFFTVUgd2lsbCBpbmZvcm0gWGVuIGFib3V0IGVtdWxhdGVk IFBDSUVYQkFSIHZhbHVlIGNoYW5nZQo+PiAKPj4gMy4gRXZlcnkgTU1JTyBhY2Nlc3MgdG8gdGhl IGN1cnJlbnQgTU1DT05GSUcgcmFuZ2Ugd2lsbCBiZSBjb252ZXJ0ZWQKPj4gaW50byBCREYgZmly c3QgKGJ5IG9mZnNldCB3aXRoaW4gdGhpcyByYW5nZSwga25vd2luZyB3aGVyZSB0aGUgcmFuZ2UK Pj4gaXMpCj4+IAo+PiA0LiBUYXJnZXQgZGV2aWNlIG1vZGVsIGlzIHNlbGVjdGVkIHVzaW5nIGNh bGN1bGF0ZWQgQkRGCj4+IAo+PiA1LiBNTUlPIHJlYWQvd3JpdGUgYWNjZXNzZXMgYXJlIGNvbnZl cnRlZCBpbnRvIFBDSSBjb25maWcgc3BhY2UKPj4gaW9yZXFzIChsaWtlIGl0IHdhcyBhIENGOC9D RkNoIG9wZXJhdGlvbiBpbnN0ZWFkIG9mIE1NSU8gYWNjZXNzKS4gQXQKPj4gdGhpcyBwb2ludCBp b3JlcSBzdHJ1Y3R1cmUgYWxsb3dzIHRvIHNwZWNpZnkgZXh0ZW5kZWQgUENJIGNvbmYgb2Zmc2V0 Cj4+ICgxMi1iaXQpLCBzbyBpdCB3aWxsIGZpdCBpbnRvIFBDSSBjb25mIGlvcmVxLiBGb3Igbm93 IGxldCdzIGFzc3VtZQo+PiB0aGF0IGVnLiBhIDY0LWJpdCBtZW1vcnkgb3BlcmF0aW9uIGlzIGVp dGhlciBhYm9ydGVkIG9yIHdvcmthcm91bmRlZAo+PiBieSBzcGxpdHRpbmcgdGhpcyBvcGVyYXRp b24gaW50byBtdWx0aXBsZSBQQ0kgY29uZiBpb3JlcXMuCj4+IAo+PiA2LiBQQ0kgY29uZiByZWFk L3dyaXRlIGlvcmVxcyBhcmUgc2VudCB0byB0aGUgY2hvc2VuIGRldmljZSBtb2RlbAo+PiAKPj4g Ny4gUUVNVSByZWNlaXZlIE1NQ09ORklHIG1lbW9yeSByZWFkcy93cml0ZXMgYXMgUENJIGNvbmYg cmVhZHMvd3JpdGVzCj4+IAo+PiA4LiBBcyB0aGVzZSBNTUNPTkZJRyBQQ0kgY29uZiByZWFkcyBv Y2N1ciBvdXQgb2YgY29udGV4dCAoanVzdAo+PiBhZGRyZXNzL2xlbi9kYXRhIHdpdGhvdXQgYW55 IGVtdWxhdGVkIGRldmljZSBhdHRhY2hlZCB0byBpdCksCj4+IHhlbi1odm0uYyBzaG91bGQgZW1w bG95IHNwZWNpYWwgbG9naWMgdG8gbWFrZSBpdCBRRU1VLWZyaWVuZGx5IC0tCj4+IGVnLiByaWdo dCBub3cgaXQgc2VuZHMgcmVjZWl2ZWQgUENJIGNvbmYgYWNjZXNzIGludG8gKGVtdWxhdGVkIGJ5 Cj4+IFFFTVUpIENGOGgvQ0ZDaCBwb3J0cy4KPj4gVGhlcmUgaXMgYSByZWFsIHByb2JsZW0gdG8g ZW1iZWQgdGhlc2UgIm5ha2VkIiBhY2Nlc3NlcyBpbnRvIFFFTVUKPj4gaW5mcmFzdHJ1Y3R1cmUs IHdvcmthcm91bmRzIGFyZSByZXF1aXJlZC4gQlRXLCBmaW5kX3ByaW1hcnlfYnVzKCkgd2FzCj4+ IGRyb3BwZWQgZnJvbSBRRU1VIGNvZGUgLS0gaXQgY291bGQndmUgYmVlbiB1c2VmdWwgaGVyZS4g TGV0J3MgYXNzdW1lCj4+IHNvbWUgd29ya2Fyb3VuZCBpcyBlbXBsb3llZCAobGlrZSBzdG9yaW5n IGEgcmVxdWlyZWQgb2JqZWN0IHBvaW50ZXJzCj4+IGluIGdsb2JhbCB2YXJpYWJsZXMgZm9yIGxh dGVyIHVzZSBpbiB4ZW4taHZtLmMpCj4+IAo+PiA5LiBFeGlzdGluZyBNTUNPTkZJRy1oYW5kbGlu ZyBjb2RlIGluIFFFTVUgd2lsbCBiZSB1bnVzZWQgaW4gdGhpcwo+PiBzY2VuYXJpbwo+PiAKPj4g MTAuIEFsbCB0aGlzIG5lZWRlZCBwcmltYXJpbHkgdG8gbWFrZSB0aGUgc3BlY2lmaWMgIk11bHRp cGxlIGRldmljZQo+PiBlbXVsYXRvcnMiIGZlYXR1cmUgdG8gd29yayAoWGVuR1Qgd2FzIG1lbnRp b25lZCBhcyBpdHMgdXNlcikgb24gUTM1Cj4+IHdpdGggTU1DT05GSUcuCj4+IAo+PiBBbnl0aGlu ZyB3cm9uZy9taXNzaW5nIGhlcmU/ICAKPgo+VGhhdCBhbGwgc291bmRzIHBsYXVzaWJsZS4gQWxs IHdlIGVzc2VudGlhbGx5IG5lZWQgdG8gZG8gaXMgbWFrZSBzdXJlCj50aGUgY29uZmlnIHNwYWNl IHRyYW5zYWN0aW9ucyBtYWtlIGl0IHRvIHRoZSByaWdodCBkZXZpY2UgbW9kZWwgaW4KPlFFTVUu IElmIHRoZSBlbXVsYXRpb24gaW4gWGVuIGlzIGNvbXByZWhlbnNpdmUgdGhlbiBJIGd1ZXNzIHRo ZXJlCj5zaG91bGQgbm90IGV2ZW4gYmUgYW55IHJlYXNvbiBmb3IgUUVNVSdzIGlkZWEgb2YgdGhl IGJ1cyB0b3BvbG9neSBhbmQKPlhlbidzIHByZXNlbnRhdGlvbiBvZiB0aGUgYnVzIHRvcG9sb2d5 IHRvIHRoZSBndWVzdCB0byBldmVuIG1hdGNoLgo+ICBQYXVsCj4KPj4gCj4+IChBZGRpbmcgU3Rl ZmFubyBhbmQgQW50aG9ueSBhcyB4ZW4taHZtLmMgbWVudGlvbmVkKQo+PiAKPj4gCj4+IEhlcmUg aXMgYW5vdGhlciBzdWdnZXN0aW9uOgo+PiAKPj4gMS4gUUVNVSB1c2UgZXhpc3RpbmcgZmFjaWxp dGllcyB0byBlbXVsYXRlIFBDSUVYQkFSIGZvciBhIFEzNQo+PiBtYWNoaW5lLCBjYWxsaW5nIFhl bidzIG1hcF9pb19yYW5nZV90b19pb3JlcV9zZXJ2ZXIoKSBBUEkgdG8gbWFyawo+PiBNTUlPIHJh bmdlIGZvciBlbXVsYXRpb24sIGp1c3QgbGlrZSBmb3IgYW55IG90aGVyIGVtdWxhdGVkIE1NSU8g cmFuZ2UKPj4gCj4+IDIuIEFsbCBhY2Nlc3NlcyB0byB0aGlzIGFyZWEgd2lsbCBiZSBmb3J3YXJk ZWQgdG8gUUVNVSBhcyBNTUlPIGlvcmVxcwo+PiBhbmQgZW11bGF0ZWQgZmxhd2xlc3NseSBhcyBl dmVyeXRoaW5nIGlzIHdpdGhpbiBRRU1VIGFyY2hpdGVjdHVyZSAtLQo+PiBwY2ktaG9zdC9QQ0lC dXMvUENJRGV2aWNlIG1hY2hpbmVyeSBpbiBwbGFjZS4gTm8gd29ya2Fyb3VuZHMgcmVxdWlyZWQK Pj4gZm9yIHhlbi1odm0uYwo+PiAKPj4gMy4gQ0Y4L0NGQyBhY2Nlc3NlcyB3aWxsIGJlIGZvcndh cmRlZCBhcyBfUENJX0NPTkZJRyBpb3JlcXMsIGFzCj4+IHVzdWFsbHkuIEJvdGggbWV0aG9kcyBh cmUgaW4gc3luYyBhcyB0aGV5IHVzZSBjb21tb24gUENJIGVtdWxhdGlvbgo+PiBpbmZyYXN0cnVj dHVyZSBpbiBRRU1VCj4+IAo+PiA0LiBBdCB0aGlzIHBvaW50IGFic29sdXRlbHkgemVybyBjaGFu Z2VzIGFyZSByZXF1aXJlZCBpbiBib3RoIFhlbiBhbmQKPj4gUUVNVSBjb2RlLiBPbmx5IGV4aXN0 aW5nIGludGVyZmFjZXMgYXJlIHVzZWQuIEluIGZhY3QsIG5vIHJlbGF0ZWQKPj4gY29kZSBjaGFu Z2VzIHJlcXVpcmVkIGF0IGFsbCBleGNlcHQgYSBidWdmaXggZm9yIFBDSUVYQkFSIG1hc2sKPj4g ZW11bGF0aW9uIChwcm92aWRlZCBpbiB0aGlzIHNlcmllcykKPj4gCj4+IDUuIEJ1dC4gSnVzdCB0 byBtYWtlIHRoZSAnbXVsdGlwbGUgZGV2aWNlIGVtdWxhdG9ycycgKG5vIGV4dHJhCj4+IHJlYXNv bnMgc28gZmFyKSBmZWF0dXJlIHRvIHdvcmssIHdlIGFkZCB0aGUgc2FtZSBoeXBlcmNhbGwvZG1v cAo+PiB1c2FnZSB0byBsZXQgWGVuIGtub3cgd2hlcmUgUUVNVSBlbXVsYXRlcyBNTUNPTkZJRwo+ PiAKPj4gNi4gWGVuIHdpbGwgY29udGludWUgdG8gdHJhcCBhY2Nlc3NlcyB0byB0aGlzIHJhbmdl IGJ1dCBpbnN0ZWFkIG9mCj4+IHNlbmRpbmcgX0NPUFkgaW9yZXEgaW1tZWRpYXRlbHksIGhlIHdp bGwgY2hlY2sgdGhlIGFkZHJlc3MgYWdhaW5zdAo+PiBrbm93biBNTUNPTkZJRyBsb2NhdGlvbiAo aW4gdGhlIHNhbWUgbWFubmVyIGFzIGFib3ZlKSwgdGhlbiBjb252ZXJ0Cj4+IHRoZQo+PiBvZmZz ZXQgd2l0aGluIGl0IHRvIEJERiBhbmQgaGUgY2FuIHByb2NlZWQgdG8gdXN1YWwgQkRGLWJhc2Vk IGlvcmVxCj4+IHJvdXRpbmcgZm9yIHRob3NlIGRldmljZSBlbXVsYXRvciBETXMsIHdoYXRldmVy IHRoZXkgYXJlCj4+IAo+PiA3LiBJbiBmYWN0LCBNTUlPIC0+IFBDSSBjb25mIGlvcmVxIHRyYW5z bGF0aW9uIGNhbiBiZSBmcmVlbHkgdXNlZCBhcwo+PiB3ZWxsIGF0IHRoaXMgc3RhZ2UsIGlmIGl0 IGlzIG1vcmUgY29udmVuaWVudCBmb3IgJ211bHRpcGxlIGRldmljZQo+PiBlbXVsYXRvcnMnIGZl YXR1cmUgdXNlcnMuIEl0IGNhbiBiZSBldmVuIG1hZGUgc2VsZWN0YWJsZS4KPj4gCj4+IFNvLCB0 aGUgcXVlc3Rpb24gd2hpY2ggbmVlZHMgZXhwbGFuYXRpb24gaXM6IHdoeSBkbyB5b3UgdGhpbmsK Pj4gTU1JTy0+UENJIGNvbmYgaW9yZXEgdHJhbnNsYXRpb24gaXMgbWFuZGF0b3J5IGZvciBNTUNP TkZJRz8gQ2FuJ3Qgd2UKPj4ganVzdCBhZGQgbmV3IGh5cGVyY2FsbC9kbW9wIHRvIG1ha2UgaW9y ZXEgcm91dGluZyBmb3IgJ211bHRpcGxlCj4+IGRldmljZSBlbXVsYXRvcnMnIHRvIHdvcmsgd2hp bGUgbGV0dGluZyBRRU1VIHRvIHVzZSBhbnkgQVBJIHByb3ZpZGVkCj4+IGZvciBoaW0gdG8gZG8g aXRzIHRhc2tzPwo+PiAKPj4gSXQncyBraW5kYSBmdW5ueSB0byBwcmV0ZW5kIHRoYXQgUUVNVSBk b24ndCBrbm93IGFueXRoaW5nIGFib3V0Cj4+IE1NQ09ORklHIGJlaW5nIE1NSU8gd2hlbiBpdCdz IFFFTVUgd2hvIGluZm9ybSBYZW4gYWJvdXQgaXRzIG1lbW9yeQo+PiBhZGRyZXNzIGFuZCBzaXpl Lgo+PiAgIAo+PiA+UmVnYXJkbGVzcyBvZiBob3cgdGhpcyBlbmRzIHVwIGJlaW5nIGltcGxlbWVu dGVkIGluc2lkZSBvZiBRRU1VIEkKPj4gPnRoaW5rIHRoZSBhYm92ZSBhcHByb2FjaCBpcyB0aGUg cmlnaHQgb25lIGZyb20gYW4gYXJjaGl0ZWN0dXJhbCBQb1YuCj4+ID4KPj4gPkFGQUlDVCB0aGVy ZSBhcmUgc3RpbGwgc29tZSByZXNlcnZlZCBiaXRzIGluIHRoZSBpb3JlcSBzdHJ1Y3QgdGhhdAo+ PiA+eW91IGNvdWxkIHVzZSB0byBzaWduYWwgJ3RoaXMgaXMgYSBNQ0ZHIFBDSSBhY2Nlc3MnIGlm IHJlcXVpcmVkLgo+PiA+ICAKPj4gPj4gQXBwcm9hY2ggIzIuIEhhbmRsaW5nIE1NQ09ORklHIGFy ZWEgaW5zaWRlIFFFTVUgdXNpbmcgdXN1YWwgTU1JTwo+PiA+PiBlbXVsYXRpb246Cj4+ID4+Cj4+ ID4+IDEuIFFFTVUgd2lsbCB0cmFwIGFjY2Vzc2VzIHRvIFBDSUVYQkFSIChvciB3aGF0ZXZlciBl bHNlIHBvc3NpYmx5Cj4+ID4+IHN1cHBvcnRlZCBpbiB0aGUgZnV0dXJlIGxpa2UgSEVDQkFTRSks IGV2ZW50dWFsbHkgYXNraW5nIFhlbiB0bwo+PiA+PiBtYXAgdGhlIE1NQ09ORklHIE1NSU8gcmFu Z2UgZm9yIGlvcmVxIHNlcnZpY2luZyBqdXN0IGxpa2UgaXQgZG9lcwo+PiA+PiBmb3IgYW55IG90 aGVyIGVtdWxhdGVkIE1NSU8gcmFuZ2UsIHZpYQo+PiA+PiBtYXBfaW9fcmFuZ2VfdG9faW9yZXFf c2VydmVyKCkuIEFsbCBjaGFuZ2VzIGluIE1NQ09ORklHCj4+ID4+IHBsYWNlbWVudC9zdGF0dXMg d2lsbCBsZWFkIHRvICAKPj4gcmVtYXBwaW5nL3VubWFwcGluZyAgCj4+ID4+IHRoZSBNTUlPIHJh bmdlLgo+PiA+Pgo+PiA+PiAyLiBYZW4gd2lsbCB0cmFwIE1NSU8gYWNjZXNzZXMgdG8gdGhpcyBh cmVhIGFuZCBmb3J3YXJkIHRoZW0gdG8KPj4gPj4gUUVNVSBhcyBNTUlPIChJT1JFUV9UWVBFX0NP UFkpIGlvcmVxcwo+PiA+Pgo+PiA+PiAzLiBRRU1VIHdpbGwgcmVjZWl2ZSB0aGVzZSBhY2Nlc3Nl cyBhbmQgcGFzcyB0aGVtIHRvIHRoZSBleGlzdGluZwo+PiA+PiBNTUNPTkZJRyBlbXVsYXRpb24g LS0gcGNpZV9tbWNmZ19kYXRhX3JlYWQvd3JpdGUgaGFuZGxlcnMsIGZpbmFsbHkKPj4gPj4gcmVz dWx0aW5nIGluIHNhbWUgeGVuX2hvc3RfcGNpXyogZnVuY3Rpb24gY2FsbHMgYXMgYmVmb3JlLgo+ PiA+Pgo+PiA+PiBUaGlzIGFwcHJvYWNoIHdvcmtzICJyaWdodCBvdXQgb2YgdGhlIGJveCIsIG5v IGNoYW5nZXMgbmVlZGVkIGZvcgo+PiA+PiBlaXRoZXIgWGVuIG9yIFFFTVUuIEFzIGJvdGggX1BD SV9DT05GSUcgYW5kIE1NSU8gdHlwZSBpb3JlcXMgYXJlCj4+ID4+IHByb2Nlc3NlZCwgZWl0aGVy IG1ldGhvZCBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgUENJL2V4dGVuZGVkIGNvbmZpZwo+PiA+PiBz cGFjZSAtLSBDRjgvQ0ZDIHBvcnQgSS9PIG9yIE1NSU8gYWNjZXNzZXMgdG8gTU1DT05GSUcuCj4+ ID4+Cj4+ID4+IElPUkVRIHJvdXRpbmcgZm9yIG11bHRpcGxlIGRldmljZSBlbXVsYXRvcnMgY2Fu IGJlIHN1cHBvcnRlZCB0b28uCj4+ID4+IEluIGZhY3QsIHRoZSBzYW1lIG1tY29uZmlnIGRtb3Bz L2h5cGVyY2FsbHMgY2FuIGJlIGFkZGVkIHRvIGxldAo+PiA+PiBYZW4ga25vdyB3aGVyZSBNTUNP TkZJRyBhcmVhIHJlc2lkZXMsIFhlbiB3aWxsIHVzZSB0aGlzCj4+ID4+IGluZm9ybWF0aW9uIHRv IGZvcndhcmQgTU1DT05GSUcgTU1JTyBpb3JlcXMgYWNjb3JkaW5nbHkgdG8gQkRGIG9mCj4+ID4+ IHRoZSBhZGRyZXNzLiBUaGUgZGlmZmVyZW5jZSB3aXRoIHRoZSBhcHByb2FjaCAjMSBpcyB0aGF0 IHRoZXNlCj4+ID4+IGludGVyZmFjZXMgYXJlIG5vdyBjb21wbGV0ZWx5IG9wdGlvbmFsIHdoZW4g d2UgdXNlIE1NSU8gaW9yZXFzCj4+ID4+IGZvciBNTUNPTkZJRyBvbiB2YW5pbGxhIFhlbi9RRU1V LiAgCj4+ID4KPj4gPkFzIHNhaWQgYWJvdmUsIGlmIHlvdSBmb3J3YXJkIE1DRkcgYWNjZXNzZXMg YXMgSU9SRVFfVFlQRV9DT1BZIHlvdQo+PiA+YXJlIGZvcmNpbmcgZWFjaCBJT1JFUSBzZXJ2ZXIg dG8ga25vdyB0aGUgcG9zaXRpb24gb2YgdGhlIE1DRkcgYXJlYQo+PiA+aW4gb3JkZXIgdG8gZG8g dGhlIGRlY29kaW5nLCB0aGlzIGlzIG5vdCBhY2NlcHRhYmxlIElNTy4KPj4gPiAgCj4+ID4+IFRo ZSBxdWVzdGlvbiBpcyB3aHkgSU9SRVFfVFlQRV9DT1BZIC0+IElPUkVRX1RZUEVfUENJX0NPTkZJ Rwo+PiA+PiB0cmFuc2xhdGlvbiBpcyBhIG11c3QgaGF2ZSB0aGluZyBhdCBhbGw/IEl0IHdvbid0 IG1ha2UgaGFuZGxpbmcKPj4gPj4gc2ltcGxlci4gRm9yIGN1cnJlbnQgUUVNVSBpbXBsZW1lbnRh dGlvbiBJT1JFUV9UWVBFX0NPUFkgKE1NSU8KPj4gPj4gYWNjZXNzZXMgZm9yIE1NQ09ORklHKSB3 b3VsZCBiZSBwcmVmZXJhYmxlIGFzIGl0IGFsbG93cyB0byB1c2UgdGhlCj4+ID4+IGV4aXN0aW5n IGNvZGUuICAKPj4gPgo+PiA+R3JhbnRlZCBpdCdzIGxpa2VseSBlYXNpZXIgdG8gaW1wbGVtZW50 LCBidXQgaXQncyBhbHNvIGluY29ycmVjdC4KPj4gPllvdSBzZWVtIHRvIGhhdmUgaW4gbWluZCB0 aGUgcGljdHVyZSBvZiBhIHNpbmdsZSBJT1JFUSBzZXJ2ZXIgKFFFTVUpCj4+ID5oYW5kbGluZyBh bGwgdGhlIGRldmljZXMuCj4+ID4KPj4gPkFsdGhvdWdoIHRoaXMgaXMgdGhlIG1vc3QgY29tbW9u IHNjZW5hcmlvLCBpdCdzIG5vdCB0aGUgb25seSBvbmUKPj4gPnN1cHBvcnRlZCBieSBYZW4uIFlv dXIgcHJvcG9zZWQgc29sdXRpb24gYnJlYWtzIHRoZSB1c2FnZSBvZgo+PiA+bXVsdGlwbGUgSU9S RVEgc2VydmVycyBhcyBQQ0kgZGV2aWNlIGVtdWxhdG9ycy4KPj4gPiAgCj4+ID4+IEkgdGhpbmsg aXQgd2lsbCBiZSBzYWZlIHRvIHVzZSBNTUNPTkZJRyBlbXVsYXRpb24gb24gTU1JTyBsZXZlbAo+ PiA+PiBmb3Igbm93IGFuZCBsYXRlciBleHRlbmQgaXQgd2l0aCAnc2V0X21tY29uZmlnXycgZG1v cC9oeXBlcmNhbGwKPj4gPj4gZm9yIHRoZSAnbXVsdGlwbGUgZGV2aWNlIGVtdWxhdG9ycycgSU9S RVFfVFlQRV9DT1BZIHJvdXRpbmcgdG8KPj4gPj4gd29yayBzYW1lIGFzIGZvciBQQ0kgY29uZiwg c28gaXQgY2FuIGJlIHVzZWQgYnkgWGVuR1QgZXRjIG9uIFEzNQo+PiA+PiBhcyB3ZWxsLiAgCj4+ ID4KPj4gPkknbSBhZnJhaWQgdGhpcyBraW5kIG9mIGlzc3VlcyB3b3VsZCBoYXZlIGJlZW4gZmFp cmx5IGVhc2llciB0bwo+PiA+aWRlbnRpZnkgaWYgYSBkZXNpZ24gZG9jdW1lbnQgZm9yIHRoaXMg ZmVhdHVyZSB3YXMgc2VudCB0byB0aGUgbGlzdAo+PiA+cHJpb3IgdG8gaXQncyBpbXBsZW1lbnRh dGlvbi4KPj4gPgo+PiA+UmVnYXJkaW5nIHdoZXRoZXIgdG8gYWNjZXB0IHNvbWV0aGluZyBsaWtl IHRoaXMsIEknbSBub3QgcmVhbGx5IGluCj4+ID5mYXZvciwgYnV0IElNTyBpdCBkZXBlbmRzIG9u IGhvdyBtdWNoIG5ldyBjb2RlIGlzIGFkZGVkIHRvIGhhbmRsZQo+PiA+dGhpcyBpbmNvcnJlY3Qg dXNhZ2UgdGhhdCB3b3VsZCB0aGVuIGdvIGF3YXkgKG9yIHdvdWxkIGhhdmUgdG8gYmUKPj4gPmNo YW5nZWQpIGluIG9yZGVyIHRvIGhhbmRsZSB0aGUgcHJvcGVyIGltcGxlbWVudGF0aW9uLgo+PiA+ Cj4+ID5UaGFua3MsIFJvZ2VyLiAgCj4KCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54 ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGlu Zm8veGVuLWRldmVs