Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [1/2] usb: misc: xapea00x: add driver for Xaptum ENF Access Card From: Oliver Neukum Message-Id: <1515666469.5798.13.camel@suse.com> Date: Thu, 11 Jan 2018 11:27:49 +0100 To: "David R. Bild" , Greg Kroah-Hartman Cc: linux-usb@vger.kernel.org List-ID: QW0gTWl0dHdvY2gsIGRlbiAxMC4wMS4yMDE4LCAxMDo1OCAtMDYwMCBzY2hyaWViICBEYXZpZCBS LiBCaWxkIDoKPiBUaGlzIGNvbW1pdCBhZGRzIGEgZHJpdmVyIGZvciB0aGUgWGFwdHVtIEVORiBB Y2Nlc3MgQ2FyZCwgYSBUUE0yLjAKPiBoYXJkd2FyZSBtb2R1bGUgZm9yIGF1dGhlbnRpY2F0aW5n IElvVCBkZXZpY2VzIGFuZCBnYXRld2F5cy4KPiAKPiBUaGUgY2FyZCBjb25zaXN0cyBvZiBhIFNQ SSBUUE0gMi4wIGNoaXAgYW5kIGEgVVNCLVNQSSBicmlkZ2UuIFRoaXMKPiBkcml2ZXIgY29uZmln dXJlcyB0aGUgYnJpZGdlLCByZWdpc3RlcnMgdGhlIGJyaWRnZSBhcyBhbiBTUEkKPiBjb250cm9s bGVyLCBhbmQgYWRkcyB0aGUgVFBNIDIuMCBhcyBhbiBTUEkgZGV2aWNlLiAgVGhlIGluLWtlcm5l bCBUUE0KPiAyLjAgZHJpdmVyIGlzIHRoZW4gYXV0b21hdGljYWxseSBsb2FkZWQgdG8gY29uZmln dXJlIHRoZSBUUE0gYW5kCj4gZXhwb3NlIGl0IHRvIHVzZXJzcGFjZS4KPiAKPiBTaWduZWQtb2Zm LWJ5OiBEYXZpZCBSLiBCaWxkIDxkYXZpZC5iaWxkQHhhcHR1bS5jb20+Cj4gLS0tCj4gIE1BSU5U QUlORVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKwo+ICBkcml2ZXJz L3VzYi9taXNjL0tjb25maWcgICAgICAgICAgICAgICAgICAgIHwgICAyICsKPiAgZHJpdmVycy91 c2IvbWlzYy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvdXNi L21pc2MveGFwZWEwMHgvS2NvbmZpZyAgICAgICAgICAgfCAgMTYgKysKPiAgZHJpdmVycy91c2Iv bWlzYy94YXBlYTAweC9NYWtlZmlsZSAgICAgICAgICB8ICAgNyArCj4gIGRyaXZlcnMvdXNiL21p c2MveGFwZWEwMHgveGFwZWEwMHgtYnJpZGdlLmMgfCAzOTkgKysrKysrKysrKysrKysrKysrKysr KysrKysKPiAgZHJpdmVycy91c2IvbWlzYy94YXBlYTAweC94YXBlYTAweC1jb3JlLmMgICB8IDQy OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvdXNiL21pc2MveGFwZWEw MHgveGFwZWEwMHgtc3BpLmMgICAgfCAyMDkgKysrKysrKysrKysrKysKPiAgZHJpdmVycy91c2Iv bWlzYy94YXBlYTAweC94YXBlYTAweC5oICAgICAgICB8ICA3NSArKysrKwo+ICA5IGZpbGVzIGNo YW5nZWQsIDExNDQgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91 c2IvbWlzYy94YXBlYTAweC9LY29uZmlnCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3Vz Yi9taXNjL3hhcGVhMDB4L01ha2VmaWxlCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3Vz Yi9taXNjL3hhcGVhMDB4L3hhcGVhMDB4LWJyaWRnZS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL3VzYi9taXNjL3hhcGVhMDB4L3hhcGVhMDB4LWNvcmUuYwo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy91c2IvbWlzYy94YXBlYTAweC94YXBlYTAweC1zcGkuYwo+ICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy91c2IvbWlzYy94YXBlYTAweC94YXBlYTAweC5oCj4gCj4gZGlm ZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKPiBpbmRleCBhNmU4NmUyMDc2MWUu LjhkMTZmMzRiODYwMyAxMDA2NDQKPiAtLS0gYS9NQUlOVEFJTkVSUwo+ICsrKyBiL01BSU5UQUlO RVJTCj4gQEAgLTE0MzAwLDYgKzE0MzAwLDEyIEBAIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2Vy bmVsLm9yZwo+ICBTOglNYWludGFpbmVkCj4gIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlz X3dsYW4uYwo+ICAKPiArVVNCIFhBUEVBMDBYIERSSVZFUgo+ICtNOglEYXZpZCBSLiBCaWxkIDxk YXZpZC5iaWxkQHhhcHR1bS5jb20+Cj4gK0w6CWxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKPiAr UzoJTWFpbnRhaW5lZAo+ICtGOglkcml2ZXJzL3VzYi9taXNjL3hhcGVhMDB4Lwo+ICsKPiAgVVNC IFhIQ0kgRFJJVkVSCj4gIE06CU1hdGhpYXMgTnltYW4gPG1hdGhpYXMubnltYW5AaW50ZWwuY29t Pgo+ICBMOglsaW51eC11c2JAdmdlci5rZXJuZWwub3JnCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv dXNiL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZwo+IGluZGV4IDY4ZDJm MmNkMTdkZC4uNzQ3ZDdmMDNmYjg0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNiL21pc2MvS2Nv bmZpZwo+ICsrKyBiL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZwo+IEBAIC0yNzUsMyArMjc1LDUg QEAgY29uZmlnIFVTQl9DSEFPU0tFWQo+ICAKPiAgCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBh cyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCj4gIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxl ZCBjaGFvc2tleS4KPiArCj4gK3NvdXJjZSAiZHJpdmVycy91c2IvbWlzYy94YXBlYTAweC9LY29u ZmlnIgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlIGIvZHJpdmVycy91 c2IvbWlzYy9NYWtlZmlsZQo+IGluZGV4IDEwOWY1NGY1YjlhYS4uZjM1ODM1MDE1NDdjIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL3VzYi9t aXNjL01ha2VmaWxlCj4gQEAgLTMwLDQgKzMwLDUgQEAgb2JqLSQoQ09ORklHX1VTQl9IU0lDX1VT QjQ2MDQpCQkrPSB1c2I0NjA0Lm8KPiAgb2JqLSQoQ09ORklHX1VTQl9DSEFPU0tFWSkJCSs9IGNo YW9za2V5Lm8KPiAgCj4gIG9iai0kKENPTkZJR19VU0JfU0lTVVNCVkdBKQkJKz0gc2lzdXNidmdh Lwo+ICtvYmotJChDT05GSUdfVVNCX1hBUEVBMDBYKQkJKz0geGFwZWEwMHgvCj4gIG9iai0kKENP TkZJR19VU0JfTElOS19MQVlFUl9URVNUKQkrPSBsdnN0ZXN0Lm8KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy91c2IvbWlzYy94YXBlYTAweC9LY29uZmlnIGIvZHJpdmVycy91c2IvbWlzYy94YXBlYTAw eC9LY29uZmlnCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjI3 ZTg3YmMxYjRiMgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3VzYi9taXNjL3hhcGVh MDB4L0tjb25maWcKPiBAQCAtMCwwICsxLDE2IEBACj4gK2NvbmZpZyAgVVNCX1hBUEVBMDBYCj4g KyAgICAgICAgdHJpc3RhdGUgIlhhcHR1bSBFTkYgQWNjZXNzIGNhcmQgc3VwcG9ydCAoWEFQLUVB LTAweCkiCj4gKyAgICAgICAgZGVwZW5kcyBvbiBVU0JfU1VQUE9SVAo+ICsgICAgICAgIHNlbGVj dCBTUEkKPiArICAgICAgICBzZWxlY3QgVENHX1RQTQo+ICsgICAgICAgIHNlbGVjdCBUQ0dfVElT X1NQSQo+ICsgICAgICAgIC0tLWhlbHAtLS0KPiArICAgICAgICAgIFNheSBZIGhlcmUgaWYgeW91 IHdhbnQgdG8gc3VwcG9ydCB0aGUgWGFwdHVtIEVORiBBY2Nlc3MKPiArICAgICAgICAgIG1vZHVs ZXMgKFhBUC1FQS0wMHgpIGluIHRoZSBVU0Igb3IgTWluaSBQQ0ktZSBmb3JtCj4gKyAgICAgICAg ICBmYWN0b3JzLiBUaGUgWEFQLUVBLTAweCBtb2R1bGUgZXhwb3NlcyBhIFRQTSAyLjAgYXMKPiAr ICAgICAgICAgIC9kZXYvdHBtWCB0byB1c2UgZm9yIGF1dGhlbnRpY2F0aW5nIHdpdGggdGhlIFhh cHR1bSBFTkYuCj4gKwo+ICsgICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1v ZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlCj4gKyAgICAgICAgICBtb2R1bGUgd2lsbCBiZSBjYWxs ZWQgeGFwZWEwMHguCj4gKwo+ICsgICAgICAgICAgSWYgdW5zdXJlLCBzYXkgTS4KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy91c2IvbWlzYy94YXBlYTAweC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL21p c2MveGFwZWEwMHgvTWFrZWZpbGUKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAwMC4uYzRiY2Q3NTI0YzMxCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvdXNi L21pc2MveGFwZWEwMHgvTWFrZWZpbGUKPiBAQCAtMCwwICsxLDcgQEAKPiArIyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsjCj4gKyMgTWFrZWZpbGUgZm9yIHRoZSB4YXBlYTAw eCBkcml2ZXIuCj4gKyMKPiArb2JqLSQoQ09ORklHX1VTQl9YQVBFQTAwWCkgKz0geGFwZWEwMHgu bwo+ICsKPiAreGFwZWEwMHgteSArPSB4YXBlYTAweC1jb3JlLm8geGFwZWEwMHgtYnJpZGdlLm8K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy94YXBlYTAweC94YXBlYTAweC1icmlkZ2Uu YyBiL2RyaXZlcnMvdXNiL21pc2MveGFwZWEwMHgveGFwZWEwMHgtYnJpZGdlLmMKPiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uM2VmYTY5N2YyMTZhCj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvdXNiL21pc2MveGFwZWEwMHgveGFwZWEwMHgtYnJpZGdl LmMKPiBAQCAtMCwwICsxLDM5OSBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCsKPiArLyoKPiArICogIERyaXZlciBmb3IgdGhlIFhBUC1FQS0wMHggc2VyaWVzIG9mIHRo ZSBYYXB0dW0gRWRnZSBBY2Nlc3MgQ2FyZCwgYQo+ICsgKiAgVFBNIDIuMC1iYXNlZCBoYXJkd2Fy ZSBtb2R1bGUgZm9yIGF1dGhlbnRpY2F0aW5nIElvVCBkZXZpY2VzIGFuZAo+ICsgKiAgZ2F0ZXdh eXMuCj4gKyAqCj4gKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcgWGFwdHVtLCBJbmMuCj4gKyAqLwo+ ICsKPiArI2luY2x1ZGUgInhhcGVhMDB4LmgiCj4gKwo+ICsjZGVmaW5lIFhBUEVBMDBYX0JSX0NN RF9SRUFECQkgIDB4MDAKPiArI2RlZmluZSBYQVBFQTAwWF9CUl9DTURfV1JJVEUJCSAgMHgwMQo+ ICsjZGVmaW5lIFhBUEVBMDBYX0JSX0NNRF9XUklURVJFQUQJICAweDAyCj4gKwo+ICsjZGVmaW5l IFhBUEVBMDBYX0JSX0JSRVFUWVBfU0VUCQkgIDB4NDAKPiArCj4gKyNkZWZpbmUgWEFQRUEwMFhf QlJfQlJFUV9TRVRfR1BJT19WQUxVRVMgIDB4MjEKPiArI2RlZmluZSBYQVBFQTAwWF9CUl9CUkVR X1NFVF9HUElPX0NTCSAgMHgyNQo+ICsjZGVmaW5lIFhBUEVBMDBYX0JSX0JSRVFfU0VUX1NQSV9X T1JECSAgMHgzMQo+ICsKPiArI2RlZmluZSBYQVBFQTAwWF9CUl9VU0JfVElNRU9VVAkJICAxMDAw IC8vIG1zZWNzCj4gKwo+ICsjZGVmaW5lIFhBUEVBMDBYX0JSX0NTX0RJU0FCTEVECQkgIDB4MDAK PiArCj4gKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4gKyAqIEJyaWRnZSBVU0IgdHJhbnNmZXJz Cj4gKyAqLwo+ICsKPiArc3RydWN0IHhhcGVhMDB4X2JyX2J1bGtfY29tbWFuZCB7Cj4gKwlfX2Jl MTYgcmVzZXJ2ZWQxOwoKSGVyZSBCRSAuLi4KCj4gKwlfX3U4ICAgY29tbWFuZDsKPiArCV9fdTgg ICByZXNlcnZlZDI7Cj4gKwlfX2xlMzIgbGVuZ3RoOwoKLi4uIHRoZXJlIExFPwoKPiArfSBfX2F0 dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Cj4gKwo+ICsvKioKPiArICogeGFwZWEwMHhfYnJfcHJl cF9idWxrX2NvbW1hbmQgLSBQcmVwYXJlcyB0aGUgYnVsayBjb21tYW5kIGhlYWRlciB3aXRoCj4g KyAqIHRoZSBzdXBwbGllZCB2YWx1ZXMuCj4gKyAqIEBoZHI6IHBvaW50ZXIgdG8gaGVhZGVyIHRv IHByZXBhcmUKPiArICogQGNvbW1hbmQ6IHRoZSBjb21tYW5kIGlkIGZvciB0aGUgY29tbWFuZAo+ ICsgKiBAbGVuZ3RoOiBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGNvbW1hbmQgZGF0YQo+ICsgKgo+ ICsgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKPiArICoKPiArICogUmV0dXJuOiBJZiBzdWNj ZXNzZnVsLCAwLiBPdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCj4gKyAqLwo+ICtz dGF0aWMgdm9pZCB4YXBlYTAweF9icl9wcmVwX2J1bGtfY29tbWFuZChzdHJ1Y3QgeGFwZWEwMHhf YnJfYnVsa19jb21tYW5kICpoZHIsCj4gKwkJCQkJICB1OCBjb21tYW5kLCBpbnQgbGVuZ3RoKQo+ ICt7Cj4gKwloZHItPnJlc2VydmVkMSA9IDA7Cj4gKwloZHItPmNvbW1hbmQgICA9IGNvbW1hbmQ7 Cj4gKwloZHItPnJlc2VydmVkMiA9IDA7Cj4gKwloZHItPmxlbmd0aCAgICA9IF9fY3B1X3RvX2xl MzIobGVuZ3RoKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIHhhcGVhMDB4X2JyX2J1bGtfd3JpdGUg LSBJc3N1ZXMgYSBidWlsayB3cml0ZSB0byB0aGUgYnJpZGdlIGNoaXAuCgp0eXBvCgo+ICsgKiBA ZGV2OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdG8gd3JpdGUgdG8KPiArICogQGNvbW1hbmQ6IHRo ZSBjb21tYW5kIHN0YXJ0ZWQgYnkgdGhpcyB3cml0ZSAoV1JJVEUsIFJFQUQsIFdSSVRFX1JFQUQp Cj4gKyAqIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIHdyaXRlLiBNdXN0IGJlIERNQSBj YXBhYmxlIChlLmcuLAo+ICsgKgkgIGttYWxsb2MtZWQsIG5vdCBzdGFjaykuCj4gKyAqIEBsZW46 IGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZGF0YSB0byB3cml0ZQo+ICsgKgo+ICsgKiBDb250ZXh0 OiAhaW5faW50ZXJydXB0KCkKPiArICoKPiArICogUmV0dXJuOiBJZiBzdWNjZXNzZnVsLCAwLiBP dGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCj4gKyAqLwo+ICtzdGF0aWMgaW50IHhh cGVhMDB4X2JyX2J1bGtfd3JpdGUoc3RydWN0IHhhcGVhMDB4X2RldmljZSAqZGV2LAo+ICsJCQkJ ICBzdHJ1Y3QgeGFwZWEwMHhfYnJfYnVsa19jb21tYW5kICpoZWFkZXIsCj4gKwkJCQkgIGNvbnN0 IHZvaWQgKmRhdGEsIGludCBsZW4pCj4gK3sKPiArCXU4ICpidWY7Cj4gKwl1bnNpZ25lZCBpbnQg cGlwZTsKPiArCWludCBidWZfbGVuLCBhY3R1YWxfbGVuLCByZXR2YWw7Cj4gKwo+ICsJYnVmX2xl biA9IHNpemVvZihzdHJ1Y3QgeGFwZWEwMHhfYnJfYnVsa19jb21tYW5kKSArIGxlbjsKPiArCWJ1 ZiA9IGt6YWxsb2MoYnVmX2xlbiwgR0ZQX0tFUk5FTCk7CgpXaHkgemVyb2VkPyBZb3UgY29weSBh bGwgb3ZlciBpdC4KCj4gKwlpZiAoIWJ1Zikgewo+ICsJCXJldHZhbCA9IC1FTk9NRU07Cj4gKwkJ Z290byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJbWVtY3B5KGJ1ZiwgaGVhZGVyLCBzaXplb2Yoc3RydWN0 IHhhcGVhMDB4X2JyX2J1bGtfY29tbWFuZCkpOwo+ICsJbWVtY3B5KGJ1ZiArIHNpemVvZihzdHJ1 Y3QgeGFwZWEwMHhfYnJfYnVsa19jb21tYW5kKSwgZGF0YSwgbGVuKTsKPiArCj4gKwlwaXBlID0g dXNiX3NuZGJ1bGtwaXBlKGRldi0+dWRldiwgZGV2LT5idWxrX291dC0+YkVuZHBvaW50QWRkcmVz cyk7Cj4gKwlyZXR2YWwgPSB1c2JfYnVsa19tc2coZGV2LT51ZGV2LCBwaXBlLCBidWYsIGJ1Zl9s ZW4sICZhY3R1YWxfbGVuLAo+ICsJCQkgICAgICBYQVBFQTAwWF9CUl9VU0JfVElNRU9VVCk7Cj4g KwlpZiAocmV0dmFsKSB7Cj4gKwkJZGV2X3dhcm4oJmRldi0+aW50ZXJmYWNlLT5kZXYsCj4gKwkJ CSAiJXM6IHVzYl9idWxrX21zZygpIGZhaWxlZCB3aXRoICVkXG4iLAo+ICsJCQkgX19mdW5jX18s IHJldHZhbCk7Cj4gKwkJZ290byBmcmVlX2J1ZjsKCkRvZXMgdGhpcyBtYWtlIGFueSBzZW5zZT8K Cj4gKwl9Cj4gKwo+ICsJcmV0dmFsID0gMDsKPiArCj4gK2ZyZWVfYnVmOgo+ICsJa3pmcmVlKGJ1 Zik7Cj4gKwo+ICtvdXQ6Cj4gKwlyZXR1cm4gcmV0dmFsOwo+ICt9Cj4gKwo+ICsvKioKPiArICog eGFwZWEwMHhfYnJfYnVsa19yZWFkIC0gSXNzdWVzIGEgYnVsayByZWFkIHRvIHRoZSBicmlkZ2Ug Y2hpcC4KPiArICogQGRldjogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRvIHJlYWQgZnJvbQo+ICsg KiBAZGF0YTogcG9pbnRlciB0byB0aGUgZGF0YSByZWFkLiBNdXN0IGJlIERNQSBjYXBhYmxlIChl LmcuLAo+ICsgKgkgIGttYWxsb2MtZWQsIG5vdCBzdGFjaykuCj4gKyAqIEBsZW46IGxlbmd0aCBp biBieXRlcyBvZiB0aGUgZGF0YSB0byByZWFkCj4gKyAqCj4gKyAqIFJldHVybjogSWYgc3VjY2Vz c2Z1bCwgMC4gT3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KPiArICovCj4gK3N0YXRp YyBpbnQgeGFwZWEwMHhfYnJfYnVsa19yZWFkKHN0cnVjdCB4YXBlYTAweF9kZXZpY2UgKmRldiwg dm9pZCAqZGF0YSwKPiArCQkJCSBpbnQgbGVuKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgcGlwZTsK PiArCXZvaWQgKmJ1ZjsKPiArCWludCBhY3R1YWxfbGVuLCByZXR2YWw7Cj4gKwo+ICsJYnVmID0g a3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFidWYpIHsKPiArCQlyZXR2YWwgPSAt RU5PTUVNOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCXBpcGUgPSB1c2JfcmN2YnVsa3Bp cGUoZGV2LT51ZGV2LCBkZXYtPmJ1bGtfaW4tPmJFbmRwb2ludEFkZHJlc3MpOwo+ICsJcmV0dmFs ID0gdXNiX2J1bGtfbXNnKGRldi0+dWRldiwgcGlwZSwgYnVmLCBsZW4sICZhY3R1YWxfbGVuLAo+ ICsJCQkgICAgICBYQVBFQTAwWF9CUl9VU0JfVElNRU9VVCk7Cj4gKwo+ICsJaWYgKHJldHZhbCkg ewo+ICsJCWRldl93YXJuKCZkZXYtPmludGVyZmFjZS0+ZGV2LAo+ICsJCQkgIiVzOiB1c2JfYnVs a19tc2coKSBmYWlsZWQgd2l0aCAlZFxuIiwKPiArCQkJIF9fZnVuY19fLCByZXR2YWwpOwo+ICsJ CWdvdG8gZnJlZV9idWY7Cj4gKwl9Cj4gKwo+ICsJbWVtY3B5KGRhdGEsIGJ1ZiwgYWN0dWFsX2xl bik7Cj4gKwlyZXR2YWwgPSAwOwo+ICsKPiArZnJlZV9idWY6Cj4gKwlremZyZWUoYnVmKTsKPiAr Cj4gK291dDoKPiArCXJldHVybiByZXR2YWw7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiB4YXBlYTAw eF9icl9jdHJsX3dyaXRlIC0gSXNzdWVzIGEgc2VuZCBjb250cm9sIHRyYW5zZmVyIHRvIHRoZSBi cmlkZ2UKPiArICogY2hpcC4KPiArICogQGRldjogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRvIHdy aXRlIHRvCj4gKyAqIEBiUmVxdWVzdDogdGhlIGNvbW1hbmQKPiArICogQHdWYWx1ZTogdGhlIGNv bW1hbmQgdmFsdWUKPiArICogQHdJbmRleDogdGhlIGNvbW1hbmQgaW5kZXgKPiArICogQGRhdGE6 IHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGF0YQo+ICsgKiBAbGVuOiBsZW5ndGggaW4gYnl0ZXMg b2YgdGhlIGNvbW1hbmQgZGF0YQo+ICsgKgo+ICsgKiBUaGUgcG9zc2libGUgYlJlcXVlc3QsIHdW YWx1ZSwgYW5kIHdJbmRleCB2YWx1ZXMgYW5kIGRhdGEgZm9ybWF0Cj4gKyAqIGFyZSBzcGVjaWZp ZWQgaW4gdGhlIGhhcmR3YXJlIGRhdGFzaGVldC4KPiArICoKPiArICogQ29udGV4dDogIWluX2lu dGVycnVwdCgpCj4gKyAqCj4gKyAqIFJldHVybjogSWYgc3VjY2Vzc2Z1bCwgMC4gT3RoZXJ3aXNl IGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KPiArICovCj4gK3N0YXRpYyBpbnQgeGFwZWEwMHhfYnJf Y3RybF93cml0ZShzdHJ1Y3QgeGFwZWEwMHhfZGV2aWNlICpkZXYsIHU4IGJSZXF1ZXN0LAo+ICsJ CQkJICB1MTYgd1ZhbHVlLCB1MTYgd0luZGV4LCB1OCAqZGF0YSwgdTE2IGxlbikKCkNvbWJpbmUg d2l0aMKgeGFwZWEwMHhfYnJfYnVsa193cml0ZSgpPwo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgcGlw ZTsKPiArCXZvaWQgKmJ1ZjsKPiArCWludCByZXR2YWw7Cj4gKwo+ICsJLyogY29udHJvbF9tc2cg YnVmZmVyIG11c3QgYmUgZG1hLWNhcGFibGUgKGUuZy5rIGttYWxsb2MtZWQsCj4gKwkgKiBub3Qg c3RhY2spLglDb3B5IGRhdGEgaW50byBzdWNoIGJ1ZmZlciBoZXJlLCBzbyB3ZSBjYW4gdXNlCj4g KwkgKiBzaW1wbGVyIHN0YWNrIGFsbG9jYXRpb24gaW4gdGhlIGNhbGxlcnMgLSB3ZSBoYXZlIG5v Cj4gKwkgKiBwZXJmb3JtYW5jZSBjb25jZXJucyBnaXZlbiB0aGUgc21hbGwgYnVmZmVycyBhbmQg bG93Cj4gKwkgKiB0aHJvdWdocHV0cyBvZiB0aGlzIGRldmljZS4KPiArCSAqLwo+ICsJYnVmID0g a3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwoKV2h5IGt6YWxsb2Mgc29tZXRoaW5nIHlvdSBjb3B5 IG92ZXIgYXMgdGhlIHZlcnkgbmV4dCB0aGluZz8KCj4gKwlpZiAoIWJ1Zikgewo+ICsJCXJldHZh bCA9IC1FTk9NRU07Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwltZW1jcHkoYnVmLCBkYXRhLCBs ZW4pOwo+ICsKPiArCXBpcGUgPSB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKTsKPiArCXJl dHZhbCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsIHBpcGUsIGJSZXF1ZXN0LAo+ICsJCQkJ IFhBUEVBMDBYX0JSX0JSRVFUWVBfU0VULCB3VmFsdWUsIHdJbmRleCwKPiArCQkJCSBidWYsIGxl biwgWEFQRUEwMFhfQlJfVVNCX1RJTUVPVVQpOwo+ICsJaWYgKHJldHZhbCA8IDApIHsKPiArCQlk ZXZfd2FybigmZGV2LT5pbnRlcmZhY2UtPmRldiwKPiArCQkJICJ1c2JfY29udHJvbF9tc2coKSBm YWlsZWQgd2l0aCAlZFxuIiwgcmV0dmFsKTsKPiArCQlnb3RvIGZyZWVfYnVmOwo+ICsJfQo+ICsK PiArCXJldHZhbCA9IDA7Cj4gKwo+ICtmcmVlX2J1ZjoKPiArCWt6ZnJlZShidWYpOwo+ICsKPiAr b3V0Ogo+ICsJcmV0dXJuIHJldHZhbDsKPiArfQo+ICsKPiArLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKPiArICogQnJpZGdlIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMKPiArICovCj4gKwo+ICsvKioK PiArICogeGFwZWEwMHhfYnJfc2V0X2dwaW9fdmFsdWUgLSBTZXRzIHRoZSB2YWx1ZSBvbiB0aGUg c3BlY2lmaWVkIHBpbiBvZgo+ICsgKiB0aGUgYnJpZGdlIGNoaXAuCj4gKyAqIEBkZXY6IHBvaW50 ZXIgdG8gdGhlIGRldmljZSBjb250YWluaW5nIHRoZSBicmlkZ2Ugd2hvc2UgcGluIHRvIHNldAo+ ICsgKiBAcGluOiB0aGUgbnVtYmVyIG9mIHRoZSBwaW4gdG8gc2V0Cj4gKyAqIEB2YWx1ZTogdGhl IHZhbHVlIHRvIHNldCB0aGUgcGluIHRvLCAwIG9yIDEKPiArICoKPiArICogQ29udGV4dDogIWlu X2ludGVycnVwdCgpCj4gKyAqCj4gKyAqIFJldHVybjogSWYgc3VjY2Vzc2Z1bCwgMC4gT3RoZXJ3 aXNlIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgo+ICsgKi8KPiArc3RhdGljIGludCB4YXBlYTAw eF9icl9zZXRfZ3Bpb192YWx1ZShzdHJ1Y3QgeGFwZWEwMHhfZGV2aWNlICpkZXYsIHU4IHBpbiwK PiArCQkJCSAgICAgIHU4IHZhbHVlKQo+ICt7Cj4gKwl1OCBkYXRhWzRdID0geyAwLCAwLCAwLCAw IH07Cj4gKwo+ICsJc3dpdGNoIChwaW4pIHsKPiArCWNhc2UgMTA6Cj4gKwljYXNlICA5Ogo+ICsJ Y2FzZSAgODoKPiArCWNhc2UgIDc6Cj4gKwljYXNlICA2Ogo+ICsJCWRhdGFbMF0gPSB2YWx1ZSA8 PCAocGluIC0gNCk7Cj4gKwkJZGF0YVsyXSA9IDEgPDwgKHBpbiAtIDQpOwo+ICsJCWJyZWFrOwo+ ICsJY2FzZSAgNToKPiArCQlkYXRhWzBdID0gdmFsdWU7Cj4gKwkJZGF0YVsyXSA9IDE7Cj4gKwkJ YnJlYWs7Cj4gKwljYXNlICA0Ogo+ICsJY2FzZSAgMzoKPiArCWNhc2UgIDI6Cj4gKwljYXNlICAx Ogo+ICsJY2FzZSAgMDoKPiArCQlkYXRhWzFdID0gdmFsdWUgPDwgKHBpbiArIDMpOwo+ICsJCWRh dGFbM10gPSAxIDw8IChwaW4gKyAzKTsKCkFkZCBhIGJyZWFrIHBsZWFzZQoKPiArCX0KPiArCXJl dHVybiB4YXBlYTAweF9icl9jdHJsX3dyaXRlKGRldiwgWEFQRUEwMFhfQlJfQlJFUV9TRVRfR1BJ T19WQUxVRVMsCj4gKwkJCQkgICAgICAwLCAwLCBkYXRhLCA0KTsKPiArfQo+ICsKPiArLyoqCj4g KyAqIHhhcGVhMDB4X2JyX3NldF9ncGlvX2NzIC0gU2V0cyB0aGUgY2hpcCBzZWxlY3QgY29udHJv bCBvbiB0aGUgc3BlY2lmaWVkCj4gKyAqIHBpbiBvZiB0aGUgYnJpZGdlIGNoaXAuCj4gKyAqIEBk ZXY6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBjb250YWluaW5nIHRoZSBicmlkZ2Ugd2hvc2UgY3Mg dG8gc2V0Cj4gKyAqIEBwaW46IHRoZSBudW1iZXIgb2YgdGhlIHBpbiB0byBzZXQKPiArICogQGNv bnRyb2w6IHRoZSBjaGlwIHNlbGVjdCBjb250cm9sIHZhbHVlIGZvciB0aGUgcGluLCAwLCAxLCBv ciAyCj4gKyAqCj4gKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQo+ICsgKgo+ICsgKiBSZXR1 cm46IElmIHN1Y2Nlc3NmdWwsIDAuIE90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4K PiArICovCj4gK3N0YXRpYyBpbnQgeGFwZWEwMHhfYnJfc2V0X2dwaW9fY3Moc3RydWN0IHhhcGVh MDB4X2RldmljZSAqZGV2LCB1OCBwaW4sCj4gKwkJCQkgICB1OCBjb250cm9sKQo+ICt7Cj4gKwl1 OCBkYXRhWzJdID0geyBwaW4sIGNvbnRyb2wgfTsKPiArCj4gKwlyZXR1cm4geGFwZWEwMHhfYnJf Y3RybF93cml0ZShkZXYsIFhBUEVBMDBYX0JSX0JSRVFfU0VUX0dQSU9fQ1MsCj4gKwkJCQkgICAg ICAwLCAwLCBkYXRhLCAyKTsKPiArfQo+ICsKPiArLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKPiAr ICogQnJpZGdlIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMKPiArICovCj4gKy8qKgo+ICsgKiB4YXBl YTAweF9icl9kaXNhYmxlX2NzIC0gZGlzYWJsZSB0aGUgYnVpbHQtaW4gY2hpcCBzZWxlY3QKPiAr ICogY2FwYWJpbGl0eSBvZiB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuCSBJdCBkb2VzIG5vdCBzdXBw b3J0IGhvbGRpbmcKPiArICogdGhlIENTIGFjdGl2ZSBiZXR3ZWVuIFNQSSB0cmFuc2ZlcnMsIGEg ZmVhdHVyZSByZXF1aXJlZCBmb3IgdGhlCj4gKyAqIFRQTS4JIEluc3RlYWQsIHdlIG1hbnVhbGx5 IGNvbnRyb2wgdGhlIENTIHBpbiBhcyBhIEdQSU8uCj4gKyAqIEBkZXY6IHBvaW50ZXIgdG8gdGhl IGRldmljZSBjb250YWluaW5nIHRoZSBicmlkZ2Ugd2hvc2UgY3MgdG8gZGlzYWJsZQo+ICsgKiBA Y2hhbm5lbDogdGhlIFNQSSBjaGFubmVsIHdob3NlIGNzIHRvIGRpc2FibGUKPiArICoKPiArICog Q29udGV4dDogIWluX2ludGVycnVwdCgpCj4gKyAqCj4gKyAqIFJldHVybjogSWYgc3VjY2Vzc2Z1 bCAwLiBPdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCj4gKyAqLwo+ICtpbnQgeGFw ZWEwMHhfYnJfZGlzYWJsZV9jcyhzdHJ1Y3QgeGFwZWEwMHhfZGV2aWNlICpkZXYsIHU4IGNoYW5u ZWwpCj4gK3sKPiArCXJldHVybiB4YXBlYTAweF9icl9zZXRfZ3Bpb19jcyhkZXYsIGNoYW5uZWws Cj4gKwkJCQkgICAgICAgWEFQRUEwMFhfQlJfQ1NfRElTQUJMRUQpOwo+ICt9Cj4gKwo+ICsvKioK PiArICogeGFwZWEwMHhfYnJfYXNzZXJ0X2NzIC0gYXNzZXJ0IHRoZSBjaGlwIHNlbGVjdCBwaW4g Zm9yIHRoZQo+ICsgKiBzcGVjaWZpZWQgY2hhbm5lbC4KPiArICogQGRldjogcG9pbnRlciB0byB0 aGUgZGV2aWNlIGNvbnRhaW5pbmcgdGhlIGJyaWRnZSB3aG8gY3MgdG8gYXNzZXJ0Cj4gKyAqIEBj aGFubmVsOiB0aGUgU1BJIGNoYW5uZWwgd2hvc2UgY3MgdG8gYXNzZXJ0Cj4gKyAqCj4gKyAqIENv bnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQo+ICsgKgo+ICsgKiBSZXR1cm46IElmIHN1Y2Nlc3NmdWwg MC4gT3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgo+ICsgKi8KPiAraW50IHhhcGVh MDB4X2JyX2Fzc2VydF9jcyhzdHJ1Y3QgeGFwZWEwMHhfZGV2aWNlICpkZXYsIHU4IGNoYW5uZWwp Cj4gK3sKPiArCXJldHVybiB4YXBlYTAweF9icl9zZXRfZ3Bpb192YWx1ZShkZXYsIGNoYW5uZWws IDApOwo+ICt9Cj4gKwo+ICsvKioKPiArICogeGFwZWEwMHhfYnJfZGVhc3NlcnRfY3MgLSBkZWFz c2VydCB0aGUgY2hpcCBzZWxlY3QgcGluIGZvciB0aGUKPiArICogc3BlY2lmaWVkIGNoYW5uZWwu Cj4gKyAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBjb250YWluaW5nIHRoZSBicmlkZ2Ug d2hvIGNzIHRvIGRlYXNzZXJ0Cj4gKyAqIEBjaGFubmVsOiB0aGUgU1BJIGNoYW5uZWwgd2hvc2Ug Y3MgdG8gZGVhc3NlcnQKPiArICoKPiArICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCj4gKyAq Cj4gKyAqIFJldHVybjogSWYgc3VjY2Vzc2Z1bCAwLiBPdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJv ciBudW1iZXIuCj4gKyAqLwo+ICtpbnQgeGFwZWEwMHhfYnJfZGVhc3NlcnRfY3Moc3RydWN0IHhh cGVhMDB4X2RldmljZSAqZGV2LCB1OCBjaGFubmVsKQo+ICt7Cj4gKwlyZXR1cm4geGFwZWEwMHhf YnJfc2V0X2dwaW9fdmFsdWUoZGV2LCBjaGFubmVsLCAxKTsKPiArfQo+ICsKPiArLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKPiArICogQnJpZGdlIFNQSSByZWFkcyBhbmQgd3JpdGVzCj4gKyAqLwo+ ICsvKioKPiArICogeGVhcGVhMDB4X3NwaV9yZWFkIC0gUGVyZm9ybXMgYSByZWFkIGZyb20gdGhl IGFjdGl2ZSBjaGFubmVsCj4gKyAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIGRldmljZSB0byBwZXJm b3JtIHRoZSByZWFkCj4gKyAqIEByeF9idWY6IHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byByZWFk IHRoZSBkYXRhIGludG8uICBNdXN0IGJlCj4gKyAqCSAgICBETUEtY2FwYWJsZSAoZS5nLiwga21h bGxvYy1lZCwgbm90IHN0YWNrKS4KPiArICogQGxlbjogbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBk YXRhIHRvIHJlYWQKPiArICoKPiArICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCj4gKyAqCj4g KyAqIFJldHVybjogSWYgc3VjY2Vzc2Z1bCwgMC4gT3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3Ig bnVtYmVyLgo+ICsgKi8KPiAraW50IHhhcGVhMDB4X2JyX3NwaV9yZWFkKHN0cnVjdCB4YXBlYTAw eF9kZXZpY2UgKmRldiwgdm9pZCAqcnhfYnVmLCBpbnQgbGVuKQo+ICt7Cj4gKwlzdHJ1Y3QgeGFw ZWEwMHhfYnJfYnVsa19jb21tYW5kIGhlYWRlcjsKPiArCWludCByZXR2YWw7Cj4gKwo+ICsJeGFw ZWEwMHhfYnJfcHJlcF9idWxrX2NvbW1hbmQoJmhlYWRlciwgWEFQRUEwMFhfQlJfQ01EX1JFQUQs IGxlbik7Cj4gKwlyZXR2YWwgPSB4YXBlYTAweF9icl9idWxrX3dyaXRlKGRldiwgJmhlYWRlciwg TlVMTCwgMCk7Cj4gKwlpZiAocmV0dmFsKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCXJldHZhbCA9 IHhhcGVhMDB4X2JyX2J1bGtfcmVhZChkZXYsIHJ4X2J1ZiwgbGVuKTsKPiArCj4gK291dDoKPiAr CXJldHVybiByZXR2YWw7Cj4gK30KPiArCj4gKy8qKgo+ICsgKnhhcGVhMDB4X2JyX3NwaV93cml0 ZSAtIFBlcmZvcm1zIGEgd3JpdGUgdG8gdGhlIGFjdGl2ZSBjaGFubmVsCj4gKyAqIEBkZXY6IHBv aW50ZXIgdG8gdGhlIGRldmljZSB0byBwZXJmb3JtIHRoZSB3cml0ZQo+ICsgKiBAdHhfYnVmOiBw b2ludGVyIHRvIHRoZSBkYXRhIHRvIHdyaXRlLiBNdXN0IGJlIERNQS1jYXBhYmxlIChlLmcuLAo+ ICsgKgkgICAga21hbGxvYy1lZCwgbm90IHN0YWNrKS4KPiArICogQGxlbjogbGVuZ3RoIGluIGJ5 dGVzIG9mIHRoZSBkYXRhIHRvIHdyaXRlCj4gKyAqLwo+ICtpbnQgeGFwZWEwMHhfYnJfc3BpX3dy aXRlKHN0cnVjdCB4YXBlYTAweF9kZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqdHhfYnVmLAo+ICsJ CQkgIGludCBsZW4pCj4gK3sKPiArCXN0cnVjdCB4YXBlYTAweF9icl9idWxrX2NvbW1hbmQgaGVh ZGVyOwo+ICsJaW50IHJldHZhbDsKPiArCj4gKwl4YXBlYTAweF9icl9wcmVwX2J1bGtfY29tbWFu ZCgmaGVhZGVyLCBYQVBFQTAwWF9CUl9DTURfV1JJVEUsIGxlbik7Cj4gKwlyZXR2YWwgPSB4YXBl YTAweF9icl9idWxrX3dyaXRlKGRldiwgJmhlYWRlciwgdHhfYnVmLCBsZW4pOwo+ICsKPiArCXJl dHVybiByZXR2YWw7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiB4YXBlYTAweF9icl9zcGlfd3JpdGVf cmVhZCAtIFBlcmZvcm1zIGEgc2ltdWx0YW5lb3VzIHdyaXRlIGFuZCByZWFkIG9uCj4gKyAqIHRo ZSBhY3RpdmUgY2hhbm5lbAo+ICsgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdG8gcGVy Zm9ybSB0aGUgd3JpdGUvcmVhZAo+ICsgKiBAdHhfYnVmOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRv IHdyaXRlLiBNdXN0IGJlIERNQS1jYXBhYmxlIChlLmcuLAo+ICsgKgkgICAga21hbGxvYy1lZCwg bm90IHN0YWNrKS4KPiArICogQHJ4X2J1ZjogcG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHJlYWQg dGhlIGRhdGEgaW50by4gTXVzdCBiZQo+ICsgKgkgICAgRE1BLWNhcGFibGUgKGUuZy4sIGttYWxs b2MtZWQsIG5vdCBzdGFjaykuCj4gKyAqIEBsZW46IGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZGF0 YSB0byB3cml0ZS9yZWFkCj4gKyAqCj4gKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQo+ICsg Kgo+ICsgKiBSZXR1cm46IElmIHN1Y2Nlc3NmdWwsIDAuIE90aGVyd2lzZSBhIG5lZ2F0aXZlIGVy cm9yIG51bWJlci4KPiArICovCj4gK2ludCB4YXBlYTAweF9icl9zcGlfd3JpdGVfcmVhZChzdHJ1 Y3QgeGFwZWEwMHhfZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKnR4X2J1ZiwKPiArCQkJICAgICAg IHZvaWQgKnJ4X2J1ZiwgaW50IGxlbikKPiArewo+ICsJc3RydWN0IHhhcGVhMDB4X2JyX2J1bGtf Y29tbWFuZCBoZWFkZXI7Cj4gKwlpbnQgcmV0dmFsOwo+ICsKPiArCXhhcGVhMDB4X2JyX3ByZXBf YnVsa19jb21tYW5kKCZoZWFkZXIsIFhBUEVBMDBYX0JSX0NNRF9XUklURVJFQUQsIGxlbik7Cj4g KwlyZXR2YWwgPSB4YXBlYTAweF9icl9idWxrX3dyaXRlKGRldiwgJmhlYWRlciwgdHhfYnVmLCBs ZW4pOwo+ICsJaWYgKHJldHZhbCkKPiArCQlnb3RvIG91dDsKPiArCj4gKwlyZXR2YWwgPSB4YXBl YTAweF9icl9idWxrX3JlYWQoZGV2LCByeF9idWYsIGxlbik7Cj4gKwo+ICtvdXQ6Cj4gKwlyZXR1 cm4gcmV0dmFsOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MveGFwZWEwMHgv eGFwZWEwMHgtY29yZS5jIGIvZHJpdmVycy91c2IvbWlzYy94YXBlYTAweC94YXBlYTAweC1jb3Jl LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYWQ2MmM0MGQ3 MjRiCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvdXNiL21pc2MveGFwZWEwMHgveGFw ZWEwMHgtY29yZS5jCj4gQEAgLTAsMCArMSw0MjkgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjArCj4gKy8qCj4gKyAqICBEcml2ZXIgZm9yIHRoZSBYQVAtRUEtMDB4IHNl cmllcyBvZiB0aGUgWGFwdHVtIEVkZ2UgQWNjZXNzIENhcmQsIGEKPiArICogIFRQTSAyLjAtYmFz ZWQgaGFyZHdhcmUgbW9kdWxlIGZvciBhdXRoZW50aWNhdGluZyBJb1QgZGV2aWNlcyBhbmQKPiAr ICogIGdhdGV3YXlzLgo+ICsgKgo+ICsgKiAgQ29weXJpZ2h0IChjKSAyMDE3IFhhcHR1bSwgSW5j Lgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJ4YXBlYTAweC5oIgo+ICsKPiArI2RlZmluZSBYQVBF QTAwWF9UUE1fTU9EQUxJQVMJICAgICAgICJ0cG1fdGlzX3NwaSIKPiArCj4gKyNkZWZpbmUga3Jl Zl90b194YXBlYTAweChrKSBjb250YWluZXJfb2Yoaywgc3RydWN0IHhhcGVhMDB4X2RldmljZSwg a3JlZikKPiArCj4gK3N0YXRpYyB2b2lkIHhhcGVhMDB4X2RlbGV0ZShzdHJ1Y3Qga3JlZiAqa3Jl ZikKPiArewo+ICsJc3RydWN0IHhhcGVhMDB4X2RldmljZSAqZGV2ID0ga3JlZl90b194YXBlYTAw eChrcmVmKTsKPiArCj4gKwl1c2JfcHV0X2RldihkZXYtPnVkZXYpOwo+ICsJa2ZyZWUoZGV2KTsK PiArfQo+ICsKPiArLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKPiArICogU1BJIG1hc3RlciBmdW5j dGlvbnMKPiArICovCj4gKwo+ICsvKioKPiArICogeGFwZWEwMHhfc3BpX3NldHVwIC0gU2V0dXAg dGhlIFNQSSBjaGFubmVsIGZvciB0aGUgVFBNLgo+ICsgKgo+ICsgKiBDb250ZXh0OiAhaW5faW50 ZXJydXB0KCkKPiArICoKPiArICogUmV0dXJuOiBJZiBzdWNjZXNzZnVsLCAwLiBPdGhlcndpc2Ug YSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCj4gKyAqLwo+ICtzdGF0aWMgaW50IHhhcGVhMDB4X3Nw aV9zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQo+ICt7Cj4gKwlzdHJ1Y3QgeGFwZWEwMHhf ZGV2aWNlICpkZXY7Cj4gKwlpbnQgcmV0dmFsOwo+ICsKPiArCWRldiA9IHNwaV9tYXN0ZXJfZ2V0 X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwo+ICsKPiArCW11dGV4X2xvY2soJmRldi0+dXNiX211dGV4 KTsKPiArCWlmICghZGV2LT5pbnRlcmZhY2UpIHsKPiArCQlyZXR2YWwgPSAtRU5PREVWOwo+ICsJ CWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCS8qIFZlcmlmeSB0aGF0IHRoaXMgaXMgdGhlIFRQTSBk ZXZpY2UgKi8KPiArCWlmIChzcGktPmNoaXBfc2VsZWN0ICE9IDApIHsKPiArCQlyZXR2YWwgPSAt RUlOVkFMOwo+ICsJCWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBEaXNhYmxlIGF1 dG8gY2hpcCBzZWxlY3QgZm9yIHRoZSBUUE0gY2hhbm5lbC4KPiArCSAqIE11c3QgYmUgZG9uZSBh ZnRlciBzZXR0aW5nIHRoZSBTUEkgcGFyYW1ldGVycy4KPiArCSAqLwo+ICsJcmV0dmFsID0geGFw ZWEwMHhfYnJfZGlzYWJsZV9jcyhkZXYsIDApOwo+ICsJaWYgKHJldHZhbCkKPiArCQlnb3RvIGVy cjsKPiArCj4gKwkvKiBEZS1hc3NlcnQgY2hpcCBzZWxlY3QgZm9yIHRoZSBUUE0gY2hhbm5lbC4g Ki8KPiArCXJldHZhbCA9IHhhcGVhMDB4X2JyX2RlYXNzZXJ0X2NzKGRldiwgMCk7Cj4gKwlpZiAo cmV0dmFsKQo+ICsJCWdvdG8gZXJyOwo+ICsKPiArCWRldl9kYmcoJmRldi0+aW50ZXJmYWNlLT5k ZXYsICJjb25maWd1cmVkIHNwaSBjaGFubmVsIGZvciB0cG1cbiIpOwo+ICsJcmV0dmFsID0gMDsK PiArCWdvdG8gb3V0OwoKVGhlIGNvbnRyb2wgZmxvdyBpcyBpbm5vdmF0aXZlLgoKPiArCj4gK2Vy cjoKPiArCWRldl9lcnIoJmRldi0+aW50ZXJmYWNlLT5kZXYsCj4gKwkJImNvbmZpZ3VyaW5nIFNQ SSBjaGFubmVsIGZhaWxlZCB3aXRoICVkXG4iLCByZXR2YWwpOwo+ICsKPiArb3V0Ogo+ICsJbXV0 ZXhfdW5sb2NrKCZkZXYtPnVzYl9tdXRleCk7Cj4gKwlyZXR1cm4gcmV0dmFsOwo+ICt9Cj4gKwo+ ICsvKioKPiArICogeGFwZWEwMHhfc3BpX2NsZWFudXAKPiArICoKPiArICogQ29udGV4dDogIWlu X2ludGVycnVwdCgpCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCB4YXBlYTAweF9zcGlfY2xlYW51cChz dHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQo+ICt7Cj4gKwlkZXZfZGJnKCZzcGktPmRldiwgIiVzXG4i LCBfX2Z1bmNfXyk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiB4YXBlYTAweF9zcGlfdHJhbnNmZXIg LSBFeGVjdXRlIGEgc2luZ2xlIFNQSSB0cmFuc2Zlci4KPiArICogQGRldjogcG9pbnRlciB0byB0 aGUgZGV2aWNlIHRvIGRvIHRoZSB0cmFuc2ZlciBvbgo+ICsgKiBAdHhfYnVmOiBwb2ludGVyIHRv IHRoZSBkYXRhIHRvIHNlbmQsIGlmIG5vdCBOVUxMCj4gKyAqIEByeF9idWY6IHBvaW50ZXIgdG8g dGhlIGJ1ZmZlciB0byBzdG9yZSB0aGUgcmVjZWl2ZWQgZGF0YSwgaWYgbm90IE5VTEwKPiArICog QGxlbjogbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBkYXRhIHRvIHNlbmQvcmVjZWl2ZQo+ICsgKiBA Y3NfaG9sZDogSWYgbm9uLXplcm8sIHRoZSBjaGlwIHNlbGVjdCB3aWxsIHJlbWFpbiBhc3NlcnRl ZAo+ICsgKiBAZGVsYXlfdXNlY3M6IElmIG5vbnplcm8sIGhvdyBsb25nIHRvIGRlbGF5IGFmdGVy IGxhc3QgYml0IHRyYW5zZmVyCj4gKyAqCj4gKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQo+ ICsgKgo+ICsgKiBSZXR1cm46IElmIHN1Y2Nlc3NmdWwsIDAuIE90aGVyd2lzZSBhIG5lZ2F0aXZl IGVycm9yIG51bWJlci4KPiArICovCj4gK2ludCB4YXBlYTAweF9zcGlfdHJhbnNmZXIoc3RydWN0 IHhhcGVhMDB4X2RldmljZSAqZGV2LAo+ICsJCQkgIGNvbnN0IHZvaWQgKnR4X2J1Ziwgdm9pZCAq cnhfYnVmLCB1MzIgbGVuLAo+ICsJCQkgIGludCBjc19ob2xkLCB1MTYgZGVsYXlfdXNlY3MpCj4g K3sKPiArCWludCByZXR2YWw7Cj4gKwo+ICsJLyogQXNzZXJ0IGNoaXAgc2VsZWN0ICovCj4gKwly ZXR2YWwgPSB4YXBlYTAweF9icl9hc3NlcnRfY3MoZGV2LCAwKTsKPiArCWlmIChyZXR2YWwpCj4g KwkJZ290byBvdXQ7Cj4gKwo+ICsJLyogZW1wdHkgdHJhbnNmZXIgKi8KPiArCWlmICghdHhfYnVm ICYmICFyeF9idWYpCj4gKwkJcmV0dmFsID0gMDsKPiArCS8qIHJlYWQgdHJhbnNmZXIgKi8KPiAr CWVsc2UgaWYgKCF0eF9idWYpCj4gKwkJcmV0dmFsID0geGFwZWEwMHhfYnJfc3BpX3JlYWQoZGV2 LCByeF9idWYsIGxlbik7Cj4gKwkvKiB3cml0ZSB0cmFuc2ZlciAqLwo+ICsJZWxzZSBpZiAoIXJ4 X2J1ZikKPiArCQlyZXR2YWwgPSB4YXBlYTAweF9icl9zcGlfd3JpdGUoZGV2LCB0eF9idWYsIGxl bik7Cj4gKwkvKiB3cml0ZV9yZWFkIHRyYW5zZmVyICovCj4gKwllbHNlCj4gKwkJcmV0dmFsID0g eGFwZWEwMHhfYnJfc3BpX3dyaXRlX3JlYWQoZGV2LCB0eF9idWYsIHJ4X2J1ZiwgbGVuKTsKPiAr Cj4gKwkvKiBEZWFzc2VydCBjaGlwIHNlbGVjdCwgaWYgcmVxdWVzdGVkICovCj4gKwlpZiAoIWNz X2hvbGQpCj4gKwkJcmV0dmFsID0geGFwZWEwMHhfYnJfZGVhc3NlcnRfY3MoZGV2LCAwKTsKPiAr Cj4gKwkvKiBEZWxheSBmb3IgdGhlIHJlcXVlc3RlZCB0aW1lICovCj4gKwl1ZGVsYXkoZGVsYXlf dXNlY3MpOwoKT3VjaC4gRG8gd2UgcmVhbGx5IG5lZWQgdG8gdW5jb25kaXRpb25hbGx5IGRlbGF5 PwpIb3cgYWJvdXQgc2F2aW5nIHRoZSB0aW1lIGFuZCB1c2luZyB1ZGVsYXkgb25seSB3aGVuIHJl cXVpcmVkPwoKPiArCj4gK291dDoKPiArCXJldHVybiByZXR2YWw7Cj4gK30KPiArCj4gKy8qKgo+ ICsgKiB4YXBlYTAweF9zcGlfdHJhbnNmZXJfb25lX21lc3NhZ2UgLSBFeGVjdXRlIGEgZnVsbCBT UEkgbWVzc2FnZS4KPiArICogQG1hc3RlcjogVGhlIFNQSSBtYXN0ZXIgb24gd2hpY2ggdG8gZXhl Y3V0ZSB0aGUgbWVzc2FnZS4KPiArICogQG1zZzogVGhlIFNQSSBtZXNzYWdlIHRvIGV4ZWN1dGUu Cj4gKyAqCj4gKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQo+ICsgKgo+ICsgKiBSZXR1cm46 IElmIHN1Y2Nlc3NmdWwsIDAuIE90aGVyd2lzZSBhIG5lZ2F0aXZlIGVyb3JyIG51bWJlci4KPiAr ICovCj4gK3N0YXRpYyBpbnQgeGFwZWEwMHhfc3BpX3RyYW5zZmVyX29uZV9tZXNzYWdlKHN0cnVj dCBzcGlfbWFzdGVyICptYXN0ZXIsCj4gKwkJCQkJICAgICBzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1z ZykKPiArewo+ICsJc3RydWN0IHhhcGVhMDB4X2RldmljZSAqZGV2Owo+ICsJc3RydWN0IHNwaV90 cmFuc2ZlciAqeGZlcjsKPiArCWludCBpc19sYXN0LCByZXR2YWw7Cj4gKwo+ICsJZGV2ID0gc3Bp X21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwo+ICsKPiArCW11dGV4X2xvY2soJmRldi0+dXNi X211dGV4KTsKPiArCWlmICghZGV2LT5pbnRlcmZhY2UpIHsKPiArCQlyZXR2YWwgPSAtRU5PREVW Owo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCS8qIHBlcmZvcm0gYWxsIHRyYW5zZmVycyAq Lwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeSh4ZmVyLCAmbXNnLT50cmFuc2ZlcnMsIHRyYW5zZmVy X2xpc3QpIHsKPiArCQlpc19sYXN0ID0gbGlzdF9pc19sYXN0KCZ4ZmVyLT50cmFuc2Zlcl9saXN0 LCAmbXNnLT50cmFuc2ZlcnMpOwo+ICsKPiArCQkvKiBUcmFuc2ZlciBtZXNzYWdlICovCj4gKwkJ cmV0dmFsID0geGFwZWEwMHhfc3BpX3RyYW5zZmVyKGRldiwgeGZlci0+dHhfYnVmLAo+ICsJCQkJ CSAgICAgICB4ZmVyLT5yeF9idWYsIHhmZXItPmxlbiwKPiArCQkJCQkgICAgICAgaXNfbGFzdCA9 PSB4ZmVyLT5jc19jaGFuZ2UsCj4gKwkJCQkJICAgICAgIHhmZXItPmRlbGF5X3VzZWNzKTsKPiAr CQlpZiAocmV0dmFsKQo+ICsJCQlnb3RvIG91dDsKPiArCj4gKwkJbXNnLT5hY3R1YWxfbGVuZ3Ro ICs9IHhmZXItPmxlbjsKPiArCX0KPiArCj4gKwlyZXR2YWwgPSAwOwo+ICsKPiArb3V0Ogo+ICsJ bXNnLT5zdGF0dXMgPSByZXR2YWw7Cj4gKwlzcGlfZmluYWxpemVfY3VycmVudF9tZXNzYWdlKG1h c3Rlcik7Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZkZXYtPnVzYl9tdXRleCk7Cj4gKwlyZXR1cm4g cmV0dmFsOwo+ICt9Cj4gKwo+ICsvKioKPiArICogeGFwZWEwMHhfc3BpX3Byb2JlIC0gUmVnaXN0 ZXIgYW5kIGNvbmZpZ3VyZSB0aGUgU1BJIG1hc3Rlci4KPiArICogQGRldjogdGhlIGRldmljZSB3 aG9zZSBTUEkgbWFzdGVyIHRvIHJlZ2lzdGVyCj4gKyAqCj4gKyAqIFJldHVybjogSWYgc3VjY2Vz c2Z1bCwgMC4gT3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgo+ICsgKi8KPiArc3Rh dGljIGludCB4YXBlYTAweF9zcGlfcHJvYmUoc3RydWN0IHhhcGVhMDB4X2RldmljZSAqZGV2KQo+ ICt7Cj4gKwlzdHJ1Y3Qgc3BpX21hc3RlciAqc3BpX21hc3RlcjsKPiArCWludCByZXR2YWw7Cj4g Kwo+ICsJc3BpX21hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJmRldi0+aW50ZXJmYWNlLT5kZXYs IHNpemVvZih2b2lkICopKTsKPiArCWlmICghc3BpX21hc3Rlcikgewo+ICsJCXJldHZhbCA9IC1F Tk9NRU07Cj4gKwkJZ290byBlcnJfb3V0Owo+ICsJfQo+ICsKPiArCXNwaV9tYXN0ZXJfc2V0X2Rl dmRhdGEoc3BpX21hc3RlciwgZGV2KTsKPiArCj4gKwlzcGlfbWFzdGVyLT5taW5fc3BlZWRfaHog PSA5MyAqIDEwMDAgKyA4MDA7IC8qIDkzLjlrSHogKi8KPiArCXNwaV9tYXN0ZXItPm1heF9zcGVl ZF9oeiA9IDEyICogMTAwMCAqIDEwMDA7IC8qIDEyIE1IeiAqLwo+ICsKPiArCXNwaV9tYXN0ZXIt PmJ1c19udW0gPSAtMTsgLyogZHluYW1pY2FsbHkgYXNzaWduZWQgKi8KPiArCXNwaV9tYXN0ZXIt Pm51bV9jaGlwc2VsZWN0ID0gMTsKPiArCXNwaV9tYXN0ZXItPm1vZGVfYml0cyA9IFNQSV9NT0RF XzA7Cj4gKwo+ICsJc3BpX21hc3Rlci0+ZmxhZ3MgPSAwOwo+ICsJc3BpX21hc3Rlci0+c2V0dXAg PSB4YXBlYTAweF9zcGlfc2V0dXA7Cj4gKwlzcGlfbWFzdGVyLT5jbGVhbnVwID0geGFwZWEwMHhf c3BpX2NsZWFudXA7Cj4gKwlzcGlfbWFzdGVyLT50cmFuc2Zlcl9vbmVfbWVzc2FnZSA9IHhhcGVh MDB4X3NwaV90cmFuc2Zlcl9vbmVfbWVzc2FnZTsKPiArCj4gKwlyZXR2YWwgPSBzcGlfcmVnaXN0 ZXJfbWFzdGVyKHNwaV9tYXN0ZXIpOwo+ICsKPiArCWlmIChyZXR2YWwpCj4gKwkJZ290byBmcmVl X3NwaTsKPiArCj4gKwlkZXYtPnNwaV9tYXN0ZXIgPSBzcGlfbWFzdGVyOwoKTG9va3MgbGlrZSBh IHJhY2UgY29uZGl0aW9uCgo+ICsJZGV2X2RiZygmZGV2LT5pbnRlcmZhY2UtPmRldiwgInJlZ2lz dGVyZWQgU1BJIG1hc3RlclxuIik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtmcmVlX3NwaToK PiArCXNwaV9tYXN0ZXJfcHV0KHNwaV9tYXN0ZXIpOwo+ICsJZGV2LT5zcGlfbWFzdGVyID0gTlVM TDsKPiArCj4gK2Vycl9vdXQ6Cj4gKwlyZXR1cm4gcmV0dmFsOwo+ICt9Cj4gKwo+ICtzdHJ1Y3Qg eGFwZWEwMHhfYXN5bmNfcHJvYmUgewo+ICsJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Cj4gKwlz dHJ1Y3QgeGFwZWEwMHhfZGV2aWNlICpkZXY7Cj4gK307Cj4gKwo+ICsjZGVmaW5lIHdvcmtfdG9f cHJvYmUodykgY29udGFpbmVyX29mKHcsIHN0cnVjdCB4YXBlYTAweF9hc3luY19wcm9iZSwgd29y aykKPiArCj4gKy8qKgo+ICsgKiB4YXBlYTAweF9pbml0X2FzeW5jX3Byb2JlIC0gaW5pdGlhbGl6 ZSBhbiBhc3luYyBwcm9iZSB3aXRoIHRoZQo+ICsgKiBzcGVjaWZpZWQgdmFsdWVzLgo+ICsgKiBA cHJvYmU6IHBvaW50ZXIgdG8gdGhlIGFzeW5jX3Byb2JlIHRvIGluaXRpYWxpemUKPiArICogQGRl djogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRvIHByb2JlCj4gKyAqIEBmOiBwb2ludGVyIHRvIHRo ZSBwcm9iZSBmdW5jdGlvbgo+ICsgKi8KPiArc3RhdGljIHZvaWQgeGFwZWEwMHhfaW5pdF9hc3lu Y19wcm9iZShzdHJ1Y3QgeGFwZWEwMHhfYXN5bmNfcHJvYmUgKnByb2JlLAo+ICsJCQkJICAgICAg c3RydWN0IHhhcGVhMDB4X2RldmljZSAqZGV2LAo+ICsJCQkJICAgICAgdm9pZCAoKmYpKHN0cnVj dCB3b3JrX3N0cnVjdCAqd29yaykpCj4gK3sKPiArCUlOSVRfV09SSygmcHJvYmUtPndvcmssIGYp Owo+ICsJcHJvYmUtPmRldiA9IGRldjsKPiArCj4gKwlrcmVmX2dldCgmZGV2LT5rcmVmKTsKPiAr CXNwaV9tYXN0ZXJfZ2V0KGRldi0+c3BpX21hc3Rlcik7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiB4 YXBlYTAweF9mcmVlX2FzeW5jX3Byb2JlIC0gY2xlYW4gdXAgdGhlIGludGVybmFscyBvZiB0aGUg YXN5bmMKPiArICogcHJvYmUuIENhbGwgdGhpcyBtZXRob2QgYWZ0ZXIgdGhlIHByb2JlIGhhcyBj b21wbGV0ZWQuCj4gKyAqCj4gKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVp bmcgdGhlIHByb2JlIGl0c2VsZiwgaWYKPiArICogZHluYW1pY2FsbHkgYWxsb2NhdGVkLgo+ICsg Kgo+ICsgKiBAcHJvYmU6IHBvaW50ZXIgdG8gdGhlIGFzeW5jX3Byb2JlIHRvIGNsZWFuIHVwCj4g KyAqLwo+ICtzdGF0aWMgdm9pZCB4YXBlYTAweF9jbGVhbnVwX2FzeW5jX3Byb2JlKHN0cnVjdCB4 YXBlYTAweF9hc3luY19wcm9iZSAqcHJvYmUpCj4gK3sKPiArCXNwaV9tYXN0ZXJfcHV0KHByb2Jl LT5kZXYtPnNwaV9tYXN0ZXIpOwo+ICsJa3JlZl9wdXQoJnByb2JlLT5kZXYtPmtyZWYsIHhhcGVh MDB4X2RlbGV0ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gdHBt X2JvYXJkX2luZm8gPSB7Cj4gKwkubW9kYWxpYXMJID0gWEFQRUEwMFhfVFBNX01PREFMSUFTLAo+ ICsJLm1heF9zcGVlZF9oegkgPSA0MyAqIDEwMDAgKiAxMDAwLCAvLyBIego+ICsJLmNoaXBfc2Vs ZWN0CSA9IDAsCj4gKwkubW9kZQkJID0gU1BJX01PREVfMCwKPiArCS5wbGF0Zm9ybV9kYXRhCSA9 IE5VTEwsCj4gKwkuY29udHJvbGxlcl9kYXRhID0gTlVMTCwKPiArfTsKPiArCj4gKy8qKgo+ICsg KiB4YXBlYTAweF90cG1fcHJvYmUgLSBSZWdpc3RlciBhbmQgaW5pdGlhbGl6ZSB0aGUgVFBNIGRl dmljZQo+ICsgKiBAd29yazogdGhlIHdvcmsgc3RydWN0IGNvbnRhaW5lZCBieSB0aGUgeGFwZWEw MHggZGV2aWNlCj4gKyAqCj4gKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQo+ICsgKi8KPiAr c3RhdGljIHZvaWQgeGFwZWEwMHhfdHBtX3Byb2JlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykK PiArewo+ICsJc3RydWN0IHhhcGVhMDB4X2FzeW5jX3Byb2JlICpwcm9iZSA9IHdvcmtfdG9fcHJv YmUod29yayk7Cj4gKwlzdHJ1Y3QgeGFwZWEwMHhfZGV2aWNlICpkZXYgPSBwcm9iZS0+ZGV2Owo+ ICsJc3RydWN0IHNwaV9tYXN0ZXIgKnNwaV9tYXN0ZXIgPSBkZXYtPnNwaV9tYXN0ZXI7Cj4gKwlz dHJ1Y3Qgc3BpX2RldmljZSAqdHBtOwo+ICsJaW50IHJldHZhbDsKPiArCj4gKwl0cG0gPSBzcGlf bmV3X2RldmljZShzcGlfbWFzdGVyLCAmdHBtX2JvYXJkX2luZm8pOwo+ICsJbXV0ZXhfbG9jaygm ZGV2LT51c2JfbXV0ZXgpOwo+ICsJaWYgKCFkZXYtPmludGVyZmFjZSkgewo+ICsJCXJldHZhbCA9 IC1FTk9ERVY7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwlpZiAoIXRwbSkgewoKV2h5IHRlc3Qg dGhpcyB1bmRlciBhIG11dGV4PwoKPiArCQlyZXR2YWwgPSAtRU5PREVWOwo+ICsJCWRldl9lcnIo JmRldi0+aW50ZXJmYWNlLT5kZXYsCj4gKwkJCSJ1bmFibGUgdG8gYWRkIHNwaSBkZXZpY2UgZm9y IFRQTVxuIik7Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJZGV2LT50cG0gPSB0cG07Cj4g KwlkZXZfaW5mbygmZGV2LT5pbnRlcmZhY2UtPmRldiwgIlRQTSBpbml0aWFsaXphdGlvbiBjb21w bGV0ZVxuIik7Cj4gKwo+ICsJcmV0dmFsID0gMDsKPiArCWdvdG8gb3V0Owo+ICsKPiArZXJyOgo+ ICsJZGV2X2VycigmZGV2LT5pbnRlcmZhY2UtPmRldiwKPiArCQkiVFBNIGluaXRpYWxpemF0aW9u IGZhaWxlZCB3aXRoICVkXG4iLCByZXR2YWwpOwo+ICsKPiArb3V0Ogo+ICsJbXV0ZXhfdW5sb2Nr KCZkZXYtPnVzYl9tdXRleCk7Cj4gKwl4YXBlYTAweF9jbGVhbnVwX2FzeW5jX3Byb2JlKHByb2Jl KTsKPiArCWt6ZnJlZShwcm9iZSk7Cj4gK30KPiArCj4gKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Cj4gKyAqIFVTQiBkcml2ZXIgc3RydWN0cyBhbmQgZnVuY3Rpb25zCj4gKyAqLwo+ICsKPiArc3Rh dGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHhhcGVhMDB4X2RldmljZXNbXSA9IHsKPiAr CXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NJTEFCUywgVVNCX1BST0RVQ1RfSURfWEFQRUEw MDEpIH0sCj4gKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9YQVBUVU0sIFVTQl9QUk9EVUNU X0lEX1hBUEVBMDAyKSB9LAo+ICsJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfWEFQVFVNLCBV U0JfUFJPRFVDVF9JRF9YQVBFQTAwMykgfSwKPiArCXsgfQo+ICt9Owo+ICtNT0RVTEVfREVWSUNF X1RBQkxFKHVzYiwgeGFwZWEwMHhfZGV2aWNlcyk7Cj4gKwo+ICtzdGF0aWMgaW50IHhhcGVhMDB4 X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCj4gKwkJCSAgY29uc3Qgc3Ry dWN0IHVzYl9kZXZpY2VfaWQgKmlkKQo+ICt7Cj4gKwlzdHJ1Y3QgeGFwZWEwMHhfZGV2aWNlICpk ZXY7Cj4gKwlzdHJ1Y3QgeGFwZWEwMHhfYXN5bmNfcHJvYmUgKnByb2JlOwo+ICsJaW50IHJldHZh bDsKPiArCj4gKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7Cj4gKwlp ZiAoIWRldikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlrcmVmX2luaXQoJmRldi0+a3Jl Zik7Cj4gKwltdXRleF9pbml0KCZkZXYtPnVzYl9tdXRleCk7Cj4gKwo+ICsJLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSBVU0IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCj4gKwlkZXYtPmlu dGVyZmFjZSA9IGludGVyZmFjZTsKPiArCWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KGludGVyZmFj ZV90b191c2JkZXYoaW50ZXJmYWNlKSk7Cj4gKwo+ICsJZGV2LT52aWQgPSBfX2xlMTZfdG9fY3B1 KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7Cj4gKwlkZXYtPnBpZCA9IF9fbGUxNl90 b19jcHUoZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7Cj4gKwo+ICsJcmV0dmFsID0g dXNiX2ZpbmRfY29tbW9uX2VuZHBvaW50cyhpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLAo+ICsJ CQkJCSAgICZkZXYtPmJ1bGtfaW4sICZkZXYtPmJ1bGtfb3V0LAo+ICsJCQkJCSAgIE5VTEwsIE5V TEwpOwo+ICsJaWYgKHJldHZhbCkgewo+ICsJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LAo+ICsJ CQkiY291bGQgbm90IGZpbmQgYm90aCBidWxrLWluIGFuZCBidWxrLW91dCBlbmRwb2ludHNcbiIp Owo+ICsJCWdvdG8gZXJyX291dDsKPiArCX0KPiArCj4gKwl1c2Jfc2V0X2ludGZkYXRhKGludGVy ZmFjZSwgZGV2KTsKPiArCj4gKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNQSSBNYXN0ZXIg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCj4gKwlyZXR2YWwgPSB4YXBlYTAweF9zcGlfcHJv YmUoZGV2KTsKPiArCWlmIChyZXR2YWwpIHsKPiArCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwg ImNvdWxkIG5vdCBpbml0aWFsaXplIFNQSSBtYXN0ZXJcbiIpOwo+ICsJCWdvdG8gZXJyX291dDsK PiArCX0KPiArCj4gKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRQTSBTUEkgRGV2aWNlIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwo+ICsJcHJvYmUgPSBremFsbG9jKHNpemVvZigqcHJv YmUpLCBHRlBfS0VSTkVMKTsKCk9vcHMgaW4gdGhlIGZhaWx1cmUgY2FzZQoKPiArCXhhcGVhMDB4 X2luaXRfYXN5bmNfcHJvYmUocHJvYmUsIGRldiwgeGFwZWEwMHhfdHBtX3Byb2JlKTsKPiArCj4g KwlzY2hlZHVsZV93b3JrKCZwcm9iZS0+d29yayk7Cj4gKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5k ZXYsICJzY2hlZHVsZWQgaW5pdGlhbGl6YXRpb24gb2YgVFBNXG4iKTsKPiArCj4gKwkvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tIEZpbmlzaGVkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwo+ ICsJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiZGV2aWNlIGNvbm5lY3RlZFxuIik7Cj4gKwly ZXR1cm4gMDsKPiArCj4gK2Vycl9vdXQ6Cj4gKwlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgImRl dmljZSBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0dmFsKTsKPiArCWtyZWZfcHV0KCZkZXYtPmtyZWYs IHhhcGVhMDB4X2RlbGV0ZSk7Cj4gKwlyZXR1cm4gcmV0dmFsOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCB4YXBlYTAweF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2Up Cj4gK3sKPiArCXN0cnVjdCB4YXBlYTAweF9kZXZpY2UgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEo aW50ZXJmYWNlKTsKPiArCj4gKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7Cj4g KwlzcGlfdW5yZWdpc3Rlcl9tYXN0ZXIoZGV2LT5zcGlfbWFzdGVyKTsKPiArCj4gKwltdXRleF9s b2NrKCZkZXYtPnVzYl9tdXRleCk7Cj4gKwlkZXYtPmludGVyZmFjZSA9IE5VTEw7Cj4gKwltdXRl eF91bmxvY2soJmRldi0+dXNiX211dGV4KTsKPiArCj4gKwlrcmVmX3B1dCgmZGV2LT5rcmVmLCB4 YXBlYTAweF9kZWxldGUpOwo+ICsKPiArCWRldl9pbmZvKCZkZXYtPnVkZXYtPmRldiwgImRldmlj ZSBkaXNjb25uZWN0ZWRcbiIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIg eGFwZWEwMHhfZHJpdmVyID0gewo+ICsJLm5hbWUJCSAgICAgID0gInhhcGVhMDB4IiwKPiArCS5w cm9iZQkJICAgICAgPSB4YXBlYTAweF9wcm9iZSwKPiArCS5kaXNjb25uZWN0CSAgICAgID0geGFw ZWEwMHhfZGlzY29ubmVjdCwKPiArCS5zdXNwZW5kCSAgICAgID0gTlVMTCwKPiArCS5yZXN1bWUJ CSAgICAgID0gTlVMTCwKPiArCS5yZXNldF9yZXN1bWUJICAgICAgPSBOVUxMLAo+ICsJLmlkX3Rh YmxlCSAgICAgID0geGFwZWEwMHhfZGV2aWNlcywKPiArCS5zdXBwb3J0c19hdXRvc3VzcGVuZCA9 IDAKPiArfTsKPiArCj4gK21vZHVsZV91c2JfZHJpdmVyKHhhcGVhMDB4X2RyaXZlcik7Cj4gKwo+ ICtNT0RVTEVfQVVUSE9SKCJEYXZpZCBSLiBCaWxkIDxkYXZpZC5iaWxkQHhhcHR1bS5jb20+Iik7 Cj4gK01PRFVMRV9ERVNDUklQVElPTigiWGFwdHVtIFhBUC1FQS0wMHggRU5GIEFjY2VzcyBjYXJk Iik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPiArCj4gK01PRFVMRV9BTElBUygieGFwZWEw MHgiKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy94YXBlYTAweC94YXBlYTAweC1z cGkuYyBiL2RyaXZlcnMvdXNiL21pc2MveGFwZWEwMHgveGFwZWEwMHgtc3BpLmMKPiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uOGUxNDViODNmNzNiCj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvdXNiL21pc2MveGFwZWEwMHgveGFwZWEwMHgtc3BpLmMK PiBAQCAtMCwwICsxLDIwOSBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MCsKPiArLyoKPiArICogIERyaXZlciBmb3IgdGhlIFhBUC1FQS0wMHggc2VyaWVzIG9mIHRoZSBY YXB0dW0gRWRnZSBBY2Nlc3MgQ2FyZCwgYQo+ICsgKiAgVFBNIDIuMC1iYXNlZCBoYXJkd2FyZSBt b2R1bGUgZm9yIGF1dGhlbnRpY2F0aW5nIElvVCBkZXZpY2VzIGFuZAo+ICsgKiAgZ2F0ZXdheXMu Cj4gKyAqCj4gKyAqICBDb3B5cmlnaHQgKGMpIDIwMTcgWGFwdHVtLCBJbmMuCj4gKyAqLwo+ICsK PiArI2luY2x1ZGUgInhhcGVhMDB4LmgiCj4gKwo+ICsvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+ ICsgKiBTUEkgbWFzdGVyIGZ1bmN0aW9ucwo+ICsgKi8KPiArCj4gKy8qKgo+ICsgKiB4YXBlYTAw eF9zcGlfc2V0dXAgLSBTZXR1cCB0aGUgU1BJIGNoYW5uZWwgZm9yIHRoZSBUUE0uCj4gKyAqCj4g KyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQo+ICsgKgo+ICsgKiBSZXR1cm46IElmIHN1Y2Nl c3NmdWwsIDAuIE90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KPiArICovCj4gK3N0 YXRpYyBpbnQgeGFwZWEwMHhfc3BpX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCj4gK3sK PiArCXN0cnVjdCB4YXBlYTAweF9kZXZpY2UgKmRldjsKPiArCWludCByZXR2YWw7Cj4gKwo+ICsJ ZGV2ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7Cj4gKwo+ICsJLyogVmVy aWZ5IHRoYXQgdGhpcyBpcyB0aGUgVFBNIGRldmljZSAqLwo+ICsJaWYgKHNwaS0+Y2hpcF9zZWxl Y3QgIT0gMCkgewo+ICsJCXJldHZhbCA9IC1FSU5WQUw7Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4g Kwo+ICsJLyogU2V0IHRoZSBTUEkgcGFyYW1ldGVycyBmb3IgdGhlIFRQTSBjaGFubmVsLiAqLwo+ ICsJcmV0dmFsID0geGFwZWEwMHhfYnJfc2V0X3NwaV93b3JkKGRldiwgMCwgWEFQRUEwMFhfVFBN X1NQSV9XT1JEKTsKPiArCWlmIChyZXR2YWwpCj4gKwkJZ290byBlcnI7Cj4gKwo+ICsJLyoKPiAr CSAqIERpc2FibGUgYXV0byBjaGlwIHNlbGVjdCBmb3IgdGhlIFRQTSBjaGFubmVsLgo+ICsJICog TXVzdCBiZSBkb25lIGFmdGVyIHNldHRpbmcgdGhlIFNQSSBwYXJhbWV0ZXJzLgo+ICsJICovCj4g KwlyZXR2YWwgPSB4YXBlYTAweF9icl9zZXRfZ3Bpb19jcyhkZXYsIDAsIFhBUEVBMDBYX0dQSU9f Q1NfRElTQUJMRUQpOwo+ICsJaWYgKHJldHZhbCkKPiArCQlnb3RvIGVycjsKPiArCj4gKwkvKiBE ZS1hc3NlcnQgY2hpcCBzZWxlY3QgZm9yIHRoZSBUUE0gY2hhbm5lbC4gKi8KPiArCXJldHZhbCA9 IHhhcGVhMDB4X2JyX3NldF9ncGlvX3ZhbHVlKGRldiwgMCwgMSk7Cj4gKwlpZiAocmV0dmFsKQo+ ICsJCWdvdG8gZXJyOwo+ICsKPiArCWRldl9kYmcoJmRldi0+aW50ZXJmYWNlLT5kZXYsICJjb25m aWd1cmVkIHNwaSBjaGFubmVsIGZvciB0cG1cbiIpOwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnI6 Cj4gKwlkZXZfZXJyKCZkZXYtPmludGVyZmFjZS0+ZGV2LAo+ICsJCSJjb25maWd1cmluZyBTUEkg Y2hhbm5lbCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0dmFsKTsKPiArCXJldHVybiByZXR2YWw7Cj4g K30KPiArCj4gKy8qKgo+ICsgKiB4YXBlYTAweF9zcGlfY2xlYW51cAo+ICsgKgo+ICsgKiBDb250 ZXh0OiAhaW5faW50ZXJydXB0KCkKPiArICovCj4gK3N0YXRpYyB2b2lkIHhhcGVhMDB4X3NwaV9j bGVhbnVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCj4gK3sKPiArCWRldl9kYmcoJnNwaS0+ZGV2 LCAiJXNcbiIsIF9fZnVuY19fKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIHhhcGVhMDB4X3NwaV90 cmFuc2ZlciAtIEV4ZWN1dGUgYSBzaW5nbGUgU1BJIHRyYW5zZmVyLgo+ICsgKiBAZGV2OiBwb2lu dGVyIHRvIHRoZSBkZXZpY2UgdG8gZG8gdGhlIHRyYW5zZmVyIG9uCj4gKyAqIEB0eF9idWY6IHBv aW50ZXIgdG8gdGhlIGRhdGEgdG8gc2VuZCwgaWYgbm90IE5VTEwKPiArICogQHJ4X2J1ZjogcG9p bnRlciB0byB0aGUgYnVmZmVyIHRvIHN0b3JlIHRoZSByZWNlaXZlZCBkYXRhLCBpZiBub3QgTlVM TAo+ICsgKiBAbGVuOiBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGRhdGEgdG8gc2VuZC9yZWNlaXZl Cj4gKyAqIEBjc19ob2xkOiBJZiBub24temVybywgdGhlIGNoaXAgc2VsZWN0IHdpbGwgcmVtYWlu IGFzc2VydGVkCj4gKyAqIEBkZWxheV91c2VjczogSWYgbm9uemVybywgaG93IGxvbmcgdG8gZGVs YXkgYWZ0ZXIgbGFzdCBiaXQgdHJhbnNmZXIKPiArICoKPiArICogQ29udGV4dDogIWluX2ludGVy cnVwdCgpCj4gKyAqCj4gKyAqIFJldHVybjogSWYgc3VjY2Vzc2Z1bCwgMC4gT3RoZXJ3aXNlIGEg bmVnYXRpdmUgZXJyb3IgbnVtYmVyLgo+ICsgKi8KPiAraW50IHhhcGVhMDB4X3NwaV90cmFuc2Zl cihzdHJ1Y3QgeGFwZWEwMHhfZGV2aWNlICpkZXYsCj4gKwkJCSAgY29uc3Qgdm9pZCAqdHhfYnVm LCB2b2lkICpyeF9idWYsIHUzMiBsZW4sCj4gKwkJCSAgaW50IGNzX2hvbGQsIHUxNiBkZWxheV91 c2VjcykKPiArewo+ICsJaW50IHJldHZhbDsKPiArCj4gKwkvKiBBc3NlcnQgY2hpcCBzZWxlY3Qg Ki8KPiArCXJldHZhbCA9IHhhcGVhMDB4X2JyX3NldF9ncGlvX3ZhbHVlKGRldiwgMCwgMCk7Cj4g KwlpZiAocmV0dmFsKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCS8qIGVtcHR5IHRyYW5zZmVyICov Cj4gKwlpZiAoIXR4X2J1ZiAmJiAhcnhfYnVmKQo+ICsJCXJldHZhbCA9IDA7Cj4gKwkvKiByZWFk IHRyYW5zZmVyICovCj4gKwllbHNlIGlmICghdHhfYnVmKQo+ICsJCXJldHZhbCA9IHhhcGVhMDB4 X2JyX3NwaV9yZWFkKGRldiwgcnhfYnVmLCBsZW4pOwo+ICsJLyogd3JpdGUgdHJhbnNmZXIgKi8K PiArCWVsc2UgaWYgKCFyeF9idWYpCj4gKwkJcmV0dmFsID0geGFwZWEwMHhfYnJfc3BpX3dyaXRl KGRldiwgdHhfYnVmLCBsZW4pOwo+ICsJLyogd3JpdGVfcmVhZCB0cmFuc2ZlciAqLwo+ICsJZWxz ZQo+ICsJCXJldHZhbCA9IHhhcGVhMDB4X2JyX3NwaV93cml0ZV9yZWFkKGRldiwgdHhfYnVmLCBy eF9idWYsIGxlbik7Cj4gKwo+ICsJLyogRGVhc3NlcnQgY2hpcCBzZWxlY3QsIGlmIHJlcXVlc3Rl ZCAqLwo+ICsJaWYgKCFjc19ob2xkKQo+ICsJCXJldHZhbCA9IHhhcGVhMDB4X2JyX3NldF9ncGlv X3ZhbHVlKGRldiwgMCwgMSk7Cj4gKwo+ICsJLyogRGVsYXkgZm9yIHRoZSByZXF1ZXN0ZWQgdGlt ZSAqLwo+ICsJdWRlbGF5KGRlbGF5X3VzZWNzKTsKPiArCj4gK291dDoKPiArCXJldHVybiByZXR2 YWw7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiB4YXBlYTAweF9zcGlfdHJhbnNmZXJfb25lX21lc3Nh Z2UgLSBFeGVjdXRlIGEgZnVsbCBTUEkgbWVzc2FnZS4KPiArICogQG1hc3RlcjogVGhlIFNQSSBt YXN0ZXIgb24gd2hpY2ggdG8gZXhlY3V0ZSB0aGUgbWVzc2FnZS4KPiArICogQG1zZzogVGhlIFNQ SSBtZXNzYWdlIHRvIGV4ZWN1dGUuCj4gKyAqCj4gKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQo KQo+ICsgKgo+ICsgKiBSZXR1cm46IElmIHN1Y2Nlc3NmdWwsIDAuIE90aGVyd2lzZSBhIG5lZ2F0 aXZlIGVyb3JyIG51bWJlci4KPiArICovCj4gK3N0YXRpYyBpbnQgeGFwZWEwMHhfc3BpX3RyYW5z ZmVyX29uZV9tZXNzYWdlKHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIsCj4gKwkJCQkJICAgICBz dHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZykKPiArewo+ICsJc3RydWN0IHhhcGVhMDB4X2RldmljZSAq ZGV2Owo+ICsJc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlcjsKPiArCWludCBpc19sYXN0LCByZXR2 YWw7Cj4gKwo+ICsJZGV2ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwo+ICsKPiAr CS8qIHBlcmZvcm0gYWxsIHRyYW5zZmVycyAqLwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeSh4ZmVy LCAmbXNnLT50cmFuc2ZlcnMsIHRyYW5zZmVyX2xpc3QpIHsKPiArCQlpc19sYXN0ID0gbGlzdF9p c19sYXN0KCZ4ZmVyLT50cmFuc2Zlcl9saXN0LCAmbXNnLT50cmFuc2ZlcnMpOwo+ICsKPiArCQkv KiBUcmFuc2ZlciBtZXNzYWdlICovCj4gKwkJcmV0dmFsID0geGFwZWEwMHhfc3BpX3RyYW5zZmVy KGRldiwgeGZlci0+dHhfYnVmLAo+ICsJCQkJCSAgICAgICB4ZmVyLT5yeF9idWYsIHhmZXItPmxl biwKPiArCQkJCQkgICAgICAgaXNfbGFzdCA9PSB4ZmVyLT5jc19jaGFuZ2UsCj4gKwkJCQkJICAg ICAgIHhmZXItPmRlbGF5X3VzZWNzKTsKPiArCQlpZiAocmV0dmFsKQo+ICsJCQlnb3RvIG91dDsK PiArCj4gKwkJbXNnLT5hY3R1YWxfbGVuZ3RoICs9IHhmZXItPmxlbjsKPiArCX0KPiArCj4gKwly ZXR2YWwgPSAwOwo+ICsKPiArb3V0Ogo+ICsJbXNnLT5zdGF0dXMgPSByZXR2YWw7Cj4gKwlzcGlf ZmluYWxpemVfY3VycmVudF9tZXNzYWdlKG1hc3Rlcik7Cj4gKwlyZXR1cm4gcmV0dmFsOwo+ICt9 Cj4gKwo+ICsvKioKPiArICogeGFwZWEwMHhfc3BpX3Byb2JlIC0gUmVnaXN0ZXIgYW5kIGNvbmZp Z3VyZSB0aGUgU1BJIG1hc3Rlci4KPiArICogQGRldjogdGhlIGRldmljZSB3aG9zZSBTUEkgbWFz dGVyIHRvIHJlZ2lzdGVyCj4gKyAqCj4gKyAqIFJldHVybjogSWYgc3VjY2Vzc2Z1bCwgMC4gT3Ro ZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgo+ICsgKi8KPiArc3RhdGljIGludCB4YXBl YTAweF9zcGlfcHJvYmUoc3RydWN0IHhhcGVhMDB4X2RldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1 Y3Qgc3BpX21hc3RlciAqc3BpX21hc3RlcjsKPiArCWludCByZXR2YWw7Cj4gKwo+ICsJc3BpX21h c3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJmRldi0+dWRldi0+ZGV2LCBzaXplb2Yodm9pZCAqKSk7 Cj4gKwlpZiAoIXNwaV9tYXN0ZXIpIHsKPiArCQlyZXR2YWwgPSAtRU5PTUVNOwo+ICsJCWdvdG8g ZXJyX291dDsKPiArCX0KPiArCj4gKwlzcGlfbWFzdGVyX3NldF9kZXZkYXRhKHNwaV9tYXN0ZXIs IGRldik7Cj4gKwo+ICsJc3BpX21hc3Rlci0+bWluX3NwZWVkX2h6ID0gOTMgKiAxMDAwICsgODAw OyAvKiA5My45a0h6ICovCj4gKwlzcGlfbWFzdGVyLT5tYXhfc3BlZWRfaHogPSAxMiAqIDEwMDAg KiAxMDAwOyAvKiAxMiBNSHogKi8KPiArCj4gKwlzcGlfbWFzdGVyLT5idXNfbnVtID0gLTE7IC8q IGR5bmFtaWNhbGx5IGFzc2lnbmVkICovCj4gKwlzcGlfbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9 IFhBUEVBMDBYX05VTV9DUzsKPiArCXNwaV9tYXN0ZXItPm1vZGVfYml0cyA9IFNQSV9NT0RFXzA7 Cj4gKwo+ICsJc3BpX21hc3Rlci0+ZmxhZ3MgPSAwOwo+ICsJc3BpX21hc3Rlci0+c2V0dXAgPSB4 YXBlYTAweF9zcGlfc2V0dXA7Cj4gKwlzcGlfbWFzdGVyLT5jbGVhbnVwID0geGFwZWEwMHhfc3Bp X2NsZWFudXA7Cj4gKwlzcGlfbWFzdGVyLT50cmFuc2Zlcl9vbmVfbWVzc2FnZSA9IHhhcGVhMDB4 X3NwaV90cmFuc2Zlcl9vbmVfbWVzc2FnZTsKPiArCj4gKwlyZXR2YWwgPSBzcGlfcmVnaXN0ZXJf bWFzdGVyKHNwaV9tYXN0ZXIpOwo+ICsKPiArCWlmIChyZXR2YWwpCj4gKwkJZ290byBmcmVlX3Nw aTsKPiArCj4gKwlkZXYtPnNwaV9tYXN0ZXIgPSBzcGlfbWFzdGVyOwo+ICsJZGV2X2RiZygmZGV2 LT5pbnRlcmZhY2UtPmRldiwgInJlZ2lzdGVyZWQgU1BJIG1hc3RlclxuIik7Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gKwo+ICtmcmVlX3NwaToKPiArCXNwaV9tYXN0ZXJfcHV0KHNwaV9tYXN0ZXIpOwo+ ICsJZGV2LT5zcGlfbWFzdGVyID0gTlVMTDsKPiArCj4gK2Vycl9vdXQ6Cj4gKwlyZXR1cm4gcmV0 dmFsOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MveGFwZWEwMHgveGFwZWEw MHguaCBiL2RyaXZlcnMvdXNiL21pc2MveGFwZWEwMHgveGFwZWEwMHguaAo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wNzU5NGVjOTUyZWYKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvZHJpdmVycy91c2IvbWlzYy94YXBlYTAweC94YXBlYTAweC5oCj4gQEAgLTAs MCArMSw3NSBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKPiArLyoK PiArICogIERyaXZlciBmb3IgdGhlIFhBUC1FQS0wMHggc2VyaWVzIG9mIHRoZSBYYXB0dW0gRWRn ZSBBY2Nlc3MgQ2FyZCwgYQo+ICsgKiAgVFBNIDIuMC1iYXNlZCBoYXJkd2FyZSBtb2R1bGUgZm9y IGF1dGhlbnRpY2F0aW5nIElvVCBkZXZpY2VzIGFuZAo+ICsgKiAgZ2F0ZXdheXMuCj4gKyAqCj4g KyAqICBDb3B5cmlnaHQgKGMpIDIwMTcgWGFwdHVtLCBJbmMuCj4gKyAqLwo+ICsKPiArI2lmbmRl ZiBfWEFQRUEwMFhfSAo+ICsjZGVmaW5lIF9YQVBFQTAwWF9ICj4gKwo+ICsjaW5jbHVkZSA8bGlu dXgva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9zbGFiLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC91c2IuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgo+ICsKPiArI2RlZmluZSBV U0JfVkVORE9SX0lEX1NJTEFCUyAgICAgICAgICAgMHgxMGM0Cj4gKyNkZWZpbmUgVVNCX1ZFTkRP Ul9JRF9YQVBUVU0gICAgICAgICAgIDB4MkZFMAo+ICsKPiArI2RlZmluZSBVU0JfUFJPRFVDVF9J RF9YQVBFQTAwMSAgICAgICAgMHg4QkRFCj4gKyNkZWZpbmUgVVNCX1BST0RVQ1RfSURfWEFQRUEw MDIgICAgICAgIDB4OEJERQo+ICsjZGVmaW5lIFVTQl9QUk9EVUNUX0lEX1hBUEVBMDAzICAgICAg ICAweDhCRUUKPiArCj4gK3N0cnVjdCB4YXBlYTAweF9kZXZpY2Ugewo+ICsJc3RydWN0IGtyZWYg a3JlZjsKPiArCj4gKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKPiArCS8qCj4gKwkgKiBUaGUg aW50ZXJmYWNlIHBvaW50ZXIgd2lsbCBiZSBzZXQgTlVMTCB3aGVuIHRoZSBkZXZpY2UKPiArCSAq IGRpc2Nvbm5lY3RzLiAgQWNjZXNzaW5nIGl0IHNhZmUgb25seSB3aGlsZSBob2xkaW5nIHRoZQo+ ICsJICogdXNiX211dGV4Lgo+ICsJICovCj4gKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJm YWNlOwo+ICsJLyoKPiArCSAqIFRoIHVzYl9tdXRleCBtdXN0IGJlIGhlbGQgd2hpbGUgc3luY2hy b25vdXMgVVNCIHJlcXVlc3RzIGFyZQo+ICsJICogaW4gcHJvZ3Jlc3MuIEl0IGlzIGFjcXVpcmVk IGR1cmluZyBkaXNjb25uZWN0IHRvIGJlIHN1cmUKPiArCSAqIHRoYXQgdGhlcmUgaXMgbm90IGFu IG91dHN0YW5kaW5nIHJlcXVlc3QuCj4gKwkgKi8KPiArCXN0cnVjdCBtdXRleCB1c2JfbXV0ZXg7 Cj4gKwo+ICsJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpidWxrX2luOwo+ICsJc3Ry dWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpidWxrX291dDsKPiArCj4gKwl1MTYgcGlkOwo+ ICsJdTE2IHZpZDsKPiArCj4gKwlzdHJ1Y3Qgc3BpX21hc3RlciAqc3BpX21hc3RlcjsKPiArCXN0 cnVjdCBzcGlfZGV2aWNlICp0cG07Cj4gK307Cj4gKwo+ICsvKiBQdWJsaWMgYnJpZGdlIGZ1bmN0 aW9ucyAqLwo+ICtpbnQgeGFwZWEwMHhfYnJfZGlzYWJsZV9jcyhzdHJ1Y3QgeGFwZWEwMHhfZGV2 aWNlICpkZXYsIHU4IGNoYW5uZWwpOwo+ICtpbnQgeGFwZWEwMHhfYnJfYXNzZXJ0X2NzKHN0cnVj dCB4YXBlYTAweF9kZXZpY2UgKmRldiwgdTggY2hhbm5lbCk7Cj4gK2ludCB4YXBlYTAweF9icl9k ZWFzc2VydF9jcyhzdHJ1Y3QgeGFwZWEwMHhfZGV2aWNlICpkZXYsIHU4IGNoYW5uZWwpOwo+ICsK PiAraW50IHhhcGVhMDB4X2JyX3NwaV9yZWFkKHN0cnVjdCB4YXBlYTAweF9kZXZpY2UgKmRldiwg dm9pZCAqcnhfYnVmLCBpbnQgbGVuKTsKPiAraW50IHhhcGVhMDB4X2JyX3NwaV93cml0ZShzdHJ1 Y3QgeGFwZWEwMHhfZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKnR4X2J1ZiwKPiArCQkJICBpbnQg bGVuKTsKPiAraW50IHhhcGVhMDB4X2JyX3NwaV93cml0ZV9yZWFkKHN0cnVjdCB4YXBlYTAweF9k ZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqdHhfYnVmLAo+ICsJCQkgICAgICAgdm9pZCAqcnhfYnVm LCBpbnQgbGVuKTsKPiArCj4gKy8qIFNoYXJlZCBTUEkgZnVuY3Rpb24gKi8KPiAraW50IHhhcGVh MDB4X3NwaV90cmFuc2ZlcihzdHJ1Y3QgeGFwZWEwMHhfZGV2aWNlICpkZXYsCj4gKwkJCSAgY29u c3Qgdm9pZCAqdHhfYnVmLCB2b2lkICpyeF9idWYsIHUzMiBsZW4sCj4gKwkJCSAgaW50IGNzX2hv bGQsIHUxNiBkZWxheV91c2Vjcyk7Cj4gKwo+ICsvKiBTaGFyZWQgVFBNIGZ1bmN0aW9ucyAqLwo+ ICtpbnQgeGFwZWEwMHhfdHBtX3BsYXRmb3JtX2luaXRpYWxpemUoc3RydWN0IHhhcGVhMDB4X2Rl dmljZSAqZGV2KTsKPiArCj4gKyNlbmRpZiAvKiBfWEFQRUEwMFhfSCAqLwotLS0KVG8gdW5zdWJz Y3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4LXVz YiIgaW4KdGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcK TW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRvbW8t aW5mby5odG1sCg==