From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: Re: [PATCH RFC 2/2] virtio_ring: support packed ring Date: Fri, 16 Mar 2018 12:03:25 +0800 Message-ID: <8f73267a-e20e-de64-d8e0-3fd608dbf368@redhat.com> References: <20180223111801.15240-1-tiwei.bie@intel.com> <20180223111801.15240-3-tiwei.bie@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Cc: wexu@redhat.com To: Tiwei Bie , mst@redhat.com, virtualization@lists.linux-foundation.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org Return-path: In-Reply-To: <20180223111801.15240-3-tiwei.bie@intel.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org List-Id: netdev.vger.kernel.org CgpPbiAyMDE45bm0MDLmnIgyM+aXpSAxOToxOCwgVGl3ZWkgQmllIHdyb3RlOgo+IFNpZ25lZC1v ZmYtYnk6IFRpd2VpIEJpZSA8dGl3ZWkuYmllQGludGVsLmNvbT4KPiAtLS0KPiAgIGRyaXZlcnMv dmlydGlvL3ZpcnRpb19yaW5nLmMgfCA2OTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKy0tLS0tLQo+ICAgaW5jbHVkZS9saW51eC92aXJ0aW9fcmluZy5oICB8ICAgOCArLQo+ ICAgMiBmaWxlcyBjaGFuZ2VkLCA2MTggaW5zZXJ0aW9ucygrKSwgODkgZGVsZXRpb25zKC0pCj4K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYyBiL2RyaXZlcnMvdmly dGlvL3ZpcnRpb19yaW5nLmMKPiBpbmRleCBlYjMwZjNlMDlhNDcuLjM5Mzc3OGEyZjgwOSAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCj4gKysrIGIvZHJpdmVycy92 aXJ0aW8vdmlydGlvX3JpbmcuYwo+IEBAIC01OCwxNCArNTgsMTQgQEAKPiAgIAo+ICAgc3RydWN0 IHZyaW5nX2Rlc2Nfc3RhdGUgewo+ICAgCXZvaWQgKmRhdGE7CQkJLyogRGF0YSBmb3IgY2FsbGJh Y2suICovCj4gLQlzdHJ1Y3QgdnJpbmdfZGVzYyAqaW5kaXJfZGVzYzsJLyogSW5kaXJlY3QgZGVz Y3JpcHRvciwgaWYgYW55LiAqLwo+ICsJdm9pZCAqaW5kaXJfZGVzYzsJCS8qIEluZGlyZWN0IGRl c2NyaXB0b3IsIGlmIGFueS4gKi8KPiArCWludCBudW07CQkJLyogRGVzY3JpcHRvciBsaXN0IGxl bmd0aC4gKi8KPiAgIH07Cj4gICAKPiAgIHN0cnVjdCB2cmluZ192aXJ0cXVldWUgewo+ICAgCXN0 cnVjdCB2aXJ0cXVldWUgdnE7Cj4gICAKPiAtCS8qIEFjdHVhbCBtZW1vcnkgbGF5b3V0IGZvciB0 aGlzIHF1ZXVlICovCj4gLQlzdHJ1Y3QgdnJpbmcgdnJpbmc7Cj4gKwlib29sIHBhY2tlZDsKPiAg IAo+ICAgCS8qIENhbiB3ZSB1c2Ugd2VhayBiYXJyaWVycz8gKi8KPiAgIAlib29sIHdlYWtfYmFy cmllcnM7Cj4gQEAgLTg3LDExICs4NywyOCBAQCBzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlIHsKPiAg IAkvKiBMYXN0IHVzZWQgaW5kZXggd2UndmUgc2Vlbi4gKi8KPiAgIAl1MTYgbGFzdF91c2VkX2lk eDsKPiAgIAo+IC0JLyogTGFzdCB3cml0dGVuIHZhbHVlIHRvIGF2YWlsLT5mbGFncyAqLwo+IC0J dTE2IGF2YWlsX2ZsYWdzX3NoYWRvdzsKPiAtCj4gLQkvKiBMYXN0IHdyaXR0ZW4gdmFsdWUgdG8g YXZhaWwtPmlkeCBpbiBndWVzdCBieXRlIG9yZGVyICovCj4gLQl1MTYgYXZhaWxfaWR4X3NoYWRv dzsKPiArCXVuaW9uIHsKPiArCQkvKiBBdmFpbGFibGUgZm9yIHNwbGl0IHJpbmcgKi8KPiArCQlz dHJ1Y3Qgewo+ICsJCQkvKiBBY3R1YWwgbWVtb3J5IGxheW91dCBmb3IgdGhpcyBxdWV1ZSAqLwo+ ICsJCQlzdHJ1Y3QgdnJpbmcgdnJpbmc7Cj4gKwo+ICsJCQkvKiBMYXN0IHdyaXR0ZW4gdmFsdWUg dG8gYXZhaWwtPmZsYWdzICovCj4gKwkJCXUxNiBhdmFpbF9mbGFnc19zaGFkb3c7Cj4gKwo+ICsJ CQkvKiBMYXN0IHdyaXR0ZW4gdmFsdWUgdG8gYXZhaWwtPmlkeCBpbgo+ICsJCQkgKiBndWVzdCBi eXRlIG9yZGVyICovCj4gKwkJCXUxNiBhdmFpbF9pZHhfc2hhZG93Owo+ICsJCX07Cj4gKwo+ICsJ CS8qIEF2YWlsYWJsZSBmb3IgcGFja2VkIHJpbmcgKi8KPiArCQlzdHJ1Y3Qgewo+ICsJCQkvKiBB Y3R1YWwgbWVtb3J5IGxheW91dCBmb3IgdGhpcyBxdWV1ZSAqLwo+ICsJCQlzdHJ1Y3QgdnJpbmdf cGFja2VkIHZyaW5nX3BhY2tlZDsKPiArCQkJdTggd3JhcF9jb3VudGVyIDogMTsKPiArCQkJYm9v bCBjaGFpbmluZzsKPiArCQl9Owo+ICsJfTsKPiAgIAo+ICAgCS8qIEhvdyB0byBub3RpZnkgb3Ro ZXIgc2lkZS4gRklYTUU6IGNvbW1vbmFsaXplIGhjYWxscyEgKi8KPiAgIAlib29sICgqbm90aWZ5 KShzdHJ1Y3QgdmlydHF1ZXVlICp2cSk7Cj4gQEAgLTIwMSwyNiArMjE4LDM3IEBAIHN0YXRpYyBk bWFfYWRkcl90IHZyaW5nX21hcF9zaW5nbGUoY29uc3Qgc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAq dnEsCj4gICAJCQkgICAgICBjcHVfYWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKPiAgIH0KPiAgIAo+ IC1zdGF0aWMgdm9pZCB2cmluZ191bm1hcF9vbmUoY29uc3Qgc3RydWN0IHZyaW5nX3ZpcnRxdWV1 ZSAqdnEsCj4gLQkJCSAgICBzdHJ1Y3QgdnJpbmdfZGVzYyAqZGVzYykKPiArc3RhdGljIHZvaWQg dnJpbmdfdW5tYXBfb25lKGNvbnN0IHN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxLCB2b2lkICpf ZGVzYykKPiAgIHsKCkxldCdzIHNwbGl0IHRoZSBoZWxwZXJzIHRvIHBhY2tlZC9zcGxpdCB2ZXJz aW9uIGxpa2Ugb3RoZXIgaGVscGVycz8gCihDb25zaWRlciB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5 IGtub3duIHRoZSB0eXBlIG9mIHZxKS4KCj4gKwl1NjQgYWRkcjsKPiArCXUzMiBsZW47Cj4gICAJ dTE2IGZsYWdzOwo+ICAgCj4gICAJaWYgKCF2cmluZ191c2VfZG1hX2FwaSh2cS0+dnEudmRldikp Cj4gICAJCXJldHVybjsKPiAgIAo+IC0JZmxhZ3MgPSB2aXJ0aW8xNl90b19jcHUodnEtPnZxLnZk ZXYsIGRlc2MtPmZsYWdzKTsKPiArCWlmICh2cS0+cGFja2VkKSB7Cj4gKwkJc3RydWN0IHZyaW5n X3BhY2tlZF9kZXNjICpkZXNjID0gX2Rlc2M7Cj4gKwo+ICsJCWFkZHIgPSB2aXJ0aW82NF90b19j cHUodnEtPnZxLnZkZXYsIGRlc2MtPmFkZHIpOwo+ICsJCWxlbiA9IHZpcnRpbzMyX3RvX2NwdSh2 cS0+dnEudmRldiwgZGVzYy0+bGVuKTsKPiArCQlmbGFncyA9IHZpcnRpbzE2X3RvX2NwdSh2cS0+ dnEudmRldiwgZGVzYy0+ZmxhZ3MpOwo+ICsJfSBlbHNlIHsKPiArCQlzdHJ1Y3QgdnJpbmdfZGVz YyAqZGVzYyA9IF9kZXNjOwo+ICsKPiArCQlhZGRyID0gdmlydGlvNjRfdG9fY3B1KHZxLT52cS52 ZGV2LCBkZXNjLT5hZGRyKTsKPiArCQlsZW4gPSB2aXJ0aW8zMl90b19jcHUodnEtPnZxLnZkZXYs IGRlc2MtPmxlbik7Cj4gKwkJZmxhZ3MgPSB2aXJ0aW8xNl90b19jcHUodnEtPnZxLnZkZXYsIGRl c2MtPmZsYWdzKTsKPiArCX0KPiAgIAo+ICAgCWlmIChmbGFncyAmIFZSSU5HX0RFU0NfRl9JTkRJ UkVDVCkgewo+ICAgCQlkbWFfdW5tYXBfc2luZ2xlKHZyaW5nX2RtYV9kZXYodnEpLAo+IC0JCQkJ IHZpcnRpbzY0X3RvX2NwdSh2cS0+dnEudmRldiwgZGVzYy0+YWRkciksCj4gLQkJCQkgdmlydGlv MzJfdG9fY3B1KHZxLT52cS52ZGV2LCBkZXNjLT5sZW4pLAo+ICsJCQkJIGFkZHIsIGxlbiwKPiAg IAkJCQkgKGZsYWdzICYgVlJJTkdfREVTQ19GX1dSSVRFKSA/Cj4gICAJCQkJIERNQV9GUk9NX0RF VklDRSA6IERNQV9UT19ERVZJQ0UpOwo+ICAgCX0gZWxzZSB7Cj4gICAJCWRtYV91bm1hcF9wYWdl KHZyaW5nX2RtYV9kZXYodnEpLAo+IC0JCQkgICAgICAgdmlydGlvNjRfdG9fY3B1KHZxLT52cS52 ZGV2LCBkZXNjLT5hZGRyKSwKPiAtCQkJICAgICAgIHZpcnRpbzMyX3RvX2NwdSh2cS0+dnEudmRl diwgZGVzYy0+bGVuKSwKPiArCQkJICAgICAgIGFkZHIsIGxlbiwKPiAgIAkJCSAgICAgICAoZmxh Z3MgJiBWUklOR19ERVNDX0ZfV1JJVEUpID8KPiAgIAkJCSAgICAgICBETUFfRlJPTV9ERVZJQ0Ug OiBETUFfVE9fREVWSUNFKTsKPiAgIAl9Cj4gQEAgLTIzNSw4ICsyNjMsOSBAQCBzdGF0aWMgaW50 IHZyaW5nX21hcHBpbmdfZXJyb3IoY29uc3Qgc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEsCj4g ICAJcmV0dXJuIGRtYV9tYXBwaW5nX2Vycm9yKHZyaW5nX2RtYV9kZXYodnEpLCBhZGRyKTsKPiAg IH0KPiAgIAo+IC1zdGF0aWMgc3RydWN0IHZyaW5nX2Rlc2MgKmFsbG9jX2luZGlyZWN0KHN0cnVj dCB2aXJ0cXVldWUgKl92cSwKPiAtCQkJCQkgdW5zaWduZWQgaW50IHRvdGFsX3NnLCBnZnBfdCBn ZnApCj4gK3N0YXRpYyBzdHJ1Y3QgdnJpbmdfZGVzYyAqYWxsb2NfaW5kaXJlY3Rfc3BsaXQoc3Ry dWN0IHZpcnRxdWV1ZSAqX3ZxLAo+ICsJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdG90YWxfc2cs Cj4gKwkJCQkJICAgICAgIGdmcF90IGdmcCkKPiAgIHsKPiAgIAlzdHJ1Y3QgdnJpbmdfZGVzYyAq ZGVzYzsKPiAgIAl1bnNpZ25lZCBpbnQgaTsKPiBAQCAtMjU3LDE0ICsyODYsMzIgQEAgc3RhdGlj IHN0cnVjdCB2cmluZ19kZXNjICphbGxvY19pbmRpcmVjdChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEs Cj4gICAJcmV0dXJuIGRlc2M7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGlubGluZSBpbnQgdmlydHF1 ZXVlX2FkZChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEsCj4gLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qg KnNnc1tdLAo+IC0JCQkJdW5zaWduZWQgaW50IHRvdGFsX3NnLAo+IC0JCQkJdW5zaWduZWQgaW50 IG91dF9zZ3MsCj4gLQkJCQl1bnNpZ25lZCBpbnQgaW5fc2dzLAo+IC0JCQkJdm9pZCAqZGF0YSwK PiAtCQkJCXZvaWQgKmN0eCwKPiAtCQkJCWdmcF90IGdmcCkKPiArc3RhdGljIHN0cnVjdCB2cmlu Z19wYWNrZWRfZGVzYyAqYWxsb2NfaW5kaXJlY3RfcGFja2VkKHN0cnVjdCB2aXJ0cXVldWUgKl92 cSwKPiArCQkJCQkJICAgICAgIHVuc2lnbmVkIGludCB0b3RhbF9zZywKPiArCQkJCQkJICAgICAg IGdmcF90IGdmcCkKPiArewo+ICsJc3RydWN0IHZyaW5nX3BhY2tlZF9kZXNjICpkZXNjOwo+ICsK PiArCS8qCj4gKwkgKiBXZSByZXF1aXJlIGxvd21lbSBtYXBwaW5ncyBmb3IgdGhlIGRlc2NyaXB0 b3JzIGJlY2F1c2UKPiArCSAqIG90aGVyd2lzZSB2aXJ0X3RvX3BoeXMgd2lsbCBnaXZlIHVzIGJv Z3VzIGFkZHJlc3NlcyBpbiB0aGUKPiArCSAqIHZpcnRxdWV1ZS4KPiArCSAqLwo+ICsJZ2ZwICY9 IH5fX0dGUF9ISUdITUVNOwo+ICsKPiArCWRlc2MgPSBrbWFsbG9jKHRvdGFsX3NnICogc2l6ZW9m KHN0cnVjdCB2cmluZ19wYWNrZWRfZGVzYyksIGdmcCk7Cj4gKwo+ICsJcmV0dXJuIGRlc2M7Cj4g K30KPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IHZpcnRxdWV1ZV9hZGRfc3BsaXQoc3RydWN0IHZp cnRxdWV1ZSAqX3ZxLAo+ICsJCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ3NbXSwKPiAr CQkJCSAgICAgIHVuc2lnbmVkIGludCB0b3RhbF9zZywKPiArCQkJCSAgICAgIHVuc2lnbmVkIGlu dCBvdXRfc2dzLAo+ICsJCQkJICAgICAgdW5zaWduZWQgaW50IGluX3NncywKPiArCQkJCSAgICAg IHZvaWQgKmRhdGEsCj4gKwkJCQkgICAgICB2b2lkICpjdHgsCj4gKwkJCQkgICAgICBnZnBfdCBn ZnApCj4gICB7Cj4gICAJc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEgPSB0b192dnEoX3ZxKTsK PiAgIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwo+IEBAIC0zMDMsNyArMzUwLDcgQEAgc3RhdGlj IGlubGluZSBpbnQgdmlydHF1ZXVlX2FkZChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEsCj4gICAJLyog SWYgdGhlIGhvc3Qgc3VwcG9ydHMgaW5kaXJlY3QgZGVzY3JpcHRvciB0YWJsZXMsIGFuZCB3ZSBo YXZlIG11bHRpcGxlCj4gICAJICogYnVmZmVycywgdGhlbiBnbyBpbmRpcmVjdC4gRklYTUU6IHR1 bmUgdGhpcyB0aHJlc2hvbGQgKi8KPiAgIAlpZiAodnEtPmluZGlyZWN0ICYmIHRvdGFsX3NnID4g MSAmJiB2cS0+dnEubnVtX2ZyZWUpCj4gLQkJZGVzYyA9IGFsbG9jX2luZGlyZWN0KF92cSwgdG90 YWxfc2csIGdmcCk7Cj4gKwkJZGVzYyA9IGFsbG9jX2luZGlyZWN0X3NwbGl0KF92cSwgdG90YWxf c2csIGdmcCk7Cj4gICAJZWxzZSB7Cj4gICAJCWRlc2MgPSBOVUxMOwo+ICAgCQlXQVJOX09OX09O Q0UodG90YWxfc2cgPiB2cS0+dnJpbmcubnVtICYmICF2cS0+aW5kaXJlY3QpOwo+IEBAIC00Mzcs NiArNDg0LDI0MyBAQCBzdGF0aWMgaW5saW5lIGludCB2aXJ0cXVldWVfYWRkKHN0cnVjdCB2aXJ0 cXVldWUgKl92cSwKPiAgIAlyZXR1cm4gLUVJTzsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgaW5saW5l IGludCB2aXJ0cXVldWVfYWRkX3BhY2tlZChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEsCj4gKwkJCQkg ICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ3NbXSwKPiArCQkJCSAgICAgICB1bnNpZ25lZCBp bnQgdG90YWxfc2csCj4gKwkJCQkgICAgICAgdW5zaWduZWQgaW50IG91dF9zZ3MsCj4gKwkJCQkg ICAgICAgdW5zaWduZWQgaW50IGluX3NncywKPiArCQkJCSAgICAgICB2b2lkICpkYXRhLAo+ICsJ CQkJICAgICAgIHZvaWQgKmN0eCwKPiArCQkJCSAgICAgICBnZnBfdCBnZnApCj4gK3sKPiArCXN0 cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZxKF92cSk7Cj4gKwlzdHJ1Y3QgdnJpbmdf cGFja2VkX2Rlc2MgKmRlc2M7Cj4gKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwo+ICsJdW5zaWdu ZWQgaW50IGksIG4sIGRlc2NzX3VzZWQsIHVuaW5pdGlhbGl6ZWRfdmFyKHByZXYpLCBlcnJfaWR4 Owo+ICsJX192aXJ0aW8xNiB1bmluaXRpYWxpemVkX3ZhcihoZWFkX2ZsYWdzKSwgZmxhZ3M7Cj4g KwlpbnQgaGVhZCwgd3JhcF9jb3VudGVyOwo+ICsJYm9vbCBpbmRpcmVjdDsKPiArCj4gKwlTVEFS VF9VU0UodnEpOwo+ICsKPiArCUJVR19PTihkYXRhID09IE5VTEwpOwo+ICsJQlVHX09OKGN0eCAm JiB2cS0+aW5kaXJlY3QpOwo+ICsKPiArCWlmICh1bmxpa2VseSh2cS0+YnJva2VuKSkgewo+ICsJ CUVORF9VU0UodnEpOwo+ICsJCXJldHVybiAtRUlPOwo+ICsJfQo+ICsKPiArCWlmICh0b3RhbF9z ZyA+IDEgJiYgIXZxLT5jaGFpbmluZyAmJiAhdnEtPmluZGlyZWN0KSB7Cj4gKwkJRU5EX1VTRSh2 cSk7Cj4gKwkJcmV0dXJuIC1FTk9UU1VQUDsKPiArCX0KPiArCj4gKyNpZmRlZiBERUJVRwo+ICsJ ewo+ICsJCWt0aW1lX3Qgbm93ID0ga3RpbWVfZ2V0KCk7Cj4gKwo+ICsJCS8qIE5vIGtpY2sgb3Ig Z2V0LCB3aXRoIC4xIHNlY29uZCBiZXR3ZWVuPyAgV2Fybi4gKi8KPiArCQlpZiAodnEtPmxhc3Rf YWRkX3RpbWVfdmFsaWQpCj4gKwkJCVdBUk5fT04oa3RpbWVfdG9fbXMoa3RpbWVfc3ViKG5vdywg dnEtPmxhc3RfYWRkX3RpbWUpKQo+ICsJCQkJCSAgICA+IDEwMCk7Cj4gKwkJdnEtPmxhc3RfYWRk X3RpbWUgPSBub3c7Cj4gKwkJdnEtPmxhc3RfYWRkX3RpbWVfdmFsaWQgPSB0cnVlOwo+ICsJfQo+ ICsjZW5kaWYKPiArCj4gKwlCVUdfT04odG90YWxfc2cgPT0gMCk7Cj4gKwo+ICsJaGVhZCA9IHZx LT5mcmVlX2hlYWQ7Cj4gKwl3cmFwX2NvdW50ZXIgPSB2cS0+d3JhcF9jb3VudGVyOwo+ICsKPiAr CS8qIElmIHRoZSBob3N0IHN1cHBvcnRzIGluZGlyZWN0IGRlc2NyaXB0b3IgdGFibGVzLCBhbmQg d2UgaGF2ZSBtdWx0aXBsZQo+ICsJICogYnVmZmVycywgdGhlbiBnbyBpbmRpcmVjdC4gRklYTUU6 IHR1bmUgdGhpcyB0aHJlc2hvbGQgKi8KPiArCWlmICh2cS0+aW5kaXJlY3QgJiYgdG90YWxfc2cg PiAxICYmIHZxLT52cS5udW1fZnJlZSkKPiArCQlkZXNjID0gYWxsb2NfaW5kaXJlY3RfcGFja2Vk KF92cSwgdG90YWxfc2csIGdmcCk7Cj4gKwllbHNlIHsKPiArCQlkZXNjID0gTlVMTDsKPiArCQlX QVJOX09OX09OQ0UodG90YWxfc2cgPiB2cS0+dnJpbmcubnVtICYmICF2cS0+aW5kaXJlY3QpOwo+ ICsJfQo+ICsKPiArCWlmIChkZXNjKSB7Cj4gKwkJLyogVXNlIGEgc2luZ2xlIGJ1ZmZlciB3aGlj aCBkb2Vzbid0IGNvbnRpbnVlICovCj4gKwkJaW5kaXJlY3QgPSB0cnVlOwo+ICsJCS8qIFNldCB1 cCByZXN0IHRvIHVzZSB0aGlzIGluZGlyZWN0IHRhYmxlLiAqLwo+ICsJCWkgPSAwOwo+ICsJCWRl c2NzX3VzZWQgPSAxOwo+ICsJfSBlbHNlIHsKPiArCQlpbmRpcmVjdCA9IGZhbHNlOwo+ICsJCWRl c2MgPSB2cS0+dnJpbmdfcGFja2VkLmRlc2M7Cj4gKwkJaSA9IGhlYWQ7Cj4gKwkJZGVzY3NfdXNl ZCA9IHRvdGFsX3NnOwo+ICsKPiArCQlpZiAodG90YWxfc2cgPiAxICYmICF2cS0+Y2hhaW5pbmcp IHsKPiArCQkJRU5EX1VTRSh2cSk7Cj4gKwkJCXJldHVybiAtRU5PVFNVUFA7Cj4gKwkJfQo+ICsJ fQo+ICsKPiArCWlmICh2cS0+dnEubnVtX2ZyZWUgPCBkZXNjc191c2VkKSB7Cj4gKwkJcHJfZGVi dWcoIkNhbid0IGFkZCBidWYgbGVuICVpIC0gYXZhaWwgPSAlaVxuIiwKPiArCQkJIGRlc2NzX3Vz ZWQsIHZxLT52cS5udW1fZnJlZSk7Cj4gKwkJLyogRklYTUU6IGZvciBoaXN0b3JpY2FsIHJlYXNv bnMsIHdlIGZvcmNlIGEgbm90aWZ5IGhlcmUgaWYKPiArCQkgKiB0aGVyZSBhcmUgb3V0Z29pbmcg cGFydHMgdG8gdGhlIGJ1ZmZlci4gIFByZXN1bWFibHkgdGhlCj4gKwkJICogaG9zdCBzaG91bGQg c2VydmljZSB0aGUgcmluZyBBU0FQLiAqLwo+ICsJCWlmIChvdXRfc2dzKQo+ICsJCQl2cS0+bm90 aWZ5KCZ2cS0+dnEpOwo+ICsJCWlmIChpbmRpcmVjdCkKPiArCQkJa2ZyZWUoZGVzYyk7Cj4gKwkJ RU5EX1VTRSh2cSk7Cj4gKwkJcmV0dXJuIC1FTk9TUEM7Cj4gKwl9Cj4gKwo+ICsJZm9yIChuID0g MDsgbiA8IG91dF9zZ3M7IG4rKykgewo+ICsJCWZvciAoc2cgPSBzZ3Nbbl07IHNnOyBzZyA9IHNn X25leHQoc2cpKSB7Cj4gKwkJCWRtYV9hZGRyX3QgYWRkciA9IHZyaW5nX21hcF9vbmVfc2codnEs IHNnLCBETUFfVE9fREVWSUNFKTsKPiArCQkJaWYgKHZyaW5nX21hcHBpbmdfZXJyb3IodnEsIGFk ZHIpKQo+ICsJCQkJZ290byB1bm1hcF9yZWxlYXNlOwo+ICsKPiArCQkJZmxhZ3MgPSBjcHVfdG9f dmlydGlvMTYoX3ZxLT52ZGV2LCBWUklOR19ERVNDX0ZfTkVYVCB8Cj4gKwkJCQkJVlJJTkdfREVT Q19GX0FWQUlMKHZxLT53cmFwX2NvdW50ZXIpIHwKPiArCQkJCQlWUklOR19ERVNDX0ZfVVNFRCgh dnEtPndyYXBfY291bnRlcikpOwo+ICsJCQlpZiAoIWluZGlyZWN0ICYmIGkgPT0gaGVhZCkKPiAr CQkJCWhlYWRfZmxhZ3MgPSBmbGFnczsKPiArCQkJZWxzZQo+ICsJCQkJZGVzY1tpXS5mbGFncyA9 IGZsYWdzOwo+ICsKPiArCQkJZGVzY1tpXS5hZGRyID0gY3B1X3RvX3ZpcnRpbzY0KF92cS0+dmRl diwgYWRkcik7Cj4gKwkJCWRlc2NbaV0ubGVuID0gY3B1X3RvX3ZpcnRpbzMyKF92cS0+dmRldiwg c2ctPmxlbmd0aCk7Cj4gKwkJCWRlc2NbaV0uaWQgPSBjcHVfdG9fdmlydGlvMzIoX3ZxLT52ZGV2 LCBoZWFkKTsKCklmIGl0J3MgYSBwYXJ0IG9mIGNoYWluLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhp cyBmb3IgbGFzdCBidWZmZXIgSSB0aGluay4KCj4gKwkJCXByZXYgPSBpOwo+ICsJCQlpKys7CgpJ dCBsb29rcyB0byBtZSBwcmV2IGlzIGFsd2F5cyBpIC0gMT8KCj4gKwkJCWlmICghaW5kaXJlY3Qg JiYgaSA+PSB2cS0+dnJpbmdfcGFja2VkLm51bSkgewo+ICsJCQkJaSA9IDA7Cj4gKwkJCQl2cS0+ d3JhcF9jb3VudGVyIF49IDE7Cj4gKwkJCX0KPiArCQl9Cj4gKwl9Cj4gKwlmb3IgKDsgbiA8IChv dXRfc2dzICsgaW5fc2dzKTsgbisrKSB7Cj4gKwkJZm9yIChzZyA9IHNnc1tuXTsgc2c7IHNnID0g c2dfbmV4dChzZykpIHsKPiArCQkJZG1hX2FkZHJfdCBhZGRyID0gdnJpbmdfbWFwX29uZV9zZyh2 cSwgc2csIERNQV9GUk9NX0RFVklDRSk7Cj4gKwkJCWlmICh2cmluZ19tYXBwaW5nX2Vycm9yKHZx LCBhZGRyKSkKPiArCQkJCWdvdG8gdW5tYXBfcmVsZWFzZTsKPiArCj4gKwkJCWZsYWdzID0gY3B1 X3RvX3ZpcnRpbzE2KF92cS0+dmRldiwgVlJJTkdfREVTQ19GX05FWFQgfAo+ICsJCQkJCVZSSU5H X0RFU0NfRl9XUklURSB8Cj4gKwkJCQkJVlJJTkdfREVTQ19GX0FWQUlMKHZxLT53cmFwX2NvdW50 ZXIpIHwKPiArCQkJCQlWUklOR19ERVNDX0ZfVVNFRCghdnEtPndyYXBfY291bnRlcikpOwo+ICsJ CQlpZiAoIWluZGlyZWN0ICYmIGkgPT0gaGVhZCkKPiArCQkJCWhlYWRfZmxhZ3MgPSBmbGFnczsK PiArCQkJZWxzZQo+ICsJCQkJZGVzY1tpXS5mbGFncyA9IGZsYWdzOwo+ICsKPiArCQkJZGVzY1tp XS5hZGRyID0gY3B1X3RvX3ZpcnRpbzY0KF92cS0+dmRldiwgYWRkcik7Cj4gKwkJCWRlc2NbaV0u bGVuID0gY3B1X3RvX3ZpcnRpbzMyKF92cS0+dmRldiwgc2ctPmxlbmd0aCk7Cj4gKwkJCWRlc2Nb aV0uaWQgPSBjcHVfdG9fdmlydGlvMzIoX3ZxLT52ZGV2LCBoZWFkKTsKPiArCQkJcHJldiA9IGk7 Cj4gKwkJCWkrKzsKPiArCQkJaWYgKCFpbmRpcmVjdCAmJiBpID49IHZxLT52cmluZ19wYWNrZWQu bnVtKSB7Cj4gKwkJCQlpID0gMDsKPiArCQkJCXZxLT53cmFwX2NvdW50ZXIgXj0gMTsKPiArCQkJ fQo+ICsJCX0KPiArCX0KPiArCS8qIExhc3Qgb25lIGRvZXNuJ3QgY29udGludWUuICovCj4gKwlp ZiAoIWluZGlyZWN0ICYmIChoZWFkICsgMSkgJSB2cS0+dnJpbmdfcGFja2VkLm51bSA9PSBpKQo+ ICsJCWhlYWRfZmxhZ3MgJj0gY3B1X3RvX3ZpcnRpbzE2KF92cS0+dmRldiwgflZSSU5HX0RFU0Nf Rl9ORVhUKTsKCkkgY2FuJ3QgZ2V0IHRoZSB3aHkgd2UgbmVlZCB0aGlzIGhlcmUuCgo+ICsJZWxz ZQo+ICsJCWRlc2NbcHJldl0uZmxhZ3MgJj0gY3B1X3RvX3ZpcnRpbzE2KF92cS0+dmRldiwgflZS SU5HX0RFU0NfRl9ORVhUKTsKPiArCj4gKwlpZiAoaW5kaXJlY3QpIHsKPiArCQkvKiBGSVhNRTog dG8gYmUgaW1wbGVtZW50ZWQgKi8KPiArCj4gKwkJLyogTm93IHRoYXQgdGhlIGluZGlyZWN0IHRh YmxlIGlzIGZpbGxlZCBpbiwgbWFwIGl0LiAqLwo+ICsJCWRtYV9hZGRyX3QgYWRkciA9IHZyaW5n X21hcF9zaW5nbGUoCj4gKwkJCXZxLCBkZXNjLCB0b3RhbF9zZyAqIHNpemVvZihzdHJ1Y3QgdnJp bmdfcGFja2VkX2Rlc2MpLAo+ICsJCQlETUFfVE9fREVWSUNFKTsKPiArCQlpZiAodnJpbmdfbWFw cGluZ19lcnJvcih2cSwgYWRkcikpCj4gKwkJCWdvdG8gdW5tYXBfcmVsZWFzZTsKPiArCj4gKwkJ aGVhZF9mbGFncyA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIFZSSU5HX0RFU0NfRl9JTkRJ UkVDVCB8Cj4gKwkJCQkJICAgICBWUklOR19ERVNDX0ZfQVZBSUwod3JhcF9jb3VudGVyKSB8Cj4g KwkJCQkJICAgICBWUklOR19ERVNDX0ZfVVNFRCghd3JhcF9jb3VudGVyKSk7Cj4gKwkJdnEtPnZy aW5nX3BhY2tlZC5kZXNjW2hlYWRdLmFkZHIgPSBjcHVfdG9fdmlydGlvNjQoX3ZxLT52ZGV2LCBh ZGRyKTsKPiArCQl2cS0+dnJpbmdfcGFja2VkLmRlc2NbaGVhZF0ubGVuID0gY3B1X3RvX3ZpcnRp bzMyKF92cS0+dmRldiwKPiArCQkJCXRvdGFsX3NnICogc2l6ZW9mKHN0cnVjdCB2cmluZ19wYWNr ZWRfZGVzYykpOwo+ICsJCXZxLT52cmluZ19wYWNrZWQuZGVzY1toZWFkXS5pZCA9IGNwdV90b192 aXJ0aW8zMihfdnEtPnZkZXYsIGhlYWQpOwo+ICsJfQo+ICsKPiArCS8qIFdlJ3JlIHVzaW5nIHNv bWUgYnVmZmVycyBmcm9tIHRoZSBmcmVlIGxpc3QuICovCj4gKwl2cS0+dnEubnVtX2ZyZWUgLT0g ZGVzY3NfdXNlZDsKPiArCj4gKwkvKiBVcGRhdGUgZnJlZSBwb2ludGVyICovCj4gKwlpZiAoaW5k aXJlY3QpIHsKPiArCQluID0gaGVhZCArIDE7Cj4gKwkJaWYgKG4gPj0gdnEtPnZyaW5nX3BhY2tl ZC5udW0pIHsKPiArCQkJbiA9IDA7Cj4gKwkJCXZxLT53cmFwX2NvdW50ZXIgXj0gMTsKPiArCQl9 Cj4gKwkJdnEtPmZyZWVfaGVhZCA9IG47CgpkZXRhY2hfYnVmX3BhY2tlZCgpIGRvZXMgbm90IGV2 ZW4gdG91Y2ggZnJlZV9oZWFkIGhlcmUsIHNvIG5lZWQgdG8gCmV4cGxhaW4gaXRzIG1lYW5pbmcg Zm9yIHBhY2tlZCByaW5nLgoKPiArCX0gZWxzZQo+ICsJCXZxLT5mcmVlX2hlYWQgPSBpOwoKSUQg aXMgb25seSB2YWxpZCBpbiB0aGUgbGFzdCBkZXNjcmlwdG9yIGluIHRoZSBsaXN0LCBzbyBoZWFk ICsgMSBzaG91bGQgCmJlIG9rIHRvbz8KCj4gKwo+ICsJLyogU3RvcmUgdG9rZW4gYW5kIGluZGly ZWN0IGJ1ZmZlciBzdGF0ZS4gKi8KPiArCXZxLT5kZXNjX3N0YXRlW2hlYWRdLm51bSA9IGRlc2Nz X3VzZWQ7Cj4gKwl2cS0+ZGVzY19zdGF0ZVtoZWFkXS5kYXRhID0gZGF0YTsKPiArCWlmIChpbmRp cmVjdCkKPiArCQl2cS0+ZGVzY19zdGF0ZVtoZWFkXS5pbmRpcl9kZXNjID0gZGVzYzsKPiArCWVs c2UKPiArCQl2cS0+ZGVzY19zdGF0ZVtoZWFkXS5pbmRpcl9kZXNjID0gY3R4Owo+ICsKPiArCXZp cnRpb193bWIodnEtPndlYWtfYmFycmllcnMpOwoKTGV0J3MgYWRkIGEgY29tbWVudCB0byBleHBs YWluIHRoZSBiYXJyaWVyIGhlcmUuCgo+ICsJdnEtPnZyaW5nX3BhY2tlZC5kZXNjW2hlYWRdLmZs YWdzID0gaGVhZF9mbGFnczsKPiArCXZxLT5udW1fYWRkZWQrKzsKPiArCj4gKwlwcl9kZWJ1Zygi QWRkZWQgYnVmZmVyIGhlYWQgJWkgdG8gJXBcbiIsIGhlYWQsIHZxKTsKPiArCUVORF9VU0UodnEp Owo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArdW5tYXBfcmVsZWFzZToKPiArCWVycl9pZHggPSBp Owo+ICsJaSA9IGhlYWQ7Cj4gKwo+ICsJZm9yIChuID0gMDsgbiA8IHRvdGFsX3NnOyBuKyspIHsK PiArCQlpZiAoaSA9PSBlcnJfaWR4KQo+ICsJCQlicmVhazsKPiArCQl2cmluZ191bm1hcF9vbmUo dnEsICZkZXNjW2ldKTsKPiArCQlpKys7Cj4gKwkJaWYgKCFpbmRpcmVjdCAmJiBpID49IHZxLT52 cmluZ19wYWNrZWQubnVtKQo+ICsJCQlpID0gMDsKPiArCX0KPiArCj4gKwl2cS0+d3JhcF9jb3Vu dGVyID0gd3JhcF9jb3VudGVyOwo+ICsKPiArCWlmIChpbmRpcmVjdCkKPiArCQlrZnJlZShkZXNj KTsKPiArCj4gKwlFTkRfVVNFKHZxKTsKPiArCXJldHVybiAtRUlPOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW5saW5lIGludCB2aXJ0cXVldWVfYWRkKHN0cnVjdCB2aXJ0cXVldWUgKl92cSwKPiArCQkJ CXN0cnVjdCBzY2F0dGVybGlzdCAqc2dzW10sCj4gKwkJCQl1bnNpZ25lZCBpbnQgdG90YWxfc2cs Cj4gKwkJCQl1bnNpZ25lZCBpbnQgb3V0X3NncywKPiArCQkJCXVuc2lnbmVkIGludCBpbl9zZ3Ms Cj4gKwkJCQl2b2lkICpkYXRhLAo+ICsJCQkJdm9pZCAqY3R4LAo+ICsJCQkJZ2ZwX3QgZ2ZwKQo+ ICt7Cj4gKwlzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSA9IHRvX3Z2cShfdnEpOwo+ICsKPiAr CXJldHVybiB2cS0+cGFja2VkID8gdmlydHF1ZXVlX2FkZF9wYWNrZWQoX3ZxLCBzZ3MsIHRvdGFs X3NnLCBvdXRfc2dzLAo+ICsJCQkJCQkgaW5fc2dzLCBkYXRhLCBjdHgsIGdmcCkgOgo+ICsJCQkg ICAgdmlydHF1ZXVlX2FkZF9zcGxpdChfdnEsIHNncywgdG90YWxfc2csIG91dF9zZ3MsCj4gKwkJ CQkJCWluX3NncywgZGF0YSwgY3R4LCBnZnApOwo+ICt9Cj4gKwo+ICAgLyoqCj4gICAgKiB2aXJ0 cXVldWVfYWRkX3NncyAtIGV4cG9zZSBidWZmZXJzIHRvIG90aGVyIGVuZAo+ICAgICogQHZxOiB0 aGUgc3RydWN0IHZpcnRxdWV1ZSB3ZSdyZSB0YWxraW5nIGFib3V0Lgo+IEBAIC01NjEsNiArODQ1 LDEyIEBAIGJvb2wgdmlydHF1ZXVlX2tpY2tfcHJlcGFyZShzdHJ1Y3QgdmlydHF1ZXVlICpfdnEp Cj4gICAJICogZXZlbnQuICovCj4gICAJdmlydGlvX21iKHZxLT53ZWFrX2JhcnJpZXJzKTsKPiAg IAo+ICsJaWYgKHZxLT5wYWNrZWQpIHsKPiArCQkvKiBGSVhNRTogdG8gYmUgaW1wbGVtZW50ZWQg Ki8KPiArCQluZWVkc19raWNrID0gdHJ1ZTsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gICAJ b2xkID0gdnEtPmF2YWlsX2lkeF9zaGFkb3cgLSB2cS0+bnVtX2FkZGVkOwo+ICAgCW5ldyA9IHZx LT5hdmFpbF9pZHhfc2hhZG93Owo+ICAgCXZxLT5udW1fYWRkZWQgPSAwOwo+IEBAIC01NzksNiAr ODY5LDggQEAgYm9vbCB2aXJ0cXVldWVfa2lja19wcmVwYXJlKHN0cnVjdCB2aXJ0cXVldWUgKl92 cSkKPiAgIAl9IGVsc2Ugewo+ICAgCQluZWVkc19raWNrID0gISh2cS0+dnJpbmcudXNlZC0+Zmxh Z3MgJiBjcHVfdG9fdmlydGlvMTYoX3ZxLT52ZGV2LCBWUklOR19VU0VEX0ZfTk9fTk9USUZZKSk7 Cj4gICAJfQo+ICsKPiArb3V0Ogo+ICAgCUVORF9VU0UodnEpOwo+ICAgCXJldHVybiBuZWVkc19r aWNrOwo+ICAgfQo+IEBAIC02MjgsOCArOTIwLDggQEAgYm9vbCB2aXJ0cXVldWVfa2ljayhzdHJ1 Y3QgdmlydHF1ZXVlICp2cSkKPiAgIH0KPiAgIEVYUE9SVF9TWU1CT0xfR1BMKHZpcnRxdWV1ZV9r aWNrKTsKPiAgIAo+IC1zdGF0aWMgdm9pZCBkZXRhY2hfYnVmKHN0cnVjdCB2cmluZ192aXJ0cXVl dWUgKnZxLCB1bnNpZ25lZCBpbnQgaGVhZCwKPiAtCQkgICAgICAgdm9pZCAqKmN0eCkKPiArc3Rh dGljIHZvaWQgZGV0YWNoX2J1Zl9zcGxpdChzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSwgdW5z aWduZWQgaW50IGhlYWQsCj4gKwkJCSAgICAgdm9pZCAqKmN0eCkKPiAgIHsKPiAgIAl1bnNpZ25l ZCBpbnQgaSwgajsKPiAgIAlfX3ZpcnRpbzE2IG5leHRmbGFnID0gY3B1X3RvX3ZpcnRpbzE2KHZx LT52cS52ZGV2LCBWUklOR19ERVNDX0ZfTkVYVCk7Cj4gQEAgLTY3NywyOSArOTY5LDgxIEBAIHN0 YXRpYyB2b2lkIGRldGFjaF9idWYoc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEsIHVuc2lnbmVk IGludCBoZWFkLAo+ICAgCX0KPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW5saW5lIGJvb2wgbW9yZV91 c2VkKGNvbnN0IHN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxKQo+ICtzdGF0aWMgdm9pZCBkZXRh Y2hfYnVmX3BhY2tlZChzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSwgdW5zaWduZWQgaW50IGhl YWQsCj4gKwkJCSAgICAgIHZvaWQgKipjdHgpCj4gK3sKPiArCXN0cnVjdCB2cmluZ19wYWNrZWRf ZGVzYyAqZGVzYzsKPiArCXVuc2lnbmVkIGludCBpLCBqOwo+ICsKPiArCS8qIENsZWFyIGRhdGEg cHRyLiAqLwo+ICsJdnEtPmRlc2Nfc3RhdGVbaGVhZF0uZGF0YSA9IE5VTEw7Cj4gKwo+ICsJaSA9 IGhlYWQ7Cj4gKwo+ICsJZm9yIChqID0gMDsgaiA8IHZxLT5kZXNjX3N0YXRlW2hlYWRdLm51bTsg aisrKSB7Cj4gKwkJZGVzYyA9ICZ2cS0+dnJpbmdfcGFja2VkLmRlc2NbaV07Cj4gKwkJdnJpbmdf dW5tYXBfb25lKHZxLCBkZXNjKTsKPiArCQlpKys7Cj4gKwkJaWYgKGkgPj0gdnEtPnZyaW5nX3Bh Y2tlZC5udW0pCj4gKwkJCWkgPSAwOwo+ICsJfQo+ICsKPiArCXZxLT52cS5udW1fZnJlZSArPSB2 cS0+ZGVzY19zdGF0ZVtoZWFkXS5udW07CgpJdCBsb29rcyB0byBtZSB2cS0+ZnJlZV9oZWFkIGdy b3dzIGFsd2F5cywgaG93IGNhbiB3ZSBtYWtlIHN1cmUgaXQgZG9lcyAKbm90IGV4Y2VlZHMgdnEu bnVtIGhlcmU/Cgo+ICsKPiArCWlmICh2cS0+aW5kaXJlY3QpIHsKPiArCQl1MzIgbGVuOwo+ICsK PiArCQlkZXNjID0gdnEtPmRlc2Nfc3RhdGVbaGVhZF0uaW5kaXJfZGVzYzsKPiArCQkvKiBGcmVl IHRoZSBpbmRpcmVjdCB0YWJsZSwgaWYgYW55LCBub3cgdGhhdCBpdCdzIHVubWFwcGVkLiAqLwo+ ICsJCWlmICghZGVzYykKPiArCQkJcmV0dXJuOwo+ICsKPiArCQlsZW4gPSB2aXJ0aW8zMl90b19j cHUodnEtPnZxLnZkZXYsCj4gKwkJCQkgICAgICB2cS0+dnJpbmdfcGFja2VkLmRlc2NbaGVhZF0u bGVuKTsKPiArCj4gKwkJQlVHX09OKCEodnEtPnZyaW5nX3BhY2tlZC5kZXNjW2hlYWRdLmZsYWdz ICYKPiArCQkJIGNwdV90b192aXJ0aW8xNih2cS0+dnEudmRldiwgVlJJTkdfREVTQ19GX0lORElS RUNUKSkpOwo+ICsJCUJVR19PTihsZW4gPT0gMCB8fCBsZW4gJSBzaXplb2Yoc3RydWN0IHZyaW5n X3BhY2tlZF9kZXNjKSk7Cj4gKwo+ICsJCWZvciAoaiA9IDA7IGogPCBsZW4gLyBzaXplb2Yoc3Ry dWN0IHZyaW5nX3BhY2tlZF9kZXNjKTsgaisrKQo+ICsJCQl2cmluZ191bm1hcF9vbmUodnEsICZk ZXNjW2pdKTsKPiArCj4gKwkJa2ZyZWUoZGVzYyk7Cj4gKwkJdnEtPmRlc2Nfc3RhdGVbaGVhZF0u aW5kaXJfZGVzYyA9IE5VTEw7Cj4gKwl9IGVsc2UgaWYgKGN0eCkgewo+ICsJCSpjdHggPSB2cS0+ ZGVzY19zdGF0ZVtoZWFkXS5pbmRpcl9kZXNjOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5s aW5lIGJvb2wgbW9yZV91c2VkX3NwbGl0KGNvbnN0IHN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZx KQo+ICAgewo+ICAgCXJldHVybiB2cS0+bGFzdF91c2VkX2lkeCAhPSB2aXJ0aW8xNl90b19jcHUo dnEtPnZxLnZkZXYsIHZxLT52cmluZy51c2VkLT5pZHgpOwo+ICAgfQo+ICAgCj4gLS8qKgo+IC0g KiB2aXJ0cXVldWVfZ2V0X2J1ZiAtIGdldCB0aGUgbmV4dCB1c2VkIGJ1ZmZlcgo+IC0gKiBAdnE6 IHRoZSBzdHJ1Y3QgdmlydHF1ZXVlIHdlJ3JlIHRhbGtpbmcgYWJvdXQuCj4gLSAqIEBsZW46IHRo ZSBsZW5ndGggd3JpdHRlbiBpbnRvIHRoZSBidWZmZXIKPiAtICoKPiAtICogSWYgdGhlIGRldmlj ZSB3cm90ZSBkYXRhIGludG8gdGhlIGJ1ZmZlciwgQGxlbiB3aWxsIGJlIHNldCB0byB0aGUKPiAt ICogYW1vdW50IHdyaXR0ZW4uICBUaGlzIG1lYW5zIHlvdSBkb24ndCBuZWVkIHRvIGNsZWFyIHRo ZSBidWZmZXIKPiAtICogYmVmb3JlaGFuZCB0byBlbnN1cmUgdGhlcmUncyBubyBkYXRhIGxlYWth Z2UgaW4gdGhlIGNhc2Ugb2Ygc2hvcnQKPiAtICogd3JpdGVzLgo+IC0gKgo+IC0gKiBDYWxsZXIg bXVzdCBlbnN1cmUgd2UgZG9uJ3QgY2FsbCB0aGlzIHdpdGggb3RoZXIgdmlydHF1ZXVlCj4gLSAq IG9wZXJhdGlvbnMgYXQgdGhlIHNhbWUgdGltZSAoZXhjZXB0IHdoZXJlIG5vdGVkKS4KPiAtICoK PiAtICogUmV0dXJucyBOVUxMIGlmIHRoZXJlIGFyZSBubyB1c2VkIGJ1ZmZlcnMsIG9yIHRoZSAi ZGF0YSIgdG9rZW4KPiAtICogaGFuZGVkIHRvIHZpcnRxdWV1ZV9hZGRfKigpLgo+IC0gKi8KPiAt dm9pZCAqdmlydHF1ZXVlX2dldF9idWZfY3R4KHN0cnVjdCB2aXJ0cXVldWUgKl92cSwgdW5zaWdu ZWQgaW50ICpsZW4sCj4gLQkJCSAgICB2b2lkICoqY3R4KQo+ICtzdGF0aWMgaW5saW5lIGJvb2wg bW9yZV91c2VkX3BhY2tlZChjb25zdCBzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSkKPiArewo+ ICsJdTE2IGxhc3RfdXNlZCwgZmxhZ3M7Cj4gKwlib29sIGF2YWlsLCB1c2VkOwo+ICsKPiArCWlm ICh2cS0+dnEubnVtX2ZyZWUgPT0gdnEtPnZyaW5nLm51bSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4g Kwo+ICsJbGFzdF91c2VkID0gdnEtPmxhc3RfdXNlZF9pZHg7Cj4gKwlmbGFncyA9IHZpcnRpbzE2 X3RvX2NwdSh2cS0+dnEudmRldiwKPiArCQkJCXZxLT52cmluZ19wYWNrZWQuZGVzY1tsYXN0X3Vz ZWRdLmZsYWdzKTsKPiArCWF2YWlsID0gZmxhZ3MgJiBWUklOR19ERVNDX0ZfQVZBSUwoMSk7Cj4g Kwl1c2VkID0gZmxhZ3MgJiBWUklOR19ERVNDX0ZfVVNFRCgxKTsKPiArCj4gKwlyZXR1cm4gYXZh aWwgPT0gdXNlZDsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBib29sIG1vcmVfdXNlZChjb25z dCBzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSkKPiArewo+ICsJcmV0dXJuIHZxLT5wYWNrZWQg PyBtb3JlX3VzZWRfcGFja2VkKHZxKSA6IG1vcmVfdXNlZF9zcGxpdCh2cSk7Cj4gK30KPiArCj4g K3ZvaWQgKnZpcnRxdWV1ZV9nZXRfYnVmX2N0eF9zcGxpdChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEs IHVuc2lnbmVkIGludCAqbGVuLAo+ICsJCQkJICB2b2lkICoqY3R4KQo+ICAgewo+ICAgCXN0cnVj dCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZxKF92cSk7Cj4gICAJdm9pZCAqcmV0Owo+IEBA IC03MzUsOSArMTA3OSw5IEBAIHZvaWQgKnZpcnRxdWV1ZV9nZXRfYnVmX2N0eChzdHJ1Y3Qgdmly dHF1ZXVlICpfdnEsIHVuc2lnbmVkIGludCAqbGVuLAo+ICAgCQlyZXR1cm4gTlVMTDsKPiAgIAl9 Cj4gICAKPiAtCS8qIGRldGFjaF9idWYgY2xlYXJzIGRhdGEsIHNvIGdyYWIgaXQgbm93LiAqLwo+ ICsJLyogZGV0YWNoX2J1Zl9zcGxpdCBjbGVhcnMgZGF0YSwgc28gZ3JhYiBpdCBub3cuICovCj4g ICAJcmV0ID0gdnEtPmRlc2Nfc3RhdGVbaV0uZGF0YTsKPiAtCWRldGFjaF9idWYodnEsIGksIGN0 eCk7Cj4gKwlkZXRhY2hfYnVmX3NwbGl0KHZxLCBpLCBjdHgpOwo+ICAgCXZxLT5sYXN0X3VzZWRf aWR4Kys7Cj4gICAJLyogSWYgd2UgZXhwZWN0IGFuIGludGVycnVwdCBmb3IgdGhlIG5leHQgZW50 cnksIHRlbGwgaG9zdAo+ICAgCSAqIGJ5IHdyaXRpbmcgZXZlbnQgaW5kZXggYW5kIGZsdXNoIG91 dCB0aGUgd3JpdGUgYmVmb3JlCj4gQEAgLTc1NCw2ICsxMDk4LDg3IEBAIHZvaWQgKnZpcnRxdWV1 ZV9nZXRfYnVmX2N0eChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEsIHVuc2lnbmVkIGludCAqbGVuLAo+ ICAgCUVORF9VU0UodnEpOwo+ICAgCXJldHVybiByZXQ7Cj4gICB9Cj4gKwo+ICt2b2lkICp2aXJ0 cXVldWVfZ2V0X2J1Zl9jdHhfcGFja2VkKHN0cnVjdCB2aXJ0cXVldWUgKl92cSwgdW5zaWduZWQg aW50ICpsZW4sCj4gKwkJCQkgICB2b2lkICoqY3R4KQo+ICt7Cj4gKwlzdHJ1Y3QgdnJpbmdfdmly dHF1ZXVlICp2cSA9IHRvX3Z2cShfdnEpOwo+ICsJdm9pZCAqcmV0Owo+ICsJdW5zaWduZWQgaW50 IGk7Cj4gKwl1MTYgbGFzdF91c2VkOwo+ICsKPiArCVNUQVJUX1VTRSh2cSk7Cj4gKwo+ICsJaWYg KHVubGlrZWx5KHZxLT5icm9rZW4pKSB7Cj4gKwkJRU5EX1VTRSh2cSk7Cj4gKwkJcmV0dXJuIE5V TEw7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFtb3JlX3VzZWQodnEpKSB7Cj4gKwkJcHJfZGVidWcoIk5v IG1vcmUgYnVmZmVycyBpbiBxdWV1ZVxuIik7Cj4gKwkJRU5EX1VTRSh2cSk7Cj4gKwkJcmV0dXJu IE5VTEw7Cj4gKwl9Cj4gKwo+ICsJLyogT25seSBnZXQgdXNlZCBhcnJheSBlbnRyaWVzIGFmdGVy IHRoZXkgaGF2ZSBiZWVuIGV4cG9zZWQgYnkgaG9zdC4gKi8KPiArCXZpcnRpb19ybWIodnEtPndl YWtfYmFycmllcnMpOwo+ICsKPiArCWxhc3RfdXNlZCA9IHZxLT5sYXN0X3VzZWRfaWR4Owo+ICsK PiArCWkgPSB2aXJ0aW8zMl90b19jcHUoX3ZxLT52ZGV2LCB2cS0+dnJpbmdfcGFja2VkLmRlc2Nb bGFzdF91c2VkXS5pZCk7Cj4gKwkqbGVuID0gdmlydGlvMzJfdG9fY3B1KF92cS0+dmRldiwgdnEt PnZyaW5nX3BhY2tlZC5kZXNjW2xhc3RfdXNlZF0ubGVuKTsKPiArCj4gKwlpZiAodW5saWtlbHko aSA+PSB2cS0+dnJpbmdfcGFja2VkLm51bSkpIHsKPiArCQlCQURfUklORyh2cSwgImlkICV1IG91 dCBvZiByYW5nZVxuIiwgaSk7Cj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwl9Cj4gKwlpZiAodW5saWtl bHkoIXZxLT5kZXNjX3N0YXRlW2ldLmRhdGEpKSB7Cj4gKwkJQkFEX1JJTkcodnEsICJpZCAldSBp cyBub3QgYSBoZWFkIVxuIiwgaSk7Cj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwl9Cj4gKwo+ICsJLyog ZGV0YWNoX2J1Zl9wYWNrZWQgY2xlYXJzIGRhdGEsIHNvIGdyYWIgaXQgbm93LiAqLwo+ICsJcmV0 ID0gdnEtPmRlc2Nfc3RhdGVbaV0uZGF0YTsKPiArCWRldGFjaF9idWZfcGFja2VkKHZxLCBpLCBj dHgpOwo+ICsKPiArCXZxLT5sYXN0X3VzZWRfaWR4ICs9IHZxLT5kZXNjX3N0YXRlW2ldLm51bTsK PiArCWlmICh2cS0+bGFzdF91c2VkX2lkeCA+PSB2cS0+dnJpbmdfcGFja2VkLm51bSkKPiArCQl2 cS0+bGFzdF91c2VkX2lkeCAlPSB2cS0+dnJpbmdfcGFja2VkLm51bTsKCictPScgc2hvdWxkIGJl IHN1ZmZpY2llbnQgaGVyZT8KCj4gKwo+ICsJLy8gRklYTUU6IGltcGxlbWVudCB0aGUgZGVzYyBl dmVudCBzdXBwb3J0Cj4gKwo+ICsjaWZkZWYgREVCVUcKPiArCXZxLT5sYXN0X2FkZF90aW1lX3Zh bGlkID0gZmFsc2U7Cj4gKyNlbmRpZgo+ICsKPiArCUVORF9VU0UodnEpOwo+ICsJcmV0dXJuIHJl dDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIHZpcnRxdWV1ZV9nZXRfYnVmIC0gZ2V0IHRoZSBuZXh0 IHVzZWQgYnVmZmVyCj4gKyAqIEB2cTogdGhlIHN0cnVjdCB2aXJ0cXVldWUgd2UncmUgdGFsa2lu ZyBhYm91dC4KPiArICogQGxlbjogdGhlIGxlbmd0aCB3cml0dGVuIGludG8gdGhlIGJ1ZmZlcgo+ ICsgKgo+ICsgKiBJZiB0aGUgZGV2aWNlIHdyb3RlIGRhdGEgaW50byB0aGUgYnVmZmVyLCBAbGVu IHdpbGwgYmUgc2V0IHRvIHRoZQo+ICsgKiBhbW91bnQgd3JpdHRlbi4gIFRoaXMgbWVhbnMgeW91 IGRvbid0IG5lZWQgdG8gY2xlYXIgdGhlIGJ1ZmZlcgo+ICsgKiBiZWZvcmVoYW5kIHRvIGVuc3Vy ZSB0aGVyZSdzIG5vIGRhdGEgbGVha2FnZSBpbiB0aGUgY2FzZSBvZiBzaG9ydAo+ICsgKiB3cml0 ZXMuCj4gKyAqCj4gKyAqIENhbGxlciBtdXN0IGVuc3VyZSB3ZSBkb24ndCBjYWxsIHRoaXMgd2l0 aCBvdGhlciB2aXJ0cXVldWUKPiArICogb3BlcmF0aW9ucyBhdCB0aGUgc2FtZSB0aW1lIChleGNl cHQgd2hlcmUgbm90ZWQpLgo+ICsgKgo+ICsgKiBSZXR1cm5zIE5VTEwgaWYgdGhlcmUgYXJlIG5v IHVzZWQgYnVmZmVycywgb3IgdGhlICJkYXRhIiB0b2tlbgo+ICsgKiBoYW5kZWQgdG8gdmlydHF1 ZXVlX2FkZF8qKCkuCj4gKyAqLwo+ICt2b2lkICp2aXJ0cXVldWVfZ2V0X2J1Zl9jdHgoc3RydWN0 IHZpcnRxdWV1ZSAqX3ZxLCB1bnNpZ25lZCBpbnQgKmxlbiwKPiArCQkJICAgIHZvaWQgKipjdHgp Cj4gK3sKPiArCXN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZxKF92cSk7Cj4gKwo+ ICsJcmV0dXJuIHZxLT5wYWNrZWQgPyB2aXJ0cXVldWVfZ2V0X2J1Zl9jdHhfcGFja2VkKF92cSwg bGVuLCBjdHgpIDoKPiArCQkJICAgIHZpcnRxdWV1ZV9nZXRfYnVmX2N0eF9zcGxpdChfdnEsIGxl biwgY3R4KTsKPiArfQo+ICAgRVhQT1JUX1NZTUJPTF9HUEwodmlydHF1ZXVlX2dldF9idWZfY3R4 KTsKPiAgIAo+ICAgdm9pZCAqdmlydHF1ZXVlX2dldF9idWYoc3RydWN0IHZpcnRxdWV1ZSAqX3Zx LCB1bnNpZ25lZCBpbnQgKmxlbikKPiBAQCAtNzYxLDYgKzExODYsMjQgQEAgdm9pZCAqdmlydHF1 ZXVlX2dldF9idWYoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxLCB1bnNpZ25lZCBpbnQgKmxlbikKPiAg IAlyZXR1cm4gdmlydHF1ZXVlX2dldF9idWZfY3R4KF92cSwgbGVuLCBOVUxMKTsKPiAgIH0KPiAg IEVYUE9SVF9TWU1CT0xfR1BMKHZpcnRxdWV1ZV9nZXRfYnVmKTsKPiArCj4gK3N0YXRpYyB2b2lk IHZpcnRxdWV1ZV9kaXNhYmxlX2NiX3NwbGl0KHN0cnVjdCB2aXJ0cXVldWUgKl92cSkKPiArewo+ ICsJc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEgPSB0b192dnEoX3ZxKTsKPiArCj4gKwlpZiAo ISh2cS0+YXZhaWxfZmxhZ3Nfc2hhZG93ICYgVlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQpKSB7 Cj4gKwkJdnEtPmF2YWlsX2ZsYWdzX3NoYWRvdyB8PSBWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQ VDsKPiArCQlpZiAoIXZxLT5ldmVudCkKPiArCQkJdnEtPnZyaW5nLmF2YWlsLT5mbGFncyA9IGNw dV90b192aXJ0aW8xNihfdnEtPnZkZXYsCj4gKwkJCQkJCQl2cS0+YXZhaWxfZmxhZ3Nfc2hhZG93 KTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmlydHF1ZXVlX2Rpc2FibGVfY2JfcGFj a2VkKHN0cnVjdCB2aXJ0cXVldWUgKl92cSkKPiArewo+ICsJLy8gRklYTUU6IHRvIGJlIGltcGxl bWVudGVkCj4gK30KPiArCj4gICAvKioKPiAgICAqIHZpcnRxdWV1ZV9kaXNhYmxlX2NiIC0gZGlz YWJsZSBjYWxsYmFja3MKPiAgICAqIEB2cTogdGhlIHN0cnVjdCB2aXJ0cXVldWUgd2UncmUgdGFs a2luZyBhYm91dC4KPiBAQCAtNzc0LDEyICsxMjE3LDEwIEBAIHZvaWQgdmlydHF1ZXVlX2Rpc2Fi bGVfY2Ioc3RydWN0IHZpcnRxdWV1ZSAqX3ZxKQo+ICAgewo+ICAgCXN0cnVjdCB2cmluZ192aXJ0 cXVldWUgKnZxID0gdG9fdnZxKF92cSk7Cj4gICAKPiAtCWlmICghKHZxLT5hdmFpbF9mbGFnc19z aGFkb3cgJiBWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVCkpIHsKPiAtCQl2cS0+YXZhaWxfZmxh Z3Nfc2hhZG93IHw9IFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUOwo+IC0JCWlmICghdnEtPmV2 ZW50KQo+IC0JCQl2cS0+dnJpbmcuYXZhaWwtPmZsYWdzID0gY3B1X3RvX3ZpcnRpbzE2KF92cS0+ dmRldiwgdnEtPmF2YWlsX2ZsYWdzX3NoYWRvdyk7Cj4gLQl9Cj4gLQo+ICsJaWYgKHZxLT5wYWNr ZWQpCj4gKwkJdmlydHF1ZXVlX2Rpc2FibGVfY2JfcGFja2VkKF92cSk7Cj4gKwllbHNlCj4gKwkJ dmlydHF1ZXVlX2Rpc2FibGVfY2Jfc3BsaXQoX3ZxKTsKPiAgIH0KPiAgIEVYUE9SVF9TWU1CT0xf R1BMKHZpcnRxdWV1ZV9kaXNhYmxlX2NiKTsKPiAgIAo+IEBAIC04MDIsNiArMTI0MywxMiBAQCB1 bnNpZ25lZCB2aXJ0cXVldWVfZW5hYmxlX2NiX3ByZXBhcmUoc3RydWN0IHZpcnRxdWV1ZSAqX3Zx KQo+ICAgCj4gICAJU1RBUlRfVVNFKHZxKTsKPiAgIAo+ICsJaWYgKHZxLT5wYWNrZWQpIHsKPiAr CQkvLyBGSVhNRTogdG8gYmUgaW1wbGVtZW50ZWQKPiArCQlsYXN0X3VzZWRfaWR4ID0gdnEtPmxh c3RfdXNlZF9pZHg7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ICAgCS8qIFdlIG9wdGltaXN0 aWNhbGx5IHR1cm4gYmFjayBvbiBpbnRlcnJ1cHRzLCB0aGVuIGNoZWNrIGlmIHRoZXJlIHdhcwo+ ICAgCSAqIG1vcmUgdG8gZG8uICovCj4gICAJLyogRGVwZW5kaW5nIG9uIHRoZSBWSVJUSU9fUklO R19GX0VWRU5UX0lEWCBmZWF0dXJlLCB3ZSBuZWVkIHRvCj4gQEAgLTgxMyw2ICsxMjYwLDcgQEAg dW5zaWduZWQgdmlydHF1ZXVlX2VuYWJsZV9jYl9wcmVwYXJlKHN0cnVjdCB2aXJ0cXVldWUgKl92 cSkKPiAgIAkJCXZxLT52cmluZy5hdmFpbC0+ZmxhZ3MgPSBjcHVfdG9fdmlydGlvMTYoX3ZxLT52 ZGV2LCB2cS0+YXZhaWxfZmxhZ3Nfc2hhZG93KTsKPiAgIAl9Cj4gICAJdnJpbmdfdXNlZF9ldmVu dCgmdnEtPnZyaW5nKSA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIGxhc3RfdXNlZF9pZHgg PSB2cS0+bGFzdF91c2VkX2lkeCk7Cj4gK291dDoKPiAgIAlFTkRfVVNFKHZxKTsKPiAgIAlyZXR1 cm4gbGFzdF91c2VkX2lkeDsKPiAgIH0KPiBAQCAtODMyLDYgKzEyODAsMTIgQEAgYm9vbCB2aXJ0 cXVldWVfcG9sbChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEsIHVuc2lnbmVkIGxhc3RfdXNlZF9pZHgp Cj4gICAJc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEgPSB0b192dnEoX3ZxKTsKPiAgIAo+ICAg CXZpcnRpb19tYih2cS0+d2Vha19iYXJyaWVycyk7Cj4gKwlpZiAodnEtPnBhY2tlZCkgewo+ICsJ CXUxNiBmbGFncyA9IHZpcnRpbzE2X3RvX2NwdSh2cS0+dnEudmRldiwKPiArCQkJCXZxLT52cmlu Z19wYWNrZWQuZGVzY1tsYXN0X3VzZWRfaWR4XS5mbGFncyk7Cj4gKwkJcmV0dXJuICEoZmxhZ3Mg JiBWUklOR19ERVNDX0ZfQVZBSUwoMSkpID09Cj4gKwkJICAgICAgICEoZmxhZ3MgJiBWUklOR19E RVNDX0ZfVVNFRCgxKSk7Cj4gKwl9Cj4gICAJcmV0dXJuICh1MTYpbGFzdF91c2VkX2lkeCAhPSB2 aXJ0aW8xNl90b19jcHUoX3ZxLT52ZGV2LCB2cS0+dnJpbmcudXNlZC0+aWR4KTsKPiAgIH0KPiAg IEVYUE9SVF9TWU1CT0xfR1BMKHZpcnRxdWV1ZV9wb2xsKTsKPiBAQCAtODc0LDYgKzEzMjgsMTEg QEAgYm9vbCB2aXJ0cXVldWVfZW5hYmxlX2NiX2RlbGF5ZWQoc3RydWN0IHZpcnRxdWV1ZSAqX3Zx KQo+ICAgCj4gICAJU1RBUlRfVVNFKHZxKTsKPiAgIAo+ICsJaWYgKHZxLT5wYWNrZWQpIHsKPiAr CQkvLyBGSVhNRTogdG8gYmUgaW1wbGVtZW50ZWQKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4g ICAJLyogV2Ugb3B0aW1pc3RpY2FsbHkgdHVybiBiYWNrIG9uIGludGVycnVwdHMsIHRoZW4gY2hl Y2sgaWYgdGhlcmUgd2FzCj4gICAJICogbW9yZSB0byBkby4gKi8KPiAgIAkvKiBEZXBlbmRpbmcg b24gdGhlIFZJUlRJT19SSU5HX0ZfVVNFRF9FVkVOVF9JRFggZmVhdHVyZSwgd2UgbmVlZCB0bwo+ IEBAIC04OTYsNiArMTM1NSw3IEBAIGJvb2wgdmlydHF1ZXVlX2VuYWJsZV9jYl9kZWxheWVkKHN0 cnVjdCB2aXJ0cXVldWUgKl92cSkKPiAgIAkJcmV0dXJuIGZhbHNlOwo+ICAgCX0KPiAgIAo+ICtv dXQ6Cj4gICAJRU5EX1VTRSh2cSk7Cj4gICAJcmV0dXJuIHRydWU7Cj4gICB9Cj4gQEAgLTkyMiwx NCArMTM4MiwyMCBAQCB2b2lkICp2aXJ0cXVldWVfZGV0YWNoX3VudXNlZF9idWYoc3RydWN0IHZp cnRxdWV1ZSAqX3ZxKQo+ICAgCQkJY29udGludWU7Cj4gICAJCS8qIGRldGFjaF9idWYgY2xlYXJz IGRhdGEsIHNvIGdyYWIgaXQgbm93LiAqLwo+ICAgCQlidWYgPSB2cS0+ZGVzY19zdGF0ZVtpXS5k YXRhOwo+IC0JCWRldGFjaF9idWYodnEsIGksIE5VTEwpOwo+IC0JCXZxLT5hdmFpbF9pZHhfc2hh ZG93LS07Cj4gLQkJdnEtPnZyaW5nLmF2YWlsLT5pZHggPSBjcHVfdG9fdmlydGlvMTYoX3ZxLT52 ZGV2LCB2cS0+YXZhaWxfaWR4X3NoYWRvdyk7Cj4gKwkJaWYgKHZxLT5wYWNrZWQpCj4gKwkJCWRl dGFjaF9idWZfcGFja2VkKHZxLCBpLCBOVUxMKTsKPiArCQllbHNlIHsKPiArCQkJZGV0YWNoX2J1 Zl9zcGxpdCh2cSwgaSwgTlVMTCk7Cj4gKwkJCXZxLT5hdmFpbF9pZHhfc2hhZG93LS07Cj4gKwkJ CXZxLT52cmluZy5hdmFpbC0+aWR4ID0gY3B1X3RvX3ZpcnRpbzE2KF92cS0+dmRldiwKPiArCQkJ CQkJCXZxLT5hdmFpbF9pZHhfc2hhZG93KTsKPiArCQl9Cj4gICAJCUVORF9VU0UodnEpOwo+ICAg CQlyZXR1cm4gYnVmOwo+ICAgCX0KPiAgIAkvKiBUaGF0IHNob3VsZCBoYXZlIGZyZWVkIGV2ZXJ5 dGhpbmcuICovCj4gLQlCVUdfT04odnEtPnZxLm51bV9mcmVlICE9IHZxLT52cmluZy5udW0pOwo+ ICsJQlVHX09OKHZxLT52cS5udW1fZnJlZSAhPSAodnEtPnBhY2tlZCA/IHZxLT52cmluZ19wYWNr ZWQubnVtIDoKPiArCQkJCQkJdnEtPnZyaW5nLm51bSkpOwo+ICAgCj4gICAJRU5EX1VTRSh2cSk7 Cj4gICAJcmV0dXJuIE5VTEw7Cj4gQEAgLTk1Nyw3ICsxNDIzLDggQEAgaXJxcmV0dXJuX3QgdnJp bmdfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKl92cSkKPiAgIEVYUE9SVF9TWU1CT0xfR1BMKHZy aW5nX2ludGVycnVwdCk7Cj4gICAKPiAgIHN0cnVjdCB2aXJ0cXVldWUgKl9fdnJpbmdfbmV3X3Zp cnRxdWV1ZSh1bnNpZ25lZCBpbnQgaW5kZXgsCj4gLQkJCQkJc3RydWN0IHZyaW5nIHZyaW5nLAo+ ICsJCQkJCXVuaW9uIHZyaW5nX3VuaW9uIHZyaW5nLAo+ICsJCQkJCWJvb2wgcGFja2VkLAo+ICAg CQkJCQlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwKPiAgIAkJCQkJYm9vbCB3ZWFrX2JhcnJp ZXJzLAo+ICAgCQkJCQlib29sIGNvbnRleHQsCj4gQEAgLTk2NSwxOSArMTQzMiwyMCBAQCBzdHJ1 Y3QgdmlydHF1ZXVlICpfX3ZyaW5nX25ld192aXJ0cXVldWUodW5zaWduZWQgaW50IGluZGV4LAo+ ICAgCQkJCQl2b2lkICgqY2FsbGJhY2spKHN0cnVjdCB2aXJ0cXVldWUgKiksCj4gICAJCQkJCWNv bnN0IGNoYXIgKm5hbWUpCj4gICB7Cj4gLQl1bnNpZ25lZCBpbnQgaTsKPiArCXVuc2lnbmVkIGlu dCBudW0sIGk7Cj4gICAJc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnE7Cj4gICAKPiAtCXZxID0g a21hbGxvYyhzaXplb2YoKnZxKSArIHZyaW5nLm51bSAqIHNpemVvZihzdHJ1Y3QgdnJpbmdfZGVz Y19zdGF0ZSksCj4gKwludW0gPSBwYWNrZWQgPyB2cmluZy52cmluZ19wYWNrZWQubnVtIDogdnJp bmcudnJpbmdfc3BsaXQubnVtOwo+ICsKPiArCXZxID0ga21hbGxvYyhzaXplb2YoKnZxKSArIG51 bSAqIHNpemVvZihzdHJ1Y3QgdnJpbmdfZGVzY19zdGF0ZSksCj4gICAJCSAgICAgR0ZQX0tFUk5F TCk7Cj4gICAJaWYgKCF2cSkKPiAgIAkJcmV0dXJuIE5VTEw7Cj4gICAKPiAtCXZxLT52cmluZyA9 IHZyaW5nOwo+ICAgCXZxLT52cS5jYWxsYmFjayA9IGNhbGxiYWNrOwo+ICAgCXZxLT52cS52ZGV2 ID0gdmRldjsKPiAgIAl2cS0+dnEubmFtZSA9IG5hbWU7Cj4gLQl2cS0+dnEubnVtX2ZyZWUgPSB2 cmluZy5udW07Cj4gKwl2cS0+dnEubnVtX2ZyZWUgPSBudW07Cj4gICAJdnEtPnZxLmluZGV4ID0g aW5kZXg7Cj4gICAJdnEtPndlX293bl9yaW5nID0gZmFsc2U7Cj4gICAJdnEtPnF1ZXVlX2RtYV9h ZGRyID0gMDsKPiBAQCAtOTg2LDkgKzE0NTQsOCBAQCBzdHJ1Y3QgdmlydHF1ZXVlICpfX3ZyaW5n X25ld192aXJ0cXVldWUodW5zaWduZWQgaW50IGluZGV4LAo+ICAgCXZxLT53ZWFrX2JhcnJpZXJz ID0gd2Vha19iYXJyaWVyczsKPiAgIAl2cS0+YnJva2VuID0gZmFsc2U7Cj4gICAJdnEtPmxhc3Rf dXNlZF9pZHggPSAwOwo+IC0JdnEtPmF2YWlsX2ZsYWdzX3NoYWRvdyA9IDA7Cj4gLQl2cS0+YXZh aWxfaWR4X3NoYWRvdyA9IDA7Cj4gICAJdnEtPm51bV9hZGRlZCA9IDA7Cj4gKwl2cS0+cGFja2Vk ID0gcGFja2VkOwo+ICAgCWxpc3RfYWRkX3RhaWwoJnZxLT52cS5saXN0LCAmdmRldi0+dnFzKTsK PiAgICNpZmRlZiBERUJVRwo+ICAgCXZxLT5pbl91c2UgPSBmYWxzZTsKPiBAQCAtOTk5LDE4ICsx NDY2LDQxIEBAIHN0cnVjdCB2aXJ0cXVldWUgKl9fdnJpbmdfbmV3X3ZpcnRxdWV1ZSh1bnNpZ25l ZCBpbnQgaW5kZXgsCj4gICAJCSFjb250ZXh0Owo+ICAgCXZxLT5ldmVudCA9IHZpcnRpb19oYXNf ZmVhdHVyZSh2ZGV2LCBWSVJUSU9fUklOR19GX0VWRU5UX0lEWCk7Cj4gICAKPiArCWlmICh2cS0+ cGFja2VkKSB7Cj4gKwkJdnEtPnZyaW5nX3BhY2tlZCA9IHZyaW5nLnZyaW5nX3BhY2tlZDsKPiAr CQl2cS0+ZnJlZV9oZWFkID0gMDsKPiArCQl2cS0+d3JhcF9jb3VudGVyID0gMTsKPiArCj4gKyNp ZiAwCj4gKwkJdnEtPmNoYWluaW5nID0gdmlydGlvX2hhc19mZWF0dXJlKHZkZXYsCj4gKwkJCQkJ CSAgVklSVElPX1JJTkdfRl9MSVNUX0RFU0MpOwo+ICsjZWxzZQo+ICsJCXZxLT5jaGFpbmluZyA9 IHRydWU7CgpMb29rcyBsaWtlIGluIFYxMCB0aGVyZSdzIG5vIEZfTElTVF9ERVNDLgoKPiArI2Vu ZGlmCj4gKwl9IGVsc2Ugewo+ICsJCXZxLT52cmluZyA9IHZyaW5nLnZyaW5nX3NwbGl0Owo+ICsJ CXZxLT5hdmFpbF9mbGFnc19zaGFkb3cgPSAwOwo+ICsJCXZxLT5hdmFpbF9pZHhfc2hhZG93ID0g MDsKPiArCj4gKwkJLyogUHV0IGV2ZXJ5dGhpbmcgaW4gZnJlZSBsaXN0cy4gKi8KPiArCQl2cS0+ ZnJlZV9oZWFkID0gMDsKPiArCQlmb3IgKGkgPSAwOyBpIDwgbnVtLTE7IGkrKykKPiArCQkJdnEt PnZyaW5nLmRlc2NbaV0ubmV4dCA9IGNwdV90b192aXJ0aW8xNih2ZGV2LCBpICsgMSk7Cj4gKwl9 Cj4gKwo+ICAgCS8qIE5vIGNhbGxiYWNrPyAgVGVsbCBvdGhlciBzaWRlIG5vdCB0byBib3RoZXIg dXMuICovCj4gICAJaWYgKCFjYWxsYmFjaykgewo+IC0JCXZxLT5hdmFpbF9mbGFnc19zaGFkb3cg fD0gVlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQ7Cj4gLQkJaWYgKCF2cS0+ZXZlbnQpCj4gLQkJ CXZxLT52cmluZy5hdmFpbC0+ZmxhZ3MgPSBjcHVfdG9fdmlydGlvMTYodmRldiwgdnEtPmF2YWls X2ZsYWdzX3NoYWRvdyk7Cj4gKwkJaWYgKHBhY2tlZCkgewo+ICsJCQkvLyBGSVhNRTogdG8gYmUg aW1wbGVtZW50ZWQKPiArCQl9IGVsc2Ugewo+ICsJCQl2cS0+YXZhaWxfZmxhZ3Nfc2hhZG93IHw9 IFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUOwo+ICsJCQlpZiAoIXZxLT5ldmVudCkKPiArCQkJ CXZxLT52cmluZy5hdmFpbC0+ZmxhZ3MgPSBjcHVfdG9fdmlydGlvMTYodmRldiwKPiArCQkJCQkJ dnEtPmF2YWlsX2ZsYWdzX3NoYWRvdyk7Cj4gKwkJfQo+ICAgCX0KPiAgIAo+IC0JLyogUHV0IGV2 ZXJ5dGhpbmcgaW4gZnJlZSBsaXN0cy4gKi8KPiAtCXZxLT5mcmVlX2hlYWQgPSAwOwo+IC0JZm9y IChpID0gMDsgaSA8IHZyaW5nLm51bS0xOyBpKyspCj4gLQkJdnEtPnZyaW5nLmRlc2NbaV0ubmV4 dCA9IGNwdV90b192aXJ0aW8xNih2ZGV2LCBpICsgMSk7Cj4gLQltZW1zZXQodnEtPmRlc2Nfc3Rh dGUsIDAsIHZyaW5nLm51bSAqIHNpemVvZihzdHJ1Y3QgdnJpbmdfZGVzY19zdGF0ZSkpOwo+ICsJ bWVtc2V0KHZxLT5kZXNjX3N0YXRlLCAwLCBudW0gKiBzaXplb2Yoc3RydWN0IHZyaW5nX2Rlc2Nf c3RhdGUpKTsKPiAgIAo+ICAgCXJldHVybiAmdnEtPnZxOwo+ICAgfQo+IEBAIC0xMDU4LDYgKzE1 NDgsMTQgQEAgc3RhdGljIHZvaWQgdnJpbmdfZnJlZV9xdWV1ZShzdHJ1Y3QgdmlydGlvX2Rldmlj ZSAqdmRldiwgc2l6ZV90IHNpemUsCj4gICAJfQo+ICAgfQo+ICAgCj4gK3N0YXRpYyBpbmxpbmUg aW50Cj4gK19fdnJpbmdfc2l6ZSh1bnNpZ25lZCBpbnQgbnVtLCB1bnNpZ25lZCBsb25nIGFsaWdu LCBib29sIHBhY2tlZCkKPiArewo+ICsJaWYgKHBhY2tlZCkKPiArCQlyZXR1cm4gdnJpbmdfcGFj a2VkX3NpemUobnVtLCBhbGlnbik7Cj4gKwlyZXR1cm4gdnJpbmdfc2l6ZShudW0sIGFsaWduKTsK PiArfQo+ICsKPiAgIHN0cnVjdCB2aXJ0cXVldWUgKnZyaW5nX2NyZWF0ZV92aXJ0cXVldWUoCj4g ICAJdW5zaWduZWQgaW50IGluZGV4LAo+ICAgCXVuc2lnbmVkIGludCBudW0sCj4gQEAgLTEwNzQs NyArMTU3Miw4IEBAIHN0cnVjdCB2aXJ0cXVldWUgKnZyaW5nX2NyZWF0ZV92aXJ0cXVldWUoCj4g ICAJdm9pZCAqcXVldWUgPSBOVUxMOwo+ICAgCWRtYV9hZGRyX3QgZG1hX2FkZHI7Cj4gICAJc2l6 ZV90IHF1ZXVlX3NpemVfaW5fYnl0ZXM7Cj4gLQlzdHJ1Y3QgdnJpbmcgdnJpbmc7Cj4gKwl1bmlv biB2cmluZ191bmlvbiB2cmluZzsKPiArCWJvb2wgcGFja2VkOwo+ICAgCj4gICAJLyogV2UgYXNz dW1lIG51bSBpcyBhIHBvd2VyIG9mIDIuICovCj4gICAJaWYgKG51bSAmIChudW0gLSAxKSkgewo+ IEBAIC0xMDgyLDkgKzE1ODEsMTMgQEAgc3RydWN0IHZpcnRxdWV1ZSAqdnJpbmdfY3JlYXRlX3Zp cnRxdWV1ZSgKPiAgIAkJcmV0dXJuIE5VTEw7Cj4gICAJfQo+ICAgCj4gKwlwYWNrZWQgPSB2aXJ0 aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0ZfUklOR19QQUNLRUQpOwo+ICsKPiAgIAkvKiBU T0RPOiBhbGxvY2F0ZSBlYWNoIHF1ZXVlIGNodW5rIGluZGl2aWR1YWxseSAqLwo+IC0JZm9yICg7 IG51bSAmJiB2cmluZ19zaXplKG51bSwgdnJpbmdfYWxpZ24pID4gUEFHRV9TSVpFOyBudW0gLz0g Mikgewo+IC0JCXF1ZXVlID0gdnJpbmdfYWxsb2NfcXVldWUodmRldiwgdnJpbmdfc2l6ZShudW0s IHZyaW5nX2FsaWduKSwKPiArCWZvciAoOyBudW0gJiYgX192cmluZ19zaXplKG51bSwgdnJpbmdf YWxpZ24sIHBhY2tlZCkgPiBQQUdFX1NJWkU7Cj4gKwkJCW51bSAvPSAyKSB7Cj4gKwkJcXVldWUg PSB2cmluZ19hbGxvY19xdWV1ZSh2ZGV2LCBfX3ZyaW5nX3NpemUobnVtLCB2cmluZ19hbGlnbiwK PiArCQkJCQkJCSAgICAgcGFja2VkKSwKPiAgIAkJCQkJICAmZG1hX2FkZHIsCj4gICAJCQkJCSAg R0ZQX0tFUk5FTHxfX0dGUF9OT1dBUk58X19HRlBfWkVSTyk7Cj4gICAJCWlmIChxdWV1ZSkKPiBA QCAtMTA5NiwxNyArMTU5OSwyMSBAQCBzdHJ1Y3QgdmlydHF1ZXVlICp2cmluZ19jcmVhdGVfdmly dHF1ZXVlKAo+ICAgCj4gICAJaWYgKCFxdWV1ZSkgewo+ICAgCQkvKiBUcnkgdG8gZ2V0IGEgc2lu Z2xlIHBhZ2UuIFlvdSBhcmUgbXkgb25seSBob3BlISAqLwo+IC0JCXF1ZXVlID0gdnJpbmdfYWxs b2NfcXVldWUodmRldiwgdnJpbmdfc2l6ZShudW0sIHZyaW5nX2FsaWduKSwKPiArCQlxdWV1ZSA9 IHZyaW5nX2FsbG9jX3F1ZXVlKHZkZXYsIF9fdnJpbmdfc2l6ZShudW0sIHZyaW5nX2FsaWduLAo+ ICsJCQkJCQkJICAgICBwYWNrZWQpLAo+ICAgCQkJCQkgICZkbWFfYWRkciwgR0ZQX0tFUk5FTHxf X0dGUF9aRVJPKTsKPiAgIAl9Cj4gICAJaWYgKCFxdWV1ZSkKPiAgIAkJcmV0dXJuIE5VTEw7Cj4g ICAKPiAtCXF1ZXVlX3NpemVfaW5fYnl0ZXMgPSB2cmluZ19zaXplKG51bSwgdnJpbmdfYWxpZ24p Owo+IC0JdnJpbmdfaW5pdCgmdnJpbmcsIG51bSwgcXVldWUsIHZyaW5nX2FsaWduKTsKPiArCXF1 ZXVlX3NpemVfaW5fYnl0ZXMgPSBfX3ZyaW5nX3NpemUobnVtLCB2cmluZ19hbGlnbiwgcGFja2Vk KTsKPiArCWlmIChwYWNrZWQpCj4gKwkJdnJpbmdfcGFja2VkX2luaXQoJnZyaW5nLnZyaW5nX3Bh Y2tlZCwgbnVtLCBxdWV1ZSwgdnJpbmdfYWxpZ24pOwo+ICsJZWxzZQo+ICsJCXZyaW5nX2luaXQo JnZyaW5nLnZyaW5nX3NwbGl0LCBudW0sIHF1ZXVlLCB2cmluZ19hbGlnbik7CgpMZXQncyByZW5h bWUgdnJpbmdfaW5pdCB0byB2cmluZ19pbml0X3NwbGl0KCkgbGlrZSBvdGhlciBoZWxwZXJzPwoK PiAgIAo+IC0JdnEgPSBfX3ZyaW5nX25ld192aXJ0cXVldWUoaW5kZXgsIHZyaW5nLCB2ZGV2LCB3 ZWFrX2JhcnJpZXJzLCBjb250ZXh0LAo+IC0JCQkJICAgbm90aWZ5LCBjYWxsYmFjaywgbmFtZSk7 Cj4gKwl2cSA9IF9fdnJpbmdfbmV3X3ZpcnRxdWV1ZShpbmRleCwgdnJpbmcsIHBhY2tlZCwgdmRl diwgd2Vha19iYXJyaWVycywKPiArCQkJCSAgIGNvbnRleHQsIG5vdGlmeSwgY2FsbGJhY2ssIG5h bWUpOwo+ICAgCWlmICghdnEpIHsKPiAgIAkJdnJpbmdfZnJlZV9xdWV1ZSh2ZGV2LCBxdWV1ZV9z aXplX2luX2J5dGVzLCBxdWV1ZSwKPiAgIAkJCQkgZG1hX2FkZHIpOwo+IEBAIC0xMTMyLDEwICsx NjM5LDE3IEBAIHN0cnVjdCB2aXJ0cXVldWUgKnZyaW5nX25ld192aXJ0cXVldWUodW5zaWduZWQg aW50IGluZGV4LAo+ICAgCQkJCSAgICAgIHZvaWQgKCpjYWxsYmFjaykoc3RydWN0IHZpcnRxdWV1 ZSAqdnEpLAo+ICAgCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCj4gICB7Cj4gLQlzdHJ1Y3Qg dnJpbmcgdnJpbmc7Cj4gLQl2cmluZ19pbml0KCZ2cmluZywgbnVtLCBwYWdlcywgdnJpbmdfYWxp Z24pOwo+IC0JcmV0dXJuIF9fdnJpbmdfbmV3X3ZpcnRxdWV1ZShpbmRleCwgdnJpbmcsIHZkZXYs IHdlYWtfYmFycmllcnMsIGNvbnRleHQsCj4gLQkJCQkgICAgIG5vdGlmeSwgY2FsbGJhY2ssIG5h bWUpOwo+ICsJdW5pb24gdnJpbmdfdW5pb24gdnJpbmc7Cj4gKwlib29sIHBhY2tlZDsKPiArCj4g KwlwYWNrZWQgPSB2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0ZfUklOR19QQUNLRUQp Owo+ICsJaWYgKHBhY2tlZCkKPiArCQl2cmluZ19wYWNrZWRfaW5pdCgmdnJpbmcudnJpbmdfcGFj a2VkLCBudW0sIHBhZ2VzLCB2cmluZ19hbGlnbik7Cj4gKwllbHNlCj4gKwkJdnJpbmdfaW5pdCgm dnJpbmcudnJpbmdfc3BsaXQsIG51bSwgcGFnZXMsIHZyaW5nX2FsaWduKTsKPiArCj4gKwlyZXR1 cm4gX192cmluZ19uZXdfdmlydHF1ZXVlKGluZGV4LCB2cmluZywgcGFja2VkLCB2ZGV2LCB3ZWFr X2JhcnJpZXJzLAo+ICsJCQkJICAgICBjb250ZXh0LCBub3RpZnksIGNhbGxiYWNrLCBuYW1lKTsK PiAgIH0KPiAgIEVYUE9SVF9TWU1CT0xfR1BMKHZyaW5nX25ld192aXJ0cXVldWUpOwo+ICAgCj4g QEAgLTExNDUsNyArMTY1OSw5IEBAIHZvaWQgdnJpbmdfZGVsX3ZpcnRxdWV1ZShzdHJ1Y3Qgdmly dHF1ZXVlICpfdnEpCj4gICAKPiAgIAlpZiAodnEtPndlX293bl9yaW5nKSB7Cj4gICAJCXZyaW5n X2ZyZWVfcXVldWUodnEtPnZxLnZkZXYsIHZxLT5xdWV1ZV9zaXplX2luX2J5dGVzLAo+IC0JCQkJ IHZxLT52cmluZy5kZXNjLCB2cS0+cXVldWVfZG1hX2FkZHIpOwo+ICsJCQkJIHZxLT5wYWNrZWQg PyAodm9pZCAqKXZxLT52cmluZ19wYWNrZWQuZGVzYyA6Cj4gKwkJCQkJICAgICAgKHZvaWQgKil2 cS0+dnJpbmcuZGVzYywKPiArCQkJCSB2cS0+cXVldWVfZG1hX2FkZHIpOwo+ICAgCX0KPiAgIAls aXN0X2RlbCgmX3ZxLT5saXN0KTsKPiAgIAlrZnJlZSh2cSk7Cj4gQEAgLTExNTksMTQgKzE2NzUs MTggQEAgdm9pZCB2cmluZ190cmFuc3BvcnRfZmVhdHVyZXMoc3RydWN0IHZpcnRpb19kZXZpY2Ug KnZkZXYpCj4gICAKPiAgIAlmb3IgKGkgPSBWSVJUSU9fVFJBTlNQT1JUX0ZfU1RBUlQ7IGkgPCBW SVJUSU9fVFJBTlNQT1JUX0ZfRU5EOyBpKyspIHsKPiAgIAkJc3dpdGNoIChpKSB7Cj4gKyNpZiAw IC8vIEZJWE1FOiB0byBiZSBpbXBsZW1lbnRlZAo+ICAgCQljYXNlIFZJUlRJT19SSU5HX0ZfSU5E SVJFQ1RfREVTQzoKPiAgIAkJCWJyZWFrOwo+ICsjZW5kaWYKPiAgIAkJY2FzZSBWSVJUSU9fUklO R19GX0VWRU5UX0lEWDoKPiAgIAkJCWJyZWFrOwo+ICAgCQljYXNlIFZJUlRJT19GX1ZFUlNJT05f MToKPiAgIAkJCWJyZWFrOwo+ICAgCQljYXNlIFZJUlRJT19GX0lPTU1VX1BMQVRGT1JNOgo+ICAg CQkJYnJlYWs7Cj4gKwkJY2FzZSBWSVJUSU9fRl9SSU5HX1BBQ0tFRDoKPiArCQkJYnJlYWs7Cj4g ICAJCWRlZmF1bHQ6Cj4gICAJCQkvKiBXZSBkb24ndCB1bmRlcnN0YW5kIHRoaXMgYml0LiAqLwo+ ICAgCQkJX192aXJ0aW9fY2xlYXJfYml0KHZkZXYsIGkpOwo+IEBAIC0xMTg3LDcgKzE3MDcsNyBA QCB1bnNpZ25lZCBpbnQgdmlydHF1ZXVlX2dldF92cmluZ19zaXplKHN0cnVjdCB2aXJ0cXVldWUg Kl92cSkKPiAgIAo+ICAgCXN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZxKF92cSk7 Cj4gICAKPiAtCXJldHVybiB2cS0+dnJpbmcubnVtOwo+ICsJcmV0dXJuIHZxLT5wYWNrZWQgPyB2 cS0+dnJpbmdfcGFja2VkLm51bSA6IHZxLT52cmluZy5udW07Cj4gICB9Cj4gICBFWFBPUlRfU1lN Qk9MX0dQTCh2aXJ0cXVldWVfZ2V0X3ZyaW5nX3NpemUpOwo+ICAgCj4gQEAgLTEyMjQsNiArMTc0 NCw3IEBAIGRtYV9hZGRyX3QgdmlydHF1ZXVlX2dldF9kZXNjX2FkZHIoc3RydWN0IHZpcnRxdWV1 ZSAqX3ZxKQo+ICAgfQo+ICAgRVhQT1JUX1NZTUJPTF9HUEwodmlydHF1ZXVlX2dldF9kZXNjX2Fk ZHIpOwo+ICAgCj4gKy8qIE9ubHkgYXZhaWxhYmxlIGZvciBzcGxpdCByaW5nICovCgpJbnRlcmVz dGluZywgSSB0aGluayB3ZSBuZWVkIHRoaXMgZm9yIGNvcnJlY3RseSBjb25maWd1cmUgcGNpLiBl LmcgaW4gCnNldHVwX3ZxKCk/Cgo+ICAgZG1hX2FkZHJfdCB2aXJ0cXVldWVfZ2V0X2F2YWlsX2Fk ZHIoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxKQo+ICAgewo+ICAgCXN0cnVjdCB2cmluZ192aXJ0cXVl dWUgKnZxID0gdG9fdnZxKF92cSk7Cj4gQEAgLTEyMzUsNiArMTc1Niw3IEBAIGRtYV9hZGRyX3Qg dmlydHF1ZXVlX2dldF9hdmFpbF9hZGRyKHN0cnVjdCB2aXJ0cXVldWUgKl92cSkKPiAgIH0KPiAg IEVYUE9SVF9TWU1CT0xfR1BMKHZpcnRxdWV1ZV9nZXRfYXZhaWxfYWRkcik7Cj4gICAKPiArLyog T25seSBhdmFpbGFibGUgZm9yIHNwbGl0IHJpbmcgKi8KPiAgIGRtYV9hZGRyX3QgdmlydHF1ZXVl X2dldF91c2VkX2FkZHIoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxKQoKTWF5YmUgaXQncyBiZXR0ZXIg dG8gcmVuYW1lIHRoaXMgdG8gZ2V0X2RldmljZV9hZGRyKCkuCgpUaGFua3MKCj4gICB7Cj4gICAJ c3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEgPSB0b192dnEoX3ZxKTsKPiBAQCAtMTI0Niw2ICsx NzY4LDcgQEAgZG1hX2FkZHJfdCB2aXJ0cXVldWVfZ2V0X3VzZWRfYWRkcihzdHJ1Y3QgdmlydHF1 ZXVlICpfdnEpCj4gICB9Cj4gICBFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0cXVldWVfZ2V0X3VzZWRf YWRkcik7Cj4gICAKPiArLyogT25seSBhdmFpbGFibGUgZm9yIHNwbGl0IHJpbmcgKi8KPiAgIGNv bnN0IHN0cnVjdCB2cmluZyAqdmlydHF1ZXVlX2dldF92cmluZyhzdHJ1Y3QgdmlydHF1ZXVlICp2 cSkKPiAgIHsKPiAgIAlyZXR1cm4gJnRvX3Z2cSh2cSktPnZyaW5nOwo+IGRpZmYgLS1naXQgYS9p bmNsdWRlL2xpbnV4L3ZpcnRpb19yaW5nLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19yaW5nLmgK PiBpbmRleCBiYmYzMjUyNGFiMjcuLmEwMDc1ODk0YWQxNiAxMDA2NDQKPiAtLS0gYS9pbmNsdWRl L2xpbnV4L3ZpcnRpb19yaW5nLmgKPiArKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19yaW5nLmgK PiBAQCAtNjAsNiArNjAsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHZpcnRpb19zdG9yZV9tYihi b29sIHdlYWtfYmFycmllcnMsCj4gICBzdHJ1Y3QgdmlydGlvX2RldmljZTsKPiAgIHN0cnVjdCB2 aXJ0cXVldWU7Cj4gICAKPiArdW5pb24gdnJpbmdfdW5pb24gewo+ICsJc3RydWN0IHZyaW5nIHZy aW5nX3NwbGl0Owo+ICsJc3RydWN0IHZyaW5nX3BhY2tlZCB2cmluZ19wYWNrZWQ7Cj4gK307Cj4g Kwo+ICAgLyoKPiAgICAqIENyZWF0ZXMgYSB2aXJ0cXVldWUgYW5kIGFsbG9jYXRlcyB0aGUgZGVz Y3JpcHRvciByaW5nLiAgSWYKPiAgICAqIG1heV9yZWR1Y2VfbnVtIGlzIHNldCwgdGhlbiB0aGlz IG1heSBhbGxvY2F0ZSBhIHNtYWxsZXIgcmluZyB0aGFuCj4gQEAgLTc5LDcgKzg0LDggQEAgc3Ry dWN0IHZpcnRxdWV1ZSAqdnJpbmdfY3JlYXRlX3ZpcnRxdWV1ZSh1bnNpZ25lZCBpbnQgaW5kZXgs Cj4gICAKPiAgIC8qIENyZWF0ZXMgYSB2aXJ0cXVldWUgd2l0aCBhIGN1c3RvbSBsYXlvdXQuICov Cj4gICBzdHJ1Y3QgdmlydHF1ZXVlICpfX3ZyaW5nX25ld192aXJ0cXVldWUodW5zaWduZWQgaW50 IGluZGV4LAo+IC0JCQkJCXN0cnVjdCB2cmluZyB2cmluZywKPiArCQkJCQl1bmlvbiB2cmluZ191 bmlvbiB2cmluZywKPiArCQkJCQlib29sIHBhY2tlZCwKPiAgIAkJCQkJc3RydWN0IHZpcnRpb19k ZXZpY2UgKnZkZXYsCj4gICAJCQkJCWJvb2wgd2Vha19iYXJyaWVycywKPiAgIAkJCQkJYm9vbCBj dHgsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpWaXJ0 dWFsaXphdGlvbiBtYWlsaW5nIGxpc3QKVmlydHVhbGl6YXRpb25AbGlzdHMubGludXgtZm91bmRh dGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGlu Zm8vdmlydHVhbGl6YXRpb24=