From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v3] USB: serial: ftdi_sio: Add support for CBUS GPIO From: Johan Hovold Message-Id: <20180904124729.GE14967@localhost> Date: Tue, 4 Sep 2018 14:47:29 +0200 To: Loic Poulain Cc: johan@kernel.org, linux-usb@vger.kernel.org, andy.shevchenko@gmail.com, ajaykuee@gmail.com, daniel.thompson@linaro.org, Karoly Pados List-ID: T24gU2F0LCBBdWcgMDQsIDIwMTggYXQgMTI6MTc6MTVQTSArMDIwMCwgTG9pYyBQb3VsYWluIHdy b3RlOgo+IFNvbWUgRlRESSBkZXZpY2VzIGxpa2UgRlRYIG9yIEZUMjMyUiBzdXBwb3J0IENCVVMg Qml0IEJhbmcgbW9kZSBvbiBDQlVTCj4gcGlucywgYWxsb3dpbmcgaG9zdCB0byBjb250cm9sIHRo ZW0gdmlhIHNpbXBsZSBVU0IgY29udHJvbCB0cmFuc2ZlcnMuCj4gVG8gbWFrZSB1c2Ugb2YgYSBD QlVTIHBpbiBpbiBCaXQgQmFuZyBtb2RlLCB0aGUgcGluIG11c3QgYmUgY29uZmlndXJlZAo+IHRv IEkvTyBtb2RlIGluIHRoZSBGVERJIEVFUFJPTS4gVGhpcyBtb2RlIHBlcmZlY3RseSBjb2V4aXN0 cyB3aXRoIHJlZ3VsYXIKPiBVU0IgdG8gU2VyaWFsIGZ1bmN0aW9uLgo+IAo+IEluIHRoaXMgaW1w bGVtZW50YXRpb24sIGEgR1BJTyBjb250cm9sbGVyIGlzIHJlZ2lzdGVyZWQgb24gRlRESSBwcm9i ZQo+IGlmIGF0IGxlYXN0IG9uZSBDQlVTIHBpbiBpcyBjb25maWd1cmVkIGZvciBJL08gbW9kZS4g Rm9yIG5vdywgb25seQo+IEZUWCBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQuCj4gCj4gVGhpcyBwYXRj aCBpcyBiYXNlZCBvbiBwcmV2aW91cyBTdGVmYW4gQWduZXIgaW1wbGVtZW50YXRpb24gdGVudGF0 aXZlCj4gb24gTEtNTCBbMV0uCj4gCj4gWzFdIE1lc3NhZ2UtSWQ6IDE0MzQ4MzgzNzctODA0Mi0x LWdpdC1zZW5kLWVtYWlsLXN0ZWZhbkBhZ25lci5jaAo+IAo+IFNpZ25lZC1vZmYtYnk6IExvaWMg UG91bGFpbiA8bG9pYy5wb3VsYWluQGxpbmFyby5vcmc+Cj4gLS0tCj4gdjI6IFVzZSBtZXNzYWdl LWlkIGZvciBMS01MIHJlZmVyZW5jZQo+ICAgICBSZXdvcmsgcmVhZF9lZXByb20gYWNjb3JkaW5n IHRvIEFuZHkncyBjb21tZW50IGFuZCByZXR1cm4gcmVhZCBjb3VudAo+ICAgICBSZW1vdmUgbm9p c3kgbWVzc2FnZXMKPiAgICAgQ29tbWVudCBzdHlsZSBhbGlnbm1lbnQKPiAgICAgQWRkIGRlZmlu ZXMgZm9yIG1hZ2ljIHZhbHVlcwo+ICAgICBDYW5ub3QgdXNlIGRldm0sIGJlY2F1c2UgZ3Bpb2No aXAgaXMgbGlua2VkIHRvIHRoZSBwb3J0IG5vdCB0byB0aGUgdWRldgo+IHYzOgo+ICAgIEZpeCB0 eXBvIGluIENCVVMgbWFzayBkZXNjcmlwdGlvbiBjb21tZW50CgpGaXJzdCwgdGhhbmtzIGZvciBs b29raW5nIGludG8gdGhpczsgc2VlbXMgbGlrZSB3ZSdyZSBmaW5hbGx5IGFib3V0IHRvCmdldCBz dXBwb3J0IGZvciB0aGUgQ0JVUyBncGlvcy4KCkJ1dCBub3cgSSBnZXQgbm90IG9uZSwgYnV0IHR3 bywgY29tcGV0aW5nIGltcGxlbWVudGF0aW9ucyBmb3IgdGhpcwpwb3N0ZWQgaW4gb25lIG1vbnRo OgoKCWh0dHBzOi8vbGttbC5rZXJuZWwub3JnL3IvMjAxODA4MjUyMDQ3NDQuMjMwNy0xLXBhZG9z QHBhZG9zLmh1CgpBbmQgaXQgbG9va3MgbGlrZSB5b3UgYm90aCBoYXZlIGJlZW4gY29uc2lkZXJp bmcgYXQgbGVhc3Qgc29tZSBvZiB0aGUKZWFybGllciBhdHRlbXB0cywgd2hpY2ggaXMgZ3JlYXQu CgpJJ3ZlIHJldmlld2VkIGJvdGggcGF0Y2hlcyBhbmQgaXQgc2VlbXMgdG8gbWUgdGhhdCBLYXJv bHkncyB2ZXJzaW9uIGlzCmNsb3NlciB0byB3aGF0IEknZCBsaWtlIHRvIHNlZSBhcyB0aGUgZW5k LXJlc3VsdC4gU3BlY2lmaWNhbGx5IHRoaXMKbWVhbnMgaGF2aW5nOgoKIC0gZml4ZWQgb2Zmc2V0 cyBmb3IgdGhlIHBoeXNpY2FsIHBpbnMgcmF0aGVyIHRoYW4gaGF2aW5nIHRoZSBvZmZzZXRzCiAg IGRlcGVuZCBvbiBlZXByb20gY29uZmlndXJhdGlvbgoKIC0gYmV0dGVyIHR5cGUgYWJzdHJhY3Rp b24gKHdlIHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIGZ0MjMyciBhbmQgZnQyMzJoCiAgIGV2ZW50 dWFsbHkgYXMgd2VsbCkKClRoZSBvdGhlciBwYXRjaCBpcyBhbHNvIG1vcmUgY29tcGxldGUgaW4g dGhhdCBpdDoKCiAtIGNvbnNpZGVycyB0aGUgaW5pdGlhbCBwaW4gc3RhdGUKIC0gaW1wbGVtZW50 cyBhIHJlcXVlc3QoKSBjYWxsYmFjawogLSBpbXBsZW1lbnRzIGEgZ2V0X2RpcmVjdGlvbigpIGNh bGxiYWNrCgpJbiBjb250cmFzdCwgd2l0aCB0aGlzIGltcGxlbWVudGF0aW9uIGFzIGl0IHN0YW5k cywgd2UgY291bGQgZW5kIHVwIHdpdGgKYSBkcml2ZW4gcGluIGJlaW5nIHJlcG9ydGVkIGFzIGFu IGlucHV0IChjb3JuZXIgY2FzZSwgYnV0IHN0aWxsKS4KCkltcGxlbWVudGF0aW9uLXdpc2UsIHRo ZSBvdGhlciBwYXRjaCBpcyBhbHNvIGNsb3NlciB0byB3aGF0IEknZCBsaWtlIHRvCnNlZSAoZS5n LiBub3QgdXNpbmcgYXRvbWljIGJpdCBvcHMsIGFuZCBnZXR0aW5nIHRoZSBlcnJvciBoYW5kbGlu ZyByaWdodApmcm9tIHRoZSBzdGFydCkuCgpUaGVyZSBhcmUgc29tZSBpc3N1ZXMgdGhhdCBuZWVk cyB0byBiZSBhZGRyZXNzZWQgaW4gdGhlIG90aGVyIHBhdGNoIGFzCndlbGwsIGFuZCBpbiBkb2lu ZyBzbyBpdCB3b3VsZCBiZSB3aXNlIHRvIGxvb2sgYXQgeW91ciBwYXRjaCBmb3IKaW5zcGlyYXRp b24gKGUuZy4gbmFtaW5nIGlzc3VlcyBhbmQgYWRkaW5nIGFuIGVlcHJvbSBoZWxwZXIgdG8gb25s eSByZWFkCnRoZSBjb3VwbGUgb2YgY29uZmlndXJhdGlvbiB3b3JkcyBuZWVkZWQpLgoKSW4gdGhl IGVuZCwgZ29pbmcgd2l0aCB0aGUgb3RoZXIgcGF0Y2ggbWVhbnMgbGVzcyB3b3JrIGZvciBtZSwg ZXZlbiBpZgp5b3UgYm90aCAoYnkgdW5mb3J0dW5hdGUgdGltaW5nKSBoYXZlIGZvcmNlZCBtZSB0 byBkbyBtb3JlIHRoYW4gdHdpY2UKdGhlIGFtb3VudCBvZiByZXZpZXcgd29yayBhbHJlYWR5LgoK SG9wZWZ1bGx5IHdlIGNhbiBhbGwgd29yayB0b2dldGhlciBvbiBnZXR0aW5nIHRoZSBtaXNzaW5n IGJpdHMsCmluY2x1ZGluZyBmdXJ0aGVyIGRldmljZSBzdXBwb3J0LCBpbiBwbGFjZS4KCkZvciBj b21wbGV0ZW5lc3MsIEkndmUgaW5jbHVkZWQgbXkgcmV2aWV3IGNvbW1lbnRzIGJlbG93LgoKVGhh bmtzLApKb2hhbgoKCj4gIGRyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnICAgIHwgICA5ICsrCj4g IGRyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIHwgMjM4ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaCB8 ICA4MyArKysrKysrKysrKysrKysKPiAgMyBmaWxlcyBjaGFuZ2VkLCAzMzAgaW5zZXJ0aW9ucygr KQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMv dXNiL3NlcmlhbC9LY29uZmlnCj4gaW5kZXggNTMzZjEyNy4uNjRjOWYyZSAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9L Y29uZmlnCj4gQEAgLTE4MSw2ICsxODEsMTUgQEAgY29uZmlnIFVTQl9TRVJJQUxfRlRESV9TSU8K PiAgCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTog dGhlCj4gIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBmdGRpX3Npby4KPiAgCj4gK2NvbmZpZyBV U0JfU0VSSUFMX0ZURElfU0lPX0NCVVNfR1BJTwo+ICsJYm9vbCAiVVNCIEZEVEkgQ0JVUyBHUElP IHN1cHBvcnQiCj4gKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUxfRlRESV9TSU8KPiArCWRlcGVuZHMg b24gR1BJT0xJQgo+ICsJaGVscAo+ICsJICBTYXkgeWVzIGhlcmUgdG8gYWRkIHN1cHBvcnQgZm9y IHRoZSBDQlVTIGJpdC1iYW5nIG1vZGUsIGFsbG93aW5nIENCVVMKPiArCSAgcGlucyB0byBhY3Qg YXMgR1BJT3MuIE5vdGUgdGhhdCBwaW5zIG11c3QgZmlyc3QgYmUgY29uZmlndXJlZCBmb3IgR1BJ Two+ICsJICBpbiB0aGUgZGV2aWNlJ3MgRUVQUk9NLiBUaGUgRlQyMzJSIGFuZCBGVC1YIHNlcmll cyBzdXBwb3J0IHRoaXMgbW9kZS4KCkkgdW5kZXJzdGFuZCB5b3UncmUgcmVmZXJyaW5nIHRvIGhh cmR3YXJlLCBidXQgdGhpcyBpcyBhbWJpZ3VvdXMgYXMgeW91CmRvbid0IGltcGxlbWVudCBzdXBw b3J0IGZvciBGVDIzMlIgaW4gdGhlIGRyaXZlci4KCj4gKwo+ICBjb25maWcgVVNCX1NFUklBTF9W SVNPUgo+ICAJdHJpc3RhdGUgIlVTQiBIYW5kc3ByaW5nIFZpc29yIC8gUGFsbSBtNTB4IC8gU29u eSBDbGllIERyaXZlciIKPiAgCWhlbHAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFs L2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwo+IGluZGV4IGI1Y2Vm MzIuLmU5MGNhZTYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMK PiArKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwo+IEBAIC0zMyw2ICszMyw3IEBA Cj4gICNpbmNsdWRlIDxsaW51eC90dHkuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIu aD4KPiAgI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9ncGlv L2RyaXZlci5oPgo+ICAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gICNpbmNsdWRlIDxsaW51 eC9zcGlubG9jay5oPgo+ICAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KPiBAQCAtNDAsMTIgKzQx LDIxIEBACj4gICNpbmNsdWRlIDxsaW51eC91c2IuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3Nlcmlh bC5oPgo+ICAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgo+ICsKClVucmVsYXRlZCBjaGFu Z2UuCgo+ICAjaW5jbHVkZSAiZnRkaV9zaW8uaCIKPiAgI2luY2x1ZGUgImZ0ZGlfc2lvX2lkcy5o Igo+ICAKPiAgI2RlZmluZSBEUklWRVJfQVVUSE9SICJHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdA a3JvYWguY29tPiwgQmlsbCBSeWRlciA8YnJ5ZGVyQHNnaS5jb20+LCBLdWJhIE9iZXIgPGt1YmFA bWFyZWltYnJpdW0ub3JnPiwgQW5kcmVhcyBNb2hyLCBKb2hhbiBIb3ZvbGQgPGpob3ZvbGRAZ21h aWwuY29tPiIKPiAgI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIEZUREkgU2VyaWFsIENvbnZlcnRl cnMgRHJpdmVyIgo+ICAKPiArI2RlZmluZSBGVERJX0NCVVNfUElOX0NPVU5UIDQKPiArCj4gK3N0 cnVjdCBmdGRpX2dwaW9jaGlwIHsKPiArCXN0cnVjdCBncGlvX2NoaXAgZ2M7Cj4gKwlzdHJ1Y3Qg dXNiX3NlcmlhbF9wb3J0ICpwb3J0Owo+ICsJdW5zaWduZWQgaW50IGNidXNfbWFwW0ZURElfQ0JV U19QSU5fQ09VTlRdOwoKTG9va3MgbGlrZSB1OCB3aWxsIGRvIGhlcmUgc2luY2UgaXQncyBqdXN0 IGFuIGluZGV4LCByaWdodD8gQnV0IHNlZSBtb3JlCmFib3V0IHRoaXMgbWFwcGluZyBiZWxvdyBm aXJzdC4KCj4gKwl1bnNpZ25lZCBsb25nIGNidXNfbWFzazsKPiArfTsKPiAgCj4gIHN0cnVjdCBm dGRpX3ByaXZhdGUgewo+ICAJZW51bSBmdGRpX2NoaXBfdHlwZSBjaGlwX3R5cGU7Cj4gQEAgLTcy LDYgKzgyLDggQEAgc3RydWN0IGZ0ZGlfcHJpdmF0ZSB7Cj4gIAl1bnNpZ25lZCBpbnQgbGF0ZW5j eTsJCS8qIGxhdGVuY3kgc2V0dGluZyBpbiB1c2UgKi8KPiAgCXVuc2lnbmVkIHNob3J0IG1heF9w YWNrZXRfc2l6ZTsKPiAgCXN0cnVjdCBtdXRleCBjZmdfbG9jazsgLyogQXZvaWQgbWVzcyBieSBw YXJhbGxlbCBjYWxscyBvZiBjb25maWcgaW9jdGwoKSBhbmQgY2hhbmdlX3NwZWVkKCkgKi8KPiAr Cj4gKwlzdHJ1Y3QgZnRkaV9ncGlvY2hpcCAqZmdjOwo+ICB9Owo+ICAKPiAgLyogc3RydWN0IGZ0 ZGlfc2lvX3F1aXJrIGlzIHVzZWQgYnkgZGV2aWNlcyByZXF1aXJpbmcgc3BlY2lhbCBhdHRlbnRp b24uICovCj4gQEAgLTE1MjgsNiArMTU0MCwyMjQgQEAgc3RhdGljIGludCBnZXRfbHNyX2luZm8o c3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+ICsj aWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU9fQ0JVU19HUElPCj4gKwo+ICsjZGVmaW5l IEZUWF9DQlVTX01VWF9FRVBST01fQUREUiAweDFhCj4gKwo+ICtzdGF0aWMgaW50IGZ0ZGlfcmVh ZF9lZXByb20oc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHVuc2lnbmVkIGludCBvZmYsCj4gKwkJ CSAgICB2b2lkICp2YWwsIHNpemVfdCBieXRlcykKPiArewo+ICsJdW5zaWduZWQgaW50IHJlYWQg PSAwOwo+ICsKPiArCWlmIChieXRlcyAlIDIpIC8qIDE2LWJpdCB3b3JkIGVlcHJvbSAqLwo+ICsJ CWJ5dGVzLS07CgpFcnJvcj8KCj4gKwo+ICsJd2hpbGUgKHJlYWQgPCBieXRlcykgewo+ICsJCWlu dCBydjsKPiArCj4gKwkJcnYgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBl KHVkZXYsIDApLAo+ICsJCQkJICAgICBGVERJX1NJT19SRUFEX0VFUFJPTV9SRVFVRVNULAo+ICsJ CQkJICAgICBGVERJX1NJT19SRUFEX0VFUFJPTV9SRVFVRVNUX1RZUEUsCj4gKwkJCQkgICAgIDAs IChvZmYgKyByZWFkKSAvIDIsIHZhbCArIHJlYWQsIDIsCj4gKwkJCQkgICAgIFdEUl9USU1FT1VU KTsKPiArCQlpZiAocnYgPCAwKQo+ICsJCQlicmVhazsKCk11c3QgY2hlY2sgZm9yIHNob3J0IHRy YW5zZmVycy4KCkFuZCByZXR1cm4gYW4gZXJyb3IgaW5zdGVhZCBvZiBkb2luZyBhIHBhcnRpYWwg dHJhbnNmZXIuCgo+ICsKPiArCQlyZWFkICs9IDI7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJlYWQ7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZnRkaV9zZXRfYml0bW9kZShzdHJ1Y3QgdXNiX3Nlcmlh bF9wb3J0ICpwb3J0LCB1OCBiaXRtYXNrLAo+ICsJCQkgICAgdTggYml0bW9kZSkKPiArewo+ICsJ c3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0 KTsKPiArCV9fdTE2IHVyYl92YWx1ZSA9IDA7Cgp1MTYsIHJlbmFtZSAidmFsdWUiLCBubyBuZWVk IHRvIGluaXRpYWxpc2UuCgo+ICsKPiArCXVyYl92YWx1ZSA9IGJpdG1vZGUgPDwgOCB8IGJpdG1h c2s7Cj4gKwo+ICsJaWYgKHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKClVzZSBp bnRlcm1lZGlhdGUgcmVzIChvciBydikgdmFyaWFibGUgZm9yIHN0YXR1cywgaGVyZSBhbmQgZWxz ZXdoZXJlLgoKPiArCQkJICAgIHVzYl9zbmRjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCks Cj4gKwkJCSAgICBGVERJX1NJT19TRVRfQklUTU9ERV9SRVFVRVNULAo+ICsJCQkgICAgRlRESV9T SU9fU0VUX0JJVE1PREVfUkVRVUVTVF9UWVBFLAo+ICsJCQkgICAgdXJiX3ZhbHVlLCBwcml2LT5p bnRlcmZhY2UsIE5VTEwsIDAsCj4gKwkJCSAgICBXRFJfU0hPUlRfVElNRU9VVCkgPCAwKSB7Cj4g KwkJcmV0dXJuIC1FSU87CgpKdXN0IHJldHVybiBhY3R1YWwgZXJyb3IsIGhlcmUgYW5kIGVsc2V3 aGVyZS4KCj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZnRk aV9yZWFkX3BpbnMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgdTggKnZhbCkKPiArewo+ ICsJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShw b3J0KTsKPiArCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKPiArCj4gKwlidWYgPSBrbWFsbG9jKDEsIEdG UF9LRVJORUwpOwo+ICsJaWYgKCFidWYpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJaWYg KHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKPiArCQkJICAgIHVzYl9yY3ZjdHJs cGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCj4gKwkJCSAgICBGVERJX1NJT19SRUFEX1BJTlNf UkVRVUVTVCwKPiArCQkJICAgIEZURElfU0lPX1JFQURfUElOU19SRVFVRVNUX1RZUEUsCj4gKwkJ CSAgICAwLCBwcml2LT5pbnRlcmZhY2UsIGJ1ZiwgMSwgV0RSX1RJTUVPVVQpIDwgMCkgewoKTXVz dCBjaGVjayBmb3Igc2hvcnQgdHJhbnNmZXJzICh5ZXMsIHplcm8tbGVuZ3RoKS4KCj4gKwkJa2Zy ZWUoYnVmKTsKPiArCQlyZXR1cm4gLUVJTzsKPiArCX0KPiArCj4gKwkqdmFsID0gYnVmWzBdOwo+ ICsJa2ZyZWUoYnVmKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBm dGRpX2NidXNfZ3Bpb19kaXJfb3V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBncGlv LCBpbnQgdmFsKQo+ICt7Cj4gKwlzdHJ1Y3QgZnRkaV9ncGlvY2hpcCAqZmdjID0gZ3Bpb2NoaXBf Z2V0X2RhdGEoZ2MpOwo+ICsJdW5zaWduZWQgaW50IGNidXNfaWR4ID0gZmdjLT5jYnVzX21hcFtn cGlvXTsKPiArCj4gKwkvKgo+ICsJICogQ0JVUyBtYXNrIGlzIGFuIDgtYml0IHJlZ2lzdGVyIGNv bnRyb2xsaW5nIHRoZSBkaXJlY3Rpb24gYW5kIHZhbHVlCj4gKwkgKiBvZiBDQlVTIHBpbnMgaW4g Qml0LUJhbmcgbW9kZS4gY2YgYXBwbGljYXRpb24gbm90ZSBBTl8zNzMvQU5fMjMyUi0wMS4KPiAr CSAqIHwgYml0IDcgfCBiaXQgNiB8IGJpdCA1IHwgYml0IDQgfCBiaXQgMyB8IGJpdCAyIHwgYml0 IDEgfCBiaXQgMCB8Cj4gKwkgKiB8IENCVVMzIHwgQ0JVUzIgfCBDQlVTMSB8IENCVVMwIHwgQ0JV UzMgfCBDQlVTMiB8IENCVVMxIHwgQ0JVUzAgfAo+ICsJICogfCAgSS9PICB8ICBJL08gIHwgIEkv TyAgfCAgSS9PICB8IEhpL0xvIHwgSGkvTG8gfCBIaS9MbyB8IEhpL0xvIHwKPiArCSAqLwo+ICsJ c2V0X2JpdChjYnVzX2lkeCArIDQsICZmZ2MtPmNidXNfbWFzayk7IC8qIGRpcmVjdGlvbiAqLwo+ ICsJc2V0X2JpdChjYnVzX2lkeCwgJmZnYy0+Y2J1c19tYXNrKTsgLyogdmFsdWUgKi8KCk5vIG5l ZWQgZm9yIGF0b21pYyBiaXQgb3BzLgoKPiArCj4gKwlyZXR1cm4gZnRkaV9zZXRfYml0bW9kZShm Z2MtPnBvcnQsIGZnYy0+Y2J1c19tYXNrLAo+ICsJCQkJRlRESV9TSU9fQklUTU9ERV9DQlVTKTsK PiArfQo+ICsKPiArc3RhdGljIGludCBmdGRpX2NidXNfZ3Bpb19kaXJfaW4oc3RydWN0IGdwaW9f Y2hpcCAqZ2MsIHVuc2lnbmVkIGdwaW8pCj4gK3sKPiArCXN0cnVjdCBmdGRpX2dwaW9jaGlwICpm Z2MgPSBncGlvY2hpcF9nZXRfZGF0YShnYyk7Cj4gKwl1bnNpZ25lZCBpbnQgY2J1c19pZHggPSBm Z2MtPmNidXNfbWFwW2dwaW9dOwo+ICsKPiArCWNsZWFyX2JpdChjYnVzX2lkeCArIDQsICZmZ2Mt PmNidXNfbWFzayk7Cj4gKwo+ICsJcmV0dXJuIGZ0ZGlfc2V0X2JpdG1vZGUoZmdjLT5wb3J0LCBm Z2MtPmNidXNfbWFzaywKPiArCQkJCUZURElfU0lPX0JJVE1PREVfQ0JVUyk7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgZnRkaV9jYnVzX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNp Z25lZCBncGlvKQo+ICt7Cj4gKwlzdHJ1Y3QgZnRkaV9ncGlvY2hpcCAqZmdjID0gZ3Bpb2NoaXBf Z2V0X2RhdGEoZ2MpOwo+ICsJdW5zaWduZWQgaW50IGNidXNfaWR4ID0gZmdjLT5jYnVzX21hcFtn cGlvXTsKPiArCXU4IHZhbCA9IDA7Cj4gKwlpbnQgcnY7Cj4gKwo+ICsJcnYgPSBmdGRpX3JlYWRf cGlucyhmZ2MtPnBvcnQsICZ2YWwpOwo+ICsJaWYgKHJ2KQo+ICsJCXJldHVybiBydjsKPiArCj4g KwlyZXR1cm4gISEodmFsICYgQklUKGNidXNfaWR4KSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGZ0ZGlfY2J1c19ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgZ3Bpbywg aW50IHZhbCkKPiArewo+ICsJc3RydWN0IGZ0ZGlfZ3Bpb2NoaXAgKmZnYyA9IGdwaW9jaGlwX2dl dF9kYXRhKGdjKTsKPiArCj4gKwlpZiAodmFsKQo+ICsJCXNldF9iaXQoZmdjLT5jYnVzX21hcFtn cGlvXSwgJmZnYy0+Y2J1c19tYXNrKTsKPiArCWVsc2UKPiArCQljbGVhcl9iaXQoZmdjLT5jYnVz X21hcFtncGlvXSwgJmZnYy0+Y2J1c19tYXNrKTsKPiArCj4gKwlmdGRpX3NldF9iaXRtb2RlKGZn Yy0+cG9ydCwgZmdjLT5jYnVzX21hc2ssIEZURElfU0lPX0JJVE1PREVfQ0JVUyk7CgpMb2dnaW5n IGFuIGVycm9yIHNlZW1zIGFwcHJvcHJpYXRlIGhlcmUuCgo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGZ0ZGlfcmVnaXN0ZXJfY2J1c19ncGlvY2hpcChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0 KQo+ICt7Cj4gKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9y dF9kYXRhKHBvcnQpOwo+ICsJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBwb3J0LT5zZXJpYWwt PmRldjsKPiArCXN0cnVjdCBmdGRpX2dwaW9jaGlwICpmZ2M7Cj4gKwlpbnQgcnYgPSAwOwo+ICsK PiArCWZnYyA9IGt6YWxsb2Moc2l6ZW9mKCpmZ2MpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghZmdj KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWlmIChwcml2LT5jaGlwX3R5cGUgPT0gRlRY KSB7Cj4gKwkJdW5zaWduZWQgY2hhciAqY2J1c19tdXg7Cj4gKwkJdW5zaWduZWQgaW50IGk7Cj4g Kwo+ICsJCS8qCj4gKwkJICogRWFjaCBpbmRpdmlkdWFsIENCVVMgcGluIGlzIGNvbnRyb2xsZWQg YnkgYSBzZXBhcmF0ZSA4LWJpdAo+ICsJCSAqIE1VWCBjb250cm9sIHZhbHVlIHN0b3JlZCBpbiB0 aGUgRUVQUk9NLCBzdGFydGluZyBhdCAweDFhOgo+ICsJCSAqIHwgMHgxYSBDQlVTMCB8IDB4MWIg Q0JVUzEgfCAweDFjIENCVVMyIHwgMHgxZCBDQlVTMyB8IC4uLgo+ICsJCSAqIGNmIGFwcGxpY2F0 aW9uIG5vdGUgQU5fMjAxLgo+ICsJCSAqLwo+ICsKPiArCQljYnVzX211eCA9IGttYWxsb2MoRlRE SV9DQlVTX1BJTl9DT1VOVCwgR0ZQX0tFUk5FTCk7Cj4gKwkJaWYgKCFjYnVzX211eCkKPiArCQkJ cmV0dXJuIC1FTk9NRU07CgpZb3UncmUgbGVha2luZyBmZ2MgaGVyZS4KCj4gKwo+ICsJCXJ2ID0g ZnRkaV9yZWFkX2VlcHJvbSh1ZGV2LCBGVFhfQ0JVU19NVVhfRUVQUk9NX0FERFIsIGNidXNfbXV4 LAo+ICsJCQkJICAgICAgRlRESV9DQlVTX1BJTl9DT1VOVCk7Cj4gKwkJaWYgKHJ2IDwgMCkgewoK QW5kIGhlcmUgeW91J3JlIG5vdCBjaGVja2luZyBmb3Igc2hvcnQgdHJhbnNmZXJzLCBkZXNwaXRl IGN1cnJlbnRseQppbXBsZW1lbnRpbmcgdGhlbSAod2hpY2ggeW91IHByb2JhYmx5IHNob3VsZCBu b3QpLgoKPiArCQkJZGV2X2VycigmdWRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlYWQgQ0JVUyBjb25m aWdcbiIpOwo+ICsJCQlrZnJlZShjYnVzX211eCk7Cj4gKwkJCWdvdG8gZXhpdF9yZWxlYXNlOwo+ ICsJCX0KPiArCj4gKwkJZm9yIChpID0gMDsgaSA8IHJ2OyBpKyspIHsKPiArCQkJaWYgKGNidXNf bXV4W2ldID09IEZUWF9DQlVTX01VWF9JTykKPiArCQkJCWZnYy0+Y2J1c19tYXBbZmdjLT5nYy5u Z3BpbysrXSA9IGk7Cj4gKwkJfQoKV2UgZG9uJ3Qgd2FudCB0aGUgZ3BpbyBjaGlwIG9mZnNldHMg dG8gY2hhbmdlIGRlcGVuZGluZyBvbiBob3cgdGhlIHBpbnMKaGF2ZSBiZWVuIG11eGVkIGluIGVl cHJvbSAoaS5lLiBDQlVTNCBzaG91bGQgYWx3YXlzIGJlIGF0IG9mZnNldCAzKS4KClNvIHRoZSBj YnVzX21hcCBpc24ndCBuZWVkZWQsIGFuZCB5b3UgbmVlZCBhbiByZXF1ZXN0IGNhbGxiYWNrIHRv IGRlbnkKcmVxdWVzdHMgb2YgcGlucyB0aGF0IGFyZSBub3QgYXZhaWxhYmxlLgoKPiArCj4gKwkJ cnYgPSAwOwo+ICsJCWtmcmVlKGNidXNfbXV4KTsKPiArCX0KPiArCj4gKwlpZiAoIWZnYy0+Z2Mu bmdwaW8pCj4gKwkJZ290byBleGl0X3JlbGVhc2U7Cj4gKwo+ICsJZmdjLT5nYy5sYWJlbCA9ICJm dGRpLWNidXMtZ3BpbyI7CgoiZnRkaS1jYnVzIiBzaG91bGQgZG8uCgo+ICsJZmdjLT5nYy5kaXJl Y3Rpb25faW5wdXQgPSBmdGRpX2NidXNfZ3Bpb19kaXJfaW47Cj4gKwlmZ2MtPmdjLmRpcmVjdGlv bl9vdXRwdXQgPSBmdGRpX2NidXNfZ3Bpb19kaXJfb3V0Owo+ICsJZmdjLT5nYy5zZXQgPSBmdGRp X2NidXNfZ3Bpb19zZXQ7Cj4gKwlmZ2MtPmdjLmdldCA9IGZ0ZGlfY2J1c19ncGlvX2dldDsKCkJ5 IG5vdCBpbXBsZW1lbnRpbmcgZ2V0X2RpcmVjdGlvbiwgYW5kIGNvbnNpZGVyaW5nIHRoZSBpbml0 aWFsIHBpbgpzdGF0ZSwgd2UgY291bGQgZW5kIHVwIHdpdGggYSBkcml2ZW4gcGluIGJlaW5nIHJl cG9ydGVkIGFzIGFuIGlucHV0LgoKU3BlY2lmaWNhbGx5LCB5b3UncmUgcmVseWluZyBvbiBncGlv bGliIGNvbnNpZGVyaW5nIHBpbnMgYXMgaW5wdXRzIGJ5CmRlZmF1bHQsIGJ1dCB0aGUgcGluIGRp cmVjdGlvbiBhbmQgc3RhdGUgKGZvciBhbGwgcGlucykgd2lsbCBub3QgZ2V0CnVwZGF0ZWQgdW50 aWwgdGhlIGZpcnN0IGRpcmVjdGlvbiBvciBzdGF0ZSBjaGFuZ2UuCgo+ICsJZmdjLT5nYy5jYW5f c2xlZXAgPSB0cnVlOwo+ICsJZmdjLT5nYy5wYXJlbnQgPSAmdWRldi0+ZGV2OwoKVGhlIGdwaW8g Y2hpcCBzaG91bGQgYmUgYSBjaGlsZCBvZiB0aGUgVVNCIGludGVyZmFjZSB3aGljaCB3ZSBhcmUK YmluZGluZyB0byBhbmQgbm90IGl0cyBwYXJlbnQgVVNCIGRldmljZSAoYWxzbyBjb25zaWRlciBt dWx0aXBvcnQKZGV2aWNlcykuCgo+ICsJZmdjLT5nYy5iYXNlID0gLTE7Cj4gKwlmZ2MtPmdjLm93 bmVyID0gVEhJU19NT0RVTEU7Cj4gKwlmZ2MtPnBvcnQgPSBwb3J0Owo+ICsKPiArCXJ2ID0gZ3Bp b2NoaXBfYWRkX2RhdGEoJmZnYy0+Z2MsIGZnYyk7Cj4gKwlpZiAocnYpIHsKPiArCQlkZXZfZXJy KCZ1ZGV2LT5kZXYsICJVbmFibGUgdG8gYWRkIGdwaW9jaGlwXG4iKTsKCkluY2x1ZGluZyBhbiBl cnJubyBpcyB1c3VhbGx5IGEgZ29vZCBpZGVhLgoKPiArCQlnb3RvIGV4aXRfcmVsZWFzZTsKPiAr CX0KPiArCj4gKwlwcml2LT5mZ2MgPSBmZ2M7Cj4gKwo+ICsJZGV2X2luZm8oJnVkZXYtPmRldiwK PiArCQkgIkZUREkgVVNCIEdQSU8gY29udHJvbGxlciBSZWdpc3RlcmVkLCBiYXNlPSVkLCBuZ3Bp bz0ldVxuIiwKPiArCQkgZmdjLT5nYy5iYXNlLCBmZ2MtPmdjLm5ncGlvKTsKCkRlbW90ZSB0byBL RVJOX0RFQlVHIG9yIHJlbW92ZS4KCj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtleGl0X3JlbGVh c2U6Cj4gKwlrZnJlZShmZ2MpOwo+ICsJcmV0dXJuIHJ2Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBmdGRpX3VucmVnaXN0ZXJfY2J1c19ncGlvY2hpcChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpw b3J0KQo+ICt7Cj4gKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxf cG9ydF9kYXRhKHBvcnQpOwo+ICsJc3RydWN0IGZ0ZGlfZ3Bpb2NoaXAgKmZnYyA9IHByaXYtPmZn YzsKPiArCj4gKwlpZiAoIWZnYykKPiArCQlyZXR1cm47Cj4gKwo+ICsJZ3Bpb2NoaXBfcmVtb3Zl KCZmZ2MtPmdjKTsKPiArCWtmcmVlKGZnYyk7Cj4gK30KPiArCj4gKyNlbmRpZiAvKiAgQ09ORklH X1VTQl9TRVJJQUxfRlRESV9TSU9fQ0JVU19HUElPICovCj4gIAo+ICAvKiBEZXRlcm1pbmUgdHlw ZSBvZiBGVERJIGNoaXAgYmFzZWQgb24gVVNCIGNvbmZpZyBhbmQgZGVzY3JpcHRvci4gKi8KPiAg c3RhdGljIHZvaWQgZnRkaV9kZXRlcm1pbmVfdHlwZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpw b3J0KQo+IEBAIC0xODEzLDYgKzIwNDMsMTAgQEAgc3RhdGljIGludCBmdGRpX3Npb19wb3J0X3By b2JlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCj4gIAkJcHJpdi0+bGF0ZW5jeSA9IDE2 Owo+ICAJd3JpdGVfbGF0ZW5jeV90aW1lcihwb3J0KTsKPiAgCWNyZWF0ZV9zeXNmc19hdHRycyhw b3J0KTsKPiArI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPX0NCVVNfR1BJTwo+ICsJ ZnRkaV9yZWdpc3Rlcl9jYnVzX2dwaW9jaGlwKHBvcnQpOwo+ICsjZW5kaWYKCk5vIGlmZGVmcyBp biBjb2RlIGxpa2UgdGhpczsgYWRkIGR1bW15IGltcGxlbWVudGF0aW9uIGluc3RlYWQuIEFuZCB3 aGF0CmFib3V0IGVycm9ycz8gU2hvdWxkIGJlIGxvZ2dlZCBhdCBsZWFzdC4KCj4gKwo+ICAJcmV0 dXJuIDA7Cj4gIH0KPiAgCj4gQEAgLTE5MzAsNiArMjE2NCwxMCBAQCBzdGF0aWMgaW50IGZ0ZGlf c2lvX3BvcnRfcmVtb3ZlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCj4gIHsKPiAgCXN0 cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7 Cj4gIAo+ICsjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU9fQ0JVU19HUElPCj4gKwlm dGRpX3VucmVnaXN0ZXJfY2J1c19ncGlvY2hpcChwb3J0KTsKPiArI2VuZGlmCj4gKwo+ICAJcmVt b3ZlX3N5c2ZzX2F0dHJzKHBvcnQpOwo+ICAKPiAgCWtmcmVlKHByaXYpOwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRp X3Npby5oCj4gaW5kZXggZGNkMGI2ZS4uM2JkMjQ4ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3Vz Yi9zZXJpYWwvZnRkaV9zaW8uaAo+ICsrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5o Cj4gQEAgLTM2LDYgKzM2LDEwIEBACj4gICNkZWZpbmUgRlRESV9TSU9fU0VUX0VSUk9SX0NIQVIJ CTcgLyogU2V0IHRoZSBlcnJvciBjaGFyYWN0ZXIgKi8KPiAgI2RlZmluZSBGVERJX1NJT19TRVRf TEFURU5DWV9USU1FUgk5IC8qIFNldCB0aGUgbGF0ZW5jeSB0aW1lciAqLwo+ICAjZGVmaW5lIEZU RElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSCTEwIC8qIEdldCB0aGUgbGF0ZW5jeSB0aW1lciAqLwo+ ICsjZGVmaW5lIEZURElfU0lPX1NFVF9CSVRNT0RFCQkxMSAvKiBTZXQgdGhlIGJpdG1vZGUgKi8K PiArI2RlZmluZSBGVERJX1NJT19SRUFEX1BJTlMJCTEyIC8qIFJlYWQgcGlucyBpbiBiaXRtb2Rl ICovCj4gKyNkZWZpbmUgRlRESV9TSU9fUkVBRF9FRVBST00JCTB4OTAgLyogUmVhZCBlZXByb20g Ki8KPiArI2RlZmluZSBGVERJX1NJT19XUklURV9FRVBST00JCTB4OTEgLyogV3JpdGUgZWVwcm9t ICovCj4gIAo+ICAvKiBJbnRlcmZhY2UgaW5kaWNlcyBmb3IgRlQyMjMyLCBGVDIyMzJIIGFuZCBG VDQyMzJIIGRldmljZXMgKi8KPiAgI2RlZmluZSBJTlRFUkZBQ0VfQQkJMQo+IEBAIC00MDAsNiAr NDA0LDYwIEBAIGVudW0gZnRkaV9zaW9fYmF1ZHJhdGUgewo+ICAgKgo+ICAgKi8KPiAgCj4gKyAv KiBGVERJX1NJT19SRUFEX0VFUFJPTSAqLwo+ICsjZGVmaW5lIEZURElfU0lPX1JFQURfRUVQUk9N X1JFUVVFU1RfVFlQRSAweGMwCj4gKyNkZWZpbmUgRlRESV9TSU9fUkVBRF9FRVBST01fUkVRVUVT VCBGVERJX1NJT19SRUFEX0VFUFJPTQo+ICsvKgo+ICsgKiAgQm1SZXF1ZXN0VHlwZTogICAxMTAw IDAwMDBiCj4gKyAqICBiUmVxdWVzdDogICAgICAgIEZURElfU0lPX1JFQURfRUVQUk9NCj4gKyAq ICB3VmFsdWU6ICAgICAgICAgIDAKPiArICogIHdJbmRleDogICAgICAgICAgV29yZCBJbmRleAo+ ICsgKiAgd0xlbmd0aDogICAgICAgICAyCj4gKyAqICBEYXRhOiAgICAgICAgICAgIHJldHVybiBk YXRhIChhIHdvcmQpCj4gKyAqCgpSZW1vdmUgZW1wdHkgY29tbWVudCBsaW5lLCBoZXJlIGFuZCBl bHNld2hlcmUuCgo+ICsgKi8KPiArCj4gKy8qIEZURElfU0lPX1dSSVRFX0VFUFJPTSAqLwo+ICsj ZGVmaW5lIEZURElfU0lPX1dSSVRFX0VFUFJPTV9SRVFVRVNUX1RZUEUgMHg0MAo+ICsjZGVmaW5l IEZURElfU0lPX1dSSVRFX0VFUFJPTV9SRVFVRVNUIEZURElfU0lPX1dSSVRFX0VFUFJPTQo+ICsv Kgo+ICsgKiAgQm1SZXF1ZXN0VHlwZTogICAwMTAwIDAwMDBiCj4gKyAqICBiUmVxdWVzdDogICAg ICAgIEZURElfU0lPX1dSSVRFX0VFUFJPTQo+ICsgKiAgd1ZhbHVlOiAgICAgICAgICBEYXRhICh3 b3JkKQo+ICsgKiAgd0luZGV4OiAgICAgICAgICBXb3JkIEluZGV4Cj4gKyAqICB3TGVuZ3RoOiAg ICAgICAgIDAKPiArICogIERhdGE6ICAgICAgICAgICAgTm9uZQo+ICsgKgo+ICsgKi8KPiArCj4g KyAvKiBGVERJX1NJT19TRVRfQklUTU9ERSAqLwo+ICsjZGVmaW5lIEZURElfU0lPX1NFVF9CSVRN T0RFX1JFUVVFU1RfVFlQRSAweDQwCj4gKyNkZWZpbmUgRlRESV9TSU9fU0VUX0JJVE1PREVfUkVR VUVTVCBGVERJX1NJT19TRVRfQklUTU9ERQo+ICsjZGVmaW5lIEZURElfU0lPX0JJVE1PREVfUkVT RVQgMHgwMAo+ICsjZGVmaW5lIEZURElfU0lPX0JJVE1PREVfQ0JVUyAweDIwCj4gKy8qCj4gKyAq ICBCbVJlcXVlc3RUeXBlOiAgIDAxMDAgMDAwMGIKPiArICogIGJSZXF1ZXN0OiAgICAgICAgRlRE SV9TSU9fU0VUX0JJVE1PREUKPiArICogIHdWYWx1ZTogICAgICAgICAgWzAtN10gYml0bWFzaywg WzgtMTVdIGJpdG1vZGUKPiArICogIHdJbmRleDogICAgICAgICAgUG9ydAo+ICsgKiAgd0xlbmd0 aDogICAgICAgICAwCj4gKyAqICBEYXRhOiAgICAgICAgICAgIE5vbmUKPiArICoKPiArICovCj4g Kwo+ICsvKiBGVERJX1NJT19SRUFEX1BJTlMgKi8KPiArI2RlZmluZSBGVERJX1NJT19SRUFEX1BJ TlNfUkVRVUVTVF9UWVBFIDB4QzAKPiArI2RlZmluZSBGVERJX1NJT19SRUFEX1BJTlNfUkVRVUVT VCBGVERJX1NJT19SRUFEX1BJTlMKPiArLyoKPiArICogIEJtUmVxdWVzdFR5cGU6ICAgMTEwMCAw MDAwYgo+ICsgKiAgYlJlcXVlc3Q6ICAgICAgICBGVERJX1NJT19SRUFEX1BJTlMKPiArICogIHdW YWx1ZTogICAgICAgICAgMAo+ICsgKiAgd0luZGV4OiAgICAgICAgICBQb3J0Cj4gKyAqICB3TGVu Z3RoOiAgICAgICAgIDIKPiArICogIERhdGE6ICAgICAgICAgICAgcmV0dXJuIGRhdGEgKGEgd29y ZCkKPiArICoKPiArICovCj4gKwo+ICAvKiBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTICovCj4g IC8qIFJldHJpZXZlIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBtb2RlbSBzdGF0dXMgcmVnaXN0 ZXIgKi8KPiAgCj4gQEAgLTU2MywzICs2MjEsMjggQEAgZW51bSBmdGRpX3Npb19iYXVkcmF0ZSB7 Cj4gICAqIEIyLi43CUxlbmd0aCBvZiBtZXNzYWdlIC0gKG5vdCBpbmNsdWRpbmcgQnl0ZSAwKQo+ ICAgKgo+ICAgKi8KPiArCj4gK2VudW0gZnRkaV9mdHhfY2J1c19tdXggewo+ICsJRlRYX0NCVVNf TVVYX1RSSVNUQVRFLAo+ICsJRlRYX0NCVVNfTVVYX1JYTEVELAo+ICsJRlRYX0NCVVNfTVVYX1RY TEVELAo+ICsJRlRYX0NCVVNfTVVYX1RYUlhMRUQsCj4gKwlGVFhfQ0JVU19NVVhfUFdSRU4sCj4g KwlGVFhfQ0JVU19NVVhfU0xFRVAsCj4gKwlGVFhfQ0JVU19NVVhfRFJJVkUwLAo+ICsJRlRYX0NC VVNfTVVYX0RSSVZFMSwKPiArCUZUWF9DQlVTX01VWF9JTywKPiArCUZUWF9DQlVTX01VWF9UWERF TiwKPiArCUZUWF9DQlVTX01VWF9DTEsyNCwKPiArCUZUWF9DQlVTX01VWF9DTEsxMiwKPiArCUZU WF9DQlVTX01VWF9DTEs2LAo+ICsJRlRYX0NCVVNfTVVYX0JDRF9DSEFSR0VSLAo+ICsJRlRYX0NC VVNfTVVYX0JDRF9DSEFSR0VSX04sCj4gKwlGVFhfQ0JVU19NVVhfSTJDX1RYRSwKPiArCUZUWF9D QlVTX01VWF9JMkNfUlhGLAo+ICsJRlRYX0NCVVNfTVVYX1ZCVVNfU0VOU0UsCj4gKwlGVFhfQ0JV U19NVVhfQklUQkFOR19XUiwKPiArCUZUWF9DQlVTX01VWF9CSVRCQU5HX1JELAo+ICsJRlRYX0NC VVNfTVVYX1RJTUVTVEFNUCwKPiArCUZUWF9DQlVTX01VWF9LRUVQX0FXQUtFCj4gK307CgpTaW5j ZSB0aGUgdmFsdWVzIGFyZSBub3QgYXJiaXRyYXJ5LCB0aGV5IG5lZWQgdG8gYmUgaW5pdGlhbGlz ZWQuIE1pZ2h0CmJlIGJldHRlciB0byBqdXN0IHVzZSBkZWZpbmVzLgoKQW5kIHdlIHdpbGwgcHJv YmFibHkgb25seSBldmVyIG5lZWQgRlRYX0NCVVNfTVVYX0lPLCBzbyBqdXN0IGFkZGluZyB0aGF0 Cm9uZSBzaG91bGQgZG8gZm9yIG5vdy4K