From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Gordon Subject: Re: [PATCH 02/15] drm/i915: Embedded microcontroller (uC) firmware loading support Date: Thu, 18 Jun 2015 13:11:34 +0100 Message-ID: <5582B576.8050505@intel.com> References: <1434393394-21002-1-git-send-email-david.s.gordon@intel.com> <1434393394-21002-3-git-send-email-david.s.gordon@intel.com> <20150617120533.GR23637@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 8A1006E649 for ; Thu, 18 Jun 2015 05:11:36 -0700 (PDT) In-Reply-To: <20150617120533.GR23637@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMTcvMDYvMTUgMTM6MDUsIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gT24gTW9uLCBKdW4gMTUs IDIwMTUgYXQgMDc6MzY6MjBQTSArMDEwMCwgRGF2ZSBHb3Jkb24gd3JvdGU6Cj4+IEN1cnJlbnQg ZGV2aWNlcyBtYXkgY29udGFpbiBvbmUgb3IgbW9yZSBwcm9ncmFtbWFibGUgbWljcm9jb250cm9s bGVycwo+PiB0aGF0IG5lZWQgdG8gaGF2ZSBhIGZpcm13YXJlIGltYWdlIChha2EgImJpbmFyeSBi bG9iIikgbG9hZGVkIGZyb20gYW4KPj4gZXh0ZXJuYWwgbWVkaXVtIGFuZCB0cmFuc2ZlcnJlZCB0 byB0aGUgZGV2aWNlJ3MgbWVtb3J5Lgo+Pgo+PiBUaGlzIGZpbGUgcHJvdmlkZXMgZ2VuZXJpYyBz dXBwb3J0IGZ1bmN0aW9ucyBmb3IgZG9pbmcgdGhpczsgdGhleSBjYW4KPj4gdGhlbiBiZSB1c2Vk IGJ5IGVhY2ggdUMtc3BlY2lmaWMgbG9hZGVyLCB0aHVzIHJlZHVjaW5nIGNvZGUgZHVwbGljYXRp b24KPj4gYW5kIHRlc3RpbmcgZWZmb3J0Lgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBEYXZlIEdvcmRv biA8ZGF2aWQucy5nb3Jkb25AaW50ZWwuY29tPgo+PiBTaWduZWQtb2ZmLWJ5OiBBbGV4IERhaSA8 eXUuZGFpQGludGVsLmNvbT4KPiAKPiBHaXZlbiB0aGF0IEknbSBqdXN0IHNocmVkZGluZyB0aGUg c3luY2hyb25pemF0aW9uIHVzZWQgYnkgdGhlIGRtYyBsb2FkZXIKPiBJJ20gbm90IGNvbnZpbmNl ZCB0aGlzIGlzIGEgZ29vZCBpZGVhLiBBYnN0cmFjdGlvbiBoYXMgY29zdCwgYW5kIGEgYml0IG9m Cj4gY29weS1wYXN0ZSBmb3Igc2ltaWxhciBzb3VuZGluZyBidXQgc2xpZ2h0bHkgZGlmZmVyZW50 IHRoaW5ncyBkb2Vzbid0Cj4gc291bmQgYXdmdWwgdG8gbWUuIEFuZCB0aGUgY3JpdGljYWwgYml0 IGluIGFsbCB0aGUgZmlybXdhcmUgbG9hZGluZyBJJ3ZlCj4gc2VlbiB0aHVzIGZhciBpcyBpbiBz eW5jaHJvbml6aW5nIHRoZSBsb2FkaW5nIHdpdGggb3RoZXIgb3BlcmF0aW9ucywKPiBoaWRpbmcg dGhhdCBpc24ndCBhIGdvb2QgaWRlYS4gV29yc2UgaWYgd2UgZW5mb3JjZSBzdHVmZiBsaWtlIHJl cXVpcmluZwo+IGRldi0+c3RydWN0X211dGV4Lgo+IC1EYW5pZWwKCkl0J3MgcHJlY2lzZWx5IGJl Y2F1c2UgaXQncyBpbiBzb21lIHNlbnNlICJ0cml2aWFsLWJ1dC10cmlja3kiIHRoYXQgd2UKc2hv dWxkIHdyaXRlIGl0IG9uY2UsIGdldCBpdCByaWdodCwgYW5kIHVzZSBpdCBldmVyeXdoZXJlLiBD b3B5cGFzdGUKL2RvZXMvIHNvdW5kIGF3ZnVsOyBJJ3ZlIHNlZW4gaG93IHRoZSBjb2RlIHRoaXMg d2FzIGRlcml2ZWQgZnJvbSBoYWQKYWxyZWFkeSBiZWVuIGNsb25lZCBpbnRvIHRocmVlIGZsYXZv dXJzLCBhbGwgZGlmZmVyZW50IGFuZCBhbGwgd3JvbmcuCgpJdCdzIGEgdmVyeSBzaW1wbGUgYWJz dHJhY3Rpb246IG9uZSBlYXJseSBjYWxsIHRvIGtpY2sgdGhpbmdzIG9mZiBhcwplYXJseSBhcyBw b3NzaWJsZSwgbm8gbG9ja2luZyByZXF1aXJlZC4gT25lIGxhdGUgY2FsbCB3aXRoIHRoZQpzdHJ1 Y3RfbXV0ZXggaGVsZCB0byBjb21wbGV0ZSB0aGUgc3luY2hyb25pc2F0aW9uIGFuZCBhY3R1YWxs eSBkbyB0aGUKd29yaywgdGh1cyBndWFyYW50ZWVpbmcgdGhhdCB0aGUgdHJhbnNmZXIgdG8gdGhl IHRhcmdldCB1QyBpcyBkb25lIGluIGEKY29udHJvbGxlZCBmYXNoaW9uLCBhdCBhIHRpbWUgb2Yg dGhlIGNhbGxlcidzIGNob2ljZSwgYW5kIGJ5IHRoZQpkcml2ZXIncyBtYWlubGluZSB0aHJlYWQs IE5PVCBieSBhbiBhc3luY2hyb25vdXMgdGhyZWFkIHJhY2luZyB3aXRoCm90aGVyIGFjdGl2aXR5 ICh3aGljaCB3YXMgb25lIG9mIHRoZSB0aGluZ3Mgd3Jvbmcgd2l0aCB0aGUgb3JpZ2luYWwKdmVy c2lvbikuCgpXZSBzaG91bGQgY29udmVydCB0aGUgRE1DIGxvYWRlciB0byB1c2UgdGhpcyB0b28s IHNvIHRoZXJlIG5lZWQgYmUgb25seQpvbmUgYml0IG9mIGNvZGUgaW4gdGhlIHdob2xlIGRyaXZl ciB0aGF0IG5lZWRzIHRvIHVuZGVyc3RhbmQgaG93IHRvIHVzZQpjb21wbGV0aW9ucyB0byBnZXQg Y29ycmVjdCBoYW5kb3ZlciBmcm9tIGEgZnJlZS1ydW5uaW5nIG5vLWxvY2tzLWhlbGQKdGhyZWFk IHRvIHRoZSBwcm9wZXJseSBkaXNjaXBsaW5lZCBlbnZpcm9ubWVudCBvZiBkcml2ZXIgbWFpbmxp bmUgZm9yCnB1cnBvc2VzIG9mIHByb2dyYW1taW5nIHRoZSBoL3cuCgouRGF2ZS4KCj4+IC0tLQo+ PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgfCAgICAzICsKPj4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5jIHwgIDMxMiArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwo+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWNfbG9h ZGVyLmggfCAgIDgyICsrKysrKysrKwo+PiAgMyBmaWxlcyBjaGFuZ2VkLCAzOTcgaW5zZXJ0aW9u cygrKQo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Vj X2xvYWRlci5jCj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfdWNfbG9hZGVyLmgKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01h a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPj4gaW5kZXggYjdkZGY0OC4u NjA3ZmEyYSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPj4gQEAgLTM4LDYgKzM4LDkgQEAg aTkxNS15ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKPj4gIAkgIGludGVsX3JpbmdidWZmZXIubyBc Cj4+ICAJICBpbnRlbF91bmNvcmUubwo+PiAgCj4+ICsjIGdlbmVyaWMgYW5jaWxsaWFyeSBtaWNy b2NvbnRyb2xsZXIgc3VwcG9ydAo+PiAraTkxNS15ICs9IGludGVsX3VjX2xvYWRlci5vCj4+ICsK Pj4gICMgYXV0b2dlbmVyYXRlZCBudWxsIHJlbmRlciBzdGF0ZQo+PiAgaTkxNS15ICs9IGludGVs X3JlbmRlcnN0YXRlX2dlbjYubyBcCj4+ICAJICBpbnRlbF9yZW5kZXJzdGF0ZV9nZW43Lm8gXAo+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWNfbG9hZGVyLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19sb2FkZXIuYwo+PiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+PiBpbmRleCAwMDAwMDAwLi4yNmYwZmJlCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWNfbG9hZGVyLmMKPj4gQEAgLTAsMCArMSwzMTIg QEAKPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgo+PiAr ICoKPj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+PiArICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgo+PiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4+ICsgKiBhbmQvb3Igc2Vs bCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0 aGUKPj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4+ICsgKgo+PiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+PiAr ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZQo+PiArICogU29mdHdhcmUuCj4+ICsgKgo+PiArICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MgT1IKPj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g VEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+PiArICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM Cj4+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+PiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPj4gKyAqIEZS T00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IgT1RIRVIgREVBTElOR1MKPj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPj4gKyAqCj4+ICsgKiBB dXRob3I6Cj4+ICsgKglEYXZlIEdvcmRvbiA8ZGF2aWQucy5nb3Jkb25AaW50ZWwuY29tPgo+PiAr ICovCj4+ICsjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KPj4gKyNpbmNsdWRlICJpOTE1X2Ry di5oIgo+PiArI2luY2x1ZGUgImludGVsX3VjX2xvYWRlci5oIgo+PiArCj4+ICsvKioKPj4gKyAq IERPQzogR2VuZXJpYyBlbWJlZGRlZCBtaWNyb2NvbnRyb2xsZXIgKHVDKSBmaXJtd2FyZSBsb2Fk aW5nIHN1cHBvcnQKPj4gKyAqCj4+ICsgKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBwcm92 aWRlIGEgZ2VuZXJpYyB3YXkgdG8gbG9hZCB0aGUgZmlybXdhcmUgdGhhdAo+PiArICogbWF5IGJl IHJlcXVpcmVkIGJ5IGFuIGVtYmVkZGVkIG1pY3JvY29udHJvbGxlciAodUMpLgo+PiArICoKPj4g KyAqIFRoZSBmdW5jdGlvbiBpbnRlbF91Y19md19pbml0KCkgc2hvdWxkIGJlIGNhbGxlZCBlYXJs eSwgYW5kIHdpbGwgaW5pdGlhdGUKPj4gKyAqIGFuIGFzeW5jaHJvbm91cyByZXF1ZXN0IHRvIGZl dGNoIHRoZSBmaXJtd2FyZSBpbWFnZSAoYWthICJiaW5hcnkgYmxvYiIpLgo+PiArICogV2hlbiB0 aGUgaW1hZ2UgaGFzIGJlZW4gZmV0Y2hlZCBpbnRvIG1lbW9yeSwgdGhlIGtlcm5lbCB3aWxsIGNh bGwgYmFjayB0bwo+PiArICogdWNfZndfZmV0Y2hfY2FsbGJhY2soKSB3aG9zZSBmdW5jdGlvbiBp cyBzaW1wbHkgdG8gcmVjb3JkIHRoZSBjb21wbGV0aW9uCj4+ICsgKiBzdGF0dXMsIGFuZCBzdGFz aCB0aGUgZmlybXdhcmUgYmxvYiBmb3IgbGF0ZXIuCj4+ICsgKgo+PiArICogQXQgc29tZSBjb252 ZW5pZW50IHBvaW50IGFmdGVyIEdFTSBpbml0aWFsaXNhdGlvbiwgdGhlIGRyaXZlciBzaG91bGQg Y2FsbAo+PiArICogaW50ZWxfdWNfZndfY2hlY2soKTsgdGhpcyB3aWxsIGNoZWNrIHdoZXRoZXIg dGhlIGFzeW5jaHJvbm91cyB0aHJlYWQgaGFzCj4+ICsgKiBjb21wbGV0ZWQgYW5kIHdhaXQgZm9y IGl0IGlmIG5vdCwgY2hlY2sgd2hldGhlciB0aGUgaW1hZ2Ugd2FzIHN1Y2Nlc3NmdWxseQo+PiAr ICogZmV0Y2hlZDsgYW5kIHRoZW4gYWxsb3cgdGhlIGNhbGxiYWNrKCkgZnVuY3Rpb24gKGlmIHBy b3ZpZGVkKSB0byB2YWxpZGF0ZQo+PiArICogdGhlIGltYWdlIGFuZC9vciBzYXZlIHRoZSBkYXRh IGluIGEgR0VNIG9iamVjdC4KPj4gKyAqCj4+ICsgKiBUaGVyZWFmdGVyIHRoZSB1Qy1zcGVjaWZp YyBjb2RlIGNhbiB0cmFuc2ZlciB0aGUgZGF0YSBpbiB0aGUgR0VNIG9iamVjdAo+PiArICogdG8g dGhlIHVDJ3MgbWVtb3J5IChpbiBzb21lIHVDLXNwZWNpZmljIHdheSwgbm90IGhhbmRsZWQgaGVy ZSkuCj4+ICsgKgo+PiArICogRHVyaW5nIGRyaXZlciBzaHV0ZG93biwgb3IgaWYgZHJpdmVyIGxv YWQgaXMgYWJvcnRlZCwgaW50ZWxfdWNfZndfZmluaSgpCj4+ICsgKiBzaG91bGQgYmUgY2FsbGVk IHRvIHJlbGVhc2UgYW55IHJlbWFpbmluZyByZXNvdXJjZXMuCj4+ICsgKi8KPj4gKwo+PiArCj4+ ICsvKgo+PiArICogQ2FsbGVkIG9uY2UgcGVyIHVDLCBsYXRlIGluIGRyaXZlciBpbml0aWFsaXNh dGlvbi4gR0VNIGlzIG5vdyByZWFkeSwgYW5kIHNvCj4+ICsgKiB3ZSBjYW4gbm93IGNyZWF0ZSBh IEdFTSBvYmplY3QgdG8gaG9sZCB0aGUgdUMgZmlybXdhcmUuIEJ1dCBmaXJzdCwgd2UgbXVzdAo+ PiArICogc3luY2hyb25pc2Ugd2l0aCB0aGUgZmlybXdhcmUtZmV0Y2hpbmcgdGhyZWFkIHRoYXQg d2FzIGluaXRpYXRlZCBkdXJpbmcKPj4gKyAqIGVhcmx5IGRyaXZlciBsb2FkLCBpbiBpbnRlbF91 Y19md19pbml0KCksIGFuZCBzZWUgd2hldGhlciBpdCBzdWNjZXNzZnVsbHkKPj4gKyAqIGZldGNo ZWQgdGhlIGZpcm13YXJlIGJsb2IuCj4+ICsgKi8KPj4gK3N0YXRpYyB2b2lkCj4+ICt1Y19md19m ZXRjaF93YWl0KHN0cnVjdCBpbnRlbF91Y19mdyAqdWNfZncsCj4+ICsJCSBib29sIGNhbGxiYWNr KHN0cnVjdCBpbnRlbF91Y19mdyAqKSkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gdWNfZnctPnVjX2RldjsKPj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ PiArCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7Cj4+ICsKPj4gKwlEUk1fREVCVUdfRFJJVkVS KCJiZWZvcmUgd2FpdGluZzogJXMgZncgZmV0Y2ggc3RhdHVzICVkLCBmdyAlcFxuIiwKPj4gKwkJ dWNfZnctPnVjX25hbWUsIHVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMsIHVjX2Z3LT51Y19md19i bG9iKTsKPj4gKwo+PiArCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0 ZXgpKTsKPj4gKwlXQVJOX09OKHVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMgIT0gSU5URUxfVUNf RklSTVdBUkVfUEVORElORyk7Cj4+ICsKPj4gKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ1Y19mdy0+ dWNfZndfZmV0Y2hlZCk7Cj4+ICsKPj4gKwlEUk1fREVCVUdfRFJJVkVSKCJhZnRlciB3YWl0aW5n OiAlcyBmdyBmZXRjaCBzdGF0dXMgJWQsIGZ3ICVwXG4iLAo+PiArCQl1Y19mdy0+dWNfbmFtZSwg dWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cywgdWNfZnctPnVjX2Z3X2Jsb2IpOwo+PiArCj4+ICsJ ZncgPSB1Y19mdy0+dWNfZndfYmxvYjsKPj4gKwlpZiAoIWZ3KSB7Cj4+ICsJCS8qIG5vIGZpcm13 YXJlIGZvdW5kOyB0cnkgYWdhaW4gaW4gY2FzZSBGUyB3YXMgbm90IG1vdW50ZWQgKi8KPj4gKwkJ RFJNX0RFQlVHX0RSSVZFUigicmV0cnkgZmV0Y2hpbmcgJXMgZncgZnJvbSA8JXM+XG4iLAo+PiAr CQkJdWNfZnctPnVjX25hbWUsIHVjX2Z3LT51Y19md19wYXRoKTsKPj4gKwkJaWYgKHJlcXVlc3Rf ZmlybXdhcmUoJmZ3LCB1Y19mdy0+dWNfZndfcGF0aCwgJmRldi0+cGRldi0+ZGV2KSkKPj4gKwkJ CWdvdG8gZmFpbDsKPj4gKwkJaWYgKCFmdykKPj4gKwkJCWdvdG8gZmFpbDsKPj4gKwkJRFJNX0RF QlVHX0RSSVZFUigiZmV0Y2ggJXMgZncgZnJvbSA8JXM+IHN1Y2NlZWRlZCwgZncgJXBcbiIsCj4+ ICsJCQl1Y19mdy0+dWNfbmFtZSwgdWNfZnctPnVjX2Z3X3BhdGgsIGZ3KTsKPj4gKwkJdWNfZnct PnVjX2Z3X2Jsb2IgPSBmdzsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBDYWxsYmFjayB0byB0aGUgb3B0 aW9uYWwgdUMtc3BlY2lmaWMgZnVuY3Rpb24sIGlmIHN1cHBsaWVkICovCj4+ICsJaWYgKGNhbGxi YWNrICYmICFjYWxsYmFjayh1Y19mdykpCj4+ICsJCWdvdG8gZmFpbDsKPj4gKwo+PiArCS8qIENh bGxiYWNrIG1heSBoYXZlIGRvbmUgdGhlIG9iamVjdCBhbGxvY2F0aW9uICYgd3JpdGUgaXRzZWxm ICovCj4+ICsJb2JqID0gdWNfZnctPnVjX2Z3X29iajsKPj4gKwlpZiAoIW9iaikgewo+PiArCQlz aXplX3QgcGFnZXMgPSByb3VuZF91cChmdy0+c2l6ZSwgUEFHRV9TSVpFKTsKPj4gKwkJb2JqID0g aTkxNV9nZW1fYWxsb2Nfb2JqZWN0KGRldiwgcGFnZXMpOwo+PiArCQlpZiAoIW9iaikKPj4gKwkJ CWdvdG8gZmFpbDsKPj4gKwo+PiArCQl1Y19mdy0+dWNfZndfb2JqID0gb2JqOwo+PiArCQl1Y19m dy0+dWNfZndfc2l6ZSA9IGZ3LT5zaXplOwo+PiArCQlpZiAoaTkxNV9nZW1fb2JqZWN0X3dyaXRl KG9iaiwgZnctPmRhdGEsIGZ3LT5zaXplKSkKPj4gKwkJCWdvdG8gZmFpbDsKPj4gKwl9Cj4+ICsK Pj4gKwlEUk1fREVCVUdfRFJJVkVSKCIlcyBmdyBmZXRjaCBzdGF0dXMgU1VDQ0VTU1xuIiwgdWNf ZnctPnVjX25hbWUpOwo+PiArCXJlbGVhc2VfZmlybXdhcmUoZncpOwo+PiArCXVjX2Z3LT51Y19m d19ibG9iID0gTlVMTDsKPj4gKwl1Y19mdy0+dWNfZndfZmV0Y2hfc3RhdHVzID0gSU5URUxfVUNf RklSTVdBUkVfU1VDQ0VTUzsKPj4gKwlyZXR1cm47Cj4+ICsKPj4gK2ZhaWw6Cj4+ICsJRFJNX0RF QlVHX0RSSVZFUigiJXMgZncgZmV0Y2ggc3RhdHVzIEZBSUw7IGZ3ICVwLCBvYmogJXBcbiIsCj4+ ICsJCXVjX2Z3LT51Y19uYW1lLCBmdywgdWNfZnctPnVjX2Z3X29iaik7Cj4+ICsJRFJNX0VSUk9S KCJGYWlsZWQgdG8gZmV0Y2ggJXMgZmlybXdhcmUgZnJvbSA8JXM+XG4iLAo+PiArCQkgIHVjX2Z3 LT51Y19uYW1lLCB1Y19mdy0+dWNfZndfcGF0aCk7Cj4+ICsKPj4gKwlvYmogPSB1Y19mdy0+dWNf Zndfb2JqOwo+PiArCWlmIChvYmopCj4+ICsJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZv YmotPmJhc2UpOwo+PiArCXVjX2Z3LT51Y19md19vYmogPSBOVUxMOwo+PiArCj4+ICsJcmVsZWFz ZV9maXJtd2FyZShmdyk7CQkvKiBPSyBldmVuIGlmIGZ3IGlzIE5VTEwgKi8KPj4gKwl1Y19mdy0+ dWNfZndfYmxvYiA9IE5VTEw7Cj4+ICsJdWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyA9IElOVEVM X1VDX0ZJUk1XQVJFX0ZBSUw7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogaW50ZWxfdWNfZndf Y2hlY2soKSAtIGNoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIGZpcm13YXJlIGZldGNoaW5nIHByb2Nl c3MKPj4gKyAqIEB1Y19mdzoJaW50ZWxfdWNfZncgc3RydWN0dXJlCj4+ICsgKiBAY2FsbGJhY2s6 CW9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGFuZC9vciBzYXZlIHRoZSBp bWFnZQo+PiArICoKPj4gKyAqIElmIHRoZSBmZXRjaCBpcyBzdGlsbCBQRU5ESU5HLCB3YWl0IGZv ciBjb21wbGV0aW9uIGZpcnN0LCB0aGVuIGNoZWNrIGFuZAo+PiArICogcmV0dXJuIHRoZSBvdXRj b21lLiBTdWJzZXF1ZW50IGNhbGxzIHdpbGwganVzdCByZXR1cm4gdGhlIHNhbWUgb3V0Y29tZQo+ PiArICogYmFzZWQgb24gdGhlIHJlY29yZGVkIGZldGNoIHN0YXR1cywgd2l0aG91dCB0cmlnZ2Vy aW5nIGFub3RoZXIgZmV0Y2gKPj4gKyAqIGFuZCB3aXRob3V0IGNhbGxpbmcgQGNhbGxiYWNrKCku Cj4+ICsgKgo+PiArICogQWZ0ZXIgdGhpcyBjYWxsLCBAdWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1 cyB3aWxsIHNob3cgd2hldGhlciB0aGUgZmlybXdhcmUKPj4gKyAqIGltYWdlIHdhcyBzdWNjZXNz ZnVsbHkgZmV0Y2hlZCBhbmQgdHJhbnNmZXJyZWQgdG8gYSBHRU0gb2JqZWN0LiBJZiBpdCBpcwo+ PiArICogSU5URUxfVUNfRklSTVdBUkVfU1VDQ0VTUywgQHVjX2Z3LT51Y19md19vYmogd2lsbCBi ZSBwb2ludCB0byB0aGUgR0VNCj4+ICsgKiBvYmplY3QsIGFuZCB0aGUgc2l6ZSBvZiB0aGUgaW1h Z2Ugd2lsbCBiZSBpbiBAdWNfZnctPnVjX2Z3X3NpemUuICBGb3IgYW55Cj4+ICsgKiBvdGhlciBz dGF0dXMgdmFsdWUsIHRoZXNlIG1lbWJlcnMgYXJlIHVuZGVmaW5lZC4KPj4gKyAqCj4+ICsgKiBU aGUgQGNhbGxiYWNrKCkgcGFyYW1ldGVyIGFsbG93cyB0aGUgdUMtc3BlY2lmaWMgY29kZSB0byB2 YWxpZGF0ZSB0aGUKPj4gKyAqIGltYWdlIGJlZm9yZSBpdCBpcyBzYXZlZCwgYW5kIGFsc28gdG8g b3ZlcnJpZGUgdGhlIGRlZmF1bHQgc2F2ZSBtZWNoYW5pc20KPj4gKyAqIGlmIHJlcXVpcmVkLiBX aGVuIGl0IGlzIGNhbGxlZCwgQHVjX2Z3LT51Y19md19ibG9iIHJlZmVycyB0byB0aGUgZmV0Y2hl ZAo+PiArICogZmlybXdhcmUgaW1hZ2UsIGFuZCBAdWNfZnctPnVjX2Z3X29iaiBpcyBOVUxMLgo+ PiArICoKPj4gKyAqIElmIEBjYWxsYmFjaygpIHJldHVybnMgRkFMU0UsIHRoZSBmZXRjaGVkIGlt YWdlIGlzIGNvbnNpZGVyZWQgaW52YWxpZC4KPj4gKyAqIFRoZSBmZXRjaCBzdGF0dXMgd2lsbCBi ZSBzZXQgdG8gRkFJTCwgYW5kIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gLUVJTy4KPj4gKyAq Cj4+ICsgKiBJZiBAY2FsbGJhY2soKSByZXR1cm5zIFRSVUUgYnV0IGRvZXNuJ3Qgc2V0IEB1Y19m dy0+dWNfZndfb2JqLCB0aGUgaW1hZ2UKPj4gKyAqIGlzIGNvbnNpZGVyZWQgZ29vZDsgaXQgd2ls bCBiZSBzYXZlZCBpbiBhIEdFTSBvYmplY3QgYXMgZGVzY3JpYmVkIGFib3ZlLgo+PiArICogVGhp cyBpcyB0aGUgZGVmYXVsdCBpZiBubyBAY2FsbGJhY2soKSBpcyBzdXBwbGllZC4KPj4gKyAqCj4+ ICsgKiBJZiBAY2FsbGJhY2soKSByZXR1cm5zIFRSVUUgYWZ0ZXIgc2V0dGluZyBAdWNfZnctPnVj X2Z3X29iaiwgdGhpcyBtZWFucwo+PiArICogdGhhdCB0aGUgaW1hZ2UgaGFzIGFscmVhZHkgYmVl biBzYXZlZCBieSBAY2FsbGJhY2soKSBpdHNlbGYuIFRoaXMgYWxsb3dzCj4+ICsgKiBAY2FsbGJh Y2soKSB0byBjdXN0b21pc2UgdGhlIGZvcm1hdCBvZiB0aGUgZGF0YSBpbiB0aGUgR0VNIG9iamVj dCwgZm9yCj4+ICsgKiBleGFtcGxlIGlmIGl0IG5lZWRzIHRvIHNhdmUgb25seSBhIHBvcnRpb24g b2YgdGhlIGxvYWRlZCBpbWFnZS4KPj4gKyAqCj4+ICsgKiBJbiBhbGwgY2FzZXMgdGhlIGZpcm13 YXJlIGJsb2IgaXMgcmVsZWFzZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4KPj4gKyAq Cj4+ICsgKiBSZXR1cm46CW5vbi16ZXJvIGNvZGUgb24gZXJyb3IKPj4gKyAqLwo+PiAraW50Cj4+ ICtpbnRlbF91Y19md19jaGVjayhzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3LAo+PiArCQkgIGJv b2wgY2FsbGJhY2soc3RydWN0IGludGVsX3VjX2Z3ICopKQo+PiArewo+PiArCVdBUk5fT04oIW11 dGV4X2lzX2xvY2tlZCgmdWNfZnctPnVjX2Rldi0+c3RydWN0X211dGV4KSk7Cj4+ICsKPj4gKwlp ZiAodWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyA9PSBJTlRFTF9VQ19GSVJNV0FSRV9QRU5ESU5H KSB7Cj4+ICsJCS8qIFdlIG9ubHkgY29tZSBoZXJlIG9uY2UgKi8KPj4gKwkJdWNfZndfZmV0Y2hf d2FpdCh1Y19mdywgY2FsbGJhY2spOwo+PiArCQkvKiBzdGF0ZSBtdXN0IG5vdyBiZSBGQUlMIG9y IFNVQ0NFU1MgKi8KPj4gKwl9Cj4+ICsKPj4gKwlEUk1fREVCVUdfRFJJVkVSKCIlcyBmdyBmZXRj aCBzdGF0dXMgJWRcbiIsCj4+ICsJCXVjX2Z3LT51Y19uYW1lLCB1Y19mdy0+dWNfZndfZmV0Y2hf c3RhdHVzKTsKPj4gKwo+PiArCXN3aXRjaCAodWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cykgewo+ PiArCWNhc2UgSU5URUxfVUNfRklSTVdBUkVfRkFJTDoKPj4gKwkJLyogc29tZXRoaW5nIHdlbnQg d3JvbmcgOiggKi8KPj4gKwkJcmV0dXJuIC1FSU87Cj4+ICsKPj4gKwljYXNlIElOVEVMX1VDX0ZJ Uk1XQVJFX05PTkU6Cj4+ICsJCS8qIG5vIGZpcm13YXJlLCBub3RoaW5nIHRvIGRvIChub3QgYW4g ZXJyb3IpICovCj4+ICsJCXJldHVybiAwOwo+PiArCj4+ICsJY2FzZSBJTlRFTF9VQ19GSVJNV0FS RV9QRU5ESU5HOgo+PiArCWRlZmF1bHQ6Cj4+ICsJCS8qICJjYW4ndCBoYXBwZW4iICovCj4+ICsJ CVdBUk5fT05DRSgxLCAiJXMgZncgPCVzPiBpbnZhbGlkIHVjX2Z3X2ZldGNoX3N0YXR1cyAlZCFc biIsCj4+ICsJCQl1Y19mdy0+dWNfbmFtZSwgdWNfZnctPnVjX2Z3X3BhdGgsCj4+ICsJCQl1Y19m dy0+dWNfZndfZmV0Y2hfc3RhdHVzKTsKPj4gKwkJcmV0dXJuIC1FTlhJTzsKPj4gKwo+PiArCWNh c2UgSU5URUxfVUNfRklSTVdBUkVfU1VDQ0VTUzoKPj4gKwkJcmV0dXJuIDA7Cj4+ICsJfQo+PiAr fQo+PiArCj4+ICsvKgo+PiArICogQ2FsbGJhY2sgZnJvbSB0aGUga2VybmVsJ3MgYXN5bmNocm9u b3VzIGZpcm13YXJlLWZldGNoaW5nIHN1YnN5c3RlbS4KPj4gKyAqIEFsbCB3ZSBoYXZlIHRvIGRv IGhlcmUgaXMgc3Rhc2ggdGhlIGJsb2IgYW5kIHNpZ25hbCBjb21wbGV0aW9uLgo+PiArICogRXJy b3IgY2hlY2tpbmcgKGUuZy4gbm8gZmlybXdhcmUgZm91bmQpIGlzIGxlZnQgdG8gbWFpbmxpbmUg Y29kZS4KPj4gKyAqIFdlIGRvbid0IGhhdmUgKGFuZCBkb24ndCB3YW50IG9yIG5lZWQgdG8gYWNx dWlyZSkgdGhlIHN0cnVjdF9tdXRleCBoZXJlLgo+PiArICovCj4+ICtzdGF0aWMgdm9pZAo+PiAr dWNfZndfZmV0Y2hfY2FsbGJhY2soY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29u dGV4dCkKPj4gK3sKPj4gKwlzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3ID0gY29udGV4dDsKPj4g Kwo+PiArCVdBUk5fT04odWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyAhPSBJTlRFTF9VQ19GSVJN V0FSRV9QRU5ESU5HKTsKPj4gKwlEUk1fREVCVUdfRFJJVkVSKCIlcyBmaXJtd2FyZSBmZXRjaCBm cm9tIDwlcz4gc3RhdHVzICVkLCBmdyAlcFxuIiwKPj4gKwkJCXVjX2Z3LT51Y19uYW1lLCB1Y19m dy0+dWNfZndfcGF0aCwKPj4gKwkJCXVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMsIGZ3KTsKPj4g Kwo+PiArCXVjX2Z3LT51Y19md19ibG9iID0gZnc7Cj4+ICsJY29tcGxldGUoJnVjX2Z3LT51Y19m d19mZXRjaGVkKTsKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBpbnRlbF91Y19md19pbml0KCkg LSBpbml0aWF0ZSB0aGUgZmV0Y2hpbmcgb2YgZmlybXdhcmUKPj4gKyAqIEBkZXY6CWRybSBkZXZp Y2UKPj4gKyAqIEB1Y19mdzoJaW50ZWxfdWNfZncgc3RydWN0dXJlCj4+ICsgKiBAbmFtZToJaHVt YW4tcmVhZGFibGUgZGV2aWNlIG5hbWUgKGUuZy4gIkd1QyIpIGZvciBtZXNzYWdlcwo+PiArICog QGZ3X3BhdGg6CSh0cmFpbGluZyBwYXJ0cyBvZikgcGF0aCB0byBmaXJtd2FyZSAoZS5nLiAiaTkx NS9ndWNfZncuYmluIikKPj4gKyAqIAkJQGZ3X3BhdGggPT0gTlVMTCBtZWFucyAibm8gZmlybXdh cmUgZXhwZWN0ZWQiIChub3QgYW4gZXJyb3IpLAo+PiArICogCQlAZndfcGF0aCA9PSAiIiAoZW1w dHkgc3RyaW5nKSBtZWFucyAiZmlybXdhcmUgdW5rbm93biIgaS5lLgo+PiArICogCQl0aGUgdUMg cmVxdWlyZXMgZmlybXdhcmUsIGJ1dCB0aGUgZHJpdmVyIGRvZXNuJ3Qga25vdyB3aGVyZQo+PiAr ICogCQl0byBmaW5kIHRoZSBwcm9wZXIgdmVyc2lvbi4gVGhpcyB3aWxsIGJlIGxvZ2dlZCBhcyBh biBlcnJvci4KPj4gKyAqCj4+ICsgKiBUaGlzIGlzIGNhbGxlZCBqdXN0IG9uY2UgcGVyIHVDLCBk dXJpbmcgZHJpdmVyIGxvYWRpbmcuIEl0IGlzIHRoZXJlZm9yZQo+PiArICogYXV0b21hdGljYWxs eSBzaW5nbGUtdGhyZWFkZWQgYW5kIGRvZXMgbm90IG5lZWQgdG8gYWNxdWlyZSBhbnkgbXV0ZXhl cwo+PiArICogb3Igc3BpbmxvY2tzLiBPVE9ILCBHRU0gaXMgbm90IHlldCBmdWxseSBpbml0aWFs aXNlZCwgc28gd2UgY2FuJ3QgZG8KPj4gKyAqIHZlcnkgbXVjaCBoZXJlLgo+PiArICoKPj4gKyAq IFRoZSBtYWluIHRhc2sgaGVyZSBpcyB0byBpbml0aWF0ZSB0aGUgZmV0Y2hpbmcgb2YgdGhlIHVD IGZpcm13YXJlIGludG8KPj4gKyAqIG1lbW9yeSwgdXNpbmcgdGhlIHN0YW5kYXJkIGtlcm5lbCBm aXJtd2FyZSBmZXRjaGluZyBzdXBwb3J0LiAgVGhlIGFjdHVhbAo+PiArICogZmV0Y2hpbmcgd2ls bCB0aGVuIHByb2NlZWQgYXN5bmNocm9ub3VzbHkgYW5kIGluIHBhcmFsbGVsIHdpdGggdGhlIHJl c3QKPj4gKyAqIG9mIGRyaXZlciBpbml0aWFsaXNhdGlvbjsgbGF0ZXIgaW4gdGhlIGxvYWRpbmcg cHJvY2VzcyB3ZSB3aWxsIHN5bmNocm9uaXNlCj4+ICsgKiB3aXRoIHRoZSBmaXJtd2FyZS1mZXRj aGluZyB0aHJlYWQgYmVmb3JlIHRyYW5zZmVycmluZyB0aGUgZmlybXdhcmUgaW1hZ2UKPj4gKyAq IGZpcnN0bHkgaW50byBhIEdFTSBvYmplY3QgYW5kIHRoZW4gaW50byB0aGUgdUMncyBtZW1vcnku Cj4+ICsgKi8KPj4gK3ZvaWQKPj4gK2ludGVsX3VjX2Z3X2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgc3RydWN0IGludGVsX3VjX2Z3ICp1Y19mdywKPj4gKwkJIGNvbnN0IGNoYXIgKm5hbWUs IGNvbnN0IGNoYXIgKmZ3X3BhdGgpCj4+ICt7Cj4+ICsJdWNfZnctPnVjX2RldiA9IGRldjsKPj4g Kwl1Y19mdy0+dWNfbmFtZSA9IG5hbWU7Cj4+ICsJdWNfZnctPnVjX2Z3X3BhdGggPSBmd19wYXRo Owo+PiArCXVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMgPSBJTlRFTF9VQ19GSVJNV0FSRV9OT05F Owo+PiArCXVjX2Z3LT51Y19md19sb2FkX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJFX05PTkU7 Cj4+ICsJaW5pdF9jb21wbGV0aW9uKCZ1Y19mdy0+dWNfZndfZmV0Y2hlZCk7Cj4+ICsKPj4gKwlp ZiAoZndfcGF0aCA9PSBOVUxMKQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwlpZiAoKmZ3X3BhdGgg PT0gJ1wwJykgewo+PiArCQlEUk1fRVJST1IoIk5vICVzIGZpcm13YXJlIGtub3duIGZvciB0aGlz IHBsYXRmb3JtXG4iLCBuYW1lKTsKPj4gKwkJdWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyA9IElO VEVMX1VDX0ZJUk1XQVJFX0ZBSUw7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwl1Y19m dy0+dWNfZndfZmV0Y2hfc3RhdHVzID0gSU5URUxfVUNfRklSTVdBUkVfUEVORElORzsKPj4gKwo+ PiArCWlmIChyZXF1ZXN0X2Zpcm13YXJlX25vd2FpdChUSElTX01PRFVMRSwgdHJ1ZSwgZndfcGF0 aCwKPj4gKwkJCQkgICAgJmRldi0+cGRldi0+ZGV2LAo+PiArCQkJCSAgICBHRlBfS0VSTkVMLCB1 Y19mdywKPj4gKwkJCQkgICAgdWNfZndfZmV0Y2hfY2FsbGJhY2spKSB7Cj4+ICsJCURSTV9FUlJP UigiRmFpbGVkIHRvIHJlcXVlc3QgJXMgZmlybXdhcmUgZnJvbSA8JXM+XG4iLAo+PiArCQkJICBu YW1lLCBmd19wYXRoKTsKPj4gKwkJdWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyA9IElOVEVMX1VD X0ZJUk1XQVJFX0ZBSUw7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBmaXJtd2Fy ZSBmZXRjaCBpbml0aWF0ZWQsIGNhbGxiYWNrIHdpbGwgc2lnbmFsIGNvbXBsZXRpb24gKi8KPj4g KwlEUk1fREVCVUdfRFJJVkVSKCJpbml0aWF0ZWQgZmV0Y2hpbmcgJXMgZmlybXdhcmUgZnJvbSA8 JXM+XG4iLAo+PiArCQluYW1lLCBmd19wYXRoKTsKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBp bnRlbF91Y19md19maW5pKCkgLSBjbGVhbiB1cCBhbGwgdUMgZmlybXdhcmUtcmVsYXRlZCBkYXRh Cj4+ICsgKiBAdWNfZnc6CWludGVsX3VjX2Z3IHN0cnVjdHVyZQo+PiArICovCj4+ICt2b2lkCj4+ ICtpbnRlbF91Y19md19maW5pKHN0cnVjdCBpbnRlbF91Y19mdyAqdWNfZncpCj4+ICt7Cj4+ICsJ V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZ1Y19mdy0+dWNfZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsK Pj4gKwo+PiArCS8qCj4+ICsJICogR2VuZXJhbGx5LCB0aGUgYmxvYiBzaG91bGQgaGF2ZSBiZWVu IHJlbGVhc2VkIGVhcmxpZXIsIGJ1dAo+PiArCSAqIGlmIHRoZSBkcml2ZXIgbG9hZCB3ZXJlIGFi b3J0ZWQgYWZ0ZXIgdGhlIGZldGNoIGhhZCBiZWVuCj4+ICsJICogaW5pdGlhdGVkIGJ1dCBub3Qg Y29tcGxldGVkIGl0IG1pZ2h0IHN0aWxsIGJlIGFyb3VuZAo+PiArCSAqLwo+PiArCWlmICh1Y19m dy0+dWNfZndfZmV0Y2hfc3RhdHVzID09IElOVEVMX1VDX0ZJUk1XQVJFX1BFTkRJTkcpCj4+ICsJ CXdhaXRfZm9yX2NvbXBsZXRpb24oJnVjX2Z3LT51Y19md19mZXRjaGVkKTsKPj4gKwlyZWxlYXNl X2Zpcm13YXJlKHVjX2Z3LT51Y19md19ibG9iKTsJLyogT0sgZXZlbiBpZiBOVUxMICovCj4+ICsJ dWNfZnctPnVjX2Z3X2Jsb2IgPSBOVUxMOwo+PiArCj4+ICsJaWYgKHVjX2Z3LT51Y19md19vYmop Cj4+ICsJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZ1Y19mdy0+dWNfZndfb2JqLT5iYXNl KTsKPj4gKwl1Y19mdy0+dWNfZndfb2JqID0gTlVMTDsKPj4gK30KPj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfdWNfbG9hZGVyLmgKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAw MDAwMC4uMjI1MDJlYQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3VjX2xvYWRlci5oCj4+IEBAIC0wLDAgKzEsODIgQEAKPj4gKy8qCj4+ICsgKiBD b3B5cmlnaHQgwqkgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgo+PiArICoKPj4gKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCj4+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+PiArICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ PiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPj4gKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6Cj4+ICsgKgo+PiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+PiArICogcGFyYWdyYXBoKSBzaGFs bCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZQo+PiArICogU29mdHdhcmUuCj4+ICsgKgo+PiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPj4gKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAo+PiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4+ICsgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgo+PiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MK Pj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPj4gKyAqCj4+ICsgKiBBdXRob3I6Cj4+ICsgKglEYXZl IEdvcmRvbiA8ZGF2aWQucy5nb3Jkb25AaW50ZWwuY29tPgo+PiArICovCj4+ICsjaWZuZGVmIF9J TlRFTF9VQ19MT0FERVJfSAo+PiArI2RlZmluZSBfSU5URUxfVUNfTE9BREVSX0gKPj4gKwo+PiAr LyoKPj4gKyAqIE1pY3JvY29udHJvbGxlciAodUMpIGZpcm13YXJlIGxvYWRpbmcgc3VwcG9ydAo+ PiArICovCj4+ICsKPj4gKy8qCj4+ICsgKiBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgdG8gdHJhY2sg dGhlIHN0YWdlcyBvZiBnZXR0aW5nIHRoZSByZXF1aXJlZCBmaXJtd2FyZQo+PiArICogaW50byBh biBvbmJvYXJkIG1pY3JvY29udHJvbGxlci4gVGhlIGNvbW1vbiBjb2RlIHRyYWNrcyB0aGUgcGhh c2VzIG9mCj4+ICsgKiBmZXRjaGluZyB0aGUgZmlybXdhcmUgKGFrYSAiYmluYXJ5IGJsb2IiKSBm cm9tIGFuIGV4dGVybmFsIGZpbGUgaW50byBhIEdFTQo+PiArICogb2JqZWN0IGluIHRoZSAndWNf ZndfZmV0Y2hfc3RhdHVzJyBmaWVsZCBiZWxvdzsgdGhlIHVDLXNwZWNpZmljIERNQSBjb2RlCj4+ ICsgKiB1c2VzIHRoZSAndWNfZndfbG9hZF9zdGF0dXMnIGZpZWxkIHRvIHRyYWNrIHRoZSB0cmFu c2ZlciBmcm9tIEdFTSBvYmplY3QKPj4gKyAqIHRvIHVDIG1lbW9yeS4KPj4gKyAqCj4+ICsgKiBG b3IgdGhlIGZpcnN0IChmZXRjaCkgc3RhZ2UsIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgdmFs dWVzIGlzOgo+PiArICogTk9ORSAtIG5vIGZpcm13YXJlIGlzIGJlaW5nIGZldGNoZWQgZS5nLiBi ZWNhdXNlIHRoZXJlIGlzIG5vIHVDCj4+ICsgKiBQRU5ESU5HIC0gZmlybXdhcmUgZmV0Y2ggaW5p dGlhdGVkOyBjYWxsYmFjayB3aWxsIGNvbXBsZXRlICd1Y19md19mZXRjaGVkJwo+PiArICogU1VD Q0VTUyAtIHVDIGZpcm13YXJlIGZldGNoZWQgaW50byBhIEdFTSBvYmplY3QgYW5kIHJlYWR5IGZv ciB1c2UKPj4gKyAqIEZBSUwgLSBzb21ldGhpbmcgd2VudCB3cm9uZzsgdUMgZmlybXdhcmUgaXMg bm90IGF2YWlsYWJsZQo+PiArICoKPj4gKyAqIFRoZSBzZWNvbmQgKGxvYWQpIHN0YWdlIGlzIHNp bXBsZXIgYXMgdGhlcmUgaXMgbm8gYXN5bmNocm9ub3VzIGhhbmRvZmY6Cj4+ICsgKiBOT05FIC0g bm8gZmlybXdhcmUgaXMgYmVpbmcgbG9hZGVkIGUuZy4gYmVjYXVzZSB0aGVyZSBpcyBubyB1Qwo+ PiArICogUEVORElORyAtIGZpcm13YXJlIERNQSBsb2FkIGluIHByb2dyZXNzCj4+ICsgKiBTVUND RVNTIC0gdUMgZmlybXdhcmUgbG9hZGVkIGludG8gdUMgbWVtb3J5IGFuZCByZWFkeSBmb3IgdXNl Cj4+ICsgKiBGQUlMIC0gc29tZXRoaW5nIHdlbnQgd3Jvbmc7IHVDIGZpcm13YXJlIGlzIG5vdCBh dmFpbGFibGUKPj4gKyAqLwo+PiArZW51bSBpbnRlbF91Y19md19zdGF0dXMgewo+PiArCUlOVEVM X1VDX0ZJUk1XQVJFX0ZBSUwgPSAtMSwKPj4gKwlJTlRFTF9VQ19GSVJNV0FSRV9OT05FID0gMCwK Pj4gKwlJTlRFTF9VQ19GSVJNV0FSRV9QRU5ESU5HLAo+PiArCUlOVEVMX1VDX0ZJUk1XQVJFX1NV Q0NFU1MKPj4gK307Cj4+ICsKPj4gKy8qCj4+ICsgKiBUaGlzIHN0cnVjdHVyZSBlbmNhcHN1bGF0 ZXMgYWxsIHRoZSBkYXRhIG5lZWRlZCBkdXJpbmcgdGhlIHByb2Nlc3Mgb2YKPj4gKyAqIGZldGNo aW5nLCBjYWNoaW5nLCBhbmQgbG9hZGluZyB0aGUgZmlybXdhcmUgaW1hZ2UgaW50byB0aGUgdUMu Cj4+ICsgKi8KPj4gK3N0cnVjdCBpbnRlbF91Y19mdyB7Cj4+ICsJc3RydWN0IGRybV9kZXZpY2Ug KgkJdWNfZGV2Owo+PiArCWNvbnN0IGNoYXIgKgkJCXVjX25hbWU7Cj4+ICsJY29uc3QgY2hhciAq CQkJdWNfZndfcGF0aDsKPj4gKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKgkJdWNfZndfYmxvYjsK Pj4gKwlzdHJ1Y3QgY29tcGxldGlvbgkJdWNfZndfZmV0Y2hlZDsKPj4gKwlzaXplX3QJCQkJdWNf Zndfc2l6ZTsKPj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqCXVjX2Z3X29iajsKPj4g KwllbnVtIGludGVsX3VjX2Z3X3N0YXR1cwkJdWNfZndfZmV0Y2hfc3RhdHVzOwo+PiArCWVudW0g aW50ZWxfdWNfZndfc3RhdHVzCQl1Y19md19sb2FkX3N0YXR1czsKPj4gK307Cj4+ICsKPj4gK3Zv aWQgaW50ZWxfdWNfZndfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgaW50ZWxf dWNfZncgKnVjX2Z3LAo+PiArCQljb25zdCBjaGFyICp1Y19uYW1lLCBjb25zdCBjaGFyICpmd19w YXRoKTsKPj4gK2ludCBpbnRlbF91Y19md19jaGVjayhzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3 LAo+PiArCQlib29sIGNhbGxiYWNrKHN0cnVjdCBpbnRlbF91Y19mdyAqKSk7Cj4+ICt2b2lkIGlu dGVsX3VjX2Z3X2Zpbmkoc3RydWN0IGludGVsX3VjX2Z3ICp1Y19mdyk7Cj4+ICsKPj4gKyNlbmRp Zgo+PiAtLSAKPj4gMS43LjkuNQo+Pgo+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwo+PiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4+IEludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKPj4gaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK