From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 6/7] drm/i915: Pull all the reset functionality together into i915_reset.c Date: Wed, 11 Jul 2018 11:17:09 +0200 Message-ID: <20180711091709.GX3008@phenom.ffwll.local> References: <20180711073608.20286-1-chris@chris-wilson.co.uk> <20180711073608.20286-7-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id AC0D06EC04 for ; Wed, 11 Jul 2018 09:17:13 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id t3-v6so18662721eds.3 for ; Wed, 11 Jul 2018 02:17:13 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20180711073608.20286-7-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBKdWwgMTEsIDIwMTggYXQgMDg6MzY6MDdBTSArMDEwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IEN1cnJlbnRseSB0aGUgY29kZSB0byByZXNldCB0aGUgR1BVIGFuZCBvdXIgc3RhdGUg aXMgc3ByZWFkIHdpZGVseQo+IGFjcm9zcyBhIGZldyBmaWxlcy4gUHVsbCB0aGUgbG9naWMgdG9n ZXRoZXIgaW50byBhIGNvbW1vbiBmaWxlLgo+IAo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNv biA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgoKSG0gd2hlbiByZWFkaW5nIHRoZSBmZW5jZSBj b2RlIEknZCBzdWdnZXN0ZWQgbW9yZSB0byBtb3ZlIHRoZSByZXNldC9pbml0CmNvZGUgZm9yIGEg Z2l2ZW4gdG9waWMgKGxpa2UgZmVuY2VfcmVnKSBpbnRvIG9uZSBwbGFjZS4gSW1vIHRoYXQgbWFr ZXMKcmV2aWV3aW5nIGNoYW5nZXMgdG8gYSBzcGVjaWZpYyB0aGluZyBlYXNpZXIgYmVjYXVzZSBp dCdzIGFsbCBpbiBvbmUgZmlsZS4KCk9mYyBpdCBtYWtlcyBpdCBoYXJkZXIgdG8gcmV2aWV3IGxh cmdlLXNjYWxlIGZsb3dzIGxpa2Ugc3VzcGVuZC9yZXN1bWUgYW5kCmdwdSByZXNldCwgYnV0IEkg dGhpbmsgdGhlIG9ubHkgdGhpbmcgdGhhdCBjYW4gc2FmZSB1cyB0aGVyZSBpcyBsb3RzIGFuZAps b3RzIG9mIHJ1bnRpbWUgY29uc2lzdGVuY3kgY2hlY2tzIGZvciBlYWNoIGNvbXBvbmVudCAobG9j a2RlcCwKR0VNX0JVR19PTikuIFJldmlld2luZyB0aG9zZSBpcyBkb2FibGUsIGFuZCBmb3IgdGhl IGJpZyBwaWN0dXJlCkNJK3JlZ3JldHMuCgp0bGRyOyBub3Qgc3VyZSB0aGlzIGlzIHRoZSBiZXN0 IG9yZ2FuaXphdGlvbiB3ZSBjYW4gZG8uCi1EYW5pZWwKCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgIDMgKy0KPiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgICAgICAgICAgIHwgICAgMiArCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICAgICAgICAgICB8ICAyMDcgKy0tCj4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAgICAgICB8ICAgMzEgKy0KPiAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgICAgICAgIHwgIDQ2NSArLS0tLS0KPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyAgICAgICAgICAgICAgIHwgIDIyMCAtLS0K PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMgICAgICAgICAgIHwgICAgMSAr Cj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVzZXQuYyAgICAgICAgICAgICB8IDEyNzEg KysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXNldC5oICAg ICAgICAgICAgIHwgICAzNyArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXku YyAgICAgICAgICB8ICAgMTUgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmgg ICAgICAgICAgICAgIHwgICAgMyArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hhbmdj aGVjay5jICAgICAgICB8ICAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Yy5j ICAgICAgICAgICAgICAgfCAgICAxICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5j b3JlLmMgICAgICAgICAgIHwgIDQxNSAtLS0tLS0KPiAgLi4uL2RybS9pOTE1L3NlbGZ0ZXN0cy9p bnRlbF93b3JrYXJvdW5kcy5jICAgIHwgICAgMSArCj4gIDE1IGZpbGVzIGNoYW5nZWQsIDEzNDIg aW5zZXJ0aW9ucygrKSwgMTMzMSBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVzZXQuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXNldC5oCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBp bmRleCA1Nzk0ZjEwMmY5YjguLmQwOTc5OWU3OTg5MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxl Cj4gQEAgLTQwLDcgKzQwLDggQEAgaTkxNS15IDo9IGk5MTVfZHJ2Lm8gXAo+ICAJICBpOTE1X21t Lm8gXAo+ICAJICBpOTE1X3BhcmFtcy5vIFwKPiAgCSAgaTkxNV9wY2kubyBcCj4gLSAgICAgICAg ICBpOTE1X3N1c3BlbmQubyBcCj4gKwkgIGk5MTVfcmVzZXQubyBcCj4gKwkgIGk5MTVfc3VzcGVu ZC5vIFwKPiAgCSAgaTkxNV9zeW5jbWFwLm8gXAo+ICAJICBpOTE1X3N3X2ZlbmNlLm8gXAo+ICAJ ICBpOTE1X3N5c2ZzLm8gXAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gaW5kZXgg ZTJiYTI5OGE1ZDg4Li5hMGY1MTljNDQ0MTAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rl YnVnZnMuYwo+IEBAIC0zMiw2ICszMiw4IEBACj4gICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKPiAg I2luY2x1ZGUgImludGVsX2d1Y19zdWJtaXNzaW9uLmgiCj4gIAo+ICsjaW5jbHVkZSAiaTkxNV9y ZXNldC5oIgo+ICsKPiAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqbm9k ZV90b19pOTE1KHN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlKQo+ICB7Cj4gIAlyZXR1cm4gdG9f aTkxNShub2RlLT5taW5vci0+ZGV2KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiBpbmRleCA5 N2EyMDU0YzM4ZDQuLmZhM2I0MTQ0YTdmYSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+ IEBAIC00OSw2ICs0OSw3IEBACj4gICNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ICAjaW5jbHVkZSAi aTkxNV90cmFjZS5oIgo+ICAjaW5jbHVkZSAiaTkxNV9wbXUuaCIKPiArI2luY2x1ZGUgImk5MTVf cmVzZXQuaCIKPiAgI2luY2x1ZGUgImk5MTVfcXVlcnkuaCIKPiAgI2luY2x1ZGUgImk5MTVfdmdw dS5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCj4gQEAgLTE4NzgsMjEyICsxODc5LDYgQEAg c3RhdGljIGludCBpOTE1X3Jlc3VtZV9zd2l0Y2hlcm9vKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Cj4gIAlyZXR1cm4gaTkxNV9kcm1fcmVzdW1lKGRldik7Cj4gIH0KPiAgCj4gLS8qKgo+IC0gKiBp OTE1X3Jlc2V0IC0gcmVzZXQgY2hpcCBhZnRlciBhIGhhbmcKPiAtICogQGk5MTU6ICNkcm1faTkx NV9wcml2YXRlIHRvIHJlc2V0Cj4gLSAqIEBzdGFsbGVkX21hc2s6IG1hc2sgb2YgdGhlIHN0YWxs ZWQgZW5naW5lcyB3aXRoIHRoZSBndWlsdHkgcmVxdWVzdHMKPiAtICogQHJlYXNvbjogdXNlciBl cnJvciBtZXNzYWdlIGZvciB3aHkgd2UgYXJlIHJlc2V0dGluZwo+IC0gKgo+IC0gKiBSZXNldCB0 aGUgY2hpcC4gIFVzZWZ1bCBpZiBhIGhhbmcgaXMgZGV0ZWN0ZWQuIE1hcmtzIHRoZSBkZXZpY2Ug YXMgd2VkZ2VkCj4gLSAqIG9uIGZhaWx1cmUuCj4gLSAqCj4gLSAqIENhbGxlciBtdXN0IGhvbGQg dGhlIHN0cnVjdF9tdXRleC4KPiAtICoKPiAtICogUHJvY2VkdXJlIGlzIGZhaXJseSBzaW1wbGU6 Cj4gLSAqICAgLSByZXNldCB0aGUgY2hpcCB1c2luZyB0aGUgcmVzZXQgcmVnCj4gLSAqICAgLSBy ZS1pbml0IGNvbnRleHQgc3RhdGUKPiAtICogICAtIHJlLWluaXQgaGFyZHdhcmUgc3RhdHVzIHBh Z2UKPiAtICogICAtIHJlLWluaXQgcmluZyBidWZmZXIKPiAtICogICAtIHJlLWluaXQgaW50ZXJy dXB0IHN0YXRlCj4gLSAqICAgLSByZS1pbml0IGRpc3BsYXkKPiAtICovCj4gLXZvaWQgaTkxNV9y ZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAtCQl1bnNpZ25lZCBpbnQgc3Rh bGxlZF9tYXNrLAo+IC0JCWNvbnN0IGNoYXIgKnJlYXNvbikKPiAtewo+IC0Jc3RydWN0IGk5MTVf Z3B1X2Vycm9yICplcnJvciA9ICZpOTE1LT5ncHVfZXJyb3I7Cj4gLQlpbnQgcmV0Owo+IC0JaW50 IGk7Cj4gLQo+IC0JR0VNX1RSQUNFKCJmbGFncz0lbHhcbiIsIGVycm9yLT5mbGFncyk7Cj4gLQo+ IC0JbWlnaHRfc2xlZXAoKTsKPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOwo+IC0JR0VNX0JVR19PTighdGVzdF9iaXQoSTkxNV9SRVNFVF9CQUNLT0ZGLCAm ZXJyb3ItPmZsYWdzKSk7Cj4gLQo+IC0JaWYgKCF0ZXN0X2JpdChJOTE1X1JFU0VUX0hBTkRPRkYs ICZlcnJvci0+ZmxhZ3MpKQo+IC0JCXJldHVybjsKPiAtCj4gLQkvKiBDbGVhciBhbnkgcHJldmlv dXMgZmFpbGVkIGF0dGVtcHRzIGF0IHJlY292ZXJ5LiBUaW1lIHRvIHRyeSBhZ2Fpbi4gKi8KPiAt CWlmICghaTkxNV9nZW1fdW5zZXRfd2VkZ2VkKGk5MTUpKQo+IC0JCWdvdG8gd2FrZXVwOwo+IC0K PiAtCWlmIChyZWFzb24pCj4gLQkJZGV2X25vdGljZShpOTE1LT5kcm0uZGV2LCAiUmVzZXR0aW5n IGNoaXAgZm9yICVzXG4iLCByZWFzb24pOwo+IC0JZXJyb3ItPnJlc2V0X2NvdW50Kys7Cj4gLQo+ IC0JZGlzYWJsZV9pcnEoaTkxNS0+ZHJtLmlycSk7Cj4gLQlyZXQgPSBpOTE1X2dlbV9yZXNldF9w cmVwYXJlKGk5MTUpOwo+IC0JaWYgKHJldCkgewo+IC0JCWRldl9lcnIoaTkxNS0+ZHJtLmRldiwg IkdQVSByZWNvdmVyeSBmYWlsZWRcbiIpOwo+IC0JCWdvdG8gdGFpbnQ7Cj4gLQl9Cj4gLQo+IC0J aWYgKCFpbnRlbF9oYXNfZ3B1X3Jlc2V0KGk5MTUpKSB7Cj4gLQkJaWYgKGk5MTVfbW9kcGFyYW1z LnJlc2V0KQo+IC0JCQlkZXZfZXJyKGk5MTUtPmRybS5kZXYsICJHUFUgcmVzZXQgbm90IHN1cHBv cnRlZFxuIik7Cj4gLQkJZWxzZQo+IC0JCQlEUk1fREVCVUdfRFJJVkVSKCJHUFUgcmVzZXQgZGlz YWJsZWRcbiIpOwo+IC0JCWdvdG8gZXJyb3I7Cj4gLQl9Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8 IDM7IGkrKykgewo+IC0JCXJldCA9IGludGVsX2dwdV9yZXNldChpOTE1LCBBTExfRU5HSU5FUyk7 Cj4gLQkJaWYgKHJldCA9PSAwKQo+IC0JCQlicmVhazsKPiAtCj4gLQkJbXNsZWVwKDEwMCk7Cj4g LQl9Cj4gLQlpZiAocmV0KSB7Cj4gLQkJZGV2X2VycihpOTE1LT5kcm0uZGV2LCAiRmFpbGVkIHRv IHJlc2V0IGNoaXBcbiIpOwo+IC0JCWdvdG8gdGFpbnQ7Cj4gLQl9Cj4gLQo+IC0JLyogT2ssIG5v dyBnZXQgdGhpbmdzIGdvaW5nIGFnYWluLi4uICovCj4gLQo+IC0JLyoKPiAtCSAqIEV2ZXJ5dGhp bmcgZGVwZW5kcyBvbiBoYXZpbmcgdGhlIEdUVCBydW5uaW5nLCBzbyB3ZSBuZWVkIHRvIHN0YXJ0 Cj4gLQkgKiB0aGVyZS4KPiAtCSAqLwo+IC0JcmV0ID0gaTkxNV9nZ3R0X2VuYWJsZV9odyhpOTE1 KTsKPiAtCWlmIChyZXQpIHsKPiAtCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZS1lbmFibGUgR0dU VCBmb2xsb3dpbmcgcmVzZXQgKCVkKVxuIiwKPiAtCQkJICByZXQpOwo+IC0JCWdvdG8gZXJyb3I7 Cj4gLQl9Cj4gLQo+IC0JaTkxNV9nZW1fcmVzZXQoaTkxNSwgc3RhbGxlZF9tYXNrKTsKPiAtCWlu dGVsX292ZXJsYXlfcmVzZXQoaTkxNSk7Cj4gLQo+IC0JLyoKPiAtCSAqIE5leHQgd2UgbmVlZCB0 byByZXN0b3JlIHRoZSBjb250ZXh0LCBidXQgd2UgZG9uJ3QgdXNlIHRob3NlCj4gLQkgKiB5ZXQg ZWl0aGVyLi4uCj4gLQkgKgo+IC0JICogUmluZyBidWZmZXIgbmVlZHMgdG8gYmUgcmUtaW5pdGlh bGl6ZWQgaW4gdGhlIEtNUyBjYXNlLCBvciBpZiBYCj4gLQkgKiB3YXMgcnVubmluZyBhdCB0aGUg dGltZSBvZiB0aGUgcmVzZXQgKGkuZS4gd2Ugd2VyZW4ndCBWVAo+IC0JICogc3dpdGNoZWQgYXdh eSkuCj4gLQkgKi8KPiAtCXJldCA9IGk5MTVfZ2VtX2luaXRfaHcoaTkxNSk7Cj4gLQlpZiAocmV0 KSB7Cj4gLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGlzZSBIVyBmb2xsb3dpbmcgcmVz ZXQgKCVkKVxuIiwKPiAtCQkJICByZXQpOwo+IC0JCWdvdG8gZXJyb3I7Cj4gLQl9Cj4gLQo+IC0J aTkxNV9xdWV1ZV9oYW5nY2hlY2soaTkxNSk7Cj4gLQo+IC1maW5pc2g6Cj4gLQlpOTE1X2dlbV9y ZXNldF9maW5pc2goaTkxNSk7Cj4gLQllbmFibGVfaXJxKGk5MTUtPmRybS5pcnEpOwo+IC0KPiAt d2FrZXVwOgo+IC0JY2xlYXJfYml0KEk5MTVfUkVTRVRfSEFORE9GRiwgJmVycm9yLT5mbGFncyk7 Cj4gLQl3YWtlX3VwX2JpdCgmZXJyb3ItPmZsYWdzLCBJOTE1X1JFU0VUX0hBTkRPRkYpOwo+IC0J cmV0dXJuOwo+IC0KPiAtdGFpbnQ6Cj4gLQkvKgo+IC0JICogSGlzdG9yeSB0ZWxscyB1cyB0aGF0 IGlmIHdlIGNhbm5vdCByZXNldCB0aGUgR1BVIG5vdywgd2UKPiAtCSAqIG5ldmVyIHdpbGwuIFRo aXMgdGhlbiBpbXBhY3RzIGV2ZXJ5dGhpbmcgdGhhdCBpcyBydW4KPiAtCSAqIHN1YnNlcXVlbnRs eS4gT24gZmFpbGluZyB0aGUgcmVzZXQsIHdlIG1hcmsgdGhlIGRyaXZlcgo+IC0JICogYXMgd2Vk Z2VkLCBwcmV2ZW50aW5nIGZ1cnRoZXIgZXhlY3V0aW9uIG9uIHRoZSBHUFUuCj4gLQkgKiBXZSBh bHNvIHdhbnQgdG8gZ28gb25lIHN0ZXAgZnVydGhlciBhbmQgYWRkIGEgdGFpbnQgdG8gdGhlCj4g LQkgKiBrZXJuZWwgc28gdGhhdCBhbnkgc3Vic2VxdWVudCBmYXVsdHMgY2FuIGJlIHRyYWNlZCBi YWNrIHRvCj4gLQkgKiB0aGlzIGZhaWx1cmUuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBDSSwgd2hl cmUgaWYgdGhlCj4gLQkgKiBHUFUvZHJpdmVyIGZhaWxzIHdlIHdvdWxkIGxpa2UgdG8gcmVib290 IGFuZCByZXN0YXJ0IHRlc3RpbmcKPiAtCSAqIHJhdGhlciB0aGFuIGNvbnRpbnVlIG9uIGludG8g b2JsaXZpb24uIEZvciBldmVyeW9uZSBlbHNlLAo+IC0JICogdGhlIHN5c3RlbSBzaG91bGQgc3Rp bGwgcGxvZCBhbG9uZywgYnV0IHRoZXkgaGF2ZSBiZWVuIHdhcm5lZCEKPiAtCSAqLwo+IC0JYWRk X3RhaW50KFRBSU5UX1dBUk4sIExPQ0tERVBfU1RJTExfT0spOwo+IC1lcnJvcjoKPiAtCWk5MTVf Z2VtX3NldF93ZWRnZWQoaTkxNSk7Cj4gLQlpOTE1X3JldGlyZV9yZXF1ZXN0cyhpOTE1KTsKPiAt CWdvdG8gZmluaXNoOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIGludCBpbnRlbF9ndF9yZXNl dF9lbmdpbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkJCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAtewo+IC0JcmV0dXJuIGludGVsX2dwdV9yZXNl dChkZXZfcHJpdiwgaW50ZWxfZW5naW5lX2ZsYWcoZW5naW5lKSk7Cj4gLX0KPiAtCj4gLS8qKgo+ IC0gKiBpOTE1X3Jlc2V0X2VuZ2luZSAtIHJlc2V0IEdQVSBlbmdpbmUgdG8gcmVjb3ZlciBmcm9t IGEgaGFuZwo+IC0gKiBAZW5naW5lOiBlbmdpbmUgdG8gcmVzZXQKPiAtICogQG1zZzogcmVhc29u IGZvciBHUFUgcmVzZXQ7IG9yIE5VTEwgZm9yIG5vIGRldl9ub3RpY2UoKQo+IC0gKgo+IC0gKiBS ZXNldCBhIHNwZWNpZmljIEdQVSBlbmdpbmUuIFVzZWZ1bCBpZiBhIGhhbmcgaXMgZGV0ZWN0ZWQu Cj4gLSAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzZnVsIHJlc2V0IG9yIG90aGVyd2lzZSBhbiBl cnJvciBjb2RlLgo+IC0gKgo+IC0gKiBQcm9jZWR1cmUgaXM6Cj4gLSAqICAtIGlkZW50aWZpZXMg dGhlIHJlcXVlc3QgdGhhdCBjYXVzZWQgdGhlIGhhbmcgYW5kIGl0IGlzIGRyb3BwZWQKPiAtICog IC0gcmVzZXQgZW5naW5lICh3aGljaCB3aWxsIGZvcmNlIHRoZSBlbmdpbmUgdG8gaWRsZSkKPiAt ICogIC0gcmUtaW5pdC9jb25maWd1cmUgZW5naW5lCj4gLSAqLwo+IC1pbnQgaTkxNV9yZXNldF9l bmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBjb25zdCBjaGFyICptc2cpCj4g LXsKPiAtCXN0cnVjdCBpOTE1X2dwdV9lcnJvciAqZXJyb3IgPSAmZW5naW5lLT5pOTE1LT5ncHVf ZXJyb3I7Cj4gLQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICphY3RpdmVfcmVxdWVzdDsKPiAtCWludCBy ZXQ7Cj4gLQo+IC0JR0VNX1RSQUNFKCIlcyBmbGFncz0lbHhcbiIsIGVuZ2luZS0+bmFtZSwgZXJy b3ItPmZsYWdzKTsKPiAtCUdFTV9CVUdfT04oIXRlc3RfYml0KEk5MTVfUkVTRVRfRU5HSU5FICsg ZW5naW5lLT5pZCwgJmVycm9yLT5mbGFncykpOwo+IC0KPiAtCWFjdGl2ZV9yZXF1ZXN0ID0gaTkx NV9nZW1fcmVzZXRfcHJlcGFyZV9lbmdpbmUoZW5naW5lKTsKPiAtCWlmIChJU19FUlJfT1JfTlVM TChhY3RpdmVfcmVxdWVzdCkpIHsKPiAtCQkvKiBFaXRoZXIgdGhlIHByZXZpb3VzIHJlc2V0IGZh aWxlZCwgb3Igd2UgcGFyZG9uIHRoZSByZXNldC4gKi8KPiAtCQlyZXQgPSBQVFJfRVJSKGFjdGl2 ZV9yZXF1ZXN0KTsKPiAtCQlnb3RvIG91dDsKPiAtCX0KPiAtCj4gLQlpZiAobXNnKQo+IC0JCWRl dl9ub3RpY2UoZW5naW5lLT5pOTE1LT5kcm0uZGV2LAo+IC0JCQkgICAiUmVzZXR0aW5nICVzIGZv ciAlc1xuIiwgZW5naW5lLT5uYW1lLCBtc2cpOwo+IC0JZXJyb3ItPnJlc2V0X2VuZ2luZV9jb3Vu dFtlbmdpbmUtPmlkXSsrOwo+IC0KPiAtCWlmICghZW5naW5lLT5pOTE1LT5ndWMuZXhlY2J1Zl9j bGllbnQpCj4gLQkJcmV0ID0gaW50ZWxfZ3RfcmVzZXRfZW5naW5lKGVuZ2luZS0+aTkxNSwgZW5n aW5lKTsKPiAtCWVsc2UKPiAtCQlyZXQgPSBpbnRlbF9ndWNfcmVzZXRfZW5naW5lKCZlbmdpbmUt Pmk5MTUtPmd1YywgZW5naW5lKTsKPiAtCWlmIChyZXQpIHsKPiAtCQkvKiBJZiB3ZSBmYWlsIGhl cmUsIHdlIGV4cGVjdCB0byBmYWxsYmFjayB0byBhIGdsb2JhbCByZXNldCAqLwo+IC0JCURSTV9E RUJVR19EUklWRVIoIiVzRmFpbGVkIHRvIHJlc2V0ICVzLCByZXQ9JWRcbiIsCj4gLQkJCQkgZW5n aW5lLT5pOTE1LT5ndWMuZXhlY2J1Zl9jbGllbnQgPyAiR3VDICIgOiAiIiwKPiAtCQkJCSBlbmdp bmUtPm5hbWUsIHJldCk7Cj4gLQkJZ290byBvdXQ7Cj4gLQl9Cj4gLQo+IC0JLyoKPiAtCSAqIFRo ZSByZXF1ZXN0IHRoYXQgY2F1c2VkIHRoZSBoYW5nIGlzIHN0dWNrIG9uIGVsc3AsIHdlIGtub3cg dGhlCj4gLQkgKiBhY3RpdmUgcmVxdWVzdCBhbmQgY2FuIGRyb3AgaXQsIGFkanVzdCBoZWFkIHRv IHNraXAgdGhlIG9mZmVuZGluZwo+IC0JICogcmVxdWVzdCB0byByZXN1bWUgZXhlY3V0aW5nIHJl bWFpbmluZyByZXF1ZXN0cyBpbiB0aGUgcXVldWUuCj4gLQkgKi8KPiAtCWk5MTVfZ2VtX3Jlc2V0 X2VuZ2luZShlbmdpbmUsIGFjdGl2ZV9yZXF1ZXN0LCB0cnVlKTsKPiAtCj4gLQkvKgo+IC0JICog VGhlIGVuZ2luZSBhbmQgaXRzIHJlZ2lzdGVycyAoYW5kIHdvcmthcm91bmRzIGluIGNhc2Ugb2Yg cmVuZGVyKQo+IC0JICogaGF2ZSBiZWVuIHJlc2V0IHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLiBG b2xsb3cgdGhlIGluaXRfcmluZwo+IC0JICogcHJvY2VzcyB0byBwcm9ncmFtIFJJTkdfTU9ERSwg SFdTUCBhbmQgcmUtZW5hYmxlIHN1Ym1pc3Npb24uCj4gLQkgKi8KPiAtCXJldCA9IGVuZ2luZS0+ aW5pdF9odyhlbmdpbmUpOwo+IC0JaWYgKHJldCkKPiAtCQlnb3RvIG91dDsKPiAtCj4gLW91dDoK PiAtCWk5MTVfZ2VtX3Jlc2V0X2ZpbmlzaF9lbmdpbmUoZW5naW5lKTsKPiAtCXJldHVybiByZXQ7 Cj4gLX0KPiAtCj4gIHN0YXRpYyBpbnQgaTkxNV9wbV9wcmVwYXJlKHN0cnVjdCBkZXZpY2UgKmtk ZXYpCj4gIHsKPiAgCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihrZGV2KTsKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCA0M2Y1NDVhZGQyMWMuLjg0YjEwNzNlYWNkOCAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC0yNzAwLDE5ICsyNzAwLDcgQEAgZXh0 ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGk5MTVfcG1fb3BzOwo+ICBleHRlcm4gaW50IGk5 MTVfZHJpdmVyX2xvYWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCj4gIAkJCSAgICBjb25zdCBzdHJ1 Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKPiAgZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfdW5sb2Fk KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+IC1leHRlcm4gaW50IGludGVsX2dwdV9yZXNldChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBlbmdpbmVfbWFzayk7Cj4gLWV4 dGVybiBib29sIGludGVsX2hhc19ncHVfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KTsKPiAtCj4gLWV4dGVybiB2b2lkIGk5MTVfcmVzZXQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUsCj4gLQkJICAgICAgIHVuc2lnbmVkIGludCBzdGFsbGVkX21hc2ssCj4gLQkJ ICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbik7Cj4gLWV4dGVybiBpbnQgaTkxNV9yZXNldF9lbmdp bmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0JCQkgICAgIGNvbnN0IGNoYXIg KnJlYXNvbik7Cj4gLQo+IC1leHRlcm4gYm9vbCBpbnRlbF9oYXNfcmVzZXRfZW5naW5lKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gLWV4dGVybiBpbnQgaW50ZWxfcmVzZXRf Z3VjKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gLWV4dGVybiBpbnQgaW50 ZWxfZ3VjX3Jlc2V0X2VuZ2luZShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsCj4gLQkJCQkgIHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gKwo+ICBleHRlcm4gdm9pZCBpbnRlbF9lbmdp bmVfaW5pdF9oYW5nY2hlY2soc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiAgZXh0 ZXJuIHZvaWQgaW50ZWxfaGFuZ2NoZWNrX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KTsKPiAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaTkxNV9jaGlwc2V0X3ZhbChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+IEBAIC0yNzU3LDEzICsyNzQ1LDYgQEAgc3Rh dGljIGlubGluZSB2b2lkIGk5MTVfcXVldWVfaGFuZ2NoZWNrKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPiAgCQkJICAgJmRldl9wcml2LT5ncHVfZXJyb3IuaGFuZ2NoZWNrX3dv cmssIGRlbGF5KTsKPiAgfQo+ICAKPiAtX19wcmludGYoNCwgNSkKPiAtdm9pZCBpOTE1X2hhbmRs ZV9lcnJvcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJICAgICAgIHUz MiBlbmdpbmVfbWFzaywKPiAtCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywKPiAtCQkgICAg ICAgY29uc3QgY2hhciAqZm10LCAuLi4pOwo+IC0jZGVmaW5lIEk5MTVfRVJST1JfQ0FQVFVSRSBC SVQoMCkKPiAtCj4gIGV4dGVybiB2b2lkIGludGVsX2lycV9pbml0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdik7Cj4gIGV4dGVybiB2b2lkIGludGVsX2lycV9maW5pKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIGludCBpbnRlbF9pcnFfaW5zdGFsbChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+IEBAIC0zMTI2LDE4ICszMTA3LDggQEAg c3RhdGljIGlubGluZSB1MzIgaTkxNV9yZXNldF9lbmdpbmVfY291bnQoc3RydWN0IGk5MTVfZ3B1 X2Vycm9yICplcnJvciwKPiAgCXJldHVybiBSRUFEX09OQ0UoZXJyb3ItPnJlc2V0X2VuZ2luZV9j b3VudFtlbmdpbmUtPmlkXSk7Cj4gIH0KPiAgCj4gLXN0cnVjdCBpOTE1X3JlcXVlc3QgKgo+IC1p OTE1X2dlbV9yZXNldF9wcmVwYXJlX2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpOwo+IC1pbnQgaTkxNV9nZW1fcmVzZXRfcHJlcGFyZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpOwo+IC12b2lkIGk5MTVfZ2VtX3Jlc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPiAtCQkgICAgdW5zaWduZWQgaW50IHN0YWxsZWRfbWFzayk7Cj4gLXZv aWQgaTkxNV9nZW1fcmVzZXRfZmluaXNoX2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpOwo+IC12b2lkIGk5MTVfZ2VtX3Jlc2V0X2ZpbmlzaChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpOwo+ICB2b2lkIGk5MTVfZ2VtX3NldF93ZWRnZWQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAgYm9vbCBpOTE1X2dlbV91bnNldF93ZWRnZWQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAtdm9pZCBpOTE1X2dlbV9yZXNldF9l bmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0JCQkgICBzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpyZXF1ZXN0LAo+IC0JCQkgICBib29sIHN0YWxsZWQpOwo+ICAKPiAgdm9pZCBp OTE1X2dlbV9pbml0X21taW8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwo+ICBpbnQg X19tdXN0X2NoZWNrIGk5MTVfZ2VtX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBpbmRleCA4ZWVjZDY4ZjllMjMuLmI1ODIy Y2MzNjIyMSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IEBAIC0yOCwxNSArMjgsNiBA QAo+ICAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fdm1hX21hbmFn ZXIuaD4KPiAgI2luY2x1ZGUgPGRybS9pOTE1X2RybS5oPgo+IC0jaW5jbHVkZSAiaTkxNV9kcnYu aCIKPiAtI2luY2x1ZGUgImk5MTVfZ2VtX2NsZmx1c2guaCIKPiAtI2luY2x1ZGUgImk5MTVfdmdw dS5oIgo+IC0jaW5jbHVkZSAiaTkxNV90cmFjZS5oIgo+IC0jaW5jbHVkZSAiaW50ZWxfZHJ2Lmgi Cj4gLSNpbmNsdWRlICJpbnRlbF9mcm9udGJ1ZmZlci5oIgo+IC0jaW5jbHVkZSAiaW50ZWxfbW9j cy5oIgo+IC0jaW5jbHVkZSAiaW50ZWxfd29ya2Fyb3VuZHMuaCIKPiAtI2luY2x1ZGUgImk5MTVf Z2VtZnMuaCIKPiAgI2luY2x1ZGUgPGxpbnV4L2RtYS1mZW5jZS1hcnJheS5oPgo+ICAjaW5jbHVk ZSA8bGludXgva3RocmVhZC5oPgo+ICAjaW5jbHVkZSA8bGludXgvcmVzZXJ2YXRpb24uaD4KPiBA QCAtNDcsNiArMzgsMTggQEAKPiAgI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgo+ICAjaW5jbHVkZSA8 bGludXgvZG1hLWJ1Zi5oPgo+ICAKPiArI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gKyNpbmNsdWRl ICJpOTE1X2dlbV9jbGZsdXNoLmgiCj4gKyNpbmNsdWRlICJpOTE1X2dlbWZzLmgiCj4gKyNpbmNs dWRlICJpOTE1X3Jlc2V0LmgiCj4gKyNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCj4gKyNpbmNsdWRl ICJpOTE1X3ZncHUuaCIKPiArCj4gKyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKPiArI2luY2x1ZGUg ImludGVsX2Zyb250YnVmZmVyLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9tb2NzLmgiCj4gKyNpbmNs dWRlICJpbnRlbF93b3JrYXJvdW5kcy5oIgo+ICsKPiAgc3RhdGljIHZvaWQgaTkxNV9nZW1fZmx1 c2hfZnJlZV9vYmplY3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPiAgCj4gIHN0 YXRpYyBib29sIGNwdV93cml0ZV9uZWVkc19jbGZsdXNoKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmopCj4gQEAgLTI5NjAsNjEgKzI5NjMsNiBAQCBpOTE1X2dlbV9vYmplY3RfcHdyaXRl X2d0dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAJcmV0dXJuIDA7Cj4gIH0K PiAgCj4gLXN0YXRpYyB2b2lkIGk5MTVfZ2VtX2NsaWVudF9tYXJrX2d1aWx0eShzdHJ1Y3QgZHJt X2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYsCj4gLQkJCQkJY29uc3Qgc3RydWN0IGk5MTVf Z2VtX2NvbnRleHQgKmN0eCkKPiAtewo+IC0JdW5zaWduZWQgaW50IHNjb3JlOwo+IC0JdW5zaWdu ZWQgbG9uZyBwcmV2X2hhbmc7Cj4gLQo+IC0JaWYgKGk5MTVfZ2VtX2NvbnRleHRfaXNfYmFubmVk KGN0eCkpCj4gLQkJc2NvcmUgPSBJOTE1X0NMSUVOVF9TQ09SRV9DT05URVhUX0JBTjsKPiAtCWVs c2UKPiAtCQlzY29yZSA9IDA7Cj4gLQo+IC0JcHJldl9oYW5nID0geGNoZygmZmlsZV9wcml2LT5o YW5nX3RpbWVzdGFtcCwgamlmZmllcyk7Cj4gLQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgcHJl dl9oYW5nICsgSTkxNV9DTElFTlRfRkFTVF9IQU5HX0pJRkZJRVMpKQo+IC0JCXNjb3JlICs9IEk5 MTVfQ0xJRU5UX1NDT1JFX0hBTkdfRkFTVDsKPiAtCj4gLQlpZiAoc2NvcmUpIHsKPiAtCQlhdG9t aWNfYWRkKHNjb3JlLCAmZmlsZV9wcml2LT5iYW5fc2NvcmUpOwo+IC0KPiAtCQlEUk1fREVCVUdf RFJJVkVSKCJjbGllbnQgJXM6IGdhaW5lZCAldSBiYW4gc2NvcmUsIG5vdyAldVxuIiwKPiAtCQkJ CSBjdHgtPm5hbWUsIHNjb3JlLAo+IC0JCQkJIGF0b21pY19yZWFkKCZmaWxlX3ByaXYtPmJhbl9z Y29yZSkpOwo+IC0JfQo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBpOTE1X2dlbV9jb250ZXh0X21h cmtfZ3VpbHR5KHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4gLXsKPiAtCXVuc2lnbmVk IGludCBzY29yZTsKPiAtCWJvb2wgYmFubmVkLCBiYW5uYWJsZTsKPiAtCj4gLQlhdG9taWNfaW5j KCZjdHgtPmd1aWx0eV9jb3VudCk7Cj4gLQo+IC0JYmFubmFibGUgPSBpOTE1X2dlbV9jb250ZXh0 X2lzX2Jhbm5hYmxlKGN0eCk7Cj4gLQlzY29yZSA9IGF0b21pY19hZGRfcmV0dXJuKENPTlRFWFRf U0NPUkVfR1VJTFRZLCAmY3R4LT5iYW5fc2NvcmUpOwo+IC0JYmFubmVkID0gc2NvcmUgPj0gQ09O VEVYVF9TQ09SRV9CQU5fVEhSRVNIT0xEOwo+IC0KPiAtCS8qIENvb2wgY29udGV4dHMgZG9uJ3Qg YWNjdW11bGF0ZSBjbGllbnQgYmFuIHNjb3JlICovCj4gLQlpZiAoIWJhbm5hYmxlKQo+IC0JCXJl dHVybjsKPiAtCj4gLQlpZiAoYmFubmVkKSB7Cj4gLQkJRFJNX0RFQlVHX0RSSVZFUigiY29udGV4 dCAlczogZ3VpbHR5ICVkLCBzY29yZSAldSwgYmFubmVkXG4iLAo+IC0JCQkJIGN0eC0+bmFtZSwg YXRvbWljX3JlYWQoJmN0eC0+Z3VpbHR5X2NvdW50KSwKPiAtCQkJCSBzY29yZSk7Cj4gLQkJaTkx NV9nZW1fY29udGV4dF9zZXRfYmFubmVkKGN0eCk7Cj4gLQl9Cj4gLQo+IC0JaWYgKCFJU19FUlJf T1JfTlVMTChjdHgtPmZpbGVfcHJpdikpCj4gLQkJaTkxNV9nZW1fY2xpZW50X21hcmtfZ3VpbHR5 KGN0eC0+ZmlsZV9wcml2LCBjdHgpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBpOTE1X2dlbV9j b250ZXh0X21hcmtfaW5ub2NlbnQoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkKPiAtewo+ IC0JYXRvbWljX2luYygmY3R4LT5hY3RpdmVfY291bnQpOwo+IC19Cj4gLQo+ICBzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICoKPiAgaTkxNV9nZW1fZmluZF9hY3RpdmVfcmVxdWVzdChzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCj4gIHsKPiBAQCAtMzA0NSwzOTUgKzI5OTMsNiBAQCBpOTE1X2dl bV9maW5kX2FjdGl2ZV9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAg CXJldHVybiBhY3RpdmU7Cj4gIH0KPiAgCj4gLS8qCj4gLSAqIEVuc3VyZSBpcnEgaGFuZGxlciBm aW5pc2hlcywgYW5kIG5vdCBydW4gYWdhaW4uCj4gLSAqIEFsc28gcmV0dXJuIHRoZSBhY3RpdmUg cmVxdWVzdCBzbyB0aGF0IHdlIG9ubHkgc2VhcmNoIGZvciBpdCBvbmNlLgo+IC0gKi8KPiAtc3Ry dWN0IGk5MTVfcmVxdWVzdCAqCj4gLWk5MTVfZ2VtX3Jlc2V0X3ByZXBhcmVfZW5naW5lKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAtewo+IC0Jc3RydWN0IGk5MTVfcmVxdWVzdCAq cmVxdWVzdDsKPiAtCj4gLQkvKgo+IC0JICogRHVyaW5nIHRoZSByZXNldCBzZXF1ZW5jZSwgd2Ug bXVzdCBwcmV2ZW50IHRoZSBlbmdpbmUgZnJvbQo+IC0JICogZW50ZXJpbmcgUkM2LiBBcyB0aGUg Y29udGV4dCBzdGF0ZSBpcyB1bmRlZmluZWQgdW50aWwgd2UgcmVzdGFydAo+IC0JICogdGhlIGVu Z2luZSwgaWYgaXQgZG9lcyBlbnRlciBSQzYgZHVyaW5nIHRoZSByZXNldCwgdGhlIHN0YXRlCj4g LQkgKiB3cml0dGVuIHRvIHRoZSBwb3dlcmNvbnRleHQgaXMgdW5kZWZpbmVkIGFuZCBzbyB3ZSBt YXkgbG9zZQo+IC0JICogR1BVIHN0YXRlIHVwb24gcmVzdW1lLCBpLmUuIGZhaWwgdG8gcmVzdGFy dCBhZnRlciBhIHJlc2V0Lgo+IC0JICovCj4gLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldChl bmdpbmUtPmk5MTUsIEZPUkNFV0FLRV9BTEwpOwo+IC0KPiAtCXJlcXVlc3QgPSBlbmdpbmUtPnJl c2V0LnByZXBhcmUoZW5naW5lKTsKPiAtCWlmIChyZXF1ZXN0ICYmIHJlcXVlc3QtPmZlbmNlLmVy cm9yID09IC1FSU8pCj4gLQkJcmVxdWVzdCA9IEVSUl9QVFIoLUVJTyk7IC8qIFByZXZpb3VzIHJl c2V0IGZhaWxlZCEgKi8KPiAtCj4gLQlyZXR1cm4gcmVxdWVzdDsKPiAtfQo+IC0KPiAtaW50IGk5 MTVfZ2VtX3Jlc2V0X3ByZXBhcmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gLQlzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpyZXF1ZXN0Owo+IC0JZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gLQlpbnQgZXJy ID0gMDsKPiAtCj4gLQlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBkZXZfcHJpdiwgaWQpIHsKPiAt CQlyZXF1ZXN0ID0gaTkxNV9nZW1fcmVzZXRfcHJlcGFyZV9lbmdpbmUoZW5naW5lKTsKPiAtCQlp ZiAoSVNfRVJSKHJlcXVlc3QpKSB7Cj4gLQkJCWVyciA9IFBUUl9FUlIocmVxdWVzdCk7Cj4gLQkJ CWNvbnRpbnVlOwo+IC0JCX0KPiAtCj4gLQkJZW5naW5lLT5oYW5nY2hlY2suYWN0aXZlX3JlcXVl c3QgPSByZXF1ZXN0Owo+IC0JfQo+IC0KPiAtCWk5MTVfZ2VtX3Jldm9rZV9mZW5jZXMoZGV2X3By aXYpOwo+IC0JaW50ZWxfdWNfc2FuaXRpemUoZGV2X3ByaXYpOwo+IC0KPiAtCXJldHVybiBlcnI7 Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGVuZ2luZV9za2lwX2NvbnRleHQoc3RydWN0IGk5MTVf cmVxdWVzdCAqcmVxdWVzdCkKPiAtewo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l ID0gcmVxdWVzdC0+ZW5naW5lOwo+IC0Jc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmh1bmdfY3R4 ID0gcmVxdWVzdC0+Z2VtX2NvbnRleHQ7Cj4gLQlzdHJ1Y3QgaTkxNV90aW1lbGluZSAqdGltZWxp bmUgPSByZXF1ZXN0LT50aW1lbGluZTsKPiAtCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gLQo+IC0J R0VNX0JVR19PTih0aW1lbGluZSA9PSAmZW5naW5lLT50aW1lbGluZSk7Cj4gLQo+IC0Jc3Bpbl9s b2NrX2lycXNhdmUoJmVuZ2luZS0+dGltZWxpbmUubG9jaywgZmxhZ3MpOwo+IC0Jc3Bpbl9sb2Nr KCZ0aW1lbGluZS0+bG9jayk7Cj4gLQo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShy ZXF1ZXN0LCAmZW5naW5lLT50aW1lbGluZS5yZXF1ZXN0cywgbGluaykKPiAtCQlpZiAocmVxdWVz dC0+Z2VtX2NvbnRleHQgPT0gaHVuZ19jdHgpCj4gLQkJCWk5MTVfcmVxdWVzdF9za2lwKHJlcXVl c3QsIC1FSU8pOwo+IC0KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxdWVzdCwgJnRpbWVsaW5l LT5yZXF1ZXN0cywgbGluaykKPiAtCQlpOTE1X3JlcXVlc3Rfc2tpcChyZXF1ZXN0LCAtRUlPKTsK PiAtCj4gLQlzcGluX3VubG9jaygmdGltZWxpbmUtPmxvY2spOwo+IC0Jc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmZW5naW5lLT50aW1lbGluZS5sb2NrLCBmbGFncyk7Cj4gLX0KPiAtCj4gLS8qIFJl dHVybnMgdGhlIHJlcXVlc3QgaWYgaXQgd2FzIGd1aWx0eSBvZiB0aGUgaGFuZyAqLwo+IC1zdGF0 aWMgc3RydWN0IGk5MTVfcmVxdWVzdCAqCj4gLWk5MTVfZ2VtX3Jlc2V0X3JlcXVlc3Qoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0JCSAgICAgICBzdHJ1Y3QgaTkxNV9yZXF1ZXN0 ICpyZXF1ZXN0LAo+IC0JCSAgICAgICBib29sIHN0YWxsZWQpCj4gLXsKPiAtCS8qIFRoZSBndWls dHkgcmVxdWVzdCB3aWxsIGdldCBza2lwcGVkIG9uIGEgaHVuZyBlbmdpbmUuCj4gLQkgKgo+IC0J ICogVXNlcnMgb2YgY2xpZW50IGRlZmF1bHQgY29udGV4dHMgZG8gbm90IHJlbHkgb24gbG9naWNh bAo+IC0JICogc3RhdGUgcHJlc2VydmVkIGJldHdlZW4gYmF0Y2hlcyBzbyBpdCBpcyBzYWZlIHRv IGV4ZWN1dGUKPiAtCSAqIHF1ZXVlZCByZXF1ZXN0cyBmb2xsb3dpbmcgdGhlIGhhbmcuIE5vbiBk ZWZhdWx0IGNvbnRleHRzCj4gLQkgKiByZWx5IG9uIHByZXNlcnZlZCBzdGF0ZSwgc28gc2tpcHBp bmcgYSBiYXRjaCBsb3NlcyB0aGUKPiAtCSAqIGV2b2x1dGlvbiBvZiB0aGUgc3RhdGUgYW5kIGl0 IG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQgY29ycnVwdGVkLgo+IC0JICogRXhlY3V0aW5nIG1vcmUg cXVldWVkIGJhdGNoZXMgb24gdG9wIG9mIGNvcnJ1cHRlZCBzdGF0ZSBpcwo+IC0JICogcmlza3ku IEJ1dCB3ZSB0YWtlIHRoZSByaXNrIGJ5IHRyeWluZyB0byBhZHZhbmNlIHRocm91Z2gKPiAtCSAq IHRoZSBxdWV1ZWQgcmVxdWVzdHMgaW4gb3JkZXIgdG8gbWFrZSB0aGUgY2xpZW50IGJlaGF2aW91 cgo+IC0JICogbW9yZSBwcmVkaWN0YWJsZSBhcm91bmQgcmVzZXRzLCBieSBub3QgdGhyb3dpbmcg YXdheSByYW5kb20KPiAtCSAqIGFtb3VudCBvZiBiYXRjaGVzIGl0IGhhcyBwcmVwYXJlZCBmb3Ig ZXhlY3V0aW9uLiBTb3BoaXN0aWNhdGVkCj4gLQkgKiBjbGllbnRzIGNhbiB1c2UgZ2VtX3Jlc2V0 X3N0YXRzX2lvY3RsIGFuZCBkbWEgZmVuY2Ugc3RhdHVzCj4gLQkgKiAoZXhwb3J0ZWQgdmlhIHN5 bmNfZmlsZSBpbmZvIGlvY3RsIG9uIGV4cGxpY2l0IGZlbmNlcykgdG8gb2JzZXJ2ZQo+IC0JICog d2hlbiBpdCBsb3NlcyB0aGUgY29udGV4dCBzdGF0ZSBhbmQgc2hvdWxkIHJlYnVpbGQgYWNjb3Jk aW5nbHkuCj4gLQkgKgo+IC0JICogVGhlIGNvbnRleHQgYmFuLCBhbmQgdWx0aW1hdGVseSB0aGUg Y2xpZW50IGJhbiwgbWVjaGFuaXNtIGFyZSBzYWZldHkKPiAtCSAqIHZhbHZlcyBpZiBjbGllbnQg c3VibWlzc2lvbiBlbmRzIHVwIHJlc3VsdGluZyBpbiBub3RoaW5nIG1vcmUgdGhhbgo+IC0JICog c3Vic2VxdWVudCBoYW5ncy4KPiAtCSAqLwo+IC0KPiAtCWlmIChpOTE1X3JlcXVlc3RfY29tcGxl dGVkKHJlcXVlc3QpKSB7Cj4gLQkJR0VNX1RSQUNFKCIlcyBwYXJkb25lZCBnbG9iYWw9JWQgKGZl bmNlICVsbHg6JWQpLCBjdXJyZW50ICVkXG4iLAo+IC0JCQkgIGVuZ2luZS0+bmFtZSwgcmVxdWVz dC0+Z2xvYmFsX3NlcW5vLAo+IC0JCQkgIHJlcXVlc3QtPmZlbmNlLmNvbnRleHQsIHJlcXVlc3Qt PmZlbmNlLnNlcW5vLAo+IC0JCQkgIGludGVsX2VuZ2luZV9nZXRfc2Vxbm8oZW5naW5lKSk7Cj4g LQkJc3RhbGxlZCA9IGZhbHNlOwo+IC0JfQo+IC0KPiAtCWlmIChzdGFsbGVkKSB7Cj4gLQkJaTkx NV9nZW1fY29udGV4dF9tYXJrX2d1aWx0eShyZXF1ZXN0LT5nZW1fY29udGV4dCk7Cj4gLQkJaTkx NV9yZXF1ZXN0X3NraXAocmVxdWVzdCwgLUVJTyk7Cj4gLQo+IC0JCS8qIElmIHRoaXMgY29udGV4 dCBpcyBub3cgYmFubmVkLCBza2lwIGFsbCBwZW5kaW5nIHJlcXVlc3RzLiAqLwo+IC0JCWlmIChp OTE1X2dlbV9jb250ZXh0X2lzX2Jhbm5lZChyZXF1ZXN0LT5nZW1fY29udGV4dCkpCj4gLQkJCWVu Z2luZV9za2lwX2NvbnRleHQocmVxdWVzdCk7Cj4gLQl9IGVsc2Ugewo+IC0JCS8qCj4gLQkJICog U2luY2UgdGhpcyBpcyBub3QgdGhlIGh1bmcgZW5naW5lLCBpdCBtYXkgaGF2ZSBhZHZhbmNlZAo+ IC0JCSAqIHNpbmNlIHRoZSBoYW5nIGRlY2xhcmF0aW9uLiBEb3VibGUgY2hlY2sgYnkgcmVmaW5k aW5nCj4gLQkJICogdGhlIGFjdGl2ZSByZXF1ZXN0IGF0IHRoZSB0aW1lIG9mIHRoZSByZXNldC4K PiAtCQkgKi8KPiAtCQlyZXF1ZXN0ID0gaTkxNV9nZW1fZmluZF9hY3RpdmVfcmVxdWVzdChlbmdp bmUpOwo+IC0JCWlmIChyZXF1ZXN0KSB7Cj4gLQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gLQo+ IC0JCQlpOTE1X2dlbV9jb250ZXh0X21hcmtfaW5ub2NlbnQocmVxdWVzdC0+Z2VtX2NvbnRleHQp Owo+IC0JCQlkbWFfZmVuY2Vfc2V0X2Vycm9yKCZyZXF1ZXN0LT5mZW5jZSwgLUVBR0FJTik7Cj4g LQo+IC0JCQkvKiBSZXdpbmQgdGhlIGVuZ2luZSB0byByZXBsYXkgdGhlIGluY29tcGxldGUgcnEg Ki8KPiAtCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmVuZ2luZS0+dGltZWxpbmUubG9jaywgZmxhZ3Mp Owo+IC0JCQlyZXF1ZXN0ID0gbGlzdF9wcmV2X2VudHJ5KHJlcXVlc3QsIGxpbmspOwo+IC0JCQlp ZiAoJnJlcXVlc3QtPmxpbmsgPT0gJmVuZ2luZS0+dGltZWxpbmUucmVxdWVzdHMpCj4gLQkJCQly ZXF1ZXN0ID0gTlVMTDsKPiAtCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT50aW1l bGluZS5sb2NrLCBmbGFncyk7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCXJldHVybiByZXF1ZXN0Owo+ IC19Cj4gLQo+IC12b2lkIGk5MTVfZ2VtX3Jlc2V0X2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUsCj4gLQkJCSAgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsCj4gLQkJ CSAgIGJvb2wgc3RhbGxlZCkKPiAtewo+IC0JLyoKPiAtCSAqIE1ha2Ugc3VyZSB0aGlzIHdyaXRl IGlzIHZpc2libGUgYmVmb3JlIHdlIHJlLWVuYWJsZSB0aGUgaW50ZXJydXB0Cj4gLQkgKiBoYW5k bGVycyBvbiBhbm90aGVyIENQVSwgYXMgdGFza2xldF9lbmFibGUoKSByZXNvbHZlcyB0byBqdXN0 Cj4gLQkgKiBhIGNvbXBpbGVyIGJhcnJpZXIgd2hpY2ggaXMgaW5zdWZmaWNpZW50IGZvciBvdXIg cHVycG9zZSBoZXJlLgo+IC0JICovCj4gLQlzbXBfc3RvcmVfbWIoZW5naW5lLT5pcnFfcG9zdGVk LCAwKTsKPiAtCj4gLQlpZiAocmVxdWVzdCkKPiAtCQlyZXF1ZXN0ID0gaTkxNV9nZW1fcmVzZXRf cmVxdWVzdChlbmdpbmUsIHJlcXVlc3QsIHN0YWxsZWQpOwo+IC0KPiAtCS8qIFNldHVwIHRoZSBD UyB0byByZXN1bWUgZnJvbSB0aGUgYnJlYWRjcnVtYiBvZiB0aGUgaHVuZyByZXF1ZXN0ICovCj4g LQllbmdpbmUtPnJlc2V0LnJlc2V0KGVuZ2luZSwgcmVxdWVzdCk7Cj4gLX0KPiAtCj4gLXZvaWQg aTkxNV9nZW1fcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCSAg ICB1bnNpZ25lZCBpbnQgc3RhbGxlZF9tYXNrKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmU7Cj4gLQllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPiAtCj4gLQlsb2NrZGVw X2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQo+IC0JaTkxNV9y ZXRpcmVfcmVxdWVzdHMoZGV2X3ByaXYpOwo+IC0KPiAtCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUs IGRldl9wcml2LCBpZCkgewo+IC0JCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZTsKPiAtCj4gLQkJ aTkxNV9nZW1fcmVzZXRfZW5naW5lKGVuZ2luZSwKPiAtCQkJCSAgICAgIGVuZ2luZS0+aGFuZ2No ZWNrLmFjdGl2ZV9yZXF1ZXN0LAo+IC0JCQkJICAgICAgc3RhbGxlZF9tYXNrICYgRU5HSU5FX01B U0soaWQpKTsKPiAtCQljZSA9IGZldGNoX2FuZF96ZXJvKCZlbmdpbmUtPmxhc3RfcmV0aXJlZF9j b250ZXh0KTsKPiAtCQlpZiAoY2UpCj4gLQkJCWludGVsX2NvbnRleHRfdW5waW4oY2UpOwo+IC0K PiAtCQkvKgo+IC0JCSAqIE9zdGVuc2liaWx5LCB3ZSBhbHdheXMgd2FudCBhIGNvbnRleHQgbG9h ZGVkIGZvciBwb3dlcnNhdmluZywKPiAtCQkgKiBzbyBpZiB0aGUgZW5naW5lIGlzIGlkbGUgYWZ0 ZXIgdGhlIHJlc2V0LCBzZW5kIGEgcmVxdWVzdAo+IC0JCSAqIHRvIGxvYWQgb3VyIHNjcmF0Y2gg a2VybmVsX2NvbnRleHQuCj4gLQkJICoKPiAtCQkgKiBNb3JlIG15c3RlcmlvdXNseSwgaWYgd2Ug bGVhdmUgdGhlIGVuZ2luZSBpZGxlIGFmdGVyIGEgcmVzZXQsCj4gLQkJICogdGhlIG5leHQgdXNl cnNwYWNlIGJhdGNoIG1heSBoYW5nLCB3aXRoIHdoYXQgYXBwZWFycyB0byBiZQo+IC0JCSAqIGFu IGluY29oZXJlbnQgcmVhZCBieSB0aGUgQ1MgKHByZXN1bWFibHkgc3RhbGUgVExCKS4gQW4KPiAt CQkgKiBlbXB0eSByZXF1ZXN0IGFwcGVhcnMgc3VmZmljaWVudCB0byBwYXBlciBvdmVyIHRoZSBn bGl0Y2guCj4gLQkJICovCj4gLQkJaWYgKGludGVsX2VuZ2luZV9pc19pZGxlKGVuZ2luZSkpIHsK PiAtCQkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gLQo+IC0JCQlycSA9IGk5MTVfcmVxdWVz dF9hbGxvYyhlbmdpbmUsCj4gLQkJCQkJCWRldl9wcml2LT5rZXJuZWxfY29udGV4dCk7Cj4gLQkJ CWlmICghSVNfRVJSKHJxKSkKPiAtCQkJCWk5MTVfcmVxdWVzdF9hZGQocnEpOwo+IC0JCX0KPiAt CX0KPiAtCj4gLQlpOTE1X2dlbV9yZXN0b3JlX2ZlbmNlcyhkZXZfcHJpdik7Cj4gLX0KPiAtCj4g LXZvaWQgaTkxNV9nZW1fcmVzZXRfZmluaXNoX2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCj4gLXsKPiAtCWVuZ2luZS0+cmVzZXQuZmluaXNoKGVuZ2luZSk7Cj4gLQo+IC0J aW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoZW5naW5lLT5pOTE1LCBGT1JDRVdBS0VfQUxMKTsK PiAtfQo+IC0KPiAtdm9pZCBpOTE1X2dlbV9yZXNldF9maW5pc2goc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7 Cj4gLQllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPiAtCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxk KCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQo+IC0JZm9yX2VhY2hfZW5naW5lKGVu Z2luZSwgZGV2X3ByaXYsIGlkKSB7Cj4gLQkJZW5naW5lLT5oYW5nY2hlY2suYWN0aXZlX3JlcXVl c3QgPSBOVUxMOwo+IC0JCWk5MTVfZ2VtX3Jlc2V0X2ZpbmlzaF9lbmdpbmUoZW5naW5lKTsKPiAt CX0KPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgbm9wX3N1Ym1pdF9yZXF1ZXN0KHN0cnVjdCBpOTE1 X3JlcXVlc3QgKnJlcXVlc3QpCj4gLXsKPiAtCUdFTV9UUkFDRSgiJXMgZmVuY2UgJWxseDolZCAt PiAtRUlPXG4iLAo+IC0JCSAgcmVxdWVzdC0+ZW5naW5lLT5uYW1lLAo+IC0JCSAgcmVxdWVzdC0+ ZmVuY2UuY29udGV4dCwgcmVxdWVzdC0+ZmVuY2Uuc2Vxbm8pOwo+IC0JZG1hX2ZlbmNlX3NldF9l cnJvcigmcmVxdWVzdC0+ZmVuY2UsIC1FSU8pOwo+IC0KPiAtCWk5MTVfcmVxdWVzdF9zdWJtaXQo cmVxdWVzdCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIG5vcF9jb21wbGV0ZV9zdWJtaXRfcmVx dWVzdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0KQo+IC17Cj4gLQl1bnNpZ25lZCBsb25n IGZsYWdzOwo+IC0KPiAtCUdFTV9UUkFDRSgiJXMgZmVuY2UgJWxseDolZCAtPiAtRUlPXG4iLAo+ IC0JCSAgcmVxdWVzdC0+ZW5naW5lLT5uYW1lLAo+IC0JCSAgcmVxdWVzdC0+ZmVuY2UuY29udGV4 dCwgcmVxdWVzdC0+ZmVuY2Uuc2Vxbm8pOwo+IC0JZG1hX2ZlbmNlX3NldF9lcnJvcigmcmVxdWVz dC0+ZmVuY2UsIC1FSU8pOwo+IC0KPiAtCXNwaW5fbG9ja19pcnFzYXZlKCZyZXF1ZXN0LT5lbmdp bmUtPnRpbWVsaW5lLmxvY2ssIGZsYWdzKTsKPiAtCV9faTkxNV9yZXF1ZXN0X3N1Ym1pdChyZXF1 ZXN0KTsKPiAtCWludGVsX2VuZ2luZV9pbml0X2dsb2JhbF9zZXFubyhyZXF1ZXN0LT5lbmdpbmUs IHJlcXVlc3QtPmdsb2JhbF9zZXFubyk7Cj4gLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZXF1 ZXN0LT5lbmdpbmUtPnRpbWVsaW5lLmxvY2ssIGZsYWdzKTsKPiAtfQo+IC0KPiAtdm9pZCBpOTE1 X2dlbV9zZXRfd2VkZ2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+IC17Cj4gLQlz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gLQllbnVtIGludGVsX2VuZ2luZV9pZCBp ZDsKPiAtCj4gLQlHRU1fVFJBQ0UoInN0YXJ0XG4iKTsKPiAtCj4gLQlpZiAoR0VNX1NIT1dfREVC VUcoKSkgewo+IC0JCXN0cnVjdCBkcm1fcHJpbnRlciBwID0gZHJtX2RlYnVnX3ByaW50ZXIoX19m dW5jX18pOwo+IC0KPiAtCQlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1LCBpZCkKPiAtCQkJ aW50ZWxfZW5naW5lX2R1bXAoZW5naW5lLCAmcCwgIiVzXG4iLCBlbmdpbmUtPm5hbWUpOwo+IC0J fQo+IC0KPiAtCXNldF9iaXQoSTkxNV9XRURHRUQsICZpOTE1LT5ncHVfZXJyb3IuZmxhZ3MpOwo+ IC0Jc21wX21iX19hZnRlcl9hdG9taWMoKTsKPiAtCj4gLQkvKgo+IC0JICogRmlyc3QsIHN0b3Ag c3VibWlzc2lvbiB0byBodywgYnV0IGRvIG5vdCB5ZXQgY29tcGxldGUgcmVxdWVzdHMgYnkKPiAt CSAqIHJvbGxpbmcgdGhlIGdsb2JhbCBzZXFubyBmb3J3YXJkIChzaW5jZSB0aGlzIHdvdWxkIGNv bXBsZXRlIHJlcXVlc3RzCj4gLQkgKiBmb3Igd2hpY2ggd2UgaGF2ZW4ndCBzZXQgdGhlIGZlbmNl IGVycm9yIHRvIEVJTyB5ZXQpLgo+IC0JICovCj4gLQlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBp OTE1LCBpZCkgewo+IC0JCWk5MTVfZ2VtX3Jlc2V0X3ByZXBhcmVfZW5naW5lKGVuZ2luZSk7Cj4g LQo+IC0JCWVuZ2luZS0+c3VibWl0X3JlcXVlc3QgPSBub3Bfc3VibWl0X3JlcXVlc3Q7Cj4gLQkJ ZW5naW5lLT5zY2hlZHVsZSA9IE5VTEw7Cj4gLQl9Cj4gLQlpOTE1LT5jYXBzLnNjaGVkdWxlciA9 IDA7Cj4gLQo+IC0JLyogRXZlbiBpZiB0aGUgR1BVIHJlc2V0IGZhaWxzLCBpdCBzaG91bGQgc3Rp bGwgc3RvcCB0aGUgZW5naW5lcyAqLwo+IC0JaW50ZWxfZ3B1X3Jlc2V0KGk5MTUsIEFMTF9FTkdJ TkVTKTsKPiAtCj4gLQkvKgo+IC0JICogTWFrZSBzdXJlIG5vIG9uZSBpcyBydW5uaW5nIHRoZSBv bGQgY2FsbGJhY2sgYmVmb3JlIHdlIHByb2NlZWQgd2l0aAo+IC0JICogY2FuY2VsbGluZyByZXF1 ZXN0cyBhbmQgcmVzZXR0aW5nIHRoZSBjb21wbGV0aW9uIHRyYWNraW5nLiBPdGhlcndpc2UKPiAt CSAqIHdlIG1pZ2h0IHN1Ym1pdCBhIHJlcXVlc3QgdG8gdGhlIGhhcmR3YXJlIHdoaWNoIG5ldmVy IGNvbXBsZXRlcy4KPiAtCSAqLwo+IC0Jc3luY2hyb25pemVfcmN1KCk7Cj4gLQo+IC0JZm9yX2Vh Y2hfZW5naW5lKGVuZ2luZSwgaTkxNSwgaWQpIHsKPiAtCQkvKiBNYXJrIGFsbCBleGVjdXRpbmcg cmVxdWVzdHMgYXMgc2tpcHBlZCAqLwo+IC0JCWVuZ2luZS0+Y2FuY2VsX3JlcXVlc3RzKGVuZ2lu ZSk7Cj4gLQo+IC0JCS8qCj4gLQkJICogT25seSBvbmNlIHdlJ3ZlIGZvcmNlLWNhbmNlbGxlZCBh bGwgaW4tZmxpZ2h0IHJlcXVlc3RzIGNhbiB3ZQo+IC0JCSAqIHN0YXJ0IHRvIGNvbXBsZXRlIGFs bCByZXF1ZXN0cy4KPiAtCQkgKi8KPiAtCQllbmdpbmUtPnN1Ym1pdF9yZXF1ZXN0ID0gbm9wX2Nv bXBsZXRlX3N1Ym1pdF9yZXF1ZXN0Owo+IC0JfQo+IC0KPiAtCS8qCj4gLQkgKiBNYWtlIHN1cmUg bm8gcmVxdWVzdCBjYW4gc2xpcCB0aHJvdWdoIHdpdGhvdXQgZ2V0dGluZyBjb21wbGV0ZWQgYnkK PiAtCSAqIGVpdGhlciB0aGlzIGNhbGwgaGVyZSB0byBpbnRlbF9lbmdpbmVfaW5pdF9nbG9iYWxf c2Vxbm8sIG9yIHRoZSBvbmUKPiAtCSAqIGluIG5vcF9jb21wbGV0ZV9zdWJtaXRfcmVxdWVzdC4K PiAtCSAqLwo+IC0Jc3luY2hyb25pemVfcmN1KCk7Cj4gLQo+IC0JZm9yX2VhY2hfZW5naW5lKGVu Z2luZSwgaTkxNSwgaWQpIHsKPiAtCQl1bnNpZ25lZCBsb25nIGZsYWdzOwo+IC0KPiAtCQkvKgo+ IC0JCSAqIE1hcmsgYWxsIHBlbmRpbmcgcmVxdWVzdHMgYXMgY29tcGxldGUgc28gdGhhdCBhbnkg Y29uY3VycmVudAo+IC0JCSAqIChsb2NrbGVzcykgbG9va3VwIGRvZXNuJ3QgdHJ5IGFuZCB3YWl0 IHVwb24gdGhlIHJlcXVlc3QgYXMgd2UKPiAtCQkgKiByZXNldCBpdC4KPiAtCQkgKi8KPiAtCQlz cGluX2xvY2tfaXJxc2F2ZSgmZW5naW5lLT50aW1lbGluZS5sb2NrLCBmbGFncyk7Cj4gLQkJaW50 ZWxfZW5naW5lX2luaXRfZ2xvYmFsX3NlcW5vKGVuZ2luZSwKPiAtCQkJCQkgICAgICAgaW50ZWxf ZW5naW5lX2xhc3Rfc3VibWl0KGVuZ2luZSkpOwo+IC0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmVuZ2luZS0+dGltZWxpbmUubG9jaywgZmxhZ3MpOwo+IC0KPiAtCQlpOTE1X2dlbV9yZXNldF9m aW5pc2hfZW5naW5lKGVuZ2luZSk7Cj4gLQl9Cj4gLQo+IC0JR0VNX1RSQUNFKCJlbmRcbiIpOwo+ IC0KPiAtCXdha2VfdXBfYWxsKCZpOTE1LT5ncHVfZXJyb3IucmVzZXRfcXVldWUpOwo+IC19Cj4g LQo+IC1ib29sIGk5MTVfZ2VtX3Vuc2V0X3dlZGdlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSkKPiAtewo+IC0Jc3RydWN0IGk5MTVfdGltZWxpbmUgKnRsOwo+IC0KPiAtCWxvY2tkZXBf YXNzZXJ0X2hlbGQoJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0JaWYgKCF0ZXN0X2JpdChJ OTE1X1dFREdFRCwgJmk5MTUtPmdwdV9lcnJvci5mbGFncykpCj4gLQkJcmV0dXJuIHRydWU7Cj4g LQo+IC0JR0VNX1RSQUNFKCJzdGFydFxuIik7Cj4gLQo+IC0JLyoKPiAtCSAqIEJlZm9yZSB1bndl ZGdpbmcsIG1ha2Ugc3VyZSB0aGF0IGFsbCBwZW5kaW5nIG9wZXJhdGlvbnMKPiAtCSAqIGFyZSBm bHVzaGVkIGFuZCBlcnJvcmVkIG91dCAtIHdlIG1heSBoYXZlIHJlcXVlc3RzIHdhaXRpbmcgdXBv bgo+IC0JICogdGhpcmQgcGFydHkgZmVuY2VzLiBXZSBtYXJrZWQgYWxsIGluZmxpZ2h0IHJlcXVl c3RzIGFzIEVJTywgYW5kCj4gLQkgKiBldmVyeSBleGVjYnVmIHNpbmNlIHJldHVybmVkIEVJTywg Zm9yIGNvbnNpc3RlbmN5IHdlIHdhbnQgYWxsCj4gLQkgKiB0aGUgY3VycmVudGx5IHBlbmRpbmcg cmVxdWVzdHMgdG8gYWxzbyBiZSBtYXJrZWQgYXMgRUlPLCB3aGljaAo+IC0JICogaXMgZG9uZSBp bnNpZGUgb3VyIG5vcF9zdWJtaXRfcmVxdWVzdCAtIGFuZCBzbyB3ZSBtdXN0IHdhaXQuCj4gLQkg Kgo+IC0JICogTm8gbW9yZSBjYW4gYmUgc3VibWl0dGVkIHVudGlsIHdlIHJlc2V0IHRoZSB3ZWRn ZWQgYml0Lgo+IC0JICovCj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRsLCAmaTkxNS0+Z3QudGlt ZWxpbmVzLCBsaW5rKSB7Cj4gLQkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gLQo+IC0JCXJx ID0gaTkxNV9nZW1fYWN0aXZlX3BlZWsoJnRsLT5sYXN0X3JlcXVlc3QsCj4gLQkJCQkJICAmaTkx NS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQkJaWYgKCFycSkKPiAtCQkJY29udGludWU7Cj4gLQo+ IC0JCS8qCj4gLQkJICogV2UgY2FuJ3QgdXNlIG91ciBub3JtYWwgd2FpdGVyIGFzIHdlIHdhbnQg dG8KPiAtCQkgKiBhdm9pZCByZWN1cnNpdmVseSB0cnlpbmcgdG8gaGFuZGxlIHRoZSBjdXJyZW50 Cj4gLQkJICogcmVzZXQuIFRoZSBiYXNpYyBkbWFfZmVuY2VfZGVmYXVsdF93YWl0KCkgaW5zdGFs bHMKPiAtCQkgKiBhIGNhbGxiYWNrIGZvciBkbWFfZmVuY2Vfc2lnbmFsKCksIHdoaWNoIGlzCj4g LQkJICogdHJpZ2dlcmVkIGJ5IG91ciBub3AgaGFuZGxlciAoaW5kaXJlY3RseSwgdGhlCj4gLQkJ ICogY2FsbGJhY2sgZW5hYmxlcyB0aGUgc2lnbmFsZXIgdGhyZWFkIHdoaWNoIGlzCj4gLQkJICog d29rZW4gYnkgdGhlIG5vcF9zdWJtaXRfcmVxdWVzdCgpIGFkdmFuY2luZyB0aGUgc2Vxbm8KPiAt CQkgKiBhbmQgd2hlbiB0aGUgc2Vxbm8gcGFzc2VzIHRoZSBmZW5jZSwgdGhlIHNpZ25hbGVyCj4g LQkJICogdGhlbiBzaWduYWxzIHRoZSBmZW5jZSB3YWtpbmcgdXMgdXApLgo+IC0JCSAqLwo+IC0J CWlmIChkbWFfZmVuY2VfZGVmYXVsdF93YWl0KCZycS0+ZmVuY2UsIHRydWUsCj4gLQkJCQkJICAg TUFYX1NDSEVEVUxFX1RJTUVPVVQpIDwgMCkKPiAtCQkJcmV0dXJuIGZhbHNlOwo+IC0JfQo+IC0J aTkxNV9yZXRpcmVfcmVxdWVzdHMoaTkxNSk7Cj4gLQlHRU1fQlVHX09OKGk5MTUtPmd0LmFjdGl2 ZV9yZXF1ZXN0cyk7Cj4gLQo+IC0JLyoKPiAtCSAqIFVuZG8gbm9wX3N1Ym1pdF9yZXF1ZXN0LiBX ZSBwcmV2ZW50IGFsbCBuZXcgaTkxNSByZXF1ZXN0cyBmcm9tCj4gLQkgKiBiZWluZyBxdWV1ZWQg KGJ5IGRpc2FsbG93aW5nIGV4ZWNidWYgd2hpbHN0IHdlZGdlZCkgc28gaGF2aW5nCj4gLQkgKiB3 YWl0ZWQgZm9yIGFsbCBhY3RpdmUgcmVxdWVzdHMgYWJvdmUsIHdlIGtub3cgdGhlIHN5c3RlbSBp cyBpZGxlCj4gLQkgKiBhbmQgZG8gbm90IGhhdmUgdG8gd29ycnkgYWJvdXQgYSB0aHJlYWQgYmVp bmcgaW5zaWRlCj4gLQkgKiBlbmdpbmUtPnN1Ym1pdF9yZXF1ZXN0KCkgYXMgd2Ugc3dhcCBvdmVy LiBTbyB1bmxpa2UgaW5zdGFsbGluZwo+IC0JICogdGhlIG5vcF9zdWJtaXRfcmVxdWVzdCBvbiBy ZXNldCwgd2UgY2FuIGRvIHRoaXMgZnJvbSBub3JtYWwKPiAtCSAqIGNvbnRleHQgYW5kIGRvIG5v dCByZXF1aXJlIHN0b3BfbWFjaGluZSgpLgo+IC0JICovCj4gLQlpbnRlbF9lbmdpbmVzX3Jlc2V0 X2RlZmF1bHRfc3VibWlzc2lvbihpOTE1KTsKPiAtCWk5MTVfZ2VtX2NvbnRleHRzX2xvc3QoaTkx NSk7Cj4gLQo+IC0JR0VNX1RSQUNFKCJlbmRcbiIpOwo+IC0KPiAtCXNtcF9tYl9fYmVmb3JlX2F0 b21pYygpOyAvKiBjb21wbGV0ZSB0YWtlb3ZlciBiZWZvcmUgZW5hYmxpbmcgZXhlY2J1ZiAqLwo+ IC0JY2xlYXJfYml0KEk5MTVfV0VER0VELCAmaTkxNS0+Z3B1X2Vycm9yLmZsYWdzKTsKPiAtCj4g LQlyZXR1cm4gdHJ1ZTsKPiAtfQo+IC0KPiAgc3RhdGljIHZvaWQKPiAgaTkxNV9nZW1fcmV0aXJl X3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gIHsKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfaXJxLmMKPiBpbmRleCA0OTViOWQyNzk5MGUuLjc2ZGFhMzFkYzJiYSAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9pcnEuYwo+IEBAIC0yOTI4LDQ2ICsyOTI4LDYgQEAgc3RhdGljIGlycXJl dHVybl90IGdlbjhfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQo+ICAJcmV0dXJuIElS UV9IQU5ETEVEOwo+ICB9Cj4gIAo+IC1zdHJ1Y3Qgd2VkZ2VfbWUgewo+IC0Jc3RydWN0IGRlbGF5 ZWRfd29yayB3b3JrOwo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4gLQljb25z dCBjaGFyICpuYW1lOwo+IC19Owo+IC0KPiAtc3RhdGljIHZvaWQgd2VkZ2VfbWUoc3RydWN0IHdv cmtfc3RydWN0ICp3b3JrKQo+IC17Cj4gLQlzdHJ1Y3Qgd2VkZ2VfbWUgKncgPSBjb250YWluZXJf b2Yod29yaywgdHlwZW9mKCp3KSwgd29yay53b3JrKTsKPiAtCj4gLQlkZXZfZXJyKHctPmk5MTUt PmRybS5kZXYsCj4gLQkJIiVzIHRpbWVkIG91dCwgY2FuY2VsbGluZyBhbGwgaW4tZmxpZ2h0IHJl bmRlcmluZy5cbiIsCj4gLQkJdy0+bmFtZSk7Cj4gLQlpOTE1X2dlbV9zZXRfd2VkZ2VkKHctPmk5 MTUpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBfX2luaXRfd2VkZ2Uoc3RydWN0IHdlZGdlX21l ICp3LAo+IC0JCQkgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gLQkJCSBsb25nIHRp bWVvdXQsCj4gLQkJCSBjb25zdCBjaGFyICpuYW1lKQo+IC17Cj4gLQl3LT5pOTE1ID0gaTkxNTsK PiAtCXctPm5hbWUgPSBuYW1lOwo+IC0KPiAtCUlOSVRfREVMQVlFRF9XT1JLX09OU1RBQ0soJnct PndvcmssIHdlZGdlX21lKTsKPiAtCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdy0+d29yaywgdGlt ZW91dCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIF9fZmluaV93ZWRnZShzdHJ1Y3Qgd2VkZ2Vf bWUgKncpCj4gLXsKPiAtCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmdy0+d29yayk7Cj4gLQlk ZXN0cm95X2RlbGF5ZWRfd29ya19vbl9zdGFjaygmdy0+d29yayk7Cj4gLQl3LT5pOTE1ID0gTlVM TDsKPiAtfQo+IC0KPiAtI2RlZmluZSBpOTE1X3dlZGdlX29uX3RpbWVvdXQoVywgREVWLCBUSU1F T1VUKQkJCQlcCj4gLQlmb3IgKF9faW5pdF93ZWRnZSgoVyksIChERVYpLCAoVElNRU9VVCksIF9f ZnVuY19fKTsJCVwKPiAtCSAgICAgKFcpLT5pOTE1OwkJCQkJCQlcCj4gLQkgICAgIF9fZmluaV93 ZWRnZSgoVykpKQo+IC0KPiAgc3RhdGljIHUzMgo+ICBnZW4xMV9ndF9lbmdpbmVfaWRlbnRpdHko c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKiBjb25zdCBpOTE1LAo+ICAJCQkgY29uc3QgdW5zaWdu ZWQgaW50IGJhbmssIGNvbnN0IHVuc2lnbmVkIGludCBiaXQpCj4gQEAgLTMxNzIsMTg2ICszMTMy LDYgQEAgc3RhdGljIGlycXJldHVybl90IGdlbjExX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQg KmFyZykKPiAgCXJldHVybiBJUlFfSEFORExFRDsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgaTkx NV9yZXNldF9kZXZpY2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkg ICAgICB1MzIgZW5naW5lX21hc2ssCj4gLQkJCSAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbikKPiAt ewo+IC0Jc3RydWN0IGk5MTVfZ3B1X2Vycm9yICplcnJvciA9ICZkZXZfcHJpdi0+Z3B1X2Vycm9y Owo+IC0Jc3RydWN0IGtvYmplY3QgKmtvYmogPSAmZGV2X3ByaXYtPmRybS5wcmltYXJ5LT5rZGV2 LT5rb2JqOwo+IC0JY2hhciAqZXJyb3JfZXZlbnRbXSA9IHsgSTkxNV9FUlJPUl9VRVZFTlQgIj0x IiwgTlVMTCB9Owo+IC0JY2hhciAqcmVzZXRfZXZlbnRbXSA9IHsgSTkxNV9SRVNFVF9VRVZFTlQg Ij0xIiwgTlVMTCB9Owo+IC0JY2hhciAqcmVzZXRfZG9uZV9ldmVudFtdID0geyBJOTE1X0VSUk9S X1VFVkVOVCAiPTAiLCBOVUxMIH07Cj4gLQlzdHJ1Y3Qgd2VkZ2VfbWUgdzsKPiAtCj4gLQlrb2Jq ZWN0X3VldmVudF9lbnYoa29iaiwgS09CSl9DSEFOR0UsIGVycm9yX2V2ZW50KTsKPiAtCj4gLQlE Uk1fREVCVUdfRFJJVkVSKCJyZXNldHRpbmcgY2hpcFxuIik7Cj4gLQlrb2JqZWN0X3VldmVudF9l bnYoa29iaiwgS09CSl9DSEFOR0UsIHJlc2V0X2V2ZW50KTsKPiAtCj4gLQkvKiBVc2UgYSB3YXRj aGRvZyB0byBlbnN1cmUgdGhhdCBvdXIgcmVzZXQgY29tcGxldGVzICovCj4gLQlpOTE1X3dlZGdl X29uX3RpbWVvdXQoJncsIGRldl9wcml2LCA1KkhaKSB7Cj4gLQkJaW50ZWxfcHJlcGFyZV9yZXNl dChkZXZfcHJpdik7Cj4gLQo+IC0JCWVycm9yLT5yZWFzb24gPSByZWFzb247Cj4gLQkJZXJyb3It PnN0YWxsZWRfbWFzayA9IGVuZ2luZV9tYXNrOwo+IC0KPiAtCQkvKiBTaWduYWwgdGhhdCBsb2Nr ZWQgd2FpdGVycyBzaG91bGQgcmVzZXQgdGhlIEdQVSAqLwo+IC0JCXNtcF9tYl9fYmVmb3JlX2F0 b21pYygpOwo+IC0JCXNldF9iaXQoSTkxNV9SRVNFVF9IQU5ET0ZGLCAmZXJyb3ItPmZsYWdzKTsK PiAtCQl3YWtlX3VwX2FsbCgmZXJyb3ItPndhaXRfcXVldWUpOwo+IC0KPiAtCQkvKiBXYWl0IGZv ciBhbnlvbmUgaG9sZGluZyB0aGUgbG9jayB0byB3YWtldXAsIHdpdGhvdXQKPiAtCQkgKiBibG9j a2luZyBpbmRlZmluaXRlbHkgb24gc3RydWN0X211dGV4Lgo+IC0JCSAqLwo+IC0JCWRvIHsKPiAt CQkJaWYgKG11dGV4X3RyeWxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KSkgewo+IC0J CQkJaTkxNV9yZXNldChkZXZfcHJpdiwgZW5naW5lX21hc2ssIHJlYXNvbik7Cj4gLQkJCQltdXRl eF91bmxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCQkJfQo+IC0JCX0gd2hp bGUgKHdhaXRfb25fYml0X3RpbWVvdXQoJmVycm9yLT5mbGFncywKPiAtCQkJCQkgICAgIEk5MTVf UkVTRVRfSEFORE9GRiwKPiAtCQkJCQkgICAgIFRBU0tfVU5JTlRFUlJVUFRJQkxFLAo+IC0JCQkJ CSAgICAgMSkpOwo+IC0KPiAtCQllcnJvci0+c3RhbGxlZF9tYXNrID0gMDsKPiAtCQllcnJvci0+ cmVhc29uID0gTlVMTDsKPiAtCj4gLQkJaW50ZWxfZmluaXNoX3Jlc2V0KGRldl9wcml2KTsKPiAt CX0KPiAtCj4gLQlpZiAoIXRlc3RfYml0KEk5MTVfV0VER0VELCAmZXJyb3ItPmZsYWdzKSkKPiAt CQlrb2JqZWN0X3VldmVudF9lbnYoa29iaiwgS09CSl9DSEFOR0UsIHJlc2V0X2RvbmVfZXZlbnQp Owo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBpOTE1X2NsZWFyX2Vycm9yX3JlZ2lzdGVycyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXUzMiBlaXI7Cj4gLQo+IC0J aWYgKCFJU19HRU4yKGRldl9wcml2KSkKPiAtCQlJOTE1X1dSSVRFKFBHVEJMX0VSLCBJOTE1X1JF QUQoUEdUQkxfRVIpKTsKPiAtCj4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDQpCj4gLQkJ STkxNV9XUklURShJUEVJUiwgSTkxNV9SRUFEKElQRUlSKSk7Cj4gLQllbHNlCj4gLQkJSTkxNV9X UklURShJUEVJUl9JOTY1LCBJOTE1X1JFQUQoSVBFSVJfSTk2NSkpOwo+IC0KPiAtCUk5MTVfV1JJ VEUoRUlSLCBJOTE1X1JFQUQoRUlSKSk7Cj4gLQllaXIgPSBJOTE1X1JFQUQoRUlSKTsKPiAtCWlm IChlaXIpIHsKPiAtCQkvKgo+IC0JCSAqIHNvbWUgZXJyb3JzIG1pZ2h0IGhhdmUgYmVjb21lIHN0 dWNrLAo+IC0JCSAqIG1hc2sgdGhlbS4KPiAtCQkgKi8KPiAtCQlEUk1fREVCVUdfRFJJVkVSKCJF SVIgc3R1Y2s6IDB4JTA4eCwgbWFza2luZ1xuIiwgZWlyKTsKPiAtCQlJOTE1X1dSSVRFKEVNUiwg STkxNV9SRUFEKEVNUikgfCBlaXIpOwo+IC0JCUk5MTVfV1JJVEUoSUlSLCBJOTE1X01BU1RFUl9F UlJPUl9JTlRFUlJVUFQpOwo+IC0JfQo+IC19Cj4gLQo+IC0vKioKPiAtICogaTkxNV9oYW5kbGVf ZXJyb3IgLSBoYW5kbGUgYSBncHUgZXJyb3IKPiAtICogQGRldl9wcml2OiBpOTE1IGRldmljZSBw cml2YXRlCj4gLSAqIEBlbmdpbmVfbWFzazogbWFzayByZXByZXNlbnRpbmcgZW5naW5lcyB0aGF0 IGFyZSBodW5nCj4gLSAqIEBmbGFnczogY29udHJvbCBmbGFncwo+IC0gKiBAZm10OiBFcnJvciBt ZXNzYWdlIGZvcm1hdCBzdHJpbmcKPiAtICoKPiAtICogRG8gc29tZSBiYXNpYyBjaGVja2luZyBv ZiByZWdpc3RlciBzdGF0ZSBhdCBlcnJvciB0aW1lIGFuZAo+IC0gKiBkdW1wIGl0IHRvIHRoZSBz eXNsb2cuICBBbHNvIGNhbGwgaTkxNV9jYXB0dXJlX2Vycm9yX3N0YXRlKCkgdG8gbWFrZQo+IC0g KiBzdXJlIHdlIGdldCBhIHJlY29yZCBhbmQgbWFrZSBpdCBhdmFpbGFibGUgaW4gZGVidWdmcy4g IEZpcmUgYSB1ZXZlbnQKPiAtICogc28gdXNlcnNwYWNlIGtub3dzIHNvbWV0aGluZyBiYWQgaGFw cGVuZWQgKHNob3VsZCB0cmlnZ2VyIGNvbGxlY3Rpb24KPiAtICogb2YgYSByaW5nIGR1bXAgZXRj LikuCj4gLSAqLwo+IC12b2lkIGk5MTVfaGFuZGxlX2Vycm9yKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPiAtCQkgICAgICAgdTMyIGVuZ2luZV9tYXNrLAo+IC0JCSAgICAgICB1 bnNpZ25lZCBsb25nIGZsYWdzLAo+IC0JCSAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKPiAt ewo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+IC0JdW5zaWduZWQgaW50IHRt cDsKPiAtCWNoYXIgZXJyb3JfbXNnWzgwXTsKPiAtCWNoYXIgKm1zZyA9IE5VTEw7Cj4gLQo+IC0J aWYgKGZtdCkgewo+IC0JCXZhX2xpc3QgYXJnczsKPiAtCj4gLQkJdmFfc3RhcnQoYXJncywgZm10 KTsKPiAtCQl2c2NucHJpbnRmKGVycm9yX21zZywgc2l6ZW9mKGVycm9yX21zZyksIGZtdCwgYXJn cyk7Cj4gLQkJdmFfZW5kKGFyZ3MpOwo+IC0KPiAtCQltc2cgPSBlcnJvcl9tc2c7Cj4gLQl9Cj4g LQo+IC0JLyoKPiAtCSAqIEluIG1vc3QgY2FzZXMgaXQncyBndWFyYW50ZWVkIHRoYXQgd2UgZ2V0 IGhlcmUgd2l0aCBhbiBSUE0KPiAtCSAqIHJlZmVyZW5jZSBoZWxkLCBmb3IgZXhhbXBsZSBiZWNh dXNlIHRoZXJlIGlzIGEgcGVuZGluZyBHUFUKPiAtCSAqIHJlcXVlc3QgdGhhdCB3b24ndCBmaW5p c2ggdW50aWwgdGhlIHJlc2V0IGlzIGRvbmUuIFRoaXMKPiAtCSAqIGlzbid0IHRoZSBjYXNlIGF0 IGxlYXN0IHdoZW4gd2UgZ2V0IGhlcmUgYnkgZG9pbmcgYQo+IC0JICogc2ltdWxhdGVkIHJlc2V0 IHZpYSBkZWJ1Z2ZzLCBzbyBnZXQgYW4gUlBNIHJlZmVyZW5jZS4KPiAtCSAqLwo+IC0JaW50ZWxf cnVudGltZV9wbV9nZXQoZGV2X3ByaXYpOwo+IC0KPiAtCWVuZ2luZV9tYXNrICY9IElOVEVMX0lO Rk8oZGV2X3ByaXYpLT5yaW5nX21hc2s7Cj4gLQo+IC0JaWYgKGZsYWdzICYgSTkxNV9FUlJPUl9D QVBUVVJFKSB7Cj4gLQkJaTkxNV9jYXB0dXJlX2Vycm9yX3N0YXRlKGRldl9wcml2LCBlbmdpbmVf bWFzaywgbXNnKTsKPiAtCQlpOTE1X2NsZWFyX2Vycm9yX3JlZ2lzdGVycyhkZXZfcHJpdik7Cj4g LQl9Cj4gLQo+IC0JLyoKPiAtCSAqIFRyeSBlbmdpbmUgcmVzZXQgd2hlbiBhdmFpbGFibGUuIFdl IGZhbGwgYmFjayB0byBmdWxsIHJlc2V0IGlmCj4gLQkgKiBzaW5nbGUgcmVzZXQgZmFpbHMuCj4g LQkgKi8KPiAtCWlmIChpbnRlbF9oYXNfcmVzZXRfZW5naW5lKGRldl9wcml2KSkgewo+IC0JCWZv cl9lYWNoX2VuZ2luZV9tYXNrZWQoZW5naW5lLCBkZXZfcHJpdiwgZW5naW5lX21hc2ssIHRtcCkg ewo+IC0JCQlCVUlMRF9CVUdfT04oSTkxNV9SRVNFVF9NT0RFU0VUID49IEk5MTVfUkVTRVRfRU5H SU5FKTsKPiAtCQkJaWYgKHRlc3RfYW5kX3NldF9iaXQoSTkxNV9SRVNFVF9FTkdJTkUgKyBlbmdp bmUtPmlkLAo+IC0JCQkJCSAgICAgJmRldl9wcml2LT5ncHVfZXJyb3IuZmxhZ3MpKQo+IC0JCQkJ Y29udGludWU7Cj4gLQo+IC0JCQlpZiAoaTkxNV9yZXNldF9lbmdpbmUoZW5naW5lLCBtc2cpID09 IDApCj4gLQkJCQllbmdpbmVfbWFzayAmPSB+aW50ZWxfZW5naW5lX2ZsYWcoZW5naW5lKTsKPiAt Cj4gLQkJCWNsZWFyX2JpdChJOTE1X1JFU0VUX0VOR0lORSArIGVuZ2luZS0+aWQsCj4gLQkJCQkg ICZkZXZfcHJpdi0+Z3B1X2Vycm9yLmZsYWdzKTsKPiAtCQkJd2FrZV91cF9iaXQoJmRldl9wcml2 LT5ncHVfZXJyb3IuZmxhZ3MsCj4gLQkJCQkgICAgSTkxNV9SRVNFVF9FTkdJTkUgKyBlbmdpbmUt PmlkKTsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JaWYgKCFlbmdpbmVfbWFzaykKPiAtCQlnb3RvIG91 dDsKPiAtCj4gLQkvKiBGdWxsIHJlc2V0IG5lZWRzIHRoZSBtdXRleCwgc3RvcCBhbnkgb3RoZXIg dXNlciB0cnlpbmcgdG8gZG8gc28uICovCj4gLQlpZiAodGVzdF9hbmRfc2V0X2JpdChJOTE1X1JF U0VUX0JBQ0tPRkYsICZkZXZfcHJpdi0+Z3B1X2Vycm9yLmZsYWdzKSkgewo+IC0JCXdhaXRfZXZl bnQoZGV2X3ByaXYtPmdwdV9lcnJvci5yZXNldF9xdWV1ZSwKPiAtCQkJICAgIXRlc3RfYml0KEk5 MTVfUkVTRVRfQkFDS09GRiwKPiAtCQkJCSAgICAgJmRldl9wcml2LT5ncHVfZXJyb3IuZmxhZ3Mp KTsKPiAtCQlnb3RvIG91dDsKPiAtCX0KPiAtCj4gLQkvKiBQcmV2ZW50IGFueSBvdGhlciByZXNl dC1lbmdpbmUgYXR0ZW1wdC4gKi8KPiAtCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2 LCB0bXApIHsKPiAtCQl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChJOTE1X1JFU0VUX0VOR0lORSAr IGVuZ2luZS0+aWQsCj4gLQkJCQkJJmRldl9wcml2LT5ncHVfZXJyb3IuZmxhZ3MpKQo+IC0JCQl3 YWl0X29uX2JpdCgmZGV2X3ByaXYtPmdwdV9lcnJvci5mbGFncywKPiAtCQkJCSAgICBJOTE1X1JF U0VUX0VOR0lORSArIGVuZ2luZS0+aWQsCj4gLQkJCQkgICAgVEFTS19VTklOVEVSUlVQVElCTEUp Owo+IC0JfQo+IC0KPiAtCWk5MTVfcmVzZXRfZGV2aWNlKGRldl9wcml2LCBlbmdpbmVfbWFzaywg bXNnKTsKPiAtCj4gLQlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBkZXZfcHJpdiwgdG1wKSB7Cj4g LQkJY2xlYXJfYml0KEk5MTVfUkVTRVRfRU5HSU5FICsgZW5naW5lLT5pZCwKPiAtCQkJICAmZGV2 X3ByaXYtPmdwdV9lcnJvci5mbGFncyk7Cj4gLQl9Cj4gLQo+IC0JY2xlYXJfYml0KEk5MTVfUkVT RVRfQkFDS09GRiwgJmRldl9wcml2LT5ncHVfZXJyb3IuZmxhZ3MpOwo+IC0Jd2FrZV91cF9hbGwo JmRldl9wcml2LT5ncHVfZXJyb3IucmVzZXRfcXVldWUpOwo+IC0KPiAtb3V0Ogo+IC0JaW50ZWxf cnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOwo+IC19Cj4gLQo+ICAvKiBDYWxsZWQgZnJvbSBkcm0g Z2VuZXJpYyBjb2RlLCBwYXNzZWQgJ2NydGMnIHdoaWNoCj4gICAqIHdlIHVzZSBhcyBhIHBpcGUg aW5kZXgKPiAgICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVx dWVzdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMKPiBpbmRleCA1YzJj OTNjYmFiMTIuLjliYmVhN2JhYTU1ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3JlcXVlc3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVz dC5jCj4gQEAgLTI5LDYgKzI5LDcgQEAKPiAgI2luY2x1ZGUgPGxpbnV4L3NjaGVkL3NpZ25hbC5o Pgo+ICAKPiAgI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gKyNpbmNsdWRlICJpOTE1X3Jlc2V0Lmgi Cj4gIAo+ICBzdGF0aWMgY29uc3QgY2hhciAqaTkxNV9mZW5jZV9nZXRfZHJpdmVyX25hbWUoc3Ry dWN0IGRtYV9mZW5jZSAqZmVuY2UpCj4gIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9yZXNldC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXNldC5jCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmVkZjI5ZGExNWE5OQo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jlc2V0LmMK PiBAQCAtMCwwICsxLDEyNzEgQEAKPiArLyoKPiArICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IE1JVAo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAwOC0yMDE4IEludGVsIENvcnBvcmF0aW9u Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gKyNpbmNsdWRlICJpOTE1X2dw dV9lcnJvci5oIgo+ICsjaW5jbHVkZSAiaTkxNV9yZXNldC5oIgo+ICsKPiArI2luY2x1ZGUgImlu dGVsX2d1Yy5oIgo+ICsKPiArc3RhdGljIHZvaWQgZW5naW5lX3NraXBfY29udGV4dChzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycSkKPiArewo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l ID0gcnEtPmVuZ2luZTsKPiArCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpodW5nX2N0eCA9IHJx LT5nZW1fY29udGV4dDsKPiArCXN0cnVjdCBpOTE1X3RpbWVsaW5lICp0aW1lbGluZSA9IHJxLT50 aW1lbGluZTsKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsJR0VNX0JVR19PTih0aW1l bGluZSA9PSAmZW5naW5lLT50aW1lbGluZSk7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmVu Z2luZS0+dGltZWxpbmUubG9jaywgZmxhZ3MpOwo+ICsJc3Bpbl9sb2NrKCZ0aW1lbGluZS0+bG9j ayk7Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShycSwgJmVuZ2luZS0+dGlt ZWxpbmUucmVxdWVzdHMsIGxpbmspCj4gKwkJaWYgKHJxLT5nZW1fY29udGV4dCA9PSBodW5nX2N0 eCkKPiArCQkJaTkxNV9yZXF1ZXN0X3NraXAocnEsIC1FSU8pOwo+ICsKPiArCWxpc3RfZm9yX2Vh Y2hfZW50cnkocnEsICZ0aW1lbGluZS0+cmVxdWVzdHMsIGxpbmspCj4gKwkJaTkxNV9yZXF1ZXN0 X3NraXAocnEsIC1FSU8pOwo+ICsKPiArCXNwaW5fdW5sb2NrKCZ0aW1lbGluZS0+bG9jayk7Cj4g KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPnRpbWVsaW5lLmxvY2ssIGZsYWdzKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgY2xpZW50X21hcmtfZ3VpbHR5KHN0cnVjdCBkcm1faTkx NV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdiwKPiArCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpOTE1 X2dlbV9jb250ZXh0ICpjdHgpCj4gK3sKPiArCXVuc2lnbmVkIGludCBzY29yZTsKPiArCXVuc2ln bmVkIGxvbmcgcHJldl9oYW5nOwo+ICsKPiArCWlmIChpOTE1X2dlbV9jb250ZXh0X2lzX2Jhbm5l ZChjdHgpKQo+ICsJCXNjb3JlID0gSTkxNV9DTElFTlRfU0NPUkVfQ09OVEVYVF9CQU47Cj4gKwll bHNlCj4gKwkJc2NvcmUgPSAwOwo+ICsKPiArCXByZXZfaGFuZyA9IHhjaGcoJmZpbGVfcHJpdi0+ aGFuZ190aW1lc3RhbXAsIGppZmZpZXMpOwo+ICsJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHBy ZXZfaGFuZyArIEk5MTVfQ0xJRU5UX0ZBU1RfSEFOR19KSUZGSUVTKSkKPiArCQlzY29yZSArPSBJ OTE1X0NMSUVOVF9TQ09SRV9IQU5HX0ZBU1Q7Cj4gKwo+ICsJaWYgKHNjb3JlKSB7Cj4gKwkJYXRv bWljX2FkZChzY29yZSwgJmZpbGVfcHJpdi0+YmFuX3Njb3JlKTsKPiArCj4gKwkJRFJNX0RFQlVH X0RSSVZFUigiY2xpZW50ICVzOiBnYWluZWQgJXUgYmFuIHNjb3JlLCBub3cgJXVcbiIsCj4gKwkJ CQkgY3R4LT5uYW1lLCBzY29yZSwKPiArCQkJCSBhdG9taWNfcmVhZCgmZmlsZV9wcml2LT5iYW5f c2NvcmUpKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY29udGV4dF9tYXJrX2d1aWx0 eShzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgc2Nv cmU7Cj4gKwlib29sIGJhbm5lZCwgYmFubmFibGU7Cj4gKwo+ICsJYXRvbWljX2luYygmY3R4LT5n dWlsdHlfY291bnQpOwo+ICsKPiArCWJhbm5hYmxlID0gaTkxNV9nZW1fY29udGV4dF9pc19iYW5u YWJsZShjdHgpOwo+ICsJc2NvcmUgPSBhdG9taWNfYWRkX3JldHVybihDT05URVhUX1NDT1JFX0dV SUxUWSwgJmN0eC0+YmFuX3Njb3JlKTsKPiArCWJhbm5lZCA9IHNjb3JlID49IENPTlRFWFRfU0NP UkVfQkFOX1RIUkVTSE9MRDsKPiArCj4gKwkvKiBDb29sIGNvbnRleHRzIGRvbid0IGFjY3VtdWxh dGUgY2xpZW50IGJhbiBzY29yZSAqLwo+ICsJaWYgKCFiYW5uYWJsZSkKPiArCQlyZXR1cm47Cj4g Kwo+ICsJaWYgKGJhbm5lZCkgewo+ICsJCURSTV9ERUJVR19EUklWRVIoImNvbnRleHQgJXM6IGd1 aWx0eSAlZCwgc2NvcmUgJXUsIGJhbm5lZFxuIiwKPiArCQkJCSBjdHgtPm5hbWUsIGF0b21pY19y ZWFkKCZjdHgtPmd1aWx0eV9jb3VudCksCj4gKwkJCQkgc2NvcmUpOwo+ICsJCWk5MTVfZ2VtX2Nv bnRleHRfc2V0X2Jhbm5lZChjdHgpOwo+ICsJfQo+ICsKPiArCWlmICghSVNfRVJSX09SX05VTEwo Y3R4LT5maWxlX3ByaXYpKQo+ICsJCWNsaWVudF9tYXJrX2d1aWx0eShjdHgtPmZpbGVfcHJpdiwg Y3R4KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY29udGV4dF9tYXJrX2lubm9jZW50KHN0cnVj dCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4gK3sKPiArCWF0b21pY19pbmMoJmN0eC0+YWN0aXZl X2NvdW50KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZ2VuM19zdG9wX2VuZ2luZShzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKPiArCWNvbnN0IHUzMiBiYXNlID0gZW5naW5lLT5t bWlvX2Jhc2U7Cj4gKwo+ICsJaWYgKGludGVsX2VuZ2luZV9zdG9wX2NzKGVuZ2luZSkpCj4gKwkJ RFJNX0RFQlVHX0RSSVZFUigiJXM6IHRpbWVkIG91dCBvbiBTVE9QX1JJTkdcbiIsIGVuZ2luZS0+ bmFtZSk7Cj4gKwo+ICsJSTkxNV9XUklURV9GVyhSSU5HX0hFQUQoYmFzZSksIEk5MTVfUkVBRF9G VyhSSU5HX1RBSUwoYmFzZSkpKTsKPiArCVBPU1RJTkdfUkVBRF9GVyhSSU5HX0hFQUQoYmFzZSkp OyAvKiBwYXJhbm9pYSAqLwo+ICsKPiArCUk5MTVfV1JJVEVfRlcoUklOR19IRUFEKGJhc2UpLCAw KTsKPiArCUk5MTVfV1JJVEVfRlcoUklOR19UQUlMKGJhc2UpLCAwKTsKPiArCVBPU1RJTkdfUkVB RF9GVyhSSU5HX1RBSUwoYmFzZSkpOwo+ICsKPiArCS8qIFRoZSByaW5nIG11c3QgYmUgZW1wdHkg YmVmb3JlIGl0IGlzIGRpc2FibGVkICovCj4gKwlJOTE1X1dSSVRFX0ZXKFJJTkdfQ1RMKGJhc2Up LCAwKTsKPiArCj4gKwkvKiBDaGVjayBhY3RzIGFzIGEgcG9zdCAqLwo+ICsJaWYgKEk5MTVfUkVB RF9GVyhSSU5HX0hFQUQoYmFzZSkpICE9IDApCj4gKwkJRFJNX0RFQlVHX0RSSVZFUigiJXM6IHJp bmcgaGVhZCBub3QgcGFya2VkXG4iLAo+ICsJCQkJIGVuZ2luZS0+bmFtZSk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGk5MTVfc3RvcF9lbmdpbmVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1LAo+ICsJCQkgICAgICB1bnNpZ25lZCBpbnQgZW5naW5lX21hc2spCj4gK3sKPiArCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiArCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+ ICsKPiArCWlmIChJTlRFTF9HRU4oaTkxNSkgPCAzKQo+ICsJCXJldHVybjsKPiArCj4gKwlmb3Jf ZWFjaF9lbmdpbmVfbWFza2VkKGVuZ2luZSwgaTkxNSwgZW5naW5lX21hc2ssIGlkKQo+ICsJCWdl bjNfc3RvcF9lbmdpbmUoZW5naW5lKTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgaTkxNV9pbl9y ZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKPiArewo+ICsJdTggZ2Ryc3Q7Cj4gKwo+ICsJcGNp X3JlYWRfY29uZmlnX2J5dGUocGRldiwgSTkxNV9HRFJTVCwgJmdkcnN0KTsKPiArCXJldHVybiBn ZHJzdCAmIEdSRE9NX1JFU0VUX1NUQVRVUzsKPiArfQo+ICsKPiArc3RhdGljIGludCBpOTE1X2Rv X3Jlc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICsJCQkgdW5zaWduZWQgaW50 IGVuZ2luZV9tYXNrKQo+ICt7Cj4gKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGk5MTUtPmRybS5w ZGV2Owo+ICsJaW50IGVycjsKPiArCj4gKwkvKiBBc3NlcnQgcmVzZXQgZm9yIGF0IGxlYXN0IDIw IHVzZWMsIGFuZCB3YWl0IGZvciBhY2tub3dsZWRnZW1lbnQuICovCj4gKwlwY2lfd3JpdGVfY29u ZmlnX2J5dGUocGRldiwgSTkxNV9HRFJTVCwgR1JET01fUkVTRVRfRU5BQkxFKTsKPiArCXVzbGVl cF9yYW5nZSg1MCwgMjAwKTsKPiArCWVyciA9IHdhaXRfZm9yKGk5MTVfaW5fcmVzZXQocGRldiks IDUwMCk7Cj4gKwo+ICsJLyogQ2xlYXIgdGhlIHJlc2V0IHJlcXVlc3QuICovCj4gKwlwY2lfd3Jp dGVfY29uZmlnX2J5dGUocGRldiwgSTkxNV9HRFJTVCwgMCk7Cj4gKwl1c2xlZXBfcmFuZ2UoNTAs IDIwMCk7Cj4gKwlpZiAoIWVycikKPiArCQllcnIgPSB3YWl0X2ZvcighaTkxNV9pbl9yZXNldChw ZGV2KSwgNTAwKTsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBn NHhfcmVzZXRfY29tcGxldGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4gK3sKPiArCXU4IGdkcnN0 Owo+ICsKPiArCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIEk5MTVfR0RSU1QsICZnZHJzdCk7 Cj4gKwlyZXR1cm4gKGdkcnN0ICYgR1JET01fUkVTRVRfRU5BQkxFKSA9PSAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGczM19kb19yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwg dW5zaWduZWQgaW50IGVuZ2luZV9tYXNrKQo+ICt7Cj4gKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9 IGk5MTUtPmRybS5wZGV2Owo+ICsKPiArCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBJOTE1 X0dEUlNULCBHUkRPTV9SRVNFVF9FTkFCTEUpOwo+ICsJcmV0dXJuIHdhaXRfZm9yKGc0eF9yZXNl dF9jb21wbGV0ZShwZGV2KSwgNTAwKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBnNHhfZG9fcmVz ZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQl1bnNpZ25lZCBpbnQg ZW5naW5lX21hc2spCj4gK3sKPiArCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2X3ByaXYtPmRy bS5wZGV2Owo+ICsJaW50IHJldDsKPiArCj4gKwkvKiBXYVZjcENsa0dhdGVEaXNhYmxlRm9yTWVk aWFSZXNldDpjdGcsZWxrICovCj4gKwlJOTE1X1dSSVRFKFZERUNDTEtfR0FURV9ELAo+ICsJCSAg IEk5MTVfUkVBRChWREVDQ0xLX0dBVEVfRCkgfCBWQ1BfVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUp Owo+ICsJUE9TVElOR19SRUFEKFZERUNDTEtfR0FURV9EKTsKPiArCj4gKwlwY2lfd3JpdGVfY29u ZmlnX2J5dGUocGRldiwgSTkxNV9HRFJTVCwKPiArCQkJICAgICAgR1JET01fTUVESUEgfCBHUkRP TV9SRVNFVF9FTkFCTEUpOwo+ICsJcmV0ID0gIHdhaXRfZm9yKGc0eF9yZXNldF9jb21wbGV0ZShw ZGV2KSwgNTAwKTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fREVCVUdfRFJJVkVSKCJXYWl0IGZv ciBtZWRpYSByZXNldCBmYWlsZWRcbiIpOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCXBj aV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBJOTE1X0dEUlNULAo+ICsJCQkgICAgICBHUkRPTV9S RU5ERVIgfCBHUkRPTV9SRVNFVF9FTkFCTEUpOwo+ICsJcmV0ID0gIHdhaXRfZm9yKGc0eF9yZXNl dF9jb21wbGV0ZShwZGV2KSwgNTAwKTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fREVCVUdfRFJJ VkVSKCJXYWl0IGZvciByZW5kZXIgcmVzZXQgZmFpbGVkXG4iKTsKPiArCQlnb3RvIG91dDsKPiAr CX0KPiArCj4gK291dDoKPiArCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBJOTE1X0dEUlNU LCAwKTsKPiArCj4gKwlJOTE1X1dSSVRFKFZERUNDTEtfR0FURV9ELAo+ICsJCSAgIEk5MTVfUkVB RChWREVDQ0xLX0dBVEVfRCkgJiB+VkNQX1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKPiArCVBP U1RJTkdfUkVBRChWREVDQ0xLX0dBVEVfRCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsK PiArc3RhdGljIGludCBpcm9ubGFrZV9kb19yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCj4gKwkJCSAgICAgdW5zaWduZWQgaW50IGVuZ2luZV9tYXNrKQo+ICt7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCUk5MTVfV1JJVEUoSUxLX0dEU1IsIElMS19HUkRPTV9SRU5ERVIgfCBJ TEtfR1JET01fUkVTRVRfRU5BQkxFKTsKPiArCXJldCA9IGludGVsX3dhaXRfZm9yX3JlZ2lzdGVy KGRldl9wcml2LAo+ICsJCQkJICAgICAgSUxLX0dEU1IsIElMS19HUkRPTV9SRVNFVF9FTkFCTEUs IDAsCj4gKwkJCQkgICAgICA1MDApOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9ERUJVR19EUklW RVIoIldhaXQgZm9yIHJlbmRlciByZXNldCBmYWlsZWRcbiIpOwo+ICsJCWdvdG8gb3V0Owo+ICsJ fQo+ICsKPiArCUk5MTVfV1JJVEUoSUxLX0dEU1IsIElMS19HUkRPTV9NRURJQSB8IElMS19HUkRP TV9SRVNFVF9FTkFCTEUpOwo+ICsJcmV0ID0gaW50ZWxfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3By aXYsCj4gKwkJCQkgICAgICBJTEtfR0RTUiwgSUxLX0dSRE9NX1JFU0VUX0VOQUJMRSwgMCwKPiAr CQkJCSAgICAgIDUwMCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0RFQlVHX0RSSVZFUigiV2Fp dCBmb3IgbWVkaWEgcmVzZXQgZmFpbGVkXG4iKTsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4g K291dDoKPiArCUk5MTVfV1JJVEUoSUxLX0dEU1IsIDApOwo+ICsJUE9TVElOR19SRUFEKElMS19H RFNSKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qIFJlc2V0IHRoZSBoYXJkd2FyZSBk b21haW5zIChHRU5YX0dSRE9NXyopIHNwZWNpZmllZCBieSBtYXNrICovCj4gK3N0YXRpYyBpbnQg Z2VuNl9od19kb21haW5fcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ ICsJCQkJdTMyIGh3X2RvbWFpbl9tYXNrKQo+ICt7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCS8qCj4g KwkgKiBHRU42X0dEUlNUIGlzIG5vdCBpbiB0aGUgZ3QgcG93ZXIgd2VsbCwgbm8gbmVlZCB0byBj aGVjawo+ICsJICogZm9yIGZpZm8gc3BhY2UgZm9yIHRoZSB3cml0ZSBvciBmb3JjZXdha2UgdGhl IGNoaXAgZm9yCj4gKwkgKiB0aGUgcmVhZAo+ICsJICovCj4gKwlJOTE1X1dSSVRFX0ZXKEdFTjZf R0RSU1QsIGh3X2RvbWFpbl9tYXNrKTsKPiArCj4gKwkvKiBXYWl0IGZvciB0aGUgZGV2aWNlIHRv IGFjayB0aGUgcmVzZXQgcmVxdWVzdHMgKi8KPiArCWVyciA9IF9faW50ZWxfd2FpdF9mb3JfcmVn aXN0ZXJfZncoZGV2X3ByaXYsCj4gKwkJCQkJICAgR0VONl9HRFJTVCwgaHdfZG9tYWluX21hc2ss IDAsCj4gKwkJCQkJICAgNTAwLCAwLAo+ICsJCQkJCSAgIE5VTEwpOwo+ICsJaWYgKGVycikKPiAr CQlEUk1fREVCVUdfRFJJVkVSKCJXYWl0IGZvciAweCUwOHggZW5naW5lcyByZXNldCBmYWlsZWRc biIsCj4gKwkJCQkgaHdfZG9tYWluX21hc2spOwo+ICsKPiArCXJldHVybiBlcnI7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgZ2VuNl9yZXNldF9lbmdpbmVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1LAo+ICsJCQkgICAgICB1bnNpZ25lZCBpbnQgZW5naW5lX21hc2spCj4gK3sKPiArCXN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiArCWNvbnN0IHUzMiBod19lbmdpbmVfbWFz a1tJOTE1X05VTV9FTkdJTkVTXSA9IHsKPiArCQlbUkNTXSA9IEdFTjZfR1JET01fUkVOREVSLAo+ ICsJCVtCQ1NdID0gR0VONl9HUkRPTV9CTFQsCj4gKwkJW1ZDU10gPSBHRU42X0dSRE9NX01FRElB LAo+ICsJCVtWQ1MyXSA9IEdFTjhfR1JET01fTUVESUEyLAo+ICsJCVtWRUNTXSA9IEdFTjZfR1JE T01fVkVDUywKPiArCX07Cj4gKwl1MzIgaHdfbWFzazsKPiArCj4gKwlpZiAoZW5naW5lX21hc2sg PT0gQUxMX0VOR0lORVMpIHsKPiArCQlod19tYXNrID0gR0VONl9HUkRPTV9GVUxMOwo+ICsJfSBl bHNlIHsKPiArCQl1bnNpZ25lZCBpbnQgdG1wOwo+ICsKPiArCQlod19tYXNrID0gMDsKPiArCQlm b3JfZWFjaF9lbmdpbmVfbWFza2VkKGVuZ2luZSwgaTkxNSwgZW5naW5lX21hc2ssIHRtcCkKPiAr CQkJaHdfbWFzayB8PSBod19lbmdpbmVfbWFza1tlbmdpbmUtPmlkXTsKPiArCX0KPiArCj4gKwly ZXR1cm4gZ2VuNl9od19kb21haW5fcmVzZXQoaTkxNSwgaHdfbWFzayk7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgZ2VuMTFfcmVzZXRfZW5naW5lcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSwKPiArCQkJICAgICAgIHVuc2lnbmVkIGludCBlbmdpbmVfbWFzaykKPiArewo+ICsJc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICsJY29uc3QgdTMyIGh3X2VuZ2luZV9tYXNrW0k5 MTVfTlVNX0VOR0lORVNdID0gewo+ICsJCVtSQ1NdID0gR0VOMTFfR1JET01fUkVOREVSLAo+ICsJ CVtCQ1NdID0gR0VOMTFfR1JET01fQkxULAo+ICsJCVtWQ1NdID0gR0VOMTFfR1JET01fTUVESUEs Cj4gKwkJW1ZDUzJdID0gR0VOMTFfR1JET01fTUVESUEyLAo+ICsJCVtWQ1MzXSA9IEdFTjExX0dS RE9NX01FRElBMywKPiArCQlbVkNTNF0gPSBHRU4xMV9HUkRPTV9NRURJQTQsCj4gKwkJW1ZFQ1Nd ID0gR0VOMTFfR1JET01fVkVDUywKPiArCQlbVkVDUzJdID0gR0VOMTFfR1JET01fVkVDUzIsCj4g Kwl9Owo+ICsJdTMyIGh3X21hc2s7Cj4gKwo+ICsJQlVJTERfQlVHX09OKFZFQ1MyICsgMSAhPSBJ OTE1X05VTV9FTkdJTkVTKTsKPiArCj4gKwlpZiAoZW5naW5lX21hc2sgPT0gQUxMX0VOR0lORVMp IHsKPiArCQlod19tYXNrID0gR0VOMTFfR1JET01fRlVMTDsKPiArCX0gZWxzZSB7Cj4gKwkJdW5z aWduZWQgaW50IHRtcDsKPiArCj4gKwkJaHdfbWFzayA9IDA7Cj4gKwkJZm9yX2VhY2hfZW5naW5l X21hc2tlZChlbmdpbmUsIGk5MTUsIGVuZ2luZV9tYXNrLCB0bXApCj4gKwkJCWh3X21hc2sgfD0g aHdfZW5naW5lX21hc2tbZW5naW5lLT5pZF07Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGdlbjZfaHdf ZG9tYWluX3Jlc2V0KGk5MTUsIGh3X21hc2spOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdlbjhf cmVzZXRfZW5naW5lX3N0YXJ0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owo+ICsJ aW50IHJldDsKPiArCj4gKwlJOTE1X1dSSVRFX0ZXKFJJTkdfUkVTRVRfQ1RMKGVuZ2luZS0+bW1p b19iYXNlKSwKPiArCQkgICAgICBfTUFTS0VEX0JJVF9FTkFCTEUoUkVTRVRfQ1RMX1JFUVVFU1Rf UkVTRVQpKTsKPiArCj4gKwlyZXQgPSBfX2ludGVsX3dhaXRfZm9yX3JlZ2lzdGVyX2Z3KGRldl9w cml2LAo+ICsJCQkJCSAgIFJJTkdfUkVTRVRfQ1RMKGVuZ2luZS0+bW1pb19iYXNlKSwKPiArCQkJ CQkgICBSRVNFVF9DVExfUkVBRFlfVE9fUkVTRVQsCj4gKwkJCQkJICAgUkVTRVRfQ1RMX1JFQURZ X1RPX1JFU0VULAo+ICsJCQkJCSAgIDcwMCwgMCwKPiArCQkJCQkgICBOVUxMKTsKPiArCWlmIChy ZXQpCj4gKwkJRFJNX0VSUk9SKCIlczogcmVzZXQgcmVxdWVzdCB0aW1lb3V0XG4iLCBlbmdpbmUt Pm5hbWUpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGdlbjhf cmVzZXRfZW5naW5lX2NhbmNlbChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sK PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKPiAr Cj4gKwlJOTE1X1dSSVRFX0ZXKFJJTkdfUkVTRVRfQ1RMKGVuZ2luZS0+bW1pb19iYXNlKSwKPiAr CQkgICAgICBfTUFTS0VEX0JJVF9ESVNBQkxFKFJFU0VUX0NUTF9SRVFVRVNUX1JFU0VUKSk7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgZ2VuOF9yZXNldF9lbmdpbmVzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1LAo+ICsJCQkgICAgICB1bnNpZ25lZCBpbnQgZW5naW5lX21hc2spCj4gK3sK PiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiArCXVuc2lnbmVkIGludCB0bXA7 Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWZvcl9lYWNoX2VuZ2luZV9tYXNrZWQoZW5naW5lLCBpOTE1 LCBlbmdpbmVfbWFzaywgdG1wKSB7Cj4gKwkJaWYgKGdlbjhfcmVzZXRfZW5naW5lX3N0YXJ0KGVu Z2luZSkpIHsKPiArCQkJcmV0ID0gLUVJTzsKPiArCQkJZ290byBub3RfcmVhZHk7Cj4gKwkJfQo+ ICsJfQo+ICsKPiArCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTEpCj4gKwkJcmV0ID0gZ2VuMTFf cmVzZXRfZW5naW5lcyhpOTE1LCBlbmdpbmVfbWFzayk7Cj4gKwllbHNlCj4gKwkJcmV0ID0gZ2Vu Nl9yZXNldF9lbmdpbmVzKGk5MTUsIGVuZ2luZV9tYXNrKTsKPiArCj4gK25vdF9yZWFkeToKPiAr CWZvcl9lYWNoX2VuZ2luZV9tYXNrZWQoZW5naW5lLCBpOTE1LCBlbmdpbmVfbWFzaywgdG1wKQo+ ICsJCWdlbjhfcmVzZXRfZW5naW5lX2NhbmNlbChlbmdpbmUpOwo+ICsKPiArCXJldHVybiByZXQ7 Cj4gK30KPiArCj4gK3R5cGVkZWYgaW50ICgqcmVzZXRfZnVuYykoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKiwgdW5zaWduZWQgaW50IGVuZ2luZV9tYXNrKTsKPiArCj4gK3N0YXRpYyByZXNldF9m dW5jIGludGVsX2dldF9ncHVfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4g K3sKPiArCWlmICghaTkxNV9tb2RwYXJhbXMucmVzZXQpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ ICsJaWYgKElOVEVMX0dFTihpOTE1KSA+PSA4KQo+ICsJCXJldHVybiBnZW44X3Jlc2V0X2VuZ2lu ZXM7Cj4gKwllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNikKPiArCQlyZXR1cm4gZ2VuNl9y ZXNldF9lbmdpbmVzOwo+ICsJZWxzZSBpZiAoSVNfR0VONShpOTE1KSkKPiArCQlyZXR1cm4gaXJv bmxha2VfZG9fcmVzZXQ7Cj4gKwllbHNlIGlmIChJU19HNFgoaTkxNSkpCj4gKwkJcmV0dXJuIGc0 eF9kb19yZXNldDsKPiArCWVsc2UgaWYgKElTX0czMyhpOTE1KSB8fCBJU19QSU5FVklFVyhpOTE1 KSkKPiArCQlyZXR1cm4gZzMzX2RvX3Jlc2V0Owo+ICsJZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUp ID49IDMpCj4gKwkJcmV0dXJuIGk5MTVfZG9fcmVzZXQ7Cj4gKwllbHNlCj4gKwkJcmV0dXJuIE5V TEw7Cj4gK30KPiArCj4gK2ludCBpbnRlbF9ncHVfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUsIHVuc2lnbmVkIGludCBlbmdpbmVfbWFzaykKPiArewo+ICsJcmVzZXRfZnVuYyBy ZXNldCA9IGludGVsX2dldF9ncHVfcmVzZXQoaTkxNSk7Cj4gKwlpbnQgcmV0cnk7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCS8qCj4gKwkgKiBXZSB3YW50IHRvIHBlcmZvcm0gcGVyLWVuZ2luZSByZXNl dCBmcm9tIGF0b21pYyBjb250ZXh0IChlLmcuCj4gKwkgKiBzb2Z0aXJxKSwgd2hpY2ggaW1wb3Nl cyB0aGUgY29uc3RyYWludCB0aGF0IHdlIGNhbm5vdCBzbGVlcC4KPiArCSAqIEhvd2V2ZXIsIGV4 cGVyaWVuY2Ugc3VnZ2VzdHMgdGhhdCBzcGVuZGluZyBhIGJpdCBvZiB0aW1lIHdhaXRpbmcKPiAr CSAqIGZvciBhIHJlc2V0IGhlbHBzIGluIHZhcmlvdXMgY2FzZXMsIHNvIGZvciBhIGZ1bGwtZGV2 aWNlIHJlc2V0Cj4gKwkgKiB3ZSBhcHBseSB0aGUgb3Bwb3NpdGUgcnVsZSBhbmQgd2FpdCBpZiB3 ZSB3YW50IHRvLiBBcyB3ZSBzaG91bGQKPiArCSAqIGFsd2F5cyBmb2xsb3cgdXAgYSBmYWlsZWQg cGVyLWVuZ2luZSByZXNldCB3aXRoIGEgZnVsbCBkZXZpY2UgcmVzZXQsCj4gKwkgKiBiZWluZyBh IGxpdHRsZSBmYXN0ZXIsIHN0cmljdGVyIGFuZCBtb3JlIGVycm9yIHByb25lIGZvciB0aGUKPiAr CSAqIGF0b21pYyBjYXNlIHNlZW1zIGFuIGFjY2VwdGFibGUgY29tcHJvbWlzZS4KPiArCSAqCj4g KwkgKiBVbmZvcnR1bmF0ZWx5IHRoaXMgbGVhZHMgdG8gYSBiaW1vZGFsIHJvdXRpbmUsIHdoZW4g dGhlIGdvYWwgd2FzCj4gKwkgKiB0byBoYXZlIGEgc2luZ2xlIHJlc2V0IGZ1bmN0aW9uIHRoYXQg d29ya2VkIGZvciByZXNldHRpbmcgYW55Cj4gKwkgKiBudW1iZXIgb2YgZW5naW5lcyBzaW11bHRh bmVvdXNseS4KPiArCSAqLwo+ICsJbWlnaHRfc2xlZXBfaWYoZW5naW5lX21hc2sgPT0gQUxMX0VO R0lORVMpOwo+ICsKPiArCS8qCj4gKwkgKiBJZiB0aGUgcG93ZXIgd2VsbCBzbGVlcHMgZHVyaW5n IHRoZSByZXNldCwgdGhlIHJlc2V0Cj4gKwkgKiByZXF1ZXN0IG1heSBiZSBkcm9wcGVkIGFuZCBu ZXZlciBjb21wbGV0ZXMgKGNhdXNpbmcgLUVJTykuCj4gKwkgKi8KPiArCWludGVsX3VuY29yZV9m b3JjZXdha2VfZ2V0KGk5MTUsIEZPUkNFV0FLRV9BTEwpOwo+ICsJZm9yIChyZXRyeSA9IDA7IHJl dHJ5IDwgMzsgcmV0cnkrKykgewo+ICsJCS8qCj4gKwkJICogV2Ugc3RvcCBlbmdpbmVzLCBvdGhl cndpc2Ugd2UgbWlnaHQgZ2V0IGZhaWxlZCByZXNldCBhbmQgYQo+ICsJCSAqIGRlYWQgZ3B1IChv biBlbGspLiBBbHNvIGFzIG1vZGVybiBncHUgYXMga2JsIGNhbiBzdWZmZXIKPiArCQkgKiBmcm9t IHN5c3RlbSBoYW5nIGlmIGJhdGNoYnVmZmVyIGlzIHByb2dyZXNzaW5nIHdoZW4KPiArCQkgKiB0 aGUgcmVzZXQgaXMgaXNzdWVkLCByZWdhcmRsZXNzIG9mIFJFQURZX1RPX1JFU0VUIGFjay4KPiAr CQkgKiBUaHVzIGFzc3VtZSBpdCBpcyBiZXN0IHRvIHN0b3AgZW5naW5lcyBvbiBhbGwgZ2Vucwo+ ICsJCSAqIHdoZXJlIHdlIGhhdmUgYSBncHUgcmVzZXQuCj4gKwkJICoKPiArCQkgKiBXYUtCTFZF Q1NTZW1hcGhvcmVXYWl0UG9sbDprYmwgKG9uIEFMTF9FTkdJTkVTKQo+ICsJCSAqCj4gKwkJICog V2FNZWRpYVJlc2V0TWFpblJpbmdDbGVhbnVwOmN0ZyxlbGsgKHByZXN1bWFibHkpCj4gKwkJICoK PiArCQkgKiBGSVhNRTogV2EgZm9yIG1vcmUgbW9kZXJuIGdlbnMgbmVlZHMgdG8gYmUgdmFsaWRh dGVkCj4gKwkJICovCj4gKwkJaTkxNV9zdG9wX2VuZ2luZXMoaTkxNSwgZW5naW5lX21hc2spOwo+ ICsKPiArCQlyZXQgPSAtRU5PREVWOwo+ICsJCWlmIChyZXNldCkgewo+ICsJCQlHRU1fVFJBQ0Uo ImVuZ2luZV9tYXNrPSV4XG4iLCBlbmdpbmVfbWFzayk7Cj4gKwkJCXJldCA9IHJlc2V0KGk5MTUs IGVuZ2luZV9tYXNrKTsKPiArCQl9Cj4gKwkJaWYgKHJldCAhPSAtRVRJTUVET1VUIHx8IGVuZ2lu ZV9tYXNrICE9IEFMTF9FTkdJTkVTKQo+ICsJCQlicmVhazsKPiArCj4gKwkJY29uZF9yZXNjaGVk KCk7Cj4gKwl9Cj4gKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChpOTE1LCBGT1JDRVdBS0Vf QUxMKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtib29sIGludGVsX2hhc19ncHVf cmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gK3sKPiArCXJldHVybiBpbnRl bF9nZXRfZ3B1X3Jlc2V0KGk5MTUpOwo+ICt9Cj4gKwo+ICtib29sIGludGVsX2hhc19yZXNldF9l bmdpbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gK3sKPiArCXJldHVybiBpOTE1 LT5pbmZvLmhhc19yZXNldF9lbmdpbmUgJiYgaTkxNV9tb2RwYXJhbXMucmVzZXQgPj0gMjsKPiAr fQo+ICsKPiAraW50IGludGVsX3Jlc2V0X2d1YyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSkKPiArewo+ICsJdTMyIGd1Y19kb21haW4gPQo+ICsJCUlOVEVMX0dFTihpOTE1KSA+PSAxMSA/ IEdFTjExX0dSRE9NX0dVQyA6IEdFTjlfR1JET01fR1VDOwo+ICsJaW50IHJldDsKPiArCj4gKwlH RU1fQlVHX09OKCFIQVNfR1VDKGk5MTUpKTsKPiArCj4gKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtl X2dldChpOTE1LCBGT1JDRVdBS0VfQUxMKTsKPiArCXJldCA9IGdlbjZfaHdfZG9tYWluX3Jlc2V0 KGk5MTUsIGd1Y19kb21haW4pOwo+ICsJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoaTkxNSwg Rk9SQ0VXQUtFX0FMTCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoKPiArICog RW5zdXJlIGlycSBoYW5kbGVyIGZpbmlzaGVzLCBhbmQgbm90IHJ1biBhZ2Fpbi4KPiArICogQWxz byByZXR1cm4gdGhlIGFjdGl2ZSByZXF1ZXN0IHNvIHRoYXQgd2Ugb25seSBzZWFyY2ggZm9yIGl0 IG9uY2UuCj4gKyAqLwo+ICtzdGF0aWMgc3RydWN0IGk5MTVfcmVxdWVzdCAqCj4gK3Jlc2V0X3By ZXBhcmVfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gKwo+ICsJLyoKPiArCSAqIER1cmluZyB0aGUgcmVzZXQg c2VxdWVuY2UsIHdlIG11c3QgcHJldmVudCB0aGUgZW5naW5lIGZyb20KPiArCSAqIGVudGVyaW5n IFJDNi4gQXMgdGhlIGNvbnRleHQgc3RhdGUgaXMgdW5kZWZpbmVkIHVudGlsIHdlIHJlc3RhcnQK PiArCSAqIHRoZSBlbmdpbmUsIGlmIGl0IGRvZXMgZW50ZXIgUkM2IGR1cmluZyB0aGUgcmVzZXQs IHRoZSBzdGF0ZQo+ICsJICogd3JpdHRlbiB0byB0aGUgcG93ZXJjb250ZXh0IGlzIHVuZGVmaW5l ZCBhbmQgc28gd2UgbWF5IGxvc2UKPiArCSAqIEdQVSBzdGF0ZSB1cG9uIHJlc3VtZSwgaS5lLiBm YWlsIHRvIHJlc3RhcnQgYWZ0ZXIgYSByZXNldC4KPiArCSAqLwo+ICsJaW50ZWxfdW5jb3JlX2Zv cmNld2FrZV9nZXQoZW5naW5lLT5pOTE1LCBGT1JDRVdBS0VfQUxMKTsKPiArCj4gKwlycSA9IGVu Z2luZS0+cmVzZXQucHJlcGFyZShlbmdpbmUpOwo+ICsJaWYgKHJxICYmIHJxLT5mZW5jZS5lcnJv ciA9PSAtRUlPKQo+ICsJCXJxID0gRVJSX1BUUigtRUlPKTsgLyogUHJldmlvdXMgcmVzZXQgZmFp bGVkISAqLwo+ICsKPiArCXJldHVybiBycTsKPiArfQo+ICsKPiArc3RhdGljIGludCByZXNldF9w cmVwYXJlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICt7Cj4gKwlzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKPiArCWVu dW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+ICsJaW50IGVyciA9IDA7Cj4gKwo+ICsJZGlzYWJsZV9p cnEoaTkxNS0+ZHJtLmlycSk7Cj4gKwo+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkxNSwg aWQpIHsKPiArCQlycSA9IHJlc2V0X3ByZXBhcmVfZW5naW5lKGVuZ2luZSk7Cj4gKwkJaWYgKElT X0VSUihycSkpIHsKPiArCQkJZXJyID0gUFRSX0VSUihycSk7Cj4gKwkJCWNvbnRpbnVlOwo+ICsJ CX0KPiArCj4gKwkJZW5naW5lLT5oYW5nY2hlY2suYWN0aXZlX3JlcXVlc3QgPSBycTsKPiArCX0K PiArCj4gKwlpOTE1X2dlbV9yZXZva2VfZmVuY2VzKGk5MTUpOwo+ICsJaW50ZWxfdWNfc2FuaXRp emUoaTkxNSk7Cj4gKwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiArLyogUmV0dXJucyB0aGUg cmVxdWVzdCBpZiBpdCB3YXMgZ3VpbHR5IG9mIHRoZSBoYW5nICovCj4gK3N0YXRpYyBzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICoKPiArcmVzZXRfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUsCj4gKwkgICAgICBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiArCSAgICAgIGJvb2wg c3RhbGxlZCkKPiArewo+ICsJLyoKPiArCSAqIFRoZSBndWlsdHkgcmVxdWVzdCB3aWxsIGdldCBz a2lwcGVkIG9uIGEgaHVuZyBlbmdpbmUuCj4gKwkgKgo+ICsJICogVXNlcnMgb2YgY2xpZW50IGRl ZmF1bHQgY29udGV4dHMgZG8gbm90IHJlbHkgb24gbG9naWNhbAo+ICsJICogc3RhdGUgcHJlc2Vy dmVkIGJldHdlZW4gYmF0Y2hlcyBzbyBpdCBpcyBzYWZlIHRvIGV4ZWN1dGUKPiArCSAqIHF1ZXVl ZCByZXF1ZXN0cyBmb2xsb3dpbmcgdGhlIGhhbmcuIE5vbiBkZWZhdWx0IGNvbnRleHRzCj4gKwkg KiByZWx5IG9uIHByZXNlcnZlZCBzdGF0ZSwgc28gc2tpcHBpbmcgYSBiYXRjaCBsb3NlcyB0aGUK PiArCSAqIGV2b2x1dGlvbiBvZiB0aGUgc3RhdGUgYW5kIGl0IG5lZWRzIHRvIGJlIGNvbnNpZGVy ZWQgY29ycnVwdGVkLgo+ICsJICogRXhlY3V0aW5nIG1vcmUgcXVldWVkIGJhdGNoZXMgb24gdG9w IG9mIGNvcnJ1cHRlZCBzdGF0ZSBpcwo+ICsJICogcmlza3kuIEJ1dCB3ZSB0YWtlIHRoZSByaXNr IGJ5IHRyeWluZyB0byBhZHZhbmNlIHRocm91Z2gKPiArCSAqIHRoZSBxdWV1ZWQgcmVxdWVzdHMg aW4gb3JkZXIgdG8gbWFrZSB0aGUgY2xpZW50IGJlaGF2aW91cgo+ICsJICogbW9yZSBwcmVkaWN0 YWJsZSBhcm91bmQgcmVzZXRzLCBieSBub3QgdGhyb3dpbmcgYXdheSByYW5kb20KPiArCSAqIGFt b3VudCBvZiBiYXRjaGVzIGl0IGhhcyBwcmVwYXJlZCBmb3IgZXhlY3V0aW9uLiBTb3BoaXN0aWNh dGVkCj4gKwkgKiBjbGllbnRzIGNhbiB1c2UgZ2VtX3Jlc2V0X3N0YXRzX2lvY3RsIGFuZCBkbWEg ZmVuY2Ugc3RhdHVzCj4gKwkgKiAoZXhwb3J0ZWQgdmlhIHN5bmNfZmlsZSBpbmZvIGlvY3RsIG9u IGV4cGxpY2l0IGZlbmNlcykgdG8gb2JzZXJ2ZQo+ICsJICogd2hlbiBpdCBsb3NlcyB0aGUgY29u dGV4dCBzdGF0ZSBhbmQgc2hvdWxkIHJlYnVpbGQgYWNjb3JkaW5nbHkuCj4gKwkgKgo+ICsJICog VGhlIGNvbnRleHQgYmFuLCBhbmQgdWx0aW1hdGVseSB0aGUgY2xpZW50IGJhbiwgbWVjaGFuaXNt IGFyZSBzYWZldHkKPiArCSAqIHZhbHZlcyBpZiBjbGllbnQgc3VibWlzc2lvbiBlbmRzIHVwIHJl c3VsdGluZyBpbiBub3RoaW5nIG1vcmUgdGhhbgo+ICsJICogc3Vic2VxdWVudCBoYW5ncy4KPiAr CSAqLwo+ICsKPiArCWlmIChpOTE1X3JlcXVlc3RfY29tcGxldGVkKHJxKSkgewo+ICsJCUdFTV9U UkFDRSgiJXMgcGFyZG9uZWQgZ2xvYmFsPSVkIChmZW5jZSAlbGx4OiVkKSwgY3VycmVudCAlZFxu IiwKPiArCQkJICBlbmdpbmUtPm5hbWUsIHJxLT5nbG9iYWxfc2Vxbm8sCj4gKwkJCSAgcnEtPmZl bmNlLmNvbnRleHQsIHJxLT5mZW5jZS5zZXFubywKPiArCQkJICBpbnRlbF9lbmdpbmVfZ2V0X3Nl cW5vKGVuZ2luZSkpOwo+ICsJCXN0YWxsZWQgPSBmYWxzZTsKPiArCX0KPiArCj4gKwlpZiAoc3Rh bGxlZCkgewo+ICsJCWNvbnRleHRfbWFya19ndWlsdHkocnEtPmdlbV9jb250ZXh0KTsKPiArCQlp OTE1X3JlcXVlc3Rfc2tpcChycSwgLUVJTyk7Cj4gKwo+ICsJCS8qIElmIHRoaXMgY29udGV4dCBp cyBub3cgYmFubmVkLCBza2lwIGFsbCBwZW5kaW5nIHJlcXVlc3RzLiAqLwo+ICsJCWlmIChpOTE1 X2dlbV9jb250ZXh0X2lzX2Jhbm5lZChycS0+Z2VtX2NvbnRleHQpKQo+ICsJCQllbmdpbmVfc2tp cF9jb250ZXh0KHJxKTsKPiArCX0gZWxzZSB7Cj4gKwkJLyoKPiArCQkgKiBTaW5jZSB0aGlzIGlz IG5vdCB0aGUgaHVuZyBlbmdpbmUsIGl0IG1heSBoYXZlIGFkdmFuY2VkCj4gKwkJICogc2luY2Ug dGhlIGhhbmcgZGVjbGFyYXRpb24uIERvdWJsZSBjaGVjayBieSByZWZpbmRpbmcKPiArCQkgKiB0 aGUgYWN0aXZlIHJlcXVlc3QgYXQgdGhlIHRpbWUgb2YgdGhlIHJlc2V0Lgo+ICsJCSAqLwo+ICsJ CXJxID0gaTkxNV9nZW1fZmluZF9hY3RpdmVfcmVxdWVzdChlbmdpbmUpOwo+ICsJCWlmIChycSkg ewo+ICsJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsKPiArCQkJY29udGV4dF9tYXJrX2lubm9j ZW50KHJxLT5nZW1fY29udGV4dCk7Cj4gKwkJCWRtYV9mZW5jZV9zZXRfZXJyb3IoJnJxLT5mZW5j ZSwgLUVBR0FJTik7Cj4gKwo+ICsJCQkvKiBSZXdpbmQgdGhlIGVuZ2luZSB0byByZXBsYXkgdGhl IGluY29tcGxldGUgcnEgKi8KPiArCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmVuZ2luZS0+dGltZWxp bmUubG9jaywgZmxhZ3MpOwo+ICsJCQlycSA9IGxpc3RfcHJldl9lbnRyeShycSwgbGluayk7Cj4g KwkJCWlmICgmcnEtPmxpbmsgPT0gJmVuZ2luZS0+dGltZWxpbmUucmVxdWVzdHMpCj4gKwkJCQly cSA9IE5VTEw7Cj4gKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+dGltZWxpbmUu bG9jaywgZmxhZ3MpOwo+ICsJCX0KPiArCX0KPiArCj4gKwlyZXR1cm4gcnE7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIHJlc2V0X2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUs Cj4gKwkJCSBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiArCQkJIGJvb2wgc3RhbGxlZCkKPiAr ewo+ICsJLyoKPiArCSAqIE1ha2Ugc3VyZSB0aGlzIHdyaXRlIGlzIHZpc2libGUgYmVmb3JlIHdl IHJlLWVuYWJsZSB0aGUgaW50ZXJydXB0Cj4gKwkgKiBoYW5kbGVycyBvbiBhbm90aGVyIENQVSwg YXMgdGFza2xldF9lbmFibGUoKSByZXNvbHZlcyB0byBqdXN0Cj4gKwkgKiBhIGNvbXBpbGVyIGJh cnJpZXIgd2hpY2ggaXMgaW5zdWZmaWNpZW50IGZvciBvdXIgcHVycG9zZSBoZXJlLgo+ICsJICov Cj4gKwlzbXBfc3RvcmVfbWIoZW5naW5lLT5pcnFfcG9zdGVkLCAwKTsKPiArCj4gKwlpZiAocnEp Cj4gKwkJcnEgPSByZXNldF9yZXF1ZXN0KGVuZ2luZSwgcnEsIHN0YWxsZWQpOwo+ICsKPiArCS8q IFNldHVwIHRoZSBDUyB0byByZXN1bWUgZnJvbSB0aGUgYnJlYWRjcnVtYiBvZiB0aGUgaHVuZyBy ZXF1ZXN0ICovCj4gKwllbmdpbmUtPnJlc2V0LnJlc2V0KGVuZ2luZSwgcnEpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBndF9yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdW5z aWduZWQgaW50IHN0YWxsZWRfbWFzaykKPiArewo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lOwo+ICsJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gKwo+ICsJbG9ja2RlcF9hc3Nl cnRfaGVsZCgmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwo+ICsJaTkxNV9yZXRpcmVfcmVx dWVzdHMoaTkxNSk7Cj4gKwo+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkxNSwgaWQpIHsK PiArCQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7Cj4gKwo+ICsJCXJlc2V0X2VuZ2luZShlbmdp bmUsCj4gKwkJCSAgICAgZW5naW5lLT5oYW5nY2hlY2suYWN0aXZlX3JlcXVlc3QsCj4gKwkJCSAg ICAgc3RhbGxlZF9tYXNrICYgRU5HSU5FX01BU0soaWQpKTsKPiArCQljZSA9IGZldGNoX2FuZF96 ZXJvKCZlbmdpbmUtPmxhc3RfcmV0aXJlZF9jb250ZXh0KTsKPiArCQlpZiAoY2UpCj4gKwkJCWlu dGVsX2NvbnRleHRfdW5waW4oY2UpOwo+ICsKPiArCQkvKgo+ICsJCSAqIE9zdGVuc2liaWx5LCB3 ZSBhbHdheXMgd2FudCBhIGNvbnRleHQgbG9hZGVkIGZvciBwb3dlcnNhdmluZywKPiArCQkgKiBz byBpZiB0aGUgZW5naW5lIGlzIGlkbGUgYWZ0ZXIgdGhlIHJlc2V0LCBzZW5kIGEgcmVxdWVzdAo+ ICsJCSAqIHRvIGxvYWQgb3VyIHNjcmF0Y2gga2VybmVsX2NvbnRleHQuCj4gKwkJICoKPiArCQkg KiBNb3JlIG15c3RlcmlvdXNseSwgaWYgd2UgbGVhdmUgdGhlIGVuZ2luZSBpZGxlIGFmdGVyIGEg cmVzZXQsCj4gKwkJICogdGhlIG5leHQgdXNlcnNwYWNlIGJhdGNoIG1heSBoYW5nLCB3aXRoIHdo YXQgYXBwZWFycyB0byBiZQo+ICsJCSAqIGFuIGluY29oZXJlbnQgcmVhZCBieSB0aGUgQ1MgKHBy ZXN1bWFibHkgc3RhbGUgVExCKS4gQW4KPiArCQkgKiBlbXB0eSByZXF1ZXN0IGFwcGVhcnMgc3Vm ZmljaWVudCB0byBwYXBlciBvdmVyIHRoZSBnbGl0Y2guCj4gKwkJICovCj4gKwkJaWYgKGludGVs X2VuZ2luZV9pc19pZGxlKGVuZ2luZSkpIHsKPiArCQkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7 Cj4gKwo+ICsJCQlycSA9IGk5MTVfcmVxdWVzdF9hbGxvYyhlbmdpbmUsIGk5MTUtPmtlcm5lbF9j b250ZXh0KTsKPiArCQkJaWYgKCFJU19FUlIocnEpKQo+ICsJCQkJaTkxNV9yZXF1ZXN0X2FkZChy cSk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWk5MTVfZ2VtX3Jlc3RvcmVfZmVuY2VzKGk5MTUpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCByZXNldF9maW5pc2hfZW5naW5lKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJZW5naW5lLT5yZXNldC5maW5pc2goZW5naW5lKTsK PiArCj4gKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChlbmdpbmUtPmk5MTUsIEZPUkNFV0FL RV9BTEwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCByZXNldF9maW5pc2goc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZTsKPiArCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+ICsKPiArCWxvY2tkZXBfYXNzZXJ0X2hl bGQoJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsKPiArCWZvcl9lYWNoX2VuZ2luZShlbmdp bmUsIGk5MTUsIGlkKSB7Cj4gKwkJZW5naW5lLT5oYW5nY2hlY2suYWN0aXZlX3JlcXVlc3QgPSBO VUxMOwo+ICsJCXJlc2V0X2ZpbmlzaF9lbmdpbmUoZW5naW5lKTsKPiArCX0KPiArCj4gKwllbmFi bGVfaXJxKGk5MTUtPmRybS5pcnEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBub3Bfc3VibWl0 X3JlcXVlc3Qoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gK3sKPiArCUdFTV9UUkFDRSgiJXMg ZmVuY2UgJWxseDolZCAtPiAtRUlPXG4iLAo+ICsJCSAgcnEtPmVuZ2luZS0+bmFtZSwgcnEtPmZl bmNlLmNvbnRleHQsIHJxLT5mZW5jZS5zZXFubyk7Cj4gKwlkbWFfZmVuY2Vfc2V0X2Vycm9yKCZy cS0+ZmVuY2UsIC1FSU8pOwo+ICsKPiArCWk5MTVfcmVxdWVzdF9zdWJtaXQocnEpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBub3BfY29tcGxldGVfc3VibWl0X3JlcXVlc3Qoc3RydWN0IGk5MTVf cmVxdWVzdCAqcnEpCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsJR0VNX1RS QUNFKCIlcyBmZW5jZSAlbGx4OiVkIC0+IC1FSU9cbiIsCj4gKwkJICBycS0+ZW5naW5lLT5uYW1l LAo+ICsJCSAgcnEtPmZlbmNlLmNvbnRleHQsIHJxLT5mZW5jZS5zZXFubyk7Cj4gKwlkbWFfZmVu Y2Vfc2V0X2Vycm9yKCZycS0+ZmVuY2UsIC1FSU8pOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZl KCZycS0+ZW5naW5lLT50aW1lbGluZS5sb2NrLCBmbGFncyk7Cj4gKwlfX2k5MTVfcmVxdWVzdF9z dWJtaXQocnEpOwo+ICsJaW50ZWxfZW5naW5lX2luaXRfZ2xvYmFsX3NlcW5vKHJxLT5lbmdpbmUs IHJxLT5nbG9iYWxfc2Vxbm8pOwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmVuZ2lu ZS0+dGltZWxpbmUubG9jaywgZmxhZ3MpOwo+ICt9Cj4gKwo+ICt2b2lkIGk5MTVfZ2VtX3NldF93 ZWRnZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gK3sKPiArCXN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZTsKPiArCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+ICsKPiAr CUdFTV9UUkFDRSgic3RhcnRcbiIpOwo+ICsKPiArCWlmIChHRU1fU0hPV19ERUJVRygpKSB7Cj4g KwkJc3RydWN0IGRybV9wcmludGVyIHAgPSBkcm1fZGVidWdfcHJpbnRlcihfX2Z1bmNfXyk7Cj4g Kwo+ICsJCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlkKQo+ICsJCQlpbnRlbF9lbmdp bmVfZHVtcChlbmdpbmUsICZwLCAiJXNcbiIsIGVuZ2luZS0+bmFtZSk7Cj4gKwl9Cj4gKwo+ICsJ c2V0X2JpdChJOTE1X1dFREdFRCwgJmk5MTUtPmdwdV9lcnJvci5mbGFncyk7Cj4gKwlzbXBfbWJf X2FmdGVyX2F0b21pYygpOwo+ICsKPiArCS8qCj4gKwkgKiBGaXJzdCwgc3RvcCBzdWJtaXNzaW9u IHRvIGh3LCBidXQgZG8gbm90IHlldCBjb21wbGV0ZSByZXF1ZXN0cyBieQo+ICsJICogcm9sbGlu ZyB0aGUgZ2xvYmFsIHNlcW5vIGZvcndhcmQgKHNpbmNlIHRoaXMgd291bGQgY29tcGxldGUgcmVx dWVzdHMKPiArCSAqIGZvciB3aGljaCB3ZSBoYXZlbid0IHNldCB0aGUgZmVuY2UgZXJyb3IgdG8g RUlPIHlldCkuCj4gKwkgKi8KPiArCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlkKSB7 Cj4gKwkJcmVzZXRfcHJlcGFyZV9lbmdpbmUoZW5naW5lKTsKPiArCj4gKwkJZW5naW5lLT5zdWJt aXRfcmVxdWVzdCA9IG5vcF9zdWJtaXRfcmVxdWVzdDsKPiArCQllbmdpbmUtPnNjaGVkdWxlID0g TlVMTDsKPiArCX0KPiArCWk5MTUtPmNhcHMuc2NoZWR1bGVyID0gMDsKPiArCj4gKwkvKiBFdmVu IGlmIHRoZSBHUFUgcmVzZXQgZmFpbHMsIGl0IHNob3VsZCBzdGlsbCBzdG9wIHRoZSBlbmdpbmVz ICovCj4gKwlpbnRlbF9ncHVfcmVzZXQoaTkxNSwgQUxMX0VOR0lORVMpOwo+ICsKPiArCS8qCj4g KwkgKiBNYWtlIHN1cmUgbm8gb25lIGlzIHJ1bm5pbmcgdGhlIG9sZCBjYWxsYmFjayBiZWZvcmUg d2UgcHJvY2VlZCB3aXRoCj4gKwkgKiBjYW5jZWxsaW5nIHJlcXVlc3RzIGFuZCByZXNldHRpbmcg dGhlIGNvbXBsZXRpb24gdHJhY2tpbmcuIE90aGVyd2lzZQo+ICsJICogd2UgbWlnaHQgc3VibWl0 IGEgcmVxdWVzdCB0byB0aGUgaGFyZHdhcmUgd2hpY2ggbmV2ZXIgY29tcGxldGVzLgo+ICsJICov Cj4gKwlzeW5jaHJvbml6ZV9yY3UoKTsKPiArCj4gKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBp OTE1LCBpZCkgewo+ICsJCS8qIE1hcmsgYWxsIGV4ZWN1dGluZyByZXF1ZXN0cyBhcyBza2lwcGVk ICovCj4gKwkJZW5naW5lLT5jYW5jZWxfcmVxdWVzdHMoZW5naW5lKTsKPiArCj4gKwkJLyoKPiAr CQkgKiBPbmx5IG9uY2Ugd2UndmUgZm9yY2UtY2FuY2VsbGVkIGFsbCBpbi1mbGlnaHQgcmVxdWVz dHMgY2FuIHdlCj4gKwkJICogc3RhcnQgdG8gY29tcGxldGUgYWxsIHJlcXVlc3RzLgo+ICsJCSAq Lwo+ICsJCWVuZ2luZS0+c3VibWl0X3JlcXVlc3QgPSBub3BfY29tcGxldGVfc3VibWl0X3JlcXVl c3Q7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIE1ha2Ugc3VyZSBubyByZXF1ZXN0IGNhbiBzbGlw IHRocm91Z2ggd2l0aG91dCBnZXR0aW5nIGNvbXBsZXRlZCBieQo+ICsJICogZWl0aGVyIHRoaXMg Y2FsbCBoZXJlIHRvIGludGVsX2VuZ2luZV9pbml0X2dsb2JhbF9zZXFubywgb3IgdGhlIG9uZQo+ ICsJICogaW4gbm9wX2NvbXBsZXRlX3N1Ym1pdF9yZXF1ZXN0Lgo+ICsJICovCj4gKwlzeW5jaHJv bml6ZV9yY3UoKTsKPiArCj4gKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1LCBpZCkgewo+ ICsJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsJCS8qCj4gKwkJICogTWFyayBhbGwgcGVu ZGluZyByZXF1ZXN0cyBhcyBjb21wbGV0ZSBzbyB0aGF0IGFueSBjb25jdXJyZW50Cj4gKwkJICog KGxvY2tsZXNzKSBsb29rdXAgZG9lc24ndCB0cnkgYW5kIHdhaXQgdXBvbiB0aGUgcmVxdWVzdCBh cyB3ZQo+ICsJCSAqIHJlc2V0IGl0Lgo+ICsJCSAqLwo+ICsJCXNwaW5fbG9ja19pcnFzYXZlKCZl bmdpbmUtPnRpbWVsaW5lLmxvY2ssIGZsYWdzKTsKPiArCQlpbnRlbF9lbmdpbmVfaW5pdF9nbG9i YWxfc2Vxbm8oZW5naW5lLAo+ICsJCQkJCSAgICAgICBpbnRlbF9lbmdpbmVfbGFzdF9zdWJtaXQo ZW5naW5lKSk7Cj4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT50aW1lbGluZS5s b2NrLCBmbGFncyk7Cj4gKwo+ICsJCXJlc2V0X2ZpbmlzaF9lbmdpbmUoZW5naW5lKTsKPiArCX0K PiArCj4gKwlHRU1fVFJBQ0UoImVuZFxuIik7Cj4gKwo+ICsJd2FrZV91cF9hbGwoJmk5MTUtPmdw dV9lcnJvci5yZXNldF9xdWV1ZSk7Cj4gK30KPiArCj4gK2Jvb2wgaTkxNV9nZW1fdW5zZXRfd2Vk Z2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV90 aW1lbGluZSAqdGw7Cj4gKwo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmaTkxNS0+ZHJtLnN0cnVj dF9tdXRleCk7Cj4gKwlpZiAoIXRlc3RfYml0KEk5MTVfV0VER0VELCAmaTkxNS0+Z3B1X2Vycm9y LmZsYWdzKSkKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwlHRU1fVFJBQ0UoInN0YXJ0XG4iKTsK PiArCj4gKwkvKgo+ICsJICogQmVmb3JlIHVud2VkZ2luZywgbWFrZSBzdXJlIHRoYXQgYWxsIHBl bmRpbmcgb3BlcmF0aW9ucwo+ICsJICogYXJlIGZsdXNoZWQgYW5kIGVycm9yZWQgb3V0IC0gd2Ug bWF5IGhhdmUgcmVxdWVzdHMgd2FpdGluZyB1cG9uCj4gKwkgKiB0aGlyZCBwYXJ0eSBmZW5jZXMu IFdlIG1hcmtlZCBhbGwgaW5mbGlnaHQgcmVxdWVzdHMgYXMgRUlPLCBhbmQKPiArCSAqIGV2ZXJ5 IGV4ZWNidWYgc2luY2UgcmV0dXJuZWQgRUlPLCBmb3IgY29uc2lzdGVuY3kgd2Ugd2FudCBhbGwK PiArCSAqIHRoZSBjdXJyZW50bHkgcGVuZGluZyByZXF1ZXN0cyB0byBhbHNvIGJlIG1hcmtlZCBh cyBFSU8sIHdoaWNoCj4gKwkgKiBpcyBkb25lIGluc2lkZSBvdXIgbm9wX3N1Ym1pdF9yZXF1ZXN0 IC0gYW5kIHNvIHdlIG11c3Qgd2FpdC4KPiArCSAqCj4gKwkgKiBObyBtb3JlIGNhbiBiZSBzdWJt aXR0ZWQgdW50aWwgd2UgcmVzZXQgdGhlIHdlZGdlZCBiaXQuCj4gKwkgKi8KPiArCWxpc3RfZm9y X2VhY2hfZW50cnkodGwsICZpOTE1LT5ndC50aW1lbGluZXMsIGxpbmspIHsKPiArCQlzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycTsKPiArCj4gKwkJcnEgPSBpOTE1X2dlbV9hY3RpdmVfcGVlaygmdGwt Pmxhc3RfcmVxdWVzdCwKPiArCQkJCQkgICZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCQlp ZiAoIXJxKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJLyoKPiArCQkgKiBXZSBjYW4ndCB1c2Ug b3VyIG5vcm1hbCB3YWl0ZXIgYXMgd2Ugd2FudCB0bwo+ICsJCSAqIGF2b2lkIHJlY3Vyc2l2ZWx5 IHRyeWluZyB0byBoYW5kbGUgdGhlIGN1cnJlbnQKPiArCQkgKiByZXNldC4gVGhlIGJhc2ljIGRt YV9mZW5jZV9kZWZhdWx0X3dhaXQoKSBpbnN0YWxscwo+ICsJCSAqIGEgY2FsbGJhY2sgZm9yIGRt YV9mZW5jZV9zaWduYWwoKSwgd2hpY2ggaXMKPiArCQkgKiB0cmlnZ2VyZWQgYnkgb3VyIG5vcCBo YW5kbGVyIChpbmRpcmVjdGx5LCB0aGUKPiArCQkgKiBjYWxsYmFjayBlbmFibGVzIHRoZSBzaWdu YWxlciB0aHJlYWQgd2hpY2ggaXMKPiArCQkgKiB3b2tlbiBieSB0aGUgbm9wX3N1Ym1pdF9yZXF1 ZXN0KCkgYWR2YW5jaW5nIHRoZSBzZXFubwo+ICsJCSAqIGFuZCB3aGVuIHRoZSBzZXFubyBwYXNz ZXMgdGhlIGZlbmNlLCB0aGUgc2lnbmFsZXIKPiArCQkgKiB0aGVuIHNpZ25hbHMgdGhlIGZlbmNl IHdha2luZyB1cyB1cCkuCj4gKwkJICovCj4gKwkJaWYgKGRtYV9mZW5jZV9kZWZhdWx0X3dhaXQo JnJxLT5mZW5jZSwgdHJ1ZSwKPiArCQkJCQkgICBNQVhfU0NIRURVTEVfVElNRU9VVCkgPCAwKQo+ ICsJCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwlpOTE1X3JldGlyZV9yZXF1ZXN0cyhpOTE1KTsK PiArCUdFTV9CVUdfT04oaTkxNS0+Z3QuYWN0aXZlX3JlcXVlc3RzKTsKPiArCj4gKwkvKgo+ICsJ ICogVW5kbyBub3Bfc3VibWl0X3JlcXVlc3QuIFdlIHByZXZlbnQgYWxsIG5ldyBpOTE1IHJlcXVl c3RzIGZyb20KPiArCSAqIGJlaW5nIHF1ZXVlZCAoYnkgZGlzYWxsb3dpbmcgZXhlY2J1ZiB3aGls c3Qgd2VkZ2VkKSBzbyBoYXZpbmcKPiArCSAqIHdhaXRlZCBmb3IgYWxsIGFjdGl2ZSByZXF1ZXN0 cyBhYm92ZSwgd2Uga25vdyB0aGUgc3lzdGVtIGlzIGlkbGUKPiArCSAqIGFuZCBkbyBub3QgaGF2 ZSB0byB3b3JyeSBhYm91dCBhIHRocmVhZCBiZWluZyBpbnNpZGUKPiArCSAqIGVuZ2luZS0+c3Vi bWl0X3JlcXVlc3QoKSBhcyB3ZSBzd2FwIG92ZXIuIFNvIHVubGlrZSBpbnN0YWxsaW5nCj4gKwkg KiB0aGUgbm9wX3N1Ym1pdF9yZXF1ZXN0IG9uIHJlc2V0LCB3ZSBjYW4gZG8gdGhpcyBmcm9tIG5v cm1hbAo+ICsJICogY29udGV4dCBhbmQgZG8gbm90IHJlcXVpcmUgc3RvcF9tYWNoaW5lKCkuCj4g KwkgKi8KPiArCWludGVsX2VuZ2luZXNfcmVzZXRfZGVmYXVsdF9zdWJtaXNzaW9uKGk5MTUpOwo+ ICsJaTkxNV9nZW1fY29udGV4dHNfbG9zdChpOTE1KTsKPiArCj4gKwlHRU1fVFJBQ0UoImVuZFxu Iik7Cj4gKwo+ICsJc21wX21iX19iZWZvcmVfYXRvbWljKCk7IC8qIGNvbXBsZXRlIHRha2VvdmVy IGJlZm9yZSBlbmFibGluZyBleGVjYnVmICovCj4gKwljbGVhcl9iaXQoSTkxNV9XRURHRUQsICZp OTE1LT5ncHVfZXJyb3IuZmxhZ3MpOwo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICsv KioKPiArICogaTkxNV9yZXNldCAtIHJlc2V0IGNoaXAgYWZ0ZXIgYSBoYW5nCj4gKyAqIEBpOTE1 OiAjZHJtX2k5MTVfcHJpdmF0ZSB0byByZXNldAo+ICsgKiBAc3RhbGxlZF9tYXNrOiBtYXNrIG9m IHRoZSBzdGFsbGVkIGVuZ2luZXMgd2l0aCB0aGUgZ3VpbHR5IHJlcXVlc3RzCj4gKyAqIEByZWFz b246IHVzZXIgZXJyb3IgbWVzc2FnZSBmb3Igd2h5IHdlIGFyZSByZXNldHRpbmcKPiArICoKPiAr ICogUmVzZXQgdGhlIGNoaXAuICBVc2VmdWwgaWYgYSBoYW5nIGlzIGRldGVjdGVkLiBNYXJrcyB0 aGUgZGV2aWNlIGFzIHdlZGdlZAo+ICsgKiBvbiBmYWlsdXJlLgo+ICsgKgo+ICsgKiBDYWxsZXIg bXVzdCBob2xkIHRoZSBzdHJ1Y3RfbXV0ZXguCj4gKyAqCj4gKyAqIFByb2NlZHVyZSBpcyBmYWly bHkgc2ltcGxlOgo+ICsgKiAgIC0gcmVzZXQgdGhlIGNoaXAgdXNpbmcgdGhlIHJlc2V0IHJlZwo+ ICsgKiAgIC0gcmUtaW5pdCBjb250ZXh0IHN0YXRlCj4gKyAqICAgLSByZS1pbml0IGhhcmR3YXJl IHN0YXR1cyBwYWdlCj4gKyAqICAgLSByZS1pbml0IHJpbmcgYnVmZmVyCj4gKyAqICAgLSByZS1p bml0IGludGVycnVwdCBzdGF0ZQo+ICsgKiAgIC0gcmUtaW5pdCBkaXNwbGF5Cj4gKyAqLwo+ICt2 b2lkIGk5MTVfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gKwkJdW5zaWdu ZWQgaW50IHN0YWxsZWRfbWFzaywKPiArCQljb25zdCBjaGFyICpyZWFzb24pCj4gK3sKPiArCXN0 cnVjdCBpOTE1X2dwdV9lcnJvciAqZXJyb3IgPSAmaTkxNS0+Z3B1X2Vycm9yOwo+ICsJaW50IHJl dDsKPiArCWludCBpOwo+ICsKPiArCUdFTV9UUkFDRSgiZmxhZ3M9JWx4XG4iLCBlcnJvci0+Zmxh Z3MpOwo+ICsKPiArCW1pZ2h0X3NsZWVwKCk7Cj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZpOTE1 LT5kcm0uc3RydWN0X211dGV4KTsKPiArCUdFTV9CVUdfT04oIXRlc3RfYml0KEk5MTVfUkVTRVRf QkFDS09GRiwgJmVycm9yLT5mbGFncykpOwo+ICsKPiArCWlmICghdGVzdF9iaXQoSTkxNV9SRVNF VF9IQU5ET0ZGLCAmZXJyb3ItPmZsYWdzKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJLyogQ2xlYXIg YW55IHByZXZpb3VzIGZhaWxlZCBhdHRlbXB0cyBhdCByZWNvdmVyeS4gVGltZSB0byB0cnkgYWdh aW4uICovCj4gKwlpZiAoIWk5MTVfZ2VtX3Vuc2V0X3dlZGdlZChpOTE1KSkKPiArCQlnb3RvIHdh a2V1cDsKPiArCj4gKwlpZiAocmVhc29uKQo+ICsJCWRldl9ub3RpY2UoaTkxNS0+ZHJtLmRldiwg IlJlc2V0dGluZyBjaGlwIGZvciAlc1xuIiwgcmVhc29uKTsKPiArCWVycm9yLT5yZXNldF9jb3Vu dCsrOwo+ICsKPiArCXJldCA9IHJlc2V0X3ByZXBhcmUoaTkxNSk7Cj4gKwlpZiAocmV0KSB7Cj4g KwkJZGV2X2VycihpOTE1LT5kcm0uZGV2LCAiR1BVIHJlY292ZXJ5IGZhaWxlZFxuIik7Cj4gKwkJ Z290byB0YWludDsKPiArCX0KPiArCj4gKwlpZiAoIWludGVsX2hhc19ncHVfcmVzZXQoaTkxNSkp IHsKPiArCQlpZiAoaTkxNV9tb2RwYXJhbXMucmVzZXQpCj4gKwkJCWRldl9lcnIoaTkxNS0+ZHJt LmRldiwgIkdQVSByZXNldCBub3Qgc3VwcG9ydGVkXG4iKTsKPiArCQllbHNlCj4gKwkJCURSTV9E RUJVR19EUklWRVIoIkdQVSByZXNldCBkaXNhYmxlZFxuIik7Cj4gKwkJZ290byBlcnJvcjsKPiAr CX0KPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Cj4gKwkJcmV0ID0gaW50ZWxfZ3B1 X3Jlc2V0KGk5MTUsIEFMTF9FTkdJTkVTKTsKPiArCQlpZiAocmV0ID09IDApCj4gKwkJCWJyZWFr Owo+ICsKPiArCQltc2xlZXAoMTAwKTsKPiArCX0KPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJy KGk5MTUtPmRybS5kZXYsICJGYWlsZWQgdG8gcmVzZXQgY2hpcFxuIik7Cj4gKwkJZ290byB0YWlu dDsKPiArCX0KPiArCj4gKwkvKiBPaywgbm93IGdldCB0aGluZ3MgZ29pbmcgYWdhaW4uLi4gKi8K PiArCj4gKwkvKgo+ICsJICogRXZlcnl0aGluZyBkZXBlbmRzIG9uIGhhdmluZyB0aGUgR1RUIHJ1 bm5pbmcsIHNvIHdlIG5lZWQgdG8gc3RhcnQKPiArCSAqIHRoZXJlLgo+ICsJICovCj4gKwlyZXQg PSBpOTE1X2dndHRfZW5hYmxlX2h3KGk5MTUpOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJP UigiRmFpbGVkIHRvIHJlLWVuYWJsZSBHR1RUIGZvbGxvd2luZyByZXNldCAoJWQpXG4iLAo+ICsJ CQkgIHJldCk7Cj4gKwkJZ290byBlcnJvcjsKPiArCX0KPiArCj4gKwlndF9yZXNldChpOTE1LCBz dGFsbGVkX21hc2spOwo+ICsJaW50ZWxfb3ZlcmxheV9yZXNldChpOTE1KTsKPiArCj4gKwkvKgo+ ICsJICogTmV4dCB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlIGNvbnRleHQsIGJ1dCB3ZSBkb24ndCB1 c2UgdGhvc2UKPiArCSAqIHlldCBlaXRoZXIuLi4KPiArCSAqCj4gKwkgKiBSaW5nIGJ1ZmZlciBu ZWVkcyB0byBiZSByZS1pbml0aWFsaXplZCBpbiB0aGUgS01TIGNhc2UsIG9yIGlmIFgKPiArCSAq IHdhcyBydW5uaW5nIGF0IHRoZSB0aW1lIG9mIHRoZSByZXNldCAoaS5lLiB3ZSB3ZXJlbid0IFZU Cj4gKwkgKiBzd2l0Y2hlZCBhd2F5KS4KPiArCSAqLwo+ICsJcmV0ID0gaTkxNV9nZW1faW5pdF9o dyhpOTE1KTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0aWFs aXNlIEhXIGZvbGxvd2luZyByZXNldCAoJWQpXG4iLAo+ICsJCQkgIHJldCk7Cj4gKwkJZ290byBl cnJvcjsKPiArCX0KPiArCj4gKwlpOTE1X3F1ZXVlX2hhbmdjaGVjayhpOTE1KTsKPiArCj4gK2Zp bmlzaDoKPiArCXJlc2V0X2ZpbmlzaChpOTE1KTsKPiArd2FrZXVwOgo+ICsJY2xlYXJfYml0KEk5 MTVfUkVTRVRfSEFORE9GRiwgJmVycm9yLT5mbGFncyk7Cj4gKwl3YWtlX3VwX2JpdCgmZXJyb3It PmZsYWdzLCBJOTE1X1JFU0VUX0hBTkRPRkYpOwo+ICsJcmV0dXJuOwo+ICsKPiArdGFpbnQ6Cj4g KwkvKgo+ICsJICogSGlzdG9yeSB0ZWxscyB1cyB0aGF0IGlmIHdlIGNhbm5vdCByZXNldCB0aGUg R1BVIG5vdywgd2UKPiArCSAqIG5ldmVyIHdpbGwuIFRoaXMgdGhlbiBpbXBhY3RzIGV2ZXJ5dGhp bmcgdGhhdCBpcyBydW4KPiArCSAqIHN1YnNlcXVlbnRseS4gT24gZmFpbGluZyB0aGUgcmVzZXQs IHdlIG1hcmsgdGhlIGRyaXZlcgo+ICsJICogYXMgd2VkZ2VkLCBwcmV2ZW50aW5nIGZ1cnRoZXIg ZXhlY3V0aW9uIG9uIHRoZSBHUFUuCj4gKwkgKiBXZSBhbHNvIHdhbnQgdG8gZ28gb25lIHN0ZXAg ZnVydGhlciBhbmQgYWRkIGEgdGFpbnQgdG8gdGhlCj4gKwkgKiBrZXJuZWwgc28gdGhhdCBhbnkg c3Vic2VxdWVudCBmYXVsdHMgY2FuIGJlIHRyYWNlZCBiYWNrIHRvCj4gKwkgKiB0aGlzIGZhaWx1 cmUuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBDSSwgd2hlcmUgaWYgdGhlCj4gKwkgKiBHUFUvZHJp dmVyIGZhaWxzIHdlIHdvdWxkIGxpa2UgdG8gcmVib290IGFuZCByZXN0YXJ0IHRlc3RpbmcKPiAr CSAqIHJhdGhlciB0aGFuIGNvbnRpbnVlIG9uIGludG8gb2JsaXZpb24uIEZvciBldmVyeW9uZSBl bHNlLAo+ICsJICogdGhlIHN5c3RlbSBzaG91bGQgc3RpbGwgcGxvZCBhbG9uZywgYnV0IHRoZXkg aGF2ZSBiZWVuIHdhcm5lZCEKPiArCSAqLwo+ICsJYWRkX3RhaW50KFRBSU5UX1dBUk4sIExPQ0tE RVBfU1RJTExfT0spOwo+ICtlcnJvcjoKPiArCWk5MTVfZ2VtX3NldF93ZWRnZWQoaTkxNSk7Cj4g KwlpOTE1X3JldGlyZV9yZXF1ZXN0cyhpOTE1KTsKPiArCWdvdG8gZmluaXNoOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW5saW5lIGludCBpbnRlbF9ndF9yZXNldF9lbmdpbmUoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsCj4gKwkJCQkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ ICt7Cj4gKwlyZXR1cm4gaW50ZWxfZ3B1X3Jlc2V0KGk5MTUsIGludGVsX2VuZ2luZV9mbGFnKGVu Z2luZSkpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaTkxNV9yZXNldF9lbmdpbmUgLSByZXNldCBH UFUgZW5naW5lIHRvIHJlY292ZXIgZnJvbSBhIGhhbmcKPiArICogQGVuZ2luZTogZW5naW5lIHRv IHJlc2V0Cj4gKyAqIEBtc2c6IHJlYXNvbiBmb3IgR1BVIHJlc2V0OyBvciBOVUxMIGZvciBubyBk ZXZfbm90aWNlKCkKPiArICoKPiArICogUmVzZXQgYSBzcGVjaWZpYyBHUFUgZW5naW5lLiBVc2Vm dWwgaWYgYSBoYW5nIGlzIGRldGVjdGVkLgo+ICsgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzc2Z1 bCByZXNldCBvciBvdGhlcndpc2UgYW4gZXJyb3IgY29kZS4KPiArICoKPiArICogUHJvY2VkdXJl IGlzOgo+ICsgKiAgLSBpZGVudGlmaWVzIHRoZSByZXF1ZXN0IHRoYXQgY2F1c2VkIHRoZSBoYW5n IGFuZCBpdCBpcyBkcm9wcGVkCj4gKyAqICAtIHJlc2V0IGVuZ2luZSAod2hpY2ggd2lsbCBmb3Jj ZSB0aGUgZW5naW5lIHRvIGlkbGUpCj4gKyAqICAtIHJlLWluaXQvY29uZmlndXJlIGVuZ2luZQo+ ICsgKi8KPiAraW50IGk5MTVfcmVzZXRfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwgY29uc3QgY2hhciAqbXNnKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9ncHVfZXJyb3IgKmVy cm9yID0gJmVuZ2luZS0+aTkxNS0+Z3B1X2Vycm9yOwo+ICsJc3RydWN0IGk5MTVfcmVxdWVzdCAq YWN0aXZlX3JlcXVlc3Q7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCUdFTV9UUkFDRSgiJXMgZmxhZ3M9 JWx4XG4iLCBlbmdpbmUtPm5hbWUsIGVycm9yLT5mbGFncyk7Cj4gKwlHRU1fQlVHX09OKCF0ZXN0 X2JpdChJOTE1X1JFU0VUX0VOR0lORSArIGVuZ2luZS0+aWQsICZlcnJvci0+ZmxhZ3MpKTsKPiAr Cj4gKwlhY3RpdmVfcmVxdWVzdCA9IHJlc2V0X3ByZXBhcmVfZW5naW5lKGVuZ2luZSk7Cj4gKwlp ZiAoSVNfRVJSX09SX05VTEwoYWN0aXZlX3JlcXVlc3QpKSB7Cj4gKwkJLyogRWl0aGVyIHRoZSBw cmV2aW91cyByZXNldCBmYWlsZWQsIG9yIHdlIHBhcmRvbiB0aGUgcmVzZXQuICovCj4gKwkJcmV0 ID0gUFRSX0VSUihhY3RpdmVfcmVxdWVzdCk7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJ aWYgKG1zZykKPiArCQlkZXZfbm90aWNlKGVuZ2luZS0+aTkxNS0+ZHJtLmRldiwKPiArCQkJICAg IlJlc2V0dGluZyAlcyBmb3IgJXNcbiIsIGVuZ2luZS0+bmFtZSwgbXNnKTsKPiArCWVycm9yLT5y ZXNldF9lbmdpbmVfY291bnRbZW5naW5lLT5pZF0rKzsKPiArCj4gKwlpZiAoIWVuZ2luZS0+aTkx NS0+Z3VjLmV4ZWNidWZfY2xpZW50KQo+ICsJCXJldCA9IGludGVsX2d0X3Jlc2V0X2VuZ2luZShl bmdpbmUtPmk5MTUsIGVuZ2luZSk7Cj4gKwllbHNlCj4gKwkJcmV0ID0gaW50ZWxfZ3VjX3Jlc2V0 X2VuZ2luZSgmZW5naW5lLT5pOTE1LT5ndWMsIGVuZ2luZSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJ LyogSWYgd2UgZmFpbCBoZXJlLCB3ZSBleHBlY3QgdG8gZmFsbGJhY2sgdG8gYSBnbG9iYWwgcmVz ZXQgKi8KPiArCQlEUk1fREVCVUdfRFJJVkVSKCIlc0ZhaWxlZCB0byByZXNldCAlcywgcmV0PSVk XG4iLAo+ICsJCQkJIGVuZ2luZS0+aTkxNS0+Z3VjLmV4ZWNidWZfY2xpZW50ID8gIkd1QyAiIDog IiIsCj4gKwkJCQkgZW5naW5lLT5uYW1lLCByZXQpOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsK PiArCS8qCj4gKwkgKiBUaGUgcmVxdWVzdCB0aGF0IGNhdXNlZCB0aGUgaGFuZyBpcyBzdHVjayBv biBlbHNwLCB3ZSBrbm93IHRoZQo+ICsJICogYWN0aXZlIHJlcXVlc3QgYW5kIGNhbiBkcm9wIGl0 LCBhZGp1c3QgaGVhZCB0byBza2lwIHRoZSBvZmZlbmRpbmcKPiArCSAqIHJlcXVlc3QgdG8gcmVz dW1lIGV4ZWN1dGluZyByZW1haW5pbmcgcmVxdWVzdHMgaW4gdGhlIHF1ZXVlLgo+ICsJICovCj4g KwlyZXNldF9lbmdpbmUoZW5naW5lLCBhY3RpdmVfcmVxdWVzdCwgdHJ1ZSk7Cj4gKwo+ICsJLyoK PiArCSAqIFRoZSBlbmdpbmUgYW5kIGl0cyByZWdpc3RlcnMgKGFuZCB3b3JrYXJvdW5kcyBpbiBj YXNlIG9mIHJlbmRlcikKPiArCSAqIGhhdmUgYmVlbiByZXNldCB0byB0aGVpciBkZWZhdWx0IHZh bHVlcy4gRm9sbG93IHRoZSBpbml0X3JpbmcKPiArCSAqIHByb2Nlc3MgdG8gcHJvZ3JhbSBSSU5H X01PREUsIEhXU1AgYW5kIHJlLWVuYWJsZSBzdWJtaXNzaW9uLgo+ICsJICovCj4gKwlyZXQgPSBl bmdpbmUtPmluaXRfaHcoZW5naW5lKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ ICtvdXQ6Cj4gKwlyZXNldF9maW5pc2hfZW5naW5lKGVuZ2luZSk7Cj4gKwlyZXR1cm4gcmV0Owo+ ICt9Cj4gKwo+ICtzdHJ1Y3Qgd2VkZ2VfbWUgewo+ICsJc3RydWN0IGRlbGF5ZWRfd29yayB3b3Jr Owo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4gKwljb25zdCBjaGFyICpuYW1l Owo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgd2VkZ2VfbWUoc3RydWN0IHdvcmtfc3RydWN0ICp3 b3JrKQo+ICt7Cj4gKwlzdHJ1Y3Qgd2VkZ2VfbWUgKncgPSBjb250YWluZXJfb2Yod29yaywgdHlw ZW9mKCp3KSwgd29yay53b3JrKTsKPiArCj4gKwlkZXZfZXJyKHctPmk5MTUtPmRybS5kZXYsCj4g KwkJIiVzIHRpbWVkIG91dCwgY2FuY2VsbGluZyBhbGwgaW4tZmxpZ2h0IHJlbmRlcmluZy5cbiIs Cj4gKwkJdy0+bmFtZSk7Cj4gKwlpOTE1X2dlbV9zZXRfd2VkZ2VkKHctPmk5MTUpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBfX2luaXRfd2VkZ2Uoc3RydWN0IHdlZGdlX21lICp3LAo+ICsJCQkg c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gKwkJCSBsb25nIHRpbWVvdXQsCj4gKwkJ CSBjb25zdCBjaGFyICpuYW1lKQo+ICt7Cj4gKwl3LT5pOTE1ID0gaTkxNTsKPiArCXctPm5hbWUg PSBuYW1lOwo+ICsKPiArCUlOSVRfREVMQVlFRF9XT1JLX09OU1RBQ0soJnctPndvcmssIHdlZGdl X21lKTsKPiArCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdy0+d29yaywgdGltZW91dCk7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIF9fZmluaV93ZWRnZShzdHJ1Y3Qgd2VkZ2VfbWUgKncpCj4gK3sK PiArCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmdy0+d29yayk7Cj4gKwlkZXN0cm95X2RlbGF5 ZWRfd29ya19vbl9zdGFjaygmdy0+d29yayk7Cj4gKwl3LT5pOTE1ID0gTlVMTDsKPiArfQo+ICsK PiArI2RlZmluZSBpOTE1X3dlZGdlX29uX3RpbWVvdXQoVywgREVWLCBUSU1FT1VUKQkJCQlcCj4g Kwlmb3IgKF9faW5pdF93ZWRnZSgoVyksIChERVYpLCAoVElNRU9VVCksIF9fZnVuY19fKTsJCVwK PiArCSAgICAgKFcpLT5pOTE1OwkJCQkJCQlcCj4gKwkgICAgIF9fZmluaV93ZWRnZSgoVykpKQo+ ICsKPiArc3RhdGljIHZvaWQgaTkxNV9yZXNldF9kZXZpY2Uoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUsCj4gKwkJCSAgICAgIHUzMiBlbmdpbmVfbWFzaywKPiArCQkJICAgICAgY29uc3Qg Y2hhciAqcmVhc29uKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9ncHVfZXJyb3IgKmVycm9yID0gJmk5 MTUtPmdwdV9lcnJvcjsKPiArCXN0cnVjdCBrb2JqZWN0ICprb2JqID0gJmk5MTUtPmRybS5wcmlt YXJ5LT5rZGV2LT5rb2JqOwo+ICsJY2hhciAqZXJyb3JfZXZlbnRbXSA9IHsgSTkxNV9FUlJPUl9V RVZFTlQgIj0xIiwgTlVMTCB9Owo+ICsJY2hhciAqcmVzZXRfZXZlbnRbXSA9IHsgSTkxNV9SRVNF VF9VRVZFTlQgIj0xIiwgTlVMTCB9Owo+ICsJY2hhciAqcmVzZXRfZG9uZV9ldmVudFtdID0geyBJ OTE1X0VSUk9SX1VFVkVOVCAiPTAiLCBOVUxMIH07Cj4gKwlzdHJ1Y3Qgd2VkZ2VfbWUgdzsKPiAr Cj4gKwlrb2JqZWN0X3VldmVudF9lbnYoa29iaiwgS09CSl9DSEFOR0UsIGVycm9yX2V2ZW50KTsK PiArCj4gKwlEUk1fREVCVUdfRFJJVkVSKCJyZXNldHRpbmcgY2hpcFxuIik7Cj4gKwlrb2JqZWN0 X3VldmVudF9lbnYoa29iaiwgS09CSl9DSEFOR0UsIHJlc2V0X2V2ZW50KTsKPiArCj4gKwkvKiBV c2UgYSB3YXRjaGRvZyB0byBlbnN1cmUgdGhhdCBvdXIgcmVzZXQgY29tcGxldGVzICovCj4gKwlp OTE1X3dlZGdlX29uX3RpbWVvdXQoJncsIGk5MTUsIDUgKiBIWikgewo+ICsJCWludGVsX3ByZXBh cmVfcmVzZXQoaTkxNSk7Cj4gKwo+ICsJCWVycm9yLT5yZWFzb24gPSByZWFzb247Cj4gKwkJZXJy b3ItPnN0YWxsZWRfbWFzayA9IGVuZ2luZV9tYXNrOwo+ICsKPiArCQkvKiBTaWduYWwgdGhhdCBs b2NrZWQgd2FpdGVycyBzaG91bGQgcmVzZXQgdGhlIEdQVSAqLwo+ICsJCXNtcF9tYl9fYmVmb3Jl X2F0b21pYygpOwo+ICsJCXNldF9iaXQoSTkxNV9SRVNFVF9IQU5ET0ZGLCAmZXJyb3ItPmZsYWdz KTsKPiArCQl3YWtlX3VwX2FsbCgmZXJyb3ItPndhaXRfcXVldWUpOwo+ICsKPiArCQkvKgo+ICsJ CSAqIFdhaXQgZm9yIGFueW9uZSBob2xkaW5nIHRoZSBsb2NrIHRvIHdha2V1cCwgd2l0aG91dAo+ ICsJCSAqIGJsb2NraW5nIGluZGVmaW5pdGVseSBvbiBzdHJ1Y3RfbXV0ZXguCj4gKwkJICovCj4g KwkJZG8gewo+ICsJCQlpZiAobXV0ZXhfdHJ5bG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCkp IHsKPiArCQkJCWk5MTVfcmVzZXQoaTkxNSwgZW5naW5lX21hc2ssIHJlYXNvbik7Cj4gKwkJCQlt dXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJCQl9Cj4gKwkJfSB3aGls ZSAod2FpdF9vbl9iaXRfdGltZW91dCgmZXJyb3ItPmZsYWdzLAo+ICsJCQkJCSAgICAgSTkxNV9S RVNFVF9IQU5ET0ZGLAo+ICsJCQkJCSAgICAgVEFTS19VTklOVEVSUlVQVElCTEUsCj4gKwkJCQkJ ICAgICAxKSk7Cj4gKwo+ICsJCWVycm9yLT5zdGFsbGVkX21hc2sgPSAwOwo+ICsJCWVycm9yLT5y ZWFzb24gPSBOVUxMOwo+ICsKPiArCQlpbnRlbF9maW5pc2hfcmVzZXQoaTkxNSk7Cj4gKwl9Cj4g Kwo+ICsJaWYgKCF0ZXN0X2JpdChJOTE1X1dFREdFRCwgJmVycm9yLT5mbGFncykpCj4gKwkJa29i amVjdF91ZXZlbnRfZW52KGtvYmosIEtPQkpfQ0hBTkdFLCByZXNldF9kb25lX2V2ZW50KTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgaTkxNV9jbGVhcl9lcnJvcl9yZWdpc3RlcnMoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwl1MzIgZWlyOwo+ICsKPiArCWlmICgh SVNfR0VOMihkZXZfcHJpdikpCj4gKwkJSTkxNV9XUklURShQR1RCTF9FUiwgSTkxNV9SRUFEKFBH VEJMX0VSKSk7Cj4gKwo+ICsJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA0KQo+ICsJCUk5MTVf V1JJVEUoSVBFSVIsIEk5MTVfUkVBRChJUEVJUikpOwo+ICsJZWxzZQo+ICsJCUk5MTVfV1JJVEUo SVBFSVJfSTk2NSwgSTkxNV9SRUFEKElQRUlSX0k5NjUpKTsKPiArCj4gKwlJOTE1X1dSSVRFKEVJ UiwgSTkxNV9SRUFEKEVJUikpOwo+ICsJZWlyID0gSTkxNV9SRUFEKEVJUik7Cj4gKwlpZiAoZWly KSB7Cj4gKwkJLyoKPiArCQkgKiBzb21lIGVycm9ycyBtaWdodCBoYXZlIGJlY29tZSBzdHVjaywK PiArCQkgKiBtYXNrIHRoZW0uCj4gKwkJICovCj4gKwkJRFJNX0RFQlVHX0RSSVZFUigiRUlSIHN0 dWNrOiAweCUwOHgsIG1hc2tpbmdcbiIsIGVpcik7Cj4gKwkJSTkxNV9XUklURShFTVIsIEk5MTVf UkVBRChFTVIpIHwgZWlyKTsKPiArCQlJOTE1X1dSSVRFKElJUiwgSTkxNV9NQVNURVJfRVJST1Jf SU5URVJSVVBUKTsKPiArCX0KPiArfQo+ICsKPiArLyoqCj4gKyAqIGk5MTVfaGFuZGxlX2Vycm9y IC0gaGFuZGxlIGEgZ3B1IGVycm9yCj4gKyAqIEBpOTE1OiBpOTE1IGRldmljZSBwcml2YXRlCj4g KyAqIEBlbmdpbmVfbWFzazogbWFzayByZXByZXNlbnRpbmcgZW5naW5lcyB0aGF0IGFyZSBodW5n Cj4gKyAqIEBmbGFnczogY29udHJvbCBmbGFncwo+ICsgKiBAZm10OiBFcnJvciBtZXNzYWdlIGZv cm1hdCBzdHJpbmcKPiArICoKPiArICogRG8gc29tZSBiYXNpYyBjaGVja2luZyBvZiByZWdpc3Rl ciBzdGF0ZSBhdCBlcnJvciB0aW1lIGFuZAo+ICsgKiBkdW1wIGl0IHRvIHRoZSBzeXNsb2cuICBB bHNvIGNhbGwgaTkxNV9jYXB0dXJlX2Vycm9yX3N0YXRlKCkgdG8gbWFrZQo+ICsgKiBzdXJlIHdl IGdldCBhIHJlY29yZCBhbmQgbWFrZSBpdCBhdmFpbGFibGUgaW4gZGVidWdmcy4gIEZpcmUgYSB1 ZXZlbnQKPiArICogc28gdXNlcnNwYWNlIGtub3dzIHNvbWV0aGluZyBiYWQgaGFwcGVuZWQgKHNo b3VsZCB0cmlnZ2VyIGNvbGxlY3Rpb24KPiArICogb2YgYSByaW5nIGR1bXAgZXRjLikuCj4gKyAq Lwo+ICt2b2lkIGk5MTVfaGFuZGxlX2Vycm9yKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 LAo+ICsJCSAgICAgICB1MzIgZW5naW5lX21hc2ssCj4gKwkJICAgICAgIHVuc2lnbmVkIGxvbmcg ZmxhZ3MsCj4gKwkJICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQo+ICt7Cj4gKwlzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gKwl1bnNpZ25lZCBpbnQgdG1wOwo+ICsJY2hhciBl cnJvcl9tc2dbODBdOwo+ICsJY2hhciAqbXNnID0gTlVMTDsKPiArCj4gKwlpZiAoZm10KSB7Cj4g KwkJdmFfbGlzdCBhcmdzOwo+ICsKPiArCQl2YV9zdGFydChhcmdzLCBmbXQpOwo+ICsJCXZzY25w cmludGYoZXJyb3JfbXNnLCBzaXplb2YoZXJyb3JfbXNnKSwgZm10LCBhcmdzKTsKPiArCQl2YV9l bmQoYXJncyk7Cj4gKwo+ICsJCW1zZyA9IGVycm9yX21zZzsKPiArCX0KPiArCj4gKwkvKgo+ICsJ ICogSW4gbW9zdCBjYXNlcyBpdCdzIGd1YXJhbnRlZWQgdGhhdCB3ZSBnZXQgaGVyZSB3aXRoIGFu IFJQTQo+ICsJICogcmVmZXJlbmNlIGhlbGQsIGZvciBleGFtcGxlIGJlY2F1c2UgdGhlcmUgaXMg YSBwZW5kaW5nIEdQVQo+ICsJICogcmVxdWVzdCB0aGF0IHdvbid0IGZpbmlzaCB1bnRpbCB0aGUg cmVzZXQgaXMgZG9uZS4gVGhpcwo+ICsJICogaXNuJ3QgdGhlIGNhc2UgYXQgbGVhc3Qgd2hlbiB3 ZSBnZXQgaGVyZSBieSBkb2luZyBhCj4gKwkgKiBzaW11bGF0ZWQgcmVzZXQgdmlhIGRlYnVnZnMs IHNvIGdldCBhbiBSUE0gcmVmZXJlbmNlLgo+ICsJICovCj4gKwlpbnRlbF9ydW50aW1lX3BtX2dl dChpOTE1KTsKPiArCj4gKwllbmdpbmVfbWFzayAmPSBJTlRFTF9JTkZPKGk5MTUpLT5yaW5nX21h c2s7Cj4gKwo+ICsJaWYgKGZsYWdzICYgSTkxNV9FUlJPUl9DQVBUVVJFKSB7Cj4gKwkJaTkxNV9j YXB0dXJlX2Vycm9yX3N0YXRlKGk5MTUsIGVuZ2luZV9tYXNrLCBtc2cpOwo+ICsJCWk5MTVfY2xl YXJfZXJyb3JfcmVnaXN0ZXJzKGk5MTUpOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBUcnkgZW5n aW5lIHJlc2V0IHdoZW4gYXZhaWxhYmxlLiBXZSBmYWxsIGJhY2sgdG8gZnVsbCByZXNldCBpZgo+ ICsJICogc2luZ2xlIHJlc2V0IGZhaWxzLgo+ICsJICovCj4gKwlpZiAoaW50ZWxfaGFzX3Jlc2V0 X2VuZ2luZShpOTE1KSkgewo+ICsJCWZvcl9lYWNoX2VuZ2luZV9tYXNrZWQoZW5naW5lLCBpOTE1 LCBlbmdpbmVfbWFzaywgdG1wKSB7Cj4gKwkJCUJVSUxEX0JVR19PTihJOTE1X1JFU0VUX01PREVT RVQgPj0gSTkxNV9SRVNFVF9FTkdJTkUpOwo+ICsJCQlpZiAodGVzdF9hbmRfc2V0X2JpdChJOTE1 X1JFU0VUX0VOR0lORSArIGVuZ2luZS0+aWQsCj4gKwkJCQkJICAgICAmaTkxNS0+Z3B1X2Vycm9y LmZsYWdzKSkKPiArCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJaWYgKGk5MTVfcmVzZXRfZW5naW5l KGVuZ2luZSwgbXNnKSA9PSAwKQo+ICsJCQkJZW5naW5lX21hc2sgJj0gfmludGVsX2VuZ2luZV9m bGFnKGVuZ2luZSk7Cj4gKwo+ICsJCQljbGVhcl9iaXQoSTkxNV9SRVNFVF9FTkdJTkUgKyBlbmdp bmUtPmlkLAo+ICsJCQkJICAmaTkxNS0+Z3B1X2Vycm9yLmZsYWdzKTsKPiArCQkJd2FrZV91cF9i aXQoJmk5MTUtPmdwdV9lcnJvci5mbGFncywKPiArCQkJCSAgICBJOTE1X1JFU0VUX0VOR0lORSAr IGVuZ2luZS0+aWQpOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAoIWVuZ2luZV9tYXNrKQo+ICsJ CWdvdG8gb3V0Owo+ICsKPiArCS8qIEZ1bGwgcmVzZXQgbmVlZHMgdGhlIG11dGV4LCBzdG9wIGFu eSBvdGhlciB1c2VyIHRyeWluZyB0byBkbyBzby4gKi8KPiArCWlmICh0ZXN0X2FuZF9zZXRfYml0 KEk5MTVfUkVTRVRfQkFDS09GRiwgJmk5MTUtPmdwdV9lcnJvci5mbGFncykpIHsKPiArCQl3YWl0 X2V2ZW50KGk5MTUtPmdwdV9lcnJvci5yZXNldF9xdWV1ZSwKPiArCQkJICAgIXRlc3RfYml0KEk5 MTVfUkVTRVRfQkFDS09GRiwKPiArCQkJCSAgICAgJmk5MTUtPmdwdV9lcnJvci5mbGFncykpOwo+ ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCS8qIFByZXZlbnQgYW55IG90aGVyIHJlc2V0LWVu Z2luZSBhdHRlbXB0LiAqLwo+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkxNSwgdG1wKSB7 Cj4gKwkJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoSTkxNV9SRVNFVF9FTkdJTkUgKyBlbmdpbmUt PmlkLAo+ICsJCQkJCSZpOTE1LT5ncHVfZXJyb3IuZmxhZ3MpKQo+ICsJCQl3YWl0X29uX2JpdCgm aTkxNS0+Z3B1X2Vycm9yLmZsYWdzLAo+ICsJCQkJICAgIEk5MTVfUkVTRVRfRU5HSU5FICsgZW5n aW5lLT5pZCwKPiArCQkJCSAgICBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Cj4gKwl9Cj4gKwo+ICsJ aTkxNV9yZXNldF9kZXZpY2UoaTkxNSwgZW5naW5lX21hc2ssIG1zZyk7Cj4gKwo+ICsJZm9yX2Vh Y2hfZW5naW5lKGVuZ2luZSwgaTkxNSwgdG1wKSB7Cj4gKwkJY2xlYXJfYml0KEk5MTVfUkVTRVRf RU5HSU5FICsgZW5naW5lLT5pZCwKPiArCQkJICAmaTkxNS0+Z3B1X2Vycm9yLmZsYWdzKTsKPiAr CX0KPiArCj4gKwljbGVhcl9iaXQoSTkxNV9SRVNFVF9CQUNLT0ZGLCAmaTkxNS0+Z3B1X2Vycm9y LmZsYWdzKTsKPiArCXdha2VfdXBfYWxsKCZpOTE1LT5ncHVfZXJyb3IucmVzZXRfcXVldWUpOwo+ ICsKPiArb3V0Ogo+ICsJaW50ZWxfcnVudGltZV9wbV9wdXQoaTkxNSk7Cj4gK30KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXNldC5oIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9yZXNldC5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MDAwMDAuLjA5NDIyYzQ3NzJkZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3Jlc2V0LmgKPiBAQCAtMCwwICsxLDM3IEBACj4gKy8qCj4gKyAqIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBNSVQKPiArICoKPiArICogQ29weXJpZ2h0IMKpIDIwMDgtMjAx OCBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgSTkxNV9SRVNFVF9ICj4g KyNkZWZpbmUgSTkxNV9SRVNFVF9ICj4gKwo+ICsjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4K PiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gKwo+ICtzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZTsKPiArc3RydWN0IGludGVsX2VuZ2luZV9jczsKPiArc3RydWN0IGludGVsX2d1YzsKPiArCj4g K19fcHJpbnRmKDQsIDUpCj4gK3ZvaWQgaTkxNV9oYW5kbGVfZXJyb3Ioc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsCj4gKwkJICAgICAgIHUzMiBlbmdpbmVfbWFzaywKPiArCQkgICAgICAg dW5zaWduZWQgbG9uZyBmbGFncywKPiArCQkgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pOwo+ ICsjZGVmaW5lIEk5MTVfRVJST1JfQ0FQVFVSRSBCSVQoMCkKPiArCj4gK3ZvaWQgaTkxNV9yZXNl dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiArCQl1bnNpZ25lZCBpbnQgc3RhbGxl ZF9tYXNrLAo+ICsJCWNvbnN0IGNoYXIgKnJlYXNvbik7Cj4gK2ludCBpOTE1X3Jlc2V0X2VuZ2lu ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJICAgICAgY29uc3QgY2hhciAq cmVhc29uKTsKPiArCj4gK2Jvb2wgaW50ZWxfaGFzX2dwdV9yZXNldChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSk7Cj4gK2Jvb2wgaW50ZWxfaGFzX3Jlc2V0X2VuZ2luZShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cj4gKwo+ICtpbnQgaW50ZWxfZ3B1X3Jlc2V0KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1LCB1MzIgZW5naW5lX21hc2spOwo+ICsKPiAraW50IGludGVs X3Jlc2V0X2d1YyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cj4gKwo+ICsjZW5kaWYg LyogSTkxNV9SRVNFVF9IICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IGlu ZGV4IDc5OThlNzBhMzE3NC4uOGEwN2RlNWFjNzQwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYwo+IEBAIC0zMywxMyArMzMsNyBAQAo+ICAjaW5jbHVkZSA8bGludXgvdmdh YXJiLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2VkaWQuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1Q Lmg+Cj4gLSNpbmNsdWRlICJpbnRlbF9kcnYuaCIKPiAtI2luY2x1ZGUgImludGVsX2Zyb250YnVm ZmVyLmgiCj4gICNpbmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4KPiAtI2luY2x1ZGUgImk5MTVfZHJ2 LmgiCj4gLSNpbmNsdWRlICJpOTE1X2dlbV9jbGZsdXNoLmgiCj4gLSNpbmNsdWRlICJpbnRlbF9k c2kuaCIKPiAtI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKPiAgI2luY2x1ZGUgPGRybS9kcm1fYXRv bWljLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPiAgI2luY2x1ZGUg PGRybS9kcm1fZHBfaGVscGVyLmg+Cj4gQEAgLTQ5LDYgKzQzLDE1IEBACj4gICNpbmNsdWRlIDxs aW51eC9kbWFfcmVtYXBwaW5nLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9yZXNlcnZhdGlvbi5oPgo+ ICAKPiArI2luY2x1ZGUgImludGVsX2Rydi5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfZHNpLmgiCj4g KyNpbmNsdWRlICJpbnRlbF9mcm9udGJ1ZmZlci5oIgo+ICsKPiArI2luY2x1ZGUgImk5MTVfZHJ2 LmgiCj4gKyNpbmNsdWRlICJpOTE1X2dlbV9jbGZsdXNoLmgiCj4gKyNpbmNsdWRlICJpOTE1X3Jl c2V0LmgiCj4gKyNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCj4gKwo+ICAvKiBQcmltYXJ5IHBsYW5l IGZvcm1hdHMgZm9yIGdlbiA8PSAzICovCj4gIHN0YXRpYyBjb25zdCB1aW50MzJfdCBpOHh4X3By aW1hcnlfZm9ybWF0c1tdID0gewo+ICAJRFJNX0ZPUk1BVF9DOCwKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9ndWMuaAo+IGluZGV4IDQxMjE5MjhhNDk1ZS4uZGYxYTM4NGMyZjkyIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZ3VjLmgKPiBAQCAtMTg5LDQgKzE4OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9p ZCBpbnRlbF9ndWNfZGlzYWJsZV9tc2coc3RydWN0IGludGVsX2d1YyAqZ3VjLCB1MzIgbWFzaykK PiAgCXNwaW5fdW5sb2NrX2lycSgmZ3VjLT5pcnFfbG9jayk7Cj4gIH0KPiAgCj4gK2ludCBpbnRl bF9ndWNfcmVzZXRfZW5naW5lKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywKPiArCQkJICAgc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiArCj4gICNlbmRpZgo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oYW5nY2hlY2suYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2hhbmdjaGVjay5jCj4gaW5kZXggMmZjN2EwZGQwZGY5Li41MTQxZGYzNDI4ODQg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGFuZ2NoZWNrLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oYW5nY2hlY2suYwo+IEBAIC0yMyw2ICsy Myw3IEBACj4gICAqLwo+ICAKPiAgI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gKyNpbmNsdWRlICJp OTE1X3Jlc2V0LmgiCj4gIAo+ICBzdGF0aWMgYm9vbAo+ICBpcGVocl9pc19zZW1hcGhvcmVfd2Fp dChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiBpcGVocikKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3VjLmMKPiBpbmRleCA3Yzk1Njk3ZTFhMzUuLjg4MzUyZmY3MTY0YSAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Yy5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfdWMuYwo+IEBAIC0yNiw2ICsyNiw3IEBACj4gICNpbmNsdWRlICJpbnRl bF9ndWNfc3VibWlzc2lvbi5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfZ3VjLmgiCj4gICNpbmNsdWRl ICJpOTE1X2Rydi5oIgo+ICsjaW5jbHVkZSAiaTkxNV9yZXNldC5oIgo+ICAKPiAgc3RhdGljIHZv aWQgZ3VjX2ZyZWVfbG9hZF9lcnJfbG9nKHN0cnVjdCBpbnRlbF9ndWMgKmd1Yyk7Cj4gIAo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91bmNvcmUuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3VuY29yZS5jCj4gaW5kZXggYjg5MmNhODM5NmU4Li4xYWJkMzQy ZTljY2UgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91bmNvcmUuYwo+IEBAIC0xNjk4LDI1 OCArMTY5OCw2IEBAIGludCBpOTE1X3JlZ19yZWFkX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCj4gIAlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBnZW4zX3N0b3BfZW5n aW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAtewo+IC0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owo+IC0JY29uc3QgdTMyIGJhc2Ug PSBlbmdpbmUtPm1taW9fYmFzZTsKPiAtCj4gLQlpZiAoaW50ZWxfZW5naW5lX3N0b3BfY3MoZW5n aW5lKSkKPiAtCQlEUk1fREVCVUdfRFJJVkVSKCIlczogdGltZWQgb3V0IG9uIFNUT1BfUklOR1xu IiwgZW5naW5lLT5uYW1lKTsKPiAtCj4gLQlJOTE1X1dSSVRFX0ZXKFJJTkdfSEVBRChiYXNlKSwg STkxNV9SRUFEX0ZXKFJJTkdfVEFJTChiYXNlKSkpOwo+IC0JUE9TVElOR19SRUFEX0ZXKFJJTkdf SEVBRChiYXNlKSk7IC8qIHBhcmFub2lhICovCj4gLQo+IC0JSTkxNV9XUklURV9GVyhSSU5HX0hF QUQoYmFzZSksIDApOwo+IC0JSTkxNV9XUklURV9GVyhSSU5HX1RBSUwoYmFzZSksIDApOwo+IC0J UE9TVElOR19SRUFEX0ZXKFJJTkdfVEFJTChiYXNlKSk7Cj4gLQo+IC0JLyogVGhlIHJpbmcgbXVz dCBiZSBlbXB0eSBiZWZvcmUgaXQgaXMgZGlzYWJsZWQgKi8KPiAtCUk5MTVfV1JJVEVfRlcoUklO R19DVEwoYmFzZSksIDApOwo+IC0KPiAtCS8qIENoZWNrIGFjdHMgYXMgYSBwb3N0ICovCj4gLQlp ZiAoSTkxNV9SRUFEX0ZXKFJJTkdfSEVBRChiYXNlKSkgIT0gMCkKPiAtCQlEUk1fREVCVUdfRFJJ VkVSKCIlczogcmluZyBoZWFkIG5vdCBwYXJrZWRcbiIsCj4gLQkJCQkgZW5naW5lLT5uYW1lKTsK PiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaTkxNV9zdG9wX2VuZ2luZXMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkgICAgICB1bnNpZ25lZCBlbmdpbmVfbWFzaykKPiAt ewo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+IC0JZW51bSBpbnRlbF9lbmdp bmVfaWQgaWQ7Cj4gLQo+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCAzKQo+IC0JCXJldHVy bjsKPiAtCj4gLQlmb3JfZWFjaF9lbmdpbmVfbWFza2VkKGVuZ2luZSwgZGV2X3ByaXYsIGVuZ2lu ZV9tYXNrLCBpZCkKPiAtCQlnZW4zX3N0b3BfZW5naW5lKGVuZ2luZSk7Cj4gLX0KPiAtCj4gLXN0 YXRpYyBib29sIGk5MTVfaW5fcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4gLXsKPiAtCXU4 IGdkcnN0Owo+IC0KPiAtCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIEk5MTVfR0RSU1QsICZn ZHJzdCk7Cj4gLQlyZXR1cm4gZ2Ryc3QgJiBHUkRPTV9SRVNFVF9TVEFUVVM7Cj4gLX0KPiAtCj4g LXN0YXRpYyBpbnQgaTkxNV9kb19yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsIHVuc2lnbmVkIGVuZ2luZV9tYXNrKQo+IC17Cj4gLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9 IGRldl9wcml2LT5kcm0ucGRldjsKPiAtCWludCBlcnI7Cj4gLQo+IC0JLyogQXNzZXJ0IHJlc2V0 IGZvciBhdCBsZWFzdCAyMCB1c2VjLCBhbmQgd2FpdCBmb3IgYWNrbm93bGVkZ2VtZW50LiAqLwo+ IC0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIEk5MTVfR0RSU1QsIEdSRE9NX1JFU0VUX0VO QUJMRSk7Cj4gLQl1c2xlZXBfcmFuZ2UoNTAsIDIwMCk7Cj4gLQllcnIgPSB3YWl0X2ZvcihpOTE1 X2luX3Jlc2V0KHBkZXYpLCA1MDApOwo+IC0KPiAtCS8qIENsZWFyIHRoZSByZXNldCByZXF1ZXN0 LiAqLwo+IC0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIEk5MTVfR0RSU1QsIDApOwo+IC0J dXNsZWVwX3JhbmdlKDUwLCAyMDApOwo+IC0JaWYgKCFlcnIpCj4gLQkJZXJyID0gd2FpdF9mb3Io IWk5MTVfaW5fcmVzZXQocGRldiksIDUwMCk7Cj4gLQo+IC0JcmV0dXJuIGVycjsKPiAtfQo+IC0K PiAtc3RhdGljIGJvb2wgZzR4X3Jlc2V0X2NvbXBsZXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQo+ IC17Cj4gLQl1OCBnZHJzdDsKPiAtCj4gLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBJOTE1 X0dEUlNULCAmZ2Ryc3QpOwo+IC0JcmV0dXJuIChnZHJzdCAmIEdSRE9NX1JFU0VUX0VOQUJMRSkg PT0gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBnMzNfZG9fcmVzZXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LCB1bnNpZ25lZCBlbmdpbmVfbWFzaykKPiAtewo+IC0Jc3RydWN0 IHBjaV9kZXYgKnBkZXYgPSBkZXZfcHJpdi0+ZHJtLnBkZXY7Cj4gLQo+IC0JcGNpX3dyaXRlX2Nv bmZpZ19ieXRlKHBkZXYsIEk5MTVfR0RSU1QsIEdSRE9NX1JFU0VUX0VOQUJMRSk7Cj4gLQlyZXR1 cm4gd2FpdF9mb3IoZzR4X3Jlc2V0X2NvbXBsZXRlKHBkZXYpLCA1MDApOwo+IC19Cj4gLQo+IC1z dGF0aWMgaW50IGc0eF9kb19yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs IHVuc2lnbmVkIGVuZ2luZV9tYXNrKQo+IC17Cj4gLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRl dl9wcml2LT5kcm0ucGRldjsKPiAtCWludCByZXQ7Cj4gLQo+IC0JLyogV2FWY3BDbGtHYXRlRGlz YWJsZUZvck1lZGlhUmVzZXQ6Y3RnLGVsayAqLwo+IC0JSTkxNV9XUklURShWREVDQ0xLX0dBVEVf RCwKPiAtCQkgICBJOTE1X1JFQUQoVkRFQ0NMS19HQVRFX0QpIHwgVkNQX1VOSVRfQ0xPQ0tfR0FU RV9ESVNBQkxFKTsKPiAtCVBPU1RJTkdfUkVBRChWREVDQ0xLX0dBVEVfRCk7Cj4gLQo+IC0JcGNp X3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIEk5MTVfR0RSU1QsCj4gLQkJCSAgICAgIEdSRE9NX01F RElBIHwgR1JET01fUkVTRVRfRU5BQkxFKTsKPiAtCXJldCA9ICB3YWl0X2ZvcihnNHhfcmVzZXRf Y29tcGxldGUocGRldiksIDUwMCk7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJRFJNX0RFQlVHX0RSSVZF UigiV2FpdCBmb3IgbWVkaWEgcmVzZXQgZmFpbGVkXG4iKTsKPiAtCQlnb3RvIG91dDsKPiAtCX0K PiAtCj4gLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgSTkxNV9HRFJTVCwKPiAtCQkJICAg ICAgR1JET01fUkVOREVSIHwgR1JET01fUkVTRVRfRU5BQkxFKTsKPiAtCXJldCA9ICB3YWl0X2Zv cihnNHhfcmVzZXRfY29tcGxldGUocGRldiksIDUwMCk7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJRFJN X0RFQlVHX0RSSVZFUigiV2FpdCBmb3IgcmVuZGVyIHJlc2V0IGZhaWxlZFxuIik7Cj4gLQkJZ290 byBvdXQ7Cj4gLQl9Cj4gLQo+IC1vdXQ6Cj4gLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwg STkxNV9HRFJTVCwgMCk7Cj4gLQo+IC0JSTkxNV9XUklURShWREVDQ0xLX0dBVEVfRCwKPiAtCQkg ICBJOTE1X1JFQUQoVkRFQ0NMS19HQVRFX0QpICYgflZDUF9VTklUX0NMT0NLX0dBVEVfRElTQUJM RSk7Cj4gLQlQT1NUSU5HX1JFQUQoVkRFQ0NMS19HQVRFX0QpOwo+IC0KPiAtCXJldHVybiByZXQ7 Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgaXJvbmxha2VfZG9fcmVzZXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkgICAgIHVuc2lnbmVkIGVuZ2luZV9tYXNrKQo+IC17 Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCUk5MTVfV1JJVEUoSUxLX0dEU1IsIElMS19HUkRPTV9SRU5E RVIgfCBJTEtfR1JET01fUkVTRVRfRU5BQkxFKTsKPiAtCXJldCA9IGludGVsX3dhaXRfZm9yX3Jl Z2lzdGVyKGRldl9wcml2LAo+IC0JCQkJICAgICAgSUxLX0dEU1IsIElMS19HUkRPTV9SRVNFVF9F TkFCTEUsIDAsCj4gLQkJCQkgICAgICA1MDApOwo+IC0JaWYgKHJldCkgewo+IC0JCURSTV9ERUJV R19EUklWRVIoIldhaXQgZm9yIHJlbmRlciByZXNldCBmYWlsZWRcbiIpOwo+IC0JCWdvdG8gb3V0 Owo+IC0JfQo+IC0KPiAtCUk5MTVfV1JJVEUoSUxLX0dEU1IsIElMS19HUkRPTV9NRURJQSB8IElM S19HUkRPTV9SRVNFVF9FTkFCTEUpOwo+IC0JcmV0ID0gaW50ZWxfd2FpdF9mb3JfcmVnaXN0ZXIo ZGV2X3ByaXYsCj4gLQkJCQkgICAgICBJTEtfR0RTUiwgSUxLX0dSRE9NX1JFU0VUX0VOQUJMRSwg MCwKPiAtCQkJCSAgICAgIDUwMCk7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJRFJNX0RFQlVHX0RSSVZF UigiV2FpdCBmb3IgbWVkaWEgcmVzZXQgZmFpbGVkXG4iKTsKPiAtCQlnb3RvIG91dDsKPiAtCX0K PiAtCj4gLW91dDoKPiAtCUk5MTVfV1JJVEUoSUxLX0dEU1IsIDApOwo+IC0JUE9TVElOR19SRUFE KElMS19HRFNSKTsKPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4gLS8qIFJlc2V0IHRoZSBoYXJk d2FyZSBkb21haW5zIChHRU5YX0dSRE9NXyopIHNwZWNpZmllZCBieSBtYXNrICovCj4gLXN0YXRp YyBpbnQgZ2VuNl9od19kb21haW5fcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAo+IC0JCQkJdTMyIGh3X2RvbWFpbl9tYXNrKQo+IC17Cj4gLQlpbnQgZXJyOwo+IC0KPiAt CS8qIEdFTjZfR0RSU1QgaXMgbm90IGluIHRoZSBndCBwb3dlciB3ZWxsLCBubyBuZWVkIHRvIGNo ZWNrCj4gLQkgKiBmb3IgZmlmbyBzcGFjZSBmb3IgdGhlIHdyaXRlIG9yIGZvcmNld2FrZSB0aGUg Y2hpcCBmb3IKPiAtCSAqIHRoZSByZWFkCj4gLQkgKi8KPiAtCV9fcmF3X2k5MTVfd3JpdGUzMihk ZXZfcHJpdiwgR0VONl9HRFJTVCwgaHdfZG9tYWluX21hc2spOwo+IC0KPiAtCS8qIFdhaXQgZm9y IHRoZSBkZXZpY2UgdG8gYWNrIHRoZSByZXNldCByZXF1ZXN0cyAqLwo+IC0JZXJyID0gX19pbnRl bF93YWl0X2Zvcl9yZWdpc3Rlcl9mdyhkZXZfcHJpdiwKPiAtCQkJCQkgICBHRU42X0dEUlNULCBo d19kb21haW5fbWFzaywgMCwKPiAtCQkJCQkgICA1MDAsIDAsCj4gLQkJCQkJICAgTlVMTCk7Cj4g LQlpZiAoZXJyKQo+IC0JCURSTV9ERUJVR19EUklWRVIoIldhaXQgZm9yIDB4JTA4eCBlbmdpbmVz IHJlc2V0IGZhaWxlZFxuIiwKPiAtCQkJCSBod19kb21haW5fbWFzayk7Cj4gLQo+IC0JcmV0dXJu IGVycjsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGdlbjZfcmVzZXRfZW5naW5lcyAtIHJlc2V0IGlu ZGl2aWR1YWwgZW5naW5lcwo+IC0gKiBAZGV2X3ByaXY6IGk5MTUgZGV2aWNlCj4gLSAqIEBlbmdp bmVfbWFzazogbWFzayBvZiBpbnRlbF9yaW5nX2ZsYWcoKSBlbmdpbmVzIG9yIEFMTF9FTkdJTkVT IGZvciBmdWxsIHJlc2V0Cj4gLSAqCj4gLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXNldCB0aGUg aW5kaXZpZHVhbCBlbmdpbmVzIHRoYXQgYXJlIHNldCBpbiBlbmdpbmVfbWFzay4KPiAtICogSWYg eW91IHByb3ZpZGUgQUxMX0VOR0lORVMgYXMgbWFzaywgZnVsbCBnbG9iYWwgZG9tYWluIHJlc2V0 IHdpbGwgYmUgaXNzdWVkLgo+IC0gKgo+IC0gKiBOb3RlOiBJdCBpcyByZXNwb25zaWJpbGl0eSBv ZiB0aGUgY2FsbGVyIHRvIGhhbmRsZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCj4gLSAqIGFza2lu ZyBmdWxsIGRvbWFpbiByZXNldCB2ZXJzdXMgcmVzZXQgZm9yIGFsbCBhdmFpbGFibGUgaW5kaXZp ZHVhbCBlbmdpbmVzLgo+IC0gKgo+IC0gKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgbm9uemVybyBv biBlcnJvci4KPiAtICovCj4gLXN0YXRpYyBpbnQgZ2VuNl9yZXNldF9lbmdpbmVzKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJICAgICAgdW5zaWduZWQgZW5naW5lX21h c2spCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAtCWNvbnN0IHUz MiBod19lbmdpbmVfbWFza1tJOTE1X05VTV9FTkdJTkVTXSA9IHsKPiAtCQlbUkNTXSA9IEdFTjZf R1JET01fUkVOREVSLAo+IC0JCVtCQ1NdID0gR0VONl9HUkRPTV9CTFQsCj4gLQkJW1ZDU10gPSBH RU42X0dSRE9NX01FRElBLAo+IC0JCVtWQ1MyXSA9IEdFTjhfR1JET01fTUVESUEyLAo+IC0JCVtW RUNTXSA9IEdFTjZfR1JET01fVkVDUywKPiAtCX07Cj4gLQl1MzIgaHdfbWFzazsKPiAtCj4gLQlp ZiAoZW5naW5lX21hc2sgPT0gQUxMX0VOR0lORVMpIHsKPiAtCQlod19tYXNrID0gR0VONl9HUkRP TV9GVUxMOwo+IC0JfSBlbHNlIHsKPiAtCQl1bnNpZ25lZCBpbnQgdG1wOwo+IC0KPiAtCQlod19t YXNrID0gMDsKPiAtCQlmb3JfZWFjaF9lbmdpbmVfbWFza2VkKGVuZ2luZSwgZGV2X3ByaXYsIGVu Z2luZV9tYXNrLCB0bXApCj4gLQkJCWh3X21hc2sgfD0gaHdfZW5naW5lX21hc2tbZW5naW5lLT5p ZF07Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIGdlbjZfaHdfZG9tYWluX3Jlc2V0KGRldl9wcml2LCBo d19tYXNrKTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGdlbjExX3Jlc2V0X2VuZ2luZXMgLSByZXNl dCBpbmRpdmlkdWFsIGVuZ2luZXMKPiAtICogQGRldl9wcml2OiBpOTE1IGRldmljZQo+IC0gKiBA ZW5naW5lX21hc2s6IG1hc2sgb2YgaW50ZWxfcmluZ19mbGFnKCkgZW5naW5lcyBvciBBTExfRU5H SU5FUyBmb3IgZnVsbCByZXNldAo+IC0gKgo+IC0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVzZXQg dGhlIGluZGl2aWR1YWwgZW5naW5lcyB0aGF0IGFyZSBzZXQgaW4gZW5naW5lX21hc2suCj4gLSAq IElmIHlvdSBwcm92aWRlIEFMTF9FTkdJTkVTIGFzIG1hc2ssIGZ1bGwgZ2xvYmFsIGRvbWFpbiBy ZXNldCB3aWxsIGJlIGlzc3VlZC4KPiAtICoKPiAtICogTm90ZTogSXQgaXMgcmVzcG9uc2liaWxp dHkgb2YgdGhlIGNhbGxlciB0byBoYW5kbGUgdGhlIGRpZmZlcmVuY2UgYmV0d2Vlbgo+IC0gKiBh c2tpbmcgZnVsbCBkb21haW4gcmVzZXQgdmVyc3VzIHJlc2V0IGZvciBhbGwgYXZhaWxhYmxlIGlu ZGl2aWR1YWwgZW5naW5lcy4KPiAtICoKPiAtICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5vbnpl cm8gb24gZXJyb3IuCj4gLSAqLwo+IC1zdGF0aWMgaW50IGdlbjExX3Jlc2V0X2VuZ2luZXMoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkgICAgICAgdW5zaWduZWQgZW5n aW5lX21hc2spCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAtCWNv bnN0IHUzMiBod19lbmdpbmVfbWFza1tJOTE1X05VTV9FTkdJTkVTXSA9IHsKPiAtCQlbUkNTXSA9 IEdFTjExX0dSRE9NX1JFTkRFUiwKPiAtCQlbQkNTXSA9IEdFTjExX0dSRE9NX0JMVCwKPiAtCQlb VkNTXSA9IEdFTjExX0dSRE9NX01FRElBLAo+IC0JCVtWQ1MyXSA9IEdFTjExX0dSRE9NX01FRElB MiwKPiAtCQlbVkNTM10gPSBHRU4xMV9HUkRPTV9NRURJQTMsCj4gLQkJW1ZDUzRdID0gR0VOMTFf R1JET01fTUVESUE0LAo+IC0JCVtWRUNTXSA9IEdFTjExX0dSRE9NX1ZFQ1MsCj4gLQkJW1ZFQ1My XSA9IEdFTjExX0dSRE9NX1ZFQ1MyLAo+IC0JfTsKPiAtCXUzMiBod19tYXNrOwo+IC0KPiAtCUJV SUxEX0JVR19PTihWRUNTMiArIDEgIT0gSTkxNV9OVU1fRU5HSU5FUyk7Cj4gLQo+IC0JaWYgKGVu Z2luZV9tYXNrID09IEFMTF9FTkdJTkVTKSB7Cj4gLQkJaHdfbWFzayA9IEdFTjExX0dSRE9NX0ZV TEw7Cj4gLQl9IGVsc2Ugewo+IC0JCXVuc2lnbmVkIGludCB0bXA7Cj4gLQo+IC0JCWh3X21hc2sg PSAwOwo+IC0JCWZvcl9lYWNoX2VuZ2luZV9tYXNrZWQoZW5naW5lLCBkZXZfcHJpdiwgZW5naW5l X21hc2ssIHRtcCkKPiAtCQkJaHdfbWFzayB8PSBod19lbmdpbmVfbWFza1tlbmdpbmUtPmlkXTsK PiAtCX0KPiAtCj4gLQlyZXR1cm4gZ2VuNl9od19kb21haW5fcmVzZXQoZGV2X3ByaXYsIGh3X21h c2spOwo+IC19Cj4gLQo+ICAvKioKPiAgICogX19pbnRlbF93YWl0X2Zvcl9yZWdpc3Rlcl9mdyAt IHdhaXQgdW50aWwgcmVnaXN0ZXIgbWF0Y2hlcyBleHBlY3RlZCBzdGF0ZQo+ICAgKiBAZGV2X3By aXY6IHRoZSBpOTE1IGRldmljZQo+IEBAIC0yMDYwLDE2OSArMTgwOCw2IEBAIGludCBfX2ludGVs X3dhaXRfZm9yX3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAg CXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgZ2VuOF9yZXNldF9lbmdpbmVfc3Rh cnQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7Cj4gLQlpbnQgcmV0Owo+IC0KPiAt CUk5MTVfV1JJVEVfRlcoUklOR19SRVNFVF9DVEwoZW5naW5lLT5tbWlvX2Jhc2UpLAo+IC0JCSAg ICAgIF9NQVNLRURfQklUX0VOQUJMRShSRVNFVF9DVExfUkVRVUVTVF9SRVNFVCkpOwo+IC0KPiAt CXJldCA9IF9faW50ZWxfd2FpdF9mb3JfcmVnaXN0ZXJfZncoZGV2X3ByaXYsCj4gLQkJCQkJICAg UklOR19SRVNFVF9DVEwoZW5naW5lLT5tbWlvX2Jhc2UpLAo+IC0JCQkJCSAgIFJFU0VUX0NUTF9S RUFEWV9UT19SRVNFVCwKPiAtCQkJCQkgICBSRVNFVF9DVExfUkVBRFlfVE9fUkVTRVQsCj4gLQkJ CQkJICAgNzAwLCAwLAo+IC0JCQkJCSAgIE5VTEwpOwo+IC0JaWYgKHJldCkKPiAtCQlEUk1fRVJS T1IoIiVzOiByZXNldCByZXF1ZXN0IHRpbWVvdXRcbiIsIGVuZ2luZS0+bmFtZSk7Cj4gLQo+IC0J cmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZ2VuOF9yZXNldF9lbmdpbmVfY2Fu Y2VsKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAtewo+IC0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owo+IC0KPiAtCUk5MTVfV1JJVEVf RlcoUklOR19SRVNFVF9DVEwoZW5naW5lLT5tbWlvX2Jhc2UpLAo+IC0JCSAgICAgIF9NQVNLRURf QklUX0RJU0FCTEUoUkVTRVRfQ1RMX1JFUVVFU1RfUkVTRVQpKTsKPiAtfQo+IC0KPiAtc3RhdGlj IGludCBnZW44X3Jlc2V0X2VuZ2luZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+IC0JCQkgICAgICB1bnNpZ25lZCBlbmdpbmVfbWFzaykKPiAtewo+IC0Jc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lOwo+IC0JdW5zaWduZWQgaW50IHRtcDsKPiAtCWludCByZXQ7Cj4g LQo+IC0JZm9yX2VhY2hfZW5naW5lX21hc2tlZChlbmdpbmUsIGRldl9wcml2LCBlbmdpbmVfbWFz aywgdG1wKSB7Cj4gLQkJaWYgKGdlbjhfcmVzZXRfZW5naW5lX3N0YXJ0KGVuZ2luZSkpIHsKPiAt CQkJcmV0ID0gLUVJTzsKPiAtCQkJZ290byBub3RfcmVhZHk7Cj4gLQkJfQo+IC0JfQo+IC0KPiAt CWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQo+IC0JCXJldCA9IGdlbjExX3Jlc2V0X2Vu Z2luZXMoZGV2X3ByaXYsIGVuZ2luZV9tYXNrKTsKPiAtCWVsc2UKPiAtCQlyZXQgPSBnZW42X3Jl c2V0X2VuZ2luZXMoZGV2X3ByaXYsIGVuZ2luZV9tYXNrKTsKPiAtCj4gLW5vdF9yZWFkeToKPiAt CWZvcl9lYWNoX2VuZ2luZV9tYXNrZWQoZW5naW5lLCBkZXZfcHJpdiwgZW5naW5lX21hc2ssIHRt cCkKPiAtCQlnZW44X3Jlc2V0X2VuZ2luZV9jYW5jZWwoZW5naW5lKTsKPiAtCj4gLQlyZXR1cm4g cmV0Owo+IC19Cj4gLQo+IC10eXBlZGVmIGludCAoKnJlc2V0X2Z1bmMpKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICosIHVuc2lnbmVkIGVuZ2luZV9tYXNrKTsKPiAtCj4gLXN0YXRpYyByZXNldF9m dW5jIGludGVsX2dldF9ncHVfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+IC17Cj4gLQlpZiAoIWk5MTVfbW9kcGFyYW1zLnJlc2V0KQo+IC0JCXJldHVybiBOVUxMOwo+ IC0KPiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDgpCj4gLQkJcmV0dXJuIGdlbjhfcmVz ZXRfZW5naW5lczsKPiAtCWVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNikKPiAtCQly ZXR1cm4gZ2VuNl9yZXNldF9lbmdpbmVzOwo+IC0JZWxzZSBpZiAoSVNfR0VONShkZXZfcHJpdikp Cj4gLQkJcmV0dXJuIGlyb25sYWtlX2RvX3Jlc2V0Owo+IC0JZWxzZSBpZiAoSVNfRzRYKGRldl9w cml2KSkKPiAtCQlyZXR1cm4gZzR4X2RvX3Jlc2V0Owo+IC0JZWxzZSBpZiAoSVNfRzMzKGRldl9w cml2KSB8fCBJU19QSU5FVklFVyhkZXZfcHJpdikpCj4gLQkJcmV0dXJuIGczM19kb19yZXNldDsK PiAtCWVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMykKPiAtCQlyZXR1cm4gaTkxNV9k b19yZXNldDsKPiAtCWVsc2UKPiAtCQlyZXR1cm4gTlVMTDsKPiAtfQo+IC0KPiAtaW50IGludGVs X2dwdV9yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHVuc2lnbmVkIGVu Z2luZV9tYXNrKQo+IC17Cj4gLQlyZXNldF9mdW5jIHJlc2V0ID0gaW50ZWxfZ2V0X2dwdV9yZXNl dChkZXZfcHJpdik7Cj4gLQlpbnQgcmV0cnk7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCS8qCj4gLQkg KiBXZSB3YW50IHRvIHBlcmZvcm0gcGVyLWVuZ2luZSByZXNldCBmcm9tIGF0b21pYyBjb250ZXh0 IChlLmcuCj4gLQkgKiBzb2Z0aXJxKSwgd2hpY2ggaW1wb3NlcyB0aGUgY29uc3RyYWludCB0aGF0 IHdlIGNhbm5vdCBzbGVlcC4KPiAtCSAqIEhvd2V2ZXIsIGV4cGVyaWVuY2Ugc3VnZ2VzdHMgdGhh dCBzcGVuZGluZyBhIGJpdCBvZiB0aW1lIHdhaXRpbmcKPiAtCSAqIGZvciBhIHJlc2V0IGhlbHBz IGluIHZhcmlvdXMgY2FzZXMsIHNvIGZvciBhIGZ1bGwtZGV2aWNlIHJlc2V0Cj4gLQkgKiB3ZSBh cHBseSB0aGUgb3Bwb3NpdGUgcnVsZSBhbmQgd2FpdCBpZiB3ZSB3YW50IHRvLiBBcyB3ZSBzaG91 bGQKPiAtCSAqIGFsd2F5cyBmb2xsb3cgdXAgYSBmYWlsZWQgcGVyLWVuZ2luZSByZXNldCB3aXRo IGEgZnVsbCBkZXZpY2UgcmVzZXQsCj4gLQkgKiBiZWluZyBhIGxpdHRsZSBmYXN0ZXIsIHN0cmlj dGVyIGFuZCBtb3JlIGVycm9yIHByb25lIGZvciB0aGUKPiAtCSAqIGF0b21pYyBjYXNlIHNlZW1z IGFuIGFjY2VwdGFibGUgY29tcHJvbWlzZS4KPiAtCSAqCj4gLQkgKiBVbmZvcnR1bmF0ZWx5IHRo aXMgbGVhZHMgdG8gYSBiaW1vZGFsIHJvdXRpbmUsIHdoZW4gdGhlIGdvYWwgd2FzCj4gLQkgKiB0 byBoYXZlIGEgc2luZ2xlIHJlc2V0IGZ1bmN0aW9uIHRoYXQgd29ya2VkIGZvciByZXNldHRpbmcg YW55Cj4gLQkgKiBudW1iZXIgb2YgZW5naW5lcyBzaW11bHRhbmVvdXNseS4KPiAtCSAqLwo+IC0J bWlnaHRfc2xlZXBfaWYoZW5naW5lX21hc2sgPT0gQUxMX0VOR0lORVMpOwo+IC0KPiAtCS8qCj4g LQkgKiBJZiB0aGUgcG93ZXIgd2VsbCBzbGVlcHMgZHVyaW5nIHRoZSByZXNldCwgdGhlIHJlc2V0 Cj4gLQkgKiByZXF1ZXN0IG1heSBiZSBkcm9wcGVkIGFuZCBuZXZlciBjb21wbGV0ZXMgKGNhdXNp bmcgLUVJTykuCj4gLQkgKi8KPiAtCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KGRldl9wcml2 LCBGT1JDRVdBS0VfQUxMKTsKPiAtCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IDM7IHJldHJ5Kysp IHsKPiAtCj4gLQkJLyoKPiAtCQkgKiBXZSBzdG9wIGVuZ2luZXMsIG90aGVyd2lzZSB3ZSBtaWdo dCBnZXQgZmFpbGVkIHJlc2V0IGFuZCBhCj4gLQkJICogZGVhZCBncHUgKG9uIGVsaykuIEFsc28g YXMgbW9kZXJuIGdwdSBhcyBrYmwgY2FuIHN1ZmZlcgo+IC0JCSAqIGZyb20gc3lzdGVtIGhhbmcg aWYgYmF0Y2hidWZmZXIgaXMgcHJvZ3Jlc3Npbmcgd2hlbgo+IC0JCSAqIHRoZSByZXNldCBpcyBp c3N1ZWQsIHJlZ2FyZGxlc3Mgb2YgUkVBRFlfVE9fUkVTRVQgYWNrLgo+IC0JCSAqIFRodXMgYXNz dW1lIGl0IGlzIGJlc3QgdG8gc3RvcCBlbmdpbmVzIG9uIGFsbCBnZW5zCj4gLQkJICogd2hlcmUg d2UgaGF2ZSBhIGdwdSByZXNldC4KPiAtCQkgKgo+IC0JCSAqIFdhS0JMVkVDU1NlbWFwaG9yZVdh aXRQb2xsOmtibCAob24gQUxMX0VOR0lORVMpCj4gLQkJICoKPiAtCQkgKiBXYU1lZGlhUmVzZXRN YWluUmluZ0NsZWFudXA6Y3RnLGVsayAocHJlc3VtYWJseSkKPiAtCQkgKgo+IC0JCSAqIEZJWE1F OiBXYSBmb3IgbW9yZSBtb2Rlcm4gZ2VucyBuZWVkcyB0byBiZSB2YWxpZGF0ZWQKPiAtCQkgKi8K PiAtCQlpOTE1X3N0b3BfZW5naW5lcyhkZXZfcHJpdiwgZW5naW5lX21hc2spOwo+IC0KPiAtCQly ZXQgPSAtRU5PREVWOwo+IC0JCWlmIChyZXNldCkgewo+IC0JCQlHRU1fVFJBQ0UoImVuZ2luZV9t YXNrPSV4XG4iLCBlbmdpbmVfbWFzayk7Cj4gLQkJCXJldCA9IHJlc2V0KGRldl9wcml2LCBlbmdp bmVfbWFzayk7Cj4gLQkJfQo+IC0JCWlmIChyZXQgIT0gLUVUSU1FRE9VVCB8fCBlbmdpbmVfbWFz ayAhPSBBTExfRU5HSU5FUykKPiAtCQkJYnJlYWs7Cj4gLQo+IC0JCWNvbmRfcmVzY2hlZCgpOwo+ IC0JfQo+IC0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9B TEwpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4gLWJvb2wgaW50ZWxfaGFzX2dwdV9y ZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXJldHVybiBp bnRlbF9nZXRfZ3B1X3Jlc2V0KGRldl9wcml2KSAhPSBOVUxMOwo+IC19Cj4gLQo+IC1ib29sIGlu dGVsX2hhc19yZXNldF9lbmdpbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ IC17Cj4gLQlyZXR1cm4gKGRldl9wcml2LT5pbmZvLmhhc19yZXNldF9lbmdpbmUgJiYKPiAtCQlp OTE1X21vZHBhcmFtcy5yZXNldCA+PSAyKTsKPiAtfQo+IC0KPiAtaW50IGludGVsX3Jlc2V0X2d1 YyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXUzMiBndWNfZG9t YWluID0gSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSA/IEdFTjExX0dSRE9NX0dVQyA6Cj4gLQkJ CQkJCSAgICAgR0VOOV9HUkRPTV9HVUM7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCUdFTV9CVUdfT04o IUhBU19HVUMoZGV2X3ByaXYpKTsKPiAtCj4gLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldChk ZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7Cj4gLQlyZXQgPSBnZW42X2h3X2RvbWFpbl9yZXNldChk ZXZfcHJpdiwgZ3VjX2RvbWFpbik7Cj4gLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChkZXZf cHJpdiwgRk9SQ0VXQUtFX0FMTCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAgYm9v bCBpbnRlbF91bmNvcmVfdW5jbGFpbWVkX21taW8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQo+ICB7Cj4gIAlyZXR1cm4gY2hlY2tfZm9yX3VuY2xhaW1lZF9tbWlvKGRldl9wcml2 KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX3dv cmthcm91bmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfd29ya2Fy b3VuZHMuYwo+IGluZGV4IGZhZmRlYzNmZTgzZS4uN2Y4NDJkYmJlYTFmIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF93b3JrYXJvdW5kcy5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX3dvcmthcm91bmRzLmMKPiBA QCAtNSw2ICs1LDcgQEAKPiAgICovCj4gIAo+ICAjaW5jbHVkZSAiLi4vaTkxNV9zZWxmdGVzdC5o Igo+ICsjaW5jbHVkZSAiLi4vaTkxNV9yZXNldC5oIgo+ICAKPiAgI2luY2x1ZGUgIm1vY2tfY29u dGV4dC5oIgo+ICAKPiAtLSAKPiAyLjE4LjAKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVu Z2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBs aXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK