From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F27C4C2B9F4 for ; Mon, 14 Jun 2021 16:33:24 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id B8EB061246 for ; Mon, 14 Jun 2021 16:33:24 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B8EB061246 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1CE2A89EB4; Mon, 14 Jun 2021 16:33:20 +0000 (UTC) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8179089EAC; Mon, 14 Jun 2021 16:33:18 +0000 (UTC) IronPort-SDR: 0CdtxrMPwranEYSv2sqZAJDfPLaGJVbicfLsMnmcM6pqqG+Ft53Fod1P2762mGI/vt9TjAFg02 s6+lwsBengbA== X-IronPort-AV: E=McAfee;i="6200,9189,10015"; a="205658679" X-IronPort-AV: E=Sophos;i="5.83,273,1616482800"; d="scan'208";a="205658679" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Jun 2021 09:33:16 -0700 IronPort-SDR: 9Da+PkmoGV2fIAl68WhoXd1QtqMXgz1kV8uECUKzU8YnPzO9M5VZ0djTzi7Rns0B8jSWS7NkiR q37sAOCj4Ltg== X-IronPort-AV: E=Sophos;i="5.83,273,1616482800"; d="scan'208";a="554162881" Received: from chanily-mobl.ger.corp.intel.com (HELO [10.252.31.39]) ([10.252.31.39]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Jun 2021 09:33:15 -0700 To: =?UTF-8?Q?Thomas_Hellstr=c3=b6m?= , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org References: <20210614162612.294869-1-thomas.hellstrom@linux.intel.com> <20210614162612.294869-12-thomas.hellstrom@linux.intel.com> From: Matthew Auld Message-ID: Date: Mon, 14 Jun 2021 17:33:12 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: <20210614162612.294869-12-thomas.hellstrom@linux.intel.com> Content-Language: en-GB Subject: Re: [Intel-gfx] [PATCH v3 11/12] drm/i915/gem: Zap the client blt code X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gMTQvMDYvMjAyMSAxNzoyNiwgVGhvbWFzIEhlbGxzdHLDtm0gd3JvdGU6Cj4gSXQncyBub3Qg dXNlZCBhbnl3aGVyZS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgSGVsbHN0csO2bSA8dGhv bWFzLmhlbGxzdHJvbUBsaW51eC5pbnRlbC5jb20+CgpXZSBkbyBoYXZlIHRvIGtlZXAgaWd0X2Ns aWVudF90aWxlZF9ibGl0cyBzdWJ0ZXN0LCBpdCdzIG5vdCByZWxhdGVkIHRvIAp0aGUgY2xpZW50 IGJsaXR0aW5nIGNvZGUgYW5kIHdhcyBhZGRlZCBhZnRlcndhcmRzLiBOb3QgY29tcGxldGVseSBz dXJlIAp3aHkgaXQncyBpbiB0aGlzIGZpbGUuCgpXaXRoIHRoYXQgYWRkZWQgYmFjaywKUmV2aWV3 ZWQtYnk6IE1hdHRoZXcgQXVsZCA8bWF0dGhldy5hdWxkQGludGVsLmNvbT4KCj4gLS0tCj4gICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgIDEgLQo+ICAg Li4uL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY2xpZW50X2JsdC5jICAgIHwgMzU1IC0tLS0t LS0tLQo+ICAgLi4uL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY2xpZW50X2JsdC5oICAgIHwg IDIxIC0KPiAgIC4uLi9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fY2xpZW50X2JsdC5jICB8 IDcwNCAtLS0tLS0tLS0tLS0tLS0tLS0KPiAgIC4uLi9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9s aXZlX3NlbGZ0ZXN0cy5oICB8ICAgMSAtCj4gICA1IGZpbGVzIGNoYW5nZWQsIDEwODIgZGVsZXRp b25zKC0pCj4gICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX2NsaWVudF9ibHQuYwo+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2dlbS9pOTE1X2dlbV9jbGllbnRfYmx0LmgKPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX2NsaWVudF9ibHQuYwo+ IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5kZXggZGU0Y2I5YzUyNTg1Li5jYTA3NDc0ZWMyZGYg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IEBAIC0xMzYsNyArMTM2LDYgQEAgaTkxNS15ICs9 ICQoZ3QteSkKPiAgIGdlbS15ICs9IFwKPiAgIAlnZW0vaTkxNV9nZW1fYnVzeS5vIFwKPiAgIAln ZW0vaTkxNV9nZW1fY2xmbHVzaC5vIFwKPiAtCWdlbS9pOTE1X2dlbV9jbGllbnRfYmx0Lm8gXAo+ ICAgCWdlbS9pOTE1X2dlbV9jb250ZXh0Lm8gXAo+ICAgCWdlbS9pOTE1X2dlbV9jcmVhdGUubyBc Cj4gICAJZ2VtL2k5MTVfZ2VtX2RtYWJ1Zi5vIFwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NsaWVudF9ibHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9pOTE1X2dlbV9jbGllbnRfYmx0LmMKPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCA0NDgyMWQ5NDU0NGYuLjAwMDAwMDAwMDAwMAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2dlbS9pOTE1X2dlbV9jbGllbnRfYmx0LmMKPiArKysgL2Rldi9udWxsCj4gQEAgLTEsMzU1 ICswLDAgQEAKPiAtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAo+IC0vKgo+IC0gKiBD b3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgo+IC0gKi8KPiAtCj4gLSNpbmNsdWRl ICJpOTE1X2Rydi5oIgo+IC0jaW5jbHVkZSAiZ3QvaW50ZWxfY29udGV4dC5oIgo+IC0jaW5jbHVk ZSAiZ3QvaW50ZWxfZW5naW5lX3BtLmgiCj4gLSNpbmNsdWRlICJpOTE1X2dlbV9jbGllbnRfYmx0 LmgiCj4gLSNpbmNsdWRlICJpOTE1X2dlbV9vYmplY3RfYmx0LmgiCj4gLQo+IC1zdHJ1Y3QgaTkx NV9zbGVldmUgewo+IC0Jc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqOwo+IC0Jc3RydWN0IHNnX3RhYmxlICpwYWdlczsKPiAtCXN0cnVjdCBp OTE1X3BhZ2Vfc2l6ZXMgcGFnZV9zaXplczsKPiAtfTsKPiAtCj4gLXN0YXRpYyBpbnQgdm1hX3Nl dF9wYWdlcyhzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAtewo+IC0Jc3RydWN0IGk5MTVfc2xlZXZl ICpzbGVldmUgPSB2bWEtPnByaXZhdGU7Cj4gLQo+IC0Jdm1hLT5wYWdlcyA9IHNsZWV2ZS0+cGFn ZXM7Cj4gLQl2bWEtPnBhZ2Vfc2l6ZXMgPSBzbGVldmUtPnBhZ2Vfc2l6ZXM7Cj4gLQo+IC0JcmV0 dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHZtYV9jbGVhcl9wYWdlcyhzdHJ1Y3QgaTkx NV92bWEgKnZtYSkKPiAtewo+IC0JR0VNX0JVR19PTighdm1hLT5wYWdlcyk7Cj4gLQl2bWEtPnBh Z2VzID0gTlVMTDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgdm1hX2JpbmQoc3RydWN0IGk5MTVf YWRkcmVzc19zcGFjZSAqdm0sCj4gLQkJICAgICBzdHJ1Y3QgaTkxNV92bV9wdF9zdGFzaCAqc3Rh c2gsCj4gLQkJICAgICBzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiAtCQkgICAgIGVudW0gaTkxNV9j YWNoZV9sZXZlbCBjYWNoZV9sZXZlbCwKPiAtCQkgICAgIHUzMiBmbGFncykKPiAtewo+IC0Jdm0t PnZtYV9vcHMuYmluZF92bWEodm0sIHN0YXNoLCB2bWEsIGNhY2hlX2xldmVsLCBmbGFncyk7Cj4g LX0KPiAtCj4gLXN0YXRpYyB2b2lkIHZtYV91bmJpbmQoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFj ZSAqdm0sIHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+IC17Cj4gLQl2bS0+dm1hX29wcy51bmJpbmRf dm1hKHZtLCB2bWEpOwo+IC19Cj4gLQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfdm1hX29w cyBwcm94eV92bWFfb3BzID0gewo+IC0JLnNldF9wYWdlcyA9IHZtYV9zZXRfcGFnZXMsCj4gLQku Y2xlYXJfcGFnZXMgPSB2bWFfY2xlYXJfcGFnZXMsCj4gLQkuYmluZF92bWEgPSB2bWFfYmluZCwK PiAtCS51bmJpbmRfdm1hID0gdm1hX3VuYmluZCwKPiAtfTsKPiAtCj4gLXN0YXRpYyBzdHJ1Y3Qg aTkxNV9zbGVldmUgKmNyZWF0ZV9zbGVldmUoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0s Cj4gLQkJCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gLQkJCQkJIHN0cnVj dCBzZ190YWJsZSAqcGFnZXMsCj4gLQkJCQkJIHN0cnVjdCBpOTE1X3BhZ2Vfc2l6ZXMgKnBhZ2Vf c2l6ZXMpCj4gLXsKPiAtCXN0cnVjdCBpOTE1X3NsZWV2ZSAqc2xlZXZlOwo+IC0Jc3RydWN0IGk5 MTVfdm1hICp2bWE7Cj4gLQlpbnQgZXJyOwo+IC0KPiAtCXNsZWV2ZSA9IGt6YWxsb2Moc2l6ZW9m KCpzbGVldmUpLCBHRlBfS0VSTkVMKTsKPiAtCWlmICghc2xlZXZlKQo+IC0JCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOwo+IC0KPiAtCXZtYSA9IGk5MTVfdm1hX2luc3RhbmNlKG9iaiwgdm0sIE5V TEwpOwo+IC0JaWYgKElTX0VSUih2bWEpKSB7Cj4gLQkJZXJyID0gUFRSX0VSUih2bWEpOwo+IC0J CWdvdG8gZXJyX2ZyZWU7Cj4gLQl9Cj4gLQo+IC0Jdm1hLT5wcml2YXRlID0gc2xlZXZlOwo+IC0J dm1hLT5vcHMgPSAmcHJveHlfdm1hX29wczsKPiAtCj4gLQlzbGVldmUtPnZtYSA9IHZtYTsKPiAt CXNsZWV2ZS0+cGFnZXMgPSBwYWdlczsKPiAtCXNsZWV2ZS0+cGFnZV9zaXplcyA9ICpwYWdlX3Np emVzOwo+IC0KPiAtCXJldHVybiBzbGVldmU7Cj4gLQo+IC1lcnJfZnJlZToKPiAtCWtmcmVlKHNs ZWV2ZSk7Cj4gLQlyZXR1cm4gRVJSX1BUUihlcnIpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBk ZXN0cm95X3NsZWV2ZShzdHJ1Y3QgaTkxNV9zbGVldmUgKnNsZWV2ZSkKPiAtewo+IC0Ja2ZyZWUo c2xlZXZlKTsKPiAtfQo+IC0KPiAtc3RydWN0IGNsZWFyX3BhZ2VzX3dvcmsgewo+IC0Jc3RydWN0 IGRtYV9mZW5jZSBkbWE7Cj4gLQlzdHJ1Y3QgZG1hX2ZlbmNlX2NiIGNiOwo+IC0Jc3RydWN0IGk5 MTVfc3dfZmVuY2Ugd2FpdDsKPiAtCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwo+IC0Jc3RydWN0 IGlycV93b3JrIGlycV93b3JrOwo+IC0Jc3RydWN0IGk5MTVfc2xlZXZlICpzbGVldmU7Cj4gLQlz dHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7Cj4gLQl1MzIgdmFsdWU7Cj4gLX07Cj4gLQo+IC1zdGF0 aWMgY29uc3QgY2hhciAqY2xlYXJfcGFnZXNfd29ya19kcml2ZXJfbmFtZShzdHJ1Y3QgZG1hX2Zl bmNlICpmZW5jZSkKPiAtewo+IC0JcmV0dXJuIERSSVZFUl9OQU1FOwo+IC19Cj4gLQo+IC1zdGF0 aWMgY29uc3QgY2hhciAqY2xlYXJfcGFnZXNfd29ya190aW1lbGluZV9uYW1lKHN0cnVjdCBkbWFf ZmVuY2UgKmZlbmNlKQo+IC17Cj4gLQlyZXR1cm4gImNsZWFyIjsKPiAtfQo+IC0KPiAtc3RhdGlj IHZvaWQgY2xlYXJfcGFnZXNfd29ya19yZWxlYXNlKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQo+ IC17Cj4gLQlzdHJ1Y3QgY2xlYXJfcGFnZXNfd29yayAqdyA9IGNvbnRhaW5lcl9vZihmZW5jZSwg dHlwZW9mKCp3KSwgZG1hKTsKPiAtCj4gLQlkZXN0cm95X3NsZWV2ZSh3LT5zbGVldmUpOwo+IC0K PiAtCWk5MTVfc3dfZmVuY2VfZmluaSgmdy0+d2FpdCk7Cj4gLQo+IC0JQlVJTERfQlVHX09OKG9m ZnNldG9mKHR5cGVvZigqdyksIGRtYSkpOwo+IC0JZG1hX2ZlbmNlX2ZyZWUoJnctPmRtYSk7Cj4g LX0KPiAtCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2ZlbmNlX29wcyBjbGVhcl9wYWdlc193 b3JrX29wcyA9IHsKPiAtCS5nZXRfZHJpdmVyX25hbWUgPSBjbGVhcl9wYWdlc193b3JrX2RyaXZl cl9uYW1lLAo+IC0JLmdldF90aW1lbGluZV9uYW1lID0gY2xlYXJfcGFnZXNfd29ya190aW1lbGlu ZV9uYW1lLAo+IC0JLnJlbGVhc2UgPSBjbGVhcl9wYWdlc193b3JrX3JlbGVhc2UsCj4gLX07Cj4g LQo+IC1zdGF0aWMgdm9pZCBjbGVhcl9wYWdlc19zaWduYWxfaXJxX3dvcmtlcihzdHJ1Y3QgaXJx X3dvcmsgKndvcmspCj4gLXsKPiAtCXN0cnVjdCBjbGVhcl9wYWdlc193b3JrICp3ID0gY29udGFp bmVyX29mKHdvcmssIHR5cGVvZigqdyksIGlycV93b3JrKTsKPiAtCj4gLQlkbWFfZmVuY2Vfc2ln bmFsKCZ3LT5kbWEpOwo+IC0JZG1hX2ZlbmNlX3B1dCgmdy0+ZG1hKTsKPiAtfQo+IC0KPiAtc3Rh dGljIHZvaWQgY2xlYXJfcGFnZXNfZG1hX2ZlbmNlX2NiKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNl LAo+IC0JCQkJICAgICBzdHJ1Y3QgZG1hX2ZlbmNlX2NiICpjYikKPiAtewo+IC0Jc3RydWN0IGNs ZWFyX3BhZ2VzX3dvcmsgKncgPSBjb250YWluZXJfb2YoY2IsIHR5cGVvZigqdyksIGNiKTsKPiAt Cj4gLQlpZiAoZmVuY2UtPmVycm9yKQo+IC0JCWRtYV9mZW5jZV9zZXRfZXJyb3IoJnctPmRtYSwg ZmVuY2UtPmVycm9yKTsKPiAtCj4gLQkvKgo+IC0JICogUHVzaCB0aGUgc2lnbmFsbGluZyBvZiB0 aGUgZmVuY2UgaW50byB5ZXQgYW5vdGhlciB3b3JrZXIgdG8gYXZvaWQKPiAtCSAqIHRoZSBuaWdo dG1hcmUgbG9ja2luZyBhcm91bmQgdGhlIGZlbmNlIHNwaW5sb2NrLgo+IC0JICovCj4gLQlpcnFf d29ya19xdWV1ZSgmdy0+aXJxX3dvcmspOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBjbGVhcl9w YWdlc193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+IC17Cj4gLQlzdHJ1Y3QgY2xl YXJfcGFnZXNfd29yayAqdyA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKncpLCB3b3JrKTsK PiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSB3LT5zbGVldmUtPnZtYS0+b2Jq Owo+IC0Jc3RydWN0IGk5MTVfdm1hICp2bWEgPSB3LT5zbGVldmUtPnZtYTsKPiAtCXN0cnVjdCBp OTE1X2dlbV93d19jdHggd3c7Cj4gLQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKPiAtCXN0cnVj dCBpOTE1X3ZtYSAqYmF0Y2g7Cj4gLQlpbnQgZXJyID0gdy0+ZG1hLmVycm9yOwo+IC0KPiAtCWlm ICh1bmxpa2VseShlcnIpKQo+IC0JCWdvdG8gb3V0X3NpZ25hbDsKPiAtCj4gLQlpZiAob2JqLT5j YWNoZV9kaXJ0eSkgewo+IC0JCWlmIChpOTE1X2dlbV9vYmplY3RfaGFzX3N0cnVjdF9wYWdlKG9i aikpCj4gLQkJCWRybV9jbGZsdXNoX3NnKHctPnNsZWV2ZS0+cGFnZXMpOwo+IC0JCW9iai0+Y2Fj aGVfZGlydHkgPSBmYWxzZTsKPiAtCX0KPiAtCW9iai0+cmVhZF9kb21haW5zID0gSTkxNV9HRU1f R1BVX0RPTUFJTlM7Cj4gLQlvYmotPndyaXRlX2RvbWFpbiA9IDA7Cj4gLQo+IC0JaTkxNV9nZW1f d3dfY3R4X2luaXQoJnd3LCBmYWxzZSk7Cj4gLQlpbnRlbF9lbmdpbmVfcG1fZ2V0KHctPmNlLT5l bmdpbmUpOwo+IC1yZXRyeToKPiAtCWVyciA9IGludGVsX2NvbnRleHRfcGluX3d3KHctPmNlLCAm d3cpOwo+IC0JaWYgKGVycikKPiAtCQlnb3RvIG91dF9zaWduYWw7Cj4gLQo+IC0JYmF0Y2ggPSBp bnRlbF9lbWl0X3ZtYV9maWxsX2JsdCh3LT5jZSwgdm1hLCAmd3csIHctPnZhbHVlKTsKPiAtCWlm IChJU19FUlIoYmF0Y2gpKSB7Cj4gLQkJZXJyID0gUFRSX0VSUihiYXRjaCk7Cj4gLQkJZ290byBv dXRfY3R4Owo+IC0JfQo+IC0KPiAtCXJxID0gaTkxNV9yZXF1ZXN0X2NyZWF0ZSh3LT5jZSk7Cj4g LQlpZiAoSVNfRVJSKHJxKSkgewo+IC0JCWVyciA9IFBUUl9FUlIocnEpOwo+IC0JCWdvdG8gb3V0 X2JhdGNoOwo+IC0JfQo+IC0KPiAtCS8qIFRoZXJlJ3Mgbm8gd2F5IHRoZSBmZW5jZSBoYXMgc2ln bmFsbGVkICovCj4gLQlpZiAoZG1hX2ZlbmNlX2FkZF9jYWxsYmFjaygmcnEtPmZlbmNlLCAmdy0+ Y2IsCj4gLQkJCQkgICBjbGVhcl9wYWdlc19kbWFfZmVuY2VfY2IpKQo+IC0JCUdFTV9CVUdfT04o MSk7Cj4gLQo+IC0JZXJyID0gaW50ZWxfZW1pdF92bWFfbWFya19hY3RpdmUoYmF0Y2gsIHJxKTsK PiAtCWlmICh1bmxpa2VseShlcnIpKQo+IC0JCWdvdG8gb3V0X3JlcXVlc3Q7Cj4gLQo+IC0JLyoK PiAtCSAqIHctPmRtYSBpcyBhbHJlYWR5IGV4cG9ydGVkIHZpYSAodm1hfG9iaiktPnJlc3Ygd2Ug bmVlZCBvbmx5Cj4gLQkgKiBrZWVwIHRyYWNrIG9mIHRoZSBHUFUgYWN0aXZpdHkgd2l0aGluIHRo aXMgdm1hL3JlcXVlc3QsIGFuZAo+IC0JICogcHJvcGFnYXRlIHRoZSBzaWduYWwgZnJvbSB0aGUg cmVxdWVzdCB0byB3LT5kbWEuCj4gLQkgKi8KPiAtCWVyciA9IF9faTkxNV92bWFfbW92ZV90b19h Y3RpdmUodm1hLCBycSk7Cj4gLQlpZiAoZXJyKQo+IC0JCWdvdG8gb3V0X3JlcXVlc3Q7Cj4gLQo+ IC0JaWYgKHJxLT5lbmdpbmUtPmVtaXRfaW5pdF9icmVhZGNydW1iKSB7Cj4gLQkJZXJyID0gcnEt PmVuZ2luZS0+ZW1pdF9pbml0X2JyZWFkY3J1bWIocnEpOwo+IC0JCWlmICh1bmxpa2VseShlcnIp KQo+IC0JCQlnb3RvIG91dF9yZXF1ZXN0Owo+IC0JfQo+IC0KPiAtCWVyciA9IHJxLT5lbmdpbmUt PmVtaXRfYmJfc3RhcnQocnEsCj4gLQkJCQkJYmF0Y2gtPm5vZGUuc3RhcnQsIGJhdGNoLT5ub2Rl LnNpemUsCj4gLQkJCQkJMCk7Cj4gLW91dF9yZXF1ZXN0Ogo+IC0JaWYgKHVubGlrZWx5KGVycikp IHsKPiAtCQlpOTE1X3JlcXVlc3Rfc2V0X2Vycm9yX29uY2UocnEsIGVycik7Cj4gLQkJZXJyID0g MDsKPiAtCX0KPiAtCj4gLQlpOTE1X3JlcXVlc3RfYWRkKHJxKTsKPiAtb3V0X2JhdGNoOgo+IC0J aW50ZWxfZW1pdF92bWFfcmVsZWFzZSh3LT5jZSwgYmF0Y2gpOwo+IC1vdXRfY3R4Ogo+IC0JaW50 ZWxfY29udGV4dF91bnBpbih3LT5jZSk7Cj4gLW91dF9zaWduYWw6Cj4gLQlpZiAoZXJyID09IC1F REVBRExLKSB7Cj4gLQkJZXJyID0gaTkxNV9nZW1fd3dfY3R4X2JhY2tvZmYoJnd3KTsKPiAtCQlp ZiAoIWVycikKPiAtCQkJZ290byByZXRyeTsKPiAtCX0KPiAtCWk5MTVfZ2VtX3d3X2N0eF9maW5p KCZ3dyk7Cj4gLQo+IC0JaTkxNV92bWFfdW5waW4ody0+c2xlZXZlLT52bWEpOwo+IC0JaW50ZWxf ZW5naW5lX3BtX3B1dCh3LT5jZS0+ZW5naW5lKTsKPiAtCj4gLQlpZiAodW5saWtlbHkoZXJyKSkg ewo+IC0JCWRtYV9mZW5jZV9zZXRfZXJyb3IoJnctPmRtYSwgZXJyKTsKPiAtCQlkbWFfZmVuY2Vf c2lnbmFsKCZ3LT5kbWEpOwo+IC0JCWRtYV9mZW5jZV9wdXQoJnctPmRtYSk7Cj4gLQl9Cj4gLX0K PiAtCj4gLXN0YXRpYyBpbnQgcGluX3dhaXRfY2xlYXJfcGFnZXNfd29yayhzdHJ1Y3QgY2xlYXJf cGFnZXNfd29yayAqdywKPiAtCQkJCSAgICAgc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+IC17 Cj4gLQlzdHJ1Y3QgaTkxNV92bWEgKnZtYSA9IHctPnNsZWV2ZS0+dm1hOwo+IC0Jc3RydWN0IGk5 MTVfZ2VtX3d3X2N0eCB3dzsKPiAtCWludCBlcnI7Cj4gLQo+IC0JaTkxNV9nZW1fd3dfY3R4X2lu aXQoJnd3LCBmYWxzZSk7Cj4gLXJldHJ5Ogo+IC0JZXJyID0gaTkxNV9nZW1fb2JqZWN0X2xvY2so dm1hLT5vYmosICZ3dyk7Cj4gLQlpZiAoZXJyKQo+IC0JCWdvdG8gb3V0Owo+IC0KPiAtCWVyciA9 IGk5MTVfdm1hX3Bpbl93dyh2bWEsICZ3dywgMCwgMCwgUElOX1VTRVIpOwo+IC0JaWYgKHVubGlr ZWx5KGVycikpCj4gLQkJZ290byBvdXQ7Cj4gLQo+IC0JZXJyID0gaTkxNV9zd19mZW5jZV9hd2Fp dF9yZXNlcnZhdGlvbigmdy0+d2FpdCwKPiAtCQkJCQkgICAgICB2bWEtPm9iai0+YmFzZS5yZXN2 LCBOVUxMLAo+IC0JCQkJCSAgICAgIHRydWUsIDAsIEk5MTVfRkVOQ0VfR0ZQKTsKPiAtCWlmIChl cnIpCj4gLQkJZ290byBlcnJfdW5waW5fdm1hOwo+IC0KPiAtCWRtYV9yZXN2X2FkZF9leGNsX2Zl bmNlKHZtYS0+b2JqLT5iYXNlLnJlc3YsICZ3LT5kbWEpOwo+IC0KPiAtZXJyX3VucGluX3ZtYToK PiAtCWlmIChlcnIpCj4gLQkJaTkxNV92bWFfdW5waW4odm1hKTsKPiAtb3V0Ogo+IC0JaWYgKGVy ciA9PSAtRURFQURMSykgewo+IC0JCWVyciA9IGk5MTVfZ2VtX3d3X2N0eF9iYWNrb2ZmKCZ3dyk7 Cj4gLQkJaWYgKCFlcnIpCj4gLQkJCWdvdG8gcmV0cnk7Cj4gLQl9Cj4gLQlpOTE1X2dlbV93d19j dHhfZmluaSgmd3cpOwo+IC0JcmV0dXJuIGVycjsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBfX2k5 MTVfc3dfZmVuY2VfY2FsbAo+IC1jbGVhcl9wYWdlc193b3JrX25vdGlmeShzdHJ1Y3QgaTkxNV9z d19mZW5jZSAqZmVuY2UsCj4gLQkJCWVudW0gaTkxNV9zd19mZW5jZV9ub3RpZnkgc3RhdGUpCj4g LXsKPiAtCXN0cnVjdCBjbGVhcl9wYWdlc193b3JrICp3ID0gY29udGFpbmVyX29mKGZlbmNlLCB0 eXBlb2YoKncpLCB3YWl0KTsKPiAtCj4gLQlzd2l0Y2ggKHN0YXRlKSB7Cj4gLQljYXNlIEZFTkNF X0NPTVBMRVRFOgo+IC0JCXNjaGVkdWxlX3dvcmsoJnctPndvcmspOwo+IC0JCWJyZWFrOwo+IC0K PiAtCWNhc2UgRkVOQ0VfRlJFRToKPiAtCQlkbWFfZmVuY2VfcHV0KCZ3LT5kbWEpOwo+IC0JCWJy ZWFrOwo+IC0JfQo+IC0KPiAtCXJldHVybiBOT1RJRllfRE9ORTsKPiAtfQo+IC0KPiAtc3RhdGlj IERFRklORV9TUElOTE9DSyhmZW5jZV9sb2NrKTsKPiAtCj4gLS8qIFhYWDogYmV0dGVyIG5hbWUg cGxlYXNlICovCj4gLWludCBpOTE1X2dlbV9zY2hlZHVsZV9maWxsX3BhZ2VzX2JsdChzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IC0JCQkJICAgICBzdHJ1Y3QgaW50ZWxfY29udGV4 dCAqY2UsCj4gLQkJCQkgICAgIHN0cnVjdCBzZ190YWJsZSAqcGFnZXMsCj4gLQkJCQkgICAgIHN0 cnVjdCBpOTE1X3BhZ2Vfc2l6ZXMgKnBhZ2Vfc2l6ZXMsCj4gLQkJCQkgICAgIHUzMiB2YWx1ZSkK PiAtewo+IC0Jc3RydWN0IGNsZWFyX3BhZ2VzX3dvcmsgKndvcms7Cj4gLQlzdHJ1Y3QgaTkxNV9z bGVldmUgKnNsZWV2ZTsKPiAtCWludCBlcnI7Cj4gLQo+IC0Jc2xlZXZlID0gY3JlYXRlX3NsZWV2 ZShjZS0+dm0sIG9iaiwgcGFnZXMsIHBhZ2Vfc2l6ZXMpOwo+IC0JaWYgKElTX0VSUihzbGVldmUp KQo+IC0JCXJldHVybiBQVFJfRVJSKHNsZWV2ZSk7Cj4gLQo+IC0Jd29yayA9IGttYWxsb2Moc2l6 ZW9mKCp3b3JrKSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIXdvcmspIHsKPiAtCQlkZXN0cm95X3Ns ZWV2ZShzbGVldmUpOwo+IC0JCXJldHVybiAtRU5PTUVNOwo+IC0JfQo+IC0KPiAtCXdvcmstPnZh bHVlID0gdmFsdWU7Cj4gLQl3b3JrLT5zbGVldmUgPSBzbGVldmU7Cj4gLQl3b3JrLT5jZSA9IGNl Owo+IC0KPiAtCUlOSVRfV09SSygmd29yay0+d29yaywgY2xlYXJfcGFnZXNfd29ya2VyKTsKPiAt Cj4gLQlpbml0X2lycV93b3JrKCZ3b3JrLT5pcnFfd29yaywgY2xlYXJfcGFnZXNfc2lnbmFsX2ly cV93b3JrZXIpOwo+IC0KPiAtCWRtYV9mZW5jZV9pbml0KCZ3b3JrLT5kbWEsICZjbGVhcl9wYWdl c193b3JrX29wcywgJmZlbmNlX2xvY2ssIDAsIDApOwo+IC0JaTkxNV9zd19mZW5jZV9pbml0KCZ3 b3JrLT53YWl0LCBjbGVhcl9wYWdlc193b3JrX25vdGlmeSk7Cj4gLQo+IC0JZXJyID0gcGluX3dh aXRfY2xlYXJfcGFnZXNfd29yayh3b3JrLCBjZSk7Cj4gLQlpZiAoZXJyIDwgMCkKPiAtCQlkbWFf ZmVuY2Vfc2V0X2Vycm9yKCZ3b3JrLT5kbWEsIGVycik7Cj4gLQo+IC0JZG1hX2ZlbmNlX2dldCgm d29yay0+ZG1hKTsKPiAtCWk5MTVfc3dfZmVuY2VfY29tbWl0KCZ3b3JrLT53YWl0KTsKPiAtCj4g LQlyZXR1cm4gZXJyOwo+IC19Cj4gLQo+IC0jaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVf U0VMRlRFU1QpCj4gLSNpbmNsdWRlICJzZWxmdGVzdHMvaTkxNV9nZW1fY2xpZW50X2JsdC5jIgo+ IC0jZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2Vt X2NsaWVudF9ibHQuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jbGllbnRf Ymx0LmgKPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAzZGJkMjhjMjJmZjUuLjAw MDAwMDAwMDAwMAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jbGll bnRfYmx0LmgKPiArKysgL2Rldi9udWxsCj4gQEAgLTEsMjEgKzAsMCBAQAo+IC0vKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogTUlUICovCj4gLS8qCj4gLSAqIENvcHlyaWdodCDCqSAyMDE5IElu dGVsIENvcnBvcmF0aW9uCj4gLSAqLwo+IC0jaWZuZGVmIF9fSTkxNV9HRU1fQ0xJRU5UX0JMVF9I X18KPiAtI2RlZmluZSBfX0k5MTVfR0VNX0NMSUVOVF9CTFRfSF9fCj4gLQo+IC0jaW5jbHVkZSA8 bGludXgvdHlwZXMuaD4KPiAtCj4gLXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0Owo+IC1zdHJ1 Y3QgaTkxNV9wYWdlX3NpemVzOwo+IC1zdHJ1Y3QgaW50ZWxfY29udGV4dDsKPiAtc3RydWN0IHNn X3RhYmxlOwo+IC0KPiAtaW50IGk5MTVfZ2VtX3NjaGVkdWxlX2ZpbGxfcGFnZXNfYmx0KHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gLQkJCQkgICAgIHN0cnVjdCBpbnRlbF9jb250 ZXh0ICpjZSwKPiAtCQkJCSAgICAgc3RydWN0IHNnX3RhYmxlICpwYWdlcywKPiAtCQkJCSAgICAg c3RydWN0IGk5MTVfcGFnZV9zaXplcyAqcGFnZV9zaXplcywKPiAtCQkJCSAgICAgdTMyIHZhbHVl KTsKPiAtCj4gLSNlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v c2VsZnRlc3RzL2k5MTVfZ2VtX2NsaWVudF9ibHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9zZWxmdGVzdHMvaTkxNV9nZW1fY2xpZW50X2JsdC5jCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMTc2ZTZiMjJmODdmLi4wMDAwMDAwMDAwMDAKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX2NsaWVudF9ibHQuYwo+ICsrKyAvZGV2 L251bGwKPiBAQCAtMSw3MDQgKzAsMCBAQAo+IC0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog TUlUCj4gLS8qCj4gLSAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCj4gLSAq Lwo+IC0KPiAtI2luY2x1ZGUgImk5MTVfc2VsZnRlc3QuaCIKPiAtCj4gLSNpbmNsdWRlICJndC9p bnRlbF9lbmdpbmVfdXNlci5oIgo+IC0jaW5jbHVkZSAiZ3QvaW50ZWxfZ3QuaCIKPiAtI2luY2x1 ZGUgImd0L2ludGVsX2dwdV9jb21tYW5kcy5oIgo+IC0jaW5jbHVkZSAiZ2VtL2k5MTVfZ2VtX2xt ZW0uaCIKPiAtCj4gLSNpbmNsdWRlICJzZWxmdGVzdHMvaWd0X2ZsdXNoX3Rlc3QuaCIKPiAtI2lu Y2x1ZGUgInNlbGZ0ZXN0cy9tb2NrX2RybS5oIgo+IC0jaW5jbHVkZSAic2VsZnRlc3RzL2k5MTVf cmFuZG9tLmgiCj4gLSNpbmNsdWRlICJodWdlX2dlbV9vYmplY3QuaCIKPiAtI2luY2x1ZGUgIm1v Y2tfY29udGV4dC5oIgo+IC0KPiAtc3RhdGljIGludCBfX2lndF9jbGllbnRfZmlsbChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpj ZSA9IGVuZ2luZS0+a2VybmVsX2NvbnRleHQ7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqOwo+IC0JSTkxNV9STkRfU1RBVEUocHJuZyk7Cj4gLQlJR1RfVElNRU9VVChlbmQpOwo+ IC0JdTMyICp2YWRkcjsKPiAtCWludCBlcnIgPSAwOwo+IC0KPiAtCWludGVsX2VuZ2luZV9wbV9n ZXQoZW5naW5lKTsKPiAtCWRvIHsKPiAtCQljb25zdCB1MzIgbWF4X2Jsb2NrX3NpemUgPSBTMTZf TUFYICogUEFHRV9TSVpFOwo+IC0JCXUzMiBzeiA9IG1pbl90KHU2NCwgY2UtPnZtLT50b3RhbCA+ PiA0LCBwcmFuZG9tX3UzMl9zdGF0ZSgmcHJuZykpOwo+IC0JCXUzMiBwaHlzX3N6ID0gc3ogJSAo bWF4X2Jsb2NrX3NpemUgKyAxKTsKPiAtCQl1MzIgdmFsID0gcHJhbmRvbV91MzJfc3RhdGUoJnBy bmcpOwo+IC0JCXUzMiBpOwo+IC0KPiAtCQlzeiA9IHJvdW5kX3VwKHN6LCBQQUdFX1NJWkUpOwo+ IC0JCXBoeXNfc3ogPSByb3VuZF91cChwaHlzX3N6LCBQQUdFX1NJWkUpOwo+IC0KPiAtCQlwcl9k ZWJ1ZygiJXMgd2l0aCBwaHlzX3N6PSAleCwgc3o9JXgsIHZhbD0leFxuIiwgX19mdW5jX18sCj4g LQkJCSBwaHlzX3N6LCBzeiwgdmFsKTsKPiAtCj4gLQkJb2JqID0gaHVnZV9nZW1fb2JqZWN0KGVu Z2luZS0+aTkxNSwgcGh5c19zeiwgc3opOwo+IC0JCWlmIChJU19FUlIob2JqKSkgewo+IC0JCQll cnIgPSBQVFJfRVJSKG9iaik7Cj4gLQkJCWdvdG8gZXJyX2ZsdXNoOwo+IC0JCX0KPiAtCj4gLQkJ dmFkZHIgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcF91bmxvY2tlZChvYmosIEk5MTVfTUFQX1dC KTsKPiAtCQlpZiAoSVNfRVJSKHZhZGRyKSkgewo+IC0JCQllcnIgPSBQVFJfRVJSKHZhZGRyKTsK PiAtCQkJZ290byBlcnJfcHV0Owo+IC0JCX0KPiAtCj4gLQkJLyoKPiAtCQkgKiBYWFg6IFRoZSBn b2FsIGlzIG1vdmUgdGhpcyB0byBnZXRfcGFnZXMsIHNvIHRyeSB0byBkaXJ0eSB0aGUKPiAtCQkg KiBDUFUgY2FjaGUgZmlyc3QgdG8gY2hlY2sgdGhhdCB3ZSBkbyB0aGUgcmVxdWlyZWQgY2xmbHVz aAo+IC0JCSAqIGJlZm9yZSBzY2hlZHVsaW5nIHRoZSBibHQgZm9yICFsbGMgcGxhdGZvcm1zLiBU aGlzIG1hdGNoZXMKPiAtCQkgKiBzb21lIHZlcnNpb24gb2YgcmVhbGl0eSB3aGVyZSBhdCBnZXRf cGFnZXMgdGhlIHBhZ2VzCj4gLQkJICogdGhlbXNlbHZlcyBtYXkgbm90IHlldCBiZSBjb2hlcmVu dCB3aXRoIHRoZSBHUFUoc3dhcC1pbikuIElmCj4gLQkJICogd2UgYXJlIG1pc3NpbmcgdGhlIGZs dXNoIHRoZW4gd2Ugc2hvdWxkIHNlZSB0aGUgc3RhbGUgY2FjaGUKPiAtCQkgKiB2YWx1ZXMgYWZ0 ZXIgd2UgZG8gdGhlIHNldF90b19jcHVfZG9tYWluIGFuZCBwaWNrIGl0IHVwIGFzIGEKPiAtCQkg KiB0ZXN0IGZhaWx1cmUuCj4gLQkJICovCj4gLQkJbWVtc2V0MzIodmFkZHIsIHZhbCBeIDB4ZGVh ZGJlYWYsCj4gLQkJCSBodWdlX2dlbV9vYmplY3RfcGh5c19zaXplKG9iaikgLyBzaXplb2YodTMy KSk7Cj4gLQo+IC0JCWlmICghKG9iai0+Y2FjaGVfY29oZXJlbnQgJiBJOTE1X0JPX0NBQ0hFX0NP SEVSRU5UX0ZPUl9XUklURSkpCj4gLQkJCW9iai0+Y2FjaGVfZGlydHkgPSB0cnVlOwo+IC0KPiAt CQllcnIgPSBpOTE1X2dlbV9zY2hlZHVsZV9maWxsX3BhZ2VzX2JsdChvYmosIGNlLCBvYmotPm1t LnBhZ2VzLAo+IC0JCQkJCQkgICAgICAgJm9iai0+bW0ucGFnZV9zaXplcywKPiAtCQkJCQkJICAg ICAgIHZhbCk7Cj4gLQkJaWYgKGVycikKPiAtCQkJZ290byBlcnJfdW5waW47Cj4gLQo+IC0JCWk5 MTVfZ2VtX29iamVjdF9sb2NrKG9iaiwgTlVMTCk7Cj4gLQkJZXJyID0gaTkxNV9nZW1fb2JqZWN0 X3NldF90b19jcHVfZG9tYWluKG9iaiwgZmFsc2UpOwo+IC0JCWk5MTVfZ2VtX29iamVjdF91bmxv Y2sob2JqKTsKPiAtCQlpZiAoZXJyKQo+IC0JCQlnb3RvIGVycl91bnBpbjsKPiAtCj4gLQkJZm9y IChpID0gMDsgaSA8IGh1Z2VfZ2VtX29iamVjdF9waHlzX3NpemUob2JqKSAvIHNpemVvZih1MzIp OyArK2kpIHsKPiAtCQkJaWYgKHZhZGRyW2ldICE9IHZhbCkgewo+IC0JCQkJcHJfZXJyKCJ2YWRk clsldV09JXgsIGV4cGVjdGVkPSV4XG4iLCBpLAo+IC0JCQkJICAgICAgIHZhZGRyW2ldLCB2YWwp Owo+IC0JCQkJZXJyID0gLUVJTlZBTDsKPiAtCQkJCWdvdG8gZXJyX3VucGluOwo+IC0JCQl9Cj4g LQkJfQo+IC0KPiAtCQlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKG9iaik7Cj4gLQkJaTkxNV9n ZW1fb2JqZWN0X3B1dChvYmopOwo+IC0JfSB3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgZW5k KSk7Cj4gLQo+IC0JZ290byBlcnJfZmx1c2g7Cj4gLQo+IC1lcnJfdW5waW46Cj4gLQlpOTE1X2dl bV9vYmplY3RfdW5waW5fbWFwKG9iaik7Cj4gLWVycl9wdXQ6Cj4gLQlpOTE1X2dlbV9vYmplY3Rf cHV0KG9iaik7Cj4gLWVycl9mbHVzaDoKPiAtCWlmIChlcnIgPT0gLUVOT01FTSkKPiAtCQllcnIg PSAwOwo+IC0JaW50ZWxfZW5naW5lX3BtX3B1dChlbmdpbmUpOwo+IC0KPiAtCXJldHVybiBlcnI7 Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgaWd0X2NsaWVudF9maWxsKHZvaWQgKmFyZykKPiAtewo+ IC0JaW50IGluc3QgPSAwOwo+IC0KPiAtCWRvIHsKPiAtCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmU7Cj4gLQkJaW50IGVycjsKPiAtCj4gLQkJZW5naW5lID0gaW50ZWxfZW5naW5lX2xv b2t1cF91c2VyKGFyZywKPiAtCQkJCQkJICBJOTE1X0VOR0lORV9DTEFTU19DT1BZLAo+IC0JCQkJ CQkgIGluc3QrKyk7Cj4gLQkJaWYgKCFlbmdpbmUpCj4gLQkJCXJldHVybiAwOwo+IC0KPiAtCQll cnIgPSBfX2lndF9jbGllbnRfZmlsbChlbmdpbmUpOwo+IC0JCWlmIChlcnIgPT0gLUVOT01FTSkK PiAtCQkJZXJyID0gMDsKPiAtCQlpZiAoZXJyKQo+IC0JCQlyZXR1cm4gZXJyOwo+IC0JfSB3aGls ZSAoMSk7Cj4gLX0KPiAtCj4gLSNkZWZpbmUgV0lEVEggNTEyCj4gLSNkZWZpbmUgSEVJR0hUIDMy Cj4gLQo+IC1zdHJ1Y3QgYmxpdF9idWZmZXIgewo+IC0Jc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4g LQl1MzIgc3RhcnRfdmFsOwo+IC0JdTMyIHRpbGluZzsKPiAtfTsKPiAtCj4gLXN0cnVjdCB0aWxl ZF9ibGl0cyB7Cj4gLQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7Cj4gLQlzdHJ1Y3QgYmxpdF9i dWZmZXIgYnVmZmVyc1szXTsKPiAtCXN0cnVjdCBibGl0X2J1ZmZlciBzY3JhdGNoOwo+IC0Jc3Ry dWN0IGk5MTVfdm1hICpiYXRjaDsKPiAtCXU2NCBob2xlOwo+IC0JdTMyIHdpZHRoOwo+IC0JdTMy IGhlaWdodDsKPiAtfTsKPiAtCj4gLXN0YXRpYyBpbnQgcHJlcGFyZV9ibGl0KGNvbnN0IHN0cnVj dCB0aWxlZF9ibGl0cyAqdCwKPiAtCQkJc3RydWN0IGJsaXRfYnVmZmVyICpkc3QsCj4gLQkJCXN0 cnVjdCBibGl0X2J1ZmZlciAqc3JjLAo+IC0JCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq YmF0Y2gpCj4gLXsKPiAtCWNvbnN0IGludCB2ZXIgPSBHUkFQSElDU19WRVIodG9faTkxNShiYXRj aC0+YmFzZS5kZXYpKTsKPiAtCWJvb2wgdXNlXzY0Yl9yZWxvYyA9IHZlciA+PSA4Owo+IC0JdTMy IHNyY19waXRjaCwgZHN0X3BpdGNoOwo+IC0JdTMyIGNtZCwgKmNzOwo+IC0KPiAtCWNzID0gaTkx NV9nZW1fb2JqZWN0X3Bpbl9tYXBfdW5sb2NrZWQoYmF0Y2gsIEk5MTVfTUFQX1dDKTsKPiAtCWlm IChJU19FUlIoY3MpKQo+IC0JCXJldHVybiBQVFJfRVJSKGNzKTsKPiAtCj4gLQkqY3MrKyA9IE1J X0xPQURfUkVHSVNURVJfSU1NKDEpOwo+IC0JKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldChC Q1NfU1dDVFJMKTsKPiAtCWNtZCA9IChCQ1NfU1JDX1kgfCBCQ1NfRFNUX1kpIDw8IDE2Owo+IC0J aWYgKHNyYy0+dGlsaW5nID09IEk5MTVfVElMSU5HX1kpCj4gLQkJY21kIHw9IEJDU19TUkNfWTsK PiAtCWlmIChkc3QtPnRpbGluZyA9PSBJOTE1X1RJTElOR19ZKQo+IC0JCWNtZCB8PSBCQ1NfRFNU X1k7Cj4gLQkqY3MrKyA9IGNtZDsKPiAtCj4gLQljbWQgPSBNSV9GTFVTSF9EVzsKPiAtCWlmICh2 ZXIgPj0gOCkKPiAtCQljbWQrKzsKPiAtCSpjcysrID0gY21kOwo+IC0JKmNzKysgPSAwOwo+IC0J KmNzKysgPSAwOwo+IC0JKmNzKysgPSAwOwo+IC0KPiAtCWNtZCA9IFhZX1NSQ19DT1BZX0JMVF9D TUQgfCBCTFRfV1JJVEVfUkdCQSB8ICg4IC0gMik7Cj4gLQlpZiAodmVyID49IDgpCj4gLQkJY21k ICs9IDI7Cj4gLQo+IC0Jc3JjX3BpdGNoID0gdC0+d2lkdGggKiA0Owo+IC0JaWYgKHNyYy0+dGls aW5nKSB7Cj4gLQkJY21kIHw9IFhZX1NSQ19DT1BZX0JMVF9TUkNfVElMRUQ7Cj4gLQkJc3JjX3Bp dGNoIC89IDQ7Cj4gLQl9Cj4gLQo+IC0JZHN0X3BpdGNoID0gdC0+d2lkdGggKiA0Owo+IC0JaWYg KGRzdC0+dGlsaW5nKSB7Cj4gLQkJY21kIHw9IFhZX1NSQ19DT1BZX0JMVF9EU1RfVElMRUQ7Cj4g LQkJZHN0X3BpdGNoIC89IDQ7Cj4gLQl9Cj4gLQo+IC0JKmNzKysgPSBjbWQ7Cj4gLQkqY3MrKyA9 IEJMVF9ERVBUSF8zMiB8IEJMVF9ST1BfU1JDX0NPUFkgfCBkc3RfcGl0Y2g7Cj4gLQkqY3MrKyA9 IDA7Cj4gLQkqY3MrKyA9IHQtPmhlaWdodCA8PCAxNiB8IHQtPndpZHRoOwo+IC0JKmNzKysgPSBs b3dlcl8zMl9iaXRzKGRzdC0+dm1hLT5ub2RlLnN0YXJ0KTsKPiAtCWlmICh1c2VfNjRiX3JlbG9j KQo+IC0JCSpjcysrID0gdXBwZXJfMzJfYml0cyhkc3QtPnZtYS0+bm9kZS5zdGFydCk7Cj4gLQkq Y3MrKyA9IDA7Cj4gLQkqY3MrKyA9IHNyY19waXRjaDsKPiAtCSpjcysrID0gbG93ZXJfMzJfYml0 cyhzcmMtPnZtYS0+bm9kZS5zdGFydCk7Cj4gLQlpZiAodXNlXzY0Yl9yZWxvYykKPiAtCQkqY3Mr KyA9IHVwcGVyXzMyX2JpdHMoc3JjLT52bWEtPm5vZGUuc3RhcnQpOwo+IC0KPiAtCSpjcysrID0g TUlfQkFUQ0hfQlVGRkVSX0VORDsKPiAtCj4gLQlpOTE1X2dlbV9vYmplY3RfZmx1c2hfbWFwKGJh dGNoKTsKPiAtCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoYmF0Y2gpOwo+IC0KPiAtCXJldHVy biAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCB0aWxlZF9ibGl0c19kZXN0cm95X2J1ZmZlcnMo c3RydWN0IHRpbGVkX2JsaXRzICp0KQo+IC17Cj4gLQlpbnQgaTsKPiAtCj4gLQlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRSh0LT5idWZmZXJzKTsgaSsrKQo+IC0JCWk5MTVfdm1hX3B1dCh0LT5i dWZmZXJzW2ldLnZtYSk7Cj4gLQo+IC0JaTkxNV92bWFfcHV0KHQtPnNjcmF0Y2gudm1hKTsKPiAt CWk5MTVfdm1hX3B1dCh0LT5iYXRjaCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgaTkxNV92 bWEgKgo+IC1fX2NyZWF0ZV92bWEoc3RydWN0IHRpbGVkX2JsaXRzICp0LCBzaXplX3Qgc2l6ZSwg Ym9vbCBsbWVtKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHQtPmNl LT52bS0+aTkxNTsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gLQlzdHJ1 Y3QgaTkxNV92bWEgKnZtYTsKPiAtCj4gLQlpZiAobG1lbSkKPiAtCQlvYmogPSBpOTE1X2dlbV9v YmplY3RfY3JlYXRlX2xtZW0oaTkxNSwgc2l6ZSwgMCk7Cj4gLQllbHNlCj4gLQkJb2JqID0gaTkx NV9nZW1fb2JqZWN0X2NyZWF0ZV9zaG1lbShpOTE1LCBzaXplKTsKPiAtCWlmIChJU19FUlIob2Jq KSkKPiAtCQlyZXR1cm4gRVJSX0NBU1Qob2JqKTsKPiAtCj4gLQl2bWEgPSBpOTE1X3ZtYV9pbnN0 YW5jZShvYmosIHQtPmNlLT52bSwgTlVMTCk7Cj4gLQlpZiAoSVNfRVJSKHZtYSkpCj4gLQkJaTkx NV9nZW1fb2JqZWN0X3B1dChvYmopOwo+IC0KPiAtCXJldHVybiB2bWE7Cj4gLX0KPiAtCj4gLXN0 YXRpYyBzdHJ1Y3QgaTkxNV92bWEgKmNyZWF0ZV92bWEoc3RydWN0IHRpbGVkX2JsaXRzICp0LCBi b29sIGxtZW0pCj4gLXsKPiAtCXJldHVybiBfX2NyZWF0ZV92bWEodCwgUEFHRV9BTElHTih0LT53 aWR0aCAqIHQtPmhlaWdodCAqIDQpLCBsbWVtKTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCB0aWxl ZF9ibGl0c19jcmVhdGVfYnVmZmVycyhzdHJ1Y3QgdGlsZWRfYmxpdHMgKnQsCj4gLQkJCQkgICAg ICBpbnQgd2lkdGgsIGludCBoZWlnaHQsCj4gLQkJCQkgICAgICBzdHJ1Y3Qgcm5kX3N0YXRlICpw cm5nKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHQtPmNlLT5lbmdp bmUtPmk5MTU7Cj4gLQlpbnQgaTsKPiAtCj4gLQl0LT53aWR0aCA9IHdpZHRoOwo+IC0JdC0+aGVp Z2h0ID0gaGVpZ2h0Owo+IC0KPiAtCXQtPmJhdGNoID0gX19jcmVhdGVfdm1hKHQsIFBBR0VfU0la RSwgZmFsc2UpOwo+IC0JaWYgKElTX0VSUih0LT5iYXRjaCkpCj4gLQkJcmV0dXJuIFBUUl9FUlIo dC0+YmF0Y2gpOwo+IC0KPiAtCXQtPnNjcmF0Y2gudm1hID0gY3JlYXRlX3ZtYSh0LCBmYWxzZSk7 Cj4gLQlpZiAoSVNfRVJSKHQtPnNjcmF0Y2gudm1hKSkgewo+IC0JCWk5MTVfdm1hX3B1dCh0LT5i YXRjaCk7Cj4gLQkJcmV0dXJuIFBUUl9FUlIodC0+c2NyYXRjaC52bWEpOwo+IC0JfQo+IC0KPiAt CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHQtPmJ1ZmZlcnMpOyBpKyspIHsKPiAtCQlzdHJ1 Y3QgaTkxNV92bWEgKnZtYTsKPiAtCj4gLQkJdm1hID0gY3JlYXRlX3ZtYSh0LCBIQVNfTE1FTShp OTE1KSAmJiBpICUgMik7Cj4gLQkJaWYgKElTX0VSUih2bWEpKSB7Cj4gLQkJCXRpbGVkX2JsaXRz X2Rlc3Ryb3lfYnVmZmVycyh0KTsKPiAtCQkJcmV0dXJuIFBUUl9FUlIodm1hKTsKPiAtCQl9Cj4g LQo+IC0JCXQtPmJ1ZmZlcnNbaV0udm1hID0gdm1hOwo+IC0JCXQtPmJ1ZmZlcnNbaV0udGlsaW5n ID0KPiAtCQkJaTkxNV9wcmFuZG9tX3UzMl9tYXhfc3RhdGUoSTkxNV9USUxJTkdfWSArIDEsIHBy bmcpOwo+IC0JfQo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBmaWxs X3NjcmF0Y2goc3RydWN0IHRpbGVkX2JsaXRzICp0LCB1MzIgKnZhZGRyLCB1MzIgdmFsKQo+IC17 Cj4gLQlpbnQgaTsKPiAtCj4gLQl0LT5zY3JhdGNoLnN0YXJ0X3ZhbCA9IHZhbDsKPiAtCWZvciAo aSA9IDA7IGkgPCB0LT53aWR0aCAqIHQtPmhlaWdodDsgaSsrKQo+IC0JCXZhZGRyW2ldID0gdmFs Kys7Cj4gLQo+IC0JaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX21hcCh0LT5zY3JhdGNoLnZtYS0+b2Jq KTsKPiAtfQo+IC0KPiAtc3RhdGljIHU2NCBzd2l6emxlX2JpdCh1bnNpZ25lZCBpbnQgYml0LCB1 NjQgb2Zmc2V0KQo+IC17Cj4gLQlyZXR1cm4gKG9mZnNldCAmIEJJVF9VTEwoYml0KSkgPj4gKGJp dCAtIDYpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdTY0IHRpbGVkX29mZnNldChjb25zdCBzdHJ1Y3Qg aW50ZWxfZ3QgKmd0LAo+IC0JCQl1NjQgdiwKPiAtCQkJdW5zaWduZWQgaW50IHN0cmlkZSwKPiAt CQkJdW5zaWduZWQgaW50IHRpbGluZykKPiAtewo+IC0JdW5zaWduZWQgaW50IHN3aXp6bGU7Cj4g LQl1NjQgeCwgeTsKPiAtCj4gLQlpZiAodGlsaW5nID09IEk5MTVfVElMSU5HX05PTkUpCj4gLQkJ cmV0dXJuIHY7Cj4gLQo+IC0JeSA9IGRpdjY0X3U2NF9yZW0odiwgc3RyaWRlLCAmeCk7Cj4gLQo+ IC0JaWYgKHRpbGluZyA9PSBJOTE1X1RJTElOR19YKSB7Cj4gLQkJdiA9IGRpdjY0X3U2NF9yZW0o eSwgOCwgJnkpICogc3RyaWRlICogODsKPiAtCQl2ICs9IHkgKiA1MTI7Cj4gLQkJdiArPSBkaXY2 NF91NjRfcmVtKHgsIDUxMiwgJngpIDw8IDEyOwo+IC0JCXYgKz0geDsKPiAtCj4gLQkJc3dpenps ZSA9IGd0LT5nZ3R0LT5iaXRfNl9zd2l6emxlX3g7Cj4gLQl9IGVsc2Ugewo+IC0JCWNvbnN0IHVu c2lnbmVkIGludCB5dGlsZV9zcGFuID0gMTY7Cj4gLQkJY29uc3QgdW5zaWduZWQgaW50IHl0aWxl X2hlaWdodCA9IDUxMjsKPiAtCj4gLQkJdiA9IGRpdjY0X3U2NF9yZW0oeSwgMzIsICZ5KSAqIHN0 cmlkZSAqIDMyOwo+IC0JCXYgKz0geSAqIHl0aWxlX3NwYW47Cj4gLQkJdiArPSBkaXY2NF91NjRf cmVtKHgsIHl0aWxlX3NwYW4sICZ4KSAqIHl0aWxlX2hlaWdodDsKPiAtCQl2ICs9IHg7Cj4gLQo+ IC0JCXN3aXp6bGUgPSBndC0+Z2d0dC0+Yml0XzZfc3dpenpsZV95Owo+IC0JfQo+IC0KPiAtCXN3 aXRjaCAoc3dpenpsZSkgewo+IC0JY2FzZSBJOTE1X0JJVF82X1NXSVpaTEVfOToKPiAtCQl2IF49 IHN3aXp6bGVfYml0KDksIHYpOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBJOTE1X0JJVF82X1NXSVpa TEVfOV8xMDoKPiAtCQl2IF49IHN3aXp6bGVfYml0KDksIHYpIF4gc3dpenpsZV9iaXQoMTAsIHYp Owo+IC0JCWJyZWFrOwo+IC0JY2FzZSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMToKPiAtCQl2IF49 IHN3aXp6bGVfYml0KDksIHYpIF4gc3dpenpsZV9iaXQoMTEsIHYpOwo+IC0JCWJyZWFrOwo+IC0J Y2FzZSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMF8xMToKPiAtCQl2IF49IHN3aXp6bGVfYml0KDks IHYpIF4gc3dpenpsZV9iaXQoMTAsIHYpIF4gc3dpenpsZV9iaXQoMTEsIHYpOwo+IC0JCWJyZWFr Owo+IC0JfQo+IC0KPiAtCXJldHVybiB2Owo+IC19Cj4gLQo+IC1zdGF0aWMgY29uc3QgY2hhciAq cmVwcl90aWxpbmcoaW50IHRpbGluZykKPiAtewo+IC0Jc3dpdGNoICh0aWxpbmcpIHsKPiAtCWNh c2UgSTkxNV9USUxJTkdfTk9ORTogcmV0dXJuICJsaW5lYXIiOwo+IC0JY2FzZSBJOTE1X1RJTElO R19YOiByZXR1cm4gIlgiOwo+IC0JY2FzZSBJOTE1X1RJTElOR19ZOiByZXR1cm4gIlkiOwo+IC0J ZGVmYXVsdDogcmV0dXJuICJ1bmtub3duIjsKPiAtCX0KPiAtfQo+IC0KPiAtc3RhdGljIGludCB2 ZXJpZnlfYnVmZmVyKGNvbnN0IHN0cnVjdCB0aWxlZF9ibGl0cyAqdCwKPiAtCQkJIHN0cnVjdCBi bGl0X2J1ZmZlciAqYnVmLAo+IC0JCQkgc3RydWN0IHJuZF9zdGF0ZSAqcHJuZykKPiAtewo+IC0J Y29uc3QgdTMyICp2YWRkcjsKPiAtCWludCByZXQgPSAwOwo+IC0JaW50IHgsIHksIHA7Cj4gLQo+ IC0JeCA9IGk5MTVfcHJhbmRvbV91MzJfbWF4X3N0YXRlKHQtPndpZHRoLCBwcm5nKTsKPiAtCXkg PSBpOTE1X3ByYW5kb21fdTMyX21heF9zdGF0ZSh0LT5oZWlnaHQsIHBybmcpOwo+IC0JcCA9IHkg KiB0LT53aWR0aCArIHg7Cj4gLQo+IC0JdmFkZHIgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcF91 bmxvY2tlZChidWYtPnZtYS0+b2JqLCBJOTE1X01BUF9XQyk7Cj4gLQlpZiAoSVNfRVJSKHZhZGRy KSkKPiAtCQlyZXR1cm4gUFRSX0VSUih2YWRkcik7Cj4gLQo+IC0JaWYgKHZhZGRyWzBdICE9IGJ1 Zi0+c3RhcnRfdmFsKSB7Cj4gLQkJcmV0ID0gLUVJTlZBTDsKPiAtCX0gZWxzZSB7Cj4gLQkJdTY0 IHYgPSB0aWxlZF9vZmZzZXQoYnVmLT52bWEtPnZtLT5ndCwKPiAtCQkJCSAgICAgcCAqIDQsIHQt PndpZHRoICogNCwKPiAtCQkJCSAgICAgYnVmLT50aWxpbmcpOwo+IC0KPiAtCQlpZiAodmFkZHJb diAvIHNpemVvZigqdmFkZHIpXSAhPSBidWYtPnN0YXJ0X3ZhbCArIHApCj4gLQkJCXJldCA9IC1F SU5WQUw7Cj4gLQl9Cj4gLQlpZiAocmV0KSB7Cj4gLQkJcHJfZXJyKCJJbnZhbGlkICVzIHRpbGlu ZyBkZXRlY3RlZCBhdCAoJWQsICVkKSwgc3RhcnRfdmFsICV4XG4iLAo+IC0JCSAgICAgICByZXBy X3RpbGluZyhidWYtPnRpbGluZyksCj4gLQkJICAgICAgIHgsIHksIGJ1Zi0+c3RhcnRfdmFsKTsK PiAtCQlpZ3RfaGV4ZHVtcCh2YWRkciwgNDA5Nik7Cj4gLQl9Cj4gLQo+IC0JaTkxNV9nZW1fb2Jq ZWN0X3VucGluX21hcChidWYtPnZtYS0+b2JqKTsKPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4g LXN0YXRpYyBpbnQgbW92ZV90b19hY3RpdmUoc3RydWN0IGk5MTVfdm1hICp2bWEsCj4gLQkJCSAg c3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4gLQkJCSAgdW5zaWduZWQgaW50IGZsYWdzKQo+IC17 Cj4gLQlpbnQgZXJyOwo+IC0KPiAtCWk5MTVfdm1hX2xvY2sodm1hKTsKPiAtCWVyciA9IGk5MTVf cmVxdWVzdF9hd2FpdF9vYmplY3QocnEsIHZtYS0+b2JqLCBmYWxzZSk7Cj4gLQlpZiAoZXJyID09 IDApCj4gLQkJZXJyID0gaTkxNV92bWFfbW92ZV90b19hY3RpdmUodm1hLCBycSwgZmxhZ3MpOwo+ IC0JaTkxNV92bWFfdW5sb2NrKHZtYSk7Cj4gLQo+IC0JcmV0dXJuIGVycjsKPiAtfQo+IC0KPiAt c3RhdGljIGludCBwaW5fYnVmZmVyKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCB1NjQgYWRkcikKPiAt ewo+IC0JaW50IGVycjsKPiAtCj4gLQlpZiAoZHJtX21tX25vZGVfYWxsb2NhdGVkKCZ2bWEtPm5v ZGUpICYmIHZtYS0+bm9kZS5zdGFydCAhPSBhZGRyKSB7Cj4gLQkJZXJyID0gaTkxNV92bWFfdW5i aW5kKHZtYSk7Cj4gLQkJaWYgKGVycikKPiAtCQkJcmV0dXJuIGVycjsKPiAtCX0KPiAtCj4gLQll cnIgPSBpOTE1X3ZtYV9waW4odm1hLCAwLCAwLCBQSU5fVVNFUiB8IFBJTl9PRkZTRVRfRklYRUQg fCBhZGRyKTsKPiAtCWlmIChlcnIpCj4gLQkJcmV0dXJuIGVycjsKPiAtCj4gLQlyZXR1cm4gMDsK PiAtfQo+IC0KPiAtc3RhdGljIGludAo+IC10aWxlZF9ibGl0KHN0cnVjdCB0aWxlZF9ibGl0cyAq dCwKPiAtCSAgIHN0cnVjdCBibGl0X2J1ZmZlciAqZHN0LCB1NjQgZHN0X2FkZHIsCj4gLQkgICBz dHJ1Y3QgYmxpdF9idWZmZXIgKnNyYywgdTY0IHNyY19hZGRyKQo+IC17Cj4gLQlzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpycTsKPiAtCWludCBlcnI7Cj4gLQo+IC0JZXJyID0gcGluX2J1ZmZlcihzcmMt PnZtYSwgc3JjX2FkZHIpOwo+IC0JaWYgKGVycikgewo+IC0JCXByX2VycigiQ2Fubm90IHBpbiBz cmMgQCAlbGx4XG4iLCBzcmNfYWRkcik7Cj4gLQkJcmV0dXJuIGVycjsKPiAtCX0KPiAtCj4gLQll cnIgPSBwaW5fYnVmZmVyKGRzdC0+dm1hLCBkc3RfYWRkcik7Cj4gLQlpZiAoZXJyKSB7Cj4gLQkJ cHJfZXJyKCJDYW5ub3QgcGluIGRzdCBAICVsbHhcbiIsIGRzdF9hZGRyKTsKPiAtCQlnb3RvIGVy cl9zcmM7Cj4gLQl9Cj4gLQo+IC0JZXJyID0gaTkxNV92bWFfcGluKHQtPmJhdGNoLCAwLCAwLCBQ SU5fVVNFUiB8IFBJTl9ISUdIKTsKPiAtCWlmIChlcnIpIHsKPiAtCQlwcl9lcnIoImNhbm5vdCBw aW4gYmF0Y2hcbiIpOwo+IC0JCWdvdG8gZXJyX2RzdDsKPiAtCX0KPiAtCj4gLQllcnIgPSBwcmVw YXJlX2JsaXQodCwgZHN0LCBzcmMsIHQtPmJhdGNoLT5vYmopOwo+IC0JaWYgKGVycikKPiAtCQln b3RvIGVycl9iYjsKPiAtCj4gLQlycSA9IGludGVsX2NvbnRleHRfY3JlYXRlX3JlcXVlc3QodC0+ Y2UpOwo+IC0JaWYgKElTX0VSUihycSkpIHsKPiAtCQllcnIgPSBQVFJfRVJSKHJxKTsKPiAtCQln b3RvIGVycl9iYjsKPiAtCX0KPiAtCj4gLQllcnIgPSBtb3ZlX3RvX2FjdGl2ZSh0LT5iYXRjaCwg cnEsIDApOwo+IC0JaWYgKCFlcnIpCj4gLQkJZXJyID0gbW92ZV90b19hY3RpdmUoc3JjLT52bWEs IHJxLCAwKTsKPiAtCWlmICghZXJyKQo+IC0JCWVyciA9IG1vdmVfdG9fYWN0aXZlKGRzdC0+dm1h LCBycSwgMCk7Cj4gLQlpZiAoIWVycikKPiAtCQllcnIgPSBycS0+ZW5naW5lLT5lbWl0X2JiX3N0 YXJ0KHJxLAo+IC0JCQkJCQl0LT5iYXRjaC0+bm9kZS5zdGFydCwKPiAtCQkJCQkJdC0+YmF0Y2gt Pm5vZGUuc2l6ZSwKPiAtCQkJCQkJMCk7Cj4gLQlpOTE1X3JlcXVlc3RfZ2V0KHJxKTsKPiAtCWk5 MTVfcmVxdWVzdF9hZGQocnEpOwo+IC0JaWYgKGk5MTVfcmVxdWVzdF93YWl0KHJxLCAwLCBIWiAv IDIpIDwgMCkKPiAtCQllcnIgPSAtRVRJTUU7Cj4gLQlpOTE1X3JlcXVlc3RfcHV0KHJxKTsKPiAt Cj4gLQlkc3QtPnN0YXJ0X3ZhbCA9IHNyYy0+c3RhcnRfdmFsOwo+IC1lcnJfYmI6Cj4gLQlpOTE1 X3ZtYV91bnBpbih0LT5iYXRjaCk7Cj4gLWVycl9kc3Q6Cj4gLQlpOTE1X3ZtYV91bnBpbihkc3Qt PnZtYSk7Cj4gLWVycl9zcmM6Cj4gLQlpOTE1X3ZtYV91bnBpbihzcmMtPnZtYSk7Cj4gLQlyZXR1 cm4gZXJyOwo+IC19Cj4gLQo+IC1zdGF0aWMgc3RydWN0IHRpbGVkX2JsaXRzICoKPiAtdGlsZWRf YmxpdHNfY3JlYXRlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgc3RydWN0IHJuZF9z dGF0ZSAqcHJuZykKPiAtewo+IC0Jc3RydWN0IGRybV9tbV9ub2RlIGhvbGU7Cj4gLQlzdHJ1Y3Qg dGlsZWRfYmxpdHMgKnQ7Cj4gLQl1NjQgaG9sZV9zaXplOwo+IC0JaW50IGVycjsKPiAtCj4gLQl0 ID0ga3phbGxvYyhzaXplb2YoKnQpLCBHRlBfS0VSTkVMKTsKPiAtCWlmICghdCkKPiAtCQlyZXR1 cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAtCj4gLQl0LT5jZSA9IGludGVsX2NvbnRleHRfY3JlYXRl KGVuZ2luZSk7Cj4gLQlpZiAoSVNfRVJSKHQtPmNlKSkgewo+IC0JCWVyciA9IFBUUl9FUlIodC0+ Y2UpOwo+IC0JCWdvdG8gZXJyX2ZyZWU7Cj4gLQl9Cj4gLQo+IC0JaG9sZV9zaXplID0gMiAqIFBB R0VfQUxJR04oV0lEVEggKiBIRUlHSFQgKiA0KTsKPiAtCWhvbGVfc2l6ZSAqPSAyOyAvKiByb29t IHRvIG1hbmV1dmVyICovCj4gLQlob2xlX3NpemUgKz0gMiAqIEk5MTVfR1RUX01JTl9BTElHTk1F TlQ7Cj4gLQo+IC0JbXV0ZXhfbG9jaygmdC0+Y2UtPnZtLT5tdXRleCk7Cj4gLQltZW1zZXQoJmhv bGUsIDAsIHNpemVvZihob2xlKSk7Cj4gLQllcnIgPSBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFu Z2UoJnQtPmNlLT52bS0+bW0sICZob2xlLAo+IC0JCQkJCSAgaG9sZV9zaXplLCAwLCBJOTE1X0NP TE9SX1VORVZJQ1RBQkxFLAo+IC0JCQkJCSAgMCwgVTY0X01BWCwKPiAtCQkJCQkgIERSTV9NTV9J TlNFUlRfQkVTVCk7Cj4gLQlpZiAoIWVycikKPiAtCQlkcm1fbW1fcmVtb3ZlX25vZGUoJmhvbGUp Owo+IC0JbXV0ZXhfdW5sb2NrKCZ0LT5jZS0+dm0tPm11dGV4KTsKPiAtCWlmIChlcnIpIHsKPiAt CQllcnIgPSAtRU5PREVWOwo+IC0JCWdvdG8gZXJyX3B1dDsKPiAtCX0KPiAtCj4gLQl0LT5ob2xl ID0gaG9sZS5zdGFydCArIEk5MTVfR1RUX01JTl9BTElHTk1FTlQ7Cj4gLQlwcl9pbmZvKCJVc2lu ZyBob2xlIGF0ICVsbHhcbiIsIHQtPmhvbGUpOwo+IC0KPiAtCWVyciA9IHRpbGVkX2JsaXRzX2Ny ZWF0ZV9idWZmZXJzKHQsIFdJRFRILCBIRUlHSFQsIHBybmcpOwo+IC0JaWYgKGVycikKPiAtCQln b3RvIGVycl9wdXQ7Cj4gLQo+IC0JcmV0dXJuIHQ7Cj4gLQo+IC1lcnJfcHV0Ogo+IC0JaW50ZWxf Y29udGV4dF9wdXQodC0+Y2UpOwo+IC1lcnJfZnJlZToKPiAtCWtmcmVlKHQpOwo+IC0JcmV0dXJu IEVSUl9QVFIoZXJyKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgdGlsZWRfYmxpdHNfZGVzdHJv eShzdHJ1Y3QgdGlsZWRfYmxpdHMgKnQpCj4gLXsKPiAtCXRpbGVkX2JsaXRzX2Rlc3Ryb3lfYnVm ZmVycyh0KTsKPiAtCj4gLQlpbnRlbF9jb250ZXh0X3B1dCh0LT5jZSk7Cj4gLQlrZnJlZSh0KTsK PiAtfQo+IC0KPiAtc3RhdGljIGludCB0aWxlZF9ibGl0c19wcmVwYXJlKHN0cnVjdCB0aWxlZF9i bGl0cyAqdCwKPiAtCQkJICAgICAgIHN0cnVjdCBybmRfc3RhdGUgKnBybmcpCj4gLXsKPiAtCXU2 NCBvZmZzZXQgPSBQQUdFX0FMSUdOKHQtPndpZHRoICogdC0+aGVpZ2h0ICogNCk7Cj4gLQl1MzIg Km1hcDsKPiAtCWludCBlcnI7Cj4gLQlpbnQgaTsKPiAtCj4gLQltYXAgPSBpOTE1X2dlbV9vYmpl Y3RfcGluX21hcF91bmxvY2tlZCh0LT5zY3JhdGNoLnZtYS0+b2JqLCBJOTE1X01BUF9XQyk7Cj4g LQlpZiAoSVNfRVJSKG1hcCkpCj4gLQkJcmV0dXJuIFBUUl9FUlIobWFwKTsKPiAtCj4gLQkvKiBV c2Ugc2NyYXRjaCB0byBmaWxsIG9iamVjdHMgKi8KPiAtCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKHQtPmJ1ZmZlcnMpOyBpKyspIHsKPiAtCQlmaWxsX3NjcmF0Y2godCwgbWFwLCBwcmFuZG9t X3UzMl9zdGF0ZShwcm5nKSk7Cj4gLQkJR0VNX0JVR19PTih2ZXJpZnlfYnVmZmVyKHQsICZ0LT5z Y3JhdGNoLCBwcm5nKSk7Cj4gLQo+IC0JCWVyciA9IHRpbGVkX2JsaXQodCwKPiAtCQkJCSAmdC0+ YnVmZmVyc1tpXSwgdC0+aG9sZSArIG9mZnNldCwKPiAtCQkJCSAmdC0+c2NyYXRjaCwgdC0+aG9s ZSk7Cj4gLQkJaWYgKGVyciA9PSAwKQo+IC0JCQllcnIgPSB2ZXJpZnlfYnVmZmVyKHQsICZ0LT5i dWZmZXJzW2ldLCBwcm5nKTsKPiAtCQlpZiAoZXJyKSB7Cj4gLQkJCXByX2VycigiRmFpbGVkIHRv IGNyZWF0ZSBidWZmZXIgJWRcbiIsIGkpOwo+IC0JCQlicmVhazsKPiAtCQl9Cj4gLQl9Cj4gLQo+ IC0JaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcCh0LT5zY3JhdGNoLnZtYS0+b2JqKTsKPiAtCXJl dHVybiBlcnI7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgdGlsZWRfYmxpdHNfYm91bmNlKHN0cnVj dCB0aWxlZF9ibGl0cyAqdCwgc3RydWN0IHJuZF9zdGF0ZSAqcHJuZykKPiAtewo+IC0JdTY0IG9m ZnNldCA9Cj4gLQkJcm91bmRfdXAodC0+d2lkdGggKiB0LT5oZWlnaHQgKiA0LCAyICogSTkxNV9H VFRfTUlOX0FMSUdOTUVOVCk7Cj4gLQlpbnQgZXJyOwo+IC0KPiAtCS8qIFdlIHdhbnQgdG8gY2hl Y2sgcG9zaXRpb24gaW52YXJpYW50IHRpbGluZyBhY3Jvc3MgR1RUIGV2aWN0aW9uICovCj4gLQo+ IC0JZXJyID0gdGlsZWRfYmxpdCh0LAo+IC0JCQkgJnQtPmJ1ZmZlcnNbMV0sIHQtPmhvbGUgKyBv ZmZzZXQgLyAyLAo+IC0JCQkgJnQtPmJ1ZmZlcnNbMF0sIHQtPmhvbGUgKyAyICogb2Zmc2V0KTsK PiAtCWlmIChlcnIpCj4gLQkJcmV0dXJuIGVycjsKPiAtCj4gLQkvKiBSZXBvc2l0aW9uIHNvIHRo YXQgd2Ugb3ZlcmxhcCB0aGUgb2xkIGFkZHJlc3NlcywgYW5kIHNsaWdodGx5IG9mZiAqLwo+IC0J ZXJyID0gdGlsZWRfYmxpdCh0LAo+IC0JCQkgJnQtPmJ1ZmZlcnNbMl0sIHQtPmhvbGUgKyBJOTE1 X0dUVF9NSU5fQUxJR05NRU5ULAo+IC0JCQkgJnQtPmJ1ZmZlcnNbMV0sIHQtPmhvbGUgKyAzICog b2Zmc2V0IC8gMik7Cj4gLQlpZiAoZXJyKQo+IC0JCXJldHVybiBlcnI7Cj4gLQo+IC0JZXJyID0g dmVyaWZ5X2J1ZmZlcih0LCAmdC0+YnVmZmVyc1syXSwgcHJuZyk7Cj4gLQlpZiAoZXJyKQo+IC0J CXJldHVybiBlcnI7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgX19p Z3RfY2xpZW50X3RpbGVkX2JsaXRzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAt CQkJCSAgICBzdHJ1Y3Qgcm5kX3N0YXRlICpwcm5nKQo+IC17Cj4gLQlzdHJ1Y3QgdGlsZWRfYmxp dHMgKnQ7Cj4gLQlpbnQgZXJyOwo+IC0KPiAtCXQgPSB0aWxlZF9ibGl0c19jcmVhdGUoZW5naW5l LCBwcm5nKTsKPiAtCWlmIChJU19FUlIodCkpCj4gLQkJcmV0dXJuIFBUUl9FUlIodCk7Cj4gLQo+ IC0JZXJyID0gdGlsZWRfYmxpdHNfcHJlcGFyZSh0LCBwcm5nKTsKPiAtCWlmIChlcnIpCj4gLQkJ Z290byBvdXQ7Cj4gLQo+IC0JZXJyID0gdGlsZWRfYmxpdHNfYm91bmNlKHQsIHBybmcpOwo+IC0J aWYgKGVycikKPiAtCQlnb3RvIG91dDsKPiAtCj4gLW91dDoKPiAtCXRpbGVkX2JsaXRzX2Rlc3Ry b3kodCk7Cj4gLQlyZXR1cm4gZXJyOwo+IC19Cj4gLQo+IC1zdGF0aWMgYm9vbCBoYXNfYml0MTdf c3dpenpsZShpbnQgc3cpCj4gLXsKPiAtCXJldHVybiAoc3cgPT0gSTkxNV9CSVRfNl9TV0laWkxF XzlfMTBfMTcgfHwKPiAtCQlzdyA9PSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xNyk7Cj4gLX0KPiAt Cj4gLXN0YXRpYyBib29sIGJhZF9zd2l6emxpbmcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUpCj4gLXsKPiAtCXN0cnVjdCBpOTE1X2dndHQgKmdndHQgPSAmaTkxNS0+Z2d0dDsKPiAtCj4g LQlpZiAoaTkxNS0+cXVpcmtzICYgUVVJUktfUElOX1NXSVpaTEVEX1BBR0VTKQo+IC0JCXJldHVy biB0cnVlOwo+IC0KPiAtCWlmIChoYXNfYml0MTdfc3dpenpsZShnZ3R0LT5iaXRfNl9zd2l6emxl X3gpIHx8Cj4gLQkgICAgaGFzX2JpdDE3X3N3aXp6bGUoZ2d0dC0+Yml0XzZfc3dpenpsZV95KSkK PiAtCQlyZXR1cm4gdHJ1ZTsKPiAtCj4gLQlyZXR1cm4gZmFsc2U7Cj4gLX0KPiAtCj4gLXN0YXRp YyBpbnQgaWd0X2NsaWVudF90aWxlZF9ibGl0cyh2b2lkICphcmcpCj4gLXsKPiAtCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0gYXJnOwo+IC0JSTkxNV9STkRfU1RBVEUocHJuZyk7Cj4g LQlpbnQgaW5zdCA9IDA7Cj4gLQo+IC0JLyogVGVzdCByZXF1aXJlcyBleHBsaWNpdCBCTFQgdGls aW5nIGNvbnRyb2xzICovCj4gLQlpZiAoR1JBUEhJQ1NfVkVSKGk5MTUpIDwgNCkKPiAtCQlyZXR1 cm4gMDsKPiAtCj4gLQlpZiAoYmFkX3N3aXp6bGluZyhpOTE1KSkgLyogUmVxdWlyZXMgc2FuZSAo c3ViLXBhZ2UpIHN3aXp6bGluZyAqLwo+IC0JCXJldHVybiAwOwo+IC0KPiAtCWRvIHsKPiAtCQlz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gLQkJaW50IGVycjsKPiAtCj4gLQkJZW5n aW5lID0gaW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKGk5MTUsCj4gLQkJCQkJCSAgSTkxNV9FTkdJ TkVfQ0xBU1NfQ09QWSwKPiAtCQkJCQkJICBpbnN0KyspOwo+IC0JCWlmICghZW5naW5lKQo+IC0J CQlyZXR1cm4gMDsKPiAtCj4gLQkJZXJyID0gX19pZ3RfY2xpZW50X3RpbGVkX2JsaXRzKGVuZ2lu ZSwgJnBybmcpOwo+IC0JCWlmIChlcnIgPT0gLUVOT0RFVikKPiAtCQkJZXJyID0gMDsKPiAtCQlp ZiAoZXJyKQo+IC0JCQlyZXR1cm4gZXJyOwo+IC0JfSB3aGlsZSAoMSk7Cj4gLX0KPiAtCj4gLWlu dCBpOTE1X2dlbV9jbGllbnRfYmx0X2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1KQo+IC17Cj4gLQlzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVzdCB0ZXN0 c1tdID0gewo+IC0JCVNVQlRFU1QoaWd0X2NsaWVudF9maWxsKSwKPiAtCQlTVUJURVNUKGlndF9j bGllbnRfdGlsZWRfYmxpdHMpLAo+IC0JfTsKPiAtCj4gLQlpZiAoaW50ZWxfZ3RfaXNfd2VkZ2Vk KCZpOTE1LT5ndCkpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JcmV0dXJuIGk5MTVfbGl2ZV9zdWJ0 ZXN0cyh0ZXN0cywgaTkxNSk7Cj4gLX0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2k5MTVfbGl2ZV9zZWxmdGVzdHMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmgKPiBpbmRleCBiZTVlMDE5MWVhZWEuLjZm NTg5M2VjZDU0OSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv aTkxNV9saXZlX3NlbGZ0ZXN0cy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRl c3RzL2k5MTVfbGl2ZV9zZWxmdGVzdHMuaAo+IEBAIC00MCw3ICs0MCw2IEBAIHNlbGZ0ZXN0KGh1 Z2VwYWdlcywgaTkxNV9nZW1faHVnZV9wYWdlX2xpdmVfc2VsZnRlc3RzKQo+ICAgc2VsZnRlc3Qo Z2VtX2NvbnRleHRzLCBpOTE1X2dlbV9jb250ZXh0X2xpdmVfc2VsZnRlc3RzKQo+ICAgc2VsZnRl c3QoZ2VtX2V4ZWNidWYsIGk5MTVfZ2VtX2V4ZWNidWZmZXJfbGl2ZV9zZWxmdGVzdHMpCj4gICBz ZWxmdGVzdChibHQsIGk5MTVfZ2VtX29iamVjdF9ibHRfbGl2ZV9zZWxmdGVzdHMpCj4gLXNlbGZ0 ZXN0KGNsaWVudCwgaTkxNV9nZW1fY2xpZW50X2JsdF9saXZlX3NlbGZ0ZXN0cykKPiAgIHNlbGZ0 ZXN0KHJlc2V0LCBpbnRlbF9yZXNldF9saXZlX3NlbGZ0ZXN0cykKPiAgIHNlbGZ0ZXN0KG1lbW9y eV9yZWdpb24sIGludGVsX21lbW9yeV9yZWdpb25fbGl2ZV9zZWxmdGVzdHMpCj4gICBzZWxmdGVz dChoYW5nY2hlY2ssIGludGVsX2hhbmdjaGVja19saXZlX3NlbGZ0ZXN0cykKPiAKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==