From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [PATCH 4/5] drm/i915: Introduce a non-blocking power domain for vblank interrupts Date: Tue, 9 Jan 2018 10:38:42 +0100 Message-ID: References: <20180103204001.3008-1-dhinakaran.pandiyan@intel.com> <20180103204001.3008-4-dhinakaran.pandiyan@intel.com> <20180105020812.j5ihlti2g5o2njje@intel.com> <1515442930.15127.27.camel@dk-H97M-D3H> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id D48C06E6DD for ; Tue, 9 Jan 2018 09:38:46 +0000 (UTC) In-Reply-To: <1515442930.15127.27.camel@dk-H97M-D3H> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Pandiyan, Dhinakaran" , "Vivi, Rodrigo" Cc: "daniel.vetter@ffwll.ch" , "intel-gfx@lists.freedesktop.org" , "Zanoni, Paulo R" List-Id: intel-gfx@lists.freedesktop.org T3AgMDgtMDEtMTggb20gMjA6NTkgc2NocmVlZiBQYW5kaXlhbiwgRGhpbmFrYXJhbjoKPiBPbiBU aHUsIDIwMTgtMDEtMDQgYXQgMTg6MDggLTA4MDAsIFJvZHJpZ28gVml2aSB3cm90ZToKPj4gT24g V2VkLCBKYW4gMDMsIDIwMTggYXQgMDg6NDA6MDBQTSArMDAwMCwgRGhpbmFrYXJhbiBQYW5kaXlh biB3cm90ZToKPj4+IFdoZW4gREMgc3RhdGVzIGFyZSBlbmFibGVkIGFuZCBQU1IgaXMgYWN0aXZl LCB0aGUgaGFyZHdhcmUgZW50ZXJzIERDNS9EQzYKPj4+IHN0YXRlcyByZXN1bHRpbmcgaW4gdGhl IGZyYW1lIGNvdW50ZXIgcmVzZXR0aW5nLiBUaGUgZnJhbWUgY291bnRlciByZXNldAo+Pj4gbWVz cyB1cCB0aGUgdmJsYW5rIGNvdW50aW5nIGxvZ2ljIGFzIHRoZSBkaWZmIGJldHdlZW4gdGhlIG5l dyBmcmFtZQo+Pj4gY291bnRlciB2YWx1ZSBhbmQgdGhlIHByZXZpb3VzIGlzIG5lZ2F0aXZlLCBh bmQgdGhpcyBuZWdhdGl2ZSBkaWZmIGdldHMKPj4+IGFwcGxpZWQgYXMgYW4gdW5zaWduZWQgdmFs dWUgdG8gdGhlIHZibGFuayBjb3VudC4gV2UgY2Fubm90IHJlamVjdCBuZWdhdGl2ZQo+Pj4gZGlm ZnMgYWx0b2dldGhlciBiZWNhdXNlIHRoZXkgY2FuIGFyaXNlIGZyb20gbGVnaXRpbWF0ZSBmcmFt ZSBjb3VudGVyCj4+PiBvdmVyZmxvd3Mgd2hlbiB0aGVyZSBpcyBhIGxvbmcgcGVyaW9kIHdpdGgg dmJsYW5rIGRpc2FibGVkLiBTbywgdGhpcwo+Pj4gYXBwcm9hY2ggYWxsb3dzIGZvciB0aGUgZHJp dmVyIHRvIG5vdGljZSBhIERDIHN0YXRlIHRvZ2dsZSBiZXR3ZWVuIGEgdmJsYW5rCj4+PiBkaXNh YmxlIGFuZCBlbmFibGUgYW5kIGZpbGwgaW4gdGhlIG1pc3NlZCB2YmxhbmtzLgo+Pj4KPj4+IEJ1 dCwgaW4gb3JkZXIgdG8gZGlzYWJsZSBEQyBzdGF0ZXMgd2hlbiB2YmxhbmsgaW50ZXJydXB0cyBh cmUgcmVxdWlyZWQsCj4+PiB0aGUgRENfT0ZGIHBvd2VyIHdlbGwgaGFzIHRvIGJlIGRpc2FibGVk IGluIGFuIGF0b21pYyBjb250ZXh0LiBTbywKPj4+IGludHJvZHVjZSBhIG5ldyBWQkxBTksgcG93 ZXIgZG9tYWluIHRoYXQgY2FuIGJlIGFjcXVpcmVkIGFuZCByZWxlYXNlZCBpbgo+Pj4gYXRvbWlj IGNvbnRleHRzIHdpdGggdGhlc2UgY2hhbmdlcyAtCj4+PiAxKSAgX3ZibGFua19nZXQoKSBhbmQg X3ZibGFua19wdXQoKSBtZXRob2RzIHNraXAgdGhlIHBvd2VyX2RvbWFpbiBtdXRleAo+Pj4gYW5k IHVzZSBhIHNwaW4gbG9jayBmb3IgdGhlIERDIHBvd2VyIHdlbGwuCj4+PiAyKSBwb3dlcl9kb21h aW5zLT5kb21haW5fdXNlX2NvdW50IGlzIGNvbnZlcnRlZCB0byBhbiBhdG9taWNfdCBhcnJheSBz bwo+Pj4gdGhhdCBpdCBjYW4gYmUgdXBkYXRlZCBvdXRzaWRlIG9mIHRoZSBwb3dlciBkb21haW4g bXV0ZXguCj4+Pgo+Pj4gdjM6IFNxdWFzaCBkb21haW5fdXNlX2NvdW50IGF0b21pY190IGNvbnZl cnNpb24gKE1hYXJ0ZW4pCj4+PiB2MjogRml4IGRlYWRsb2NrIGJ5IHN3aXRjaGluZyBpcnFzYXZl IHNwaW5sb2NrLgo+Pj4gICAgIEltcGxlbWVudCBhdG9taWMgdmVyc2lvbiBvZiBnZXRfaWZfZW5h YmxlZC4KPj4+ICAgICBNb2RpZnkgcG93ZXJfZG9tYWluX3ZlcmlmeV9zdGF0ZSB0byBjaGVjayBw b3dlciB3ZWxsIHVzZSBjb3VudCBhbmQKPj4+IGVuYWJsZWQgc3RhdHVzIGF0b21pY2FsbHkuCj4+ PiAgICAgUmV3cml0ZSBvZiBpbnRlbF9wb3dlcl93ZWxsX3tnZXQscHV0fQo+Pj4KPj4+IENjOiBN YWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPgo+Pj4g Q2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cj4+PiBDYzogVmlsbGUg U3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPj4+IENjOiBSb2RyaWdv IFZpdmkgPHJvZHJpZ28udml2aUBpbnRlbC5jb20+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBEaGluYWth cmFuIFBhbmRpeWFuIDxkaGluYWthcmFuLnBhbmRpeWFuQGludGVsLmNvbT4KPj4+IC0tLQo+Pj4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICB8ICAgMiArLQo+Pj4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICB8ICAxOSArKystCj4+PiAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5oICAgIHwgICAxICsKPj4+ICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgICAgfCAgIDMgKwo+Pj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3J1bnRpbWVfcG0uYyB8IDE5NSArKysrKysrKysrKysrKysrKysrKysr KysrKysrLS0tLQo+Pj4gIDUgZmlsZXMgY2hhbmdlZCwgMTk5IGluc2VydGlvbnMoKyksIDIxIGRl bGV0aW9ucygtKQo+Pj4KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4+PiBpbmRl eCBkODFjYjI1MTMwNjkuLjVhN2NlNzM0ZGUwMiAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2RlYnVnZnMuYwo+Pj4gQEAgLTI3NDYsNyArMjc0Niw3IEBAIHN0YXRpYyBpbnQgaTkxNV9w b3dlcl9kb21haW5faW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKPj4+ICAJ CWZvcl9lYWNoX3Bvd2VyX2RvbWFpbihwb3dlcl9kb21haW4sIHBvd2VyX3dlbGwtPmRvbWFpbnMp Cj4+PiAgCQkJc2VxX3ByaW50ZihtLCAiICAlLTIzcyAlZFxuIiwKPj4+ICAJCQkJIGludGVsX2Rp c3BsYXlfcG93ZXJfZG9tYWluX3N0cihwb3dlcl9kb21haW4pLAo+Pj4gLQkJCQkgcG93ZXJfZG9t YWlucy0+ZG9tYWluX3VzZV9jb3VudFtwb3dlcl9kb21haW5dKTsKPj4+ICsJCQkJIGF0b21pY19y ZWFkKCZwb3dlcl9kb21haW5zLT5kb21haW5fdXNlX2NvdW50W3Bvd2VyX2RvbWFpbl0pKTsKPj4+ ICAJfQo+Pj4gIAo+Pj4gIAltdXRleF91bmxvY2soJnBvd2VyX2RvbWFpbnMtPmxvY2spOwo+Pj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+PiBpbmRleCBjYWViZDU4MjUyNzkuLjYxYTYzNWYwM2Fm NyAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4+IEBAIC0xMDMyLDYgKzEwMzIs MjMgQEAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCB7Cj4+PiAgCQkJYm9vbCBoYXNfZnVzZXM6MTsK Pj4+ICAJCX0gaHN3Owo+Pj4gIAl9Owo+Pj4gKwo+Pj4gKwkvKiBMb2NrIHRvIHNlcmlhbGl6ZSBh Y2Nlc3MgdG8gY291bnQsIGh3X2VuYWJsZWQgYW5kIG9wcywgdXNlZCBmb3IKPj4+ICsJICogcG93 ZXIgd2VsbHMgdGhhdCBoYXZlIHN1cHBvcnRzX2F0b21peF9jdHggc2V0IHRvIFRydWUuCj4+PiAr CSAqLwo+Pj4gKwlzcGlubG9ja190IGxvY2s7Cj4+PiArCj4+PiArCS8qIEluZGljYXRlcyB0aGF0 IHRoZSBnZXQvcHV0IG1ldGhvZHMgZm9yIHRoaXMgcG93ZXIgd2VsbCBjYW4gYmUgY2FsbGVkCj4+ PiArCSAqIGluIGF0b21pYyBjb250ZXh0cywgcmVxdWlyZXMgLm9wcyB0byBub3Qgc2xlZXAuIFRo aXMgaXMgdmFsaWQKPj4+ICsJICogb25seSBmb3IgdGhlIERDX09GRiBwb3dlciB3ZWxsIGN1cnJl bnRseS4KPj4+ICsJICovCj4+PiArCWJvb2wgc3VwcG9ydHNfYXRvbWljX2N0eDsKPj4+ICsKPj4+ ICsJLyogRENfT0ZGIHBvd2VyIHdlbGwgd2FzIGRpc2FibGVkIHNpbmNlIHRoZSBsYXN0IHRpbWUg dmJsYW5rcyB3ZXJlCj4+PiArCSAqIGRpc2FibGVkLgo+Pj4gKwkgKi8KPj4+ICsJYm9vbCBkY19v ZmZfZGlzYWJsZWQ7Cj4+PiArCj4+PiAgCWNvbnN0IHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGxfb3Bz ICpvcHM7Cj4+PiAgfTsKPj4+ICAKPj4+IEBAIC0xMDQ1LDcgKzEwNjIsNyBAQCBzdHJ1Y3QgaTkx NV9wb3dlcl9kb21haW5zIHsKPj4+ICAJaW50IHBvd2VyX3dlbGxfY291bnQ7Cj4+PiAgCj4+PiAg CXN0cnVjdCBtdXRleCBsb2NrOwo+Pj4gLQlpbnQgZG9tYWluX3VzZV9jb3VudFtQT1dFUl9ET01B SU5fTlVNXTsKPj4+ICsJYXRvbWljX3QgZG9tYWluX3VzZV9jb3VudFtQT1dFUl9ET01BSU5fTlVN XTsKPj4+ICAJc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbHM7Cj4+PiAgfTsKPj4+ ICAKPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5Lmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmgKPj4+IGluZGV4IGEwZDJiNjE2 OTM2MS4uM2U5NjcxZmY2Zjc5IDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZGlzcGxheS5oCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNw bGF5LmgKPj4+IEBAIC0xNzIsNiArMTcyLDcgQEAgZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2Rv bWFpbiB7Cj4+PiAgCVBPV0VSX0RPTUFJTl9BVVhfQywKPj4+ICAJUE9XRVJfRE9NQUlOX0FVWF9E LAo+Pj4gIAlQT1dFUl9ET01BSU5fR01CVVMsCj4+PiArCVBPV0VSX0RPTUFJTl9WQkxBTkssCj4+ IE1heWJlIHdlIGNvdWxkIHN0YXJ0IGEgbmV3IGNhdGVnb3J5IG9mIGF0b21pYyBkb21haW5zIGFu ZCBvbiBpbnRlcmF0aW9ucyB0aGF0IG1ha2VzIHNlbnNlIGdvIG92ZXIgYm90aAo+PiBvciBtYWtp bmcgdGhlIGRvbWFpbnMgaW4gYW4gYXJyYXkgd2l0aCBpc19hdG9taWMgYm9vbCBpbiBjYXNlIHdl IGNhbiB0cmFuc2Zvcm0gdGhlIGF0b21pYyBnZXQscHV0IHRvCj4+IGJlIHJlYWxseSBnZW5lcmlj IG9yIGludG8gLmVuYWJsZSAuZGlzYWJsZSBmdW5jdGlvbiBwb2ludGVycy4KPgo+IFRoZSBnZW5l cmljIGludGVyZmFjZXMgd2UndmUgZGlzY3Vzc2VkIHVudGlsIG5vdyB0byBnZXQvcHV0IHZibGFu ayBwb3dlcgo+IGRvbWFpbiBhdG9taWNhbGx5IGFyZSBzdGlsbCBub3QgZ2VuZXJpYyBlbm91Z2gu IFdlIG1pZ2h0IGFzIHdlbGwgYWNjZXB0Cj4gRENfT0ZGIHRvIGJlIGEgc3BlY2lhbCBjYXNlIGFu ZCBkZWFsIHdpdGggaXQgYXMgc3VjaCAtIHRoZXJlIGlzIG5vIG90aGVyCj4gcG93ZXIgd2VsbCB0 aGF0IHdlIG5lZWQgdG8gZW5hYmxlL2Rpc2FibGUgYXRvbWljYWxseS4gV2UgY2FuIGFsd2F5cwo+ IHJld3JpdGUgdGhlIGNvZGUgaW4gdGhlIGZ1dHVyZSBpZiBhIGJldHRlciBpZGVhIGNvbWVzIHVw Lgo+Cj4+PiAgCVBPV0VSX0RPTUFJTl9NT0RFU0VULAo+Pj4gIAlQT1dFUl9ET01BSU5fR1RfSVJR LAo+Pj4gIAlQT1dFUl9ET01BSU5fSU5JVCwKPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4+ PiBpbmRleCAzMGY3OTFmODlkNjQuLjE2NGU2MmNiMDQ3YiAxMDA2NDQKPj4+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcnYuaAo+Pj4gQEAgLTE3OTcsNiArMTc5Nyw5IEBAIGJvb2wgaW50ZWxfZGlzcGxh eV9wb3dlcl9nZXRfaWZfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs Cj4+PiAgCQkJCQllbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRvbWFpbik7Cj4+PiAg dm9pZCBpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4+PiAgCQkJICAgICBlbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRvbWFp bik7Cj4+PiArdm9pZCBpbnRlbF9kaXNwbGF5X3Bvd2VyX3ZibGFua19nZXQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAo+Pj4gKwkJCQkgICAgYm9vbCAqbmVlZHNfcmVzdG9yZSk7 Cj4+IGNhbiB3ZSBkdW1wIHRoZSBuZWVkc19yZXN0b3JlIGFuZCBhbHdheXMgcmVzdG9yZSB0aGUg Y291bnRlcj8KPiBJIGNoZWNrZWQgdGhpcywgc2VlbXMgcG9zc2libGUuCj4KPj4gaWYgc28sIHdl IGNvdWxkIHVzZSByZWd1bGFyIGludGVsX3Bvd2VyX2RvbWFpbl97Z2V0LHB1dH0gZnVuY3Rpb25z IGFuZCBidWlsdCB0aGUgZ2VuZXJpYyBhdG9taWMgaW5zaWRlIGl0Lgo+Pgo+Pj4gK3ZvaWQgaW50 ZWxfZGlzcGxheV9wb3dlcl92YmxhbmtfcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdik7Cj4+PiAgCj4+PiAgc3RhdGljIGlubGluZSB2b2lkCj4+PiAgYXNzZXJ0X3JwbV9kZXZp Y2Vfbm90X3N1c3BlbmRlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcnVudGltZV9wbS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcnVudGltZV9wbS5jCj4+PiBpbmRleCBkNzU4ZGE2MTU2 YTguLjkzYjMyNGRjYzU1ZCAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3J1bnRpbWVfcG0uYwo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcnVu dGltZV9wbS5jCj4+PiBAQCAtNTYsNiArNTYsMTkgQEAgc3RhdGljIHN0cnVjdCBpOTE1X3Bvd2Vy X3dlbGwgKgo+Pj4gIGxvb2t1cF9wb3dlcl93ZWxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPj4+ICAJCSAgZW51bSBpOTE1X3Bvd2VyX3dlbGxfaWQgcG93ZXJfd2VsbF9pZCk7 Cj4+PiAgCj4+PiArLyogT3B0aW1pemUgZm9yIHRoZSBjYXNlIHdoZW4gdGhpcyBpcyBjYWxsZWQg ZnJvbSBhdG9taWMgY29udGV4dHMsCj4+PiArICogYWx0aG91Z2ggdGhlIGNhc2UgaXMgdW5saWtl bHkuCj4+PiArICovCj4+PiArI2RlZmluZSBwb3dlcl93ZWxsX2xvY2socG93ZXJfd2VsbCwgZmxh Z3MpIGRvIHsJCQlcCj4+PiArCWlmIChsaWtlbHkocG93ZXJfd2VsbC0+c3VwcG9ydHNfYXRvbWlj X2N0eCkpCQlcCj4+PiArCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG93ZXJfd2VsbC0+bG9jaywgZmxh Z3MpOwlcCj4+PiArCX0gd2hpbGUgKDApCj4+PiArCj4+PiArI2RlZmluZSBwb3dlcl93ZWxsX3Vu bG9jayhwb3dlcl93ZWxsLCBmbGFncykgZG8gewkJCVwKPj4+ICsJaWYgKGxpa2VseShwb3dlcl93 ZWxsLT5zdXBwb3J0c19hdG9taWNfY3R4KSkJCQlcCj4+PiArCQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZwb3dlcl93ZWxsLT5sb2NrLCBmbGFncyk7CVwKPj4+ICsJfSB3aGlsZSAoMCkKPj4+ICsK Pj4+ICBjb25zdCBjaGFyICoKPj4+ICBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbl9zdHIoZW51 bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBkb21haW4pCj4+PiAgewo+Pj4gQEAgLTEyNiw2 ICsxMzksOCBAQCBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbl9zdHIoZW51bSBpbnRlbF9kaXNw bGF5X3Bvd2VyX2RvbWFpbiBkb21haW4pCj4+PiAgCQlyZXR1cm4gIkFVWF9EIjsKPj4+ICAJY2Fz ZSBQT1dFUl9ET01BSU5fR01CVVM6Cj4+PiAgCQlyZXR1cm4gIkdNQlVTIjsKPj4+ICsJY2FzZSBQ T1dFUl9ET01BSU5fVkJMQU5LOgo+Pj4gKwkJcmV0dXJuICJWQkxBTksiOwo+Pj4gIAljYXNlIFBP V0VSX0RPTUFJTl9JTklUOgo+Pj4gIAkJcmV0dXJuICJJTklUIjsKPj4+ICAJY2FzZSBQT1dFUl9E T01BSU5fTU9ERVNFVDoKPj4+IEBAIC0xNDEsNiArMTU2LDkgQEAgaW50ZWxfZGlzcGxheV9wb3dl cl9kb21haW5fc3RyKGVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gZG9tYWluKQo+Pj4g IHN0YXRpYyB2b2lkIGludGVsX3Bvd2VyX3dlbGxfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPj4+ICAJCQkJICAgIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2Vy X3dlbGwpCj4+PiAgewo+Pj4gKwlpZiAocG93ZXJfd2VsbC0+c3VwcG9ydHNfYXRvbWljX2N0eCkK Pj4+ICsJCWFzc2VydF9zcGluX2xvY2tlZCgmcG93ZXJfd2VsbC0+bG9jayk7Cj4+PiArCj4+PiAg CURSTV9ERUJVR19LTVMoImVuYWJsaW5nICVzXG4iLCBwb3dlcl93ZWxsLT5uYW1lKTsKPj4+ICAJ cG93ZXJfd2VsbC0+b3BzLT5lbmFibGUoZGV2X3ByaXYsIHBvd2VyX3dlbGwpOwo+Pj4gIAlwb3dl cl93ZWxsLT5od19lbmFibGVkID0gdHJ1ZTsKPj4+IEBAIC0xNDksMjYgKzE2Nyw0MyBAQCBzdGF0 aWMgdm9pZCBpbnRlbF9wb3dlcl93ZWxsX2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCj4+PiAgc3RhdGljIHZvaWQgaW50ZWxfcG93ZXJfd2VsbF9kaXNhYmxlKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4+ICAJCQkJICAgICBzdHJ1Y3QgaTkxNV9w b3dlcl93ZWxsICpwb3dlcl93ZWxsKQo+Pj4gIHsKPj4+ICsJaWYgKHBvd2VyX3dlbGwtPnN1cHBv cnRzX2F0b21pY19jdHgpCj4+PiArCQlhc3NlcnRfc3Bpbl9sb2NrZWQoJnBvd2VyX3dlbGwtPmxv Y2spOwo+Pj4gKwo+Pj4gIAlEUk1fREVCVUdfS01TKCJkaXNhYmxpbmcgJXNcbiIsIHBvd2VyX3dl bGwtPm5hbWUpOwo+Pj4gIAlwb3dlcl93ZWxsLT5od19lbmFibGVkID0gZmFsc2U7Cj4+PiAgCXBv d2VyX3dlbGwtPm9wcy0+ZGlzYWJsZShkZXZfcHJpdiwgcG93ZXJfd2VsbCk7Cj4+PiAgfQo+Pj4g IAo+Pj4gLXN0YXRpYyB2b2lkIGludGVsX3Bvd2VyX3dlbGxfZ2V0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKPj4+ICtzdGF0aWMgdm9pZCBfX2ludGVsX3Bvd2VyX3dlbGxfZ2V0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4+ICAJCQkJIHN0cnVjdCBpOTE1 X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGwpCj4+PiAgewo+Pj4gIAlpZiAoIXBvd2VyX3dlbGwtPmNv dW50KyspCj4+PiAgCQlpbnRlbF9wb3dlcl93ZWxsX2VuYWJsZShkZXZfcHJpdiwgcG93ZXJfd2Vs bCk7Cj4+PiAgfQo+Pj4gIAo+Pj4gK3N0YXRpYyB2b2lkIGludGVsX3Bvd2VyX3dlbGxfZ2V0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4+ICsJCQkJIHN0cnVjdCBpOTE1X3Bv d2VyX3dlbGwgKnBvd2VyX3dlbGwpCj4+PiArewo+Pj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzID0g MDsKPj4+ICsKPj4+ICsJcG93ZXJfd2VsbF9sb2NrKHBvd2VyX3dlbGwsIGZsYWdzKTsKPj4+ICsJ X19pbnRlbF9wb3dlcl93ZWxsX2dldChkZXZfcHJpdiwgcG93ZXJfd2VsbCk7Cj4+PiArCXBvd2Vy X3dlbGxfdW5sb2NrKHBvd2VyX3dlbGwsIGZsYWdzKTsKPj4+ICt9Cj4+PiArCj4+PiAgc3RhdGlj IHZvaWQgaW50ZWxfcG93ZXJfd2VsbF9wdXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAo+Pj4gIAkJCQkgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkKPj4+ICB7 Cj4+PiArCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwo+Pj4gKwo+Pj4gKwlwb3dlcl93ZWxsX2xv Y2socG93ZXJfd2VsbCwgZmxhZ3MpOwo+Pj4gIAlXQVJOKCFwb3dlcl93ZWxsLT5jb3VudCwgIlVz ZSBjb3VudCBvbiBwb3dlciB3ZWxsICVzIGlzIGFscmVhZHkgemVybyIsCj4+PiAgCSAgICAgcG93 ZXJfd2VsbC0+bmFtZSk7Cj4+PiAgCj4+PiAgCWlmICghLS1wb3dlcl93ZWxsLT5jb3VudCkKPj4+ ICAJCWludGVsX3Bvd2VyX3dlbGxfZGlzYWJsZShkZXZfcHJpdiwgcG93ZXJfd2VsbCk7Cj4+PiAr CXBvd2VyX3dlbGxfdW5sb2NrKHBvd2VyX3dlbGwsIGZsYWdzKTsKPj4+ICB9Cj4+PiAgCj4+PiAg LyoqCj4+PiBAQCAtNzM2LDYgKzc3MSw3IEBAIHN0YXRpYyB2b2lkIGdlbjlfZGNfb2ZmX3Bvd2Vy X3dlbGxfZGlzYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+PiAgCQlz a2xfZW5hYmxlX2RjNihkZXZfcHJpdik7Cj4+PiAgCWVsc2UgaWYgKGRldl9wcml2LT5jc3IuYWxs b3dlZF9kY19tYXNrICYgRENfU1RBVEVfRU5fVVBUT19EQzUpCj4+PiAgCQlnZW45X2VuYWJsZV9k YzUoZGV2X3ByaXYpOwo+Pj4gKwlwb3dlcl93ZWxsLT5kY19vZmZfZGlzYWJsZWQgPSB0cnVlOwo+ Pj4gIH0KPj4+ICAKPj4+ICBzdGF0aWMgdm9pZCBpOXh4X3Bvd2VyX3dlbGxfc3luY19od19ub29w KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4+IEBAIC0xNDUzLDYgKzE0ODks NTggQEAgc3RhdGljIHZvaWQgY2h2X3BpcGVfcG93ZXJfd2VsbF9kaXNhYmxlKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4+ICAJY2h2X3NldF9waXBlX3Bvd2VyX3dlbGwoZGV2 X3ByaXYsIHBvd2VyX3dlbGwsIGZhbHNlKTsKPj4+ICB9Cj4+PiAgCj4+PiArdm9pZCBpbnRlbF9k aXNwbGF5X3Bvd2VyX3ZibGFua19nZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+Pj4gKwkJCQkgICAgYm9vbCAqbmVlZHNfcmVzdG9yZSkKPj4+ICt7Cj4+PiArCXN0cnVjdCBp OTE1X3Bvd2VyX2RvbWFpbnMgKnBvd2VyX2RvbWFpbnMgID0gJmRldl9wcml2LT5wb3dlcl9kb21h aW5zOwo+Pj4gKwlzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsOwo+Pj4gKwllbnVt IGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRvbWFpbiA9IFBPV0VSX0RPTUFJTl9WQkxBTks7 Cj4+PiArCj4+PiArCSpuZWVkc19yZXN0b3JlID0gZmFsc2U7Cj4+PiArCj4+PiArCWlmICghSEFT X0NTUihkZXZfcHJpdikpCj4+PiArCQlyZXR1cm47Cj4+PiArCj4+PiArCWlmICghKEhBU19QU1Io ZGV2X3ByaXYpICYmIGRldl9wcml2LT5wc3Iuc2lua19zdXBwb3J0KSkKPj4+ICsJCXJldHVybjsK Pj4+ICsKPj4+ICsJaW50ZWxfcnVudGltZV9wbV9nZXRfbm9yZXN1bWUoZGV2X3ByaXYpOwo+Pj4g Kwo+Pj4gKwlmb3JfZWFjaF9wb3dlcl9kb21haW5fd2VsbChkZXZfcHJpdiwgcG93ZXJfd2VsbCwg QklUX1VMTChkb21haW4pKSB7Cj4+PiArCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKPj4+ICsK Pj4+ICsJCXBvd2VyX3dlbGxfbG9jayhwb3dlcl93ZWxsLCBmbGFncyk7Cj4+PiArCQlfX2ludGVs X3Bvd2VyX3dlbGxfZ2V0KGRldl9wcml2LCBwb3dlcl93ZWxsKTsKPj4+ICsJCSpuZWVkc19yZXN0 b3JlID0gcG93ZXJfd2VsbC0+ZGNfb2ZmX2Rpc2FibGVkOwo+Pj4gKwkJcG93ZXJfd2VsbC0+ZGNf b2ZmX2Rpc2FibGVkID0gZmFsc2U7Cj4+IGl0IHNlZW0gYWxzbyB0aGF0IGJ5IGFsd2F5cyByZXN0 b3Jpbmcgd2UgZG9uJ3QgbmVlZCB0byBhZGQgdGhpcyBzcGVjaWZpYyBkY19vZmZfZGlzYWJsZWQK Pj4gdmFyaWFibGUgaW5zaWRlIHRoZSBnZW5lcmljIHB3IHN0cnVjdC4KPj4KPj4+ICsJCXBvd2Vy X3dlbGxfdW5sb2NrKHBvd2VyX3dlbGwsIGZsYWdzKTsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlhdG9t aWNfaW5jKCZwb3dlcl9kb21haW5zLT5kb21haW5fdXNlX2NvdW50W2RvbWFpbl0pOwo+Pj4gK30K Pj4+ICsKPj4+ICt2b2lkIGludGVsX2Rpc3BsYXlfcG93ZXJfdmJsYW5rX3B1dChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+PiArewo+Pj4gKwlzdHJ1Y3QgaTkxNV9wb3dlcl9k b21haW5zICpwb3dlcl9kb21haW5zID0gJmRldl9wcml2LT5wb3dlcl9kb21haW5zOwo+Pj4gKwlz dHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsOwo+Pj4gKwllbnVtIGludGVsX2Rpc3Bs YXlfcG93ZXJfZG9tYWluIGRvbWFpbiA9IFBPV0VSX0RPTUFJTl9WQkxBTks7Cj4+PiArCj4+PiAr CWlmICghSEFTX0NTUihkZXZfcHJpdikpCj4+PiArCQlyZXR1cm47Cj4+PiArCj4+PiArCWlmICgh KEhBU19QU1IoZGV2X3ByaXYpICYmIGRldl9wcml2LT5wc3Iuc2lua19zdXBwb3J0KSkKPj4+ICsJ CXJldHVybjsKPj4gQ2FuIHdlIHJlbW92ZSB0aGVzZSBjaGVja3MgYW5kIGRvIHRoaXMgZm9yIGFu eSB2YmxhbmsgZG9tYWluPwo+PiBJIGJlbGlldmUgdGhpcyBraW5kIG9mIGFzc29jaWF0aW9uIHNo b3VsZCBiZSBvbmx5IG9uIHRoZSBkb21haW48LT53ZWxsIGFzc29jaWF0aW9uCj4+IGFuZCBub3Qg Y2hlY2sgZm9yIGZlYXR1cmUgaGVyZS4KPiBEbyB5b3UgcmVjb21tZW5kIG1vdmluZyBpdCB1cCB0 byB0aGUgY2FsbGVyPyBJIHdhbnQgdG8gYXZvaWQgYWNxdWlyaW5nCj4gbG9ja3MsIHVwZGF0aW5n IHJlZiBjb3VudHMgZXRjLCB3aGVuIGl0IGlzIG5vdCBuZWVkZWQuCj4KPiBSZWxhdGVkIHRvIHlv dXIgcXVlc3Rpb24sIGlmIG15IHVuZGVyc3RhbmRpbmcgaXMgY29ycmVjdCwgdGhlIGhhcmR3YXJl Cj4gZG9lcyBub3QgcmVhbGx5IGVudGVyIERDNS82IHdpdGhvdXQgUFNSIHdoZW4gYSBwaXBlIGlz IGVuYWJsZWQuIFNvCj4gaW5zdGVhZCBvZiBhbGxvd2luZyBEQzUvNiwgd2UgbWlnaHQgYXMgd2Vs bCBkaXNhYmxlIGl0IHdoZW4gdGhlcmUgaXMgbm8KPiBQU1IuCj4KPgo+Pj4gKwo+Pj4gKwlXQVJO KGF0b21pY19kZWNfcmV0dXJuKCZwb3dlcl9kb21haW5zLT5kb21haW5fdXNlX2NvdW50W2RvbWFp bl0pIDwgMCwKPj4+ICsJICAgICAiVXNlIGNvdW50IG9uIGRvbWFpbiAlcyB3YXMgYWxyZWFkeSB6 ZXJvXG4iLAo+Pj4gKwkgICAgIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluX3N0cihkb21haW4p KTsKPj4gaXMgdGhlIGF0b21pYyBzYWZlIGVub3VnaCBoZXJlPyBvciB3ZSBuZWVkIGEgc3Bpbmxv Y2s/Cj4gSSBiZWxpZXZlIGl0IGlzIHNhZmUsIGRvbWFpbl91c2VfY291bnRbeF0gZG9lcyBub3Qg YWZmZWN0IGFueSBzdWJzZXF1ZW50Cj4gb3BlcmF0aW9uLiBXZSBjYW4gZ2V0IGF3YXkgd2l0aCBt b2RpZnlpbmcgaXQgb3V0c2lkZSB0aGUgcG93ZXIgd2VsbCBzcGluCj4gbG9jay4KPj4+ICsKPj4+ ICsJZm9yX2VhY2hfcG93ZXJfZG9tYWluX3dlbGxfcmV2KGRldl9wcml2LCBwb3dlcl93ZWxsLCBC SVRfVUxMKGRvbWFpbikpCj4+PiArCQlpbnRlbF9wb3dlcl93ZWxsX3B1dChkZXZfcHJpdiwgcG93 ZXJfd2VsbCk7Cj4+PiArCj4+PiArCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKPj4+ ICt9Cj4+PiArCj4+PiAgc3RhdGljIHZvaWQKPj4+ICBfX2ludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0 X2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+PiAgCQkJCSBlbnVt IGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRvbWFpbikKPj4+IEBAIC0xNDYzLDcgKzE1NTEs NyBAQCBfX2ludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0X2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCj4+PiAgCWZvcl9lYWNoX3Bvd2VyX2RvbWFpbl93ZWxsKGRldl9wcml2 LCBwb3dlcl93ZWxsLCBCSVRfVUxMKGRvbWFpbikpCj4+PiAgCQlpbnRlbF9wb3dlcl93ZWxsX2dl dChkZXZfcHJpdiwgcG93ZXJfd2VsbCk7Cj4+PiAgCj4+PiAtCXBvd2VyX2RvbWFpbnMtPmRvbWFp bl91c2VfY291bnRbZG9tYWluXSsrOwo+Pj4gKwlhdG9taWNfaW5jKCZwb3dlcl9kb21haW5zLT5k b21haW5fdXNlX2NvdW50W2RvbWFpbl0pOwo+Pj4gIH0KPj4+ICAKPj4+ICAvKioKPj4+IEBAIC0x NDkyLDYgKzE1ODAsMzggQEAgdm9pZCBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+PiAgCW11dGV4X3VubG9jaygmcG93ZXJfZG9tYWlu cy0+bG9jayk7Cj4+PiAgfQo+Pj4gIAo+Pj4gK3N0YXRpYyBib29sIGRjX29mZl9nZXRfaWZfZW5h YmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+PiArCQkJCSAgZW51bSBp bnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBkb21haW4pCj4+PiArewo+Pj4gKwlzdHJ1Y3QgaTkx NV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsOwo+Pj4gKwlib29sIGlzX2VuYWJsZWQ7Cj4+PiArCXVu c2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwo+Pj4gKwo+Pj4gKwlwb3dlcl93ZWxsID0gbG9va3VwX3Bv d2VyX3dlbGwoZGV2X3ByaXYsIFNLTF9ESVNQX1BXX0RDX09GRik7Cj4+PiArCWlmICghcG93ZXJf d2VsbCB8fCAhKHBvd2VyX3dlbGwtPmRvbWFpbnMgJiBkb21haW4pKQo+Pj4gKwkJcmV0dXJuIHRy dWU7Cj4+PiArCj4+PiArCXBvd2VyX3dlbGxfbG9jayhwb3dlcl93ZWxsLCBmbGFncyk7Cj4+PiAr CWlzX2VuYWJsZWQgPSBwb3dlcl93ZWxsLT5od19lbmFibGVkOwo+Pj4gKwlpZiAoaXNfZW5hYmxl ZCkKPj4+ICsJCV9faW50ZWxfcG93ZXJfd2VsbF9nZXQoZGV2X3ByaXYsIHBvd2VyX3dlbGwpOwo+ Pj4gKwlwb3dlcl93ZWxsX3VubG9jayhwb3dlcl93ZWxsLCBmbGFncyk7Cj4+PiArCj4+PiArCXJl dHVybiBpc19lbmFibGVkOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBkY19vZmZfcHV0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4+ICsJCSAgICAgICBlbnVtIGlu dGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRvbWFpbikKPj4+ICt7Cj4+PiArCXN0cnVjdCBpOTE1 X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGw7Cj4+PiArCj4+PiArCXBvd2VyX3dlbGwgPSBsb29rdXBf cG93ZXJfd2VsbChkZXZfcHJpdiwgU0tMX0RJU1BfUFdfRENfT0ZGKTsKPj4+ICsJaWYgKCFwb3dl cl93ZWxsIHx8ICEocG93ZXJfd2VsbC0+ZG9tYWlucyAmIGRvbWFpbikpCj4+PiArCQlyZXR1cm47 Cj4+PiArCj4+PiArCWludGVsX3Bvd2VyX3dlbGxfcHV0KGRldl9wcml2LCBwb3dlcl93ZWxsKTsK Pj4+ICt9Cj4+PiArCj4+PiAgLyoqCj4+PiAgICogaW50ZWxfZGlzcGxheV9wb3dlcl9nZXRfaWZf ZW5hYmxlZCAtIGdyYWIgYSByZWZlcmVuY2UgZm9yIGFuIGVuYWJsZWQgZGlzcGxheSBwb3dlciBk b21haW4KPj4+ICAgKiBAZGV2X3ByaXY6IGk5MTUgZGV2aWNlIGluc3RhbmNlCj4+PiBAQCAtMTUw OCwyMCArMTYyOCwyNCBAQCBib29sIGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0X2lmX2VuYWJsZWQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+Pj4gIAkJCQkJZW51bSBpbnRlbF9k aXNwbGF5X3Bvd2VyX2RvbWFpbiBkb21haW4pCj4+PiAgewo+Pj4gIAlzdHJ1Y3QgaTkxNV9wb3dl cl9kb21haW5zICpwb3dlcl9kb21haW5zID0gJmRldl9wcml2LT5wb3dlcl9kb21haW5zOwo+Pj4g LQlib29sIGlzX2VuYWJsZWQ7Cj4+PiArCWJvb2wgaXNfZW5hYmxlZCA9IGZhbHNlOwo+Pj4gIAo+ Pj4gIAlpZiAoIWludGVsX3J1bnRpbWVfcG1fZ2V0X2lmX2luX3VzZShkZXZfcHJpdikpCj4+PiAg CQlyZXR1cm4gZmFsc2U7Cj4+PiAgCj4+PiAgCW11dGV4X2xvY2soJnBvd2VyX2RvbWFpbnMtPmxv Y2spOwo+Pj4gIAo+Pj4gKwlpZiAoIWRjX29mZl9nZXRfaWZfZW5hYmxlZChkZXZfcHJpdiwgZG9t YWluKSkKPj4+ICsJCWdvdG8gb3V0Owo+Pj4gKwo+Pj4gIAlpZiAoX19pbnRlbF9kaXNwbGF5X3Bv d2VyX2lzX2VuYWJsZWQoZGV2X3ByaXYsIGRvbWFpbikpIHsKPj4+ICAJCV9faW50ZWxfZGlzcGxh eV9wb3dlcl9nZXRfZG9tYWluKGRldl9wcml2LCBkb21haW4pOwo+Pj4gIAkJaXNfZW5hYmxlZCA9 IHRydWU7Cj4+PiAtCX0gZWxzZSB7Cj4+PiAtCQlpc19lbmFibGVkID0gZmFsc2U7Cj4+PiAgCX0K Pj4+ICAKPj4+ICsJZGNfb2ZmX3B1dChkZXZfcHJpdiwgZG9tYWluKTsKPj4+ICsKPj4+ICtvdXQ6 Cj4+PiAgCW11dGV4X3VubG9jaygmcG93ZXJfZG9tYWlucy0+bG9jayk7Cj4+PiAgCj4+PiAgCWlm ICghaXNfZW5hYmxlZCkKPj4+IEBAIC0xNTQ5LDEwICsxNjczLDkgQEAgdm9pZCBpbnRlbF9kaXNw bGF5X3Bvd2VyX3B1dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+PiAgCj4+ PiAgCW11dGV4X2xvY2soJnBvd2VyX2RvbWFpbnMtPmxvY2spOwo+Pj4gIAo+Pj4gLQlXQVJOKCFw b3dlcl9kb21haW5zLT5kb21haW5fdXNlX2NvdW50W2RvbWFpbl0sCj4+PiAtCSAgICAgIlVzZSBj b3VudCBvbiBkb21haW4gJXMgaXMgYWxyZWFkeSB6ZXJvXG4iLAo+Pj4gKwlXQVJOKGF0b21pY19k ZWNfcmV0dXJuKCZwb3dlcl9kb21haW5zLT5kb21haW5fdXNlX2NvdW50W2RvbWFpbl0pIDwgMCwK Pj4+ICsJICAgICAiVXNlIGNvdW50IG9uIGRvbWFpbiAlcyB3YXMgYWxyZWFkeSB6ZXJvXG4iLAo+ Pj4gIAkgICAgIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluX3N0cihkb21haW4pKTsKPj4+IC0J cG93ZXJfZG9tYWlucy0+ZG9tYWluX3VzZV9jb3VudFtkb21haW5dLS07Cj4+PiAgCj4+PiAgCWZv cl9lYWNoX3Bvd2VyX2RvbWFpbl93ZWxsX3JldihkZXZfcHJpdiwgcG93ZXJfd2VsbCwgQklUX1VM TChkb21haW4pKQo+Pj4gIAkJaW50ZWxfcG93ZXJfd2VsbF9wdXQoZGV2X3ByaXYsIHBvd2VyX3dl bGwpOwo+Pj4gQEAgLTE3MjAsNiArMTg0Myw3IEBAIHZvaWQgaW50ZWxfZGlzcGxheV9wb3dlcl9w dXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+Pj4gIAlCSVRfVUxMKFBPV0VS X0RPTUFJTl9HVF9JUlEpIHwJCQlcCj4+PiAgCUJJVF9VTEwoUE9XRVJfRE9NQUlOX01PREVTRVQp IHwJCQlcCj4+PiAgCUJJVF9VTEwoUE9XRVJfRE9NQUlOX0FVWF9BKSB8CQkJXAo+Pj4gKwlCSVRf VUxMKFBPV0VSX0RPTUFJTl9WQkxBTkspIHwJCQlcCj4+PiAgCUJJVF9VTEwoUE9XRVJfRE9NQUlO X0lOSVQpKQo+Pj4gIAo+Pj4gICNkZWZpbmUgQlhUX0RJU1BMQVlfUE9XRVJXRUxMXzJfUE9XRVJf RE9NQUlOUyAoCQlcCj4+PiBAQCAtMTc0Myw2ICsxODY3LDcgQEAgdm9pZCBpbnRlbF9kaXNwbGF5 X3Bvd2VyX3B1dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+PiAgCUJJVF9V TEwoUE9XRVJfRE9NQUlOX01PREVTRVQpIHwJCQlcCj4+PiAgCUJJVF9VTEwoUE9XRVJfRE9NQUlO X0FVWF9BKSB8CQkJXAo+Pj4gIAlCSVRfVUxMKFBPV0VSX0RPTUFJTl9HTUJVUykgfAkJCVwKPj4+ ICsJQklUX1VMTChQT1dFUl9ET01BSU5fVkJMQU5LKSB8CQkJXAo+Pj4gIAlCSVRfVUxMKFBPV0VS X0RPTUFJTl9JTklUKSkKPj4+ICAjZGVmaW5lIEJYVF9EUElPX0NNTl9BX1BPV0VSX0RPTUFJTlMg KAkJCVwKPj4+ICAJQklUX1VMTChQT1dFUl9ET01BSU5fUE9SVF9ERElfQV9MQU5FUykgfAkJXAo+ Pj4gQEAgLTE4MDMsNiArMTkyOCw3IEBAIHZvaWQgaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+Pj4gIAlCSVRfVUxMKFBPV0VSX0RPTUFJ Tl9NT0RFU0VUKSB8CQkJXAo+Pj4gIAlCSVRfVUxMKFBPV0VSX0RPTUFJTl9BVVhfQSkgfAkJCVwK Pj4+ICAJQklUX1VMTChQT1dFUl9ET01BSU5fR01CVVMpIHwJCQlcCj4+PiArCUJJVF9VTEwoUE9X RVJfRE9NQUlOX1ZCTEFOSykgfAkJCVwKPj4+ICAJQklUX1VMTChQT1dFUl9ET01BSU5fSU5JVCkp Cj4+PiAgCj4+PiAgI2RlZmluZSBDTkxfRElTUExBWV9QT1dFUldFTExfMl9QT1dFUl9ET01BSU5T ICgJCVwKPj4+IEBAIC0xODUwLDYgKzE5NzYsNyBAQCB2b2lkIGludGVsX2Rpc3BsYXlfcG93ZXJf cHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4+ICAJQ05MX0RJU1BMQVlf UE9XRVJXRUxMXzJfUE9XRVJfRE9NQUlOUyB8CQlcCj4+PiAgCUJJVF9VTEwoUE9XRVJfRE9NQUlO X01PREVTRVQpIHwJCQlcCj4+PiAgCUJJVF9VTEwoUE9XRVJfRE9NQUlOX0FVWF9BKSB8CQkJXAo+ Pj4gKwlCSVRfVUxMKFBPV0VSX0RPTUFJTl9WQkxBTkspIHwJCQlcCj4+PiAgCUJJVF9VTEwoUE9X RVJfRE9NQUlOX0lOSVQpKQo+Pj4gIAo+Pj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9wb3dl cl93ZWxsX29wcyBpOXh4X2Fsd2F5c19vbl9wb3dlcl93ZWxsX29wcyA9IHsKPj4+IEBAIC0yMDgz LDkgKzIyMTAsMTIgQEAgYm9vbCBpbnRlbF9kaXNwbGF5X3Bvd2VyX3dlbGxfaXNfZW5hYmxlZChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+PiAgewo+Pj4gIAlzdHJ1Y3QgaTkx NV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsOwo+Pj4gIAlib29sIHJldDsKPj4+ICsJdW5zaWduZWQg bG9uZyBmbGFncyA9IDA7Cj4+PiAgCj4+PiAgCXBvd2VyX3dlbGwgPSBsb29rdXBfcG93ZXJfd2Vs bChkZXZfcHJpdiwgcG93ZXJfd2VsbF9pZCk7Cj4+PiArCXBvd2VyX3dlbGxfbG9jayhwb3dlcl93 ZWxsLCBmbGFncyk7Cj4+PiAgCXJldCA9IHBvd2VyX3dlbGwtPm9wcy0+aXNfZW5hYmxlZChkZXZf cHJpdiwgcG93ZXJfd2VsbCk7Cj4+PiArCXBvd2VyX3dlbGxfdW5sb2NrKHBvd2VyX3dlbGwsIGZs YWdzKTsKPj4+ICAKPj4+ICAJcmV0dXJuIHJldDsKPj4+ICB9Cj4+PiBAQCAtMjEyMCw2ICsyMjUw LDggQEAgc3RhdGljIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgc2tsX3Bvd2VyX3dlbGxzW10gPSB7 Cj4+PiAgCQkuZG9tYWlucyA9IFNLTF9ESVNQTEFZX0RDX09GRl9QT1dFUl9ET01BSU5TLAo+Pj4g IAkJLm9wcyA9ICZnZW45X2RjX29mZl9wb3dlcl93ZWxsX29wcywKPj4+ICAJCS5pZCA9IFNLTF9E SVNQX1BXX0RDX09GRiwKPj4+ICsJCS5zdXBwb3J0c19hdG9taWNfY3R4ID0gdHJ1ZSwKPj4+ICsJ CS5kY19vZmZfZGlzYWJsZWQgPSBmYWxzZSwKPj4+ICAJfSwKPj4+ICAJewo+Pj4gIAkJLm5hbWUg PSAicG93ZXIgd2VsbCAyIiwKPj4+IEBAIC0yMTgwLDYgKzIzMTIsOCBAQCBzdGF0aWMgc3RydWN0 IGk5MTVfcG93ZXJfd2VsbCBieHRfcG93ZXJfd2VsbHNbXSA9IHsKPj4+ICAJCS5kb21haW5zID0g QlhUX0RJU1BMQVlfRENfT0ZGX1BPV0VSX0RPTUFJTlMsCj4+PiAgCQkub3BzID0gJmdlbjlfZGNf b2ZmX3Bvd2VyX3dlbGxfb3BzLAo+Pj4gIAkJLmlkID0gU0tMX0RJU1BfUFdfRENfT0ZGLAo+Pj4g KwkJLnN1cHBvcnRzX2F0b21pY19jdHggPSB0cnVlLAo+Pj4gKwkJLmRjX29mZl9kaXNhYmxlZCA9 IGZhbHNlLAo+Pj4gIAl9LAo+Pj4gIAl7Cj4+PiAgCQkubmFtZSA9ICJwb3dlciB3ZWxsIDIiLAo+ Pj4gQEAgLTIyMzUsNiArMjM2OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsIGds a19wb3dlcl93ZWxsc1tdID0gewo+Pj4gIAkJLmRvbWFpbnMgPSBHTEtfRElTUExBWV9EQ19PRkZf UE9XRVJfRE9NQUlOUywKPj4+ICAJCS5vcHMgPSAmZ2VuOV9kY19vZmZfcG93ZXJfd2VsbF9vcHMs Cj4+PiAgCQkuaWQgPSBTS0xfRElTUF9QV19EQ19PRkYsCj4+PiArCQkuc3VwcG9ydHNfYXRvbWlj X2N0eCA9IHRydWUsCj4+PiArCQkuZGNfb2ZmX2Rpc2FibGVkID0gZmFsc2UsCj4+PiAgCX0sCj4+ PiAgCXsKPj4+ICAJCS5uYW1lID0gInBvd2VyIHdlbGwgMiIsCj4+PiBAQCAtMjM1OSw2ICsyNDk1 LDggQEAgc3RhdGljIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgY25sX3Bvd2VyX3dlbGxzW10gPSB7 Cj4+PiAgCQkuZG9tYWlucyA9IENOTF9ESVNQTEFZX0RDX09GRl9QT1dFUl9ET01BSU5TLAo+Pj4g IAkJLm9wcyA9ICZnZW45X2RjX29mZl9wb3dlcl93ZWxsX29wcywKPj4+ICAJCS5pZCA9IFNLTF9E SVNQX1BXX0RDX09GRiwKPj4+ICsJCS5zdXBwb3J0c19hdG9taWNfY3R4ID0gdHJ1ZSwKPj4+ICsJ CS5kY19vZmZfZGlzYWJsZWQgPSBmYWxzZSwKPj4+ICAJfSwKPj4+ICAJewo+Pj4gIAkJLm5hbWUg PSAicG93ZXIgd2VsbCAyIiwKPj4+IEBAIC0yNDg3LDYgKzI2MjUsNyBAQCBzdGF0aWMgdm9pZCBh c3NlcnRfcG93ZXJfd2VsbF9pZHNfdW5pcXVlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKPj4+ICBpbnQgaW50ZWxfcG93ZXJfZG9tYWluc19pbml0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPj4+ICB7Cj4+PiAgCXN0cnVjdCBpOTE1X3Bvd2VyX2RvbWFpbnMg KnBvd2VyX2RvbWFpbnMgPSAmZGV2X3ByaXYtPnBvd2VyX2RvbWFpbnM7Cj4+PiArCXN0cnVjdCBp OTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGw7Cj4+PiAgCj4+PiAgCWk5MTVfbW9kcGFyYW1zLmRp c2FibGVfcG93ZXJfd2VsbCA9Cj4+PiAgCQlzYW5pdGl6ZV9kaXNhYmxlX3Bvd2VyX3dlbGxfb3B0 aW9uKGRldl9wcml2LAo+Pj4gQEAgLTI1MjQsNiArMjY2MywxMCBAQCBpbnQgaW50ZWxfcG93ZXJf ZG9tYWluc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4+ICAJCXNl dF9wb3dlcl93ZWxscyhwb3dlcl9kb21haW5zLCBpOXh4X2Fsd2F5c19vbl9wb3dlcl93ZWxsKTsK Pj4+ICAJfQo+Pj4gIAo+Pj4gKwlmb3JfZWFjaF9wb3dlcl93ZWxsKGRldl9wcml2LCBwb3dlcl93 ZWxsKQo+Pj4gKwkJaWYgKHBvd2VyX3dlbGwtPnN1cHBvcnRzX2F0b21pY19jdHgpCj4+PiArCQkJ c3Bpbl9sb2NrX2luaXQoJnBvd2VyX3dlbGwtPmxvY2spOwo+Pj4gKwo+Pj4gIAlhc3NlcnRfcG93 ZXJfd2VsbF9pZHNfdW5pcXVlKGRldl9wcml2KTsKPj4+ICAKPj4+ICAJcmV0dXJuIDA7Cj4+PiBA QCAtMjU3MSw5ICsyNzE0LDEzIEBAIHN0YXRpYyB2b2lkIGludGVsX3Bvd2VyX2RvbWFpbnNfc3lu Y19odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+PiAgCj4+PiAgCW11dGV4 X2xvY2soJnBvd2VyX2RvbWFpbnMtPmxvY2spOwo+Pj4gIAlmb3JfZWFjaF9wb3dlcl93ZWxsKGRl dl9wcml2LCBwb3dlcl93ZWxsKSB7Cj4+PiArCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKPj4+ ICsKPj4+ICsJCXBvd2VyX3dlbGxfbG9jayhwb3dlcl93ZWxsLCBmbGFncyk7Cj4+PiAgCQlwb3dl cl93ZWxsLT5vcHMtPnN5bmNfaHcoZGV2X3ByaXYsIHBvd2VyX3dlbGwpOwo+Pj4gIAkJcG93ZXJf d2VsbC0+aHdfZW5hYmxlZCA9IHBvd2VyX3dlbGwtPm9wcy0+aXNfZW5hYmxlZChkZXZfcHJpdiwK Pj4+ICAJCQkJCQkJCSAgICAgcG93ZXJfd2VsbCk7Cj4+PiArCQlwb3dlcl93ZWxsX3VubG9jayhw b3dlcl93ZWxsLCBmbGFncyk7Cj4+PiAgCX0KPj4+ICAJbXV0ZXhfdW5sb2NrKCZwb3dlcl9kb21h aW5zLT5sb2NrKTsKPj4+ICB9Cj4+PiBAQCAtMzA0NiwyMSArMzE5MywyMyBAQCB2b2lkIGludGVs X3Bvd2VyX2RvbWFpbnNfc3VzcGVuZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cj4+PiAgCQlieHRfZGlzcGxheV9jb3JlX3VuaW5pdChkZXZfcHJpdik7Cj4+PiAgfQo+Pj4gIAo+ Pj4gLXN0YXRpYyB2b2lkIGludGVsX3Bvd2VyX2RvbWFpbnNfZHVtcF9pbmZvKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4+ICtzdGF0aWMgdm9pZCBpbnRlbF9wb3dlcl9kb21h aW5zX2R1bXBfaW5mbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+PiArCQkJ CQkgIGNvbnN0IGludCAqcG93ZXJfd2VsbF91c2UpCj4+PiAgewo+Pj4gIAlzdHJ1Y3QgaTkxNV9w b3dlcl9kb21haW5zICpwb3dlcl9kb21haW5zID0gJmRldl9wcml2LT5wb3dlcl9kb21haW5zOwo+ Pj4gIAlzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsOwo+Pj4gKwlpbnQgaSA9IDA7 Cj4+PiAgCj4+PiAgCWZvcl9lYWNoX3Bvd2VyX3dlbGwoZGV2X3ByaXYsIHBvd2VyX3dlbGwpIHsK Pj4+ICAJCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gZG9tYWluOwo+Pj4gIAo+Pj4g IAkJRFJNX0RFQlVHX0RSSVZFUigiJS0yNXMgJWRcbiIsCj4+PiAtCQkJCSBwb3dlcl93ZWxsLT5u YW1lLCBwb3dlcl93ZWxsLT5jb3VudCk7Cj4+PiArCQkJCSBwb3dlcl93ZWxsLT5uYW1lLCBwb3dl cl93ZWxsX3VzZVtpKytdKTsKPj4+ICAKPj4+ICAJCWZvcl9lYWNoX3Bvd2VyX2RvbWFpbihkb21h aW4sIHBvd2VyX3dlbGwtPmRvbWFpbnMpCj4+PiAgCQkJRFJNX0RFQlVHX0RSSVZFUigiICAlLTIz cyAlZFxuIiwKPj4+ICAJCQkJCSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbl9zdHIoZG9tYWlu KSwKPj4+IC0JCQkJCSBwb3dlcl9kb21haW5zLT5kb21haW5fdXNlX2NvdW50W2RvbWFpbl0pOwo+ Pj4gKwkJCQkJIGF0b21pY19yZWFkKCZwb3dlcl9kb21haW5zLT5kb21haW5fdXNlX2NvdW50W2Rv bWFpbl0pKTsKPj4+ICAJfQo+Pj4gIH0KPj4+ICAKPj4+IEBAIC0zMDc5LDYgKzMyMjgsNyBAQCB2 b2lkIGludGVsX3Bvd2VyX2RvbWFpbnNfdmVyaWZ5X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPj4+ICAJc3RydWN0IGk5MTVfcG93ZXJfZG9tYWlucyAqcG93ZXJfZG9t YWlucyA9ICZkZXZfcHJpdi0+cG93ZXJfZG9tYWluczsKPj4+ICAJc3RydWN0IGk5MTVfcG93ZXJf d2VsbCAqcG93ZXJfd2VsbDsKPj4+ICAJYm9vbCBkdW1wX2RvbWFpbl9pbmZvOwo+Pj4gKwlpbnQg cG93ZXJfd2VsbF91c2VbZGV2X3ByaXYtPnBvd2VyX2RvbWFpbnMucG93ZXJfd2VsbF9jb3VudF07 Cj4+PiAgCj4+PiAgCW11dGV4X2xvY2soJnBvd2VyX2RvbWFpbnMtPmxvY2spOwo+Pj4gIAo+Pj4g QEAgLTMwODcsNiArMzIzNywxNCBAQCB2b2lkIGludGVsX3Bvd2VyX2RvbWFpbnNfdmVyaWZ5X3N0 YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4+ICAJCWVudW0gaW50ZWxf ZGlzcGxheV9wb3dlcl9kb21haW4gZG9tYWluOwo+Pj4gIAkJaW50IGRvbWFpbnNfY291bnQ7Cj4+ PiAgCQlib29sIGVuYWJsZWQ7Cj4+PiArCQlpbnQgd2VsbF9jb3VudCwgaSA9IDA7Cj4+PiArCQl1 bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKPj4+ICsKPj4+ICsJCXBvd2VyX3dlbGxfbG9jayhwb3dl cl93ZWxsLCBmbGFncyk7Cj4+PiArCQl3ZWxsX2NvdW50ID0gcG93ZXJfd2VsbC0+Y291bnQ7Cj4+ PiArCQllbmFibGVkID0gcG93ZXJfd2VsbC0+b3BzLT5pc19lbmFibGVkKGRldl9wcml2LCBwb3dl cl93ZWxsKTsKPj4+ICsJCXBvd2VyX3dlbGxfdW5sb2NrKHBvd2VyX3dlbGwsIGZsYWdzKTsKPj4+ ICsJCXBvd2VyX3dlbGxfdXNlW2krK10gPSB3ZWxsX2NvdW50Owo+Pj4gIAo+Pj4gIAkJLyoKPj4+ ICAJCSAqIFBvd2VyIHdlbGxzIG5vdCBiZWxvbmdpbmcgdG8gYW55IGRvbWFpbiAobGlrZSB0aGUg TUlTQ19JTwo+Pj4gQEAgLTMwOTYsMjAgKzMyNTQsMTkgQEAgdm9pZCBpbnRlbF9wb3dlcl9kb21h aW5zX3ZlcmlmeV9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+PiAg CQlpZiAoIXBvd2VyX3dlbGwtPmRvbWFpbnMpCj4+PiAgCQkJY29udGludWU7Cj4+PiAgCj4+PiAt CQllbmFibGVkID0gcG93ZXJfd2VsbC0+b3BzLT5pc19lbmFibGVkKGRldl9wcml2LCBwb3dlcl93 ZWxsKTsKPj4+IC0JCWlmICgocG93ZXJfd2VsbC0+Y291bnQgfHwgcG93ZXJfd2VsbC0+YWx3YXlz X29uKSAhPSBlbmFibGVkKQo+Pj4gKwo+Pj4gKwkJaWYgKCh3ZWxsX2NvdW50IHx8IHBvd2VyX3dl bGwtPmFsd2F5c19vbikgIT0gZW5hYmxlZCkKPj4+ICAJCQlEUk1fRVJST1IoInBvd2VyIHdlbGwg JXMgc3RhdGUgbWlzbWF0Y2ggKHJlZmNvdW50ICVkL2VuYWJsZWQgJWQpIiwKPj4+IC0JCQkJICBw b3dlcl93ZWxsLT5uYW1lLCBwb3dlcl93ZWxsLT5jb3VudCwgZW5hYmxlZCk7Cj4+PiArCQkJCSAg cG93ZXJfd2VsbC0+bmFtZSwgd2VsbF9jb3VudCwgZW5hYmxlZCk7Cj4+PiAgCj4+PiAgCQlkb21h aW5zX2NvdW50ID0gMDsKPj4+ICAJCWZvcl9lYWNoX3Bvd2VyX2RvbWFpbihkb21haW4sIHBvd2Vy X3dlbGwtPmRvbWFpbnMpCj4+PiAtCQkJZG9tYWluc19jb3VudCArPSBwb3dlcl9kb21haW5zLT5k b21haW5fdXNlX2NvdW50W2RvbWFpbl07Cj4+PiArCQkJZG9tYWluc19jb3VudCArPSBhdG9taWNf cmVhZCgmcG93ZXJfZG9tYWlucy0+ZG9tYWluX3VzZV9jb3VudFtkb21haW5dKTsKPj4+ICAKPj4+ IC0JCWlmIChwb3dlcl93ZWxsLT5jb3VudCAhPSBkb21haW5zX2NvdW50KSB7Cj4+PiArCQlpZiAo d2VsbF9jb3VudCAhPSBkb21haW5zX2NvdW50KSB7Cj4+PiAgCQkJRFJNX0VSUk9SKCJwb3dlciB3 ZWxsICVzIHJlZmNvdW50L2RvbWFpbiByZWZjb3VudCBtaXNtYXRjaCAiCj4+PiAgCQkJCSAgIihy ZWZjb3VudCAlZC9kb21haW5zIHJlZmNvdW50ICVkKVxuIiwKPj4+IC0JCQkJICBwb3dlcl93ZWxs LT5uYW1lLCBwb3dlcl93ZWxsLT5jb3VudCwKPj4+IC0JCQkJICBkb21haW5zX2NvdW50KTsKPj4+ ICsJCQkJICBwb3dlcl93ZWxsLT5uYW1lLCB3ZWxsX2NvdW50LCBkb21haW5zX2NvdW50KTsKPj4+ ICAJCQlkdW1wX2RvbWFpbl9pbmZvID0gdHJ1ZTsKPj4+ICAJCX0KPj4+ICAJfQo+Pj4gQEAgLTMx MTgsNyArMzI3NSw3IEBAIHZvaWQgaW50ZWxfcG93ZXJfZG9tYWluc192ZXJpZnlfc3RhdGUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+Pj4gIAkJc3RhdGljIGJvb2wgZHVtcGVk Owo+Pj4gIAo+Pj4gIAkJaWYgKCFkdW1wZWQpIHsKPj4+IC0JCQlpbnRlbF9wb3dlcl9kb21haW5z X2R1bXBfaW5mbyhkZXZfcHJpdik7Cj4+PiArCQkJaW50ZWxfcG93ZXJfZG9tYWluc19kdW1wX2lu Zm8oZGV2X3ByaXYsIHBvd2VyX3dlbGxfdXNlKTsKPj4+ICAJCQlkdW1wZWQgPSB0cnVlOwo+Pj4g IAkJfQo+Pj4gIAl9Cj4+PiAtLSAKPj4+IDIuMTEuMAo+Pj4KPj4gSSB3aWxsIHByb2JhYmx5IGhh dmUgbW9yZSBjb21tZW50cyBsYXRlciwgYnV0IGp1c3QgZG9pbmcgYSBicmFpbiBkdW1wIG5vdwo+ PiBzaW5jZSBJIGVuZCB1cCBmb3JnZXR0aW5nIHRvIHdyaXRlIHllc3RlcmRheS4uLgo+Pgo+PiBU aGUgYXBwcm9hY2ggaGVyZSBpbiBnZW5lcmFsIGlzIGdvb2QgYW5kIG11Y2ggYmV0dGVyIHRoYW4g dGhhdCBwcmUscG9zdCBob29rcy4KPj4gQnV0IEkganVzdCBiZWxpZXZlIHdlIGNhbiBkbyB0aGlz IGhlcmUgaW4gYSBtb3JlIGdlbmVyaWMgYXBwcm9hY2ggdGhhbiBkZXZpYXRpbmcKPj4gdGhlIGlu aXRpYWwgcG93ZXIgd2VsbCBhbmQgZG9tYWlucy4KPiBJIHdvdWxkIGhhdmUgbGlrZWQgYSBnZW5l cmljIGFwcHJvYWNoIChmb3IgZGlzcGxheV9wb3dlcl97Z2V0LHB1dH0pLCBidXQKPiBJIHRoaW5r IHRoaXMgY2FzZSBpcyBzcGVjaWFsIGVub3VnaCB0aGF0IG1ha2luZyBpdCBzdGFuZCBvdXQgaXMg YmV0dGVyLgpBZ3JlZWQsIEkgY2FuIHRoaW5rIG9mIG5vIG90aGVyIHdheSBteXNlbGYgd2l0aG91 dCBtYWtpbmcgdGhlIGdlbmVyaWMgY2FzZSB0b28gY29tcGxpY2F0ZWQuIFRoZSB3aG9sZSBydW50 aW1lIHBvd2VyIG1hbmFnZW1lbnQgYmVjYW1lIHdheSB0b28gY29tcGxleCBmb3IgYSBzcGVjaWFs IGNhc2UuCgp+TWFhcnRlbgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRl bC1nZngK