From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 20/28] drm/i915: Replace global breadcrumbs with per-context interrupt tracking Date: Mon, 28 Jan 2019 16:24:13 +0000 Message-ID: <46ce9919-14d0-7738-feaa-362fa584506e@linux.intel.com> References: <20190128010245.20148-1-chris@chris-wilson.co.uk> <20190128010245.20148-20-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 359ED6E6DF for ; Mon, 28 Jan 2019 16:24:10 +0000 (UTC) In-Reply-To: <20190128010245.20148-20-chris@chris-wilson.co.uk> 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: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDI4LzAxLzIwMTkgMDE6MDIsIENocmlzIFdpbHNvbiB3cm90ZToKPiBBIGZldyB5ZWFycyBh Z28sIHNlZSBjb21taXQgNjg4ZTZjNzI1ODE2ICgiZHJtL2k5MTU6IFNsYXVnaHRlciB0aGUKPiB0 aHVuZGVyaW5nIGk5MTVfd2FpdF9yZXF1ZXN0IGhlcmQiKSwgdGhlIGlzc3VlIG9mIGhhbmRsaW5n IG11bHRpcGxlCj4gY2xpZW50cyB3YWl0aW5nIGluIHBhcmFsbGVsIHdhcyBicm91Z2h0IHRvIG91 ciBhdHRlbnRpb24uIFRoZQo+IHJlcXVpcmVtZW50IHdhcyB0aGF0IGV2ZXJ5IGNsaWVudCBzaG91 bGQgYmUgd29rZW4gaW1tZWRpYXRlbHkgdXBvbiBpdHMKPiByZXF1ZXN0IGJlaW5nIHNpZ25hbGVk LCB3aXRob3V0IGluY3VycmluZyBhbnkgY3B1IG92ZXJoZWFkLgo+IAo+IFRvIGhhbmRsZSBjZXJ0 YWluIGZyYWdpbGl0eSBvZiBvdXIgaHcgbWVhbnQgdGhhdCB3ZSBjb3VsZCBub3QgZG8gYQo+IHNp bXBsZSBjaGVjayBpbnNpZGUgdGhlIGlycSBoYW5kbGVyIChzb21lIGdlbmVyYXRpb25zIHJlcXVp cmVkIGFsbW9zdAo+IHVuYm91bmRlZCBkZWxheXMgYmVmb3JlIHdlIGNvdWxkIGJlIHN1cmUgb2Yg c2Vxbm8gY29oZXJlbmN5KSBhbmQgc28KPiByZXF1ZXN0IGNvbXBsZXRpb24gY2hlY2tpbmcgcmVx dWlyZWQgZGVsZWdhdGlvbi4KPiAKPiBCZWZvcmUgY29tbWl0IDY4OGU2YzcyNTgxNiwgdGhlIHNv bHV0aW9uIHdhcyBzaW1wbGUuIEV2ZXJ5IGNsaWVudAo+IHdhaXRpbmcgb24gYSByZXF1ZXN0IHdv dWxkIGJlIHdva2VuIG9uIGV2ZXJ5IGludGVycnVwdCBhbmQgZWFjaCB3b3VsZCBkbwo+IGEgaGVh dnl3ZWlnaHQgY2hlY2sgdG8gc2VlIGlmIHRoZWlyIHJlcXVlc3Qgd2FzIGNvbXBsZXRlLiBDb21t aXQKPiA2ODhlNmM3MjU4MTYgaW50cm9kdWNlZCBhbiByYnRyZWUgc28gdGhhdCBvbmx5IHRoZSBl YXJsaWVzdCB3YWl0ZXIgb24KPiB0aGUgZ2xvYmFsIHRpbWVsaW5lIHdvdWxkIHdva2VuLCBhbmQg d291bGQgd2FrZSB0aGUgbmV4dCBhbmQgc28gb24uCj4gKEFsb25nIHdpdGggdmFyaW91cyBjb21w bGljYXRpb25zIHRvIGhhbmRsZSByZXF1ZXN0cyBiZWluZyByZW9yZGVyZWQKPiBhbG9uZyB0aGUg Z2xvYmFsIHRpbWVsaW5lLCBhbmQgYWxzbyBhIHJlcXVpcmVtZW50IGZvciBrdGhyZWFkIHRvIHBy b3ZpZGUKPiBhIGRlbGVnYXRlIGZvciBmZW5jZSBzaWduYWxpbmcgdGhhdCBoYWQgbm8gcHJvY2Vz cyBjb250ZXh0LikKPiAKPiBUaGUgZ2xvYmFsIHJidHJlZSBkZXBlbmRzIG9uIGtub3dpbmcgdGhl IGV4ZWN1dGlvbiB0aW1lbGluZSAoYW5kIGdsb2JhbAo+IHNlcW5vKS4gV2l0aG91dCBrbm93aW5n IHRoYXQgb3JkZXIsIHdlIG11c3QgaW5zdGVhZCBjaGVjayBhbGwgY29udGV4dHMKPiBxdWV1ZWQg dG8gdGhlIEhXIHRvIHNlZSB3aGljaCBtYXkgaGF2ZSBhZHZhbmNlZC4gV2UgdHJpbSB0aGF0IGxp c3QgYnkKPiBvbmx5IGNoZWNraW5nIHF1ZXVlZCBjb250ZXh0cyB0aGF0IGFyZSBiZWluZyB3YWl0 ZWQgb24sIGJ1dCBzdGlsbCB3ZQo+IGtlZXAgYSBsaXN0IG9mIGFsbCBhY3RpdmUgY29udGV4dHMg YW5kIHRoZWlyIGFjdGl2ZSBzaWduYWxlcnMgdGhhdCB3ZQo+IGluc3BlY3QgZnJvbSBpbnNpZGUg dGhlIGlycSBoYW5kbGVyLiBCeSBtb3ZpbmcgdGhlIHdhaXRlcnMgb250byB0aGUgZmVuY2UKPiBz aWduYWwgbGlzdCwgd2UgY2FuIGNvbWJpbmUgdGhlIGNsaWVudCB3YWtldXAgd2l0aCB0aGUgZG1h X2ZlbmNlCj4gc2lnbmFsaW5nIChhIGRyYW1hdGljIHJlZHVjdGlvbiBpbiBjb21wbGV4aXR5LCBi dXQgZG9lcyByZXF1aXJlIHRoZSBIVwo+IGJlaW5nIGNvaGVyZW50LCB0aGUgc2Vxbm8gbXVzdCBi ZSB2aXNpYmxlIGZyb20gdGhlIGNwdSBiZWZvcmUgdGhlCj4gaW50ZXJydXB0IGlzIHJhaXNlZCAt IHdlIGtlZXAgYSB0aW1lciBiYWNrdXAganVzdCBpbiBjYXNlKS4KPiAKPiBIYXZpbmcgcHJldmlv dXNseSBmaXhlZCBhbGwgdGhlIGlzc3VlcyB3aXRoIGlycS1zZXFubyBzZXJpYWxpc2F0aW9uIChi eQo+IGluc2VydGluZyBkZWxheXMgb250byB0aGUgR1BVIGFmdGVyIGVhY2ggcmVxdWVzdCBpbnN0 ZWFkIG9mIHJhbmRvbSBkZWxheXMKPiBvbiB0aGUgQ1BVIGFmdGVyIGVhY2ggaW50ZXJydXB0KSwg d2UgY2FuIHJlbHkgb24gdGhlIHNlcW5vIHN0YXRlIHRvCj4gcGVyZm9tIGRpcmVjdCB3YWtldXBz IGZyb20gdGhlIGludGVycnVwdCBoYW5kbGVyLiBUaGlzIGFsbG93cyB1cyB0bwo+IHByZXNlcnZl IG91ciBzaW5nbGUgY29udGV4dCBzd2l0Y2ggYmVoYXZpb3VyIG9mIHRoZSBjdXJyZW50IHJvdXRp bmUsCj4gd2l0aCB0aGUgb25seSBkb3duc2lkZSB0aGF0IHdlIGxvc2UgdGhlIFJUIHByaW9yaXR5 IHNvcnRpbmcgb2Ygd2FrZXVwcy4KPiBJbiBnZW5lcmFsLCBkaXJlY3Qgd2FrZXVwIGxhdGVuY3kg b2YgbXVsdGlwbGUgY2xpZW50cyBpcyBhYm91dCB0aGUgc2FtZQo+IChhYm91dCAxMCUgYmV0dGVy IGluIG1vc3QgY2FzZXMpIHdpdGggYSByZWR1Y3Rpb24gaW4gdG90YWwgQ1BVIHRpbWUgc3BlbnQK PiBpbiB0aGUgd2FpdGVyIChhYm91dCAyMC01MCUgZGVwZW5kaW5nIG9uIGdlbikuIEF2ZXJhZ2Ug aGVyZCBiZWhhdmlvdXIgaXMKPiBpbXByb3ZlZCwgYnV0IGF0IHRoZSBjb3N0IG9mIG5vdCBkZWxl Z2F0aW5nIHdha2V1cHMgb24gdGFza19wcmlvLgo+IAo+IHYyOiBDYXB0dXJlIGZlbmNlIHNpZ25h bGluZyBzdGF0ZSBmb3IgZXJyb3Igc3RhdGUgYW5kIGFkZCBjb21tZW50cyB0bwo+IHdhcm0gZXZl biB0aGUgbW9zdCBjb2xkIG9mIGhlYXJ0cy4KPiB2MzogQ2hlY2sgaWYgdGhlIHJlcXVlc3QgaXMg c3RpbGwgYWN0aXZlIGJlZm9yZSBidXN5d2FpdGluZwo+IHY0OiBSZWR1Y2UgdGhlIGFtb3VudCBv ZiBwb2ludGVyIG1pc2RpcmVjdGlvbiB3aXRoIGxpc3RfZm9yX2VhY2hfc2FmZQo+IGFuZCB1c2lu ZyBhIGxvY2FsIGk5MTVfcmVxdWVzdCB2YXJpYWJsZSBpbnNpZGUgdGhlIGxvb3BzCj4gdjU6IEFk ZCBhIG1pc3NpbmcgcGx1cmFsaXNhdGlvbiB0byBhIHB1cmVseSBpbmZvcm1hdGl2ZSBzZWxmdGVz dCBtZXNzYWdlLgoKVGhlcmUgd2VyZSBzb21lIG1vcmUgY2hhbmdlcyB3aGljaCB5b3UgaW1wbGVt ZW50ZWQgYWZ0ZXIgdGhlIGxhc3Qgcm91bmQgCm9mIHJldmlldy4KCkkgaGF2ZSBubyBmdXJ0aGVy IHNpZ25pZmljYW50IGNvbXBsYWludHMuCgpSZXZpZXdlZC1ieTogVHZydGtvIFVyc3VsaW4gPHR2 cnRrby51cnN1bGluQGludGVsLmNvbT4KCklkZWFsbHkgSm9obiByZS1hcHBlYXJzIHRvIGxlbmQg YW5vdGhlciBwYWlyIG9mIGV5ZXMgdG8gdGhlIHByb2JsZW0uIApHaXZlbiB0aGUgc2l6ZSBvZiB0 aGUgY2hhbmdlIGl0IHdvdWxkIGJlIGdvb2QgdG8gZG91YmxlIGNoZWNrIGl0LgoKUmVnYXJkcywK ClR2cnRrbwoKPiAKPiBSZWZlcmVuY2VzOiA2ODhlNmM3MjU4MTYgKCJkcm0vaTkxNTogU2xhdWdo dGVyIHRoZSB0aHVuZGVyaW5nIGk5MTVfd2FpdF9yZXF1ZXN0IGhlcmQiKQo+IFNpZ25lZC1vZmYt Ynk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IENjOiBUdnJ0a28g VXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+IC0tLQo+ICAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgICAgICAgICAgIHwgIDI4ICstCj4gICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMgICAgICAgfCAgIDMgKwo+ICAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5oICAgICAgIHwgICAyICsKPiAgIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMgICAgICAgICB8ICA4MyArLQo+ICAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuaCAgICAgICAgIHwgICA5ICstCj4gICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jICAgICAgICAgICAgICAgfCAgODggKy0KPiAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jICAgICAgICAgICB8IDE0MiArKy0KPiAg IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5oICAgICAgICAgICB8ICA3MiArLQo+ ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXNldC5jICAgICAgICAgICAgIHwgIDE2ICst Cj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jICAgICAgICAgfCAgIDIg Ky0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2JyZWFkY3J1bWJzLmMgICAgICB8IDgx OCArKysrKy0tLS0tLS0tLS0tLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2lu ZV9jcy5jICAgICAgICB8ICAzNSArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmlu Z2J1ZmZlci5jICAgICAgIHwgICAyICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9y aW5nYnVmZmVyLmggICAgICAgfCAgOTQgKy0KPiAgIC4uLi9kcm0vaTkxNS9zZWxmdGVzdHMvaTkx NV9tb2NrX3NlbGZ0ZXN0cy5oICB8ICAgMSAtCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxm dGVzdHMvaTkxNV9yZXF1ZXN0LmMgfCA0MjUgKysrKysrKysrCj4gICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvaWd0X3NwaW5uZXIuYyAgfCAgIDUgLQo+ICAgLi4uL2RybS9pOTE1L3Nl bGZ0ZXN0cy9pbnRlbF9icmVhZGNydW1icy5jICAgIHwgNDcwIC0tLS0tLS0tLS0KPiAgIC4uLi9n cHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2hhbmdjaGVjay5jICB8ICAgMiArLQo+ICAgZHJp dmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2xpYl9zd19mZW5jZS5jIHwgIDU0ICsrCj4gICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbGliX3N3X2ZlbmNlLmggfCAgIDMgKwo+ICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZW5naW5lLmMgIHwgIDE3ICstCj4g ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19lbmdpbmUuaCAgfCAgIDYgLQo+ ICAgMjMgZmlsZXMgY2hhbmdlZCwgODk0IGluc2VydGlvbnMoKyksIDE0ODMgZGVsZXRpb25zKC0p Cj4gICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2lu dGVsX2JyZWFkY3J1bWJzLmMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+IGlu ZGV4IGY1YWMwM2YwNmUyNi4uYjFhYzBmNzhjYjQyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kZWJ1Z2ZzLmMKPiBAQCAtMTMxNiwyOSArMTMxNiwxNiBAQCBzdGF0aWMgaW50IGk5MTVfaGFu Z2NoZWNrX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gICAJc2VxX3By aW50ZihtLCAiR1QgYWN0aXZlPyAlc1xuIiwgeWVzbm8oZGV2X3ByaXYtPmd0LmF3YWtlKSk7Cj4g ICAKPiAgIAlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBkZXZfcHJpdiwgaWQpIHsKPiAtCQlzdHJ1 Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKPiAtCQlzdHJ1 Y3QgcmJfbm9kZSAqcmI7Cj4gLQo+ICAgCQlzZXFfcHJpbnRmKG0sICIlczpcbiIsIGVuZ2luZS0+ bmFtZSk7Cj4gICAJCXNlcV9wcmludGYobSwgIlx0c2Vxbm8gPSAleCBbY3VycmVudCAleCwgbGFz dCAleF0sICVkbXMgYWdvXG4iLAo+ICAgCQkJICAgZW5naW5lLT5oYW5nY2hlY2suc2Vxbm8sIHNl cW5vW2lkXSwKPiAgIAkJCSAgIGludGVsX2VuZ2luZV9sYXN0X3N1Ym1pdChlbmdpbmUpLAo+ICAg CQkJICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0KPiAgIAkJCQkJICAgIGVuZ2luZS0+aGFu Z2NoZWNrLmFjdGlvbl90aW1lc3RhbXApKTsKPiAtCQlzZXFfcHJpbnRmKG0sICJcdHdhaXRlcnM/ ICVzLCBmYWtlIGlycSBhY3RpdmU/ICVzXG4iLAo+IC0JCQkgICB5ZXNubyhpbnRlbF9lbmdpbmVf aGFzX3dhaXRlcihlbmdpbmUpKSwKPiArCQlzZXFfcHJpbnRmKG0sICJcdGZha2UgaXJxIGFjdGl2 ZT8gJXNcbiIsCj4gICAJCQkgICB5ZXNubyh0ZXN0X2JpdChlbmdpbmUtPmlkLAo+ICAgCQkJCQkg ICZkZXZfcHJpdi0+Z3B1X2Vycm9yLm1pc3NlZF9pcnFfcmluZ3MpKSk7Cj4gICAKPiAtCQlzcGlu X2xvY2tfaXJxKCZiLT5yYl9sb2NrKTsKPiAtCQlmb3IgKHJiID0gcmJfZmlyc3QoJmItPndhaXRl cnMpOyByYjsgcmIgPSByYl9uZXh0KHJiKSkgewo+IC0JCQlzdHJ1Y3QgaW50ZWxfd2FpdCAqdyA9 IHJiX2VudHJ5KHJiLCB0eXBlb2YoKncpLCBub2RlKTsKPiAtCj4gLQkJCXNlcV9wcmludGYobSwg Ilx0JXMgWyVkXSB3YWl0aW5nIGZvciAleFxuIiwKPiAtCQkJCSAgIHctPnRzay0+Y29tbSwgdy0+ dHNrLT5waWQsIHctPnNlcW5vKTsKPiAtCQl9Cj4gLQkJc3Bpbl91bmxvY2tfaXJxKCZiLT5yYl9s b2NrKTsKPiAtCj4gICAJCXNlcV9wcmludGYobSwgIlx0QUNUSEQgPSAweCUwOGxseCBbY3VycmVu dCAweCUwOGxseF1cbiIsCj4gICAJCQkgICAobG9uZyBsb25nKWVuZ2luZS0+aGFuZ2NoZWNrLmFj dGhkLAo+ICAgCQkJICAgKGxvbmcgbG9uZylhY3RoZFtpZF0pOwo+IEBAIC0yMDIyLDE4ICsyMDA5 LDYgQEAgc3RhdGljIGludCBpOTE1X3N3aXp6bGVfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZv aWQgKmRhdGEpCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGludCBjb3VudF9p cnFfd2FpdGVycyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAtewo+IC0Jc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+IC0JZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4g LQlpbnQgY291bnQgPSAwOwo+IC0KPiAtCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlk KQo+IC0JCWNvdW50ICs9IGludGVsX2VuZ2luZV9oYXNfd2FpdGVyKGVuZ2luZSk7Cj4gLQo+IC0J cmV0dXJuIGNvdW50Owo+IC19Cj4gLQo+ICAgc3RhdGljIGNvbnN0IGNoYXIgKnJwc19wb3dlcl90 b19zdHIodW5zaWduZWQgaW50IHBvd2VyKQo+ICAgewo+ICAgCXN0YXRpYyBjb25zdCBjaGFyICog Y29uc3Qgc3RyaW5nc1tdID0gewo+IEBAIC0yMDczLDcgKzIwNDgsNiBAQCBzdGF0aWMgaW50IGk5 MTVfcnBzX2Jvb3N0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ICAgCXNl cV9wcmludGYobSwgIlJQUyBlbmFibGVkPyAlZFxuIiwgcnBzLT5lbmFibGVkKTsKPiAgIAlzZXFf cHJpbnRmKG0sICJHUFUgYnVzeT8gJXMgWyVkIHJlcXVlc3RzXVxuIiwKPiAgIAkJICAgeWVzbm8o ZGV2X3ByaXYtPmd0LmF3YWtlKSwgZGV2X3ByaXYtPmd0LmFjdGl2ZV9yZXF1ZXN0cyk7Cj4gLQlz ZXFfcHJpbnRmKG0sICJDUFUgd2FpdGluZz8gJWRcbiIsIGNvdW50X2lycV93YWl0ZXJzKGRldl9w cml2KSk7Cj4gICAJc2VxX3ByaW50ZihtLCAiQm9vc3RzIG91dHN0YW5kaW5nPyAlZFxuIiwKPiAg IAkJICAgYXRvbWljX3JlYWQoJnJwcy0+bnVtX3dhaXRlcnMpKTsKPiAgIAlzZXFfcHJpbnRmKG0s ICJJbnRlcmFjdGl2ZT8gJWRcbiIsIFJFQURfT05DRShycHMtPnBvd2VyLmludGVyYWN0aXZlKSk7 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwo+IGluZGV4IDkzZTg0NzUx MzcwZi4uNmZhZjFmNmZhYWI1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2NvbnRleHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2Nv bnRleHQuYwo+IEBAIC0zMjcsNiArMzI3LDkgQEAgaW50ZWxfY29udGV4dF9pbml0KHN0cnVjdCBp bnRlbF9jb250ZXh0ICpjZSwKPiAgIAkJICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQo+ICAgewo+ICAgCWNlLT5nZW1fY29udGV4dCA9IGN0eDsKPiArCj4gKwlJTklUX0xJU1RfSEVB RCgmY2UtPnNpZ25hbF9saW5rKTsKPiArCUlOSVRfTElTVF9IRUFEKCZjZS0+c2lnbmFscyk7Cj4g ICB9Cj4gICAKPiAgIHN0YXRpYyBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuaAo+IGluZGV4IDM3Njk0MzgyMjhmNi4uNmJhNDBm ZjZiOTFmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRl eHQuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuaAo+IEBA IC0xNjQsNiArMTY0LDggQEAgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgewo+ICAgCXN0cnVjdCBp bnRlbF9jb250ZXh0IHsKPiAgIAkJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmdlbV9jb250ZXh0 Owo+ICAgCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICphY3RpdmU7Cj4gKwkJc3RydWN0IGxpc3Rf aGVhZCBzaWduYWxfbGluazsKPiArCQlzdHJ1Y3QgbGlzdF9oZWFkIHNpZ25hbHM7Cj4gICAJCXN0 cnVjdCBpOTE1X3ZtYSAqc3RhdGU7Cj4gICAJCXN0cnVjdCBpbnRlbF9yaW5nICpyaW5nOwo+ICAg CQl1MzIgKmxyY19yZWdfc3RhdGU7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ3B1X2Vycm9yLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5j Cj4gaW5kZXggODk4ZTA2MDE0Mjk1Li4zMDRhN2VmN2Y3ZmIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ3B1X2Vycm9yLmMKPiBAQCAtNDQ3LDkgKzQ0NywxNCBAQCBzdGF0aWMgdm9pZCBl cnJvcl9wcmludF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZV9idWYgKm0sCj4g ICAJaWYgKCFlcnEtPnNlcW5vKQo+ICAgCQlyZXR1cm47Cj4gICAKPiAtCWVycl9wcmludGYobSwg IiVzIHBpZCAlZCwgYmFuIHNjb3JlICVkLCBzZXFubyAlOHg6JTA4eCwgcHJpbyAlZCwgZW1pdHRl ZCAlZG1zLCBzdGFydCAlMDh4LCBoZWFkICUwOHgsIHRhaWwgJTA4eFxuIiwKPiArCWVycl9wcmlu dGYobSwgIiVzIHBpZCAlZCwgYmFuIHNjb3JlICVkLCBzZXFubyAlOHg6JTA4eCVzJXMsIHByaW8g JWQsIGVtaXR0ZWQgJWRtcywgc3RhcnQgJTA4eCwgaGVhZCAlMDh4LCB0YWlsICUwOHhcbiIsCj4g ICAJCSAgIHByZWZpeCwgZXJxLT5waWQsIGVycS0+YmFuX3Njb3JlLAo+IC0JCSAgIGVycS0+Y29u dGV4dCwgZXJxLT5zZXFubywgZXJxLT5zY2hlZF9hdHRyLnByaW9yaXR5LAo+ICsJCSAgIGVycS0+ Y29udGV4dCwgZXJxLT5zZXFubywKPiArCQkgICB0ZXN0X2JpdChETUFfRkVOQ0VfRkxBR19TSUdO QUxFRF9CSVQsCj4gKwkJCSAgICAmZXJxLT5mbGFncykgPyAiISIgOiAiIiwKPiArCQkgICB0ZXN0 X2JpdChETUFfRkVOQ0VfRkxBR19FTkFCTEVfU0lHTkFMX0JJVCwKPiArCQkJICAgICZlcnEtPmZs YWdzKSA/ICIrIiA6ICIiLAo+ICsJCSAgIGVycS0+c2NoZWRfYXR0ci5wcmlvcml0eSwKPiAgIAkJ ICAgamlmZmllc190b19tc2VjcyhlcnEtPmppZmZpZXMgLSBlcG9jaCksCj4gICAJCSAgIGVycS0+ c3RhcnQsIGVycS0+aGVhZCwgZXJxLT50YWlsKTsKPiAgIH0KPiBAQCAtNTMwLDcgKzUzNSw2IEBA IHN0YXRpYyB2b2lkIGVycm9yX3ByaW50X2VuZ2luZShzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3Rh dGVfYnVmICptLAo+ICAgCX0KPiAgIAllcnJfcHJpbnRmKG0sICIgIHNlcW5vOiAweCUwOHhcbiIs IGVlLT5zZXFubyk7Cj4gICAJZXJyX3ByaW50ZihtLCAiICBsYXN0X3NlcW5vOiAweCUwOHhcbiIs IGVlLT5sYXN0X3NlcW5vKTsKPiAtCWVycl9wcmludGYobSwgIiAgd2FpdGluZzogJXNcbiIsIHll c25vKGVlLT53YWl0aW5nKSk7Cj4gICAJZXJyX3ByaW50ZihtLCAiICByaW5nLT5oZWFkOiAweCUw OHhcbiIsIGVlLT5jcHVfcmluZ19oZWFkKTsKPiAgIAllcnJfcHJpbnRmKG0sICIgIHJpbmctPnRh aWw6IDB4JTA4eFxuIiwgZWUtPmNwdV9yaW5nX3RhaWwpOwo+ICAgCWVycl9wcmludGYobSwgIiAg aGFuZ2NoZWNrIHRpbWVzdGFtcDogJWRtcyAoJWx1JXMpXG4iLAo+IEBAIC04MDQsMjEgKzgwOCw2 IEBAIHN0YXRpYyB2b2lkIF9fZXJyX3ByaW50X3RvX3NnbChzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jf c3RhdGVfYnVmICptLAo+ICAgCQkJCQkJICAgIGVycm9yLT5lcG9jaCk7Cj4gICAJCX0KPiAgIAo+ IC0JCWlmIChJU19FUlIoZWUtPndhaXRlcnMpKSB7Cj4gLQkJCWVycl9wcmludGYobSwgIiVzIC0t LSA/IHdhaXRlcnMgW3VuYWJsZSB0byBhY3F1aXJlIHNwaW5sb2NrXVxuIiwKPiAtCQkJCSAgIG0t Pmk5MTUtPmVuZ2luZVtpXS0+bmFtZSk7Cj4gLQkJfSBlbHNlIGlmIChlZS0+bnVtX3dhaXRlcnMp IHsKPiAtCQkJZXJyX3ByaW50ZihtLCAiJXMgLS0tICVkIHdhaXRlcnNcbiIsCj4gLQkJCQkgICBt LT5pOTE1LT5lbmdpbmVbaV0tPm5hbWUsCj4gLQkJCQkgICBlZS0+bnVtX3dhaXRlcnMpOwo+IC0J CQlmb3IgKGogPSAwOyBqIDwgZWUtPm51bV93YWl0ZXJzOyBqKyspIHsKPiAtCQkJCWVycl9wcmlu dGYobSwgIiBzZXFubyAweCUwOHggZm9yICVzIFslZF1cbiIsCj4gLQkJCQkJICAgZWUtPndhaXRl cnNbal0uc2Vxbm8sCj4gLQkJCQkJICAgZWUtPndhaXRlcnNbal0uY29tbSwKPiAtCQkJCQkgICBl ZS0+d2FpdGVyc1tqXS5waWQpOwo+IC0JCQl9Cj4gLQkJfQo+IC0KPiAgIAkJcHJpbnRfZXJyb3Jf b2JqKG0sIG0tPmk5MTUtPmVuZ2luZVtpXSwKPiAgIAkJCQkicmluZ2J1ZmZlciIsIGVlLT5yaW5n YnVmZmVyKTsKPiAgIAo+IEBAIC0xMDAwLDggKzk4OSw2IEBAIHZvaWQgX19pOTE1X2dwdV9zdGF0 ZV9mcmVlKHN0cnVjdCBrcmVmICplcnJvcl9yZWYpCj4gICAJCWk5MTVfZXJyb3Jfb2JqZWN0X2Zy ZWUoZWUtPndhX2N0eCk7Cj4gICAKPiAgIAkJa2ZyZWUoZWUtPnJlcXVlc3RzKTsKPiAtCQlpZiAo IUlTX0VSUl9PUl9OVUxMKGVlLT53YWl0ZXJzKSkKPiAtCQkJa2ZyZWUoZWUtPndhaXRlcnMpOwo+ ICAgCX0KPiAgIAo+ICAgCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVycm9yLT5hY3RpdmVf Ym8pOyBpKyspCj4gQEAgLTEyMDUsNTkgKzExOTIsNiBAQCBzdGF0aWMgdm9pZCBnZW42X3JlY29y ZF9zZW1hcGhvcmVfc3RhdGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAgCQkJ STkxNV9SRUFEKFJJTkdfU1lOQ18yKGVuZ2luZS0+bW1pb19iYXNlKSk7Cj4gICB9Cj4gICAKPiAt c3RhdGljIHZvaWQgZXJyb3JfcmVjb3JkX2VuZ2luZV93YWl0ZXJzKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwKPiAtCQkJCQlzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfZW5naW5lICplZSkK PiAtewo+IC0Jc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiID0gJmVuZ2luZS0+YnJlYWRjcnVt YnM7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfd2FpdGVyICp3YWl0ZXI7Cj4gLQlzdHJ1Y3Qg cmJfbm9kZSAqcmI7Cj4gLQlpbnQgY291bnQ7Cj4gLQo+IC0JZWUtPm51bV93YWl0ZXJzID0gMDsK PiAtCWVlLT53YWl0ZXJzID0gTlVMTDsKPiAtCj4gLQlpZiAoUkJfRU1QVFlfUk9PVCgmYi0+d2Fp dGVycykpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWlmICghc3Bpbl90cnlsb2NrX2lycSgmYi0+cmJf bG9jaykpIHsKPiAtCQllZS0+d2FpdGVycyA9IEVSUl9QVFIoLUVERUFETEspOwo+IC0JCXJldHVy bjsKPiAtCX0KPiAtCj4gLQljb3VudCA9IDA7Cj4gLQlmb3IgKHJiID0gcmJfZmlyc3QoJmItPndh aXRlcnMpOyByYiAhPSBOVUxMOyByYiA9IHJiX25leHQocmIpKQo+IC0JCWNvdW50Kys7Cj4gLQlz cGluX3VubG9ja19pcnEoJmItPnJiX2xvY2spOwo+IC0KPiAtCXdhaXRlciA9IE5VTEw7Cj4gLQlp ZiAoY291bnQpCj4gLQkJd2FpdGVyID0ga21hbGxvY19hcnJheShjb3VudCwKPiAtCQkJCSAgICAg ICBzaXplb2Yoc3RydWN0IGRybV9pOTE1X2Vycm9yX3dhaXRlciksCj4gLQkJCQkgICAgICAgR0ZQ X0FUT01JQyk7Cj4gLQlpZiAoIXdhaXRlcikKPiAtCQlyZXR1cm47Cj4gLQo+IC0JaWYgKCFzcGlu X3RyeWxvY2tfaXJxKCZiLT5yYl9sb2NrKSkgewo+IC0JCWtmcmVlKHdhaXRlcik7Cj4gLQkJZWUt PndhaXRlcnMgPSBFUlJfUFRSKC1FREVBRExLKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQo+IC0J ZWUtPndhaXRlcnMgPSB3YWl0ZXI7Cj4gLQlmb3IgKHJiID0gcmJfZmlyc3QoJmItPndhaXRlcnMp OyByYjsgcmIgPSByYl9uZXh0KHJiKSkgewo+IC0JCXN0cnVjdCBpbnRlbF93YWl0ICp3ID0gcmJf ZW50cnkocmIsIHR5cGVvZigqdyksIG5vZGUpOwo+IC0KPiAtCQlzdHJjcHkod2FpdGVyLT5jb21t LCB3LT50c2stPmNvbW0pOwo+IC0JCXdhaXRlci0+cGlkID0gdy0+dHNrLT5waWQ7Cj4gLQkJd2Fp dGVyLT5zZXFubyA9IHctPnNlcW5vOwo+IC0JCXdhaXRlcisrOwo+IC0KPiAtCQlpZiAoKytlZS0+ bnVtX3dhaXRlcnMgPT0gY291bnQpCj4gLQkJCWJyZWFrOwo+IC0JfQo+IC0Jc3Bpbl91bmxvY2tf aXJxKCZiLT5yYl9sb2NrKTsKPiAtfQo+IC0KPiAgIHN0YXRpYyB2b2lkIGVycm9yX3JlY29yZF9l bmdpbmVfcmVnaXN0ZXJzKHN0cnVjdCBpOTE1X2dwdV9zdGF0ZSAqZXJyb3IsCj4gICAJCQkJCSAg c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAgCQkJCQkgIHN0cnVjdCBkcm1faTkx NV9lcnJvcl9lbmdpbmUgKmVlKQo+IEBAIC0xMjkzLDcgKzEyMjcsNiBAQCBzdGF0aWMgdm9pZCBl cnJvcl9yZWNvcmRfZW5naW5lX3JlZ2lzdGVycyhzdHJ1Y3QgaTkxNV9ncHVfc3RhdGUgKmVycm9y LAo+ICAgCj4gICAJaW50ZWxfZW5naW5lX2dldF9pbnN0ZG9uZShlbmdpbmUsICZlZS0+aW5zdGRv bmUpOwo+ICAgCj4gLQllZS0+d2FpdGluZyA9IGludGVsX2VuZ2luZV9oYXNfd2FpdGVyKGVuZ2lu ZSk7Cj4gICAJZWUtPmluc3RwbSA9IEk5MTVfUkVBRChSSU5HX0lOU1RQTShlbmdpbmUtPm1taW9f YmFzZSkpOwo+ICAgCWVlLT5hY3RoZCA9IGludGVsX2VuZ2luZV9nZXRfYWN0aXZlX2hlYWQoZW5n aW5lKTsKPiAgIAllZS0+c2Vxbm8gPSBpbnRlbF9lbmdpbmVfZ2V0X3NlcW5vKGVuZ2luZSk7Cj4g QEAgLTEzNjcsNiArMTMwMCw3IEBAIHN0YXRpYyB2b2lkIHJlY29yZF9yZXF1ZXN0KHN0cnVjdCBp OTE1X3JlcXVlc3QgKnJlcXVlc3QsCj4gICB7Cj4gICAJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQg KmN0eCA9IHJlcXVlc3QtPmdlbV9jb250ZXh0Owo+ICAgCj4gKwllcnEtPmZsYWdzID0gcmVxdWVz dC0+ZmVuY2UuZmxhZ3M7Cj4gICAJZXJxLT5jb250ZXh0ID0gY3R4LT5od19pZDsKPiAgIAllcnEt PnNjaGVkX2F0dHIgPSByZXF1ZXN0LT5zY2hlZC5hdHRyOwo+ICAgCWVycS0+YmFuX3Njb3JlID0g YXRvbWljX3JlYWQoJmN0eC0+YmFuX3Njb3JlKTsKPiBAQCAtMTU0Miw3ICsxNDc2LDYgQEAgc3Rh dGljIHZvaWQgZ2VtX3JlY29yZF9yaW5ncyhzdHJ1Y3QgaTkxNV9ncHVfc3RhdGUgKmVycm9yKQo+ ICAgCQllZS0+ZW5naW5lX2lkID0gaTsKPiAgIAo+ICAgCQllcnJvcl9yZWNvcmRfZW5naW5lX3Jl Z2lzdGVycyhlcnJvciwgZW5naW5lLCBlZSk7Cj4gLQkJZXJyb3JfcmVjb3JkX2VuZ2luZV93YWl0 ZXJzKGVuZ2luZSwgZWUpOwo+ICAgCQllcnJvcl9yZWNvcmRfZW5naW5lX2V4ZWNsaXN0cyhlbmdp bmUsIGVlKTsKPiAgIAo+ICAgCQlyZXF1ZXN0ID0gaTkxNV9nZW1fZmluZF9hY3RpdmVfcmVxdWVz dChlbmdpbmUpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9l cnJvci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuaAo+IGluZGV4IDIz MTE3Mzc4NmVhZS4uNzQ3NTdjNDI0YWFiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ3B1X2Vycm9yLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dw dV9lcnJvci5oCj4gQEAgLTgyLDggKzgyLDYgQEAgc3RydWN0IGk5MTVfZ3B1X3N0YXRlIHsKPiAg IAkJaW50IGVuZ2luZV9pZDsKPiAgIAkJLyogU29mdHdhcmUgdHJhY2tlZCBzdGF0ZSAqLwo+ICAg CQlib29sIGlkbGU7Cj4gLQkJYm9vbCB3YWl0aW5nOwo+IC0JCWludCBudW1fd2FpdGVyczsKPiAg IAkJdW5zaWduZWQgbG9uZyBoYW5nY2hlY2tfdGltZXN0YW1wOwo+ICAgCQlzdHJ1Y3QgaTkxNV9h ZGRyZXNzX3NwYWNlICp2bTsKPiAgIAkJaW50IG51bV9yZXF1ZXN0czsKPiBAQCAtMTQ3LDYgKzE0 NSw3IEBAIHN0cnVjdCBpOTE1X2dwdV9zdGF0ZSB7Cj4gICAJCXN0cnVjdCBkcm1faTkxNV9lcnJv cl9vYmplY3QgKmRlZmF1bHRfc3RhdGU7Cj4gICAKPiAgIAkJc3RydWN0IGRybV9pOTE1X2Vycm9y X3JlcXVlc3Qgewo+ICsJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICAgCQkJbG9uZyBqaWZmaWVz Owo+ICAgCQkJcGlkX3QgcGlkOwo+ICAgCQkJdTMyIGNvbnRleHQ7Cj4gQEAgLTE1OSwxMiArMTU4 LDYgQEAgc3RydWN0IGk5MTVfZ3B1X3N0YXRlIHsKPiAgIAkJfSAqcmVxdWVzdHMsIGV4ZWNsaXN0 W0VYRUNMSVNUX01BWF9QT1JUU107Cj4gICAJCXVuc2lnbmVkIGludCBudW1fcG9ydHM7Cj4gICAK PiAtCQlzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfd2FpdGVyIHsKPiAtCQkJY2hhciBjb21tW1RBU0tf Q09NTV9MRU5dOwo+IC0JCQlwaWRfdCBwaWQ7Cj4gLQkJCXUzMiBzZXFubzsKPiAtCQl9ICp3YWl0 ZXJzOwo+IC0KPiAgIAkJc3RydWN0IHsKPiAgIAkJCXUzMiBnZnhfbW9kZTsKPiAgIAkJCXVuaW9u IHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKPiBpbmRleCA2YTFiMTY3ZWM4MDEuLmE5OTExZmVh M2RkYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwo+IEBAIC0yOCwxMiArMjgsMTQgQEAK PiAgIAo+ICAgI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAo+ICAg Cj4gLSNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgo+IC0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ ICAgI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgo+ICsKPiAgICNpbmNsdWRlIDxkcm0vZHJtX2ly cS5oPgo+ICAgI2luY2x1ZGUgPGRybS9kcm1fZHJ2Lmg+Cj4gICAjaW5jbHVkZSA8ZHJtL2k5MTVf ZHJtLmg+Cj4gKwo+ICAgI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gICAjaW5jbHVkZSAiaTkxNV90 cmFjZS5oIgo+ICAgI2luY2x1ZGUgImludGVsX2Rydi5oIgo+IEBAIC0xMTY4LDY2ICsxMTcwLDYg QEAgc3RhdGljIHZvaWQgaXJvbmxha2VfcnBzX2NoYW5nZV9pcnFfaGFuZGxlcihzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gICAJcmV0dXJuOwo+ICAgfQo+ICAgCj4gLXN0YXRp YyB2b2lkIG5vdGlmeV9yaW5nKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAtewo+ IC0JY29uc3QgdTMyIHNlcW5vID0gaW50ZWxfZW5naW5lX2dldF9zZXFubyhlbmdpbmUpOwo+IC0J c3RydWN0IGk5MTVfcmVxdWVzdCAqcnEgPSBOVUxMOwo+IC0Jc3RydWN0IHRhc2tfc3RydWN0ICp0 c2sgPSBOVUxMOwo+IC0Jc3RydWN0IGludGVsX3dhaXQgKndhaXQ7Cj4gLQo+IC0JaWYgKHVubGlr ZWx5KCFlbmdpbmUtPmJyZWFkY3J1bWJzLmlycV9hcm1lZCkpCj4gLQkJcmV0dXJuOwo+IC0KPiAt CXJjdV9yZWFkX2xvY2soKTsKPiAtCj4gLQlzcGluX2xvY2soJmVuZ2luZS0+YnJlYWRjcnVtYnMu aXJxX2xvY2spOwo+IC0Jd2FpdCA9IGVuZ2luZS0+YnJlYWRjcnVtYnMuaXJxX3dhaXQ7Cj4gLQlp ZiAod2FpdCkgewo+IC0JCS8qCj4gLQkJICogV2UgdXNlIGEgY2FsbGJhY2sgZnJvbSB0aGUgZG1h LWZlbmNlIHRvIHN1Ym1pdAo+IC0JCSAqIHJlcXVlc3RzIGFmdGVyIHdhaXRpbmcgb24gb3VyIG93 biByZXF1ZXN0cy4gVG8KPiAtCQkgKiBlbnN1cmUgbWluaW11bSBkZWxheSBpbiBxdWV1aW5nIHRo ZSBuZXh0IHJlcXVlc3QgdG8KPiAtCQkgKiBoYXJkd2FyZSwgc2lnbmFsIHRoZSBmZW5jZSBub3cg cmF0aGVyIHRoYW4gd2FpdCBmb3IKPiAtCQkgKiB0aGUgc2lnbmFsZXIgdG8gYmUgd29rZW4gdXAu IFdlIHN0aWxsIHdha2UgdXAgdGhlCj4gLQkJICogd2FpdGVyIGluIG9yZGVyIHRvIGhhbmRsZSB0 aGUgaXJxLXNlcW5vIGNvaGVyZW5jeQo+IC0JCSAqIGlzc3VlcyAod2UgbWF5IHJlY2VpdmUgdGhl IGludGVycnVwdCBiZWZvcmUgdGhlCj4gLQkJICogc2Vxbm8gaXMgd3JpdHRlbiwgc2VlIF9faTkx NV9yZXF1ZXN0X2lycV9jb21wbGV0ZSgpKQo+IC0JCSAqIGFuZCB0byBoYW5kbGUgY29hbGVzY2lu ZyBvZiBtdWx0aXBsZSBzZXFubyB1cGRhdGVzCj4gLQkJICogYW5kIG1hbnkgd2FpdGVycy4KPiAt CQkgKi8KPiAtCQlpZiAoaTkxNV9zZXFub19wYXNzZWQoc2Vxbm8sIHdhaXQtPnNlcW5vKSkgewo+ IC0JCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICp3YWl0ZXIgPSB3YWl0LT5yZXF1ZXN0Owo+IC0KPiAt CQkJaWYgKHdhaXRlciAmJgo+IC0JCQkgICAgIWk5MTVfcmVxdWVzdF9zaWduYWxlZCh3YWl0ZXIp ICYmCj4gLQkJCSAgICBpbnRlbF93YWl0X2NoZWNrX3JlcXVlc3Qod2FpdCwgd2FpdGVyKSkKPiAt CQkJCXJxID0gaTkxNV9yZXF1ZXN0X2dldCh3YWl0ZXIpOwo+IC0KPiAtCQkJdHNrID0gd2FpdC0+ dHNrOwo+IC0JCX0KPiAtCj4gLQkJZW5naW5lLT5icmVhZGNydW1icy5pcnFfY291bnQrKzsKPiAt CX0gZWxzZSB7Cj4gLQkJaWYgKGVuZ2luZS0+YnJlYWRjcnVtYnMuaXJxX2FybWVkKQo+IC0JCQlf X2ludGVsX2VuZ2luZV9kaXNhcm1fYnJlYWRjcnVtYnMoZW5naW5lKTsKPiAtCX0KPiAtCXNwaW5f dW5sb2NrKCZlbmdpbmUtPmJyZWFkY3J1bWJzLmlycV9sb2NrKTsKPiAtCj4gLQlpZiAocnEpIHsK PiAtCQlzcGluX2xvY2soJnJxLT5sb2NrKTsKPiAtCQlkbWFfZmVuY2Vfc2lnbmFsX2xvY2tlZCgm cnEtPmZlbmNlKTsKPiAtCQlHRU1fQlVHX09OKCFpOTE1X3JlcXVlc3RfY29tcGxldGVkKHJxKSk7 Cj4gLQkJc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKPiAtCj4gLQkJaTkxNV9yZXF1ZXN0X3B1dChy cSk7Cj4gLQl9Cj4gLQo+IC0JaWYgKHRzayAmJiB0c2stPnN0YXRlICYgVEFTS19OT1JNQUwpCj4g LQkJd2FrZV91cF9wcm9jZXNzKHRzayk7Cj4gLQo+IC0JcmN1X3JlYWRfdW5sb2NrKCk7Cj4gLX0K PiAtCj4gICBzdGF0aWMgdm9pZCB2bHZfYzBfcmVhZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCj4gICAJCQlzdHJ1Y3QgaW50ZWxfcnBzX2VpICplaSkKPiAgIHsKPiBAQCAtMTQ3 MiwyMCArMTQxNCwyMCBAQCBzdGF0aWMgdm9pZCBpbGtfZ3RfaXJxX2hhbmRsZXIoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAgCQkJICAgICAgIHUzMiBndF9paXIpCj4gICB7 Cj4gICAJaWYgKGd0X2lpciAmIEdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVCkKPiAtCQlub3RpZnlf cmluZyhkZXZfcHJpdi0+ZW5naW5lW1JDU10pOwo+ICsJCWludGVsX2VuZ2luZV9icmVhZGNydW1i c19pcnEoZGV2X3ByaXYtPmVuZ2luZVtSQ1NdKTsKPiAgIAlpZiAoZ3RfaWlyICYgSUxLX0JTRF9V U0VSX0lOVEVSUlVQVCkKPiAtCQlub3RpZnlfcmluZyhkZXZfcHJpdi0+ZW5naW5lW1ZDU10pOwo+ ICsJCWludGVsX2VuZ2luZV9icmVhZGNydW1ic19pcnEoZGV2X3ByaXYtPmVuZ2luZVtWQ1NdKTsK PiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQgc25iX2d0X2lycV9oYW5kbGVyKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgIAkJCSAgICAgICB1MzIgZ3RfaWlyKQo+ICAgewo+ ICAgCWlmIChndF9paXIgJiBHVF9SRU5ERVJfVVNFUl9JTlRFUlJVUFQpCj4gLQkJbm90aWZ5X3Jp bmcoZGV2X3ByaXYtPmVuZ2luZVtSQ1NdKTsKPiArCQlpbnRlbF9lbmdpbmVfYnJlYWRjcnVtYnNf aXJxKGRldl9wcml2LT5lbmdpbmVbUkNTXSk7Cj4gICAJaWYgKGd0X2lpciAmIEdUX0JTRF9VU0VS X0lOVEVSUlVQVCkKPiAtCQlub3RpZnlfcmluZyhkZXZfcHJpdi0+ZW5naW5lW1ZDU10pOwo+ICsJ CWludGVsX2VuZ2luZV9icmVhZGNydW1ic19pcnEoZGV2X3ByaXYtPmVuZ2luZVtWQ1NdKTsKPiAg IAlpZiAoZ3RfaWlyICYgR1RfQkxUX1VTRVJfSU5URVJSVVBUKQo+IC0JCW5vdGlmeV9yaW5nKGRl dl9wcml2LT5lbmdpbmVbQkNTXSk7Cj4gKwkJaW50ZWxfZW5naW5lX2JyZWFkY3J1bWJzX2lycShk ZXZfcHJpdi0+ZW5naW5lW0JDU10pOwo+ICAgCj4gICAJaWYgKGd0X2lpciAmIChHVF9CTFRfQ1Nf RVJST1JfSU5URVJSVVBUIHwKPiAgIAkJICAgICAgR1RfQlNEX0NTX0VSUk9SX0lOVEVSUlVQVCB8 Cj4gQEAgLTE1MDUsNyArMTQ0Nyw3IEBAIGdlbjhfY3NfaXJxX2hhbmRsZXIoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgaWlyKQo+ICAgCQl0YXNrbGV0ID0gdHJ1ZTsKPiAgIAo+ ICAgCWlmIChpaXIgJiBHVF9SRU5ERVJfVVNFUl9JTlRFUlJVUFQpIHsKPiAtCQlub3RpZnlfcmlu ZyhlbmdpbmUpOwo+ICsJCWludGVsX2VuZ2luZV9icmVhZGNydW1ic19pcnEoZW5naW5lKTsKPiAg IAkJdGFza2xldCB8PSBVU0VTX0dVQ19TVUJNSVNTSU9OKGVuZ2luZS0+aTkxNSk7Cj4gICAJfQo+ ICAgCj4gQEAgLTE4NTEsNyArMTc5Myw3IEBAIHN0YXRpYyB2b2lkIGdlbjZfcnBzX2lycV9oYW5k bGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHBtX2lpcikKPiAgIAo+ ICAgCWlmIChIQVNfVkVCT1goZGV2X3ByaXYpKSB7Cj4gICAJCWlmIChwbV9paXIgJiBQTV9WRUJP WF9VU0VSX0lOVEVSUlVQVCkKPiAtCQkJbm90aWZ5X3JpbmcoZGV2X3ByaXYtPmVuZ2luZVtWRUNT XSk7Cj4gKwkJCWludGVsX2VuZ2luZV9icmVhZGNydW1ic19pcnEoZGV2X3ByaXYtPmVuZ2luZVtW RUNTXSk7Cj4gICAKPiAgIAkJaWYgKHBtX2lpciAmIFBNX1ZFQk9YX0NTX0VSUk9SX0lOVEVSUlVQ VCkKPiAgIAkJCURSTV9ERUJVRygiQ29tbWFuZCBwYXJzZXIgZXJyb3IsIHBtX2lpciAweCUwOHhc biIsIHBtX2lpcik7Cj4gQEAgLTQyNzUsNyArNDIxNyw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBp OHh4X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKPiAgIAkJSTkxNV9XUklURTE2KElJ UiwgaWlyKTsKPiAgIAo+ICAgCQlpZiAoaWlyICYgSTkxNV9VU0VSX0lOVEVSUlVQVCkKPiAtCQkJ bm90aWZ5X3JpbmcoZGV2X3ByaXYtPmVuZ2luZVtSQ1NdKTsKPiArCQkJaW50ZWxfZW5naW5lX2Jy ZWFkY3J1bWJzX2lycShkZXZfcHJpdi0+ZW5naW5lW1JDU10pOwo+ICAgCj4gICAJCWlmIChpaXIg JiBJOTE1X01BU1RFUl9FUlJPUl9JTlRFUlJVUFQpCj4gICAJCQlpOHh4X2Vycm9yX2lycV9oYW5k bGVyKGRldl9wcml2LCBlaXIsIGVpcl9zdHVjayk7Cj4gQEAgLTQzODMsNyArNDMyNSw3IEBAIHN0 YXRpYyBpcnFyZXR1cm5fdCBpOTE1X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKPiAg IAkJSTkxNV9XUklURShJSVIsIGlpcik7Cj4gICAKPiAgIAkJaWYgKGlpciAmIEk5MTVfVVNFUl9J TlRFUlJVUFQpCj4gLQkJCW5vdGlmeV9yaW5nKGRldl9wcml2LT5lbmdpbmVbUkNTXSk7Cj4gKwkJ CWludGVsX2VuZ2luZV9icmVhZGNydW1ic19pcnEoZGV2X3ByaXYtPmVuZ2luZVtSQ1NdKTsKPiAg IAo+ICAgCQlpZiAoaWlyICYgSTkxNV9NQVNURVJfRVJST1JfSU5URVJSVVBUKQo+ICAgCQkJaTl4 eF9lcnJvcl9pcnFfaGFuZGxlcihkZXZfcHJpdiwgZWlyLCBlaXJfc3R1Y2spOwo+IEBAIC00NTI4 LDEwICs0NDcwLDEwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBpOTY1X2lycV9oYW5kbGVyKGludCBp cnEsIHZvaWQgKmFyZykKPiAgIAkJSTkxNV9XUklURShJSVIsIGlpcik7Cj4gICAKPiAgIAkJaWYg KGlpciAmIEk5MTVfVVNFUl9JTlRFUlJVUFQpCj4gLQkJCW5vdGlmeV9yaW5nKGRldl9wcml2LT5l bmdpbmVbUkNTXSk7Cj4gKwkJCWludGVsX2VuZ2luZV9icmVhZGNydW1ic19pcnEoZGV2X3ByaXYt PmVuZ2luZVtSQ1NdKTsKPiAgIAo+ICAgCQlpZiAoaWlyICYgSTkxNV9CU0RfVVNFUl9JTlRFUlJV UFQpCj4gLQkJCW5vdGlmeV9yaW5nKGRldl9wcml2LT5lbmdpbmVbVkNTXSk7Cj4gKwkJCWludGVs X2VuZ2luZV9icmVhZGNydW1ic19pcnEoZGV2X3ByaXYtPmVuZ2luZVtWQ1NdKTsKPiAgIAo+ICAg CQlpZiAoaWlyICYgSTkxNV9NQVNURVJfRVJST1JfSU5URVJSVVBUKQo+ICAgCQkJaTl4eF9lcnJv cl9pcnFfaGFuZGxlcihkZXZfcHJpdiwgZWlyLCBlaXJfc3R1Y2spOwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVxdWVzdC5jCj4gaW5kZXggMjE3MWRmMmQzMDE5Li40YjE4NjkyOTUzNjIgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+IEBAIC02MCw3ICs2MCw3IEBAIHN0YXRp YyBib29sIGk5MTVfZmVuY2Vfc2lnbmFsZWQoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCj4gICAK PiAgIHN0YXRpYyBib29sIGk5MTVfZmVuY2VfZW5hYmxlX3NpZ25hbGluZyhzdHJ1Y3QgZG1hX2Zl bmNlICpmZW5jZSkKPiAgIHsKPiAtCXJldHVybiBpbnRlbF9lbmdpbmVfZW5hYmxlX3NpZ25hbGlu Zyh0b19yZXF1ZXN0KGZlbmNlKSwgdHJ1ZSk7Cj4gKwlyZXR1cm4gaTkxNV9yZXF1ZXN0X2VuYWJs ZV9icmVhZGNydW1iKHRvX3JlcXVlc3QoZmVuY2UpKTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHNp Z25lZCBsb25nIGk5MTVfZmVuY2Vfd2FpdChzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwKPiBAQCAt MjAzLDcgKzIwMyw3IEBAIHN0YXRpYyB2b2lkIF9fcmV0aXJlX2VuZ2luZV9yZXF1ZXN0KHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgIAlpZiAoIWk5MTVfcmVxdWVzdF9zaWduYWxl ZChycSkpCj4gICAJCWRtYV9mZW5jZV9zaWduYWxfbG9ja2VkKCZycS0+ZmVuY2UpOwo+ICAgCWlm ICh0ZXN0X2JpdChETUFfRkVOQ0VfRkxBR19FTkFCTEVfU0lHTkFMX0JJVCwgJnJxLT5mZW5jZS5m bGFncykpCj4gLQkJaW50ZWxfZW5naW5lX2NhbmNlbF9zaWduYWxpbmcocnEpOwo+ICsJCWk5MTVf cmVxdWVzdF9jYW5jZWxfYnJlYWRjcnVtYihycSk7Cj4gICAJaWYgKHJxLT53YWl0Ym9vc3QpIHsK PiAgIAkJR0VNX0JVR19PTighYXRvbWljX3JlYWQoJnJxLT5pOTE1LT5ndF9wbS5ycHMubnVtX3dh aXRlcnMpKTsKPiAgIAkJYXRvbWljX2RlYygmcnEtPmk5MTUtPmd0X3BtLnJwcy5udW1fd2FpdGVy cyk7Cj4gQEAgLTM3Nyw5ICszNzcsMTIgQEAgdm9pZCBfX2k5MTVfcmVxdWVzdF9zdWJtaXQoc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCkKPiAgIAo+ICAgCS8qIFdlIG1heSBiZSByZWN1cnNp bmcgZnJvbSB0aGUgc2lnbmFsIGNhbGxiYWNrIG9mIGFub3RoZXIgaTkxNSBmZW5jZSAqLwo+ICAg CXNwaW5fbG9ja19uZXN0ZWQoJnJlcXVlc3QtPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsK PiArCUdFTV9CVUdfT04odGVzdF9iaXQoSTkxNV9GRU5DRV9GTEFHX0FDVElWRSwgJnJlcXVlc3Qt PmZlbmNlLmZsYWdzKSk7Cj4gKwlzZXRfYml0KEk5MTVfRkVOQ0VfRkxBR19BQ1RJVkUsICZyZXF1 ZXN0LT5mZW5jZS5mbGFncyk7Cj4gICAJcmVxdWVzdC0+Z2xvYmFsX3NlcW5vID0gc2Vxbm87Cj4g LQlpZiAodGVzdF9iaXQoRE1BX0ZFTkNFX0ZMQUdfRU5BQkxFX1NJR05BTF9CSVQsICZyZXF1ZXN0 LT5mZW5jZS5mbGFncykpCj4gLQkJaW50ZWxfZW5naW5lX2VuYWJsZV9zaWduYWxpbmcocmVxdWVz dCwgZmFsc2UpOwo+ICsJaWYgKHRlc3RfYml0KERNQV9GRU5DRV9GTEFHX0VOQUJMRV9TSUdOQUxf QklULCAmcmVxdWVzdC0+ZmVuY2UuZmxhZ3MpICYmCj4gKwkgICAgIWk5MTVfcmVxdWVzdF9lbmFi bGVfYnJlYWRjcnVtYihyZXF1ZXN0KSkKPiArCQlpbnRlbF9lbmdpbmVfcXVldWVfYnJlYWRjcnVt YnMoZW5naW5lKTsKPiAgIAlzcGluX3VubG9jaygmcmVxdWVzdC0+bG9jayk7Cj4gICAKPiAgIAll bmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iKHJlcXVlc3QsCj4gQEAgLTM4OSw4ICszOTIsNiBA QCB2b2lkIF9faTkxNV9yZXF1ZXN0X3N1Ym1pdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0 KQo+ICAgCW1vdmVfdG9fdGltZWxpbmUocmVxdWVzdCwgJmVuZ2luZS0+dGltZWxpbmUpOwo+ICAg Cj4gICAJdHJhY2VfaTkxNV9yZXF1ZXN0X2V4ZWN1dGUocmVxdWVzdCk7Cj4gLQo+IC0Jd2FrZV91 cF9hbGwoJnJlcXVlc3QtPmV4ZWN1dGUpOwo+ICAgfQo+ICAgCj4gICB2b2lkIGk5MTVfcmVxdWVz dF9zdWJtaXQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCkKPiBAQCAtNDMzLDcgKzQzNCw5 IEBAIHZvaWQgX19pOTE1X3JlcXVlc3RfdW5zdWJtaXQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVx dWVzdCkKPiAgIAlzcGluX2xvY2tfbmVzdGVkKCZyZXF1ZXN0LT5sb2NrLCBTSU5HTEVfREVQVEhf TkVTVElORyk7Cj4gICAJcmVxdWVzdC0+Z2xvYmFsX3NlcW5vID0gMDsKPiAgIAlpZiAodGVzdF9i aXQoRE1BX0ZFTkNFX0ZMQUdfRU5BQkxFX1NJR05BTF9CSVQsICZyZXF1ZXN0LT5mZW5jZS5mbGFn cykpCj4gLQkJaW50ZWxfZW5naW5lX2NhbmNlbF9zaWduYWxpbmcocmVxdWVzdCk7Cj4gKwkJaTkx NV9yZXF1ZXN0X2NhbmNlbF9icmVhZGNydW1iKHJlcXVlc3QpOwo+ICsJR0VNX0JVR19PTighdGVz dF9iaXQoSTkxNV9GRU5DRV9GTEFHX0FDVElWRSwgJnJlcXVlc3QtPmZlbmNlLmZsYWdzKSk7Cj4g KwljbGVhcl9iaXQoSTkxNV9GRU5DRV9GTEFHX0FDVElWRSwgJnJlcXVlc3QtPmZlbmNlLmZsYWdz KTsKPiAgIAlzcGluX3VubG9jaygmcmVxdWVzdC0+bG9jayk7Cj4gICAKPiAgIAkvKiBUcmFuc2Zl ciBiYWNrIGZyb20gdGhlIGdsb2JhbCBwZXItZW5naW5lIHRpbWVsaW5lIHRvIHBlci1jb250ZXh0 ICovCj4gQEAgLTY0NiwxMyArNjQ5LDExIEBAIGk5MTVfcmVxdWVzdF9hbGxvYyhzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUsIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4gICAK PiAgIAkvKiBXZSBidW1wIHRoZSByZWYgZm9yIHRoZSBmZW5jZSBjaGFpbiAqLwo+ICAgCWk5MTVf c3dfZmVuY2VfaW5pdCgmaTkxNV9yZXF1ZXN0X2dldChycSktPnN1Ym1pdCwgc3VibWl0X25vdGlm eSk7Cj4gLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZycS0+ZXhlY3V0ZSk7Cj4gICAKPiAgIAlpOTE1 X3NjaGVkX25vZGVfaW5pdCgmcnEtPnNjaGVkKTsKPiAgIAo+ICAgCS8qIE5vIHphbGxvYywgbXVz dCBjbGVhciB3aGF0IHdlIG5lZWQgYnkgaGFuZCAqLwo+ICAgCXJxLT5nbG9iYWxfc2Vxbm8gPSAw Owo+IC0JcnEtPnNpZ25hbGluZy53YWl0LnNlcW5vID0gMDsKPiAgIAlycS0+ZmlsZV9wcml2ID0g TlVMTDsKPiAgIAlycS0+YmF0Y2ggPSBOVUxMOwo+ICAgCXJxLT5jYXB0dXJlX2xpc3QgPSBOVUxM Owo+IEBAIC0xMDQ3LDEzICsxMDQ4LDEwIEBAIHN0YXRpYyBib29sIGJ1c3l3YWl0X3N0b3AodW5z aWduZWQgbG9uZyB0aW1lb3V0LCB1bnNpZ25lZCBpbnQgY3B1KQo+ICAgCXJldHVybiB0aGlzX2Nw dSAhPSBjcHU7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGJvb2wgX19pOTE1X3NwaW5fcmVxdWVzdChj b25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAtCQkJCXUzMiBzZXFubywgaW50IHN0YXRl LCB1bnNpZ25lZCBsb25nIHRpbWVvdXRfdXMpCj4gK3N0YXRpYyBib29sIF9faTkxNV9zcGluX3Jl cXVlc3QoY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqIGNvbnN0IHJxLAo+ICsJCQkJaW50IHN0 YXRlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXRfdXMpCj4gICB7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUgPSBycS0+ZW5naW5lOwo+IC0JdW5zaWduZWQgaW50IGlycSwgY3B1Owo+ IC0KPiAtCUdFTV9CVUdfT04oIXNlcW5vKTsKPiArCXVuc2lnbmVkIGludCBjcHU7Cj4gICAKPiAg IAkvKgo+ICAgCSAqIE9ubHkgd2FpdCBmb3IgdGhlIHJlcXVlc3QgaWYgd2Uga25vdyBpdCBpcyBs aWtlbHkgdG8gY29tcGxldGUuCj4gQEAgLTEwNjEsMTIgKzEwNTksMTIgQEAgc3RhdGljIGJvb2wg X19pOTE1X3NwaW5fcmVxdWVzdChjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAgIAkg KiBXZSBkb24ndCB0cmFjayB0aGUgdGltZXN0YW1wcyBhcm91bmQgcmVxdWVzdHMsIG5vciB0aGUg YXZlcmFnZQo+ICAgCSAqIHJlcXVlc3QgbGVuZ3RoLCBzbyB3ZSBkbyBub3QgaGF2ZSBhIGdvb2Qg aW5kaWNhdG9yIHRoYXQgdGhpcwo+ICAgCSAqIHJlcXVlc3Qgd2lsbCBjb21wbGV0ZSB3aXRoaW4g dGhlIHRpbWVvdXQuIFdoYXQgd2UgZG8ga25vdyBpcyB0aGUKPiAtCSAqIG9yZGVyIGluIHdoaWNo IHJlcXVlc3RzIGFyZSBleGVjdXRlZCBieSB0aGUgZW5naW5lIGFuZCBzbyB3ZSBjYW4KPiAtCSAq IHRlbGwgaWYgdGhlIHJlcXVlc3QgaGFzIHN0YXJ0ZWQuIElmIHRoZSByZXF1ZXN0IGhhc24ndCBz dGFydGVkIHlldCwKPiAtCSAqIGl0IGlzIGEgZmFpciBhc3N1bXB0aW9uIHRoYXQgaXQgd2lsbCBu b3QgY29tcGxldGUgd2l0aGluIG91cgo+IC0JICogcmVsYXRpdmVseSBzaG9ydCB0aW1lb3V0Lgo+ ICsJICogb3JkZXIgaW4gd2hpY2ggcmVxdWVzdHMgYXJlIGV4ZWN1dGVkIGJ5IHRoZSBjb250ZXh0 IGFuZCBzbyB3ZSBjYW4KPiArCSAqIHRlbGwgaWYgdGhlIHJlcXVlc3QgaGFzIGJlZW4gc3RhcnRl ZC4gSWYgdGhlIHJlcXVlc3QgaXMgbm90IGV2ZW4KPiArCSAqIHJ1bm5pbmcgeWV0LCBpdCBpcyBh IGZhaXIgYXNzdW1wdGlvbiB0aGF0IGl0IHdpbGwgbm90IGNvbXBsZXRlCj4gKwkgKiB3aXRoaW4g b3VyIHJlbGF0aXZlbHkgc2hvcnQgdGltZW91dC4KPiAgIAkgKi8KPiAtCWlmICghaW50ZWxfZW5n aW5lX2hhc19zdGFydGVkKGVuZ2luZSwgc2Vxbm8pKQo+ICsJaWYgKCFpOTE1X3JlcXVlc3RfaXNf cnVubmluZyhycSkpCj4gICAJCXJldHVybiBmYWxzZTsKPiAgIAo+ICAgCS8qCj4gQEAgLTEwODAs MjAgKzEwNzgsMTAgQEAgc3RhdGljIGJvb2wgX19pOTE1X3NwaW5fcmVxdWVzdChjb25zdCBzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAgIAkgKiB0YWtlcyB0byBzbGVlcCBvbiBhIHJlcXVlc3Qs IG9uIHRoZSBvcmRlciBvZiBhIG1pY3Jvc2Vjb25kLgo+ICAgCSAqLwo+ICAgCj4gLQlpcnEgPSBS RUFEX09OQ0UoZW5naW5lLT5icmVhZGNydW1icy5pcnFfY291bnQpOwo+ICAgCXRpbWVvdXRfdXMg Kz0gbG9jYWxfY2xvY2tfdXMoJmNwdSk7Cj4gICAJZG8gewo+IC0JCWlmIChpbnRlbF9lbmdpbmVf aGFzX2NvbXBsZXRlZChlbmdpbmUsIHNlcW5vKSkKPiAtCQkJcmV0dXJuIHNlcW5vID09IGk5MTVf cmVxdWVzdF9nbG9iYWxfc2Vxbm8ocnEpOwo+IC0KPiAtCQkvKgo+IC0JCSAqIFNlcW5vIGFyZSBt ZWFudCB0byBiZSBvcmRlcmVkICpiZWZvcmUqIHRoZSBpbnRlcnJ1cHQuIElmCj4gLQkJICogd2Ug c2VlIGFuIGludGVycnVwdCB3aXRob3V0IGEgY29ycmVzcG9uZGluZyBzZXFubyBhZHZhbmNlLAo+ IC0JCSAqIGFzc3VtZSB3ZSB3b24ndCBzZWUgb25lIGluIHRoZSBuZWFyIGZ1dHVyZSBidXQgcmVx dWlyZQo+IC0JCSAqIHRoZSBlbmdpbmUtPnNlcW5vX2JhcnJpZXIoKSB0byBmaXh1cCBjb2hlcmVu Y3kuCj4gLQkJICovCj4gLQkJaWYgKFJFQURfT05DRShlbmdpbmUtPmJyZWFkY3J1bWJzLmlycV9j b3VudCkgIT0gaXJxKQo+IC0JCQlicmVhazsKPiArCQlpZiAoaTkxNV9yZXF1ZXN0X2NvbXBsZXRl ZChycSkpCj4gKwkJCXJldHVybiB0cnVlOwo+ICAgCj4gICAJCWlmIChzaWduYWxfcGVuZGluZ19z dGF0ZShzdGF0ZSwgY3VycmVudCkpCj4gICAJCQlicmVhazsKPiBAQCAtMTEwNyw2ICsxMDk1LDE4 IEBAIHN0YXRpYyBib29sIF9faTkxNV9zcGluX3JlcXVlc3QoY29uc3Qgc3RydWN0IGk5MTVfcmVx dWVzdCAqcnEsCj4gICAJcmV0dXJuIGZhbHNlOwo+ICAgfQo+ICAgCj4gK3N0cnVjdCByZXF1ZXN0 X3dhaXQgewo+ICsJc3RydWN0IGRtYV9mZW5jZV9jYiBjYjsKPiArCXN0cnVjdCB0YXNrX3N0cnVj dCAqdHNrOwo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgcmVxdWVzdF93YWl0X3dha2Uoc3RydWN0 IGRtYV9mZW5jZSAqZmVuY2UsIHN0cnVjdCBkbWFfZmVuY2VfY2IgKmNiKQo+ICt7Cj4gKwlzdHJ1 Y3QgcmVxdWVzdF93YWl0ICp3YWl0ID0gY29udGFpbmVyX29mKGNiLCB0eXBlb2YoKndhaXQpLCBj Yik7Cj4gKwo+ICsJd2FrZV91cF9wcm9jZXNzKHdhaXQtPnRzayk7Cj4gK30KPiArCj4gICAvKioK PiAgICAqIGk5MTVfcmVxdWVzdF93YWl0IC0gd2FpdCB1bnRpbCBleGVjdXRpb24gb2YgcmVxdWVz dCBoYXMgZmluaXNoZWQKPiAgICAqIEBycTogdGhlIHJlcXVlc3QgdG8gd2FpdCB1cG9uCj4gQEAg LTExMzIsOCArMTEzMiw3IEBAIGxvbmcgaTkxNV9yZXF1ZXN0X3dhaXQoc3RydWN0IGk5MTVfcmVx dWVzdCAqcnEsCj4gICB7Cj4gICAJY29uc3QgaW50IHN0YXRlID0gZmxhZ3MgJiBJOTE1X1dBSVRf SU5URVJSVVBUSUJMRSA/Cj4gICAJCVRBU0tfSU5URVJSVVBUSUJMRSA6IFRBU0tfVU5JTlRFUlJV UFRJQkxFOwo+IC0JREVGSU5FX1dBSVRfRlVOQyhleGVjLCBkZWZhdWx0X3dha2VfZnVuY3Rpb24p Owo+IC0Jc3RydWN0IGludGVsX3dhaXQgd2FpdDsKPiArCXN0cnVjdCByZXF1ZXN0X3dhaXQgd2Fp dDsKPiAgIAo+ICAgCW1pZ2h0X3NsZWVwKCk7Cj4gICAJR0VNX0JVR19PTih0aW1lb3V0IDwgMCk7 Cj4gQEAgLTExNDUsNDcgKzExNDQsMjQgQEAgbG9uZyBpOTE1X3JlcXVlc3Rfd2FpdChzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycSwKPiAgIAkJcmV0dXJuIC1FVElNRTsKPiAgIAo+ICAgCXRyYWNlX2k5 MTVfcmVxdWVzdF93YWl0X2JlZ2luKHJxLCBmbGFncyk7Cj4gLQlhZGRfd2FpdF9xdWV1ZSgmcnEt PmV4ZWN1dGUsICZleGVjKTsKPiAtCWludGVsX3dhaXRfaW5pdCgmd2FpdCk7Cj4gLQlpZiAoZmxh Z3MgJiBJOTE1X1dBSVRfUFJJT1JJVFkpCj4gLQkJaTkxNV9zY2hlZHVsZV9idW1wX3ByaW9yaXR5 KHJxLCBJOTE1X1BSSU9SSVRZX1dBSVQpOwo+IC0KPiAtcmVzdGFydDoKPiAtCWRvIHsKPiAtCQlz ZXRfY3VycmVudF9zdGF0ZShzdGF0ZSk7Cj4gLQkJaWYgKGludGVsX3dhaXRfdXBkYXRlX3JlcXVl c3QoJndhaXQsIHJxKSkKPiAtCQkJYnJlYWs7Cj4gLQo+IC0JCWlmIChzaWduYWxfcGVuZGluZ19z dGF0ZShzdGF0ZSwgY3VycmVudCkpIHsKPiAtCQkJdGltZW91dCA9IC1FUkVTVEFSVFNZUzsKPiAt CQkJZ290byBjb21wbGV0ZTsKPiAtCQl9Cj4gICAKPiAtCQlpZiAoIXRpbWVvdXQpIHsKPiAtCQkJ dGltZW91dCA9IC1FVElNRTsKPiAtCQkJZ290byBjb21wbGV0ZTsKPiAtCQl9Cj4gKwkvKiBPcHRp bWlzdGljIHNob3J0IHNwaW4gYmVmb3JlIHRvdWNoaW5nIElSUXMgKi8KPiArCWlmIChfX2k5MTVf c3Bpbl9yZXF1ZXN0KHJxLCBzdGF0ZSwgNSkpCj4gKwkJZ290byBvdXQ7Cj4gICAKPiAtCQl0aW1l b3V0ID0gaW9fc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKPiAtCX0gd2hpbGUgKDEpOwo+ICsJ aWYgKGZsYWdzICYgSTkxNV9XQUlUX1BSSU9SSVRZKQo+ICsJCWk5MTVfc2NoZWR1bGVfYnVtcF9w cmlvcml0eShycSwgSTkxNV9QUklPUklUWV9XQUlUKTsKPiAgIAo+IC0JR0VNX0JVR19PTighaW50 ZWxfd2FpdF9oYXNfc2Vxbm8oJndhaXQpKTsKPiAtCUdFTV9CVUdfT04oIWk5MTVfc3dfZmVuY2Vf c2lnbmFsZWQoJnJxLT5zdWJtaXQpKTsKPiArCXdhaXQudHNrID0gY3VycmVudDsKPiArCWlmIChk bWFfZmVuY2VfYWRkX2NhbGxiYWNrKCZycS0+ZmVuY2UsICZ3YWl0LmNiLCByZXF1ZXN0X3dhaXRf d2FrZSkpCj4gKwkJZ290byBvdXQ7Cj4gICAKPiAtCS8qIE9wdGltaXN0aWMgc2hvcnQgc3BpbiBi ZWZvcmUgdG91Y2hpbmcgSVJRcyAqLwo+IC0JaWYgKF9faTkxNV9zcGluX3JlcXVlc3QocnEsIHdh aXQuc2Vxbm8sIHN0YXRlLCA1KSkKPiAtCQlnb3RvIGNvbXBsZXRlOwo+ICsJZm9yICg7Oykgewo+ ICsJCXNldF9jdXJyZW50X3N0YXRlKHN0YXRlKTsKPiAgIAo+IC0Jc2V0X2N1cnJlbnRfc3RhdGUo c3RhdGUpOwo+IC0JaWYgKGludGVsX2VuZ2luZV9hZGRfd2FpdChycS0+ZW5naW5lLCAmd2FpdCkp Cj4gLQkJLyoKPiAtCQkgKiBJbiBvcmRlciB0byBjaGVjayB0aGF0IHdlIGhhdmVuJ3QgbWlzc2Vk IHRoZSBpbnRlcnJ1cHQKPiAtCQkgKiBhcyB3ZSBlbmFibGVkIGl0LCB3ZSBuZWVkIHRvIGtpY2sg b3Vyc2VsdmVzIHRvIGRvIGEKPiAtCQkgKiBjb2hlcmVudCBjaGVjayBvbiB0aGUgc2Vxbm8gYmVm b3JlIHdlIHNsZWVwLgo+IC0JCSAqLwo+IC0JCWdvdG8gd2FrZXVwOwo+ICsJCWlmIChpOTE1X3Jl cXVlc3RfY29tcGxldGVkKHJxKSkKPiArCQkJYnJlYWs7Cj4gICAKPiAtCWZvciAoOzspIHsKPiAg IAkJaWYgKHNpZ25hbF9wZW5kaW5nX3N0YXRlKHN0YXRlLCBjdXJyZW50KSkgewo+ICAgCQkJdGlt ZW91dCA9IC1FUkVTVEFSVFNZUzsKPiAgIAkJCWJyZWFrOwo+IEBAIC0xMTk3LDMzICsxMTczLDEz IEBAIGxvbmcgaTkxNV9yZXF1ZXN0X3dhaXQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4gICAJ CX0KPiAgIAo+ICAgCQl0aW1lb3V0ID0gaW9fc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKPiAt Cj4gLQkJaWYgKGludGVsX3dhaXRfY29tcGxldGUoJndhaXQpICYmCj4gLQkJICAgIGludGVsX3dh aXRfY2hlY2tfcmVxdWVzdCgmd2FpdCwgcnEpKQo+IC0JCQlicmVhazsKPiAtCj4gLQkJc2V0X2N1 cnJlbnRfc3RhdGUoc3RhdGUpOwo+IC0KPiAtd2FrZXVwOgo+IC0JCWlmIChpOTE1X3JlcXVlc3Rf Y29tcGxldGVkKHJxKSkKPiAtCQkJYnJlYWs7Cj4gLQo+IC0JCS8qIE9ubHkgc3BpbiBpZiB3ZSBr bm93IHRoZSBHUFUgaXMgcHJvY2Vzc2luZyB0aGlzIHJlcXVlc3QgKi8KPiAtCQlpZiAoX19pOTE1 X3NwaW5fcmVxdWVzdChycSwgd2FpdC5zZXFubywgc3RhdGUsIDIpKQo+IC0JCQlicmVhazsKPiAt Cj4gLQkJaWYgKCFpbnRlbF93YWl0X2NoZWNrX3JlcXVlc3QoJndhaXQsIHJxKSkgewo+IC0JCQlp bnRlbF9lbmdpbmVfcmVtb3ZlX3dhaXQocnEtPmVuZ2luZSwgJndhaXQpOwo+IC0JCQlnb3RvIHJl c3RhcnQ7Cj4gLQkJfQo+ICAgCX0KPiAtCj4gLQlpbnRlbF9lbmdpbmVfcmVtb3ZlX3dhaXQocnEt PmVuZ2luZSwgJndhaXQpOwo+IC1jb21wbGV0ZToKPiAgIAlfX3NldF9jdXJyZW50X3N0YXRlKFRB U0tfUlVOTklORyk7Cj4gLQlyZW1vdmVfd2FpdF9xdWV1ZSgmcnEtPmV4ZWN1dGUsICZleGVjKTsK PiAtCXRyYWNlX2k5MTVfcmVxdWVzdF93YWl0X2VuZChycSk7Cj4gICAKPiArCWRtYV9mZW5jZV9y ZW1vdmVfY2FsbGJhY2soJnJxLT5mZW5jZSwgJndhaXQuY2IpOwo+ICsKPiArb3V0Ogo+ICsJdHJh Y2VfaTkxNV9yZXF1ZXN0X3dhaXRfZW5kKHJxKTsKPiAgIAlyZXR1cm4gdGltZW91dDsKPiAgIH0K PiAgIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5oCj4gaW5kZXggMzQwZDYyMTY3OTFj Li4zY2ZmYjk2MjAzYjkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9y ZXF1ZXN0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuaAo+IEBA IC0zOCwyMyArMzgsMzQgQEAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Q7Cj4gICBzdHJ1Y3Qg aTkxNV9yZXF1ZXN0Owo+ICAgc3RydWN0IGk5MTVfdGltZWxpbmU7Cj4gICAKPiAtc3RydWN0IGlu dGVsX3dhaXQgewo+IC0Jc3RydWN0IHJiX25vZGUgbm9kZTsKPiAtCXN0cnVjdCB0YXNrX3N0cnVj dCAqdHNrOwo+IC0Jc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdDsKPiAtCXUzMiBzZXFubzsK PiAtfTsKPiAtCj4gLXN0cnVjdCBpbnRlbF9zaWduYWxfbm9kZSB7Cj4gLQlzdHJ1Y3QgaW50ZWxf d2FpdCB3YWl0Owo+IC0Jc3RydWN0IGxpc3RfaGVhZCBsaW5rOwo+IC19Owo+IC0KPiAgIHN0cnVj dCBpOTE1X2NhcHR1cmVfbGlzdCB7Cj4gICAJc3RydWN0IGk5MTVfY2FwdHVyZV9saXN0ICpuZXh0 Owo+ICAgCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICAgfTsKPiAgIAo+ICtlbnVtIHsKPiArCS8q Cj4gKwkgKiBJOTE1X0ZFTkNFX0ZMQUdfQUNUSVZFIC0gdGhpcyByZXF1ZXN0IGlzIGN1cnJlbnRs eSBzdWJtaXR0ZWQgdG8gSFcuCj4gKwkgKgo+ICsJICogU2V0IGJ5IF9faTkxNV9yZXF1ZXN0X3N1 Ym1pdCgpIG9uIGhhbmRpbmcgb3ZlciB0byBIVywgYW5kIGNsZWFyZWQKPiArCSAqIGJ5IF9faTkx NV9yZXF1ZXN0X3Vuc3VibWl0KCkgaWYgd2UgcHJlZW1wdCB0aGlzIHJlcXVlc3QuCj4gKwkgKgo+ ICsJICogRmluYWxseSBjbGVhcmVkIGZvciBjb25zaXN0ZW5jeSBvbiByZXRpcmluZyB0aGUgcmVx dWVzdCwgd2hlbgo+ICsJICogd2Uga25vdyB0aGUgSFcgaXMgbm8gbG9uZ2VyIHJ1bm5pbmcgdGhp cyByZXF1ZXN0Lgo+ICsJICoKPiArCSAqIFNlZSBpOTE1X3JlcXVlc3RfaXNfYWN0aXZlKCkKPiAr CSAqLwo+ICsJSTkxNV9GRU5DRV9GTEFHX0FDVElWRSA9IERNQV9GRU5DRV9GTEFHX1VTRVJfQklU UywKPiArCj4gKwkvKgo+ICsJICogSTkxNV9GRU5DRV9GTEFHX1NJR05BTCAtIHRoaXMgcmVxdWVz dCBpcyBjdXJyZW50bHkgb24gc2lnbmFsX2xpc3QKPiArCSAqCj4gKwkgKiBJbnRlcm5hbCBib29r a2VlcGluZyB1c2VkIGJ5IHRoZSBicmVhZGNydW1iIGNvZGUgdG8gdHJhY2sgd2hlbgo+ICsJICog YSByZXF1ZXN0IGlzIG9uIHRoZSB2YXJpb3VzIHNpZ25hbF9saXN0Lgo+ICsJICovCj4gKwlJOTE1 X0ZFTkNFX0ZMQUdfU0lHTkFMLAo+ICt9Owo+ICsKPiAgIC8qKgo+ICAgICogUmVxdWVzdCBxdWV1 ZSBzdHJ1Y3R1cmUuCj4gICAgKgo+IEBAIC05Nyw3ICsxMDgsNyBAQCBzdHJ1Y3QgaTkxNV9yZXF1 ZXN0IHsKPiAgIAlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqaHdfY29udGV4dDsKPiAgIAlzdHJ1Y3Qg aW50ZWxfcmluZyAqcmluZzsKPiAgIAlzdHJ1Y3QgaTkxNV90aW1lbGluZSAqdGltZWxpbmU7Cj4g LQlzdHJ1Y3QgaW50ZWxfc2lnbmFsX25vZGUgc2lnbmFsaW5nOwo+ICsJc3RydWN0IGxpc3RfaGVh ZCBzaWduYWxfbGluazsKPiAgIAo+ICAgCS8qCj4gICAJICogVGhlIHJjdSBlcG9jaCBvZiB3aGVu IHRoaXMgcmVxdWVzdCB3YXMgYWxsb2NhdGVkLiBVc2VkIHRvIGp1ZGljaW91c2x5Cj4gQEAgLTEx Niw3ICsxMjcsNiBAQCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0IHsKPiAgIAkgKi8KPiAgIAlzdHJ1Y3Qg aTkxNV9zd19mZW5jZSBzdWJtaXQ7Cj4gICAJd2FpdF9xdWV1ZV9lbnRyeV90IHN1Ym1pdHE7Cj4g LQl3YWl0X3F1ZXVlX2hlYWRfdCBleGVjdXRlOwo+ICAgCj4gICAJLyoKPiAgIAkgKiBBIGxpc3Qg b2YgZXZlcnlvbmUgd2Ugd2FpdCB1cG9uLCBhbmQgZXZlcnlvbmUgd2hvIHdhaXRzIHVwb24gdXMu Cj4gQEAgLTI1NSw3ICsyNjUsNyBAQCBpOTE1X3JlcXVlc3RfcHV0KHN0cnVjdCBpOTE1X3JlcXVl c3QgKnJxKQo+ICAgICogdGhhdCBpdCBoYXMgcGFzc2VkIHRoZSBnbG9iYWwgc2Vxbm8gYW5kIHRo ZSBnbG9iYWwgc2Vxbm8gaXMgdW5jaGFuZ2VkCj4gICAgKiBhZnRlciB0aGUgcmVhZCwgaXQgaXMg aW5kZWVkIGNvbXBsZXRlKS4KPiAgICAqLwo+IC1zdGF0aWMgdTMyCj4gK3N0YXRpYyBpbmxpbmUg dTMyCj4gICBpOTE1X3JlcXVlc3RfZ2xvYmFsX3NlcW5vKGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVl c3QgKnJlcXVlc3QpCj4gICB7Cj4gICAJcmV0dXJuIFJFQURfT05DRShyZXF1ZXN0LT5nbG9iYWxf c2Vxbm8pOwo+IEBAIC0yNzcsNiArMjg3LDEwIEBAIHZvaWQgaTkxNV9yZXF1ZXN0X3NraXAoc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCwgaW50IGVycm9yKTsKPiAgIHZvaWQgX19pOTE1X3Jl cXVlc3RfdW5zdWJtaXQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCk7Cj4gICB2b2lkIGk5 MTVfcmVxdWVzdF91bnN1Ym1pdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0KTsKPiAgIAo+ ICsvKiBOb3RlOiBwYXJ0IG9mIHRoZSBpbnRlbF9icmVhZGNydW1icyBmYW1pbHkgKi8KPiArYm9v bCBpOTE1X3JlcXVlc3RfZW5hYmxlX2JyZWFkY3J1bWIoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVx dWVzdCk7Cj4gK3ZvaWQgaTkxNV9yZXF1ZXN0X2NhbmNlbF9icmVhZGNydW1iKHN0cnVjdCBpOTE1 X3JlcXVlc3QgKnJlcXVlc3QpOwo+ICsKPiAgIGxvbmcgaTkxNV9yZXF1ZXN0X3dhaXQoc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnEsCj4gICAJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCj4gICAJ CSAgICAgICBsb25nIHRpbWVvdXQpCj4gQEAgLTI5Myw2ICszMDcsMTEgQEAgc3RhdGljIGlubGlu ZSBib29sIGk5MTVfcmVxdWVzdF9zaWduYWxlZChjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cSkKPiAgIAlyZXR1cm4gdGVzdF9iaXQoRE1BX0ZFTkNFX0ZMQUdfU0lHTkFMRURfQklULCAmcnEt PmZlbmNlLmZsYWdzKTsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9yZXF1 ZXN0X2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiArewo+ICsJcmV0 dXJuIHRlc3RfYml0KEk5MTVfRkVOQ0VfRkxBR19BQ1RJVkUsICZycS0+ZmVuY2UuZmxhZ3MpOwo+ ICt9Cj4gKwo+ICAgLyoqCj4gICAgKiBSZXR1cm5zIHRydWUgaWYgc2VxMSBpcyBsYXRlciB0aGFu IHNlcTIuCj4gICAgKi8KPiBAQCAtMzMwLDYgKzM0OSwxMSBAQCBzdGF0aWMgaW5saW5lIHUzMiBo d3NwX3NlcW5vKGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ICAgCXJldHVybiBzZXFu bzsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgaW5saW5lIGJvb2wgX19pOTE1X3JlcXVlc3RfaGFzX3N0 YXJ0ZWQoY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gK3sKPiArCXJldHVybiBpOTE1 X3NlcW5vX3Bhc3NlZChod3NwX3NlcW5vKHJxKSwgcnEtPmZlbmNlLnNlcW5vIC0gMSk7Cj4gK30K PiArCj4gICAvKioKPiAgICAqIGk5MTVfcmVxdWVzdF9zdGFydGVkIC0gY2hlY2sgaWYgdGhlIHJl cXVlc3QgaGFzIGJlZ3VuIGJlaW5nIGV4ZWN1dGVkCj4gICAgKiBAcnE6IHRoZSByZXF1ZXN0Cj4g QEAgLTM0NSw3ICszNjksMjMgQEAgc3RhdGljIGlubGluZSBib29sIGk5MTVfcmVxdWVzdF9zdGFy dGVkKGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ICAgCQlyZXR1cm4gdHJ1ZTsKPiAg IAo+ICAgCS8qIFJlbWVtYmVyOiBzdGFydGVkIGJ1dCBtYXkgaGF2ZSBzaW5jZSBiZWVuIHByZWVt cHRlZCEgKi8KPiAtCXJldHVybiBpOTE1X3NlcW5vX3Bhc3NlZChod3NwX3NlcW5vKHJxKSwgcnEt PmZlbmNlLnNlcW5vIC0gMSk7Cj4gKwlyZXR1cm4gX19pOTE1X3JlcXVlc3RfaGFzX3N0YXJ0ZWQo cnEpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaTkxNV9yZXF1ZXN0X2lzX3J1bm5pbmcgLSBjaGVj ayBpZiB0aGUgcmVxdWVzdCBtYXkgYWN0dWFsbHkgYmUgZXhlY3V0aW5nCj4gKyAqIEBycTogdGhl IHJlcXVlc3QKPiArICoKPiArICogUmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0IGlzIGN1cnJl bnRseSBzdWJtaXR0ZWQgdG8gaGFyZHdhcmUsIGhhcyBwYXNzZWQKPiArICogaXRzIHN0YXJ0IHBv aW50IChpLmUuIHRoZSBjb250ZXh0IGlzIHNldHVwIGFuZCBub3QgYnVzeXdhaXRpbmcpLiBOb3Rl IHRoYXQKPiArICogaXQgbWF5IG5vIGxvbmdlciBiZSBydW5uaW5nIGJ5IHRoZSB0aW1lIHRoZSBm dW5jdGlvbiByZXR1cm5zIQo+ICsgKi8KPiArc3RhdGljIGlubGluZSBib29sIGk5MTVfcmVxdWVz dF9pc19ydW5uaW5nKGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ICt7Cj4gKwlpZiAo IWk5MTVfcmVxdWVzdF9pc19hY3RpdmUocnEpKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwly ZXR1cm4gX19pOTE1X3JlcXVlc3RfaGFzX3N0YXJ0ZWQocnEpOwo+ICAgfQo+ICAgCj4gICBzdGF0 aWMgaW5saW5lIGJvb2wgaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChjb25zdCBzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpycSkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXNl dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXNldC5jCj4gaW5kZXggYWNmM2M3Nzdl NDlkLi40NDYyMDA3YTY4MWMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9yZXNldC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXNldC5jCj4gQEAg LTI5LDcgKzI5LDcgQEAgc3RhdGljIHZvaWQgZW5naW5lX3NraXBfY29udGV4dChzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpycSkKPiAgIAo+ICAgCXNwaW5fbG9jaygmdGltZWxpbmUtPmxvY2spOwo+ICAg Cj4gLQlpZiAocnEtPmdsb2JhbF9zZXFubykgewo+ICsJaWYgKGk5MTVfcmVxdWVzdF9pc19hY3Rp dmUocnEpKSB7Cj4gICAJCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUocnEsCj4gICAJCQkJ CSAgICAgJmVuZ2luZS0+dGltZWxpbmUucmVxdWVzdHMsIGxpbmspCj4gICAJCQlpZiAocnEtPmdl bV9jb250ZXh0ID09IGh1bmdfY3R4KQo+IEBAIC03NTEsMTggKzc1MSwyMCBAQCBzdGF0aWMgdm9p ZCByZXNldF9yZXN0YXJ0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAgCj4gICBz dGF0aWMgdm9pZCBub3Bfc3VibWl0X3JlcXVlc3Qoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVz dCkKPiAgIHsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IHJlcXVlc3QtPmVu Z2luZTsKPiAgIAl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICAgCj4gICAJR0VNX1RSQUNFKCIlcyBm ZW5jZSAlbGx4OiVsbGQgLT4gLUVJT1xuIiwKPiAtCQkgIHJlcXVlc3QtPmVuZ2luZS0+bmFtZSwK PiAtCQkgIHJlcXVlc3QtPmZlbmNlLmNvbnRleHQsIHJlcXVlc3QtPmZlbmNlLnNlcW5vKTsKPiAr CQkgIGVuZ2luZS0+bmFtZSwgcmVxdWVzdC0+ZmVuY2UuY29udGV4dCwgcmVxdWVzdC0+ZmVuY2Uu c2Vxbm8pOwo+ICAgCWRtYV9mZW5jZV9zZXRfZXJyb3IoJnJlcXVlc3QtPmZlbmNlLCAtRUlPKTsK PiAgIAo+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJlcXVlc3QtPmVuZ2luZS0+dGltZWxpbmUubG9j aywgZmxhZ3MpOwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmVuZ2luZS0+dGltZWxpbmUubG9jaywg ZmxhZ3MpOwo+ICAgCV9faTkxNV9yZXF1ZXN0X3N1Ym1pdChyZXF1ZXN0KTsKPiAgIAlpOTE1X3Jl cXVlc3RfbWFya19jb21wbGV0ZShyZXF1ZXN0KTsKPiAtCWludGVsX2VuZ2luZV93cml0ZV9nbG9i YWxfc2Vxbm8ocmVxdWVzdC0+ZW5naW5lLCByZXF1ZXN0LT5nbG9iYWxfc2Vxbm8pOwo+IC0Jc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmcmVxdWVzdC0+ZW5naW5lLT50aW1lbGluZS5sb2NrLCBmbGFn cyk7Cj4gKwlpbnRlbF9lbmdpbmVfd3JpdGVfZ2xvYmFsX3NlcW5vKGVuZ2luZSwgcmVxdWVzdC0+ Z2xvYmFsX3NlcW5vKTsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+dGltZWxp bmUubG9jaywgZmxhZ3MpOwo+ICsKPiArCWludGVsX2VuZ2luZV9xdWV1ZV9icmVhZGNydW1icyhl bmdpbmUpOwo+ICAgfQo+ICAgCj4gICB2b2lkIGk5MTVfZ2VtX3NldF93ZWRnZWQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gQEAgLTgxNyw3ICs4MTksNyBAQCB2b2lkIGk5MTVfZ2Vt X3NldF93ZWRnZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gICAKPiAgIAlmb3Jf ZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1LCBpZCkgewo+ICAgCQlyZXNldF9maW5pc2hfZW5naW5l KGVuZ2luZSk7Cj4gLQkJaW50ZWxfZW5naW5lX3dha2V1cChlbmdpbmUpOwo+ICsJCWludGVsX2Vu Z2luZV9zaWduYWxfYnJlYWRjcnVtYnMoZW5naW5lKTsKPiAgIAl9Cj4gICAKPiAgIAlzbXBfbWJf X2JlZm9yZV9hdG9taWMoKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9zY2hlZHVsZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMKPiBp bmRleCA3ZGIxMjU1NjY1YTguLjhhZTY4ZDJmYzEzNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9zY2hlZHVsZXIuYwo+IEBAIC0yNDMsNyArMjQzLDcgQEAgc3RhdGljIGJvb2wgaW5mbGln aHQoY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4gICB7Cj4gICAJY29uc3Qgc3RydWN0 IGk5MTVfcmVxdWVzdCAqYWN0aXZlOwo+ICAgCj4gLQlpZiAoIXJxLT5nbG9iYWxfc2Vxbm8pCj4g KwlpZiAoIWk5MTVfcmVxdWVzdF9pc19hY3RpdmUocnEpKQo+ICAgCQlyZXR1cm4gZmFsc2U7Cj4g ICAKPiAgIAlhY3RpdmUgPSBwb3J0X3JlcXVlc3QoZW5naW5lLT5leGVjbGlzdHMucG9ydCk7Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2JyZWFkY3J1bWJzLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9icmVhZGNydW1icy5jCj4gaW5kZXggYjU4OTE1Yjg3 MDhiLi5iMDc5NWIwYWQyMjcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfYnJlYWRjcnVtYnMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2JyZWFk Y3J1bWJzLmMKPiBAQCAtMjksNDggKzI5LDE0OSBAQAo+ICAgCj4gICAjZGVmaW5lIHRhc2tfYXNs ZWVwKHRzaykgKCh0c2spLT5zdGF0ZSAmIFRBU0tfTk9STUFMICYmICEodHNrKS0+b25fcnEpCj4g ICAKPiAtc3RhdGljIHVuc2lnbmVkIGludCBfX2ludGVsX2JyZWFkY3J1bWJzX3dha2V1cChzdHJ1 Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIpCj4gK3N0YXRpYyB2b2lkIGlycV9lbmFibGUoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlpZiAoIWVuZ2luZS0+aXJxX2VuYWJs ZSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJLyogQ2FsbGVyIGRpc2FibGVzIGludGVycnVwdHMgKi8K PiArCXNwaW5fbG9jaygmZW5naW5lLT5pOTE1LT5pcnFfbG9jayk7Cj4gKwllbmdpbmUtPmlycV9l bmFibGUoZW5naW5lKTsKPiArCXNwaW5fdW5sb2NrKCZlbmdpbmUtPmk5MTUtPmlycV9sb2NrKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXJxX2Rpc2FibGUoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQo+ICAgewo+IC0Jc3RydWN0IGludGVsX3dhaXQgKndhaXQ7Cj4gLQl1bnNpZ25l ZCBpbnQgcmVzdWx0ID0gMDsKPiArCWlmICghZW5naW5lLT5pcnFfZGlzYWJsZSkKPiArCQlyZXR1 cm47Cj4gKwo+ICsJLyogQ2FsbGVyIGRpc2FibGVzIGludGVycnVwdHMgKi8KPiArCXNwaW5fbG9j aygmZW5naW5lLT5pOTE1LT5pcnFfbG9jayk7Cj4gKwllbmdpbmUtPmlycV9kaXNhYmxlKGVuZ2lu ZSk7Cj4gKwlzcGluX3VubG9jaygmZW5naW5lLT5pOTE1LT5pcnFfbG9jayk7Cj4gK30KPiAgIAo+ ICtzdGF0aWMgdm9pZCBfX2ludGVsX2JyZWFkY3J1bWJzX2Rpc2FybV9pcnEoc3RydWN0IGludGVs X2JyZWFkY3J1bWJzICpiKQo+ICt7Cj4gICAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYi0+aXJxX2xv Y2spOwo+ICAgCj4gLQl3YWl0ID0gYi0+aXJxX3dhaXQ7Cj4gLQlpZiAod2FpdCkgewo+ICsJR0VN X0JVR19PTighYi0+aXJxX2VuYWJsZWQpOwo+ICsJaWYgKCEtLWItPmlycV9lbmFibGVkKQo+ICsJ CWlycV9kaXNhYmxlKGNvbnRhaW5lcl9vZihiLAo+ICsJCQkJCSBzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzLAo+ICsJCQkJCSBicmVhZGNydW1icykpOwo+ICsKPiArCWItPmlycV9hcm1lZCA9IGZhbHNl Owo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX2VuZ2luZV9kaXNhcm1fYnJlYWRjcnVtYnMoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVt YnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKPiArCj4gKwlpZiAoIWItPmlycV9hcm1lZCkK PiArCQlyZXR1cm47Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycSgmYi0+aXJxX2xvY2spOwo+ICsJaWYg KGItPmlycV9hcm1lZCkKPiArCQlfX2ludGVsX2JyZWFkY3J1bWJzX2Rpc2FybV9pcnEoYik7Cj4g KwlzcGluX3VubG9ja19pcnEoJmItPmlycV9sb2NrKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGlu ZSBib29sIF9fcmVxdWVzdF9jb21wbGV0ZWQoY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEp Cj4gK3sKPiArCXJldHVybiBpOTE1X3NlcW5vX3Bhc3NlZChfX2h3c3Bfc2Vxbm8ocnEpLCBycS0+ ZmVuY2Uuc2Vxbm8pOwo+ICt9Cj4gKwo+ICtib29sIGludGVsX2VuZ2luZV9icmVhZGNydW1ic19p cnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxf YnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKPiArCXN0cnVjdCBpbnRlbF9j b250ZXh0ICpjZSwgKmNuOwo+ICsJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqbmV4dDsKPiArCUxJ U1RfSEVBRChzaWduYWwpOwo+ICsKPiArCXNwaW5fbG9jaygmYi0+aXJxX2xvY2spOwo+ICsKPiAr CWItPmlycV9maXJlZCA9IHRydWU7Cj4gKwlpZiAoYi0+aXJxX2FybWVkICYmIGxpc3RfZW1wdHko JmItPnNpZ25hbGVycykpCj4gKwkJX19pbnRlbF9icmVhZGNydW1ic19kaXNhcm1faXJxKGIpOwo+ ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjZSwgY24sICZiLT5zaWduYWxlcnMsIHNp Z25hbF9saW5rKSB7Cj4gKwkJR0VNX0JVR19PTihsaXN0X2VtcHR5KCZjZS0+c2lnbmFscykpOwo+ ICsKPiArCQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCAmY2UtPnNpZ25hbHMpIHsKPiAr CQkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEgPQo+ICsJCQkJbGlzdF9lbnRyeShwb3MsIHR5cGVv ZigqcnEpLCBzaWduYWxfbGluayk7Cj4gKwo+ICsJCQlpZiAoIV9fcmVxdWVzdF9jb21wbGV0ZWQo cnEpKQo+ICsJCQkJYnJlYWs7Cj4gKwo+ICsJCQlHRU1fQlVHX09OKCF0ZXN0X2JpdChJOTE1X0ZF TkNFX0ZMQUdfU0lHTkFMLAo+ICsJCQkJCSAgICAgJnJxLT5mZW5jZS5mbGFncykpOwo+ICsJCQlj bGVhcl9iaXQoSTkxNV9GRU5DRV9GTEFHX1NJR05BTCwgJnJxLT5mZW5jZS5mbGFncyk7Cj4gKwo+ ICsJCQkvKgo+ICsJCQkgKiBXZSBtYXkgcmFjZSB3aXRoIGRpcmVjdCBpbnZvY2F0aW9uIG9mCj4g KwkJCSAqIGRtYV9mZW5jZV9zaWduYWwoKSwgZS5nLiBpOTE1X3JlcXVlc3RfcmV0aXJlKCksCj4g KwkJCSAqIGluIHdoaWNoIGNhc2Ugd2UgY2FuIHNraXAgcHJvY2Vzc2luZyBpdCBvdXJzZWx2ZXMu Cj4gKwkJCSAqLwo+ICsJCQlpZiAodGVzdF9iaXQoRE1BX0ZFTkNFX0ZMQUdfU0lHTkFMRURfQklU LAo+ICsJCQkJICAgICAmcnEtPmZlbmNlLmZsYWdzKSkKPiArCQkJCWNvbnRpbnVlOwo+ICsKPiAr CQkJLyoKPiArCQkJICogUXVldWUgZm9yIGV4ZWN1dGlvbiBhZnRlciBkcm9wcGluZyB0aGUgc2ln bmFsaW5nCj4gKwkJCSAqIHNwaW5sb2NrIGFzIHRoZSBjYWxsYmFjayBjaGFpbiBtYXkgZW5kIHVw IGFkZGluZwo+ICsJCQkgKiBtb3JlIHNpZ25hbGVycyB0byB0aGUgc2FtZSBjb250ZXh0IG9yIGVu Z2luZS4KPiArCQkJICovCj4gKwkJCWk5MTVfcmVxdWVzdF9nZXQocnEpOwo+ICsJCQlsaXN0X2Fk ZF90YWlsKCZycS0+c2lnbmFsX2xpbmssICZzaWduYWwpOwo+ICsJCX0KPiArCj4gICAJCS8qCj4g LQkJICogTi5CLiBTaW5jZSB0YXNrX2FzbGVlcCgpIGFuZCB0dHd1IGFyZSBub3QgYXRvbWljLCB0 aGUKPiAtCQkgKiB3YWl0ZXIgbWF5IGFjdHVhbGx5IGdvIHRvIHNsZWVwIGFmdGVyIHRoZSBjaGVj aywgY2F1c2luZwo+IC0JCSAqIHVzIHRvIHN1cHByZXNzIGEgdmFsaWQgd2FrZXVwLiBXZSBwcmVm ZXIgdG8gcmVkdWNlIHRoZQo+IC0JCSAqIG51bWJlciBvZiBmYWxzZSBwb3NpdGl2ZSBtaXNzZWRf YnJlYWRjcnVtYigpIHdhcm5pbmdzCj4gLQkJICogYXQgdGhlIGV4cGVuc2Ugb2YgYSBmZXcgZmFs c2UgbmVnYXRpdmVzLCBhcyBpdCBpdCBlYXN5Cj4gLQkJICogdG8gdHJpZ2dlciBhIGZhbHNlIHBv c2l0aXZlIHVuZGVyIGhlYXZ5IGxvYWQuIEVub3VnaAo+IC0JCSAqIHNpZ25hbCBzaG91bGQgcmVt YWluIGZyb20gZ2VudWluZSBtaXNzZWRfYnJlYWRjcnVtYigpCj4gLQkJICogZm9yIHVzIHRvIGRl dGVjdCBpbiBDSS4KPiArCQkgKiBXZSBwcm9jZXNzIHRoZSBsaXN0IGRlbGV0aW9uIGluIGJ1bGss IG9ubHkgdXNpbmcgYSBsaXN0X2FkZAo+ICsJCSAqIChub3QgbGlzdF9tb3ZlKSBhYm92ZSBidXQg a2VlcGluZyB0aGUgc3RhdHVzIG9mCj4gKwkJICogcnEtPnNpZ25hbF9saW5rIGtub3duIHdpdGgg dGhlIEk5MTVfRkVOQ0VfRkxBR19TSUdOQUwgYml0Lgo+ICAgCQkgKi8KPiAtCQlib29sIHdhc19h c2xlZXAgPSB0YXNrX2FzbGVlcCh3YWl0LT50c2spOwo+ICsJCWlmICghbGlzdF9pc19maXJzdChw b3MsICZjZS0+c2lnbmFscykpIHsKPiArCQkJLyogQWR2YW5jZSB0aGUgbGlzdCB0byB0aGUgZmly c3QgaW5jb21wbGV0ZSByZXF1ZXN0ICovCj4gKwkJCV9fbGlzdF9kZWxfbWFueSgmY2UtPnNpZ25h bHMsIHBvcyk7Cj4gKwkJCWlmICgmY2UtPnNpZ25hbHMgPT0gcG9zKSAvKiBub3cgZW1wdHkgKi8K PiArCQkJCWxpc3RfZGVsX2luaXQoJmNlLT5zaWduYWxfbGluayk7Cj4gKwkJfQo+ICsJfQo+ICsK PiArCXNwaW5fdW5sb2NrKCZiLT5pcnFfbG9jayk7Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9zYWZl KHBvcywgbmV4dCwgJnNpZ25hbCkgewo+ICsJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxID0KPiAr CQkJbGlzdF9lbnRyeShwb3MsIHR5cGVvZigqcnEpLCBzaWduYWxfbGluayk7Cj4gICAKPiAtCQly ZXN1bHQgPSBFTkdJTkVfV0FLRVVQX1dBSVRFUjsKPiAtCQlpZiAod2FrZV91cF9wcm9jZXNzKHdh aXQtPnRzaykgJiYgd2FzX2FzbGVlcCkKPiAtCQkJcmVzdWx0IHw9IEVOR0lORV9XQUtFVVBfQVNM RUVQOwo+ICsJCWRtYV9mZW5jZV9zaWduYWwoJnJxLT5mZW5jZSk7Cj4gKwkJaTkxNV9yZXF1ZXN0 X3B1dChycSk7Cj4gICAJfQo+ICAgCj4gLQlyZXR1cm4gcmVzdWx0Owo+ICsJcmV0dXJuICFsaXN0 X2VtcHR5KCZzaWduYWwpOwo+ICAgfQo+ICAgCj4gLXVuc2lnbmVkIGludCBpbnRlbF9lbmdpbmVf d2FrZXVwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArYm9vbCBpbnRlbF9lbmdp bmVfc2lnbmFsX2JyZWFkY3J1bWJzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAg IHsKPiAtCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJz Owo+IC0JdW5zaWduZWQgbG9uZyBmbGFnczsKPiAtCXVuc2lnbmVkIGludCByZXN1bHQ7Cj4gKwli b29sIHJlc3VsdDsKPiAgIAo+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJmItPmlycV9sb2NrLCBmbGFn cyk7Cj4gLQlyZXN1bHQgPSBfX2ludGVsX2JyZWFkY3J1bWJzX3dha2V1cChiKTsKPiAtCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmItPmlycV9sb2NrLCBmbGFncyk7Cj4gKwlsb2NhbF9pcnFfZGlz YWJsZSgpOwo+ICsJcmVzdWx0ID0gaW50ZWxfZW5naW5lX2JyZWFkY3J1bWJzX2lycShlbmdpbmUp Owo+ICsJbG9jYWxfaXJxX2VuYWJsZSgpOwo+ICAgCj4gICAJcmV0dXJuIHJlc3VsdDsKPiAgIH0K PiAgIAo+ICtzdGF0aWMgdm9pZCBzaWduYWxfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICp3b3Jr KQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPQo+ICsJCWNvbnRhaW5l cl9vZih3b3JrLCB0eXBlb2YoKmVuZ2luZSksIGJyZWFkY3J1bWJzLmlycV93b3JrKTsKPiArCj4g KwlpbnRlbF9lbmdpbmVfYnJlYWRjcnVtYnNfaXJxKGVuZ2luZSk7Cj4gK30KPiArCj4gICBzdGF0 aWMgdW5zaWduZWQgbG9uZyB3YWl0X3RpbWVvdXQodm9pZCkKPiAgIHsKPiAgIAlyZXR1cm4gcm91 bmRfamlmZmllc191cChqaWZmaWVzICsgRFJNX0k5MTVfSEFOR0NIRUNLX0pJRkZJRVMpOwo+IEBA IC05NCwxOSArMTk1LDE1IEBAIHN0YXRpYyB2b2lkIGludGVsX2JyZWFkY3J1bWJzX2hhbmdjaGVj ayhzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKPiAgIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUgPQo+ICAgCQlmcm9tX3RpbWVyKGVuZ2luZSwgdCwgYnJlYWRjcnVtYnMuaGFuZ2NoZWNrKTsK PiAgIAlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsK PiAtCXVuc2lnbmVkIGludCBpcnFfY291bnQ7Cj4gICAKPiAgIAlpZiAoIWItPmlycV9hcm1lZCkK PiAgIAkJcmV0dXJuOwo+ICAgCj4gLQlpcnFfY291bnQgPSBSRUFEX09OQ0UoYi0+aXJxX2NvdW50 KTsKPiAtCWlmIChiLT5oYW5nY2hlY2tfaW50ZXJydXB0cyAhPSBpcnFfY291bnQpIHsKPiAtCQli LT5oYW5nY2hlY2tfaW50ZXJydXB0cyA9IGlycV9jb3VudDsKPiAtCQltb2RfdGltZXIoJmItPmhh bmdjaGVjaywgd2FpdF90aW1lb3V0KCkpOwo+IC0JCXJldHVybjsKPiAtCX0KPiArCWlmIChiLT5p cnFfZmlyZWQpCj4gKwkJZ290byByZWFybTsKPiAgIAo+IC0JLyogV2Uga2VlcCB0aGUgaGFuZ2No ZWNrIHRpbWVyIGFsaXZlIHVudGlsIHdlIGRpc2FybSB0aGUgaXJxLCBldmVuCj4gKwkvKgo+ICsJ ICogV2Uga2VlcCB0aGUgaGFuZ2NoZWNrIHRpbWVyIGFsaXZlIHVudGlsIHdlIGRpc2FybSB0aGUg aXJxLCBldmVuCj4gICAJICogaWYgdGhlcmUgYXJlIG5vIHdhaXRlcnMgYXQgcHJlc2VudC4KPiAg IAkgKgo+ICAgCSAqIElmIHRoZSB3YWl0ZXIgd2FzIGN1cnJlbnRseSBydW5uaW5nLCBhc3N1bWUg aXQgaGFzbid0IGhhZCBhIGNoYW5jZQo+IEBAIC0xMTgsMTAgKzIxNSwxMyBAQCBzdGF0aWMgdm9p ZCBpbnRlbF9icmVhZGNydW1ic19oYW5nY2hlY2soc3RydWN0IHRpbWVyX2xpc3QgKnQpCj4gICAJ ICogYnV0IHdlIHN0aWxsIGhhdmUgYSB3YWl0ZXIuIEFzc3VtaW5nIGFsbCBiYXRjaGVzIGNvbXBs ZXRlIHdpdGhpbgo+ICAgCSAqIERSTV9JOTE1X0hBTkdDSEVDS19KSUZGSUVTIFsxLjVzXSEKPiAg IAkgKi8KPiAtCWlmIChpbnRlbF9lbmdpbmVfd2FrZXVwKGVuZ2luZSkgJiBFTkdJTkVfV0FLRVVQ X0FTTEVFUCkgewo+ICsJc3luY2hyb25pemVfaGFyZGlycShlbmdpbmUtPmk5MTUtPmRybS5pcnEp Owo+ICsJaWYgKGludGVsX2VuZ2luZV9zaWduYWxfYnJlYWRjcnVtYnMoZW5naW5lKSkgewo+ICAg CQltaXNzZWRfYnJlYWRjcnVtYihlbmdpbmUpOwo+ICAgCQltb2RfdGltZXIoJmItPmZha2VfaXJx LCBqaWZmaWVzICsgMSk7Cj4gICAJfSBlbHNlIHsKPiArcmVhcm06Cj4gKwkJYi0+aXJxX2ZpcmVk ID0gZmFsc2U7Cj4gICAJCW1vZF90aW1lcigmYi0+aGFuZ2NoZWNrLCB3YWl0X3RpbWVvdXQoKSk7 Cj4gICAJfQo+ICAgfQo+IEBAIC0xNDAsMTEgKzI0MCw3IEBAIHN0YXRpYyB2b2lkIGludGVsX2Jy ZWFkY3J1bWJzX2Zha2VfaXJxKHN0cnVjdCB0aW1lcl9saXN0ICp0KQo+ICAgCSAqIG9sZGVzdCB3 YWl0ZXIgdG8gZG8gdGhlIGNvaGVyZW50IHNlcW5vIGNoZWNrLgo+ICAgCSAqLwo+ICAgCj4gLQlz cGluX2xvY2tfaXJxKCZiLT5pcnFfbG9jayk7Cj4gLQlpZiAoYi0+aXJxX2FybWVkICYmICFfX2lu dGVsX2JyZWFkY3J1bWJzX3dha2V1cChiKSkKPiAtCQlfX2ludGVsX2VuZ2luZV9kaXNhcm1fYnJl YWRjcnVtYnMoZW5naW5lKTsKPiAtCXNwaW5fdW5sb2NrX2lycSgmYi0+aXJxX2xvY2spOwo+IC0J aWYgKCFiLT5pcnFfYXJtZWQpCj4gKwlpZiAoIWludGVsX2VuZ2luZV9zaWduYWxfYnJlYWRjcnVt YnMoZW5naW5lKSAmJiAhYi0+aXJxX2FybWVkKQo+ICAgCQlyZXR1cm47Cj4gICAKPiAgIAkvKiBJ ZiB0aGUgdXNlciBoYXMgZGlzYWJsZWQgdGhlIGZha2UtaXJxLCByZXN0b3JlIHRoZSBoYW5nY2hl Y2tpbmcgKi8KPiBAQCAtMTU2LDQzICsyNTIsNiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9icmVhZGNy dW1ic19mYWtlX2lycShzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKPiAgIAltb2RfdGltZXIoJmItPmZh a2VfaXJxLCBqaWZmaWVzICsgMSk7Cj4gICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgaXJxX2VuYWJs ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gLXsKPiAtCWlmICghZW5naW5lLT5p cnFfZW5hYmxlKQo+IC0JCXJldHVybjsKPiAtCj4gLQkvKiBDYWxsZXIgZGlzYWJsZXMgaW50ZXJy dXB0cyAqLwo+IC0Jc3Bpbl9sb2NrKCZlbmdpbmUtPmk5MTUtPmlycV9sb2NrKTsKPiAtCWVuZ2lu ZS0+aXJxX2VuYWJsZShlbmdpbmUpOwo+IC0Jc3Bpbl91bmxvY2soJmVuZ2luZS0+aTkxNS0+aXJx X2xvY2spOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBpcnFfZGlzYWJsZShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCj4gLXsKPiAtCWlmICghZW5naW5lLT5pcnFfZGlzYWJsZSkKPiAt CQlyZXR1cm47Cj4gLQo+IC0JLyogQ2FsbGVyIGRpc2FibGVzIGludGVycnVwdHMgKi8KPiAtCXNw aW5fbG9jaygmZW5naW5lLT5pOTE1LT5pcnFfbG9jayk7Cj4gLQllbmdpbmUtPmlycV9kaXNhYmxl KGVuZ2luZSk7Cj4gLQlzcGluX3VubG9jaygmZW5naW5lLT5pOTE1LT5pcnFfbG9jayk7Cj4gLX0K PiAtCj4gLXZvaWQgX19pbnRlbF9lbmdpbmVfZGlzYXJtX2JyZWFkY3J1bWJzKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAtewo+IC0Jc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpi ID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7Cj4gLQo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmYi0+ aXJxX2xvY2spOwo+IC0JR0VNX0JVR19PTihiLT5pcnFfd2FpdCk7Cj4gLQlHRU1fQlVHX09OKCFi LT5pcnFfYXJtZWQpOwo+IC0KPiAtCUdFTV9CVUdfT04oIWItPmlycV9lbmFibGVkKTsKPiAtCWlm ICghLS1iLT5pcnFfZW5hYmxlZCkKPiAtCQlpcnFfZGlzYWJsZShlbmdpbmUpOwo+IC0KPiAtCWIt PmlycV9hcm1lZCA9IGZhbHNlOwo+IC19Cj4gLQo+ICAgdm9pZCBpbnRlbF9lbmdpbmVfcGluX2Jy ZWFkY3J1bWJzX2lycShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gICB7Cj4gICAJ c3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7Cj4gQEAg LTIxNSw0MCArMjc0LDYgQEAgdm9pZCBpbnRlbF9lbmdpbmVfdW5waW5fYnJlYWRjcnVtYnNfaXJx KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIAlzcGluX3VubG9ja19pcnEoJmIt PmlycV9sb2NrKTsKPiAgIH0KPiAgIAo+IC12b2lkIGludGVsX2VuZ2luZV9kaXNhcm1fYnJlYWRj cnVtYnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+IC17Cj4gLQlzdHJ1Y3QgaW50 ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKPiAtCXN0cnVjdCBpbnRl bF93YWl0ICp3YWl0LCAqbjsKPiAtCj4gLQlpZiAoIWItPmlycV9hcm1lZCkKPiAtCQlyZXR1cm47 Cj4gLQo+IC0JLyoKPiAtCSAqIFdlIG9ubHkgZGlzYXJtIHRoZSBpcnEgd2hlbiB3ZSBhcmUgaWRs ZSAoYWxsIHJlcXVlc3RzIGNvbXBsZXRlZCksCj4gLQkgKiBzbyBpZiB0aGUgYm90dG9tLWhhbGYg cmVtYWlucyBhc2xlZXAsIGl0IG1pc3NlZCB0aGUgcmVxdWVzdAo+IC0JICogY29tcGxldGlvbi4K PiAtCSAqLwo+IC0JaWYgKGludGVsX2VuZ2luZV93YWtldXAoZW5naW5lKSAmIEVOR0lORV9XQUtF VVBfQVNMRUVQKQo+IC0JCW1pc3NlZF9icmVhZGNydW1iKGVuZ2luZSk7Cj4gLQo+IC0Jc3Bpbl9s b2NrX2lycSgmYi0+cmJfbG9jayk7Cj4gLQo+IC0Jc3Bpbl9sb2NrKCZiLT5pcnFfbG9jayk7Cj4g LQliLT5pcnFfd2FpdCA9IE5VTEw7Cj4gLQlpZiAoYi0+aXJxX2FybWVkKQo+IC0JCV9faW50ZWxf ZW5naW5lX2Rpc2FybV9icmVhZGNydW1icyhlbmdpbmUpOwo+IC0Jc3Bpbl91bmxvY2soJmItPmly cV9sb2NrKTsKPiAtCj4gLQlyYnRyZWVfcG9zdG9yZGVyX2Zvcl9lYWNoX2VudHJ5X3NhZmUod2Fp dCwgbiwgJmItPndhaXRlcnMsIG5vZGUpIHsKPiAtCQlHRU1fQlVHX09OKCFpbnRlbF9lbmdpbmVf c2lnbmFsZWQoZW5naW5lLCB3YWl0LT5zZXFubykpOwo+IC0JCVJCX0NMRUFSX05PREUoJndhaXQt Pm5vZGUpOwo+IC0JCXdha2VfdXBfcHJvY2Vzcyh3YWl0LT50c2spOwo+IC0JfQo+IC0JYi0+d2Fp dGVycyA9IFJCX1JPT1Q7Cj4gLQo+IC0Jc3Bpbl91bmxvY2tfaXJxKCZiLT5yYl9sb2NrKTsKPiAt fQo+IC0KPiAgIHN0YXRpYyBib29sIHVzZV9mYWtlX2lycShjb25zdCBzdHJ1Y3QgaW50ZWxfYnJl YWRjcnVtYnMgKmIpCj4gICB7Cj4gICAJY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lID0KPiBAQCAtMjY0LDcgKzI4OSw3IEBAIHN0YXRpYyBib29sIHVzZV9mYWtlX2lycShjb25z dCBzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIpCj4gICAJICogZW5naW5lLT5zZXFub19iYXJy aWVyKCksIGEgdGltaW5nIGVycm9yIHRoYXQgc2hvdWxkIGJlIHRyYW5zaWVudAo+ICAgCSAqIGFu ZCB1bmxpa2VseSB0byByZW9jY3VyLgo+ICAgCSAqLwo+IC0JcmV0dXJuIFJFQURfT05DRShiLT5p cnFfY291bnQpID09IGItPmhhbmdjaGVja19pbnRlcnJ1cHRzOwo+ICsJcmV0dXJuICFiLT5pcnFf ZmlyZWQ7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIGVuYWJsZV9mYWtlX2lycShzdHJ1Y3Qg aW50ZWxfYnJlYWRjcnVtYnMgKmIpCj4gQEAgLTI3Niw3ICszMDEsNyBAQCBzdGF0aWMgdm9pZCBl bmFibGVfZmFrZV9pcnEoc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiKQo+ICAgCQltb2RfdGlt ZXIoJmItPmhhbmdjaGVjaywgd2FpdF90aW1lb3V0KCkpOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBi b29sIF9faW50ZWxfYnJlYWRjcnVtYnNfZW5hYmxlX2lycShzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVt YnMgKmIpCj4gK3N0YXRpYyBib29sIF9faW50ZWxfYnJlYWRjcnVtYnNfYXJtX2lycShzdHJ1Y3Qg aW50ZWxfYnJlYWRjcnVtYnMgKmIpCj4gICB7Cj4gICAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lID0KPiAgIAkJY29udGFpbmVyX29mKGIsIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MsIGJy ZWFkY3J1bWJzKTsKPiBAQCAtMzE1LDUzNiArMzQwLDE0OSBAQCBzdGF0aWMgYm9vbCBfX2ludGVs X2JyZWFkY3J1bWJzX2VuYWJsZV9pcnEoc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiKQo+ICAg CXJldHVybiBlbmFibGVkOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbmxpbmUgc3RydWN0IGludGVs X3dhaXQgKnRvX3dhaXQoc3RydWN0IHJiX25vZGUgKm5vZGUpCj4gK3ZvaWQgaW50ZWxfZW5naW5l X2luaXRfYnJlYWRjcnVtYnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgewo+ IC0JcmV0dXJuIHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBpbnRlbF93YWl0LCBub2RlKTsKPiAtfQo+ ICsJc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7Cj4g ICAKPiAtc3RhdGljIGlubGluZSB2b2lkIF9faW50ZWxfYnJlYWRjcnVtYnNfZmluaXNoKHN0cnVj dCBpbnRlbF9icmVhZGNydW1icyAqYiwKPiAtCQkJCQkgICAgICBzdHJ1Y3QgaW50ZWxfd2FpdCAq d2FpdCkKPiAtewo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmYi0+cmJfbG9jayk7Cj4gLQlHRU1f QlVHX09OKGItPmlycV93YWl0ID09IHdhaXQpOwo+ICsJc3Bpbl9sb2NrX2luaXQoJmItPmlycV9s b2NrKTsKPiArCUlOSVRfTElTVF9IRUFEKCZiLT5zaWduYWxlcnMpOwo+ICAgCj4gLQkvKgo+IC0J ICogVGhpcyByZXF1ZXN0IGlzIGNvbXBsZXRlZCwgc28gcmVtb3ZlIGl0IGZyb20gdGhlIHRyZWUs IG1hcmsgaXQgYXMKPiAtCSAqIGNvbXBsZXRlLCBhbmQgKnRoZW4qIHdha2UgdXAgdGhlIGFzc29j aWF0ZWQgdGFzay4gTi5CLiB3aGVuIHRoZQo+IC0JICogdGFzayB3YWtlcyB1cCwgaXQgd2lsbCBm aW5kIHRoZSBlbXB0eSByYl9ub2RlLCBkaXNjZXJuIHRoYXQgaXQKPiAtCSAqIGhhcyBhbHJlYWR5 IGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSB0cmVlIGFuZCBza2lwIHRoZSBzZXJpYWxpc2F0aW9uCj4g LQkgKiBvZiB0aGUgYi0+cmJfbG9jayBhbmQgYi0+aXJxX2xvY2suIFRoaXMgbWVhbnMgdGhhdCB0 aGUgZGVzdHJ1Y3Rpb24KPiAtCSAqIG9mIHRoZSBpbnRlbF93YWl0IGlzIG5vdCBzZXJpYWxpc2Vk IHdpdGggdGhlIGludGVycnVwdCBoYW5kbGVyCj4gLQkgKiBieSB0aGUgd2FpdGVyIC0gaXQgbXVz dCBpbnN0ZWFkIGJlIHNlcmlhbGlzZWQgYnkgdGhlIGNhbGxlci4KPiAtCSAqLwo+IC0JcmJfZXJh c2UoJndhaXQtPm5vZGUsICZiLT53YWl0ZXJzKTsKPiAtCVJCX0NMRUFSX05PREUoJndhaXQtPm5v ZGUpOwo+ICsJaW5pdF9pcnFfd29yaygmYi0+aXJxX3dvcmssIHNpZ25hbF9pcnFfd29yayk7Cj4g ICAKPiAtCWlmICh3YWl0LT50c2stPnN0YXRlICE9IFRBU0tfUlVOTklORykKPiAtCQl3YWtlX3Vw X3Byb2Nlc3Mod2FpdC0+dHNrKTsgLyogaW1wbGljaXQgc21wX3dtYigpICovCj4gKwl0aW1lcl9z ZXR1cCgmYi0+ZmFrZV9pcnEsIGludGVsX2JyZWFkY3J1bWJzX2Zha2VfaXJxLCAwKTsKPiArCXRp bWVyX3NldHVwKCZiLT5oYW5nY2hlY2ssIGludGVsX2JyZWFkY3J1bWJzX2hhbmdjaGVjaywgMCk7 Cj4gICB9Cj4gICAKPiAtc3RhdGljIGlubGluZSB2b2lkIF9faW50ZWxfYnJlYWRjcnVtYnNfbmV4 dChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gLQkJCQkJICAgIHN0cnVjdCByYl9u b2RlICpuZXh0KQo+ICtzdGF0aWMgdm9pZCBjYW5jZWxfZmFrZV9pcnEoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQo+ICAgewo+ICAgCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9 ICZlbmdpbmUtPmJyZWFkY3J1bWJzOwo+ICAgCj4gLQlzcGluX2xvY2soJmItPmlycV9sb2NrKTsK PiAtCUdFTV9CVUdfT04oIWItPmlycV9hcm1lZCk7Cj4gLQlHRU1fQlVHX09OKCFiLT5pcnFfd2Fp dCk7Cj4gLQliLT5pcnFfd2FpdCA9IHRvX3dhaXQobmV4dCk7Cj4gLQlzcGluX3VubG9jaygmYi0+ aXJxX2xvY2spOwo+IC0KPiAtCS8qIFdlIGFsd2F5cyB3YWtlIHVwIHRoZSBuZXh0IHdhaXRlciB0 aGF0IHRha2VzIG92ZXIgYXMgdGhlIGJvdHRvbS1oYWxmCj4gLQkgKiBhcyB3ZSBtYXkgZGVsZWdh dGUgbm90IG9ubHkgdGhlIGlycS1zZXFubyBiYXJyaWVyIHRvIHRoZSBuZXh0IHdhaXRlcgo+IC0J ICogYnV0IGFsc28gdGhlIHRhc2sgb2Ygd2FraW5nIHVwIGNvbmN1cnJlbnQgd2FpdGVycy4KPiAt CSAqLwo+IC0JaWYgKG5leHQpCj4gLQkJd2FrZV91cF9wcm9jZXNzKHRvX3dhaXQobmV4dCktPnRz ayk7Cj4gKwlkZWxfdGltZXJfc3luYygmYi0+ZmFrZV9pcnEpOyAvKiBtYXkgcXVldWUgYi0+aGFu Z2NoZWNrICovCj4gKwlkZWxfdGltZXJfc3luYygmYi0+aGFuZ2NoZWNrKTsKPiArCWNsZWFyX2Jp dChlbmdpbmUtPmlkLCAmZW5naW5lLT5pOTE1LT5ncHVfZXJyb3IubWlzc2VkX2lycV9yaW5ncyk7 Cj4gICB9Cj4gICAKPiAtc3RhdGljIGJvb2wgX19pbnRlbF9lbmdpbmVfYWRkX3dhaXQoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0JCQkJICAgIHN0cnVjdCBpbnRlbF93YWl0ICp3 YWl0KQo+ICt2b2lkIGludGVsX2VuZ2luZV9yZXNldF9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCj4gICB7Cj4gICAJc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpi ID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7Cj4gLQlzdHJ1Y3QgcmJfbm9kZSAqKnAsICpwYXJlbnQs ICpjb21wbGV0ZWQ7Cj4gLQlib29sIGZpcnN0LCBhcm1lZDsKPiAtCXUzMiBzZXFubzsKPiArCXVu c2lnbmVkIGxvbmcgZmxhZ3M7Cj4gICAKPiAtCUdFTV9CVUdfT04oIXdhaXQtPnNlcW5vKTsKPiAr CXNwaW5fbG9ja19pcnFzYXZlKCZiLT5pcnFfbG9jaywgZmxhZ3MpOwo+ICAgCj4gLQkvKiBJbnNl cnQgdGhlIHJlcXVlc3QgaW50byB0aGUgcmV0aXJlbWVudCBvcmRlcmVkIGxpc3QKPiAtCSAqIG9m IHdhaXRlcnMgYnkgd2Fsa2luZyB0aGUgcmJ0cmVlLiBJZiB3ZSBhcmUgdGhlIG9sZGVzdAo+IC0J ICogc2Vxbm8gaW4gdGhlIHRyZWUgKHRoZSBmaXJzdCB0byBiZSByZXRpcmVkKSwgdGhlbgo+IC0J ICogc2V0IG91cnNlbHZlcyBhcyB0aGUgYm90dG9tLWhhbGYuCj4gLQkgKgo+IC0JICogQXMgd2Ug ZGVzY2VuZCB0aGUgdHJlZSwgcHJ1bmUgY29tcGxldGVkIGJyYW5jaGVzIHNpbmNlIHdlIGhvbGQg dGhlCj4gLQkgKiBzcGlubG9jayB3ZSBrbm93IHRoYXQgdGhlIGZpcnN0X3dhaXRlciBtdXN0IGJl IGRlbGF5ZWQgYW5kIGNhbgo+IC0JICogcmVkdWNlIHNvbWUgb2YgdGhlIHNlcXVlbnRpYWwgd2Fr ZSB1cCBsYXRlbmN5IGlmIHdlIHRha2UgYWN0aW9uCj4gLQkgKiBvdXJzZWx2ZXMgYW5kIHdha2Ug dXAgdGhlIGNvbXBsZXRlZCB0YXNrcyBpbiBwYXJhbGxlbC4gQWxzbywgYnkKPiAtCSAqIHJlbW92 aW5nIHN0YWxlIGVsZW1lbnRzIGluIHRoZSB0cmVlLCB3ZSBtYXkgYmUgYWJsZSB0byByZWR1Y2Ug dGhlCj4gLQkgKiBwaW5nLXBvbmcgYmV0d2VlbiB0aGUgb2xkIGJvdHRvbS1oYWxmIGFuZCBvdXJz ZWx2ZXMgYXMgZmlyc3Qtd2FpdGVyLgo+ICsJLyoKPiArCSAqIExlYXZlIHRoZSBmYWtlX2lycSB0 aW1lciBlbmFibGVkIChpZiBpdCBpcyBydW5uaW5nKSwgYnV0IGNsZWFyIHRoZQo+ICsJICogYml0 IHNvIHRoYXQgaXQgdHVybnMgaXRzZWxmIG9mZiBvbiBpdHMgbmV4dCB3YWtlIHVwIGFuZCBnb2Vz IGJhY2sKPiArCSAqIHRvIHRoZSBsb25nIGhhbmdjaGVjayBpbnRlcnZhbCBpZiBzdGlsbCByZXF1 aXJlZC4KPiAgIAkgKi8KPiAtCWFybWVkID0gZmFsc2U7Cj4gLQlmaXJzdCA9IHRydWU7Cj4gLQlw YXJlbnQgPSBOVUxMOwo+IC0JY29tcGxldGVkID0gTlVMTDsKPiAtCXNlcW5vID0gaW50ZWxfZW5n aW5lX2dldF9zZXFubyhlbmdpbmUpOwo+IC0KPiAtCSAvKiBJZiB0aGUgcmVxdWVzdCBjb21wbGV0 ZWQgYmVmb3JlIHdlIG1hbmFnZWQgdG8gZ3JhYiB0aGUgc3BpbmxvY2ssCj4gLQkgICogcmV0dXJu IG5vdyBiZWZvcmUgYWRkaW5nIG91cnNlbHZlcyB0byB0aGUgcmJ0cmVlLiBXZSBsZXQgdGhlCj4g LQkgICogY3VycmVudCBib3R0b20taGFsZiBoYW5kbGUgYW55IHBlbmRpbmcgd2FrZXVwcyBhbmQg aW5zdGVhZAo+IC0JICAqIHRyeSBhbmQgZ2V0IG91dCBvZiB0aGUgd2F5IHF1aWNrbHkuCj4gLQkg ICovCj4gLQlpZiAoaTkxNV9zZXFub19wYXNzZWQoc2Vxbm8sIHdhaXQtPnNlcW5vKSkgewo+IC0J CVJCX0NMRUFSX05PREUoJndhaXQtPm5vZGUpOwo+IC0JCXJldHVybiBmaXJzdDsKPiAtCX0KPiAt Cj4gLQlwID0gJmItPndhaXRlcnMucmJfbm9kZTsKPiAtCXdoaWxlICgqcCkgewo+IC0JCXBhcmVu dCA9ICpwOwo+IC0JCWlmICh3YWl0LT5zZXFubyA9PSB0b193YWl0KHBhcmVudCktPnNlcW5vKSB7 Cj4gLQkJCS8qIFdlIGhhdmUgbXVsdGlwbGUgd2FpdGVycyBvbiB0aGUgc2FtZSBzZXFubywgc2Vs ZWN0Cj4gLQkJCSAqIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgKHRoYXQgd2l0aCB0aGUgc21h bGxlc3QKPiAtCQkJICogdGFzay0+cHJpbykgdG8gc2VydmUgYXMgdGhlIGJvdHRvbS1oYWxmIGZv ciB0aGlzCj4gLQkJCSAqIGdyb3VwLgo+IC0JCQkgKi8KPiAtCQkJaWYgKHdhaXQtPnRzay0+cHJp byA+IHRvX3dhaXQocGFyZW50KS0+dHNrLT5wcmlvKSB7Cj4gLQkJCQlwID0gJnBhcmVudC0+cmJf cmlnaHQ7Cj4gLQkJCQlmaXJzdCA9IGZhbHNlOwo+IC0JCQl9IGVsc2Ugewo+IC0JCQkJcCA9ICZw YXJlbnQtPnJiX2xlZnQ7Cj4gLQkJCX0KPiAtCQl9IGVsc2UgaWYgKGk5MTVfc2Vxbm9fcGFzc2Vk KHdhaXQtPnNlcW5vLAo+IC0JCQkJCSAgICAgdG9fd2FpdChwYXJlbnQpLT5zZXFubykpIHsKPiAt CQkJcCA9ICZwYXJlbnQtPnJiX3JpZ2h0Owo+IC0JCQlpZiAoaTkxNV9zZXFub19wYXNzZWQoc2Vx bm8sIHRvX3dhaXQocGFyZW50KS0+c2Vxbm8pKQo+IC0JCQkJY29tcGxldGVkID0gcGFyZW50Owo+ IC0JCQllbHNlCj4gLQkJCQlmaXJzdCA9IGZhbHNlOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCXAgPSAm cGFyZW50LT5yYl9sZWZ0Owo+IC0JCX0KPiAtCX0KPiAtCXJiX2xpbmtfbm9kZSgmd2FpdC0+bm9k ZSwgcGFyZW50LCBwKTsKPiAtCXJiX2luc2VydF9jb2xvcigmd2FpdC0+bm9kZSwgJmItPndhaXRl cnMpOwo+IC0KPiAtCWlmIChmaXJzdCkgewo+IC0JCXNwaW5fbG9jaygmYi0+aXJxX2xvY2spOwo+ IC0JCWItPmlycV93YWl0ID0gd2FpdDsKPiAtCQkvKiBBZnRlciBhc3NpZ25pbmcgb3Vyc2VsdmVz IGFzIHRoZSBuZXcgYm90dG9tLWhhbGYsIHdlIG11c3QKPiAtCQkgKiBwZXJmb3JtIGEgY3Vyc29y eSBjaGVjayB0byBwcmV2ZW50IGEgbWlzc2VkIGludGVycnVwdC4KPiAtCQkgKiBFaXRoZXIgd2Ug bWlzcyB0aGUgaW50ZXJydXB0IHdoaWxzdCBwcm9ncmFtbWluZyB0aGUgaGFyZHdhcmUsCj4gLQkJ ICogb3IgaWYgdGhlcmUgd2FzIGEgcHJldmlvdXMgd2FpdGVyIChmb3IgYSBsYXRlciBzZXFubykg dGhleQo+IC0JCSAqIG1heSBiZSB3b2tlbiBpbnN0ZWFkIG9mIHVzIChkdWUgdG8gdGhlIGluaGVy ZW50IHJhY2UKPiAtCQkgKiBpbiB0aGUgdW5sb2NrZWQgcmVhZCBvZiBiLT5pcnFfc2Vxbm9fYmgg aW4gdGhlIGlycSBoYW5kbGVyKQo+IC0JCSAqIGFuZCBzbyB3ZSBtaXNzIHRoZSB3YWtlIHVwLgo+ IC0JCSAqLwo+IC0JCWFybWVkID0gX19pbnRlbF9icmVhZGNydW1ic19lbmFibGVfaXJxKGIpOwo+ IC0JCXNwaW5fdW5sb2NrKCZiLT5pcnFfbG9jayk7Cj4gLQl9Cj4gLQo+IC0JaWYgKGNvbXBsZXRl ZCkgewo+IC0JCS8qIEFkdmFuY2UgdGhlIGJvdHRvbS1oYWxmIChiLT5pcnFfd2FpdCkgYmVmb3Jl IHdlIHdha2UgdXAKPiAtCQkgKiB0aGUgd2FpdGVycyB3aG8gbWF5IHNjcmliYmxlIG92ZXIgdGhl aXIgaW50ZWxfd2FpdAo+IC0JCSAqIGp1c3QgYXMgdGhlIGludGVycnVwdCBoYW5kbGVyIGlzIGRl cmVmZXJlbmNpbmcgaXQgdmlhCj4gLQkJICogYi0+aXJxX3dhaXQuCj4gLQkJICovCj4gLQkJaWYg KCFmaXJzdCkgewo+IC0JCQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX25leHQoY29tcGxldGVk KTsKPiAtCQkJR0VNX0JVR19PTihuZXh0ID09ICZ3YWl0LT5ub2RlKTsKPiAtCQkJX19pbnRlbF9i cmVhZGNydW1ic19uZXh0KGVuZ2luZSwgbmV4dCk7Cj4gLQkJfQo+IC0KPiAtCQlkbyB7Cj4gLQkJ CXN0cnVjdCBpbnRlbF93YWl0ICpjcnVtYiA9IHRvX3dhaXQoY29tcGxldGVkKTsKPiAtCQkJY29t cGxldGVkID0gcmJfcHJldihjb21wbGV0ZWQpOwo+IC0JCQlfX2ludGVsX2JyZWFkY3J1bWJzX2Zp bmlzaChiLCBjcnVtYik7Cj4gLQkJfSB3aGlsZSAoY29tcGxldGVkKTsKPiAtCX0KPiAtCj4gLQlH RU1fQlVHX09OKCFiLT5pcnFfd2FpdCk7Cj4gLQlHRU1fQlVHX09OKCFiLT5pcnFfYXJtZWQpOwo+ IC0JR0VNX0JVR19PTihyYl9maXJzdCgmYi0+d2FpdGVycykgIT0gJmItPmlycV93YWl0LT5ub2Rl KTsKPiAtCj4gLQlyZXR1cm4gYXJtZWQ7Cj4gLX0KPiAtCj4gLWJvb2wgaW50ZWxfZW5naW5lX2Fk ZF93YWl0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAtCQkJICAgc3RydWN0IGlu dGVsX3dhaXQgKndhaXQpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZl bmdpbmUtPmJyZWFkY3J1bWJzOwo+IC0JYm9vbCBhcm1lZDsKPiAtCj4gLQlzcGluX2xvY2tfaXJx KCZiLT5yYl9sb2NrKTsKPiAtCWFybWVkID0gX19pbnRlbF9lbmdpbmVfYWRkX3dhaXQoZW5naW5l LCB3YWl0KTsKPiAtCXNwaW5fdW5sb2NrX2lycSgmYi0+cmJfbG9jayk7Cj4gLQlpZiAoYXJtZWQp Cj4gLQkJcmV0dXJuIGFybWVkOwo+IC0KPiAtCS8qIE1ha2UgdGhlIGNhbGxlciByZWNoZWNrIGlm IGl0cyByZXF1ZXN0IGhhcyBhbHJlYWR5IHN0YXJ0ZWQuICovCj4gLQlyZXR1cm4gaW50ZWxfZW5n aW5lX2hhc19zdGFydGVkKGVuZ2luZSwgd2FpdC0+c2Vxbm8pOwo+IC19Cj4gLQo+IC1zdGF0aWMg aW5saW5lIGJvb2wgY2hhaW5fd2FrZXVwKHN0cnVjdCByYl9ub2RlICpyYiwgaW50IHByaW9yaXR5 KQo+IC17Cj4gLQlyZXR1cm4gcmIgJiYgdG9fd2FpdChyYiktPnRzay0+cHJpbyA8PSBwcmlvcml0 eTsKPiAtfQo+ICsJY2xlYXJfYml0KGVuZ2luZS0+aWQsICZlbmdpbmUtPmk5MTUtPmdwdV9lcnJv ci5taXNzZWRfaXJxX3JpbmdzKTsKPiAgIAo+IC1zdGF0aWMgaW5saW5lIGludCB3YWtldXBfcHJp b3JpdHkoc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiLAo+IC0JCQkJICBzdHJ1Y3QgdGFza19z dHJ1Y3QgKnRzaykKPiAtewo+IC0JaWYgKHRzayA9PSBiLT5zaWduYWxlcikKPiAtCQlyZXR1cm4g SU5UX01JTjsKPiArCWlmIChiLT5pcnFfZW5hYmxlZCkKPiArCQlpcnFfZW5hYmxlKGVuZ2luZSk7 Cj4gICAJZWxzZQo+IC0JCXJldHVybiB0c2stPnByaW87Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lk IF9faW50ZWxfZW5naW5lX3JlbW92ZV93YWl0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSwKPiAtCQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdCkKPiAtewo+IC0Jc3RydWN0 IGludGVsX2JyZWFkY3J1bWJzICpiID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7Cj4gLQo+IC0JbG9j a2RlcF9hc3NlcnRfaGVsZCgmYi0+cmJfbG9jayk7Cj4gLQo+IC0JaWYgKFJCX0VNUFRZX05PREUo JndhaXQtPm5vZGUpKQo+IC0JCWdvdG8gb3V0Owo+IC0KPiAtCWlmIChiLT5pcnFfd2FpdCA9PSB3 YWl0KSB7Cj4gLQkJY29uc3QgaW50IHByaW9yaXR5ID0gd2FrZXVwX3ByaW9yaXR5KGIsIHdhaXQt PnRzayk7Cj4gLQkJc3RydWN0IHJiX25vZGUgKm5leHQ7Cj4gLQo+IC0JCS8qIFdlIGFyZSB0aGUg Y3VycmVudCBib3R0b20taGFsZi4gRmluZCB0aGUgbmV4dCBjYW5kaWRhdGUsCj4gLQkJICogdGhl IGZpcnN0IHdhaXRlciBpbiB0aGUgcXVldWUgb24gdGhlIHJlbWFpbmluZyBvbGRlc3QKPiAtCQkg KiByZXF1ZXN0LiBBcyBtdWx0aXBsZSBzZXFub3MgbWF5IGNvbXBsZXRlIGluIHRoZSB0aW1lIGl0 Cj4gLQkJICogdGFrZXMgdXMgdG8gd2FrZSB1cCBhbmQgZmluZCB0aGUgbmV4dCB3YWl0ZXIsIHdl IGhhdmUgdG8KPiAtCQkgKiB3YWtlIHVwIHRoYXQgd2FpdGVyIGZvciBpdCB0byBwZXJmb3JtIGl0 cyBvd24gY29oZXJlbnQKPiAtCQkgKiBjb21wbGV0aW9uIGNoZWNrLgo+IC0JCSAqLwo+IC0JCW5l eHQgPSByYl9uZXh0KCZ3YWl0LT5ub2RlKTsKPiAtCQlpZiAoY2hhaW5fd2FrZXVwKG5leHQsIHBy aW9yaXR5KSkgewo+IC0JCQkvKiBJZiB0aGUgbmV4dCB3YWl0ZXIgaXMgYWxyZWFkeSBjb21wbGV0 ZSwKPiAtCQkJICogd2FrZSBpdCB1cCBhbmQgY29udGludWUgb250byB0aGUgbmV4dCB3YWl0ZXIu IFNvCj4gLQkJCSAqIGlmIGhhdmUgYSBzbWFsbCBoZXJkLCB0aGV5IHdpbGwgd2FrZSB1cCBpbiBw YXJhbGxlbAo+IC0JCQkgKiByYXRoZXIgdGhhbiBzZXF1ZW50aWFsbHksIHdoaWNoIHNob3VsZCBy ZWR1Y2UKPiAtCQkJICogdGhlIG92ZXJhbGwgbGF0ZW5jeSBpbiB3YWtpbmcgYWxsIHRoZSBjb21w bGV0ZWQKPiAtCQkJICogY2xpZW50cy4KPiAtCQkJICoKPiAtCQkJICogSG93ZXZlciwgd2FraW5n IHVwIGEgY2hhaW4gYWRkcyBleHRyYSBsYXRlbmN5IHRvCj4gLQkJCSAqIHRoZSBmaXJzdF93YWl0 ZXIuIFRoaXMgaXMgdW5kZXNpcmFibGUgaWYgdGhhdAo+IC0JCQkgKiB3YWl0ZXIgaXMgYSBoaWdo IHByaW9yaXR5IHRhc2suCj4gLQkJCSAqLwo+IC0JCQl1MzIgc2Vxbm8gPSBpbnRlbF9lbmdpbmVf Z2V0X3NlcW5vKGVuZ2luZSk7Cj4gLQo+IC0JCQl3aGlsZSAoaTkxNV9zZXFub19wYXNzZWQoc2Vx bm8sIHRvX3dhaXQobmV4dCktPnNlcW5vKSkgewo+IC0JCQkJc3RydWN0IHJiX25vZGUgKm4gPSBy Yl9uZXh0KG5leHQpOwo+IC0KPiAtCQkJCV9faW50ZWxfYnJlYWRjcnVtYnNfZmluaXNoKGIsIHRv X3dhaXQobmV4dCkpOwo+IC0JCQkJbmV4dCA9IG47Cj4gLQkJCQlpZiAoIWNoYWluX3dha2V1cChu ZXh0LCBwcmlvcml0eSkpCj4gLQkJCQkJYnJlYWs7Cj4gLQkJCX0KPiAtCQl9Cj4gLQo+IC0JCV9f aW50ZWxfYnJlYWRjcnVtYnNfbmV4dChlbmdpbmUsIG5leHQpOwo+IC0JfSBlbHNlIHsKPiAtCQlH RU1fQlVHX09OKHJiX2ZpcnN0KCZiLT53YWl0ZXJzKSA9PSAmd2FpdC0+bm9kZSk7Cj4gLQl9Cj4g LQo+IC0JR0VNX0JVR19PTihSQl9FTVBUWV9OT0RFKCZ3YWl0LT5ub2RlKSk7Cj4gLQlyYl9lcmFz ZSgmd2FpdC0+bm9kZSwgJmItPndhaXRlcnMpOwo+IC0JUkJfQ0xFQVJfTk9ERSgmd2FpdC0+bm9k ZSk7Cj4gKwkJaXJxX2Rpc2FibGUoZW5naW5lKTsKPiAgIAo+IC1vdXQ6Cj4gLQlHRU1fQlVHX09O KGItPmlycV93YWl0ID09IHdhaXQpOwo+IC0JR0VNX0JVR19PTihyYl9maXJzdCgmYi0+d2FpdGVy cykgIT0KPiAtCQkgICAoYi0+aXJxX3dhaXQgPyAmYi0+aXJxX3dhaXQtPm5vZGUgOiBOVUxMKSk7 Cj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiLT5pcnFfbG9jaywgZmxhZ3MpOwo+ICAgfQo+ ICAgCj4gLXZvaWQgaW50ZWxfZW5naW5lX3JlbW92ZV93YWl0KHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSwKPiAtCQkJICAgICAgc3RydWN0IGludGVsX3dhaXQgKndhaXQpCj4gK3ZvaWQg aW50ZWxfZW5naW5lX2ZpbmlfYnJlYWRjcnVtYnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQo+ICAgewo+IC0Jc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiID0gJmVuZ2luZS0+YnJl YWRjcnVtYnM7Cj4gLQo+IC0JLyogUXVpY2sgY2hlY2sgdG8gc2VlIGlmIHRoaXMgd2FpdGVyIHdh cyBhbHJlYWR5IGRlY291cGxlZCBmcm9tCj4gLQkgKiB0aGUgdHJlZSBieSB0aGUgYm90dG9tLWhh bGYgdG8gYXZvaWQgY29udGVudGlvbiBvbiB0aGUgc3BpbmxvY2sKPiAtCSAqIGJ5IHRoZSBoZXJk Lgo+IC0JICovCj4gLQlpZiAoUkJfRU1QVFlfTk9ERSgmd2FpdC0+bm9kZSkpIHsKPiAtCQlHRU1f QlVHX09OKFJFQURfT05DRShiLT5pcnFfd2FpdCkgPT0gd2FpdCk7Cj4gLQkJcmV0dXJuOwo+IC0J fQo+IC0KPiAtCXNwaW5fbG9ja19pcnEoJmItPnJiX2xvY2spOwo+IC0JX19pbnRlbF9lbmdpbmVf cmVtb3ZlX3dhaXQoZW5naW5lLCB3YWl0KTsKPiAtCXNwaW5fdW5sb2NrX2lycSgmYi0+cmJfbG9j ayk7Cj4gKwljYW5jZWxfZmFrZV9pcnEoZW5naW5lKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgdm9p ZCBzaWduYWxlcl9zZXRfcnRwcmlvcml0eSh2b2lkKQo+ICtib29sIGk5MTVfcmVxdWVzdF9lbmFi bGVfYnJlYWRjcnVtYihzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiAgIHsKPiAtCSBzdHJ1Y3Qg c2NoZWRfcGFyYW0gcGFyYW0gPSB7IC5zY2hlZF9wcmlvcml0eSA9IDEgfTsKPiAtCj4gLQkgc2No ZWRfc2V0c2NoZWR1bGVyX25vY2hlY2soY3VycmVudCwgU0NIRURfRklGTywgJnBhcmFtKTsKPiAt fQo+ICsJc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiID0gJnJxLT5lbmdpbmUtPmJyZWFkY3J1 bWJzOwo+ICAgCj4gLXN0YXRpYyBpbnQgaW50ZWxfYnJlYWRjcnVtYnNfc2lnbmFsZXIodm9pZCAq YXJnKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSBhcmc7Cj4gLQlz dHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKPiAtCXN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCAqbjsKPiArCUdFTV9CVUdfT04odGVzdF9iaXQoSTkxNV9G RU5DRV9GTEFHX1NJR05BTCwgJnJxLT5mZW5jZS5mbGFncykpOwo+ICAgCj4gLQkvKiBJbnN0YWxs IG91cnNlbHZlcyB3aXRoIGhpZ2ggcHJpb3JpdHkgdG8gcmVkdWNlIHNpZ25hbGxpbmcgbGF0ZW5j eSAqLwo+IC0Jc2lnbmFsZXJfc2V0X3J0cHJpb3JpdHkoKTsKPiArCWlmICghdGVzdF9iaXQoSTkx NV9GRU5DRV9GTEFHX0FDVElWRSwgJnJxLT5mZW5jZS5mbGFncykpCj4gKwkJcmV0dXJuIHRydWU7 Cj4gICAKPiAtCWRvIHsKPiAtCQlib29sIGRvX3NjaGVkdWxlID0gdHJ1ZTsKPiAtCQlMSVNUX0hF QUQobGlzdCk7Cj4gLQkJdTMyIHNlcW5vOwo+ICsJc3Bpbl9sb2NrKCZiLT5pcnFfbG9jayk7Cj4g KwlpZiAodGVzdF9iaXQoSTkxNV9GRU5DRV9GTEFHX0FDVElWRSwgJnJxLT5mZW5jZS5mbGFncykg JiYKPiArCSAgICAhX19yZXF1ZXN0X2NvbXBsZXRlZChycSkpIHsKPiArCQlzdHJ1Y3QgaW50ZWxf Y29udGV4dCAqY2UgPSBycS0+aHdfY29udGV4dDsKPiArCQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7 Cj4gICAKPiAtCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwo+IC0JCWlm IChsaXN0X2VtcHR5KCZiLT5zaWduYWxzKSkKPiAtCQkJZ290byBzbGVlcDsKPiArCQlfX2ludGVs X2JyZWFkY3J1bWJzX2FybV9pcnEoYik7Cj4gICAKPiAgIAkJLyoKPiAtCQkgKiBXZSBhcmUgZWl0 aGVyIHdva2VuIHVwIGJ5IHRoZSBpbnRlcnJ1cHQgYm90dG9tLWhhbGYsCj4gLQkJICogb3IgYnkg YSBjbGllbnQgYWRkaW5nIGEgbmV3IHNpZ25hbGxlci4gSW4gYm90aCBjYXNlcywKPiAtCQkgKiB0 aGUgR1BVIHNlcW5vIG1heSBoYXZlIGFkdmFuY2VkIGJleW9uZCBvdXIgb2xkZXN0IHNpZ25hbC4K PiAtCQkgKiBJZiBpdCBoYXMsIHByb3BhZ2F0ZSB0aGUgc2lnbmFsLCByZW1vdmUgdGhlIHdhaXRl ciBhbmQKPiAtCQkgKiBjaGVjayBhZ2FpbiB3aXRoIHRoZSBuZXh0IG9sZGVzdCBzaWduYWwuIE90 aGVyd2lzZSB3ZQo+IC0JCSAqIG5lZWQgdG8gd2FpdCBmb3IgYSBuZXcgaW50ZXJydXB0IGZyb20g dGhlIEdQVSBvciBmb3IKPiAtCQkgKiBhIG5ldyBjbGllbnQuCj4gKwkJICogV2Uga2VlcCB0aGUg c2Vxbm8gaW4gcmV0aXJlbWVudCBvcmRlciwgc28gd2UgY2FuIGJyZWFrCj4gKwkJICogaW5zaWRl IGludGVsX2VuZ2luZV9icmVhZGNydW1ic19pcnEgYXMgc29vbiBhcyB3ZSd2ZSBwYXNzZWQKPiAr CQkgKiB0aGUgbGFzdCBjb21wbGV0ZWQgcmVxdWVzdCAob3Igc2VlbiBhIHJlcXVlc3QgdGhhdCBo YXNuJ3QKPiArCQkgKiBldmVudCBzdGFydGVkKS4gV2UgY291bGQgaXRlcmF0ZSB0aGUgdGltZWxp bmUtPnJlcXVlc3RzIGxpc3QsCj4gKwkJICogYnV0IGtlZXBpbmcgYSBzZXBhcmF0ZSBzaWduYWxl cnNfbGlzdCBoYXMgdGhlIGFkdmFudGFnZSBvZgo+ICsJCSAqIGhvcGVmdWxseSBiZWluZyBtdWNo IHNtYWxsZXIgdGhhbiB0aGUgZnVsbCBsaXN0IGFuZCBzbwo+ICsJCSAqIHByb3ZpZGVzIGZhc3Rl ciBpdGVyYXRpb24gYW5kIGRldGVjdGlvbiB3aGVuIHRoZXJlIGFyZSBubwo+ICsJCSAqIG1vcmUg aW50ZXJydXB0cyByZXF1aXJlZCBmb3IgdGhpcyBjb250ZXh0Lgo+ICsJCSAqCj4gKwkJICogV2Ug dHlwaWNhbGx5IGV4cGVjdCB0byBhZGQgbmV3IHNpZ25hbGVycyBpbiBvcmRlciwgc28gd2UKPiAr CQkgKiBzdGFydCBsb29raW5nIGZvciBvdXIgaW5zZXJ0aW9uIHBvaW50IGZyb20gdGhlIHRhaWwg b2YKPiArCQkgKiB0aGUgbGlzdC4KPiAgIAkJICovCj4gLQkJc2Vxbm8gPSBpbnRlbF9lbmdpbmVf Z2V0X3NlcW5vKGVuZ2luZSk7Cj4gLQo+IC0JCXNwaW5fbG9ja19pcnEoJmItPnJiX2xvY2spOwo+ IC0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShycSwgbiwgJmItPnNpZ25hbHMsIHNpZ25hbGlu Zy5saW5rKSB7Cj4gLQkJCXUzMiB0aGlzID0gcnEtPnNpZ25hbGluZy53YWl0LnNlcW5vOwo+ICsJ CWxpc3RfZm9yX2VhY2hfcHJldihwb3MsICZjZS0+c2lnbmFscykgewo+ICsJCQlzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICppdCA9Cj4gKwkJCQlsaXN0X2VudHJ5KHBvcywgdHlwZW9mKCppdCksIHNpZ25h bF9saW5rKTsKPiAgIAo+IC0JCQlHRU1fQlVHX09OKCFycS0+c2lnbmFsaW5nLndhaXQuc2Vxbm8p Owo+IC0KPiAtCQkJaWYgKCFpOTE1X3NlcW5vX3Bhc3NlZChzZXFubywgdGhpcykpCj4gKwkJCWlm IChpOTE1X3NlcW5vX3Bhc3NlZChycS0+ZmVuY2Uuc2Vxbm8sIGl0LT5mZW5jZS5zZXFubykpCj4g ICAJCQkJYnJlYWs7Cj4gLQo+IC0JCQlpZiAobGlrZWx5KHRoaXMgPT0gaTkxNV9yZXF1ZXN0X2ds b2JhbF9zZXFubyhycSkpKSB7Cj4gLQkJCQlfX2ludGVsX2VuZ2luZV9yZW1vdmVfd2FpdChlbmdp bmUsCj4gLQkJCQkJCQkgICAmcnEtPnNpZ25hbGluZy53YWl0KTsKPiAtCj4gLQkJCQlycS0+c2ln bmFsaW5nLndhaXQuc2Vxbm8gPSAwOwo+IC0JCQkJX19saXN0X2RlbF9lbnRyeSgmcnEtPnNpZ25h bGluZy5saW5rKTsKPiAtCj4gLQkJCQlpZiAoIWk5MTVfcmVxdWVzdF9zaWduYWxlZChycSkpIHsK PiAtCQkJCQlsaXN0X2FkZF90YWlsKCZycS0+c2lnbmFsaW5nLmxpbmssCj4gLQkJCQkJCSAgICAg ICZsaXN0KTsKPiAtCQkJCQlpOTE1X3JlcXVlc3RfZ2V0KHJxKTsKPiAtCQkJCX0KPiAtCQkJfQo+ ICAgCQl9Cj4gLQkJc3Bpbl91bmxvY2tfaXJxKCZiLT5yYl9sb2NrKTsKPiAtCj4gLQkJaWYgKCFs aXN0X2VtcHR5KCZsaXN0KSkgewo+IC0JCQlsb2NhbF9iaF9kaXNhYmxlKCk7Cj4gLQkJCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShycSwgbiwgJmxpc3QsIHNpZ25hbGluZy5saW5rKSB7Cj4gLQkJ CQlkbWFfZmVuY2Vfc2lnbmFsKCZycS0+ZmVuY2UpOwo+IC0JCQkJR0VNX0JVR19PTighaTkxNV9y ZXF1ZXN0X2NvbXBsZXRlZChycSkpOwo+IC0JCQkJaTkxNV9yZXF1ZXN0X3B1dChycSk7Cj4gLQkJ CX0KPiAtCQkJbG9jYWxfYmhfZW5hYmxlKCk7IC8qIGtpY2sgc3RhcnQgdGhlIHRhc2tsZXRzICov Cj4gLQo+IC0JCQkvKgo+IC0JCQkgKiBJZiB0aGUgZW5naW5lIGlzIHNhdHVyYXRlZCB3ZSBtYXkg YmUgY29udGludWFsbHkKPiAtCQkJICogcHJvY2Vzc2luZyBjb21wbGV0ZWQgcmVxdWVzdHMuIFRo aXMgYW5nZXJzIHRoZQo+IC0JCQkgKiBOTUkgd2F0Y2hkb2cgaWYgd2UgbmV2ZXIgbGV0IGFueXRo aW5nIGVsc2UKPiAtCQkJICogaGF2ZSBhY2Nlc3MgdG8gdGhlIENQVS4gTGV0J3MgcHJldGVuZCB0 byBiZSBuaWNlCj4gLQkJCSAqIGFuZCByZWxpbnF1aXNoIHRoZSBDUFUgaWYgd2UgYnVybiB0aHJv dWdoIHRoZQo+IC0JCQkgKiBlbnRpcmUgUlQgdGltZXNsaWNlIQo+IC0JCQkgKi8KPiAtCQkJZG9f c2NoZWR1bGUgPSBuZWVkX3Jlc2NoZWQoKTsKPiAtCQl9Cj4gLQo+IC0JCWlmICh1bmxpa2VseShk b19zY2hlZHVsZSkpIHsKPiAtc2xlZXA6Cj4gLQkJCWlmIChrdGhyZWFkX3Nob3VsZF9wYXJrKCkp Cj4gLQkJCQlrdGhyZWFkX3BhcmttZSgpOwo+IC0KPiAtCQkJaWYgKHVubGlrZWx5KGt0aHJlYWRf c2hvdWxkX3N0b3AoKSkpCj4gLQkJCQlicmVhazsKPiAtCj4gLQkJCXNjaGVkdWxlKCk7Cj4gLQkJ fQo+IC0JfSB3aGlsZSAoMSk7Cj4gLQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7 Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiArCQlsaXN0X2FkZCgmcnEtPnNpZ25hbF9saW5rLCBw b3MpOwo+ICsJCWlmIChwb3MgPT0gJmNlLT5zaWduYWxzKSAvKiBjYXRjaCB0cmFuc2l0aW9ucyBm cm9tIGVtcHR5IGxpc3QgKi8KPiArCQkJbGlzdF9tb3ZlX3RhaWwoJmNlLT5zaWduYWxfbGluaywg JmItPnNpZ25hbGVycyk7Cj4gICAKPiAtc3RhdGljIHZvaWQgaW5zZXJ0X3NpZ25hbChzdHJ1Y3Qg aW50ZWxfYnJlYWRjcnVtYnMgKmIsCj4gLQkJCSAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVz dCwKPiAtCQkJICBjb25zdCB1MzIgc2Vxbm8pCj4gLXsKPiAtCXN0cnVjdCBpOTE1X3JlcXVlc3Qg Kml0ZXI7Cj4gLQo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmYi0+cmJfbG9jayk7Cj4gLQo+IC0J LyoKPiAtCSAqIEEgcmVhc29uYWJsZSBhc3N1bXB0aW9uIGlzIHRoYXQgd2UgYXJlIGNhbGxlZCB0 byBhZGQgc2lnbmFscwo+IC0JICogaW4gc2VxdWVuY2UsIGFzIHRoZSByZXF1ZXN0cyBhcmUgc3Vi bWl0dGVkIGZvciBleGVjdXRpb24gYW5kCj4gLQkgKiBhc3NpZ25lZCBhIGdsb2JhbF9zZXFuby4g VGhpcyB3aWxsIGJlIHRoZSBjYXNlIGZvciB0aGUgbWFqb3JpdHkKPiAtCSAqIG9mIGludGVybmFs bHkgZ2VuZXJhdGVkIHNpZ25hbHMgKGludGVyLWVuZ2luZSBzaWduYWxpbmcpLgo+IC0JICoKPiAt CSAqIE91dCBvZiBvcmRlciB3YWl0ZXJzIHRyaWdnZXJpbmcgcmFuZG9tIHNpZ25hbGluZyBlbmFi bGluZyB3aWxsCj4gLQkgKiBiZSBtb3JlIHByb2JsZW1hdGljLCBidXQgaG9wZWZ1bGx5IHJhcmUg ZW5vdWdoIGFuZCB0aGUgbGlzdAo+IC0JICogc21hbGwgZW5vdWdoIHRoYXQgdGhlIE8oTikgaW5z ZXJ0aW9uIHNvcnQgaXMgbm90IGFuIGlzc3VlLgo+IC0JICovCj4gLQo+IC0JbGlzdF9mb3JfZWFj aF9lbnRyeV9yZXZlcnNlKGl0ZXIsICZiLT5zaWduYWxzLCBzaWduYWxpbmcubGluaykKPiAtCQlp ZiAoaTkxNV9zZXFub19wYXNzZWQoc2Vxbm8sIGl0ZXItPnNpZ25hbGluZy53YWl0LnNlcW5vKSkK PiAtCQkJYnJlYWs7Cj4gLQo+IC0JbGlzdF9hZGQoJnJlcXVlc3QtPnNpZ25hbGluZy5saW5rLCAm aXRlci0+c2lnbmFsaW5nLmxpbmspOwo+IC19Cj4gLQo+IC1ib29sIGludGVsX2VuZ2luZV9lbmFi bGVfc2lnbmFsaW5nKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsIGJvb2wgd2FrZXVwKQo+ IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSByZXF1ZXN0LT5lbmdpbmU7 Cj4gLQlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsK PiAtCXN0cnVjdCBpbnRlbF93YWl0ICp3YWl0ID0gJnJlcXVlc3QtPnNpZ25hbGluZy53YWl0Owo+ IC0JdTMyIHNlcW5vOwo+IC0KPiAtCS8qCj4gLQkgKiBOb3RlIHRoYXQgd2UgbWF5IGJlIGNhbGxl ZCBmcm9tIGFuIGludGVycnVwdCBoYW5kbGVyIG9uIGFub3RoZXIKPiAtCSAqIGRldmljZSAoZS5n LiBub3V2ZWF1IHNpZ25hbGluZyBhIGZlbmNlIGNvbXBsZXRpb24gY2F1c2luZyB1cwo+IC0JICog dG8gc3VibWl0IGEgcmVxdWVzdCwgYW5kIHNvIGVuYWJsZSBzaWduYWxpbmcpLiBBcyBzdWNoLAo+ IC0JICogd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBhbGwgb3RoZXIgdXNlcnMgb2YgYi0+cmJf bG9jayBwcm90ZWN0Cj4gLQkgKiBhZ2FpbnN0IGludGVycnVwdHMsIGkuZS4gdXNlIHNwaW5fbG9j a19pcnFzYXZlLgo+IC0JICovCj4gLQo+IC0JLyogbG9ja2VkIGJ5IGRtYV9mZW5jZV9lbmFibGVf c3dfc2lnbmFsaW5nKCkgKGlycXNhZmUgZmVuY2UtPmxvY2spICovCj4gLQlHRU1fQlVHX09OKCFp cnFzX2Rpc2FibGVkKCkpOwo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmcmVxdWVzdC0+bG9jayk7 Cj4gLQo+IC0Jc2Vxbm8gPSBpOTE1X3JlcXVlc3RfZ2xvYmFsX3NlcW5vKHJlcXVlc3QpOwo+IC0J aWYgKCFzZXFubykgLyogd2lsbCBiZSBlbmFibGVkIGxhdGVyIHVwb24gZXhlY3V0aW9uICovCj4g LQkJcmV0dXJuIHRydWU7Cj4gLQo+IC0JR0VNX0JVR19PTih3YWl0LT5zZXFubyk7Cj4gLQl3YWl0 LT50c2sgPSBiLT5zaWduYWxlcjsKPiAtCXdhaXQtPnJlcXVlc3QgPSByZXF1ZXN0Owo+IC0Jd2Fp dC0+c2Vxbm8gPSBzZXFubzsKPiAtCj4gLQkvKgo+IC0JICogQWRkIG91cnNlbHZlcyBpbnRvIHRo ZSBsaXN0IG9mIHdhaXRlcnMsIGJ1dCByZWdpc3RlcmluZyBvdXIKPiAtCSAqIGJvdHRvbS1oYWxm IGFzIHRoZSBzaWduYWxsZXIgdGhyZWFkLiBBcyBwZXIgdXN1YWwsIG9ubHkgdGhlIG9sZGVzdAo+ IC0JICogd2FpdGVyIChub3QganVzdCBzaWduYWxsZXIpIGlzIHRhc2tlZCBhcyB0aGUgYm90dG9t LWhhbGYgd2FraW5nCj4gLQkgKiB1cCBhbGwgY29tcGxldGVkIHdhaXRlcnMgYWZ0ZXIgdGhlIHVz ZXIgaW50ZXJydXB0Lgo+IC0JICoKPiAtCSAqIElmIHdlIGFyZSB0aGUgb2xkZXN0IHdhaXRlciwg ZW5hYmxlIHRoZSBpcnEgKGFmdGVyIHdoaWNoIHdlCj4gLQkgKiBtdXN0IGRvdWJsZSBjaGVjayB0 aGF0IHRoZSBzZXFubyBkaWQgbm90IGNvbXBsZXRlKS4KPiAtCSAqLwo+IC0Jc3Bpbl9sb2NrKCZi LT5yYl9sb2NrKTsKPiAtCWluc2VydF9zaWduYWwoYiwgcmVxdWVzdCwgc2Vxbm8pOwo+IC0Jd2Fr ZXVwICY9IF9faW50ZWxfZW5naW5lX2FkZF93YWl0KGVuZ2luZSwgd2FpdCk7Cj4gLQlzcGluX3Vu bG9jaygmYi0+cmJfbG9jayk7Cj4gLQo+IC0JaWYgKHdha2V1cCkgewo+IC0JCXdha2VfdXBfcHJv Y2VzcyhiLT5zaWduYWxlcik7Cj4gLQkJcmV0dXJuICFpbnRlbF93YWl0X2NvbXBsZXRlKHdhaXQp Owo+ICsJCXNldF9iaXQoSTkxNV9GRU5DRV9GTEFHX1NJR05BTCwgJnJxLT5mZW5jZS5mbGFncyk7 Cj4gICAJfQo+ICsJc3Bpbl91bmxvY2soJmItPmlycV9sb2NrKTsKPiAgIAo+IC0JcmV0dXJuIHRy dWU7Cj4gKwlyZXR1cm4gIV9fcmVxdWVzdF9jb21wbGV0ZWQocnEpOwo+ICAgfQo+ICAgCj4gLXZv aWQgaW50ZWxfZW5naW5lX2NhbmNlbF9zaWduYWxpbmcoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVx dWVzdCkKPiArdm9pZCBpOTE1X3JlcXVlc3RfY2FuY2VsX2JyZWFkY3J1bWIoc3RydWN0IGk5MTVf cmVxdWVzdCAqcnEpCj4gICB7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSBy ZXF1ZXN0LT5lbmdpbmU7Cj4gLQlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5l LT5icmVhZGNydW1iczsKPiArCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZycS0+ZW5n aW5lLT5icmVhZGNydW1iczsKPiAgIAo+IC0JR0VNX0JVR19PTighaXJxc19kaXNhYmxlZCgpKTsK PiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnJlcXVlc3QtPmxvY2spOwo+IC0KPiAtCWlmICghUkVB RF9PTkNFKHJlcXVlc3QtPnNpZ25hbGluZy53YWl0LnNlcW5vKSkKPiArCWlmICghdGVzdF9iaXQo STkxNV9GRU5DRV9GTEFHX1NJR05BTCwgJnJxLT5mZW5jZS5mbGFncykpCj4gICAJCXJldHVybjsK PiAgIAo+IC0Jc3Bpbl9sb2NrKCZiLT5yYl9sb2NrKTsKPiAtCV9faW50ZWxfZW5naW5lX3JlbW92 ZV93YWl0KGVuZ2luZSwgJnJlcXVlc3QtPnNpZ25hbGluZy53YWl0KTsKPiAtCWlmIChmZXRjaF9h bmRfemVybygmcmVxdWVzdC0+c2lnbmFsaW5nLndhaXQuc2Vxbm8pKQo+IC0JCV9fbGlzdF9kZWxf ZW50cnkoJnJlcXVlc3QtPnNpZ25hbGluZy5saW5rKTsKPiAtCXNwaW5fdW5sb2NrKCZiLT5yYl9s b2NrKTsKPiAtfQo+IC0KPiAtaW50IGludGVsX2VuZ2luZV9pbml0X2JyZWFkY3J1bWJzKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAtewo+IC0Jc3RydWN0IGludGVsX2JyZWFkY3J1 bWJzICpiID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7Cj4gLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRz azsKPiAtCj4gLQlzcGluX2xvY2tfaW5pdCgmYi0+cmJfbG9jayk7Cj4gLQlzcGluX2xvY2tfaW5p dCgmYi0+aXJxX2xvY2spOwo+IC0KPiAtCXRpbWVyX3NldHVwKCZiLT5mYWtlX2lycSwgaW50ZWxf YnJlYWRjcnVtYnNfZmFrZV9pcnEsIDApOwo+IC0JdGltZXJfc2V0dXAoJmItPmhhbmdjaGVjaywg aW50ZWxfYnJlYWRjcnVtYnNfaGFuZ2NoZWNrLCAwKTsKPiAtCj4gLQlJTklUX0xJU1RfSEVBRCgm Yi0+c2lnbmFscyk7Cj4gLQo+IC0JLyogU3Bhd24gYSB0aHJlYWQgdG8gcHJvdmlkZSBhIGNvbW1v biBib3R0b20taGFsZiBmb3IgYWxsIHNpZ25hbHMuCj4gLQkgKiBBcyB0aGlzIGlzIGFuIGFzeW5j aHJvbm91cyBpbnRlcmZhY2Ugd2UgY2Fubm90IHN0ZWFsIHRoZSBjdXJyZW50Cj4gLQkgKiB0YXNr IGZvciBoYW5kbGluZyB0aGUgYm90dG9tLWhhbGYgdG8gdGhlIHVzZXIgaW50ZXJydXB0LCB0aGVy ZWZvcmUKPiAtCSAqIHdlIGNyZWF0ZSBhIHRocmVhZCB0byBkbyB0aGUgY29oZXJlbnQgc2Vxbm8g ZGFuY2UgYWZ0ZXIgdGhlCj4gLQkgKiBpbnRlcnJ1cHQgYW5kIHRoZW4gc2lnbmFsIHRoZSB3YWl0 cXVldWUgKHZpYSB0aGUgZG1hLWJ1Zi9mZW5jZSkuCj4gLQkgKi8KPiAtCXRzayA9IGt0aHJlYWRf cnVuKGludGVsX2JyZWFkY3J1bWJzX3NpZ25hbGVyLCBlbmdpbmUsCj4gLQkJCSAgImk5MTUvc2ln bmFsOiVkIiwgZW5naW5lLT5pZCk7Cj4gLQlpZiAoSVNfRVJSKHRzaykpCj4gLQkJcmV0dXJuIFBU Ul9FUlIodHNrKTsKPiAtCj4gLQliLT5zaWduYWxlciA9IHRzazsKPiAtCj4gLQlyZXR1cm4gMDsK PiAtfQo+ICsJc3Bpbl9sb2NrKCZiLT5pcnFfbG9jayk7Cj4gKwlpZiAodGVzdF9iaXQoSTkxNV9G RU5DRV9GTEFHX1NJR05BTCwgJnJxLT5mZW5jZS5mbGFncykpIHsKPiArCQlzdHJ1Y3QgaW50ZWxf Y29udGV4dCAqY2UgPSBycS0+aHdfY29udGV4dDsKPiAgIAo+IC1zdGF0aWMgdm9pZCBjYW5jZWxf ZmFrZV9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+IC17Cj4gLQlzdHJ1Y3Qg aW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKPiArCQlsaXN0X2Rl bCgmcnEtPnNpZ25hbF9saW5rKTsKPiArCQlpZiAobGlzdF9lbXB0eSgmY2UtPnNpZ25hbHMpKQo+ ICsJCQlsaXN0X2RlbF9pbml0KCZjZS0+c2lnbmFsX2xpbmspOwo+ICAgCj4gLQlkZWxfdGltZXJf c3luYygmYi0+ZmFrZV9pcnEpOyAvKiBtYXkgcXVldWUgYi0+aGFuZ2NoZWNrICovCj4gLQlkZWxf dGltZXJfc3luYygmYi0+aGFuZ2NoZWNrKTsKPiAtCWNsZWFyX2JpdChlbmdpbmUtPmlkLCAmZW5n aW5lLT5pOTE1LT5ncHVfZXJyb3IubWlzc2VkX2lycV9yaW5ncyk7Cj4gKwkJY2xlYXJfYml0KEk5 MTVfRkVOQ0VfRkxBR19TSUdOQUwsICZycS0+ZmVuY2UuZmxhZ3MpOwo+ICsJfQo+ICsJc3Bpbl91 bmxvY2soJmItPmlycV9sb2NrKTsKPiAgIH0KPiAgIAo+IC12b2lkIGludGVsX2VuZ2luZV9yZXNl dF9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3ZvaWQgaW50 ZWxfZW5naW5lX3ByaW50X2JyZWFkY3J1bWJzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSwKPiArCQkJCSAgICBzdHJ1Y3QgZHJtX3ByaW50ZXIgKnApCj4gICB7Cj4gICAJc3RydWN0IGlu dGVsX2JyZWFkY3J1bWJzICpiID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7Cj4gLQl1bnNpZ25lZCBs b25nIGZsYWdzOwo+ICsJc3RydWN0IGludGVsX2NvbnRleHQgKmNlOwo+ICsJc3RydWN0IGk5MTVf cmVxdWVzdCAqcnE7Cj4gICAKPiAtCXNwaW5fbG9ja19pcnFzYXZlKCZiLT5pcnFfbG9jaywgZmxh Z3MpOwo+IC0KPiAtCS8qCj4gLQkgKiBMZWF2ZSB0aGUgZmFrZV9pcnEgdGltZXIgZW5hYmxlZCAo aWYgaXQgaXMgcnVubmluZyksIGJ1dCBjbGVhciB0aGUKPiAtCSAqIGJpdCBzbyB0aGF0IGl0IHR1 cm5zIGl0c2VsZiBvZmYgb24gaXRzIG5leHQgd2FrZSB1cCBhbmQgZ29lcyBiYWNrCj4gLQkgKiB0 byB0aGUgbG9uZyBoYW5nY2hlY2sgaW50ZXJ2YWwgaWYgc3RpbGwgcmVxdWlyZWQuCj4gLQkgKi8K PiAtCWNsZWFyX2JpdChlbmdpbmUtPmlkLCAmZW5naW5lLT5pOTE1LT5ncHVfZXJyb3IubWlzc2Vk X2lycV9yaW5ncyk7Cj4gLQo+IC0JaWYgKGItPmlycV9lbmFibGVkKQo+IC0JCWlycV9lbmFibGUo ZW5naW5lKTsKPiAtCWVsc2UKPiAtCQlpcnFfZGlzYWJsZShlbmdpbmUpOwo+IC0KPiAtCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmItPmlycV9sb2NrLCBmbGFncyk7Cj4gLX0KPiAtCj4gLXZvaWQg aW50ZWxfZW5naW5lX2ZpbmlfYnJlYWRjcnVtYnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVh ZGNydW1iczsKPiArCWlmIChsaXN0X2VtcHR5KCZiLT5zaWduYWxlcnMpKQo+ICsJCXJldHVybjsK PiAgIAo+IC0JLyogVGhlIGVuZ2luZXMgc2hvdWxkIGJlIGlkbGUgYW5kIGFsbCByZXF1ZXN0cyBh Y2NvdW50ZWQgZm9yISAqLwo+IC0JV0FSTl9PTihSRUFEX09OQ0UoYi0+aXJxX3dhaXQpKTsKPiAt CVdBUk5fT04oIVJCX0VNUFRZX1JPT1QoJmItPndhaXRlcnMpKTsKPiAtCVdBUk5fT04oIWxpc3Rf ZW1wdHkoJmItPnNpZ25hbHMpKTsKPiArCWRybV9wcmludGYocCwgIlNpZ25hbHM6XG4iKTsKPiAg IAo+IC0JaWYgKCFJU19FUlJfT1JfTlVMTChiLT5zaWduYWxlcikpCj4gLQkJa3RocmVhZF9zdG9w KGItPnNpZ25hbGVyKTsKPiArCXNwaW5fbG9ja19pcnEoJmItPmlycV9sb2NrKTsKPiArCWxpc3Rf Zm9yX2VhY2hfZW50cnkoY2UsICZiLT5zaWduYWxlcnMsIHNpZ25hbF9saW5rKSB7Cj4gKwkJbGlz dF9mb3JfZWFjaF9lbnRyeShycSwgJmNlLT5zaWduYWxzLCBzaWduYWxfbGluaykgewo+ICsJCQlk cm1fcHJpbnRmKHAsICJcdFslbGx4OiVsbHglc10gQCAlZG1zXG4iLAo+ICsJCQkJICAgcnEtPmZl bmNlLmNvbnRleHQsIHJxLT5mZW5jZS5zZXFubywKPiArCQkJCSAgIGk5MTVfcmVxdWVzdF9jb21w bGV0ZWQocnEpID8gIiEiIDoKPiArCQkJCSAgIGk5MTVfcmVxdWVzdF9zdGFydGVkKHJxKSA/ICIq IiA6Cj4gKwkJCQkgICAiIiwKPiArCQkJCSAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHJx LT5lbWl0dGVkX2ppZmZpZXMpKTsKPiArCQl9Cj4gKwl9Cj4gKwlzcGluX3VubG9ja19pcnEoJmIt PmlycV9sb2NrKTsKPiAgIAo+IC0JY2FuY2VsX2Zha2VfaXJxKGVuZ2luZSk7Cj4gKwlpZiAodGVz dF9iaXQoZW5naW5lLT5pZCwgJmVuZ2luZS0+aTkxNS0+Z3B1X2Vycm9yLm1pc3NlZF9pcnFfcmlu Z3MpKQo+ICsJCWRybV9wcmludGYocCwgIkZha2UgaXJxIGFjdGl2ZVxuIik7Cj4gICB9Cj4gLQo+ IC0jaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVfU0VMRlRFU1QpCj4gLSNpbmNsdWRlICJz ZWxmdGVzdHMvaW50ZWxfYnJlYWRjcnVtYnMuYyIKPiAtI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZW5naW5lX2NzLmMKPiBpbmRleCBkMjVlNTEwYjdiMDguLmVlNDNjOTgyMjdiYiAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCj4gQEAgLTQ1OCwxMiAr NDU4LDYgQEAgaW50IGludGVsX2VuZ2luZXNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCj4gICB2b2lkIGludGVsX2VuZ2luZV93cml0ZV9nbG9iYWxfc2Vxbm8oc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgc2Vxbm8pCj4gICB7Cj4gICAJaW50ZWxfd3Jp dGVfc3RhdHVzX3BhZ2UoZW5naW5lLCBJOTE1X0dFTV9IV1NfSU5ERVgsIHNlcW5vKTsKPiAtCj4g LQkvKiBBZnRlciBtYW51YWxseSBhZHZhbmNpbmcgdGhlIHNlcW5vLCBmYWtlIHRoZSBpbnRlcnJ1 cHQgaW4gY2FzZQo+IC0JICogdGhlcmUgYXJlIGFueSB3YWl0ZXJzIGZvciB0aGF0IHNlcW5vLgo+ IC0JICovCj4gLQlpbnRlbF9lbmdpbmVfd2FrZXVwKGVuZ2luZSk7Cj4gLQo+ICAgCUdFTV9CVUdf T04oaW50ZWxfZW5naW5lX2dldF9zZXFubyhlbmdpbmUpICE9IHNlcW5vKTsKPiAgIH0KPiAgIAo+ IEBAIC02MDcsNiArNjAxLDcgQEAgaW50IGludGVsX2VuZ2luZV9zZXR1cF9jb21tb24oc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgCj4gICAJaTkxNV90aW1lbGluZV9zZXRfc3Vi Y2xhc3MoJmVuZ2luZS0+dGltZWxpbmUsIFRJTUVMSU5FX0VOR0lORSk7Cj4gICAKPiArCWludGVs X2VuZ2luZV9pbml0X2JyZWFkY3J1bWJzKGVuZ2luZSk7Cj4gICAJaW50ZWxfZW5naW5lX2luaXRf ZXhlY2xpc3QoZW5naW5lKTsKPiAgIAlpbnRlbF9lbmdpbmVfaW5pdF9oYW5nY2hlY2soZW5naW5l KTsKPiAgIAlpbnRlbF9lbmdpbmVfaW5pdF9iYXRjaF9wb29sKGVuZ2luZSk7Cj4gQEAgLTcxNywy MCArNzEyLDE0IEBAIGludCBpbnRlbF9lbmdpbmVfaW5pdF9jb21tb24oc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQo+ICAgCQl9Cj4gICAJfQo+ICAgCj4gLQlyZXQgPSBpbnRlbF9lbmdp bmVfaW5pdF9icmVhZGNydW1icyhlbmdpbmUpOwo+IC0JaWYgKHJldCkKPiAtCQlnb3RvIGVycl91 bnBpbl9wcmVlbXB0Owo+IC0KPiAgIAlyZXQgPSBtZWFzdXJlX2JyZWFkY3J1bWJfZHcoZW5naW5l KTsKPiAgIAlpZiAocmV0IDwgMCkKPiAtCQlnb3RvIGVycl9icmVhZGNydW1iczsKPiArCQlnb3Rv IGVycl91bnBpbl9wcmVlbXB0Owo+ICAgCj4gICAJZW5naW5lLT5lbWl0X2ZpbmlfYnJlYWRjcnVt Yl9kdyA9IHJldDsKPiAgIAo+ICAgCXJldHVybiAwOwo+ICAgCj4gLWVycl9icmVhZGNydW1iczoK PiAtCWludGVsX2VuZ2luZV9maW5pX2JyZWFkY3J1bWJzKGVuZ2luZSk7Cj4gICBlcnJfdW5waW5f cHJlZW1wdDoKPiAgIAlpZiAoaTkxNS0+cHJlZW1wdF9jb250ZXh0KQo+ICAgCQlfX2ludGVsX2Nv bnRleHRfdW5waW4oaTkxNS0+cHJlZW1wdF9jb250ZXh0LCBlbmdpbmUpOwo+IEBAIC0xMjk0LDEy ICsxMjgzLDE0IEBAIHN0YXRpYyB2b2lkIHByaW50X3JlcXVlc3Qoc3RydWN0IGRybV9wcmludGVy ICptLAo+ICAgCj4gICAJeCA9IHByaW50X3NjaGVkX2F0dHIocnEtPmk5MTUsICZycS0+c2NoZWQu YXR0ciwgYnVmLCB4LCBzaXplb2YoYnVmKSk7Cj4gICAKPiAtCWRybV9wcmludGYobSwgIiVzJXgl cyBbJWxseDolbGx4XSVzIEAgJWRtczogJXNcbiIsCj4gKwlkcm1fcHJpbnRmKG0sICIlcyV4JXMl cyBbJWxseDolbGx4XSVzIEAgJWRtczogJXNcbiIsCj4gICAJCSAgIHByZWZpeCwKPiAgIAkJICAg cnEtPmdsb2JhbF9zZXFubywKPiAgIAkJICAgaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChycSkgPyAi ISIgOgo+ICAgCQkgICBpOTE1X3JlcXVlc3Rfc3RhcnRlZChycSkgPyAiKiIgOgo+ICAgCQkgICAi IiwKPiArCQkgICB0ZXN0X2JpdChETUFfRkVOQ0VfRkxBR19FTkFCTEVfU0lHTkFMX0JJVCwKPiAr CQkJICAgICZycS0+ZmVuY2UuZmxhZ3MpID8gICIrIiA6ICIiLAo+ICAgCQkgICBycS0+ZmVuY2Uu Y29udGV4dCwgcnEtPmZlbmNlLnNlcW5vLAo+ICAgCQkgICBidWYsCj4gICAJCSAgIGppZmZpZXNf dG9fbXNlY3MoamlmZmllcyAtIHJxLT5lbWl0dGVkX2ppZmZpZXMpLAo+IEBAIC0xNDkyLDEyICsx NDgzLDkgQEAgdm9pZCBpbnRlbF9lbmdpbmVfZHVtcChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUsCj4gICAJCSAgICAgICBzdHJ1Y3QgZHJtX3ByaW50ZXIgKm0sCj4gICAJCSAgICAgICBj b25zdCBjaGFyICpoZWFkZXIsIC4uLikKPiAgIHsKPiAtCXN0cnVjdCBpbnRlbF9icmVhZGNydW1i cyAqIGNvbnN0IGIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKPiAgIAlzdHJ1Y3QgaTkxNV9ncHVf ZXJyb3IgKiBjb25zdCBlcnJvciA9ICZlbmdpbmUtPmk5MTUtPmdwdV9lcnJvcjsKPiAgIAlzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycTsKPiAgIAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAtCXVu c2lnbmVkIGxvbmcgZmxhZ3M7Cj4gLQlzdHJ1Y3QgcmJfbm9kZSAqcmI7Cj4gICAKPiAgIAlpZiAo aGVhZGVyKSB7Cj4gICAJCXZhX2xpc3QgYXA7Cj4gQEAgLTE1NjUsMjEgKzE1NTMsMTIgQEAgdm9p ZCBpbnRlbF9lbmdpbmVfZHVtcChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gICAK PiAgIAlpbnRlbF9leGVjbGlzdHNfc2hvd19yZXF1ZXN0cyhlbmdpbmUsIG0sIHByaW50X3JlcXVl c3QsIDgpOwo+ICAgCj4gLQlzcGluX2xvY2tfaXJxc2F2ZSgmYi0+cmJfbG9jaywgZmxhZ3MpOwo+ IC0JZm9yIChyYiA9IHJiX2ZpcnN0KCZiLT53YWl0ZXJzKTsgcmI7IHJiID0gcmJfbmV4dChyYikp IHsKPiAtCQlzdHJ1Y3QgaW50ZWxfd2FpdCAqdyA9IHJiX2VudHJ5KHJiLCB0eXBlb2YoKncpLCBu b2RlKTsKPiAtCj4gLQkJZHJtX3ByaW50ZihtLCAiXHQlcyBbJWQ6JWNdIHdhaXRpbmcgZm9yICV4 XG4iLAo+IC0JCQkgICB3LT50c2stPmNvbW0sIHctPnRzay0+cGlkLAo+IC0JCQkgICB0YXNrX3N0 YXRlX3RvX2NoYXIody0+dHNrKSwKPiAtCQkJICAgdy0+c2Vxbm8pOwo+IC0JfQo+IC0Jc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmYi0+cmJfbG9jaywgZmxhZ3MpOwo+IC0KPiAgIAlkcm1fcHJpbnRm KG0sICJIV1NQOlxuIik7Cj4gICAJaGV4ZHVtcChtLCBlbmdpbmUtPnN0YXR1c19wYWdlLmFkZHIs IFBBR0VfU0laRSk7Cj4gICAKPiAgIAlkcm1fcHJpbnRmKG0sICJJZGxlPyAlc1xuIiwgeWVzbm8o aW50ZWxfZW5naW5lX2lzX2lkbGUoZW5naW5lKSkpOwo+ICsKPiArCWludGVsX2VuZ2luZV9wcmlu dF9icmVhZGNydW1icyhlbmdpbmUsIG0pOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdTggdXNlcl9j bGFzc19tYXBbXSA9IHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cmluZ2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCj4g aW5kZXggNjY4ZWQ2NzMzNmEyLi5iODg5YjI3ZjhhZWIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcmluZ2J1ZmZlci5jCj4gQEAgLTc0Myw3ICs3NDMsNyBAQCBzdGF0aWMgaW50IGlu aXRfcmluZ19jb21tb24oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgCX0KPiAg IAo+ICAgCS8qIFBhcGVyaW5nIG92ZXIgbG9zdCBfaW50ZXJydXB0c18gaW1tZWRpYXRlbHkgZm9s bG93aW5nIHRoZSByZXN0YXJ0ICovCj4gLQlpbnRlbF9lbmdpbmVfd2FrZXVwKGVuZ2luZSk7Cj4g KwlpbnRlbF9lbmdpbmVfcXVldWVfYnJlYWRjcnVtYnMoZW5naW5lKTsKPiAgIG91dDoKPiAgIAlp bnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7Cj4gICAK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCj4gaW5kZXggYWU3NTNjNDVj YmU3Li5lZmVmMmFhMWFiY2UgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcmluZ2J1ZmZlci5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1 ZmZlci5oCj4gQEAgLTUsNiArNSw3IEBACj4gICAjaW5jbHVkZSA8ZHJtL2RybV91dGlsLmg+Cj4g ICAKPiAgICNpbmNsdWRlIDxsaW51eC9oYXNodGFibGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2ly cV93b3JrLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvc2VxbG9jay5oPgo+ICAgCj4gICAjaW5jbHVk ZSAiaTkxNV9nZW1fYmF0Y2hfcG9vbC5oIgo+IEBAIC0zODEsMjIgKzM4MiwxOSBAQCBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzIHsKPiAgIAkgKiB0aGUgb3ZlcmhlYWQgb2Ygd2FraW5nIHRoYXQgY2xp ZW50IGlzIG11Y2ggcHJlZmVycmVkLgo+ICAgCSAqLwo+ICAgCXN0cnVjdCBpbnRlbF9icmVhZGNy dW1icyB7Cj4gLQkJc3BpbmxvY2tfdCBpcnFfbG9jazsgLyogcHJvdGVjdHMgaXJxXyo7IGlycXNh ZmUgKi8KPiAtCQlzdHJ1Y3QgaW50ZWxfd2FpdCAqaXJxX3dhaXQ7IC8qIG9sZGVzdCB3YWl0ZXIg YnkgcmV0aXJlbWVudCAqLwo+ICsJCXNwaW5sb2NrX3QgaXJxX2xvY2s7Cj4gKwkJc3RydWN0IGxp c3RfaGVhZCBzaWduYWxlcnM7Cj4gICAKPiAtCQlzcGlubG9ja190IHJiX2xvY2s7IC8qIHByb3Rl Y3RzIHRoZSByYiBhbmQgd3JhcHMgaXJxX2xvY2sgKi8KPiAtCQlzdHJ1Y3QgcmJfcm9vdCB3YWl0 ZXJzOyAvKiBzb3J0ZWQgYnkgcmV0aXJlbWVudCwgcHJpb3JpdHkgKi8KPiAtCQlzdHJ1Y3QgbGlz dF9oZWFkIHNpZ25hbHM7IC8qIHNvcnRlZCBieSByZXRpcmVtZW50ICovCj4gLQkJc3RydWN0IHRh c2tfc3RydWN0ICpzaWduYWxlcjsgLyogdXNlZCBmb3IgZmVuY2Ugc2lnbmFsbGluZyAqLwo+ICsJ CXN0cnVjdCBpcnFfd29yayBpcnFfd29yazsgLyogZm9yIHVzZSBmcm9tIGluc2lkZSBpcnFfbG9j ayAqLwo+ICAgCj4gICAJCXN0cnVjdCB0aW1lcl9saXN0IGZha2VfaXJxOyAvKiB1c2VkIGFmdGVy IGEgbWlzc2VkIGludGVycnVwdCAqLwo+ICAgCQlzdHJ1Y3QgdGltZXJfbGlzdCBoYW5nY2hlY2s7 IC8qIGRldGVjdCBtaXNzZWQgaW50ZXJydXB0cyAqLwo+ICAgCj4gICAJCXVuc2lnbmVkIGludCBo YW5nY2hlY2tfaW50ZXJydXB0czsKPiAgIAkJdW5zaWduZWQgaW50IGlycV9lbmFibGVkOwo+IC0J CXVuc2lnbmVkIGludCBpcnFfY291bnQ7Cj4gICAKPiAtCQlib29sIGlycV9hcm1lZCA6IDE7Cj4g KwkJYm9vbCBpcnFfYXJtZWQ7Cj4gKwkJYm9vbCBpcnFfZmlyZWQ7Cj4gICAJfSBicmVhZGNydW1i czsKPiAgIAo+ICAgCXN0cnVjdCB7Cj4gQEAgLTg4NSw4MyArODgzLDI5IEBAIHN0YXRpYyBpbmxp bmUgYm9vbCBpbnRlbF9lbmdpbmVfaGFzX3N0YXJ0ZWQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lLAo+ICAgdm9pZCBpbnRlbF9lbmdpbmVfZ2V0X2luc3Rkb25lKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSwKPiAgIAkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfaW5zdGRvbmUgKmlu c3Rkb25lKTsKPiAgIAo+IC0vKiBpbnRlbF9icmVhZGNydW1icy5jIC0tIHVzZXIgaW50ZXJydXB0 IGJvdHRvbS1oYWxmIGZvciB3YWl0ZXJzICovCj4gLWludCBpbnRlbF9lbmdpbmVfaW5pdF9icmVh ZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+IC0KPiAtc3RhdGljIGlu bGluZSB2b2lkIGludGVsX3dhaXRfaW5pdChzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdCkKPiAtewo+ IC0Jd2FpdC0+dHNrID0gY3VycmVudDsKPiAtCXdhaXQtPnJlcXVlc3QgPSBOVUxMOwo+IC19Cj4g LQo+IC1zdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxfd2FpdF9pbml0X2Zvcl9zZXFubyhzdHJ1Y3Qg aW50ZWxfd2FpdCAqd2FpdCwgdTMyIHNlcW5vKQo+IC17Cj4gLQl3YWl0LT50c2sgPSBjdXJyZW50 Owo+IC0Jd2FpdC0+c2Vxbm8gPSBzZXFubzsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSBib29s IGludGVsX3dhaXRfaGFzX3NlcW5vKGNvbnN0IHN0cnVjdCBpbnRlbF93YWl0ICp3YWl0KQo+IC17 Cj4gLQlyZXR1cm4gd2FpdC0+c2Vxbm87Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgYm9vbAo+ IC1pbnRlbF93YWl0X3VwZGF0ZV9zZXFubyhzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdCwgdTMyIHNl cW5vKQo+IC17Cj4gLQl3YWl0LT5zZXFubyA9IHNlcW5vOwo+IC0JcmV0dXJuIGludGVsX3dhaXRf aGFzX3NlcW5vKHdhaXQpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIGJvb2wKPiAtaW50ZWxf d2FpdF91cGRhdGVfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdCwKPiAtCQkJICBjb25z dCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiAtewo+IC0JcmV0dXJuIGludGVsX3dhaXRfdXBk YXRlX3NlcW5vKHdhaXQsIGk5MTVfcmVxdWVzdF9nbG9iYWxfc2Vxbm8ocnEpKTsKPiAtfQo+IC0K PiAtc3RhdGljIGlubGluZSBib29sCj4gLWludGVsX3dhaXRfY2hlY2tfc2Vxbm8oY29uc3Qgc3Ry dWN0IGludGVsX3dhaXQgKndhaXQsIHUzMiBzZXFubykKPiAtewo+IC0JcmV0dXJuIHdhaXQtPnNl cW5vID09IHNlcW5vOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIGJvb2wKPiAtaW50ZWxfd2Fp dF9jaGVja19yZXF1ZXN0KGNvbnN0IHN0cnVjdCBpbnRlbF93YWl0ICp3YWl0LAo+IC0JCQkgY29u c3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gLXsKPiAtCXJldHVybiBpbnRlbF93YWl0X2No ZWNrX3NlcW5vKHdhaXQsIGk5MTVfcmVxdWVzdF9nbG9iYWxfc2Vxbm8ocnEpKTsKPiAtfQo+ICt2 b2lkIGludGVsX2VuZ2luZV9pbml0X2JyZWFkY3J1bWJzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSk7Cj4gK3ZvaWQgaW50ZWxfZW5naW5lX2ZpbmlfYnJlYWRjcnVtYnMoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiAgIAo+IC1zdGF0aWMgaW5saW5lIGJvb2wgaW50ZWxf d2FpdF9jb21wbGV0ZShjb25zdCBzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdCkKPiAtewo+IC0JcmV0 dXJuIFJCX0VNUFRZX05PREUoJndhaXQtPm5vZGUpOwo+IC19Cj4gK3ZvaWQgaW50ZWxfZW5naW5l X3Bpbl9icmVhZGNydW1ic19pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiAr dm9pZCBpbnRlbF9lbmdpbmVfdW5waW5fYnJlYWRjcnVtYnNfaXJxKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSk7Cj4gICAKPiAtYm9vbCBpbnRlbF9lbmdpbmVfYWRkX3dhaXQoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0JCQkgICBzdHJ1Y3QgaW50ZWxfd2FpdCAqd2Fp dCk7Cj4gLXZvaWQgaW50ZWxfZW5naW5lX3JlbW92ZV93YWl0KHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSwKPiAtCQkJICAgICAgc3RydWN0IGludGVsX3dhaXQgKndhaXQpOwo+IC1ib29s IGludGVsX2VuZ2luZV9lbmFibGVfc2lnbmFsaW5nKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVl c3QsIGJvb2wgd2FrZXVwKTsKPiAtdm9pZCBpbnRlbF9lbmdpbmVfY2FuY2VsX3NpZ25hbGluZyhz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0KTsKPiArYm9vbCBpbnRlbF9lbmdpbmVfc2lnbmFs X2JyZWFkY3J1bWJzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gK3ZvaWQgaW50 ZWxfZW5naW5lX2Rpc2FybV9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpOwo+ICAgCj4gLXN0YXRpYyBpbmxpbmUgYm9vbCBpbnRlbF9lbmdpbmVfaGFzX3dhaXRlcihj b25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3N0YXRpYyBpbmxpbmUgdm9p ZAo+ICtpbnRlbF9lbmdpbmVfcXVldWVfYnJlYWRjcnVtYnMoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQo+ICAgewo+IC0JcmV0dXJuIFJFQURfT05DRShlbmdpbmUtPmJyZWFkY3J1bWJz LmlycV93YWl0KTsKPiArCWlycV93b3JrX3F1ZXVlKCZlbmdpbmUtPmJyZWFkY3J1bWJzLmlycV93 b3JrKTsKPiAgIH0KPiAgIAo+IC11bnNpZ25lZCBpbnQgaW50ZWxfZW5naW5lX3dha2V1cChzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+IC0jZGVmaW5lIEVOR0lORV9XQUtFVVBfV0FJ VEVSIEJJVCgwKQo+IC0jZGVmaW5lIEVOR0lORV9XQUtFVVBfQVNMRUVQIEJJVCgxKQo+IC0KPiAt dm9pZCBpbnRlbF9lbmdpbmVfcGluX2JyZWFkY3J1bWJzX2lycShzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpOwo+IC12b2lkIGludGVsX2VuZ2luZV91bnBpbl9icmVhZGNydW1ic19pcnEo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiAtCj4gLXZvaWQgX19pbnRlbF9lbmdp bmVfZGlzYXJtX2JyZWFkY3J1bWJzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4g LXZvaWQgaW50ZWxfZW5naW5lX2Rpc2FybV9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpOwo+ICtib29sIGludGVsX2VuZ2luZV9icmVhZGNydW1ic19pcnEoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiAgIAo+ICAgdm9pZCBpbnRlbF9lbmdpbmVfcmVz ZXRfYnJlYWRjcnVtYnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiAgIHZvaWQg aW50ZWxfZW5naW5lX2ZpbmlfYnJlYWRjcnVtYnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKTsKPiAgIAo+ICt2b2lkIGludGVsX2VuZ2luZV9wcmludF9icmVhZGNydW1icyhzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJCQkgICAgc3RydWN0IGRybV9wcmludGVyICpw KTsKPiArCj4gICBzdGF0aWMgaW5saW5lIHUzMiAqZ2VuOF9lbWl0X3BpcGVfY29udHJvbCh1MzIg KmJhdGNoLCB1MzIgZmxhZ3MsIHUzMiBvZmZzZXQpCj4gICB7Cj4gICAJbWVtc2V0KGJhdGNoLCAw LCA2ICogc2l6ZW9mKHUzMikpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaAo+IGluZGV4IDRhODNhMWM2YzQwNi4uODhlNWFi NTg2MzM3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1 X21vY2tfc2VsZnRlc3RzLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv aTkxNV9tb2NrX3NlbGZ0ZXN0cy5oCj4gQEAgLTE1LDcgKzE1LDYgQEAgc2VsZnRlc3Qoc2NhdHRl cmxpc3QsIHNjYXR0ZXJsaXN0X21vY2tfc2VsZnRlc3RzKQo+ICAgc2VsZnRlc3Qoc3luY21hcCwg aTkxNV9zeW5jbWFwX21vY2tfc2VsZnRlc3RzKQo+ICAgc2VsZnRlc3QodW5jb3JlLCBpbnRlbF91 bmNvcmVfbW9ja19zZWxmdGVzdHMpCj4gICBzZWxmdGVzdChlbmdpbmUsIGludGVsX2VuZ2luZV9j c19tb2NrX3NlbGZ0ZXN0cykKPiAtc2VsZnRlc3QoYnJlYWRjcnVtYnMsIGludGVsX2JyZWFkY3J1 bWJzX21vY2tfc2VsZnRlc3RzKQo+ICAgc2VsZnRlc3QodGltZWxpbmVzLCBpOTE1X3RpbWVsaW5l X21vY2tfc2VsZnRlc3RzKQo+ICAgc2VsZnRlc3QocmVxdWVzdHMsIGk5MTVfcmVxdWVzdF9tb2Nr X3NlbGZ0ZXN0cykKPiAgIHNlbGZ0ZXN0KG9iamVjdHMsIGk5MTVfZ2VtX29iamVjdF9tb2NrX3Nl bGZ0ZXN0cykKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5 MTVfcmVxdWVzdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVz dC5jCj4gaW5kZXggNGQ0Yjg2YjVmYTExLi42NzMzZGM1YjZiNGMgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jCj4gQEAgLTI1LDkgKzI1LDEy IEBACj4gICAjaW5jbHVkZSA8bGludXgvcHJpbWVfbnVtYmVycy5oPgo+ICAgCj4gICAjaW5jbHVk ZSAiLi4vaTkxNV9zZWxmdGVzdC5oIgo+ICsjaW5jbHVkZSAiaTkxNV9yYW5kb20uaCIKPiAgICNp bmNsdWRlICJpZ3RfbGl2ZV90ZXN0LmgiCj4gKyNpbmNsdWRlICJsaWJfc3dfZmVuY2UuaCIKPiAg IAo+ICAgI2luY2x1ZGUgIm1vY2tfY29udGV4dC5oIgo+ICsjaW5jbHVkZSAibW9ja19kcm0uaCIK PiAgICNpbmNsdWRlICJtb2NrX2dlbV9kZXZpY2UuaCIKPiAgIAo+ICAgc3RhdGljIGludCBpZ3Rf YWRkX3JlcXVlc3Qodm9pZCAqYXJnKQo+IEBAIC0yNDcsNiArMjUwLDI1NCBAQCBzdGF0aWMgaW50 IGlndF9yZXF1ZXN0X3Jld2luZCh2b2lkICphcmcpCj4gICAJcmV0dXJuIGVycjsKPiAgIH0KPiAg IAo+ICtzdHJ1Y3Qgc21va2V0ZXN0IHsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZTsKPiArCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICoqY29udGV4dHM7Cj4gKwlhdG9taWNfbG9u Z190IG51bV93YWl0cywgbnVtX2ZlbmNlczsKPiArCWludCBuY29udGV4dHMsIG1heF9iYXRjaDsK PiArCXN0cnVjdCBpOTE1X3JlcXVlc3QgKigqcmVxdWVzdF9hbGxvYykoc3RydWN0IGk5MTVfZ2Vt X2NvbnRleHQgKiwKPiArCQkJCQkgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICopOwo+ICt9 Owo+ICsKPiArc3RhdGljIHN0cnVjdCBpOTE1X3JlcXVlc3QgKgo+ICtfX21vY2tfcmVxdWVzdF9h bGxvYyhzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+ICsJCSAgICAgc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlyZXR1cm4gbW9ja19yZXF1ZXN0KGVuZ2luZSwg Y3R4LCAwKTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBpOTE1X3JlcXVlc3QgKgo+ICtfX2xp dmVfcmVxdWVzdF9hbGxvYyhzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+ICsJCSAgICAg c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlyZXR1cm4gaTkxNV9yZXF1 ZXN0X2FsbG9jKGVuZ2luZSwgY3R4KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBfX2lndF9icmVh ZGNydW1ic19zbW9rZXRlc3Qodm9pZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1Y3Qgc21va2V0ZXN0ICp0 ID0gYXJnOwo+ICsJc3RydWN0IG11dGV4ICogY29uc3QgQktMID0gJnQtPmVuZ2luZS0+aTkxNS0+ ZHJtLnN0cnVjdF9tdXRleDsKPiArCWNvbnN0IHVuc2lnbmVkIGludCBtYXhfYmF0Y2ggPSBtaW4o dC0+bmNvbnRleHRzLCB0LT5tYXhfYmF0Y2gpIC0gMTsKPiArCWNvbnN0IHVuc2lnbmVkIGludCB0 b3RhbCA9IDQgKiB0LT5uY29udGV4dHMgKyAxOwo+ICsJdW5zaWduZWQgaW50IG51bV93YWl0cyA9 IDAsIG51bV9mZW5jZXMgPSAwOwo+ICsJc3RydWN0IGk5MTVfcmVxdWVzdCAqKnJlcXVlc3RzOwo+ ICsJSTkxNV9STkRfU1RBVEUocHJuZyk7Cj4gKwl1bnNpZ25lZCBpbnQgKm9yZGVyOwo+ICsJaW50 IGVyciA9IDA7Cj4gKwo+ICsJLyoKPiArCSAqIEEgdmVyeSBzaW1wbGUgdGVzdCB0byBjYXRjaCB0 aGUgbW9zdCBlZ3JlZ2lvdXMgb2YgbGlzdCBoYW5kbGluZyBidWdzLgo+ICsJICoKPiArCSAqIEF0 IGl0cyBoZWFydCwgd2Ugc2ltcGx5IGNyZWF0ZSBvb2RsZXMgb2YgcmVxdWVzdHMgcnVubmluZyBh Y3Jvc3MKPiArCSAqIG11bHRpcGxlIGt0aHJlYWRzIGFuZCBlbmFibGUgc2lnbmFsaW5nIG9uIHRo ZW0sIGZvciB0aGUgc29sZSBwdXJwb3NlCj4gKwkgKiBvZiBzdHJlc3Npbmcgb3VyIGJyZWFkY3J1 bWIgaGFuZGxpbmcuIFRoZSBvbmx5IGluc3BlY3Rpb24gd2UgZG8gaXMKPiArCSAqIHRoYXQgdGhl IGZlbmNlcyB3ZXJlIG1hcmtlZCBhcyBzaWduYWxlZC4KPiArCSAqLwo+ICsKPiArCXJlcXVlc3Rz ID0ga21hbGxvY19hcnJheSh0b3RhbCwgc2l6ZW9mKCpyZXF1ZXN0cyksIEdGUF9LRVJORUwpOwo+ ICsJaWYgKCFyZXF1ZXN0cykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlvcmRlciA9IGk5 MTVfcmFuZG9tX29yZGVyKHRvdGFsLCAmcHJuZyk7Cj4gKwlpZiAoIW9yZGVyKSB7Cj4gKwkJZXJy ID0gLUVOT01FTTsKPiArCQlnb3RvIG91dF9yZXF1ZXN0czsKPiArCX0KPiArCj4gKwl3aGlsZSAo IWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewo+ICsJCXN0cnVjdCBpOTE1X3N3X2ZlbmNlICpzdWJt aXQsICp3YWl0Owo+ICsJCXVuc2lnbmVkIGludCBuLCBjb3VudDsKPiArCj4gKwkJc3VibWl0ID0g aGVhcF9mZW5jZV9jcmVhdGUoR0ZQX0tFUk5FTCk7Cj4gKwkJaWYgKCFzdWJtaXQpIHsKPiArCQkJ ZXJyID0gLUVOT01FTTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsKPiArCQl3YWl0ID0gaGVhcF9m ZW5jZV9jcmVhdGUoR0ZQX0tFUk5FTCk7Cj4gKwkJaWYgKCF3YWl0KSB7Cj4gKwkJCWk5MTVfc3df ZmVuY2VfY29tbWl0KHN1Ym1pdCk7Cj4gKwkJCWhlYXBfZmVuY2VfcHV0KHN1Ym1pdCk7Cj4gKwkJ CWVyciA9IEVOT01FTTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsKPiArCQlpOTE1X3JhbmRvbV9y ZW9yZGVyKG9yZGVyLCB0b3RhbCwgJnBybmcpOwo+ICsJCWNvdW50ID0gMSArIGk5MTVfcHJhbmRv bV91MzJfbWF4X3N0YXRlKG1heF9iYXRjaCwgJnBybmcpOwo+ICsKPiArCQlmb3IgKG4gPSAwOyBu IDwgY291bnQ7IG4rKykgewo+ICsJCQlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4ID0KPiAr CQkJCXQtPmNvbnRleHRzW29yZGVyW25dICUgdC0+bmNvbnRleHRzXTsKPiArCQkJc3RydWN0IGk5 MTVfcmVxdWVzdCAqcnE7Cj4gKwo+ICsJCQltdXRleF9sb2NrKEJLTCk7Cj4gKwo+ICsJCQlycSA9 IHQtPnJlcXVlc3RfYWxsb2MoY3R4LCB0LT5lbmdpbmUpOwo+ICsJCQlpZiAoSVNfRVJSKHJxKSkg ewo+ICsJCQkJbXV0ZXhfdW5sb2NrKEJLTCk7Cj4gKwkJCQllcnIgPSBQVFJfRVJSKHJxKTsKPiAr CQkJCWNvdW50ID0gbjsKPiArCQkJCWJyZWFrOwo+ICsJCQl9Cj4gKwo+ICsJCQllcnIgPSBpOTE1 X3N3X2ZlbmNlX2F3YWl0X3N3X2ZlbmNlX2dmcCgmcnEtPnN1Ym1pdCwKPiArCQkJCQkJCSAgICAg ICBzdWJtaXQsCj4gKwkJCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7Cj4gKwo+ICsJCQlyZXF1ZXN0 c1tuXSA9IGk5MTVfcmVxdWVzdF9nZXQocnEpOwo+ICsJCQlpOTE1X3JlcXVlc3RfYWRkKHJxKTsK PiArCj4gKwkJCW11dGV4X3VubG9jayhCS0wpOwo+ICsKPiArCQkJaWYgKGVyciA+PSAwKQo+ICsJ CQkJZXJyID0gaTkxNV9zd19mZW5jZV9hd2FpdF9kbWFfZmVuY2Uod2FpdCwKPiArCQkJCQkJCQkg ICAgJnJxLT5mZW5jZSwKPiArCQkJCQkJCQkgICAgMCwKPiArCQkJCQkJCQkgICAgR0ZQX0tFUk5F TCk7Cj4gKwo+ICsJCQlpZiAoZXJyIDwgMCkgewo+ICsJCQkJaTkxNV9yZXF1ZXN0X3B1dChycSk7 Cj4gKwkJCQljb3VudCA9IG47Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ICsJCX0KPiArCj4gKwkJ aTkxNV9zd19mZW5jZV9jb21taXQoc3VibWl0KTsKPiArCQlpOTE1X3N3X2ZlbmNlX2NvbW1pdCh3 YWl0KTsKPiArCj4gKwkJaWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQod2FpdC0+d2FpdCwKPiArCQkJ CQlpOTE1X3N3X2ZlbmNlX2RvbmUod2FpdCksCj4gKwkJCQkJSFogLyAyKSkgewo+ICsJCQlzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycSA9IHJlcXVlc3RzW2NvdW50IC0gMV07Cj4gKwo+ICsJCQlwcl9l cnIoIndhaXRpbmcgZm9yICVkIGZlbmNlcyAobGFzdCAlbGx4OiVsbGQpIG9uICVzIHRpbWVkIG91 dCFcbiIsCj4gKwkJCSAgICAgICBjb3VudCwKPiArCQkJICAgICAgIHJxLT5mZW5jZS5jb250ZXh0 LCBycS0+ZmVuY2Uuc2Vxbm8sCj4gKwkJCSAgICAgICB0LT5lbmdpbmUtPm5hbWUpOwo+ICsJCQlp OTE1X2dlbV9zZXRfd2VkZ2VkKHQtPmVuZ2luZS0+aTkxNSk7Cj4gKwkJCUdFTV9CVUdfT04oIWk5 MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKTsKPiArCQkJaTkxNV9zd19mZW5jZV93YWl0KHdhaXQp Owo+ICsJCQllcnIgPSAtRUlPOwo+ICsJCX0KPiArCj4gKwkJZm9yIChuID0gMDsgbiA8IGNvdW50 OyBuKyspIHsKPiArCQkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEgPSByZXF1ZXN0c1tuXTsKPiAr Cj4gKwkJCWlmICghdGVzdF9iaXQoRE1BX0ZFTkNFX0ZMQUdfU0lHTkFMRURfQklULAo+ICsJCQkJ ICAgICAgJnJxLT5mZW5jZS5mbGFncykpIHsKPiArCQkJCXByX2VycigiJWxsdTolbGx1IHdhcyBu b3Qgc2lnbmFsZWQhXG4iLAo+ICsJCQkJICAgICAgIHJxLT5mZW5jZS5jb250ZXh0LCBycS0+ZmVu Y2Uuc2Vxbm8pOwo+ICsJCQkJZXJyID0gLUVJTlZBTDsKPiArCQkJfQo+ICsKPiArCQkJaTkxNV9y ZXF1ZXN0X3B1dChycSk7Cj4gKwkJfQo+ICsKPiArCQloZWFwX2ZlbmNlX3B1dCh3YWl0KTsKPiAr CQloZWFwX2ZlbmNlX3B1dChzdWJtaXQpOwo+ICsKPiArCQlpZiAoZXJyIDwgMCkKPiArCQkJYnJl YWs7Cj4gKwo+ICsJCW51bV9mZW5jZXMgKz0gY291bnQ7Cj4gKwkJbnVtX3dhaXRzKys7Cj4gKwo+ ICsJCWNvbmRfcmVzY2hlZCgpOwo+ICsJfQo+ICsKPiArCWF0b21pY19sb25nX2FkZChudW1fZmVu Y2VzLCAmdC0+bnVtX2ZlbmNlcyk7Cj4gKwlhdG9taWNfbG9uZ19hZGQobnVtX3dhaXRzLCAmdC0+ bnVtX3dhaXRzKTsKPiArCj4gKwlrZnJlZShvcmRlcik7Cj4gK291dF9yZXF1ZXN0czoKPiArCWtm cmVlKHJlcXVlc3RzKTsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbW9j a19icmVhZGNydW1ic19zbW9rZXRlc3Qodm9pZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSA9IGFyZzsKPiArCXN0cnVjdCBzbW9rZXRlc3QgdCA9IHsKPiArCQku ZW5naW5lID0gaTkxNS0+ZW5naW5lW1JDU10sCj4gKwkJLm5jb250ZXh0cyA9IDEwMjQsCj4gKwkJ Lm1heF9iYXRjaCA9IDEwMjQsCj4gKwkJLnJlcXVlc3RfYWxsb2MgPSBfX21vY2tfcmVxdWVzdF9h bGxvYwo+ICsJfTsKPiArCXVuc2lnbmVkIGludCBuY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpOwo+ ICsJc3RydWN0IHRhc2tfc3RydWN0ICoqdGhyZWFkczsKPiArCXVuc2lnbmVkIGludCBuOwo+ICsJ aW50IHJldCA9IDA7Cj4gKwo+ICsJLyoKPiArCSAqIFNtb2tldGVzdCBvdXIgYnJlYWRjcnVtYi9z aWduYWwgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIGFjcm9zcyBtdWx0aXBsZQo+ICsJICogdGhyZWFk cy4gQSB2ZXJ5IHNpbXBsZSB0ZXN0IHRvIG9ubHkgY2F0Y2ggdGhlIG1vc3QgZWdyZWdpb3VzIG9m IGJ1Z3MuCj4gKwkgKiBTZWUgX19pZ3RfYnJlYWRjcnVtYnNfc21va2V0ZXN0KCk7Cj4gKwkgKi8K PiArCj4gKwl0aHJlYWRzID0ga21hbGxvY19hcnJheShuY3B1cywgc2l6ZW9mKCp0aHJlYWRzKSwg R0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXRocmVhZHMpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ ICsJdC5jb250ZXh0cyA9Cj4gKwkJa21hbGxvY19hcnJheSh0Lm5jb250ZXh0cywgc2l6ZW9mKCp0 LmNvbnRleHRzKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXQuY29udGV4dHMpIHsKPiArCQlyZXQg PSAtRU5PTUVNOwo+ICsJCWdvdG8gb3V0X3RocmVhZHM7Cj4gKwl9Cj4gKwo+ICsJbXV0ZXhfbG9j aygmdC5lbmdpbmUtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJZm9yIChuID0gMDsgbiA8 IHQubmNvbnRleHRzOyBuKyspIHsKPiArCQl0LmNvbnRleHRzW25dID0gbW9ja19jb250ZXh0KHQu ZW5naW5lLT5pOTE1LCAibW9jayIpOwo+ICsJCWlmICghdC5jb250ZXh0c1tuXSkgewo+ICsJCQly ZXQgPSAtRU5PTUVNOwo+ICsJCQlnb3RvIG91dF9jb250ZXh0czsKPiArCQl9Cj4gKwl9Cj4gKwlt dXRleF91bmxvY2soJnQuZW5naW5lLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCj4gKwlm b3IgKG4gPSAwOyBuIDwgbmNwdXM7IG4rKykgewo+ICsJCXRocmVhZHNbbl0gPSBrdGhyZWFkX3J1 bihfX2lndF9icmVhZGNydW1ic19zbW9rZXRlc3QsCj4gKwkJCQkJICZ0LCAiaWd0LyVkIiwgbik7 Cj4gKwkJaWYgKElTX0VSUih0aHJlYWRzW25dKSkgewo+ICsJCQlyZXQgPSBQVFJfRVJSKHRocmVh ZHNbbl0pOwo+ICsJCQluY3B1cyA9IG47Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCj4gKwkJZ2V0 X3Rhc2tfc3RydWN0KHRocmVhZHNbbl0pOwo+ICsJfQo+ICsKPiArCW1zbGVlcChqaWZmaWVzX3Rv X21zZWNzKGk5MTVfc2VsZnRlc3QudGltZW91dF9qaWZmaWVzKSk7Cj4gKwo+ICsJZm9yIChuID0g MDsgbiA8IG5jcHVzOyBuKyspIHsKPiArCQlpbnQgZXJyOwo+ICsKPiArCQllcnIgPSBrdGhyZWFk X3N0b3AodGhyZWFkc1tuXSk7Cj4gKwkJaWYgKGVyciA8IDAgJiYgIXJldCkKPiArCQkJcmV0ID0g ZXJyOwo+ICsKPiArCQlwdXRfdGFza19zdHJ1Y3QodGhyZWFkc1tuXSk7Cj4gKwl9Cj4gKwlwcl9p bmZvKCJDb21wbGV0ZWQgJWx1IHdhaXRzIGZvciAlbHUgZmVuY2UgYWNyb3NzICVkIGNwdXNcbiIs Cj4gKwkJYXRvbWljX2xvbmdfcmVhZCgmdC5udW1fd2FpdHMpLAo+ICsJCWF0b21pY19sb25nX3Jl YWQoJnQubnVtX2ZlbmNlcyksCj4gKwkJbmNwdXMpOwo+ICsKPiArCW11dGV4X2xvY2soJnQuZW5n aW5lLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArb3V0X2NvbnRleHRzOgo+ICsJZm9yIChu ID0gMDsgbiA8IHQubmNvbnRleHRzOyBuKyspIHsKPiArCQlpZiAoIXQuY29udGV4dHNbbl0pCj4g KwkJCWJyZWFrOwo+ICsJCW1vY2tfY29udGV4dF9jbG9zZSh0LmNvbnRleHRzW25dKTsKPiArCX0K PiArCW11dGV4X3VubG9jaygmdC5lbmdpbmUtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJ a2ZyZWUodC5jb250ZXh0cyk7Cj4gK291dF90aHJlYWRzOgo+ICsJa2ZyZWUodGhyZWFkcyk7Cj4g Kwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAgIGludCBpOTE1X3JlcXVlc3RfbW9ja19zZWxm dGVzdHModm9pZCkKPiAgIHsKPiAgIAlzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVzdCB0 ZXN0c1tdID0gewo+IEBAIC0yNTQsNiArNTA1LDcgQEAgaW50IGk5MTVfcmVxdWVzdF9tb2NrX3Nl bGZ0ZXN0cyh2b2lkKQo+ICAgCQlTVUJURVNUKGlndF93YWl0X3JlcXVlc3QpLAo+ICAgCQlTVUJU RVNUKGlndF9mZW5jZV93YWl0KSwKPiAgIAkJU1VCVEVTVChpZ3RfcmVxdWVzdF9yZXdpbmQpLAo+ ICsJCVNVQlRFU1QobW9ja19icmVhZGNydW1ic19zbW9rZXRlc3QpLAo+ICAgCX07Cj4gICAJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4gICAJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7 Cj4gQEAgLTgxMiw2ICsxMDY0LDE3OCBAQCBzdGF0aWMgaW50IGxpdmVfc2VxdWVudGlhbF9lbmdp bmVzKHZvaWQgKmFyZykKPiAgIAlyZXR1cm4gZXJyOwo+ICAgfQo+ICAgCj4gK3N0YXRpYyBpbnQK PiArbWF4X2JhdGNoZXMoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwgc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKPiAr CWludCByZXQ7Cj4gKwo+ICsJLyoKPiArCSAqIEJlZm9yZSBleGVjbGlzdHMsIGFsbCBjb250ZXh0 cyBzaGFyZSB0aGUgc2FtZSByaW5nYnVmZmVyLiBXaXRoCj4gKwkgKiBleGVjbGlzdHMsIGVhY2gg Y29udGV4dC9lbmdpbmUgaGFzIGEgc2VwYXJhdGUgcmluZ2J1ZmZlciBhbmQKPiArCSAqIGZvciB0 aGUgcHVycG9zZXMgb2YgdGhpcyB0ZXN0LCBpbmV4aGF1c3RpYmxlLgo+ICsJICoKPiArCSAqIEZv ciB0aGUgZ2xvYmFsIHJpbmdidWZmZXIgdGhvdWdoLCB3ZSBoYXZlIHRvIGJlIHZlcnkgY2FyZWZ1 bAo+ICsJICogdGhhdCB3ZSBkbyBub3Qgd3JhcCB3aGlsZSBwcmV2ZW50aW5nIHRoZSBleGVjdXRp b24gb2YgcmVxdWVzdHMKPiArCSAqIHdpdGggYSB1bnNpZ25hbGVkIGZlbmNlLgo+ICsJICovCj4g KwlpZiAoSEFTX0VYRUNMSVNUUyhjdHgtPmk5MTUpKQo+ICsJCXJldHVybiBJTlRfTUFYOwo+ICsK PiArCXJxID0gaTkxNV9yZXF1ZXN0X2FsbG9jKGVuZ2luZSwgY3R4KTsKPiArCWlmIChJU19FUlIo cnEpKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihycSk7Cj4gKwl9IGVsc2Ugewo+ICsJCWludCBzejsK PiArCj4gKwkJcmV0ID0gcnEtPnJpbmctPnNpemUgLSBycS0+cmVzZXJ2ZWRfc3BhY2U7Cj4gKwkJ aTkxNV9yZXF1ZXN0X2FkZChycSk7Cj4gKwo+ICsJCXN6ID0gcnEtPnJpbmctPmVtaXQgLSBycS0+ aGVhZDsKPiArCQlpZiAoc3ogPCAwKQo+ICsJCQlzeiArPSBycS0+cmluZy0+c2l6ZTsKPiArCQly ZXQgLz0gc3o7Cj4gKwkJcmV0IC89IDI7IC8qIGxlYXZlIGhhbGYgc3BhcmUsIGluIGNhc2Ugb2Yg ZW1lcmdlbmN5ISAqLwo+ICsJfQo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgbGl2ZV9icmVhZGNydW1ic19zbW9rZXRlc3Qodm9pZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGFyZzsKPiArCXN0cnVjdCBzbW9rZXRlc3QgdFtJ OTE1X05VTV9FTkdJTkVTXTsKPiArCXVuc2lnbmVkIGludCBuY3B1cyA9IG51bV9vbmxpbmVfY3B1 cygpOwo+ICsJdW5zaWduZWQgbG9uZyBudW1fd2FpdHMsIG51bV9mZW5jZXM7Cj4gKwlzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKip0aHJlYWRz Owo+ICsJc3RydWN0IGlndF9saXZlX3Rlc3QgbGl2ZTsKPiArCWVudW0gaW50ZWxfZW5naW5lX2lk IGlkOwo+ICsJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gKwlzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGU7Cj4gKwl1bnNpZ25lZCBpbnQgbjsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCS8qCj4gKwkg KiBTbW9rZXRlc3Qgb3VyIGJyZWFkY3J1bWIvc2lnbmFsIGhhbmRsaW5nIGZvciByZXF1ZXN0cyBh Y3Jvc3MgbXVsdGlwbGUKPiArCSAqIHRocmVhZHMuIEEgdmVyeSBzaW1wbGUgdGVzdCB0byBvbmx5 IGNhdGNoIHRoZSBtb3N0IGVncmVnaW91cyBvZiBidWdzLgo+ICsJICogU2VlIF9faWd0X2JyZWFk Y3J1bWJzX3Ntb2tldGVzdCgpOwo+ICsJICoKPiArCSAqIE9uIHJlYWwgaGFyZHdhcmUgdGhpcyB0 aW1lLgo+ICsJICovCj4gKwo+ICsJd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGk5MTUp Owo+ICsKPiArCWZpbGUgPSBtb2NrX2ZpbGUoaTkxNSk7Cj4gKwlpZiAoSVNfRVJSKGZpbGUpKSB7 Cj4gKwkJcmV0ID0gUFRSX0VSUihmaWxlKTsKPiArCQlnb3RvIG91dF9ycG07Cj4gKwl9Cj4gKwo+ ICsJdGhyZWFkcyA9IGtjYWxsb2MobmNwdXMgKiBJOTE1X05VTV9FTkdJTkVTLAo+ICsJCQkgIHNp emVvZigqdGhyZWFkcyksCj4gKwkJCSAgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXRocmVhZHMpIHsK PiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8gb3V0X2ZpbGU7Cj4gKwl9Cj4gKwo+ICsJbWVt c2V0KCZ0WzBdLCAwLCBzaXplb2YodFswXSkpOwo+ICsJdFswXS5yZXF1ZXN0X2FsbG9jID0gX19s aXZlX3JlcXVlc3RfYWxsb2M7Cj4gKwl0WzBdLm5jb250ZXh0cyA9IDY0Owo+ICsJdFswXS5jb250 ZXh0cyA9IGttYWxsb2NfYXJyYXkodFswXS5uY29udGV4dHMsCj4gKwkJCQkgICAgICBzaXplb2Yo KnRbMF0uY29udGV4dHMpLAo+ICsJCQkJICAgICAgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXRbMF0u Y29udGV4dHMpIHsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8gb3V0X3RocmVhZHM7Cj4g Kwl9Cj4gKwo+ICsJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwlmb3Ig KG4gPSAwOyBuIDwgdFswXS5uY29udGV4dHM7IG4rKykgewo+ICsJCXRbMF0uY29udGV4dHNbbl0g PSBsaXZlX2NvbnRleHQoaTkxNSwgZmlsZSk7Cj4gKwkJaWYgKCF0WzBdLmNvbnRleHRzW25dKSB7 Cj4gKwkJCXJldCA9IC1FTk9NRU07Cj4gKwkJCWdvdG8gb3V0X2NvbnRleHRzOwo+ICsJCX0KPiAr CX0KPiArCj4gKwlyZXQgPSBpZ3RfbGl2ZV90ZXN0X2JlZ2luKCZsaXZlLCBpOTE1LCBfX2Z1bmNf XywgIiIpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIG91dF9jb250ZXh0czsKPiArCj4gKwlmb3Jf ZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1LCBpZCkgewo+ICsJCXRbaWRdID0gdFswXTsKPiArCQl0 W2lkXS5lbmdpbmUgPSBlbmdpbmU7Cj4gKwkJdFtpZF0ubWF4X2JhdGNoID0gbWF4X2JhdGNoZXMo dFswXS5jb250ZXh0c1swXSwgZW5naW5lKTsKPiArCQlpZiAodFtpZF0ubWF4X2JhdGNoIDwgMCkg ewo+ICsJCQlyZXQgPSB0W2lkXS5tYXhfYmF0Y2g7Cj4gKwkJCW11dGV4X3VubG9jaygmaTkxNS0+ ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwkJCWdvdG8gb3V0X2ZsdXNoOwo+ICsJCX0KPiArCQkvKiBP bmUgcmluZyBpbnRlcmxlYXZlZCBiZXR3ZWVuIHJlcXVlc3RzIGZyb20gYWxsIGNwdXMgKi8KPiAr CQl0W2lkXS5tYXhfYmF0Y2ggLz0gbnVtX29ubGluZV9jcHVzKCkgKyAxOwo+ICsJCXByX2RlYnVn KCJMaW1pdGluZyBiYXRjaGVzIHRvICVkIHJlcXVlc3RzIG9uICVzXG4iLAo+ICsJCQkgdFtpZF0u bWF4X2JhdGNoLCBlbmdpbmUtPm5hbWUpOwo+ICsKPiArCQlmb3IgKG4gPSAwOyBuIDwgbmNwdXM7 IG4rKykgewo+ICsJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKPiArCj4gKwkJCXRzayA9IGt0 aHJlYWRfcnVuKF9faWd0X2JyZWFkY3J1bWJzX3Ntb2tldGVzdCwKPiArCQkJCQkgICZ0W2lkXSwg ImlndC8lZC4lZCIsIGlkLCBuKTsKPiArCQkJaWYgKElTX0VSUih0c2spKSB7Cj4gKwkJCQlyZXQg PSBQVFJfRVJSKHRzayk7Cj4gKwkJCQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0 ZXgpOwo+ICsJCQkJZ290byBvdXRfZmx1c2g7Cj4gKwkJCX0KPiArCj4gKwkJCWdldF90YXNrX3N0 cnVjdCh0c2spOwo+ICsJCQl0aHJlYWRzW2lkICogbmNwdXMgKyBuXSA9IHRzazsKPiArCQl9Cj4g Kwl9Cj4gKwltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsKPiArCW1z bGVlcChqaWZmaWVzX3RvX21zZWNzKGk5MTVfc2VsZnRlc3QudGltZW91dF9qaWZmaWVzKSk7Cj4g Kwo+ICtvdXRfZmx1c2g6Cj4gKwludW1fd2FpdHMgPSAwOwo+ICsJbnVtX2ZlbmNlcyA9IDA7Cj4g Kwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1LCBpZCkgewo+ICsJCWZvciAobiA9IDA7IG4g PCBuY3B1czsgbisrKSB7Cj4gKwkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gdGhyZWFkc1tp ZCAqIG5jcHVzICsgbl07Cj4gKwkJCWludCBlcnI7Cj4gKwo+ICsJCQlpZiAoIXRzaykKPiArCQkJ CWNvbnRpbnVlOwo+ICsKPiArCQkJZXJyID0ga3RocmVhZF9zdG9wKHRzayk7Cj4gKwkJCWlmIChl cnIgPCAwICYmICFyZXQpCj4gKwkJCQlyZXQgPSBlcnI7Cj4gKwo+ICsJCQlwdXRfdGFza19zdHJ1 Y3QodHNrKTsKPiArCQl9Cj4gKwo+ICsJCW51bV93YWl0cyArPSBhdG9taWNfbG9uZ19yZWFkKCZ0 W2lkXS5udW1fd2FpdHMpOwo+ICsJCW51bV9mZW5jZXMgKz0gYXRvbWljX2xvbmdfcmVhZCgmdFtp ZF0ubnVtX2ZlbmNlcyk7Cj4gKwl9Cj4gKwlwcl9pbmZvKCJDb21wbGV0ZWQgJWx1IHdhaXRzIGZv ciAlbHUgZmVuY2VzIGFjcm9zcyAlZCBlbmdpbmVzIGFuZCAlZCBjcHVzXG4iLAo+ICsJCW51bV93 YWl0cywgbnVtX2ZlbmNlcywgUlVOVElNRV9JTkZPKGk5MTUpLT5udW1fcmluZ3MsIG5jcHVzKTsK PiArCj4gKwltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCXJldCA9IGln dF9saXZlX3Rlc3RfZW5kKCZsaXZlKSA/OiByZXQ7Cj4gK291dF9jb250ZXh0czoKPiArCW11dGV4 X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwlrZnJlZSh0WzBdLmNvbnRleHRz KTsKPiArb3V0X3RocmVhZHM6Cj4gKwlrZnJlZSh0aHJlYWRzKTsKPiArb3V0X2ZpbGU6Cj4gKwlt b2NrX2ZpbGVfZnJlZShpOTE1LCBmaWxlKTsKPiArb3V0X3JwbToKPiArCWludGVsX3J1bnRpbWVf cG1fcHV0KGk5MTUsIHdha2VyZWYpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gICBp bnQgaTkxNV9yZXF1ZXN0X2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KQo+ICAgewo+ICAgCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10g PSB7Cj4gQEAgLTgxOSw2ICsxMjQzLDcgQEAgaW50IGk5MTVfcmVxdWVzdF9saXZlX3NlbGZ0ZXN0 cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIAkJU1VCVEVTVChsaXZlX2FsbF9l bmdpbmVzKSwKPiAgIAkJU1VCVEVTVChsaXZlX3NlcXVlbnRpYWxfZW5naW5lcyksCj4gICAJCVNV QlRFU1QobGl2ZV9lbXB0eV9yZXF1ZXN0KSwKPiArCQlTVUJURVNUKGxpdmVfYnJlYWRjcnVtYnNf c21va2V0ZXN0KSwKPiAgIAl9Owo+ICAgCj4gICAJaWYgKGk5MTVfdGVybWluYWxseV93ZWRnZWQo Jmk5MTUtPmdwdV9lcnJvcikpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Nl bGZ0ZXN0cy9pZ3Rfc3Bpbm5lci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ln dF9zcGlubmVyLmMKPiBpbmRleCAwZTcwZGYwMjMwYjguLjllYmQ5MjI1Njg0ZSAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaWd0X3NwaW5uZXIuYwo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pZ3Rfc3Bpbm5lci5jCj4gQEAgLTE4NSwx MSArMTg1LDYgQEAgdm9pZCBpZ3Rfc3Bpbm5lcl9maW5pKHN0cnVjdCBpZ3Rfc3Bpbm5lciAqc3Bp bikKPiAgIAo+ICAgYm9vbCBpZ3Rfd2FpdF9mb3Jfc3Bpbm5lcihzdHJ1Y3QgaWd0X3NwaW5uZXIg KnNwaW4sIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ICAgewo+IC0JaWYgKCF3YWl0X2V2ZW50 X3RpbWVvdXQocnEtPmV4ZWN1dGUsCj4gLQkJCQlSRUFEX09OQ0UocnEtPmdsb2JhbF9zZXFubyks Cj4gLQkJCQltc2Vjc190b19qaWZmaWVzKDEwKSkpCj4gLQkJcmV0dXJuIGZhbHNlOwo+IC0KPiAg IAlyZXR1cm4gISh3YWl0X2Zvcl91cyhpOTE1X3NlcW5vX3Bhc3NlZChod3Nfc2Vxbm8oc3Bpbiwg cnEpLAo+ICAgCQkJCQkgICAgICAgcnEtPmZlbmNlLnNlcW5vKSwKPiAgIAkJCSAgICAgMTApICYm Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9icmVh ZGNydW1icy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2JyZWFkY3J1 bWJzLmMKPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCBmMDNiNDA3ZmRiZTIuLjAw MDAwMDAwMDAwMAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9i cmVhZGNydW1icy5jCj4gKysrIC9kZXYvbnVsbAo+IEBAIC0xLDQ3MCArMCwwIEBACj4gLS8qCj4g LSAqIENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uCj4gLSAqCj4gLSAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCj4gLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gLSAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K PiAtICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+IC0gKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ogo+IC0gKgo+IC0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUg aW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiAt ICogU29mdHdhcmUuCj4gLSAqCj4gLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gLSAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAo+IC0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiAtICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiAt ICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsIEFSSVNJTkcKPiAtICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+IC0gKiBJTiBUSEUg U09GVFdBUkUuCj4gLSAqCj4gLSAqLwo+IC0KPiAtI2luY2x1ZGUgIi4uL2k5MTVfc2VsZnRlc3Qu aCIKPiAtI2luY2x1ZGUgImk5MTVfcmFuZG9tLmgiCj4gLQo+IC0jaW5jbHVkZSAibW9ja19nZW1f ZGV2aWNlLmgiCj4gLSNpbmNsdWRlICJtb2NrX2VuZ2luZS5oIgo+IC0KPiAtc3RhdGljIGludCBj aGVja19yYnRyZWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0JCQljb25zdCB1 bnNpZ25lZCBsb25nICpiaXRtYXAsCj4gLQkJCWNvbnN0IHN0cnVjdCBpbnRlbF93YWl0ICp3YWl0 ZXJzLAo+IC0JCQljb25zdCBpbnQgY291bnQpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9icmVhZGNy dW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJzOwo+IC0Jc3RydWN0IHJiX25vZGUgKnJiOwo+ IC0JaW50IG47Cj4gLQo+IC0JaWYgKCZiLT5pcnFfd2FpdC0+bm9kZSAhPSByYl9maXJzdCgmYi0+ d2FpdGVycykpIHsKPiAtCQlwcl9lcnIoIkZpcnN0IHdhaXRlciBkb2VzIG5vdCBtYXRjaCBmaXJz dCBlbGVtZW50IG9mIHdhaXQtdHJlZVxuIik7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4g LQo+IC0JbiA9IGZpbmRfZmlyc3RfYml0KGJpdG1hcCwgY291bnQpOwo+IC0JZm9yIChyYiA9IHJi X2ZpcnN0KCZiLT53YWl0ZXJzKTsgcmI7IHJiID0gcmJfbmV4dChyYikpIHsKPiAtCQlzdHJ1Y3Qg aW50ZWxfd2FpdCAqdyA9IGNvbnRhaW5lcl9vZihyYiwgdHlwZW9mKCp3KSwgbm9kZSk7Cj4gLQkJ aW50IGlkeCA9IHcgLSB3YWl0ZXJzOwo+IC0KPiAtCQlpZiAoIXRlc3RfYml0KGlkeCwgYml0bWFw KSkgewo+IC0JCQlwcl9lcnIoIndhaXRlclslZCwgc2Vxbm89JWRdIHJlbW92ZWQgYnV0IHN0aWxs IGluIHdhaXQtdHJlZVxuIiwKPiAtCQkJICAgICAgIGlkeCwgdy0+c2Vxbm8pOwo+IC0JCQlyZXR1 cm4gLUVJTlZBTDsKPiAtCQl9Cj4gLQo+IC0JCWlmIChuICE9IGlkeCkgewo+IC0JCQlwcl9lcnIo IndhaXRlclslZCwgc2Vxbm89JWRdIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIG5leHQgZWxlbWVu dCBpbiB0cmVlIFslZF1cbiIsCj4gLQkJCSAgICAgICBpZHgsIHctPnNlcW5vLCBuKTsKPiAtCQkJ cmV0dXJuIC1FSU5WQUw7Cj4gLQkJfQo+IC0KPiAtCQluID0gZmluZF9uZXh0X2JpdChiaXRtYXAs IGNvdW50LCBuICsgMSk7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRp YyBpbnQgY2hlY2tfY29tcGxldGlvbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4g LQkJCSAgICBjb25zdCB1bnNpZ25lZCBsb25nICpiaXRtYXAsCj4gLQkJCSAgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfd2FpdCAqd2FpdGVycywKPiAtCQkJICAgIGNvbnN0IGludCBjb3VudCkKPiAtewo+ IC0JaW50IG47Cj4gLQo+IC0JZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKPiAtCQlpZiAo aW50ZWxfd2FpdF9jb21wbGV0ZSgmd2FpdGVyc1tuXSkgIT0gISF0ZXN0X2JpdChuLCBiaXRtYXAp KQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJcHJfZXJyKCJ3YWl0ZXJbJWQsIHNlcW5vPSVkXSBp cyAlcywgYnV0IGV4cGVjdGVkICVzXG4iLAo+IC0JCSAgICAgICBuLCB3YWl0ZXJzW25dLnNlcW5v LAo+IC0JCSAgICAgICBpbnRlbF93YWl0X2NvbXBsZXRlKCZ3YWl0ZXJzW25dKSA/ICJjb21wbGV0 ZSIgOiAiYWN0aXZlIiwKPiAtCQkgICAgICAgdGVzdF9iaXQobiwgYml0bWFwKSA/ICJhY3RpdmUi IDogImNvbXBsZXRlIik7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJu IDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgY2hlY2tfcmJ0cmVlX2VtcHR5KHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAtewo+IC0Jc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpi ID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7Cj4gLQo+IC0JaWYgKGItPmlycV93YWl0KSB7Cj4gLQkJ cHJfZXJyKCJFbXB0eSBicmVhZGNydW1icyBzdGlsbCBoYXMgYSB3YWl0ZXJcbiIpOwo+IC0JCXJl dHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCWlmICghUkJfRU1QVFlfUk9PVCgmYi0+d2FpdGVy cykpIHsKPiAtCQlwcl9lcnIoIkVtcHR5IGJyZWFkY3J1bWJzLCBidXQgd2FpdC10cmVlIG5vdCBl bXB0eVxuIik7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4g LX0KPiAtCj4gLXN0YXRpYyBpbnQgaWd0X3JhbmRvbV9pbnNlcnRfcmVtb3ZlKHZvaWQgKmFyZykK PiAtewo+IC0JY29uc3QgdTMyIHNlcW5vX2JpYXMgPSAweDEwMDA7Cj4gLQlJOTE1X1JORF9TVEFU RShwcm5nKTsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IGFyZzsKPiAtCXN0 cnVjdCBpbnRlbF93YWl0ICp3YWl0ZXJzOwo+IC0JY29uc3QgaW50IGNvdW50ID0gNDA5NjsKPiAt CXVuc2lnbmVkIGludCAqb3JkZXI7Cj4gLQl1bnNpZ25lZCBsb25nICpiaXRtYXA7Cj4gLQlpbnQg ZXJyID0gLUVOT01FTTsKPiAtCWludCBuOwo+IC0KPiAtCW1vY2tfZW5naW5lX3Jlc2V0KGVuZ2lu ZSk7Cj4gLQo+IC0Jd2FpdGVycyA9IGt2bWFsbG9jX2FycmF5KGNvdW50LCBzaXplb2YoKndhaXRl cnMpLCBHRlBfS0VSTkVMKTsKPiAtCWlmICghd2FpdGVycykKPiAtCQlnb3RvIG91dF9lbmdpbmVz Owo+IC0KPiAtCWJpdG1hcCA9IGtjYWxsb2MoRElWX1JPVU5EX1VQKGNvdW50LCBCSVRTX1BFUl9M T05HKSwgc2l6ZW9mKCpiaXRtYXApLAo+IC0JCQkgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIWJpdG1h cCkKPiAtCQlnb3RvIG91dF93YWl0ZXJzOwo+IC0KPiAtCW9yZGVyID0gaTkxNV9yYW5kb21fb3Jk ZXIoY291bnQsICZwcm5nKTsKPiAtCWlmICghb3JkZXIpCj4gLQkJZ290byBvdXRfYml0bWFwOwo+ IC0KPiAtCWZvciAobiA9IDA7IG4gPCBjb3VudDsgbisrKQo+IC0JCWludGVsX3dhaXRfaW5pdF9m b3Jfc2Vxbm8oJndhaXRlcnNbbl0sIHNlcW5vX2JpYXMgKyBuKTsKPiAtCj4gLQllcnIgPSBjaGVj a19yYnRyZWUoZW5naW5lLCBiaXRtYXAsIHdhaXRlcnMsIGNvdW50KTsKPiAtCWlmIChlcnIpCj4g LQkJZ290byBvdXRfb3JkZXI7Cj4gLQo+IC0JLyogQWRkIGFuZCByZW1vdmUgd2FpdGVycyBpbnRv IHRoZSByYnRyZWUgaW4gcmFuZG9tIG9yZGVyLiBBdCBlYWNoCj4gLQkgKiBzdGVwLCB3ZSB2ZXJp ZnkgdGhhdCB0aGUgcmJ0cmVlIGlzIGNvcnJlY3RseSBvcmRlcmVkLgo+IC0JICovCj4gLQlmb3Ig KG4gPSAwOyBuIDwgY291bnQ7IG4rKykgewo+IC0JCWludCBpID0gb3JkZXJbbl07Cj4gLQo+IC0J CWludGVsX2VuZ2luZV9hZGRfd2FpdChlbmdpbmUsICZ3YWl0ZXJzW2ldKTsKPiAtCQlfX3NldF9i aXQoaSwgYml0bWFwKTsKPiAtCj4gLQkJZXJyID0gY2hlY2tfcmJ0cmVlKGVuZ2luZSwgYml0bWFw LCB3YWl0ZXJzLCBjb3VudCk7Cj4gLQkJaWYgKGVycikKPiAtCQkJZ290byBvdXRfb3JkZXI7Cj4g LQl9Cj4gLQo+IC0JaTkxNV9yYW5kb21fcmVvcmRlcihvcmRlciwgY291bnQsICZwcm5nKTsKPiAt CWZvciAobiA9IDA7IG4gPCBjb3VudDsgbisrKSB7Cj4gLQkJaW50IGkgPSBvcmRlcltuXTsKPiAt Cj4gLQkJaW50ZWxfZW5naW5lX3JlbW92ZV93YWl0KGVuZ2luZSwgJndhaXRlcnNbaV0pOwo+IC0J CV9fY2xlYXJfYml0KGksIGJpdG1hcCk7Cj4gLQo+IC0JCWVyciA9IGNoZWNrX3JidHJlZShlbmdp bmUsIGJpdG1hcCwgd2FpdGVycywgY291bnQpOwo+IC0JCWlmIChlcnIpCj4gLQkJCWdvdG8gb3V0 X29yZGVyOwo+IC0JfQo+IC0KPiAtCWVyciA9IGNoZWNrX3JidHJlZV9lbXB0eShlbmdpbmUpOwo+ IC1vdXRfb3JkZXI6Cj4gLQlrZnJlZShvcmRlcik7Cj4gLW91dF9iaXRtYXA6Cj4gLQlrZnJlZShi aXRtYXApOwo+IC1vdXRfd2FpdGVyczoKPiAtCWt2ZnJlZSh3YWl0ZXJzKTsKPiAtb3V0X2VuZ2lu ZXM6Cj4gLQltb2NrX2VuZ2luZV9mbHVzaChlbmdpbmUpOwo+IC0JcmV0dXJuIGVycjsKPiAtfQo+ IC0KPiAtc3RhdGljIGludCBpZ3RfaW5zZXJ0X2NvbXBsZXRlKHZvaWQgKmFyZykKPiAtewo+IC0J Y29uc3QgdTMyIHNlcW5vX2JpYXMgPSAweDEwMDA7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUgPSBhcmc7Cj4gLQlzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdGVyczsKPiAtCWNvbnN0 IGludCBjb3VudCA9IDQwOTY7Cj4gLQl1bnNpZ25lZCBsb25nICpiaXRtYXA7Cj4gLQlpbnQgZXJy ID0gLUVOT01FTTsKPiAtCWludCBuLCBtOwo+IC0KPiAtCW1vY2tfZW5naW5lX3Jlc2V0KGVuZ2lu ZSk7Cj4gLQo+IC0Jd2FpdGVycyA9IGt2bWFsbG9jX2FycmF5KGNvdW50LCBzaXplb2YoKndhaXRl cnMpLCBHRlBfS0VSTkVMKTsKPiAtCWlmICghd2FpdGVycykKPiAtCQlnb3RvIG91dF9lbmdpbmVz Owo+IC0KPiAtCWJpdG1hcCA9IGtjYWxsb2MoRElWX1JPVU5EX1VQKGNvdW50LCBCSVRTX1BFUl9M T05HKSwgc2l6ZW9mKCpiaXRtYXApLAo+IC0JCQkgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIWJpdG1h cCkKPiAtCQlnb3RvIG91dF93YWl0ZXJzOwo+IC0KPiAtCWZvciAobiA9IDA7IG4gPCBjb3VudDsg bisrKSB7Cj4gLQkJaW50ZWxfd2FpdF9pbml0X2Zvcl9zZXFubygmd2FpdGVyc1tuXSwgbiArIHNl cW5vX2JpYXMpOwo+IC0JCWludGVsX2VuZ2luZV9hZGRfd2FpdChlbmdpbmUsICZ3YWl0ZXJzW25d KTsKPiAtCQlfX3NldF9iaXQobiwgYml0bWFwKTsKPiAtCX0KPiAtCWVyciA9IGNoZWNrX3JidHJl ZShlbmdpbmUsIGJpdG1hcCwgd2FpdGVycywgY291bnQpOwo+IC0JaWYgKGVycikKPiAtCQlnb3Rv IG91dF9iaXRtYXA7Cj4gLQo+IC0JLyogT24gZWFjaCBzdGVwLCB3ZSBhZHZhbmNlIHRoZSBzZXFu byBzbyB0aGF0IHNldmVyYWwgd2FpdGVycyBhcmUgdGhlbgo+IC0JICogY29tcGxldGUgKHdlIGlu Y3JlYXNlIHRoZSBzZXFubyBieSBpbmNyZWFzaW5nbHkgbGFyZ2VyIHZhbHVlcyB0bwo+IC0JICog cmV0aXJlIG1vcmUgYW5kIG1vcmUgd2FpdGVycyBhdCBvbmNlKS4gQWxsIHJldGlyZWQgd2FpdGVy cyBzaG91bGQKPiAtCSAqIGJlIHdva2VuIGFuZCByZW1vdmVkIGZyb20gdGhlIHJidHJlZSwgYW5k IHNvIHRoYXQgd2UgY2hlY2suCj4gLQkgKi8KPiAtCWZvciAobiA9IDA7IG4gPCBjb3VudDsgbiA9 IG0pIHsKPiAtCQlpbnQgc2Vxbm8gPSAyICogbjsKPiAtCj4gLQkJR0VNX0JVR19PTihmaW5kX2Zp cnN0X2JpdChiaXRtYXAsIGNvdW50KSAhPSBuKTsKPiAtCj4gLQkJaWYgKGludGVsX3dhaXRfY29t cGxldGUoJndhaXRlcnNbbl0pKSB7Cj4gLQkJCXByX2Vycigid2FpdGVyWyVkLCBzZXFubz0lZF0g Y29tcGxldGVkIHRvbyBlYXJseVxuIiwKPiAtCQkJICAgICAgIG4sIHdhaXRlcnNbbl0uc2Vxbm8p Owo+IC0JCQllcnIgPSAtRUlOVkFMOwo+IC0JCQlnb3RvIG91dF9iaXRtYXA7Cj4gLQkJfQo+IC0K PiAtCQkvKiBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHdhaXRlcnMgKi8KPiAtCQltb2NrX3NlcW5v X2FkdmFuY2UoZW5naW5lLCBzZXFubyArIHNlcW5vX2JpYXMpOwo+IC0JCWZvciAobSA9IG47IG0g PD0gc2Vxbm87IG0rKykgewo+IC0JCQlpZiAobSA9PSBjb3VudCkKPiAtCQkJCWJyZWFrOwo+IC0K PiAtCQkJR0VNX0JVR19PTighdGVzdF9iaXQobSwgYml0bWFwKSk7Cj4gLQkJCV9fY2xlYXJfYml0 KG0sIGJpdG1hcCk7Cj4gLQkJfQo+IC0KPiAtCQlpbnRlbF9lbmdpbmVfcmVtb3ZlX3dhaXQoZW5n aW5lLCAmd2FpdGVyc1tuXSk7Cj4gLQkJUkJfQ0xFQVJfTk9ERSgmd2FpdGVyc1tuXS5ub2RlKTsK PiAtCj4gLQkJZXJyID0gY2hlY2tfcmJ0cmVlKGVuZ2luZSwgYml0bWFwLCB3YWl0ZXJzLCBjb3Vu dCk7Cj4gLQkJaWYgKGVycikgewo+IC0JCQlwcl9lcnIoInJidHJlZSBjb3JydXB0IGFmdGVyIHNl cW5vIGFkdmFuY2UgdG8gJWRcbiIsCj4gLQkJCSAgICAgICBzZXFubyArIHNlcW5vX2JpYXMpOwo+ IC0JCQlnb3RvIG91dF9iaXRtYXA7Cj4gLQkJfQo+IC0KPiAtCQllcnIgPSBjaGVja19jb21wbGV0 aW9uKGVuZ2luZSwgYml0bWFwLCB3YWl0ZXJzLCBjb3VudCk7Cj4gLQkJaWYgKGVycikgewo+IC0J CQlwcl9lcnIoImNvbXBsZXRpb25zIGFmdGVyIHNlcW5vIGFkdmFuY2UgdG8gJWQgZmFpbGVkXG4i LAo+IC0JCQkgICAgICAgc2Vxbm8gKyBzZXFub19iaWFzKTsKPiAtCQkJZ290byBvdXRfYml0bWFw Owo+IC0JCX0KPiAtCX0KPiAtCj4gLQllcnIgPSBjaGVja19yYnRyZWVfZW1wdHkoZW5naW5lKTsK PiAtb3V0X2JpdG1hcDoKPiAtCWtmcmVlKGJpdG1hcCk7Cj4gLW91dF93YWl0ZXJzOgo+IC0Ja3Zm cmVlKHdhaXRlcnMpOwo+IC1vdXRfZW5naW5lczoKPiAtCW1vY2tfZW5naW5lX2ZsdXNoKGVuZ2lu ZSk7Cj4gLQlyZXR1cm4gZXJyOwo+IC19Cj4gLQo+IC1zdHJ1Y3QgaWd0X3dha2V1cCB7Cj4gLQlz dHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKPiAtCWF0b21pY190ICpyZWFkeSwgKnNldCwgKmRvbmU7 Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gLQl1bnNpZ25lZCBsb25nIGZs YWdzOwo+IC0jZGVmaW5lIFNUT1AgMAo+IC0jZGVmaW5lIElETEUgMQo+IC0Jd2FpdF9xdWV1ZV9o ZWFkX3QgKndxOwo+IC0JdTMyIHNlcW5vOwo+IC19Owo+IC0KPiAtc3RhdGljIGJvb2wgd2FpdF9m b3JfcmVhZHkoc3RydWN0IGlndF93YWtldXAgKncpCj4gLXsKPiAtCURFRklORV9XQUlUKHJlYWR5 KTsKPiAtCj4gLQlzZXRfYml0KElETEUsICZ3LT5mbGFncyk7Cj4gLQlpZiAoYXRvbWljX2RlY19h bmRfdGVzdCh3LT5kb25lKSkKPiAtCQl3YWtlX3VwX3Zhcih3LT5kb25lKTsKPiAtCj4gLQlpZiAo dGVzdF9iaXQoU1RPUCwgJnctPmZsYWdzKSkKPiAtCQlnb3RvIG91dDsKPiAtCj4gLQlmb3IgKDs7 KSB7Cj4gLQkJcHJlcGFyZV90b193YWl0KHctPndxLCAmcmVhZHksIFRBU0tfSU5URVJSVVBUSUJM RSk7Cj4gLQkJaWYgKGF0b21pY19yZWFkKHctPnJlYWR5KSA9PSAwKQo+IC0JCQlicmVhazsKPiAt Cj4gLQkJc2NoZWR1bGUoKTsKPiAtCX0KPiAtCWZpbmlzaF93YWl0KHctPndxLCAmcmVhZHkpOwo+ IC0KPiAtb3V0Ogo+IC0JY2xlYXJfYml0KElETEUsICZ3LT5mbGFncyk7Cj4gLQlpZiAoYXRvbWlj X2RlY19hbmRfdGVzdCh3LT5zZXQpKQo+IC0JCXdha2VfdXBfdmFyKHctPnNldCk7Cj4gLQo+IC0J cmV0dXJuICF0ZXN0X2JpdChTVE9QLCAmdy0+ZmxhZ3MpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50 IGlndF93YWtldXBfdGhyZWFkKHZvaWQgKmFyZykKPiAtewo+IC0Jc3RydWN0IGlndF93YWtldXAg KncgPSBhcmc7Cj4gLQlzdHJ1Y3QgaW50ZWxfd2FpdCB3YWl0Owo+IC0KPiAtCXdoaWxlICh3YWl0 X2Zvcl9yZWFkeSh3KSkgewo+IC0JCUdFTV9CVUdfT04oa3RocmVhZF9zaG91bGRfc3RvcCgpKTsK PiAtCj4gLQkJaW50ZWxfd2FpdF9pbml0X2Zvcl9zZXFubygmd2FpdCwgdy0+c2Vxbm8pOwo+IC0J CWludGVsX2VuZ2luZV9hZGRfd2FpdCh3LT5lbmdpbmUsICZ3YWl0KTsKPiAtCQlmb3IgKDs7KSB7 Cj4gLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKPiAtCQkJaWYg KGk5MTVfc2Vxbm9fcGFzc2VkKGludGVsX2VuZ2luZV9nZXRfc2Vxbm8ody0+ZW5naW5lKSwKPiAt CQkJCQkgICAgICB3LT5zZXFubykpCj4gLQkJCQlicmVhazsKPiAtCj4gLQkJCWlmICh0ZXN0X2Jp dChTVE9QLCAmdy0+ZmxhZ3MpKSAvKiBlbWVyZ2VuY3kgZXNjYXBlICovCj4gLQkJCQlicmVhazsK PiAtCj4gLQkJCXNjaGVkdWxlKCk7Cj4gLQkJfQo+IC0JCWludGVsX2VuZ2luZV9yZW1vdmVfd2Fp dCh3LT5lbmdpbmUsICZ3YWl0KTsKPiAtCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklO Ryk7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGlndF93 YWtlX2FsbF9zeW5jKGF0b21pY190ICpyZWFkeSwKPiAtCQkJICAgICAgYXRvbWljX3QgKnNldCwK PiAtCQkJICAgICAgYXRvbWljX3QgKmRvbmUsCj4gLQkJCSAgICAgIHdhaXRfcXVldWVfaGVhZF90 ICp3cSwKPiAtCQkJICAgICAgaW50IGNvdW50KQo+IC17Cj4gLQlhdG9taWNfc2V0KHNldCwgY291 bnQpOwo+IC0JYXRvbWljX3NldChyZWFkeSwgMCk7Cj4gLQl3YWtlX3VwX2FsbCh3cSk7Cj4gLQo+ IC0Jd2FpdF92YXJfZXZlbnQoc2V0LCAhYXRvbWljX3JlYWQoc2V0KSk7Cj4gLQlhdG9taWNfc2V0 KHJlYWR5LCBjb3VudCk7Cj4gLQlhdG9taWNfc2V0KGRvbmUsIGNvdW50KTsKPiAtfQo+IC0KPiAt c3RhdGljIGludCBpZ3Rfd2FrZXVwKHZvaWQgKmFyZykKPiAtewo+IC0JSTkxNV9STkRfU1RBVEUo cHJuZyk7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSBhcmc7Cj4gLQlzdHJ1 Y3QgaWd0X3dha2V1cCAqd2FpdGVyczsKPiAtCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEX09OU1RB Q0sod3EpOwo+IC0JY29uc3QgaW50IGNvdW50ID0gNDA5NjsKPiAtCWNvbnN0IHUzMiBtYXhfc2Vx bm8gPSBjb3VudCAvIDQ7Cj4gLQlhdG9taWNfdCByZWFkeSwgc2V0LCBkb25lOwo+IC0JaW50IGVy ciA9IC1FTk9NRU07Cj4gLQlpbnQgbiwgc3RlcDsKPiAtCj4gLQltb2NrX2VuZ2luZV9yZXNldChl bmdpbmUpOwo+IC0KPiAtCXdhaXRlcnMgPSBrdm1hbGxvY19hcnJheShjb3VudCwgc2l6ZW9mKCp3 YWl0ZXJzKSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIXdhaXRlcnMpCj4gLQkJZ290byBvdXRfZW5n aW5lczsKPiAtCj4gLQkvKiBDcmVhdGUgYSBsYXJnZSBudW1iZXIgb2YgdGhyZWFkcywgZWFjaCB3 YWl0aW5nIG9uIGEgcmFuZG9tIHNlcW5vLgo+IC0JICogTXVsdGlwbGUgd2FpdGVycyB3aWxsIGJl IHdhaXRpbmcgZm9yIHRoZSBzYW1lIHNlcW5vLgo+IC0JICovCj4gLQlhdG9taWNfc2V0KCZyZWFk eSwgY291bnQpOwo+IC0JZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKPiAtCQl3YWl0ZXJz W25dLndxID0gJndxOwo+IC0JCXdhaXRlcnNbbl0ucmVhZHkgPSAmcmVhZHk7Cj4gLQkJd2FpdGVy c1tuXS5zZXQgPSAmc2V0Owo+IC0JCXdhaXRlcnNbbl0uZG9uZSA9ICZkb25lOwo+IC0JCXdhaXRl cnNbbl0uZW5naW5lID0gZW5naW5lOwo+IC0JCXdhaXRlcnNbbl0uZmxhZ3MgPSBCSVQoSURMRSk7 Cj4gLQo+IC0JCXdhaXRlcnNbbl0udHNrID0ga3RocmVhZF9ydW4oaWd0X3dha2V1cF90aHJlYWQs ICZ3YWl0ZXJzW25dLAo+IC0JCQkJCSAgICAgImk5MTUvaWd0OiVkIiwgbik7Cj4gLQkJaWYgKElT X0VSUih3YWl0ZXJzW25dLnRzaykpCj4gLQkJCWdvdG8gb3V0X3dhaXRlcnM7Cj4gLQo+IC0JCWdl dF90YXNrX3N0cnVjdCh3YWl0ZXJzW25dLnRzayk7Cj4gLQl9Cj4gLQo+IC0JZm9yIChzdGVwID0g MTsgc3RlcCA8PSBtYXhfc2Vxbm87IHN0ZXAgPDw9IDEpIHsKPiAtCQl1MzIgc2Vxbm87Cj4gLQo+ IC0JCS8qIFRoZSB3YWl0ZXIgdGhyZWFkcyBzdGFydCBwYXVzZWQgYXMgd2UgYXNzaWduIHRoZW0g YSByYW5kb20KPiAtCQkgKiBzZXFubyBhbmQgcmVzZXQgdGhlIGVuZ2luZS4gT25jZSB0aGUgZW5n aW5lIGlzIHJlc2V0LAo+IC0JCSAqIHdlIHNpZ25hbCB0aGF0IHRoZSB0aHJlYWRzIG1heSBiZWdp biB0aGVpciB3YWl0IHVwb24gdGhlaXIKPiAtCQkgKiBzZXFuby4KPiAtCQkgKi8KPiAtCQlmb3Ig KG4gPSAwOyBuIDwgY291bnQ7IG4rKykgewo+IC0JCQlHRU1fQlVHX09OKCF0ZXN0X2JpdChJRExF LCAmd2FpdGVyc1tuXS5mbGFncykpOwo+IC0JCQl3YWl0ZXJzW25dLnNlcW5vID0KPiAtCQkJCTEg KyBwcmFuZG9tX3UzMl9zdGF0ZSgmcHJuZykgJSBtYXhfc2Vxbm87Cj4gLQkJfQo+IC0JCW1vY2tf c2Vxbm9fYWR2YW5jZShlbmdpbmUsIDApOwo+IC0JCWlndF93YWtlX2FsbF9zeW5jKCZyZWFkeSwg JnNldCwgJmRvbmUsICZ3cSwgY291bnQpOwo+IC0KPiAtCQkvKiBTaW11bGF0ZSB0aGUgR1BVIGRv aW5nIGNodW5rcyBvZiB3b3JrLCB3aXRoIG9uZSBvciBtb3JlCj4gLQkJICogc2Vxbm8gYXBwZWFy aW5nIHRvIGZpbmlzaCBhdCB0aGUgc2FtZSB0aW1lLiBBIHJhbmRvbSBudW1iZXIKPiAtCQkgKiBv ZiB0aHJlYWRzIHdpbGwgYmUgd2FpdGluZyB1cG9uIHRoZSB1cGRhdGUgYW5kIGhvcGVmdWxseSBi ZQo+IC0JCSAqIHdva2VuLgo+IC0JCSAqLwo+IC0JCWZvciAoc2Vxbm8gPSAxOyBzZXFubyA8PSBt YXhfc2Vxbm8gKyBzdGVwOyBzZXFubyArPSBzdGVwKSB7Cj4gLQkJCXVzbGVlcF9yYW5nZSg1MCwg NTAwKTsKPiAtCQkJbW9ja19zZXFub19hZHZhbmNlKGVuZ2luZSwgc2Vxbm8pOwo+IC0JCX0KPiAt CQlHRU1fQlVHX09OKGludGVsX2VuZ2luZV9nZXRfc2Vxbm8oZW5naW5lKSA8IDEgKyBtYXhfc2Vx bm8pOwo+IC0KPiAtCQkvKiBXaXRoIHRoZSBzZXFubyBub3cgYmV5b25kIGFueSBvZiB0aGUgd2Fp dGluZyB0aHJlYWRzLCB0aGV5Cj4gLQkJICogc2hvdWxkIGFsbCBiZSB3b2tlbiwgc2VlIHRoYXQg dGhleSBhcmUgY29tcGxldGUgYW5kIHNpZ25hbAo+IC0JCSAqIHRoYXQgdGhleSBhcmUgcmVhZHkg Zm9yIHRoZSBuZXh0IHRlc3QuIFdlIHdhaXQgdW50aWwgYWxsCj4gLQkJICogdGhyZWFkcyBhcmUg Y29tcGxldGUgYW5kIHdhaXRpbmcgZm9yIHVzIChpLmUuIG5vdCBhIHNlcW5vKS4KPiAtCQkgKi8K PiAtCQlpZiAoIXdhaXRfdmFyX2V2ZW50X3RpbWVvdXQoJmRvbmUsCj4gLQkJCQkJICAgICFhdG9t aWNfcmVhZCgmZG9uZSksIDEwICogSFopKSB7Cj4gLQkJCXByX2VycigiVGltZWQgb3V0IHdhaXRp bmcgZm9yICVkIHJlbWFpbmluZyB3YWl0ZXJzXG4iLAo+IC0JCQkgICAgICAgYXRvbWljX3JlYWQo JmRvbmUpKTsKPiAtCQkJZXJyID0gLUVUSU1FRE9VVDsKPiAtCQkJYnJlYWs7Cj4gLQkJfQo+IC0K PiAtCQllcnIgPSBjaGVja19yYnRyZWVfZW1wdHkoZW5naW5lKTsKPiAtCQlpZiAoZXJyKQo+IC0J CQlicmVhazsKPiAtCX0KPiAtCj4gLW91dF93YWl0ZXJzOgo+IC0JZm9yIChuID0gMDsgbiA8IGNv dW50OyBuKyspIHsKPiAtCQlpZiAoSVNfRVJSKHdhaXRlcnNbbl0udHNrKSkKPiAtCQkJYnJlYWs7 Cj4gLQo+IC0JCXNldF9iaXQoU1RPUCwgJndhaXRlcnNbbl0uZmxhZ3MpOwo+IC0JfQo+IC0JbW9j a19zZXFub19hZHZhbmNlKGVuZ2luZSwgSU5UX01BWCk7IC8qIHdha2V1cCBhbnkgYnJva2VuIHdh aXRlcnMgKi8KPiAtCWlndF93YWtlX2FsbF9zeW5jKCZyZWFkeSwgJnNldCwgJmRvbmUsICZ3cSwg bik7Cj4gLQo+IC0JZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKPiAtCQlpZiAoSVNfRVJS KHdhaXRlcnNbbl0udHNrKSkKPiAtCQkJYnJlYWs7Cj4gLQo+IC0JCWt0aHJlYWRfc3RvcCh3YWl0 ZXJzW25dLnRzayk7Cj4gLQkJcHV0X3Rhc2tfc3RydWN0KHdhaXRlcnNbbl0udHNrKTsKPiAtCX0K PiAtCj4gLQlrdmZyZWUod2FpdGVycyk7Cj4gLW91dF9lbmdpbmVzOgo+IC0JbW9ja19lbmdpbmVf Zmx1c2goZW5naW5lKTsKPiAtCXJldHVybiBlcnI7Cj4gLX0KPiAtCj4gLWludCBpbnRlbF9icmVh ZGNydW1ic19tb2NrX3NlbGZ0ZXN0cyh2b2lkKQo+IC17Cj4gLQlzdGF0aWMgY29uc3Qgc3RydWN0 IGk5MTVfc3VidGVzdCB0ZXN0c1tdID0gewo+IC0JCVNVQlRFU1QoaWd0X3JhbmRvbV9pbnNlcnRf cmVtb3ZlKSwKPiAtCQlTVUJURVNUKGlndF9pbnNlcnRfY29tcGxldGUpLAo+IC0JCVNVQlRFU1Qo aWd0X3dha2V1cCksCj4gLQl9Owo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4g LQlpbnQgZXJyOwo+IC0KPiAtCWk5MTUgPSBtb2NrX2dlbV9kZXZpY2UoKTsKPiAtCWlmICghaTkx NSkKPiAtCQlyZXR1cm4gLUVOT01FTTsKPiAtCj4gLQllcnIgPSBpOTE1X3N1YnRlc3RzKHRlc3Rz LCBpOTE1LT5lbmdpbmVbUkNTXSk7Cj4gLQlkcm1fZGV2X3B1dCgmaTkxNS0+ZHJtKTsKPiAtCj4g LQlyZXR1cm4gZXJyOwo+IC19Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Nl bGZ0ZXN0cy9pbnRlbF9oYW5nY2hlY2suYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0 cy9pbnRlbF9oYW5nY2hlY2suYwo+IGluZGV4IDJjMzhlYTU4OTJkOS4uN2I2ZjNiZWE5ZWY4IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9oYW5nY2hl Y2suYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9oYW5nY2hl Y2suYwo+IEBAIC0xMTI3LDcgKzExMjcsNyBAQCBzdGF0aWMgaW50IF9faWd0X3Jlc2V0X2V2aWN0 X3ZtYShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAgIAo+ICAgCXdhaXRfZm9yX2Nv bXBsZXRpb24oJmFyZy5jb21wbGV0aW9uKTsKPiAgIAo+IC0JaWYgKHdhaXRfZm9yKHdhaXRxdWV1 ZV9hY3RpdmUoJnJxLT5leGVjdXRlKSwgMTApKSB7Cj4gKwlpZiAod2FpdF9mb3IoIWxpc3RfZW1w dHkoJnJxLT5mZW5jZS5jYl9saXN0KSwgMTApKSB7Cj4gICAJCXN0cnVjdCBkcm1fcHJpbnRlciBw ID0gZHJtX2luZm9fcHJpbnRlcihpOTE1LT5kcm0uZGV2KTsKPiAgIAo+ICAgCQlwcl9lcnIoImln dC9ldmljdF92bWEga3RocmVhZCBkaWQgbm90IHdhaXRcbiIpOwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbGliX3N3X2ZlbmNlLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvbGliX3N3X2ZlbmNlLmMKPiBpbmRleCBiMjZmMDdiNTVkODYuLjJi ZmE3MmMxNjU0YiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv bGliX3N3X2ZlbmNlLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbGli X3N3X2ZlbmNlLmMKPiBAQCAtNzYsMyArNzYsNTcgQEAgdm9pZCB0aW1lZF9mZW5jZV9maW5pKHN0 cnVjdCB0aW1lZF9mZW5jZSAqdGYpCj4gICAJZGVzdHJveV90aW1lcl9vbl9zdGFjaygmdGYtPnRp bWVyKTsKPiAgIAlpOTE1X3N3X2ZlbmNlX2ZpbmkoJnRmLT5mZW5jZSk7Cj4gICB9Cj4gKwo+ICtz dHJ1Y3QgaGVhcF9mZW5jZSB7Cj4gKwlzdHJ1Y3QgaTkxNV9zd19mZW5jZSBmZW5jZTsKPiArCXVu aW9uIHsKPiArCQlzdHJ1Y3Qga3JlZiByZWY7Cj4gKwkJc3RydWN0IHJjdV9oZWFkIHJjdTsKPiAr CX07Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IF9faTkxNV9zd19mZW5jZV9jYWxsCj4gK2hlYXBf ZmVuY2Vfbm90aWZ5KHN0cnVjdCBpOTE1X3N3X2ZlbmNlICpmZW5jZSwgZW51bSBpOTE1X3N3X2Zl bmNlX25vdGlmeSBzdGF0ZSkKPiArewo+ICsJc3RydWN0IGhlYXBfZmVuY2UgKmggPSBjb250YWlu ZXJfb2YoZmVuY2UsIHR5cGVvZigqaCksIGZlbmNlKTsKPiArCj4gKwlzd2l0Y2ggKHN0YXRlKSB7 Cj4gKwljYXNlIEZFTkNFX0NPTVBMRVRFOgo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgRkVOQ0Vf RlJFRToKPiArCQloZWFwX2ZlbmNlX3B1dCgmaC0+ZmVuY2UpOwo+ICsJfQo+ICsKPiArCXJldHVy biBOT1RJRllfRE9ORTsKPiArfQo+ICsKPiArc3RydWN0IGk5MTVfc3dfZmVuY2UgKmhlYXBfZmVu Y2VfY3JlYXRlKGdmcF90IGdmcCkKPiArewo+ICsJc3RydWN0IGhlYXBfZmVuY2UgKmg7Cj4gKwo+ ICsJaCA9IGttYWxsb2Moc2l6ZW9mKCpoKSwgZ2ZwKTsKPiArCWlmICghaCkKPiArCQlyZXR1cm4g TlVMTDsKPiArCj4gKwlpOTE1X3N3X2ZlbmNlX2luaXQoJmgtPmZlbmNlLCBoZWFwX2ZlbmNlX25v dGlmeSk7Cj4gKwlyZWZjb3VudF9zZXQoJmgtPnJlZi5yZWZjb3VudCwgMik7Cj4gKwo+ICsJcmV0 dXJuICZoLT5mZW5jZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaGVhcF9mZW5jZV9yZWxlYXNl KHN0cnVjdCBrcmVmICpyZWYpCj4gK3sKPiArCXN0cnVjdCBoZWFwX2ZlbmNlICpoID0gY29udGFp bmVyX29mKHJlZiwgdHlwZW9mKCpoKSwgcmVmKTsKPiArCj4gKwlpOTE1X3N3X2ZlbmNlX2Zpbmko JmgtPmZlbmNlKTsKPiArCj4gKwlrZnJlZV9yY3UoaCwgcmN1KTsKPiArfQo+ICsKPiArdm9pZCBo ZWFwX2ZlbmNlX3B1dChzdHJ1Y3QgaTkxNV9zd19mZW5jZSAqZmVuY2UpCj4gK3sKPiArCXN0cnVj dCBoZWFwX2ZlbmNlICpoID0gY29udGFpbmVyX29mKGZlbmNlLCB0eXBlb2YoKmgpLCBmZW5jZSk7 Cj4gKwo+ICsJa3JlZl9wdXQoJmgtPnJlZiwgaGVhcF9mZW5jZV9yZWxlYXNlKTsKPiArfQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbGliX3N3X2ZlbmNlLmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbGliX3N3X2ZlbmNlLmgKPiBpbmRleCA0 NzRhYWZiOTJhZTEuLjFmOTkyN2UxMGYzYSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvbGliX3N3X2ZlbmNlLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9zZWxmdGVzdHMvbGliX3N3X2ZlbmNlLmgKPiBAQCAtMzksNCArMzksNyBAQCBzdHJ1Y3QgdGlt ZWRfZmVuY2Ugewo+ICAgdm9pZCB0aW1lZF9mZW5jZV9pbml0KHN0cnVjdCB0aW1lZF9mZW5jZSAq dGYsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcyk7Cj4gICB2b2lkIHRpbWVkX2ZlbmNlX2Zpbmkoc3Ry dWN0IHRpbWVkX2ZlbmNlICp0Zik7Cj4gICAKPiArc3RydWN0IGk5MTVfc3dfZmVuY2UgKmhlYXBf ZmVuY2VfY3JlYXRlKGdmcF90IGdmcCk7Cj4gK3ZvaWQgaGVhcF9mZW5jZV9wdXQoc3RydWN0IGk5 MTVfc3dfZmVuY2UgKmZlbmNlKTsKPiArCj4gICAjZW5kaWYgLyogX0xJQl9TV19GRU5DRV9IXyAq Lwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19lbmdp bmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2VuZ2luZS5jCj4gaW5k ZXggM2IyMjZlYmM2YmM0Li4wOGYwY2FiMDJlMGYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZW5naW5lLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvbW9ja19lbmdpbmUuYwo+IEBAIC04NiwxNyArODYsMjEgQEAgc3RhdGlj IHN0cnVjdCBtb2NrX3JlcXVlc3QgKmZpcnN0X3JlcXVlc3Qoc3RydWN0IG1vY2tfZW5naW5lICpl bmdpbmUpCj4gICBzdGF0aWMgdm9pZCBhZHZhbmNlKHN0cnVjdCBtb2NrX3JlcXVlc3QgKnJlcXVl c3QpCj4gICB7Cj4gICAJbGlzdF9kZWxfaW5pdCgmcmVxdWVzdC0+bGluayk7Cj4gLQltb2NrX3Nl cW5vX2FkdmFuY2UocmVxdWVzdC0+YmFzZS5lbmdpbmUsIHJlcXVlc3QtPmJhc2UuZ2xvYmFsX3Nl cW5vKTsKPiArCWludGVsX2VuZ2luZV93cml0ZV9nbG9iYWxfc2Vxbm8ocmVxdWVzdC0+YmFzZS5l bmdpbmUsCj4gKwkJCQkJcmVxdWVzdC0+YmFzZS5nbG9iYWxfc2Vxbm8pOwo+ICAgCWk5MTVfcmVx dWVzdF9tYXJrX2NvbXBsZXRlKCZyZXF1ZXN0LT5iYXNlKTsKPiAgIAlHRU1fQlVHX09OKCFpOTE1 X3JlcXVlc3RfY29tcGxldGVkKCZyZXF1ZXN0LT5iYXNlKSk7Cj4gKwo+ICsJaW50ZWxfZW5naW5l X3F1ZXVlX2JyZWFkY3J1bWJzKHJlcXVlc3QtPmJhc2UuZW5naW5lKTsKPiAgIH0KPiAgIAo+ICAg c3RhdGljIHZvaWQgaHdfZGVsYXlfY29tcGxldGUoc3RydWN0IHRpbWVyX2xpc3QgKnQpCj4gICB7 Cj4gICAJc3RydWN0IG1vY2tfZW5naW5lICplbmdpbmUgPSBmcm9tX3RpbWVyKGVuZ2luZSwgdCwg aHdfZGVsYXkpOwo+ICAgCXN0cnVjdCBtb2NrX3JlcXVlc3QgKnJlcXVlc3Q7Cj4gKwl1bnNpZ25l ZCBsb25nIGZsYWdzOwo+ICAgCj4gLQlzcGluX2xvY2soJmVuZ2luZS0+aHdfbG9jayk7Cj4gKwlz cGluX2xvY2tfaXJxc2F2ZSgmZW5naW5lLT5od19sb2NrLCBmbGFncyk7Cj4gICAKPiAgIAkvKiBU aW1lciBmaXJlZCwgZmlyc3QgcmVxdWVzdCBpcyBjb21wbGV0ZSAqLwo+ICAgCXJlcXVlc3QgPSBm aXJzdF9yZXF1ZXN0KGVuZ2luZSk7Cj4gQEAgLTExNiw3ICsxMjAsNyBAQCBzdGF0aWMgdm9pZCBo d19kZWxheV9jb21wbGV0ZShzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKPiAgIAkJYWR2YW5jZShyZXF1 ZXN0KTsKPiAgIAl9Cj4gICAKPiAtCXNwaW5fdW5sb2NrKCZlbmdpbmUtPmh3X2xvY2spOwo+ICsJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT5od19sb2NrLCBmbGFncyk7Cj4gICB9Cj4g ICAKPiAgIHN0YXRpYyB2b2lkIG1vY2tfY29udGV4dF91bnBpbihzdHJ1Y3QgaW50ZWxfY29udGV4 dCAqY2UpCj4gQEAgLTE5MSwxMSArMTk1LDEyIEBAIHN0YXRpYyB2b2lkIG1vY2tfc3VibWl0X3Jl cXVlc3Qoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCkKPiAgIAlzdHJ1Y3QgbW9ja19yZXF1 ZXN0ICptb2NrID0gY29udGFpbmVyX29mKHJlcXVlc3QsIHR5cGVvZigqbW9jayksIGJhc2UpOwo+ ICAgCXN0cnVjdCBtb2NrX2VuZ2luZSAqZW5naW5lID0KPiAgIAkJY29udGFpbmVyX29mKHJlcXVl c3QtPmVuZ2luZSwgdHlwZW9mKCplbmdpbmUpLCBiYXNlKTsKPiArCXVuc2lnbmVkIGxvbmcgZmxh Z3M7Cj4gICAKPiAgIAlpOTE1X3JlcXVlc3Rfc3VibWl0KHJlcXVlc3QpOwo+ICAgCUdFTV9CVUdf T04oIXJlcXVlc3QtPmdsb2JhbF9zZXFubyk7Cj4gICAKPiAtCXNwaW5fbG9ja19pcnEoJmVuZ2lu ZS0+aHdfbG9jayk7Cj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZW5naW5lLT5od19sb2NrLCBmbGFn cyk7Cj4gICAJbGlzdF9hZGRfdGFpbCgmbW9jay0+bGluaywgJmVuZ2luZS0+aHdfcXVldWUpOwo+ ICAgCWlmIChtb2NrLT5saW5rLnByZXYgPT0gJmVuZ2luZS0+aHdfcXVldWUpIHsKPiAgIAkJaWYg KG1vY2stPmRlbGF5KQo+IEBAIC0yMDMsNyArMjA4LDcgQEAgc3RhdGljIHZvaWQgbW9ja19zdWJt aXRfcmVxdWVzdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0KQo+ICAgCQllbHNlCj4gICAJ CQlhZHZhbmNlKG1vY2spOwo+ICAgCX0KPiAtCXNwaW5fdW5sb2NrX2lycSgmZW5naW5lLT5od19s b2NrKTsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+aHdfbG9jaywgZmxhZ3Mp Owo+ICAgfQo+ICAgCj4gICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICptb2NrX2VuZ2luZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiBAQCAtMjczLDcgKzI3OCw3IEBAIHZvaWQgbW9j a19lbmdpbmVfZmx1c2goc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgCj4gICB2 b2lkIG1vY2tfZW5naW5lX3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAg IHsKPiAtCWludGVsX3dyaXRlX3N0YXR1c19wYWdlKGVuZ2luZSwgSTkxNV9HRU1fSFdTX0lOREVY LCAwKTsKPiArCWludGVsX2VuZ2luZV93cml0ZV9nbG9iYWxfc2Vxbm8oZW5naW5lLCAwKTsKPiAg IH0KPiAgIAo+ICAgdm9pZCBtb2NrX2VuZ2luZV9mcmVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21v Y2tfZW5naW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19lbmdpbmUu aAo+IGluZGV4IDEzM2QwYzIxNzkwZC4uYjljYzNhMjQ1ZjE2IDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2VuZ2luZS5oCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZW5naW5lLmgKPiBAQCAtNDYsMTAgKzQ2LDQgQEAg dm9pZCBtb2NrX2VuZ2luZV9mbHVzaChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ ICAgdm9pZCBtb2NrX2VuZ2luZV9yZXNldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Owo+ICAgdm9pZCBtb2NrX2VuZ2luZV9mcmVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSk7Cj4gICAKPiAtc3RhdGljIGlubGluZSB2b2lkIG1vY2tfc2Vxbm9fYWR2YW5jZShzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiBzZXFubykKPiAtewo+IC0JaW50ZWxfd3JpdGVf c3RhdHVzX3BhZ2UoZW5naW5lLCBJOTE1X0dFTV9IV1NfSU5ERVgsIHNlcW5vKTsKPiAtCWludGVs X2VuZ2luZV93YWtldXAoZW5naW5lKTsKPiAtfQo+IC0KPiAgICNlbmRpZiAvKiAhX19NT0NLX0VO R0lORV9IX18gKi8KPiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4Cg==