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=-11.3 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SIGNED_OFF_BY,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 0AA5AC4742C for ; Mon, 16 Nov 2020 08:04:25 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 9D5F62222E for ; Mon, 16 Nov 2020 08:04:24 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Ts2JwqCi" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9D5F62222E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=cc/8KwKWD60X9Dxv44jmxZYLBTk5ATmO9PYkf7mGb8Y=; b=Ts2JwqCiukFIBc6Kj7o8NDJKN fsKO8zbGdQb8pnBKYYlLzTxXltslTNf1jPjoHn4En0t1d9Yf5eoY4mTQVM1ampaUw1vZ6VLkO+mfp jV7JLzl8O8ZI4jc/8CNYlaHYVgO81GAaHYgPXIXnphQODATFGPR3ZYyRRbItTud8k6HPUHejDANOH fAPXew/8uTcU2z+c0DK8bNEqHKeJOLoA2gzLe6SkwZ5fucH8YGor+f+7jDTxesYRlIp0zv2l/zWvR Ss/wz2mbW+jmx6VEvTcoYCHHYjI2na1lB/7md9RALppT4jBsdnvdDERXh0QJVYHynWgxFui40kkfB kIKmU0c4A==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1keZUl-0002aO-Qc; Mon, 16 Nov 2020 08:04:15 +0000 Received: from mx2.suse.de ([195.135.220.15]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1keZUG-0002Nt-M1 for linux-nvme@lists.infradead.org; Mon, 16 Nov 2020 08:04:02 +0000 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 3D876AC2E; Mon, 16 Nov 2020 08:03:43 +0000 (UTC) Subject: Re: [PATCH v4 12/19] lpfc: vmid: Implements ELS commands for appid patch To: Muneendra , linux-block@vger.kernel.org, linux-scsi@vger.kernel.org, tj@kernel.org, linux-nvme@lists.infradead.org References: <1604895845-2587-1-git-send-email-muneendra.kumar@broadcom.com> <1604895845-2587-13-git-send-email-muneendra.kumar@broadcom.com> From: Hannes Reinecke Message-ID: <514979a5-bd74-9774-d752-246f015630a1@suse.de> Date: Mon, 16 Nov 2020 09:03:42 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.4.0 MIME-Version: 1.0 In-Reply-To: <1604895845-2587-13-git-send-email-muneendra.kumar@broadcom.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201116_030345_138860_54E136E1 X-CRM114-Status: GOOD ( 32.02 ) X-BeenThere: linux-nvme@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: pbonzini@redhat.com, jsmart2021@gmail.com, mkumar@redhat.com, emilne@redhat.com, Gaurav Srivastava Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "Linux-nvme" Errors-To: linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org T24gMTEvOS8yMCA1OjIzIEFNLCBNdW5lZW5kcmEgd3JvdGU6Cj4gRnJvbTogR2F1cmF2IFNyaXZh c3RhdmEgPGdhdXJhdi5zcml2YXN0YXZhQGJyb2FkY29tLmNvbT4KPiAKPiBUaGlzIHBhdGNoIGlt cGxlbWVudHMgRUxTIGNvbW1hbmQgbGlrZSBRRlBBIGFuZCBVVkVNIGZvciB0aGUgcHJpb3JpdHkK PiB0YWdnaW5nIGFwcGlkIHN1cHBvcnQuIE90aGVyIHN1cHBvcnRpbmcgZnVuY3Rpb25zIGFyZSBh bHNvIHBhcnQgb2YgdGhpcwo+IHBhdGNoLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEdhdXJhdiBTcml2 YXN0YXZhICA8Z2F1cmF2LnNyaXZhc3RhdmFAYnJvYWRjb20uY29tPgo+IFNpZ25lZC1vZmYtYnk6 IEphbWVzIFNtYXJ0IDxqc21hcnQyMDIxQGdtYWlsLmNvbT4KPiAKPiAtLS0KPiB2NDoKPiBObyBj aGFuZ2UKPiAKPiB2MzoKPiBObyBjaGFuZ2UKPiAKPiB2MjoKPiBQb3J0ZWQgdGhlIHBhdGNoIG9u IHRvcCBvZiA1LjEwL3Njc2ktcXVldWUKPiAtLS0KPiAgIGRyaXZlcnMvc2NzaS9scGZjL2xwZmNf ZWxzLmMgfCAzNTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KPiAgIDEgZmls ZSBjaGFuZ2VkLCAzNDkgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xw ZmNfZWxzLmMKPiBpbmRleCBmNGUyNzRlYjZjOWMuLjRmNjFkMmVkYjg5YiAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCj4gKysrIGIvZHJpdmVycy9zY3NpL2xwZmMv bHBmY19lbHMuYwo+IEBAIC0yNSw2ICsyNSw3IEBACj4gICAjaW5jbHVkZSA8bGludXgvcGNpLmg+ Cj4gICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L2ludGVycnVw dC5oPgo+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiAgIAo+ICAgI2luY2x1ZGUgPHNjc2kv c2NzaS5oPgo+ICAgI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KPiBAQCAtNTUsNiArNTYs OCBAQCBzdGF0aWMgaW50IGxwZmNfaXNzdWVfZWxzX2ZkaXNjKHN0cnVjdCBscGZjX3Zwb3J0ICp2 cG9ydCwKPiAgIAkJCQlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwgdWludDhfdCByZXRyeSk7 Cj4gICBzdGF0aWMgaW50IGxwZmNfaXNzdWVfZmFicmljX2lvY2Ioc3RydWN0IGxwZmNfaGJhICpw aGJhLAo+ICAgCQkJCSAgc3RydWN0IGxwZmNfaW9jYnEgKmlvY2IpOwo+ICtzdGF0aWMgdm9pZCBs cGZjX2NtcGxfZWxzX3V2ZW0oc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX2lvY2JxICos Cj4gKwkJCSAgICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqKTsKPiAgIAo+ICAgc3RhdGljIGludCBs cGZjX21heF9lbHNfdHJpZXMgPSAzOwo+ICAgCj4gQEAgLTMxNiwxMiArMzE5LDEyIEBAIGxwZmNf cHJlcF9lbHNfaW9jYihzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHVpbnQ4X3QgZXhwZWN0UnNw LAo+ICAgCWlmIChleHBlY3RSc3ApIHsKPiAgIAkJLyogWG1pdCBFTFMgY29tbWFuZCA8ZWxzQ21k PiB0byByZW1vdGUgTlBPUlQgPGRpZD4gKi8KPiAgIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwg S0VSTl9JTkZPLCBMT0dfRUxTLAo+IC0JCQkJICIwMTE2IFhtaXQgRUxTIGNvbW1hbmQgeCV4IHRv IHJlbW90ZSAiCj4gLQkJCQkgIk5QT1JUIHgleCBJL08gdGFnOiB4JXgsIHBvcnQgc3RhdGU6eCV4 ICIKPiAtCQkJCSAicnBpIHgleCBmY19mbGFnOngleFxuIiwKPiArCQkJCSAiMDExNiBYbWl0IEVM UyBjb21tYW5kIHgleCB0byByZW1vdGVcbiIKPiArCQkJCSAiTlBPUlQgeCV4IEkvTyB0YWc6IHgl eCwgcG9ydCBzdGF0ZTp4JXhcbiIKPiArCQkJCSAicnBpIHgleCBmY19mbGFnOngleCBubHBfZmxh Zzp4JXggdnBvcnQ6eCVwXG4iLAo+ICAgCQkJCSBlbHNjbWQsIGRpZCwgZWxzaW9jYi0+aW90YWcs Cj4gICAJCQkJIHZwb3J0LT5wb3J0X3N0YXRlLCBuZGxwLT5ubHBfcnBpLAo+IC0JCQkJIHZwb3J0 LT5mY19mbGFnKTsKPiArCQkJCSB2cG9ydC0+ZmNfZmxhZywgbmRscC0+bmxwX2ZsYWcsIHZwb3J0 KTsKPiAgIAl9IGVsc2Ugewo+ICAgCQkvKiBYbWl0IEVMUyByZXNwb25zZSA8ZWxzQ21kPiB0byBy ZW1vdGUgTlBPUlQgPGRpZD4gKi8KPiAgIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9J TkZPLCBMT0dfRUxTLAo+IEBAIC0xMTE2LDEyICsxMTE5LDE2IEBAIGxwZmNfY21wbF9lbHNfZmxv Z2koc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKPiAg IAo+ICAgCS8qIEZMT0dJIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkgKi8KPiAgIAlscGZjX3ByaW50 Zl92bG9nKHZwb3J0LCBLRVJOX0lORk8sIExPR19FTFMsCj4gLQkJCSAiMDEwMSBGTE9HSSBjb21w bGV0ZXMgc3VjY2Vzc2Z1bGx5LCBJL08gdGFnOngleCwgIgo+IC0JCQkgInhyaSB4JXggRGF0YTog eCV4IHgleCB4JXggeCV4IHgleCAleFxuIiwKPiArCQkJICIwMTAxIEZMT0dJIGNvbXBsZXRlcyBz dWNjZXNzZnVsbHksIEkvTyB0YWc6eCV4LFxuIgo+ICsJCQkgInhyaSB4JXggRGF0YTogeCV4IHgl eCB4JXggeCV4IHgleCAleCAleFxuIiwKPiAgIAkJCSBjbWRpb2NiLT5pb3RhZywgY21kaW9jYi0+ c2xpNF94cml0YWcsCj4gICAJCQkgaXJzcC0+dW4udWxwV29yZFs0XSwgc3AtPmNtbi5lX2RfdG92 LAo+ICAgCQkJIHNwLT5jbW4udzIucl9hX3Rvdiwgc3AtPmNtbi5lZHRvdlJlc29sdXRpb24sCj4g LQkJCSB2cG9ydC0+cG9ydF9zdGF0ZSwgdnBvcnQtPmZjX2ZsYWcpOwo+ICsJCQkgdnBvcnQtPnBv cnRfc3RhdGUsIHZwb3J0LT5mY19mbGFnLAo+ICsJCQkgc3AtPmNtbi5wcmlvcml0eV90YWdnaW5n KTsKPiArCj4gKwlpZiAoc3AtPmNtbi5wcmlvcml0eV90YWdnaW5nKQo+ICsJCXZwb3J0LT52bWlk X2ZsYWcgfD0gTFBGQ19WTUlEX0lTU1VFX1FGUEE7Cj4gICAKPiAgIAlpZiAodnBvcnQtPnBvcnRf c3RhdGUgPT0gTFBGQ19GTE9HSSkgewo+ICAgCQkvKgo+IEBAIC0xMzAyLDYgKzEzMDksMTggQEAg bHBmY19pc3N1ZV9lbHNfZmxvZ2koc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBm Y19ub2RlbGlzdCAqbmRscCwKPiAgIAlpZiAoc3AtPmNtbi5mY3BoSGlnaCA8IEZDX1BIMykKPiAg IAkJc3AtPmNtbi5mY3BoSGlnaCA9IEZDX1BIMzsKPiAgIAo+ICsJLyogdG8gZGV0ZXJpbmUgaWYg c3dpdGNoIHN1cHBvcnRzIHByaW9yaXR5IHRhZ2dpbmcgKi8KPiArCWlmIChwaGJhLT5jZmdfdm1p ZF9wcmlvcml0eV90YWdnaW5nKSB7Cj4gKwkJc3AtPmNtbi5wcmlvcml0eV90YWdnaW5nID0gMTsK PiArCQkvKiBscGZjX3ZtaWRfaG9zdF91dWlkIGlzIGNvbWJpbmF0aW9uIG9mIHd3cG4gYW5kIHd3 bm4gKi8KPiArCQlpZiAodnBvcnQtPmxwZmNfdm1pZF9ob3N0X3V1aWRbMF0gPT0gMCkgewoKVGhp cyBpcyBhIHdlaXJkIGNoZWNrLiBXaHkgY2FuJ3QgdGhlIGZpcnN0IGJ5dGUgYmUgJzAnPwpXb3Vs ZG4ndCBhIG1lbWNtcCgpIChvciwgYmV0dGVyLCBhICd1dWlkX2lzX251bGwnKSBjaGVjayBiZSBi ZXR0ZXIgaGVyZT8KCj4gKwkJCW1lbWNweSh2cG9ydC0+bHBmY192bWlkX2hvc3RfdXVpZCwgcGhi YS0+d3dwbiwKPiArCQkJICAgICAgIHNpemVvZihwaGJhLT53d3BuKSk7Cj4gKwkJCW1lbWNweSgm dnBvcnQtPmxwZmNfdm1pZF9ob3N0X3V1aWRbOF0sIHBoYmEtPnd3bm4sCj4gKwkJCSAgICAgICBz aXplb2YocGhiYS0+d3dubikpOwo+ICsJCX0KPiArCX0KPiArCj4gICAJaWYgIChwaGJhLT5zbGlf cmV2ID09IExQRkNfU0xJX1JFVjQpIHsKPiAgIAkJaWYgKGJmX2dldChscGZjX3NsaV9pbnRmX2lm X3R5cGUsICZwaGJhLT5zbGk0X2hiYS5zbGlfaW50ZikgPT0KPiAgIAkJICAgIExQRkNfU0xJX0lO VEZfSUZfVFlQRV8wKSB7Cj4gQEAgLTE5OTksNiArMjAxOCw3IEBAIGxwZmNfY21wbF9lbHNfcGxv Z2koc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKPiAg IAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKPiAgIAlzdHJ1Y3QgbHBmY19kbWFidWYgKnBy c3A7Cj4gICAJaW50IGRpc2M7Cj4gKwlzdHJ1Y3Qgc2Vydl9wYXJtICpzcCA9IE5VTEw7Cj4gICAK PiAgIAkvKiB3ZSBwYXNzIGNtZGlvY2IgdG8gc3RhdGUgbWFjaGluZSB3aGljaCBuZWVkcyByc3Bp b2NiIGFzIHdlbGwgKi8KPiAgIAljbWRpb2NiLT5jb250ZXh0X3VuLnJzcF9pb2NiID0gcnNwaW9j YjsKPiBAQCAtMjA3NCw2ICsyMDk0LDIzIEBAIGxwZmNfY21wbF9lbHNfcGxvZ2koc3RydWN0IGxw ZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKPiAgIAkJCQkgICBjbWRp b2NiLT5jb250ZXh0MiktPmxpc3QubmV4dCwKPiAgIAkJCQkgIHN0cnVjdCBscGZjX2RtYWJ1Ziwg bGlzdCk7Cj4gICAJCW5kbHAgPSBscGZjX3Bsb2dpX2NvbmZpcm1fbnBvcnQocGhiYSwgcHJzcC0+ dmlydCwgbmRscCk7Cj4gKwo+ICsJCXNwID0gKHN0cnVjdCBzZXJ2X3Bhcm0gKikoKHU4ICopcHJz cC0+dmlydCArCj4gKwkJCQkJICBzaXplb2YodTMyKSk7Cj4gKwo+ICsJCW5kbHAtPnZtaWRfc3Vw cG9ydCA9IDA7Cj4gKwkJaWYgKChwaGJhLT5jZmdfdm1pZF9hcHBfaGVhZGVyICYmIHNwLT5jbW4u YXBwX2hkcl9zdXBwb3J0KSB8fAo+ICsJCSAgICAocGhiYS0+Y2ZnX3ZtaWRfcHJpb3JpdHlfdGFn Z2luZyAmJgo+ICsJCSAgICAgc3AtPmNtbi5wcmlvcml0eV90YWdnaW5nKSkgewo+ICsJCQlscGZj X3ByaW50Zl9sb2cocGhiYSwgS0VSTl9ERUJVRywgTE9HX0VMUywKPiArCQkJCQkiNDAxOCBhcHBf aGRyX3N1cHBvcnQgJWQgdGFnZ2luZyAlZCBESUQgeCV4IiwKPiArCQkJCQlzcC0+Y21uLmFwcF9o ZHJfc3VwcG9ydCwKPiArCQkJCQlzcC0+Y21uLnByaW9yaXR5X3RhZ2dpbmcsCj4gKwkJCQkJbmRs cC0+bmxwX0RJRCk7Cj4gKwkJCS8qIGlmIHRoZSBkZXN0IHBvcnQgc3VwcG9ydHMgVk1JRCwgbWFy ayBpdCBpbiBuZGxwICovCj4gKwkJCW5kbHAtPnZtaWRfc3VwcG9ydCA9IDE7Cj4gKwkJfQo+ICsK PiAgIAkJbHBmY19kaXNjX3N0YXRlX21hY2hpbmUodnBvcnQsIG5kbHAsIGNtZGlvY2IsCj4gICAJ CQkJCSAgICAgTkxQX0VWVF9DTVBMX1BMT0dJKTsKPiAgIAl9Cj4gQEAgLTIxOTIsNiArMjIyOSwx NCBAQCBscGZjX2lzc3VlX2Vsc19wbG9naShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHVpbnQz Ml90IGRpZCwgdWludDhfdCByZXRyeSkKPiAgIAltZW1zZXQoc3AtPnVuLnZlbmRvclZlcnNpb24s IDAsIHNpemVvZihzcC0+dW4udmVuZG9yVmVyc2lvbikpOwo+ICAgCXNwLT5jbW4uYmJSY3ZTaXpl TXNiICY9IDB4RjsKPiAgIAo+ICsJLyogY2hlY2sgaWYgdGhlIGRlc3RpbmF0aW9uIHBvcnQgc3Vw cG9ydHMgVk1JRCAqLwo+ICsJbmRscC0+dm1pZF9zdXBwb3J0ID0gMDsKPiArCWlmICh2cG9ydC0+ dm1pZF9wcmlvcml0eV90YWdnaW5nKQo+ICsJCXNwLT5jbW4ucHJpb3JpdHlfdGFnZ2luZyA9IDE7 Cj4gKwllbHNlIGlmIChwaGJhLT5jZmdfdm1pZF9hcHBfaGVhZGVyICYmCj4gKwkJIGJmX2dldChs cGZjX2Z0cl9hc2hkciwgJnBoYmEtPnNsaTRfaGJhLnNsaTRfZmxhZ3MpKQo+ICsJCXNwLT5jbW4u YXBwX2hkcl9zdXBwb3J0ID0gMTsKPiArCj4gICAJbHBmY19kZWJ1Z2ZzX2Rpc2NfdHJjKHZwb3J0 LCBMUEZDX0RJU0NfVFJDX0VMU19DTUQsCj4gICAJCSJJc3N1ZSBQTE9HSTogICAgIGRpZDp4JXgi LAo+ICAgCQlkaWQsIDAsIDApOwo+IEBAIC0xMDE2MiwzICsxMDIwNywzMDAgQEAgbHBmY19zbGlf YWJ0c19yZWNvdmVyX3BvcnQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LAo+ICAgCWxwZmNfdW5y ZWdfcnBpKHZwb3J0LCBuZGxwKTsKPiAgIH0KPiAgIAo+ICt2b2lkIGxwZmNfaW5pdF9jc19jdGxf Yml0bWFwKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKPiArewo+ICsJYml0bWFwX3plcm8odnBv cnQtPnZtaWRfcHJpb3JpdHlfcmFuZ2UsIExQRkNfVk1JRF9NQVhfUFJJT1JJVFlfUkFOR0UpOwo+ ICt9Cj4gKwo+ICt2b2lkCj4gK2xwZmNfdm1pZF9zZXRfY3NfY3RsX3JhbmdlKHN0cnVjdCBscGZj X3Zwb3J0ICp2cG9ydCwgdTMyIG1pbiwgdTMyIG1heCkKPiArewo+ICsJdTMyIGk7Cj4gKwo+ICsJ aWYgKChtaW4gPiBtYXgpIHx8IChtYXggPiBMUEZDX1ZNSURfTUFYX1BSSU9SSVRZX1JBTkdFKSkK PiArCQlyZXR1cm47Cj4gKwo+ICsJZm9yIChpID0gbWluOyBpIDw9IG1heDsgaSsrKQo+ICsJCXNl dF9iaXQoaSwgdnBvcnQtPnZtaWRfcHJpb3JpdHlfcmFuZ2UpOwo+ICt9Cj4gKwo+ICt2b2lkIGxw ZmNfdm1pZF9wdXRfY3NfY3RsKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgdTMyIGN0Y2xfdm1p ZCkKPiArewo+ICsJc2V0X2JpdChjdGNsX3ZtaWQsIHZwb3J0LT52bWlkX3ByaW9yaXR5X3Jhbmdl KTsKPiArfQo+ICsKPiArdTMyIGxwZmNfdm1pZF9nZXRfY3NfY3RsKHN0cnVjdCBscGZjX3Zwb3J0 ICp2cG9ydCkKPiArewo+ICsJdTMyIGk7Cj4gKwo+ICsJaSA9IGZpbmRfZmlyc3RfYml0KHZwb3J0 LT52bWlkX3ByaW9yaXR5X3JhbmdlLAo+ICsJCQkgICBMUEZDX1ZNSURfTUFYX1BSSU9SSVRZX1JB TkdFKTsKPiArCj4gKwlpZiAoaSA9PSBMUEZDX1ZNSURfTUFYX1BSSU9SSVRZX1JBTkdFKQo+ICsJ CXJldHVybiAwOwo+ICsKPiArCWNsZWFyX2JpdChpLCB2cG9ydC0+dm1pZF9wcmlvcml0eV9yYW5n ZSk7Cj4gKwlyZXR1cm4gaTsKPiArfQo+ICsKPiArI2RlZmluZSBNQVhfUFJJT1JJVFlfREVTQwky NTUKPiArCj4gK3N0YXRpYyB2b2lkCj4gK2xwZmNfY21wbF9lbHNfcWZwYShzdHJ1Y3QgbHBmY19o YmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAo+ICsJCSAgIHN0cnVjdCBscGZj X2lvY2JxICpyc3Bpb2NiKQo+ICt7Cj4gKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSBjbWRp b2NiLT52cG9ydDsKPiArCXN0cnVjdCBwcmlvcml0eV9yYW5nZV9kZXNjICpkZXNjOwo+ICsJc3Ry dWN0IGxwZmNfZG1hYnVmICpwcnNwID0gTlVMTDsKPiArCXN0cnVjdCBscGZjX3ZtaWRfcHJpb3Jp dHlfcmFuZ2UgKnZtaWRfcmFuZ2UgPSBOVUxMOwo+ICsJdTMyICpkYXRhOwo+ICsJc3RydWN0IGxw ZmNfZG1hYnVmICpkbWFidWYgPSBjbWRpb2NiLT5jb250ZXh0MjsKPiArCUlPQ0JfdCAqaXJzcCA9 ICZyc3Bpb2NiLT5pb2NiOwo+ICsJdTggKnBjbWQ7Cj4gKwl1MzIgbGVuLCBpOwo+ICsKPiArCXBy c3AgPSBsaXN0X2dldF9maXJzdCgmZG1hYnVmLT5saXN0LCBzdHJ1Y3QgbHBmY19kbWFidWYsIGxp c3QpOwo+ICsJaWYgKCFwcnNwKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCXBjbWQgPSBwcnNwLT52 aXJ0Owo+ICsJZGF0YSA9ICh1MzIgKilwY21kOwo+ICsJaWYgKCooKHUzMiAqKShwY21kKSkgPT0g RUxTX0NNRF9MU19SSlQpIHsKCldoeSBub3QgJ2RhdGFbMF0nID8KCj4gKwkJbHBmY19wcmludGZf dmxvZyh2cG9ydCwgS0VSTl9XQVJOSU5HLCBMT0dfU0xJLAo+ICsJCQkJICI2NTI4IFFGUEEgTFNf UkpUICV4ICAleCAiLCBkYXRhWzBdLCBkYXRhWzFdKTsKPiArCQlnb3RvIG91dDsKPiArCX0KPiAr CWlmIChpcnNwLT51bHBTdGF0dXMpIHsKPiArCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJO X0VSUiwgTE9HX1NMSSwKPiArCQkJCSAiNjUyOSBRRlBBIGZhaWxlZCB3aXRoIHN0YXR1cyAleCAg JXggIiwKPiArCQkJCSBpcnNwLT51bHBTdGF0dXMsIGlyc3AtPnVuLnVscFdvcmRbNF0pOwo+ICsJ CWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCWlmICghdnBvcnQtPnFmcGFfcmVzKSB7Cj4gKwkJdnBv cnQtPnFmcGFfcmVzID0ga21hbGxvYyhGQ0VMU1NJWkUsIEdGUF9LRVJORUwpOwo+ICsJCWlmICgh dnBvcnQtPnFmcGFfcmVzKQo+ICsJCQlnb3RvIG91dDsKPiArCQltZW1zZXQodnBvcnQtPnFmcGFf cmVzLCAwLCBGQ0VMU1NJWkUpOwo+ICsJfQo+ICsKPiArCWxlbiA9ICooKHUzMiAqKShwY21kICsg NCkpOwoKZGF0YVs0XT8KCj4gKwlsZW4gPSBiZTMyX3RvX2NwdShsZW4pOwo+ICsJbWVtY3B5KHZw b3J0LT5xZnBhX3JlcywgcGNtZCwgbGVuICsgOCk7Cj4gKwlsZW4gPSBsZW4gLyBMUEZDX1BSSU9S SVRZX1JBTkdFX0RFU0NfU0laRTsKPiArCj4gKwlkZXNjID0gKHN0cnVjdCBwcmlvcml0eV9yYW5n ZV9kZXNjICopKHBjbWQgKyA4KTsKPiArCXZtaWRfcmFuZ2UgPSB2cG9ydC0+dm1pZF9wcmlvcml0 eS52bWlkX3JhbmdlOwo+ICsJaWYgKCF2bWlkX3JhbmdlKSB7Cj4gKwkJdm1pZF9yYW5nZSA9IGtt YWxsb2NfYXJyYXkoTUFYX1BSSU9SSVRZX0RFU0MsCj4gKwkJCQkJICAgc2l6ZW9mCj4gKwkJCQkJ ICAgKHN0cnVjdCBscGZjX3ZtaWRfcHJpb3JpdHlfcmFuZ2UpLAo+ICsJCQkJCSAgIEdGUF9LRVJO RUwpOwo+ICsJCWlmICghdm1pZF9yYW5nZSkKPiArCQkJZ290byBvdXQ7Cj4gKwkJbWVtc2V0KHZt aWRfcmFuZ2UsIDAsIE1BWF9QUklPUklUWV9ERVNDICoKPiArCQkgICAgICAgc2l6ZW9mKHN0cnVj dCBscGZjX3ZtaWRfcHJpb3JpdHlfcmFuZ2UpKTsKPiArCQl2cG9ydC0+dm1pZF9wcmlvcml0eS52 bWlkX3JhbmdlID0gdm1pZF9yYW5nZTsKPiArCX0KPiArCXZwb3J0LT52bWlkX3ByaW9yaXR5Lm51 bV9kZXNjcmlwdG9ycyA9IGxlbjsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyssIHZt aWRfcmFuZ2UrKywgZGVzYysrKSB7Cj4gKwkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9E RUJVRywgTE9HX0VMUywKPiArCQkJCSAiNjUzOSB2bWlkIHZhbHVlcyBsb3c9JWQsIGhpZ2g9JWQs IHFvcz0lZCxcbiIKPiArCQkJCSAiIGxvY2FsIHZlIGlkPSVkXG4iLCBkZXNjLT5sb19yYW5nZSwK PiArCQkJCSBkZXNjLT5oaV9yYW5nZSwgZGVzYy0+cW9zX3ByaW9yaXR5LAo+ICsJCQkJIGRlc2Mt PmxvY2FsX3ZlX2lkKTsKPiArCj4gKwkJdm1pZF9yYW5nZS0+bG93ID0gZGVzYy0+bG9fcmFuZ2Ug PDwgMTsKPiArCQlpZiAoZGVzYy0+bG9jYWxfdmVfaWQgPT0gUUZQQV9PRERfT05MWSkKPiArCQkJ dm1pZF9yYW5nZS0+bG93Kys7Cj4gKwkJaWYgKGRlc2MtPnFvc19wcmlvcml0eSkKPiArCQkJdnBv cnQtPnZtaWRfZmxhZyB8PSBMUEZDX1ZNSURfUU9TX0VOQUJMRUQ7Cj4gKwkJdm1pZF9yYW5nZS0+ cW9zID0gZGVzYy0+cW9zX3ByaW9yaXR5Owo+ICsKPiArCQl2bWlkX3JhbmdlLT5oaWdoID0gZGVz Yy0+aGlfcmFuZ2UgPDwgMTsKPiArCQlpZiAoKGRlc2MtPmxvY2FsX3ZlX2lkID09IFFGUEFfT0RE X09OTFkpIHx8Cj4gKwkJICAgIChkZXNjLT5sb2NhbF92ZV9pZCA9PSBRRlBBX0VWRU5fT0REKSkK PiArCQkJdm1pZF9yYW5nZS0+aGlnaCsrOwo+ICsJfQo+ICsJbHBmY19pbml0X2NzX2N0bF9iaXRt YXAodnBvcnQpOwo+ICsJZm9yIChpID0gMDsgaSA8IHZwb3J0LT52bWlkX3ByaW9yaXR5Lm51bV9k ZXNjcmlwdG9yczsgaSsrKSB7Cj4gKwkJbHBmY192bWlkX3NldF9jc19jdGxfcmFuZ2UodnBvcnQs Cj4gKwkJCQl2cG9ydC0+dm1pZF9wcmlvcml0eS52bWlkX3JhbmdlW2ldLmxvdywKPiArCQkJCXZw b3J0LT52bWlkX3ByaW9yaXR5LnZtaWRfcmFuZ2VbaV0uaGlnaCk7Cj4gKwl9Cj4gKwo+ICsJdnBv cnQtPnZtaWRfZmxhZyB8PSBMUEZDX1ZNSURfUUZQQV9DTVBMOwo+ICsgb3V0Ogo+ICsJbHBmY19l bHNfZnJlZV9pb2NiKHBoYmEsIGNtZGlvY2IpOwo+ICt9Cj4gKwo+ICtpbnQgbHBmY19pc3N1ZV9l bHNfcWZwYShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCj4gK3sKPiArCXN0cnVjdCBscGZjX2hi YSAqcGhiYSA9IHZwb3J0LT5waGJhOwo+ICsJSU9DQl90ICppY21kOwo+ICsJc3RydWN0IGxwZmNf bm9kZWxpc3QgKm5kbHA7Cj4gKwlzdHJ1Y3QgbHBmY19pb2NicSAqZWxzaW9jYjsKPiArCXN0cnVj dCBscGZjX3NsaSAqcHNsaTsKPiArCXU4ICpwY21kOwo+ICsJaW50IHJldDsKPiArCj4gKwlwc2xp ID0gJnBoYmEtPnNsaTsKPiArCj4gKwluZGxwID0gbHBmY19maW5kbm9kZV9kaWQocGhiYS0+cHBv cnQsIEZhYnJpY19ESUQpOwo+ICsJaWYgKG5kbHAgJiYgIU5MUF9DSEtfTk9ERV9BQ1QobmRscCkp Cj4gKwkJcmV0dXJuIDE7Cj4gKwo+ICsJaWYgKCFuZGxwKQo+ICsJCXJldHVybiAxOwo+ICsKPiAr CWVsc2lvY2IgPSBscGZjX3ByZXBfZWxzX2lvY2IodnBvcnQsIDEsIExQRkNfUUZQQV9TSVpFLCAy LCBuZGxwLAo+ICsJCQkJICAgICBuZGxwLT5ubHBfRElELCBFTFNfQ01EX1FGUEEpOwo+ICsJaWYg KCFlbHNpb2NiKQo+ICsJCXJldHVybiAxOwo+ICsKPiArCWljbWQgPSAmZWxzaW9jYi0+aW9jYjsK PiArCXBjbWQgPSAodTggKikoKChzdHJ1Y3QgbHBmY19kbWFidWYgKillbHNpb2NiLT5jb250ZXh0 MiktPnZpcnQpOwo+ICsKPiArCSooKHUzMiAqKShwY21kKSkgPSBFTFNfQ01EX1FGUEE7Cj4gKwlw Y21kICs9IDQ7Cj4gKwo+ICsJZWxzaW9jYi0+aW9jYl9jbXBsID0gbHBmY19jbXBsX2Vsc19xZnBh Owo+ICsJcmV0ID0gbHBmY19zbGlfaXNzdWVfaW9jYihwaGJhLCBMUEZDX0VMU19SSU5HLCBlbHNp b2NiLCAyKTsKPiArCWlmIChyZXQgIT0gSU9DQl9TVUNDRVNTKSB7Cj4gKwkJbHBmY19lbHNfZnJl ZV9pb2NiKHBoYmEsIGVsc2lvY2IpOwo+ICsJCXJldHVybiAxOwo+ICsJfQo+ICsJdnBvcnQtPnZt aWRfZmxhZyAmPSB+TFBGQ19WTUlEX1FPU19FTkFCTEVEOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK2ludAo+ICtscGZjX3ZtaWRfdXZlbShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsCj4gKwkg ICAgICAgc3RydWN0IGxwZmNfdm1pZCAqdm1pZCwgYm9vbCBpbnN0YW50aWF0ZWQpCj4gK3sKPiAr CXN0cnVjdCBscGZjX3ZlbV9pZF9kZXNjICp2ZW1faWRfZGVzYzsKPiArCXN0cnVjdCBscGZjX25v ZGVsaXN0ICpuZGxwOwo+ICsJSU9DQl90ICppY21kOwo+ICsJc3RydWN0IGxwZmNfaW9jYnEgKmVs c2lvY2I7Cj4gKwlzdHJ1Y3QgaW5zdGFudGlhdGVkX3ZlX2Rlc2MgKmluc3RfZGVzYzsKPiArCXN0 cnVjdCBscGZjX3ZtaWRfY29udGV4dCAqdm1pZF9jb250ZXh0Owo+ICsJdTggKnBjbWQ7Cj4gKwl1 MzIgKmxlbjsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCW5kbHAgPSBscGZjX2ZpbmRub2RlX2Rp ZCh2cG9ydCwgRmFicmljX0RJRCk7Cj4gKwlpZiAobmRscCAmJiAhTkxQX0NIS19OT0RFX0FDVChu ZGxwKSkKPiArCQlyZXR1cm4gMTsKPiArCj4gKwl2bWlkX2NvbnRleHQgPSBrbWFsbG9jKHNpemVv Zigqdm1pZF9jb250ZXh0KSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXZtaWRfY29udGV4dCkKPiAr CQlyZXR1cm4gMTsKPiArCWVsc2lvY2IgPSBscGZjX3ByZXBfZWxzX2lvY2IodnBvcnQsIDEsIExQ RkNfVVZFTV9TSVpFLCAyLAo+ICsJCQkJICAgICBuZGxwLCBGYWJyaWNfRElELCBFTFNfQ01EX1VW RU0pOwo+ICsJaWYgKCFlbHNpb2NiKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCWxwZmNfcHJpbnRm X3Zsb2codnBvcnQsIEtFUk5fREVCVUcsIExPR19FTFMsCj4gKwkJCSAiMzQyNyAlcyAlZCIsIHZt aWQtPmhvc3Rfdm1pZCwgaW5zdGFudGlhdGVkKTsKPiArCXZtaWRfY29udGV4dC0+dm1wID0gdm1p ZDsKPiArCXZtaWRfY29udGV4dC0+bmxwID0gbmRscDsKPiArCXZtaWRfY29udGV4dC0+aW5zdGFu dGlhdGVkID0gaW5zdGFudGlhdGVkOwo+ICsJZWxzaW9jYi0+dm1pZF90YWcudm1pZF9jb250ZXh0 ID0gdm1pZF9jb250ZXh0Owo+ICsJaWNtZCA9ICZlbHNpb2NiLT5pb2NiOwo+ICsJcGNtZCA9ICh1 OCAqKSgoKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKWVsc2lvY2ItPmNvbnRleHQyKS0+dmlydCk7Cj4g Kwo+ICsJaWYgKHZwb3J0LT5scGZjX3ZtaWRfaG9zdF91dWlkWzBdID09IDApCgpTYW1lIGFyZ3Vt ZW50IGFzIGFib3ZlOyBtZW1jbXAoKT8gdXVpZF9pc19udWxsKCk/Cgo+ICsJCW1lbWNweSh2cG9y dC0+bHBmY192bWlkX2hvc3RfdXVpZCwgdm1pZC0+aG9zdF92bWlkLAo+ICsJCSAgICAgICBMUEZD X0NPTVBSRVNTX1ZNSURfU0laRSk7Cj4gKwo+ICsJKigodTMyICopKHBjbWQpKSA9IEVMU19DTURf VVZFTTsKPiArCWxlbiA9ICh1MzIgKikocGNtZCArIDQpOwo+ICsJKmxlbiA9IGNwdV90b19iZTMy KExQRkNfVVZFTV9TSVpFIC0gOCk7CgoqbGVuPyBXaHkgaXMgJ2xlbicgYSBwb2ludGVyIGhlcmU/ Cgo+ICsKPiArCXZlbV9pZF9kZXNjID0gKHN0cnVjdCBscGZjX3ZlbV9pZF9kZXNjICopKHBjbWQg KyA4KTsKPiArCXZlbV9pZF9kZXNjLT50YWcgPSBiZTMyX3RvX2NwdShWRU1fSURfREVTQ19UQUcp Owo+ICsJdmVtX2lkX2Rlc2MtPmxlbmd0aCA9IGJlMzJfdG9fY3B1KExQRkNfVVZFTV9WRU1fSURf REVTQ19TSVpFKTsKPiArCW1lbWNweSh2ZW1faWRfZGVzYy0+dmVtX2lkLCB2cG9ydC0+bHBmY192 bWlkX2hvc3RfdXVpZCwKPiArCSAgICAgICBMUEZDX0NPTVBSRVNTX1ZNSURfU0laRSk7Cj4gKwo+ ICsJaW5zdF9kZXNjID0gKHN0cnVjdCBpbnN0YW50aWF0ZWRfdmVfZGVzYyAqKShwY21kICsgMzIp Owo+ICsJaW5zdF9kZXNjLT50YWcgPSBiZTMyX3RvX2NwdShJTlNUQU5USUFURURfVkVfREVTQ19U QUcpOwo+ICsJaW5zdF9kZXNjLT5sZW5ndGggPSBiZTMyX3RvX2NwdShMUEZDX1VWRU1fVkVfTUFQ X0RFU0NfU0laRSk7Cj4gKwltZW1jcHkoaW5zdF9kZXNjLT5nbG9iYWxfdmVtX2lkLCB2bWlkLT5o b3N0X3ZtaWQsCj4gKwkgICAgICAgTFBGQ19DT01QUkVTU19WTUlEX1NJWkUpOwo+ICsKPiArCWJm X3NldChscGZjX2luc3RhbnRpYXRlZF9ucG9ydF9pZCwgaW5zdF9kZXNjLCB2cG9ydC0+ZmNfbXlE SUQpOwo+ICsJYmZfc2V0KGxwZmNfaW5zdGFudGlhdGVkX2xvY2FsX2lkLCBpbnN0X2Rlc2MsCj4g KwkgICAgICAgdm1pZC0+dW4uY3NfY3RsX3ZtaWQpOwo+ICsJaWYgKGluc3RhbnRpYXRlZCkgewo+ ICsJCWluc3RfZGVzYy0+dGFnID0gYmUzMl90b19jcHUoSU5TVEFOVElBVEVEX1ZFX0RFU0NfVEFH KTsKPiArCX0gZWxzZSB7Cj4gKwkJaW5zdF9kZXNjLT50YWcgPSBiZTMyX3RvX2NwdShERUlOU1RB TlRJQVRFRF9WRV9ERVNDX1RBRyk7Cj4gKwkJbHBmY192bWlkX3B1dF9jc19jdGwodnBvcnQsIHZt aWQtPnVuLmNzX2N0bF92bWlkKTsKPiArCX0KPiArCWluc3RfZGVzYy0+d29yZDYgPSBjcHVfdG9f YmUzMihpbnN0X2Rlc2MtPndvcmQ2KTsKPiArCj4gKwllbHNpb2NiLT5pb2NiX2NtcGwgPSBscGZj X2NtcGxfZWxzX3V2ZW07Cj4gKwlyZXQgPSBscGZjX3NsaV9pc3N1ZV9pb2NiKHZwb3J0LT5waGJh LCBMUEZDX0VMU19SSU5HLCBlbHNpb2NiLCAwKTsKPiArCWlmIChyZXQgIT0gSU9DQl9TVUNDRVNT KSB7Cj4gKwkJbHBmY19lbHNfZnJlZV9pb2NiKHZwb3J0LT5waGJhLCBlbHNpb2NiKTsKPiArCQln b3RvIG91dDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArIG91dDoKPiArCWtmcmVlKHZtaWRf Y29udGV4dCk7Cj4gKwlyZXR1cm4gMTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArbHBmY19j bXBsX2Vsc191dmVtKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmlj bWRpb2NiLAo+ICsJCSAgIHN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NiKQo+ICt7Cj4gKwlzdHJ1 Y3QgbHBmY192cG9ydCAqdnBvcnQgPSBpY21kaW9jYi0+dnBvcnQ7Cj4gKwlzdHJ1Y3QgbHBmY19k bWFidWYgKnByc3AgPSBOVUxMOwo+ICsJc3RydWN0IGxwZmNfdm1pZF9jb250ZXh0ICp2bWlkX2Nv bnRleHQgPQo+ICsJICAgIGljbWRpb2NiLT52bWlkX3RhZy52bWlkX2NvbnRleHQ7Cj4gKwlzdHJ1 Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IGljbWRpb2NiLT5jb250ZXh0MTsKPiArCXU4ICpwY21k Owo+ICsJdTMyICpkYXRhOwo+ICsJSU9DQl90ICppcnNwID0gJnJzcGlvY2ItPmlvY2I7Cj4gKwlz dHJ1Y3QgbHBmY19kbWFidWYgKmRtYWJ1ZiA9IGljbWRpb2NiLT5jb250ZXh0MjsKPiArCXN0cnVj dCBscGZjX3ZtaWQgKnZtaWQ7Cj4gKwo+ICsJdm1pZCA9IHZtaWRfY29udGV4dC0+dm1wOwo+ICsJ aWYgKG5kbHAgJiYgIU5MUF9DSEtfTk9ERV9BQ1QobmRscCkpCj4gKwkJbmRscCA9IE5VTEw7Cj4g Kwo+ICsJcHJzcCA9IGxpc3RfZ2V0X2ZpcnN0KCZkbWFidWYtPmxpc3QsIHN0cnVjdCBscGZjX2Rt YWJ1ZiwgbGlzdCk7Cj4gKwlpZiAoIXByc3ApCj4gKwkJZ290byBvdXQ7Cj4gKwlwY21kID0gcHJz cC0+dmlydDsKPiArCWRhdGEgPSAodTMyICopcGNtZDsKPiArCWlmICgqKCh1MzIgKikocGNtZCkp ID09IEVMU19DTURfTFNfUkpUKSB7CgpkYXRhWzBdPwoKPiArCQlscGZjX3ByaW50Zl92bG9nKHZw b3J0LCBLRVJOX1dBUk5JTkcsIExPR19TTEksCj4gKwkJCQkgIjQ1MzIgVVZFTSBMU19SSlQgJXgg JXggIiwgZGF0YVswXSwgZGF0YVsxXSk7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwlpZiAoaXJz cC0+dWxwU3RhdHVzKSB7Cj4gKwkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9XQVJOSU5H LCBMT0dfU0xJLAo+ICsJCQkJICI0NTMzIFVWRU0gZXJyb3Igc3RhdHVzICV4OiAleCAiLAo+ICsJ CQkJIGlyc3AtPnVscFN0YXR1cywgaXJzcC0+dW4udWxwV29yZFs0XSk7Cj4gKwkJZ290byBvdXQ7 Cj4gKwl9Cj4gKwlzcGluX2xvY2soJnBoYmEtPmhiYWxvY2spOwo+ICsJLyogU2V0IElOIFVTRSBm bGFnICovCj4gKwl2cG9ydC0+dm1pZF9mbGFnIHw9IExQRkNfVk1JRF9JTl9VU0U7Cj4gKwlwaGJh LT5wcG9ydC0+dm1pZF9mbGFnIHw9IExQRkNfVk1JRF9JTl9VU0U7Cj4gKwlzcGluX3VubG9jaygm cGhiYS0+aGJhbG9jayk7Cj4gKwo+ICsJaWYgKHZtaWRfY29udGV4dC0+aW5zdGFudGlhdGVkKSB7 Cj4gKwkJdm1pZC0+ZmxhZyB8PSBMUEZDX1ZNSURfUkVHSVNURVJFRDsKPiArCQl2bWlkLT5mbGFn ICY9IH5MUEZDX1ZNSURfUkVRX1JFR0lTVEVSOwo+ICsJfQo+ICsKPiArIG91dDoKPiArCWtmcmVl KHZtaWRfY29udGV4dCk7Cj4gKwlscGZjX2Vsc19mcmVlX2lvY2IocGhiYSwgaWNtZGlvY2IpOwo+ ICt9Cj4gCkNoZWVycywKCkhhbm5lcwotLSAKRHIuIEhhbm5lcyBSZWluZWNrZSAgICAgICAgICAg ICAgICBLZXJuZWwgU3RvcmFnZSBBcmNoaXRlY3QKaGFyZUBzdXNlLmRlICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKzQ5IDkxMSA3NDA1MyA2ODgKU1VTRSBTb2Z0d2FyZSBTb2x1dGlvbnMg R21iSCwgTWF4ZmVsZHN0ci4gNSwgOTA0MDkgTsO8cm5iZXJnCkhSQiAzNjgwOSAoQUcgTsO8cm5i ZXJnKSwgR2VzY2jDpGZ0c2bDvGhyZXI6IEZlbGl4IEltZW5kw7ZyZmZlcgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtbnZtZSBtYWlsaW5nIGxp c3QKTGludXgtbnZtZUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQu b3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbnZtZQo=