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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 7196DC71153 for ; Mon, 28 Aug 2023 19:49:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Subject:References: In-Reply-To:Message-ID:Cc:To:From:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=0NxPRWIAGoLOC1/OZLAJMUTNamgO+UQVaTZI2OBafr0=; b=GBqY1x1l+NG+I6lDZ9uvvlX+vQ Sj+v0Y5dgCSh4e/fR6DdorDEO0ZF3I/DaGCtc4DX7/a3JUv8g6X91O6+L/cD52nlt36K5FBgeTMy0 9I6Fh1f2i6Y7SNq3nnfMwfXjak260+7m641MKPLh+G4sXRHZwauPHDuT0zX7W7Vb7JF6u7AWreEgq 28FLnhWhgnwEk5ehrF9wMCb0qmc/xdM+YqftWWCZrylQtUgiBt80gBN/CrO4DHKL307b/ouBRVkqj 0RG7GpjfdDnfvFw80ADGoG0npRwYwy8VttkBKUVF8aQcOoTUHnt7Vtaid3vomL0ybufG7VEjCSb47 xKQXrqfg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qaiEb-00ABGo-0a; Mon, 28 Aug 2023 19:49:13 +0000 Received: from lithops.sigma-star.at ([195.201.40.130]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qaiEW-00ABFj-2T for linux-um@lists.infradead.org; Mon, 28 Aug 2023 19:49:12 +0000 Received: from localhost (localhost [127.0.0.1]) by lithops.sigma-star.at (Postfix) with ESMTP id 8A8C06418DC5; Mon, 28 Aug 2023 21:48:55 +0200 (CEST) Received: from lithops.sigma-star.at ([127.0.0.1]) by localhost (lithops.sigma-star.at [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id f3Jt4832Sru8; Mon, 28 Aug 2023 21:48:54 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by lithops.sigma-star.at (Postfix) with ESMTP id DFCFE6418DB5; Mon, 28 Aug 2023 21:48:53 +0200 (CEST) Received: from lithops.sigma-star.at ([127.0.0.1]) by localhost (lithops.sigma-star.at [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id A7FVXYvHpwMQ; Mon, 28 Aug 2023 21:48:53 +0200 (CEST) Received: from lithops.sigma-star.at (lithops.sigma-star.at [195.201.40.130]) by lithops.sigma-star.at (Postfix) with ESMTP id ACC846418DB4; Mon, 28 Aug 2023 21:48:53 +0200 (CEST) Date: Mon, 28 Aug 2023 21:48:53 +0200 (CEST) From: Richard Weinberger To: Marko =?utf-8?Q?Petrovi=C4=87?= Cc: linux-um , anton ivanov , Johannes Berg Message-ID: <1570890755.789.1693252133511.JavaMail.zimbra@nod.at> In-Reply-To: <20230415164821.166606-1-petrovicmarko2006@gmail.com> References: <20230413223024.11513-1-petrovicmarko2006@gmail.com> <20230415164821.166606-1-petrovicmarko2006@gmail.com> Subject: Re: [PATCH v3 2/2] hostfs: store permissions in extended attributes MIME-Version: 1.0 X-Originating-IP: [195.201.40.130] X-Mailer: Zimbra 8.8.12_GA_3807 (ZimbraWebClient - FF97 (Linux)/8.8.12_GA_3809) Thread-Topic: hostfs: store permissions in extended attributes Thread-Index: 7JE/JnmLw8cCDZj7ukHFvmI0UiuJxg== X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230828_124909_134277_04F89599 X-CRM114-Status: GOOD ( 29.88 ) X-BeenThere: linux-um@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-um" Errors-To: linux-um-bounces+linux-um=archiver.kernel.org@lists.infradead.org LS0tLS0gVXJzcHLDvG5nbGljaGUgTWFpbCAtLS0tLQo+IFZvbjogIk1hcmtvIFBldHJvdmnEhyIg PHBldHJvdmljbWFya28yMDA2QGdtYWlsLmNvbT4KPiBBbjogImxpbnV4LXVtIiA8bGludXgtdW1A bGlzdHMuaW5mcmFkZWFkLm9yZz4KPiBDQzogInJpY2hhcmQiIDxyaWNoYXJkQG5vZC5hdD4sICJh bnRvbiBpdmFub3YiIDxhbnRvbi5pdmFub3ZAY2FtYnJpZGdlZ3JleXMuY29tPiwgIkpvaGFubmVz IEJlcmciCj4gPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+LCAiTWFya28gUGV0cm92acSHIiA8 cGV0cm92aWNtYXJrbzIwMDZAZ21haWwuY29tPgo+IEdlc2VuZGV0OiBTYW1zdGFnLCAxNS4gQXBy aWwgMjAyMyAxODo0ODoyMQo+IEJldHJlZmY6IFtQQVRDSCB2MyAyLzJdIGhvc3Rmczogc3RvcmUg cGVybWlzc2lvbnMgaW4gZXh0ZW5kZWQgYXR0cmlidXRlcwoKPiBUaGlzIHBhdGNoIGFkZHMgc3Vw cG9ydCBmb3IgeGF0dHJwZXJtIGhvc3RmcyBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbgo+IHdo aWNoIGVuYWJsZXMgdGhlIHVzZSBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzIGZvciBzdG9yaW5nIHBl cm1pc3Npb25zIGJ5Cj4gZGVmYXVsdCBvbiBhbGwgbW91bnRlZCBob3N0ZnMgZmlsZXN5c3RlbXMu CgpTb3JyeSBmb3IgdGhlIGRlbGF5LiBKdXN0IHVuZWFydGhlZCB0aGlzIHBhdGNoIGZyb20gcGF0 Y2h3b3JrLgogCj4gVGhlIHN1cHBvcnQgZm9yIHBlci1tb3VudHBvaW50IHhhdHRycGVybS9ub3hh dHRycGVybSBpcyBhZGRlZC4KPiAKPiAnc3RydWN0IHN1cGVyX2Jsb2NrIC0+IHNfZnNfaW5mbycg bm93IHBvaW50cyB0byAnc3RydWN0IGhvc3Rmc19mc19pbmZvJy4KPiBBbGwgY29kZSB0aGF0IHJl bGllZCBvbiBzX2ZzX2luZm8gcG9pbnRpbmcgdG8gYSBzdHJpbmcgaXMgY2hhbmdlZCB0byB1c2UK PiB0aGUgc2FtZSBzdHJpbmcgc3RvcmVkIGluc2lkZSAnc3RydWN0IGhvc3Rmc19mc19pbmZvJy4g VGhpcyBhbGxvd3MgZWFzeQo+IGV4dGVuc2lvbnMgb2YgdGhlIHN1cGVyX2Jsb2NrIGRhdGEgaW4g dGhlIGZ1dHVyZSBmb3Igc3RvcmluZyBtb3VudAo+IG9wdGlvbnMuCj4gCj4gRnVuY3Rpb24gaG9z dGZzX3BhcnNlX29wdGlvbnMoKSBpcyBhZGRlZCBmb3IgcGFyc2luZyB0aGUgc3RyaW5nIG9mCj4g bW91bnQgb3B0aW9ucyBhbmQgc3RvcmluZyB0aGVtIGluICdzdHJ1Y3QgaG9zdGZzX2ZzX2luZm8n Lgo+IAo+IFdoZW4geGF0dHJwZXJtIGlzIGVuYWJsZWQsIGZpbGVzeXN0ZW0gc3RvcmVzIHBlcm1p c3Npb25zIGluIGEKPiBodW1hbi1yZWFkYWJsZSBzdHJpbmcgaW4gYXR0cmlidXRlcyB1c2VyLnVt bG1vZGUgKGZvciBtb2RlKSBhbmQKPiB1c2VyLnVtbGNyZWQgKGZvciB1aWQgYW5kIGdpZCkuCj4g Cj4gU2lnbmVkLW9mZi1ieTogTWFya28gUGV0cm92acSHIDxwZXRyb3ZpY21hcmtvMjAwNkBnbWFp bC5jb20+Cj4gLS0tCj4gZnMvaG9zdGZzL2hvc3Rmcy5oICAgICAgfCAgMTMgKystCj4gZnMvaG9z dGZzL2hvc3Rmc19rZXJuLmMgfCAxMjkgKysrKysrKysrKysrKysrKystLS0tCj4gZnMvaG9zdGZz L2hvc3Rmc191c2VyLmMgfCAyNDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr LS0tLQo+IDMgZmlsZXMgY2hhbmdlZCwgMzQwIGluc2VydGlvbnMoKyksIDQ0IGRlbGV0aW9ucygt KQo+IAo+IGRpZmYgLS1naXQgYS9mcy9ob3N0ZnMvaG9zdGZzLmggYi9mcy9ob3N0ZnMvaG9zdGZz LmgKPiBpbmRleCA2OWNiNzk2ZjYyNzAuLjAzZjc3M2I3YzQyMyAxMDA2NDQKPiAtLS0gYS9mcy9o b3N0ZnMvaG9zdGZzLmgKPiArKysgYi9mcy9ob3N0ZnMvaG9zdGZzLmgKPiBAQCAtMzcsNiArMzcs NyBAQAo+ICAqIGlzIG9uLCBhbmQgcmVtb3ZlIHRoZSBhcHByb3ByaWF0ZSBiaXRzIGZyb20gYXR0 ci0+aWFfbW9kZSAoYXR0ciBpcyBhCj4gICogInN0cnVjdCBpYXR0ciAqIikuIC1CbGFpc29yQmxh ZGUKPiAgKi8KPiArZXh0ZXJuIGludCB1c2VfeGF0dHI7Cj4gc3RydWN0IGhvc3Rmc190aW1lc3Bl YyB7Cj4gCWxvbmcgbG9uZyB0dl9zZWM7Cj4gCWxvbmcgbG9uZyB0dl9uc2VjOwo+IEBAIC02Nyw3 ICs2OCw4IEBAIHN0cnVjdCBob3N0ZnNfc3RhdCB7Cj4gCXVuc2lnbmVkIGludCBtaW47Cj4gfTsK PiAKPiAtZXh0ZXJuIGludCBzdGF0X2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGhvc3Rm c19zdGF0ICpwLCBpbnQgZmQpOwo+ICtleHRlcm4gaW50IHN0YXRfZmlsZShjb25zdCBjaGFyICpw YXRoLCBzdHJ1Y3QgaG9zdGZzX3N0YXQgKnAsIGludCBmZCwKPiArCQkJCQkJCWludCBtbnRfdXNl X3hhdHRyKTsKPiBleHRlcm4gaW50IGFjY2Vzc19maWxlKGNoYXIgKnBhdGgsIGludCByLCBpbnQg dywgaW50IHgpOwo+IGV4dGVybiBpbnQgb3Blbl9maWxlKGNoYXIgKnBhdGgsIGludCByLCBpbnQg dywgaW50IGFwcGVuZCk7Cj4gZXh0ZXJuIHZvaWQgKm9wZW5fZGlyKGNoYXIgKnBhdGgsIGludCAq ZXJyX291dCk7Cj4gQEAgLTgzLDExICs4NSwxNCBAQCBleHRlcm4gaW50IHdyaXRlX2ZpbGUoaW50 IGZkLCB1bnNpZ25lZCBsb25nIGxvbmcgKm9mZnNldCwKPiBjb25zdCBjaGFyICpidWYsCj4gCQkg ICAgICBpbnQgbGVuKTsKPiBleHRlcm4gaW50IGxzZWVrX2ZpbGUoaW50IGZkLCBsb25nIGxvbmcg b2Zmc2V0LCBpbnQgd2hlbmNlKTsKPiBleHRlcm4gaW50IGZzeW5jX2ZpbGUoaW50IGZkLCBpbnQg ZGF0YXN5bmMpOwo+IC1leHRlcm4gaW50IGZpbGVfY3JlYXRlKGNoYXIgKm5hbWUsIGludCBtb2Rl KTsKPiAtZXh0ZXJuIGludCBzZXRfYXR0cihjb25zdCBjaGFyICpmaWxlLCBzdHJ1Y3QgaG9zdGZz X2lhdHRyICphdHRycywgaW50IGZkKTsKPiArZXh0ZXJuIGludCBmaWxlX2NyZWF0ZShjaGFyICpu YW1lLCBpbnQgbW9kZSwgdWlkX3QgdWlkLCBnaWRfdCBnaWQsCj4gKwkJCQkJCQlpbnQgbW50X3Vz ZV94YXR0cik7Cj4gK2V4dGVybiBpbnQgc2V0X2F0dHIoY29uc3QgY2hhciAqZmlsZSwgc3RydWN0 IGhvc3Rmc19pYXR0ciAqYXR0cnMsIGludCBmZCwKPiArCQkJCQkJCSAgICBpbnQgbW50X3VzZV94 YXR0cik7Cj4gZXh0ZXJuIGludCBtYWtlX3N5bWxpbmsoY29uc3QgY2hhciAqZnJvbSwgY29uc3Qg Y2hhciAqdG8pOwo+IGV4dGVybiBpbnQgdW5saW5rX2ZpbGUoY29uc3QgY2hhciAqZmlsZSk7Cj4g LWV4dGVybiBpbnQgZG9fbWtkaXIoY29uc3QgY2hhciAqZmlsZSwgaW50IG1vZGUpOwo+ICtleHRl cm4gaW50IGRvX21rZGlyKGNvbnN0IGNoYXIgKmZpbGUsIGludCBtb2RlLCB1aWRfdCB1aWQsIGdp ZF90IGdpZCwKPiArCQkJCQkJCWludCBtbnRfdXNlX3hhdHRyKTsKPiBleHRlcm4gaW50IGhvc3Rm c19kb19ybWRpcihjb25zdCBjaGFyICpmaWxlKTsKPiBleHRlcm4gaW50IGRvX21rbm9kKGNvbnN0 IGNoYXIgKmZpbGUsIGludCBtb2RlLCB1bnNpZ25lZCBpbnQgbWFqb3IsCj4gCQkgICAgdW5zaWdu ZWQgaW50IG1pbm9yKTsKPiBkaWZmIC0tZ2l0IGEvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMgYi9m cy9ob3N0ZnMvaG9zdGZzX2tlcm4uYwo+IGluZGV4IDI4YjRmMTVjMTllYi4uYTJhZmU3MGFiZjE0 IDEwMDY0NAo+IC0tLSBhL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jCj4gKysrIGIvZnMvaG9zdGZz L2hvc3Rmc19rZXJuLmMKPiBAQCAtMTcsNiArMTcsNyBAQAo+ICNpbmNsdWRlIDxsaW51eC93cml0 ZWJhY2suaD4KPiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KPiAjaW5jbHVkZSA8bGludXgvbmFt ZWkuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3VpZGdpZC5oPgo+ICNpbmNsdWRlICJob3N0ZnMuaCIK PiAjaW5jbHVkZSA8aW5pdC5oPgo+ICNpbmNsdWRlIDxrZXJuLmg+Cj4gQEAgLTI4LDYgKzI5LDEx IEBAIHN0cnVjdCBob3N0ZnNfaW5vZGVfaW5mbyB7Cj4gCXN0cnVjdCBtdXRleCBvcGVuX211dGV4 Owo+IH07Cj4gCj4gK3N0cnVjdCBob3N0ZnNfZnNfaW5mbyB7Cj4gKwljaGFyIGhvc3Rfcm9vdF9w YXRoW1BBVEhfTUFYKzFdOwoKV2h5ICsxPyBBRkFJSyBQQVRIX01BWCBpbmNsdWRlcyBzcGFjZSBm b3IgdGhlIE5VTCBieXRlLgoKPiArCWludCB1c2VfeGF0dHI7CgpUaGlzIGlzIGEgdmVyeSBnZW5l cmljIG5hbWUuCkZlZWwgYWxzbyBmcmVlIHRvIHVzZSBib29sIGluc3RlYWQgb2YgaW50LgoKPiAr fTsKPiArCj4gc3RhdGljIGlubGluZSBzdHJ1Y3QgaG9zdGZzX2lub2RlX2luZm8gKkhPU1RGU19J KHN0cnVjdCBpbm9kZSAqaW5vZGUpCj4gewo+IAlyZXR1cm4gbGlzdF9lbnRyeShpbm9kZSwgc3Ry dWN0IGhvc3Rmc19pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpOwo+IEBAIC02NCw2ICs3MCw4IEBAIHN0 YXRpYyBpbnQgX19pbml0IGhvc3Rmc19hcmdzKGNoYXIgKm9wdGlvbnMsIGludCAqYWRkKQo+IAkJ aWYgKCpvcHRpb25zICE9ICdcMCcpIHsKPiAJCQlpZiAoIXN0cmNtcChvcHRpb25zLCAiYXBwZW5k IikpCj4gCQkJCWFwcGVuZCA9IDE7Cj4gKwkJCWVsc2UgaWYgKCFzdHJjbXAob3B0aW9ucywgInhh dHRycGVybSIpKQo+ICsJCQkJdXNlX3hhdHRyID0gMTsKPiAJCQllbHNlIHByaW50ZigiaG9zdGZz X2FyZ3MgLSB1bnN1cHBvcnRlZCBvcHRpb24gLSAlc1xuIiwKPiAJCQkJICAgIG9wdGlvbnMpOwo+ IAkJfQo+IEBAIC03OSwxOCArODcsMjIgQEAgX191bWxfc2V0dXAoImhvc3Rmcz0iLCBob3N0ZnNf YXJncywKPiAiICAgIHRyZWUgb24gdGhlIGhvc3QuICBJZiB0aGlzIGlzbid0IHNwZWNpZmllZCwg dGhlbiBhIHVzZXIgaW5zaWRlIFVNTCBjYW5cbiIKPiAiICAgIG1vdW50IGFueXRoaW5nIG9uIHRo ZSBob3N0IHRoYXQncyBhY2Nlc3NpYmxlIHRvIHRoZSB1c2VyIHRoYXQncyBydW5uaW5nXG4iCj4g IiAgICBpdC5cbiIKPiAtIiAgICBUaGUgb25seSBmbGFnIGN1cnJlbnRseSBzdXBwb3J0ZWQgaXMg J2FwcGVuZCcsIHdoaWNoIHNwZWNpZmllcyB0aGF0IGFsbFxuIgo+IC0iICAgIGZpbGVzIG9wZW5l ZCBieSBob3N0ZnMgd2lsbCBiZSBvcGVuZWQgaW4gYXBwZW5kIG1vZGUuXG5cbiIKPiArIiAgICBU aGUgb25seSBmbGFncyBjdXJyZW50bHkgc3VwcG9ydGVkIGFyZSAnYXBwZW5kJywgd2hpY2ggc3Bl Y2lmaWVzIHRoYXRcbiIKPiArIiAgICBhbGwgZmlsZXMgb3BlbmVkIGJ5IGhvc3RmcyB3aWxsIGJl IG9wZW5lZCBpbiBhcHBlbmQgbW9kZSBhbmQKPiAneGF0dHJwZXJtJ1xuIgo+ICsiICAgIHdoaWNo IHNwZWNpZmllcyB0aGF0IHBlcm1pc3Npb25zIG9mIGZpbGVzIHdpbGwgYmUgc3RvcmVkIGluIGV4 dGVuZGVkXG4iCj4gKyIgICAgYXR0cmlidXRlcy5cblxuIgoKUGxlYXNlIG1lbnRpb24gdGhhdCB0 aGV5IGFyZSBzdG9yZWQgb24geGF0dHJzIG9uIHRoZSBob3N0IHNpZGUuCgo+ICk7Cj4gI2VuZGlm Cj4gCj4gc3RhdGljIGNoYXIgKl9fZGVudHJ5X25hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBj aGFyICpuYW1lKQo+IHsKPiAJY2hhciAqcCA9IGRlbnRyeV9wYXRoX3JhdyhkZW50cnksIG5hbWUs IFBBVEhfTUFYKTsKPiArCXN0cnVjdCBob3N0ZnNfZnNfaW5mbyAqc2JfZGF0YTsKPiAJY2hhciAq cm9vdDsKPiAJc2l6ZV90IGxlbjsKPiAKPiAtCXJvb3QgPSBkZW50cnktPmRfc2ItPnNfZnNfaW5m bzsKPiArCXNiX2RhdGEgPSBkZW50cnktPmRfc2ItPnNfZnNfaW5mbzsKPiArCXJvb3QgPSBzYl9k YXRhLT5ob3N0X3Jvb3RfcGF0aDsKPiAJbGVuID0gc3RybGVuKHJvb3QpOwo+IAlpZiAoSVNfRVJS KHApKSB7Cj4gCQlfX3B1dG5hbWUobmFtZSk7Cj4gQEAgLTIwMyw4ICsyMTUsMTAgQEAgc3RhdGlj IGludCBob3N0ZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0Cj4ga3N0YXRm cyAqc2YpCj4gCWxvbmcgbG9uZyBmX2JhdmFpbDsKPiAJbG9uZyBsb25nIGZfZmlsZXM7Cj4gCWxv bmcgbG9uZyBmX2ZmcmVlOwo+ICsJc3RydWN0IGhvc3Rmc19mc19pbmZvICpzYl9kYXRhOwo+IAo+ IC0JZXJyID0gZG9fc3RhdGZzKGRlbnRyeS0+ZF9zYi0+c19mc19pbmZvLAo+ICsJc2JfZGF0YSA9 IGRlbnRyeS0+ZF9zYi0+c19mc19pbmZvOwo+ICsJZXJyID0gZG9fc3RhdGZzKHNiX2RhdGEtPmhv c3Rfcm9vdF9wYXRoLAo+IAkJCSZzZi0+Zl9ic2l6ZSwgJmZfYmxvY2tzLCAmZl9iZnJlZSwgJmZf YmF2YWlsLCAmZl9maWxlcywKPiAJCQkmZl9mZnJlZSwgJnNmLT5mX2ZzaWQsIHNpemVvZihzZi0+ Zl9mc2lkKSwKPiAJCQkmc2YtPmZfbmFtZWxlbik7Cj4gQEAgLTI1MCwxNSArMjY0LDIxIEBAIHN0 YXRpYyB2b2lkIGhvc3Rmc19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCj4gCj4gc3Rh dGljIGludCBob3N0ZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3Qg ZGVudHJ5ICpyb290KQo+IHsKPiAtCWNvbnN0IGNoYXIgKnJvb3RfcGF0aCA9IHJvb3QtPmRfc2It PnNfZnNfaW5mbzsKPiArCXN0cnVjdCBob3N0ZnNfZnNfaW5mbyAqc2JfZGF0YSA9IHJvb3QtPmRf c2ItPnNfZnNfaW5mbzsKPiAJc2l6ZV90IG9mZnNldCA9IHN0cmxlbihyb290X2lubykgKyAxOwo+ IAo+IC0JaWYgKHN0cmxlbihyb290X3BhdGgpID4gb2Zmc2V0KQo+IC0JCXNlcV9zaG93X29wdGlv bihzZXEsIHJvb3RfcGF0aCArIG9mZnNldCwgTlVMTCk7Cj4gKwlpZiAoc3RybGVuKHNiX2RhdGEt Pmhvc3Rfcm9vdF9wYXRoKSA+IG9mZnNldCkKPiArCQlzZXFfc2hvd19vcHRpb24oc2VxLCBzYl9k YXRhLT5ob3N0X3Jvb3RfcGF0aCArIG9mZnNldCwgTlVMTCk7Cj4gCj4gCWlmIChhcHBlbmQpCj4g CQlzZXFfcHV0cyhzZXEsICIsYXBwZW5kIik7Cj4gCj4gKwlpZiAoc2JfZGF0YS0+dXNlX3hhdHRy ID09IDApCj4gKwkJc2VxX3B1dHMoc2VxLCAiLG5veGF0dHJwZXJtIik7Cj4gKwo+ICsJaWYgKHNi X2RhdGEtPnVzZV94YXR0ciA9PSAxKQo+ICsJCXNlcV9wdXRzKHNlcSwgIix4YXR0cnBlcm0iKTsK PiArCj4gCXJldHVybiAwOwo+IH0KPiAKPiBAQCAtNTE2LDcgKzUzNiw4IEBAIHN0YXRpYyBpbnQg cmVhZF9uYW1lKHN0cnVjdCBpbm9kZSAqaW5vLCBjaGFyICpuYW1lKQo+IHsKPiAJZGV2X3QgcmRl djsKPiAJc3RydWN0IGhvc3Rmc19zdGF0IHN0Owo+IC0JaW50IGVyciA9IHN0YXRfZmlsZShuYW1l LCAmc3QsIC0xKTsKPiArCXN0cnVjdCBob3N0ZnNfZnNfaW5mbyAqc2JfZGF0YSA9IGluby0+aV9z Yi0+c19mc19pbmZvOwo+ICsJaW50IGVyciA9IHN0YXRfZmlsZShuYW1lLCAmc3QsIC0xLCBzYl9k YXRhLT51c2VfeGF0dHIpOwo+IAlpZiAoZXJyKQo+IAkJcmV0dXJuIGVycjsKPiAKPiBAQCAtNTY0 LDkgKzU4NSwxMyBAQCBzdGF0aWMgaW50IGhvc3Rmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAq aWRtYXAsIHN0cnVjdAo+IGlub2RlICpkaXIsCj4gCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwg dW1vZGVfdCBtb2RlLCBib29sIGV4Y2wpCj4gewo+IAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwo+ICsJ c3RydWN0IGhvc3Rmc19mc19pbmZvICpzYl9kYXRhOwo+IAljaGFyICpuYW1lOwo+IAlpbnQgZXJy b3IsIGZkOwo+ICsJdW5zaWduZWQgaW50IGN1cnJlbnR1aWQ7Cj4gKwl1bnNpZ25lZCBpbnQgY3Vy cmVudGdpZDsKPiAKPiArCXNiX2RhdGEgPSBkZW50cnktPmRfc2ItPnNfZnNfaW5mbzsKPiAJaW5v ZGUgPSBob3N0ZnNfaWdldChkaXItPmlfc2IpOwo+IAlpZiAoSVNfRVJSKGlub2RlKSkgewo+IAkJ ZXJyb3IgPSBQVFJfRVJSKGlub2RlKTsKPiBAQCAtNTc4LDcgKzYwMywxMCBAQCBzdGF0aWMgaW50 IGhvc3Rmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdAo+IGlub2RlICpk aXIsCj4gCWlmIChuYW1lID09IE5VTEwpCj4gCQlnb3RvIG91dF9wdXQ7Cj4gCj4gLQlmZCA9IGZp bGVfY3JlYXRlKG5hbWUsIG1vZGUgJiAwNzc3KTsKPiArCWN1cnJlbnR1aWQgPSBmcm9tX2t1aWQo Y3VycmVudC0+Y3JlZC0+dXNlcl9ucywgY3VycmVudC0+Y3JlZC0+ZXVpZCk7Cj4gKwljdXJyZW50 Z2lkID0gZnJvbV9rZ2lkKGN1cnJlbnQtPmNyZWQtPnVzZXJfbnMsIGN1cnJlbnQtPmNyZWQtPmVn aWQpOwoKSSB0aGluayB3ZSBzaG91bGQgYmV0dGVyIHVzZSBmaWxlc3lzdGVtIGluc3RlYWQgb2Yg dGhlIGVmZmVjdGl2ZSBpZC4KVGhlc2UgZGF5cyB0aGV5J3JlIGluIG1vc3QgY2FzZXMgdGhlIHNh bWUsIGJ1dCBhcHBsaWNhdGlvbnMgY291bGQgc3RpbGwgdXNlIHNldGZzdWlkKCkgYW5kIGZyaWVu ZHMuCgo+ICsJZmQgPSBmaWxlX2NyZWF0ZShuYW1lLCBtb2RlICYgMDc3NywgY3VycmVudHVpZCwg Y3VycmVudGdpZCwKPiArCQkJCQkJCSAgIHNiX2RhdGEtPnVzZV94YXR0cik7Cj4gCWlmIChmZCA8 IDApCj4gCQllcnJvciA9IGZkOwo+IAllbHNlCj4gQEAgLTY3NSwxMiArNzAzLDE4IEBAIHN0YXRp YyBpbnQgaG9zdGZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdAo+IGlu b2RlICppbm8sCj4gc3RhdGljIGludCBob3N0ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRt YXAsIHN0cnVjdCBpbm9kZSAqaW5vLAo+IAkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVf dCBtb2RlKQo+IHsKPiArCXN0cnVjdCBob3N0ZnNfZnNfaW5mbyAqc2JfZGF0YTsKPiAJY2hhciAq ZmlsZTsKPiAJaW50IGVycjsKPiArCXVuc2lnbmVkIGludCBjdXJyZW50dWlkOwo+ICsJdW5zaWdu ZWQgaW50IGN1cnJlbnRnaWQ7Cj4gCj4gKwlzYl9kYXRhID0gZGVudHJ5LT5kX3NiLT5zX2ZzX2lu Zm87Cj4gCWlmICgoZmlsZSA9IGRlbnRyeV9uYW1lKGRlbnRyeSkpID09IE5VTEwpCj4gCQlyZXR1 cm4gLUVOT01FTTsKPiAtCWVyciA9IGRvX21rZGlyKGZpbGUsIG1vZGUpOwo+ICsJY3VycmVudHVp ZCA9IGZyb21fa3VpZChjdXJyZW50LT5jcmVkLT51c2VyX25zLCBjdXJyZW50LT5jcmVkLT5ldWlk KTsKPiArCWN1cnJlbnRnaWQgPSBmcm9tX2tnaWQoY3VycmVudC0+Y3JlZC0+dXNlcl9ucywgY3Vy cmVudC0+Y3JlZC0+ZWdpZCk7CgpTYW1lLgpBbHNvIG1ha2UgdGhpcyBhIGhlbHBlciBmdW5jdGlv biwgcGxlYXNlLgoKPiArCWVyciA9IGRvX21rZGlyKGZpbGUsIG1vZGUsIGN1cnJlbnR1aWQsIGN1 cnJlbnRnaWQsIHNiX2RhdGEtPnVzZV94YXR0cik7Cj4gCV9fcHV0bmFtZShmaWxlKTsKPiAJcmV0 dXJuIGVycjsKPiB9Cj4gQEAgLTc5NiwxMCArODMwLDEyIEBAIHN0YXRpYyBpbnQgaG9zdGZzX3Nl dGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCj4gewo+IAlzdHJ1Y3QgaW5vZGUgKmlub2Rl ID0gZF9pbm9kZShkZW50cnkpOwo+IAlzdHJ1Y3QgaG9zdGZzX2lhdHRyIGF0dHJzOwo+ICsJc3Ry dWN0IGhvc3Rmc19mc19pbmZvICpzYl9kYXRhOwo+IAljaGFyICpuYW1lOwo+IAlpbnQgZXJyOwo+ IAo+IAlpbnQgZmQgPSBIT1NURlNfSShpbm9kZSktPmZkOwo+ICsJc2JfZGF0YSA9IGRlbnRyeS0+ ZF9zYi0+c19mc19pbmZvOwo+IAo+IAllcnIgPSBzZXRhdHRyX3ByZXBhcmUoJm5vcF9tbnRfaWRt YXAsIGRlbnRyeSwgYXR0cik7Cj4gCWlmIChlcnIpCj4gQEAgLTg0OSw3ICs4ODUsNyBAQCBzdGF0 aWMgaW50IGhvc3Rmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAo+IAluYW1lID0g ZGVudHJ5X25hbWUoZGVudHJ5KTsKPiAJaWYgKG5hbWUgPT0gTlVMTCkKPiAJCXJldHVybiAtRU5P TUVNOwo+IC0JZXJyID0gc2V0X2F0dHIobmFtZSwgJmF0dHJzLCBmZCk7Cj4gKwllcnIgPSBzZXRf YXR0cihuYW1lLCAmYXR0cnMsIGZkLCBzYl9kYXRhLT51c2VfeGF0dHIpOwoKSW5zdGVhZCBvZiBw YXNzaW5nIHVzZV94YXR0ciB0byB2ZXJ5IGZ1bmN0aW9uIGp1c3QgcGFzcyBzYl9kYXRhIGl0c2Vs ZgphcyBmaXJzdCBwYXJhbWV0ZXIuIE1heWJlIGl0IGlzIHVzZWZ1bCBsYXRlciBmb3IgcGFzc2lu ZyBvdGhlciBmaWxlc3lzdGVtCmNvbnRleHQgc3R1ZmYuCgoKPiAJX19wdXRuYW1lKG5hbWUpOwo+ IAlpZiAoZXJyKQo+IAkJcmV0dXJuIGVycjsKPiBAQCAtOTE1LDEwICs5NTEsNTggQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhvc3Rmc19saW5rX2lvcHMgPSB7Cj4gCS5n ZXRfbGluawk9IGhvc3Rmc19nZXRfbGluaywKPiB9Owo+IAo+ICtzdGF0aWMgaW50IGhvc3Rmc19w YXJzZV9vcHRpb25zKHN0cnVjdCBob3N0ZnNfZnNfaW5mbyAqc2JfZGF0YSwgY29uc3QgY2hhciAq ZCkKPiArewo+ICsJaW50IGVyciA9IDAsIHVua25vd24gPSAwOwo+ICsJY2hhciAqcHRyLCAqb3B0 aW9ucywgKnN0cmluZzsKPiArCj4gKwlzbnByaW50ZihzYl9kYXRhLT5ob3N0X3Jvb3RfcGF0aCwg UEFUSF9NQVgsICIlcy8iLCByb290X2lubyk7CgpXaHkgaXMgaG9zdF9yb290X3BhdGggYSBzdGF0 aWMgYXJyYXk/IEp1c3QgdXNlIGthc3ByaW50ZigpIG9yIHN1Y2guCgo+ICsJc2JfZGF0YS0+dXNl X3hhdHRyID0gLTE7Cj4gKwlpZiAoZCA9PSBOVUxMKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXN0 cmluZyA9IGttYWxsb2Moc3RybGVuKGQpICsgMSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoc3RyaW5n ID09IE5VTEwpIHsKPiArCQllcnIgPSAtRU5PTUVNOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsJ b3B0aW9ucyA9IHN0cmluZzsKPiArCXN0cmNweShvcHRpb25zLCBkKTsKCldoeSBub3Qgc3RyZHVw KCk/Cgo+ICsKPiArCXdoaWxlIChvcHRpb25zKSB7Cj4gKwkJcHRyID0gc3RyY2hyKG9wdGlvbnMs ICcsJyk7Cj4gKwkJaWYgKHB0ciAhPSBOVUxMKQo+ICsJCQkqcHRyKysgPSAnXDAnOwo+ICsJCWlm ICgqb3B0aW9ucyAhPSAnXDAnKSB7Cj4gKwkJCWlmICghc3RyY21wKG9wdGlvbnMsICJub3hhdHRy cGVybSIpKSB7Cj4gKwkJCQlzYl9kYXRhLT51c2VfeGF0dHIgPSAwOwo+ICsJCQkJZ290byBfYnJl YWs7Cj4gKwkJCX0KPiArCQkJaWYgKCFzdHJjbXAob3B0aW9ucywgInhhdHRycGVybSIpKSB7Cj4g KwkJCQlzYl9kYXRhLT51c2VfeGF0dHIgPSAxOwo+ICsJCQkJZ290byBfYnJlYWs7Cj4gKwkJCX0K PiArCQkJaWYgKCF1bmtub3duKSB7Cj4gKwkJCQl1bmtub3duID0gMTsKPiArCQkJCXN0cmNhdChz Yl9kYXRhLT5ob3N0X3Jvb3RfcGF0aCwgb3B0aW9ucyk7Cj4gKwkJCQlnb3RvIF9icmVhazsKPiAr CQkJfQo+ICsJCQlwcl93YXJuKCJob3N0ZnM6IHVuc3VwcG9ydGVkIG1vdW50IG9wdGlvblxuIik7 Cj4gKwkJCWVyciA9IC1FSU5WQUw7Cj4gKwkJCWdvdG8gb3V0Owo+ICsJCX0KPiArX2JyZWFrOgo+ ICsJCW9wdGlvbnMgPSBwdHI7Cj4gKwl9Cj4gKwo+ICtvdXQ6Cj4gKwlrZnJlZShzdHJpbmcpOwo+ ICsJcmV0dXJuIGVycjsKPiArfQo+IHN0YXRpYyBpbnQgaG9zdGZzX2ZpbGxfc2JfY29tbW9uKHN0 cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmQsIGludCBzaWxlbnQpCj4gewo+IAlzdHJ1Y3Qg aW5vZGUgKnJvb3RfaW5vZGU7Cj4gLQljaGFyICpob3N0X3Jvb3RfcGF0aCwgKnJlcV9yb290ID0g ZDsKPiArCXN0cnVjdCBob3N0ZnNfZnNfaW5mbyAqc2JfZGF0YTsKPiAJaW50IGVycjsKPiAKPiAJ c2ItPnNfYmxvY2tzaXplID0gMTAyNDsKPiBAQCAtOTMxLDI2ICsxMDE1LDI2IEBAIHN0YXRpYyBp bnQgaG9zdGZzX2ZpbGxfc2JfY29tbW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCj4gdm9pZCAq ZCwgaW50IHNpbGVudCkKPiAJaWYgKGVycikKPiAJCWdvdG8gb3V0Owo+IAo+IC0JLyogTlVMTCBp cyBwcmludGVkIGFzICcobnVsbCknIGJ5IHByaW50ZigpOiBhdm9pZCB0aGF0LiAqLwo+IC0JaWYg KHJlcV9yb290ID09IE5VTEwpCj4gLQkJcmVxX3Jvb3QgPSAiIjsKPiAtCj4gCWVyciA9IC1FTk9N RU07Cj4gLQlzYi0+c19mc19pbmZvID0gaG9zdF9yb290X3BhdGggPQo+IC0JCWthc3ByaW50ZihH RlBfS0VSTkVMLCAiJXMvJXMiLCByb290X2lubywgcmVxX3Jvb3QpOwo+IC0JaWYgKGhvc3Rfcm9v dF9wYXRoID09IE5VTEwpCj4gKwlzYl9kYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhvc3Rm c19mc19pbmZvKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoc2JfZGF0YSA9PSBOVUxMKQo+ICsJCWdv dG8gb3V0Owo+ICsKPiArCWVyciA9IGhvc3Rmc19wYXJzZV9vcHRpb25zKHNiX2RhdGEsIGQpOwo+ ICsJaWYgKGVyciAhPSAwKQo+IAkJZ290byBvdXQ7Cj4gKwlzYi0+c19mc19pbmZvID0gc2JfZGF0 YTsKPiAKPiAJcm9vdF9pbm9kZSA9IG5ld19pbm9kZShzYik7Cj4gCWlmICghcm9vdF9pbm9kZSkK PiAJCWdvdG8gb3V0Owo+IAo+IC0JZXJyID0gcmVhZF9uYW1lKHJvb3RfaW5vZGUsIGhvc3Rfcm9v dF9wYXRoKTsKPiArCWVyciA9IHJlYWRfbmFtZShyb290X2lub2RlLCBzYl9kYXRhLT5ob3N0X3Jv b3RfcGF0aCk7CgpBbHNvIGZvciBzdWNoIGZ1bmN0aW9ucywganVzdCBwYXNzIHNiX2RhdGEuCgo+ IAlpZiAoZXJyKQo+IAkJZ290byBvdXRfcHV0Owo+IAo+IAlpZiAoU19JU0xOSyhyb290X2lub2Rl LT5pX21vZGUpKSB7Cj4gLQkJY2hhciAqbmFtZSA9IGZvbGxvd19saW5rKGhvc3Rfcm9vdF9wYXRo KTsKPiArCQljaGFyICpuYW1lID0gZm9sbG93X2xpbmsoc2JfZGF0YS0+aG9zdF9yb290X3BhdGgp Owo+IAkJaWYgKElTX0VSUihuYW1lKSkgewo+IAkJCWVyciA9IFBUUl9FUlIobmFtZSk7Cj4gCQkJ Z290byBvdXRfcHV0Owo+IEBAIC0xMDAxLDYgKzEwODUsOSBAQCBzdGF0aWMgaW50IF9faW5pdCBp bml0X2hvc3Rmcyh2b2lkKQo+IAlob3N0ZnNfaW5vZGVfY2FjaGUgPSBLTUVNX0NBQ0hFKGhvc3Rm c19pbm9kZV9pbmZvLCAwKTsKPiAJaWYgKCFob3N0ZnNfaW5vZGVfY2FjaGUpCj4gCQlyZXR1cm4g LUVOT01FTTsKPiArCSNpZmRlZiBNT0RVTEUKPiArCXVzZV94YXR0ciA9IDA7Cj4gKwkjZW5kaWYK CldoeSBpcyB0aGlzIG5lZWRlZD8KCj4gCXJldHVybiByZWdpc3Rlcl9maWxlc3lzdGVtKCZob3N0 ZnNfdHlwZSk7Cj4gfQo+IAo+IGRpZmYgLS1naXQgYS9mcy9ob3N0ZnMvaG9zdGZzX3VzZXIuYyBi L2ZzL2hvc3Rmcy9ob3N0ZnNfdXNlci5jCj4gaW5kZXggNWVjYzQ3MDYxNzJiLi5mNWRkNTI0Y2Qx NTMgMTAwNjQ0Cj4gLS0tIGEvZnMvaG9zdGZzL2hvc3Rmc191c2VyLmMKPiArKysgYi9mcy9ob3N0 ZnMvaG9zdGZzX3VzZXIuYwo+IEBAIC0xMCwxNCArMTAsMTkgQEAKPiAjaW5jbHVkZSA8ZXJybm8u aD4KPiAjaW5jbHVkZSA8ZmNudGwuaD4KPiAjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gKyNpbmNsdWRl IDxzdGRsaWIuaD4KPiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KPiAjaW5jbHVkZSA8c3lzL3RpbWUu aD4KPiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cj4gI2luY2x1ZGUgPHN5cy92ZnMuaD4KPiAjaW5j bHVkZSA8c3lzL3N5c2NhbGwuaD4KPiArI2luY2x1ZGUgPHN5cy94YXR0ci5oPgo+ICsjaW5jbHVk ZSA8dW1fbWFsbG9jLmg+Cj4gI2luY2x1ZGUgImhvc3Rmcy5oIgo+ICNpbmNsdWRlIDx1dGltZS5o Pgo+IAo+ICtpbnQgdXNlX3hhdHRyOwo+ICsKPiBzdGF0aWMgdm9pZCBzdGF0NjRfdG9faG9zdGZz KGNvbnN0IHN0cnVjdCBzdGF0NjQgKmJ1Ziwgc3RydWN0IGhvc3Rmc19zdGF0ICpwKQo+IHsKPiAJ cC0+aW5vID0gYnVmLT5zdF9pbm87Cj4gQEAgLTM4LDcgKzQzLDE4NCBAQCBzdGF0aWMgdm9pZCBz dGF0NjRfdG9faG9zdGZzKGNvbnN0IHN0cnVjdCBzdGF0NjQgKmJ1ZiwKPiBzdHJ1Y3QgaG9zdGZz X3N0YXQgKnApCj4gCXAtPm1pbiA9IG9zX21pbm9yKGJ1Zi0+c3RfcmRldik7Cj4gfQo+IAo+IC1p bnQgc3RhdF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBob3N0ZnNfc3RhdCAqcCwgaW50 IGZkKQo+ICtzdGF0aWMgaW50IHVtbF9jaG93bihjb25zdCBjaGFyICpwYXRobmFtZSwgdWlkX3Qg b3duZXIsIGdpZF90IGdyb3VwLAo+ICsJCQkJCQkJaW50IG1udF91c2VfeGF0dHIpCj4gK3sKPiAr CWludCB4YXR0ciA9IChtbnRfdXNlX3hhdHRyID09IC0xKSA/IHVzZV94YXR0ciA6IG1udF91c2Vf eGF0dHI7CgpBdCB0aGlzIGxldmVsIHlvdSBzaG91bGQgbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4g YSBmbGFnIHNldCBhdCBtb3VudCB0aW1lIG9yIGdsb2JhbGx5LgpVc2Ugb25lIHZhcmlhYmxlIGFu ZCBzZXQgaXQgYXQgbW91bnQgdGltZS4KZS5nLiB0aGUgZ2xvYmFsIG1vZHVsZSBmbGFnIGlzIHRo ZSBkZWZhdWx0IGFuZCBhIG1vdW50IG9wdGlvbiBjYW4gb3ZlcnJpZGUgaXQuCgo+ICsJLyogMTAg ZGlnaXRzIHVpZCwgMTAgZGlnaXRzIGdpZCwgbnVsbCBieXRlIGFuZCAnLCcgKi8KPiArCWNoYXIg dW1sY3JlZFsyMl07Cj4gKwkvKiBtYXhfZ2lkPTQyOTQ5NjcyOTUgLSAxMCBkaWdpdHMgKyBudWxs IGJ5dGUgKi8KPiArCWNoYXIgZ2lkWzExXTsKPiArCWludCBpID0gMDsKPiArCj4gKwlpZiAoeGF0 dHIpIHsKPiArCQltZW1zZXQodW1sY3JlZCwgMCwgc2l6ZW9mKHVtbGNyZWQpKTsKPiArCQlnZXR4 YXR0cihwYXRobmFtZSwgInVzZXIudW1sY3JlZCIsIHVtbGNyZWQsIHNpemVvZih1bWxjcmVkKSk7 CgpZb3UgbmVlZCB0byBjaGVjayB0aGUgcmV0dXJuIGNvZGUuIFdoYXQgaWYgdGhlIHhhdHRyIGlz IG5vdCB0aGVyZT8KCj4gKwkJd2hpbGUgKHVtbGNyZWRbaV0gIT0gJywnICYmIHVtbGNyZWRbaV0g IT0gJ1wwJykKPiArCQkJaSsrOwoKV2hhdCBpZiB0aGUgeGF0dHIgY29udGFpbnMgZ2FyYmFnZSBh bmQgbm8gTlVMTCB0ZXJtaW5hdG9yPwouLi50aGVuIHlvdSBsb29wIGhlcmUgZm9yZXZlci4KCj4g KwkJdW1sY3JlZFtpXSA9ICdcMCc7Cj4gKwo+ICsJCWlmIChncm91cCA9PSAtMSkKPiArCQkJc3Ry bmNweShnaWQsICZ1bWxjcmVkW2krMV0sIHNpemVvZihnaWQpKTsKPiArCQllbHNlCj4gKwkJCXNu cHJpbnRmKGdpZCwgc2l6ZW9mKGdpZCksICIldSIsIGdyb3VwKTsKPiArCQlpZiAob3duZXIgIT0g LTEpCj4gKwkJCXNucHJpbnRmKHVtbGNyZWQsIHNpemVvZihnaWQpLCAiJXUiLCBvd25lcik7Cj4g Kwo+ICsJCXN0cmNhdCh1bWxjcmVkLCAiLCIpOwo+ICsJCXN0cm5jYXQodW1sY3JlZCwgZ2lkLCBz aXplb2YoZ2lkLTEpKTsKCkknbSByZWFsbHkgbm90IGEgZmFuIG9mIHN1Y2ggb2xkIHNjaG9vbCBD IHN0cmluZyBoYWNrZXJ5LgpDYW4ndCB5b3UgcmVhZCB1c2luZyBzc3NjYW5mKCkgYW5kIHByb2R1 Y2UgdGhlIG5ldyBzdHJpbmcgd2l0aCBzbnByaW50ZigpIG9yIHN1Y2g/Cgo+ICsJCWlmIChzZXR4 YXR0cihwYXRobmFtZSwgInVzZXIudW1sY3JlZCIsIHVtbGNyZWQsCj4gKwkJCQkJCXN0cmxlbih1 bWxjcmVkKSsxLCAwKSkKPiArCQkJcmV0dXJuIC1lcnJubzsKPiArCj4gKwkJcmV0dXJuIDA7Cj4g Kwl9Cj4gKwlpZiAoY2hvd24ocGF0aG5hbWUsIG93bmVyLCBncm91cCkpCj4gKwkJcmV0dXJuIC1l cnJubzsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHVtbF9mY2hvd24oaW50 IGZkLCB1aWRfdCBvd25lciwgZ2lkX3QgZ3JvdXAsIGludCBtbnRfdXNlX3hhdHRyKQo+ICt7Cj4g KwlpbnQgeGF0dHIgPSAobW50X3VzZV94YXR0ciA9PSAtMSkgPyB1c2VfeGF0dHIgOiBtbnRfdXNl X3hhdHRyOwo+ICsJLyogMTAgZGlnaXRzIHVpZCwgMTAgZGlnaXRzIGdpZCwgbnVsbCBieXRlIGFu ZCAnLCcgKi8KPiArCWNoYXIgdW1sY3JlZFsyMl07Cj4gKwkvKiBtYXhfZ2lkPTQyOTQ5NjcyOTUg LSAxMCBkaWdpdHMgKyBudWxsIGJ5dGUgKi8KPiArCWNoYXIgZ2lkWzExXTsKPiArCWludCBpID0g MDsKPiArCj4gKwlpZiAoeGF0dHIpIHsKPiArCQltZW1zZXQodW1sY3JlZCwgMCwgc2l6ZW9mKHVt bGNyZWQpKTsKPiArCQlmZ2V0eGF0dHIoZmQsICJ1c2VyLnVtbGNyZWQiLCB1bWxjcmVkLCBzaXpl b2YodW1sY3JlZCkpOwo+ICsKPiArCQl3aGlsZSAodW1sY3JlZFtpXSAhPSAnLCcgJiYgdW1sY3Jl ZFtpXSAhPSAnXDAnKQo+ICsJCQlpKys7Cj4gKwkJdW1sY3JlZFtpXSA9ICdcMCc7Cj4gKwo+ICsJ CWlmIChncm91cCA9PSAtMSkKPiArCQkJc3RybmNweShnaWQsICZ1bWxjcmVkW2krMV0sIHNpemVv ZihnaWQpKTsKPiArCQllbHNlCj4gKwkJCXNucHJpbnRmKGdpZCwgc2l6ZW9mKGdpZCksICIldSIs IGdyb3VwKTsKPiArCQlpZiAob3duZXIgIT0gLTEpCj4gKwkJCXNucHJpbnRmKHVtbGNyZWQsIHNp emVvZihnaWQpLCAiJXUiLCBvd25lcik7Cj4gKwo+ICsJCXN0cmNhdCh1bWxjcmVkLCAiLCIpOwo+ ICsJCXN0cm5jYXQodW1sY3JlZCwgZ2lkLCBzaXplb2YoZ2lkLTEpKTsKClBsZWFzZSBhZGQgYSBo ZWxwZXIgZnVuY3Rpb24gZm9yIGNvbW1vbiBjb2RlLgoKPiArCQlpZiAoZnNldHhhdHRyKGZkLCAi dXNlci51bWxjcmVkIiwgdW1sY3JlZCwgc3RybGVuKHVtbGNyZWQpKzEsIDApKQo+ICsJCQlyZXR1 cm4gLWVycm5vOwo+ICsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCWlmIChmY2hvd24oZmQsIG93 bmVyLCBncm91cCkpCj4gKwkJcmV0dXJuIC1lcnJubzsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHVtbF9jaG1vZChjb25zdCBjaGFyICpwYXRobmFtZSwgdW5zaWduZWQgaW50 IG1vZGUsIGludAo+IG1udF91c2VfeGF0dHIpCj4gK3sKPiArCWludCB4YXR0ciA9IChtbnRfdXNl X3hhdHRyID09IC0xKSA/IHVzZV94YXR0ciA6IG1udF91c2VfeGF0dHI7Cj4gKwlpbnQgaTsKPiAr CWNoYXIgbW9kZV9zdHJpbmdbN107CS8qIG1vZGUgaXMgMTYtYml0IC0+IG1heCA2IGRpZ2l0cyBp biBvY3RhbCAqLwo+ICsKPiArCWlmICh4YXR0cikgewo+ICsJCXN0cmNweShtb2RlX3N0cmluZywg IjAwMDAwMCIpOwo+ICsJCWkgPSBzaXplb2YobW9kZV9zdHJpbmcpIC0gMTsKPiArCQl3aGlsZSAo bW9kZSA+IDApIHsKPiArCQkJbW9kZV9zdHJpbmdbaV0gPSAobW9kZSAlIDgpICsgJzAnOwo+ICsJ CQltb2RlID0gbW9kZSAvIDg7Cj4gKwkJCWktLTsKPiArCQl9Cgprc3RydG9pbnQoKT8KCj4gKwkJ aWYgKHNldHhhdHRyKHBhdGhuYW1lLCAidXNlci51bWxtb2RlIiwgbW9kZV9zdHJpbmcsCj4gKwkJ CQkJCSAgICAgICBzaXplb2YobW9kZV9zdHJpbmcpLCAwKSkKClNvIHdlIGhhdmUgdXNlci51bWxj cmVkIGFuZCB1c2VyLnVtbG1vZGUgeGF0dHJzIG9uIHRoZSBob3N0IHNpZGUuCldoeSBub3QganVz dCBvbmUgeGF0dHI/Cgo+ICsJCQlyZXR1cm4gLWVycm5vOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ ICsJaWYgKGNobW9kKHBhdGhuYW1lLCBtb2RlKSkKPiArCQlyZXR1cm4gLWVycm5vOwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdW1sX2ZjaG1vZChpbnQgZmQsIHVuc2lnbmVk IGludCBtb2RlLCBpbnQgbW50X3VzZV94YXR0cikKPiArewo+ICsJaW50IHhhdHRyID0gKG1udF91 c2VfeGF0dHIgPT0gLTEpID8gdXNlX3hhdHRyIDogbW50X3VzZV94YXR0cjsKPiArCWludCBpOwo+ ICsJY2hhciBtb2RlX3N0cmluZ1s3XTsJLyogbW9kZSBpcyAxNi1iaXQgLT4gbWF4IDYgZGlnaXRz IGluIG9jdGFsICovCj4gKwo+ICsJaWYgKHhhdHRyKSB7Cj4gKwkJc3RyY3B5KG1vZGVfc3RyaW5n LCAiMDAwMDAwIik7Cj4gKwkJaSA9IHNpemVvZihtb2RlX3N0cmluZykgLSAxOwo+ICsJCXdoaWxl IChtb2RlID4gMCkgewo+ICsJCQltb2RlX3N0cmluZ1tpXSA9IChtb2RlICUgOCkgKyAnMCc7Cj4g KwkJCW1vZGUgPSBtb2RlIC8gODsKPiArCQkJaS0tOwo+ICsJCX0KPiArCQlpZiAoZnNldHhhdHRy KGZkLCAidXNlci51bWxtb2RlIiwgbW9kZV9zdHJpbmcsCj4gKwkJCQkJCSAgc2l6ZW9mKG1vZGVf c3RyaW5nKSwgMCkpCj4gKwkJCXJldHVybiAtZXJybm87Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4g KwlpZiAoZmNobW9kKGZkLCBtb2RlKSkKPiArCQlyZXR1cm4gLWVycm5vOwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHJlYWRfcGVybWlzc2lvbnMoY29uc3QgY2hhciAqcGF0 aCwgc3RydWN0IHN0YXQ2NCAqcCwKPiArCQkJCQkJCWludCBtbnRfdXNlX3hhdHRyKQo+ICt7Cj4g Kwl1bnNpZ25lZCBpbnQgbW9kZSA9IDAsIGk7Cj4gKwljaGFyIG1vZGVfc3RyaW5nWzddLCB1bWxj cmVkWzIyXTsKPiArCWludCB4YXR0ciA9IChtbnRfdXNlX3hhdHRyID09IC0xKSA/IHVzZV94YXR0 ciA6IG1udF91c2VfeGF0dHI7Cj4gKwo+ICsJaWYgKCF4YXR0cikKPiArCQlyZXR1cm47Cj4gKwo+ ICsJaWYgKGdldHhhdHRyKHBhdGgsICJ1c2VyLnVtbG1vZGUiLCBtb2RlX3N0cmluZywgc2l6ZW9m KG1vZGVfc3RyaW5nKSkgIT0gLTEpIHsKPiArCQlpID0gMDsKPiArCQl3aGlsZSAobW9kZV9zdHJp bmdbaV0gIT0gJ1wwJykgewo+ICsJCQltb2RlICo9IDg7Cj4gKwkJCW1vZGUgKz0gbW9kZV9zdHJp bmdbaV0gLSAnMCc7Cj4gKwkJCWkrKzsKPiArCQl9Cj4gKwkJcC0+c3RfbW9kZSA9IG1vZGU7Cj4g Kwl9Cj4gKwo+ICsJaWYgKGdldHhhdHRyKHBhdGgsICJ1c2VyLnVtbGNyZWQiLCB1bWxjcmVkLCBz aXplb2YodW1sY3JlZCkpICE9IC0xKSB7Cj4gKwkJaSA9IDA7Cj4gKwkJd2hpbGUgKHVtbGNyZWRb aV0gIT0gJywnKQo+ICsJCQlpKys7Cj4gKwkJdW1sY3JlZFtpXSA9ICdcMCc7Cj4gKwo+ICsJCWlm IChzdHJsZW4odW1sY3JlZCkgPiAwKQo+ICsJCQlwLT5zdF91aWQgPSBhdG9pKHVtbGNyZWQpOwo+ ICsJCWlmIChzdHJsZW4oJnVtbGNyZWRbaSsxXSkgPiAwKQo+ICsJCQlwLT5zdF9naWQgPSBhdG9p KCZ1bWxjcmVkW2krMV0pOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgbG9uZyBpc19zZXRfZ2lk KGNvbnN0IGNoYXIgKnBhdGgsIGludCBtbnRfdXNlX3hhdHRyKQo+ICt7Cj4gKwlpbnQgaSA9IHN0 cmxlbihwYXRoKSArIDE7Cj4gKwljaGFyICpwYXJlbnQgPSB1bWxfa21hbGxvYyhpLCBVTV9HRlBf S0VSTkVMKTsKPiArCXN0cnVjdCBzdGF0NjQgYnVmID0geyAwIH07Cj4gKwo+ICsJaWYgKHBhcmVu dCA9PSBOVUxMKQo+ICsJCXJldHVybiAtMTsKPiArCXN0cmNweShwYXJlbnQsIHBhdGgpOwo+ICsJ aSA9IGkgLSAzOwo+ICsJd2hpbGUgKHBhcmVudFtpXSAhPSAnLycpCj4gKwkJaS0tOwo+ICsJcGFy ZW50W2ldID0gJ1wwJzsKPiArCj4gKwlzdGF0NjQocGFyZW50LCAmYnVmKTsKPiArCXJlYWRfcGVy bWlzc2lvbnMocGFyZW50LCAmYnVmLCBtbnRfdXNlX3hhdHRyKTsKPiArCWtmcmVlKHBhcmVudCk7 Cj4gKwlpZiAoYnVmLnN0X21vZGUgJiBTX0lTR0lEKQo+ICsJCXJldHVybiBidWYuc3RfZ2lkOwo+ ICsJcmV0dXJuIC0xOwo+ICt9Cj4gKwo+ICtpbnQgc3RhdF9maWxlKGNvbnN0IGNoYXIgKnBhdGgs IHN0cnVjdCBob3N0ZnNfc3RhdCAqcCwgaW50IGZkLCBpbnQKPiBtbnRfdXNlX3hhdHRyKQo+IHsK PiAJc3RydWN0IHN0YXQ2NCBidWY7Cj4gCj4gQEAgLTQ4LDYgKzIzMCw3IEBAIGludCBzdGF0X2Zp bGUoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGhvc3Rmc19zdGF0ICpwLCBpbnQKPiBmZCkKPiAJ fSBlbHNlIGlmIChsc3RhdDY0KHBhdGgsICZidWYpIDwgMCkgewo+IAkJcmV0dXJuIC1lcnJubzsK PiAJfQo+ICsJcmVhZF9wZXJtaXNzaW9ucyhwYXRoLCAmYnVmLCBtbnRfdXNlX3hhdHRyKTsKPiAJ c3RhdDY0X3RvX2hvc3RmcygmYnVmLCBwKTsKPiAJcmV0dXJuIDA7Cj4gfQo+IEBAIC0xODEsNDQg KzM2NCw2MCBAQCB2b2lkIGNsb3NlX2Rpcih2b2lkICpzdHJlYW0pCj4gCWNsb3NlZGlyKHN0cmVh bSk7Cj4gfQo+IAo+IC1pbnQgZmlsZV9jcmVhdGUoY2hhciAqbmFtZSwgaW50IG1vZGUpCj4gK2lu dCBmaWxlX2NyZWF0ZShjaGFyICpuYW1lLCBpbnQgbW9kZSwgdWlkX3QgdWlkLCBnaWRfdCBnaWQs IGludCBtbnRfdXNlX3hhdHRyKQo+IHsKPiAJaW50IGZkOwo+ICsJbG9uZyByZXQ7Cj4gCj4gCWZk ID0gb3BlbjY0KG5hbWUsIE9fQ1JFQVQgfCBPX1JEV1IsIG1vZGUpOwo+IAlpZiAoZmQgPCAwKQo+ IAkJcmV0dXJuIC1lcnJubzsKPiArCj4gKwlyZXQgPSBpc19zZXRfZ2lkKG5hbWUsIG1udF91c2Vf eGF0dHIpOwo+ICsJaWYgKHJldCAhPSAtMSkKPiArCQlnaWQgPSByZXQ7Cj4gKwl1bWxfY2hvd24o bmFtZSwgdWlkLCBnaWQsIG1udF91c2VfeGF0dHIpOwo+IAlyZXR1cm4gZmQ7Cj4gfQo+IAo+IC1p bnQgc2V0X2F0dHIoY29uc3QgY2hhciAqZmlsZSwgc3RydWN0IGhvc3Rmc19pYXR0ciAqYXR0cnMs IGludCBmZCkKPiAraW50IHNldF9hdHRyKGNvbnN0IGNoYXIgKmZpbGUsIHN0cnVjdCBob3N0ZnNf aWF0dHIgKmF0dHJzLCBpbnQgZmQsCj4gKwkJCQkJCQkgICAgIGludCBtbnRfdXNlX3hhdHRyKQo+ IHsKPiAJc3RydWN0IGhvc3Rmc19zdGF0IHN0Owo+IAlzdHJ1Y3QgdGltZXZhbCB0aW1lc1syXTsK PiAtCWludCBlcnIsIG1hOwo+ICsJaW50IGVyciwgbWEsIHJldDsKPiAKPiAJaWYgKGF0dHJzLT5p YV92YWxpZCAmIEhPU1RGU19BVFRSX01PREUpIHsKPiAJCWlmIChmZCA+PSAwKSB7Cj4gLQkJCWlm IChmY2htb2QoZmQsIGF0dHJzLT5pYV9tb2RlKSAhPSAwKQo+IC0JCQkJcmV0dXJuIC1lcnJubzsK PiAtCQl9IGVsc2UgaWYgKGNobW9kKGZpbGUsIGF0dHJzLT5pYV9tb2RlKSAhPSAwKSB7Cj4gLQkJ CXJldHVybiAtZXJybm87Cj4gKwkJCXJldCA9IHVtbF9mY2htb2QoZmQsIGF0dHJzLT5pYV9tb2Rl LCBtbnRfdXNlX3hhdHRyKTsKPiArCQkJaWYgKHJldCAhPSAwKQo+ICsJCQkJcmV0dXJuIHJldDsK PiArCQl9IGVsc2Ugewo+ICsJCQlyZXQgPSB1bWxfY2htb2QoZmlsZSwgYXR0cnMtPmlhX21vZGUs IG1udF91c2VfeGF0dHIpOwo+ICsJCQlpZiAocmV0ICE9IDApCj4gKwkJCQlyZXR1cm4gcmV0Owo+ IAkJfQo+IAl9Cj4gCWlmIChhdHRycy0+aWFfdmFsaWQgJiBIT1NURlNfQVRUUl9VSUQpIHsKPiAJ CWlmIChmZCA+PSAwKSB7Cj4gLQkJCWlmIChmY2hvd24oZmQsIGF0dHJzLT5pYV91aWQsIC0xKSkK PiAtCQkJCXJldHVybiAtZXJybm87Cj4gLQkJfSBlbHNlIGlmIChjaG93bihmaWxlLCBhdHRycy0+ aWFfdWlkLCAtMSkpIHsKPiAtCQkJcmV0dXJuIC1lcnJubzsKPiArCQkJcmV0ID0gdW1sX2ZjaG93 bihmZCwgYXR0cnMtPmlhX3VpZCwgLTEsIG1udF91c2VfeGF0dHIpOwo+ICsJCQlpZiAocmV0ICE9 IDApCj4gKwkJCQlyZXR1cm4gcmV0Owo+ICsJCX0gZWxzZSB7Cj4gKwkJCXJldCA9IHVtbF9jaG93 bihmaWxlLCBhdHRycy0+aWFfdWlkLCAtMSwgbW50X3VzZV94YXR0cik7Cj4gKwkJCWlmIChyZXQg IT0gMCkKPiArCQkJCXJldHVybiByZXQ7Cj4gCQl9Cj4gCX0KPiAJaWYgKGF0dHJzLT5pYV92YWxp ZCAmIEhPU1RGU19BVFRSX0dJRCkgewo+IAkJaWYgKGZkID49IDApIHsKPiAtCQkJaWYgKGZjaG93 bihmZCwgLTEsIGF0dHJzLT5pYV9naWQpKQo+IC0JCQkJcmV0dXJuIC1lcnJubzsKPiAtCQl9IGVs c2UgaWYgKGNob3duKGZpbGUsIC0xLCBhdHRycy0+aWFfZ2lkKSkgewo+IC0JCQlyZXR1cm4gLWVy cm5vOwo+ICsJCQlyZXQgPSB1bWxfZmNob3duKGZkLCAtMSwgYXR0cnMtPmlhX2dpZCwgbW50X3Vz ZV94YXR0cik7Cj4gKwkJCWlmIChyZXQgIT0gMCkKPiArCQkJCXJldHVybiByZXQ7Cj4gKwkJfSBl bHNlIHsKPiArCQkJcmV0ID0gdW1sX2Nob3duKGZpbGUsIC0xLCBhdHRycy0+aWFfZ2lkLCBtbnRf dXNlX3hhdHRyKTsKPiArCQkJaWYgKHJldCAhPSAwKQo+ICsJCQkJcmV0dXJuIHJldDsKPiAJCX0K PiAJfQo+IAlpZiAoYXR0cnMtPmlhX3ZhbGlkICYgSE9TVEZTX0FUVFJfU0laRSkgewo+IEBAIC0y MzcsNyArNDM2LDcgQEAgaW50IHNldF9hdHRyKGNvbnN0IGNoYXIgKmZpbGUsIHN0cnVjdCBob3N0 ZnNfaWF0dHIgKmF0dHJzLAo+IGludCBmZCkKPiAJICovCj4gCW1hID0gKEhPU1RGU19BVFRSX0FU SU1FX1NFVCB8IEhPU1RGU19BVFRSX01USU1FX1NFVCk7Cj4gCWlmIChhdHRycy0+aWFfdmFsaWQg JiBtYSkgewo+IC0JCWVyciA9IHN0YXRfZmlsZShmaWxlLCAmc3QsIGZkKTsKPiArCQllcnIgPSBz dGF0X2ZpbGUoZmlsZSwgJnN0LCBmZCwgbW50X3VzZV94YXR0cik7Cj4gCQlpZiAoZXJyICE9IDAp Cj4gCQkJcmV0dXJuIGVycjsKPiAKPiBAQCAtMjY1LDcgKzQ2NCw3IEBAIGludCBzZXRfYXR0cihj b25zdCBjaGFyICpmaWxlLCBzdHJ1Y3QgaG9zdGZzX2lhdHRyICphdHRycywKPiBpbnQgZmQpCj4g Cj4gCS8qIE5vdGU6IGN0aW1lIGlzIG5vdCBoYW5kbGVkICovCj4gCWlmIChhdHRycy0+aWFfdmFs aWQgJiAoSE9TVEZTX0FUVFJfQVRJTUUgfCBIT1NURlNfQVRUUl9NVElNRSkpIHsKPiAtCQllcnIg PSBzdGF0X2ZpbGUoZmlsZSwgJnN0LCBmZCk7Cj4gKwkJZXJyID0gc3RhdF9maWxlKGZpbGUsICZz dCwgZmQsIG1udF91c2VfeGF0dHIpOwo+IAkJYXR0cnMtPmlhX2F0aW1lID0gc3QuYXRpbWU7Cj4g CQlhdHRycy0+aWFfbXRpbWUgPSBzdC5tdGltZTsKPiAJCWlmIChlcnIgIT0gMCkKPiBAQCAtMjk0 LDEzICs0OTMsMTggQEAgaW50IHVubGlua19maWxlKGNvbnN0IGNoYXIgKmZpbGUpCj4gCXJldHVy biAwOwo+IH0KPiAKPiAtaW50IGRvX21rZGlyKGNvbnN0IGNoYXIgKmZpbGUsIGludCBtb2RlKQo+ ICtpbnQgZG9fbWtkaXIoY29uc3QgY2hhciAqZmlsZSwgaW50IG1vZGUsIHVpZF90IHVpZCwgZ2lk X3QgZ2lkLCBpbnQKPiBtbnRfdXNlX3hhdHRyKQo+IHsKPiAJaW50IGVycjsKPiArCWxvbmcgcmV0 Owo+IAo+IAllcnIgPSBta2RpcihmaWxlLCBtb2RlKTsKPiAJaWYgKGVycikKPiAJCXJldHVybiAt ZXJybm87Cj4gKwlyZXQgPSBpc19zZXRfZ2lkKGZpbGUsIG1udF91c2VfeGF0dHIpOwo+ICsJaWYg KHJldCAhPSAtMSkKPiArCQlnaWQgPSByZXQ7Cj4gKwl1bWxfY2hvd24oZmlsZSwgdWlkLCBnaWQs IG1udF91c2VfeGF0dHIpOwo+IAlyZXR1cm4gMDsKPiB9Cj4gCj4gLS0KPiAyLjM5LjIKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LXVtIG1haWxp bmcgbGlzdApsaW51eC11bUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRl YWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtdW0K