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=-13.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED 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 350DCC433ED for ; Thu, 8 Apr 2021 19:10:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id EEA5761103 for ; Thu, 8 Apr 2021 19:10:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232990AbhDHTKd convert rfc822-to-8bit (ORCPT ); Thu, 8 Apr 2021 15:10:33 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:50728 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232969AbhDHTKd (ORCPT ); Thu, 8 Apr 2021 15:10:33 -0400 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: krisman) with ESMTPSA id 4F58F1F46053 From: Gabriel Krisman Bertazi To: Shreeya Patel Cc: tytso@mit.edu, adilger.kernel@dilger.ca, jaegeuk@kernel.org, chao@kernel.org, ebiggers@google.com, drosen@google.com, ebiggers@kernel.org, yuchao0@huawei.com, linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, linux-fsdevel@vger.kernel.org, kernel@collabora.com, andre.almeida@collabora.com Subject: Re: [PATCH v7 4/4] fs: unicode: Add utf8 module and a unicode layer Organization: Collabora References: <20210407144845.53266-1-shreeya.patel@collabora.com> <20210407144845.53266-5-shreeya.patel@collabora.com> Date: Thu, 08 Apr 2021 15:10:16 -0400 In-Reply-To: <20210407144845.53266-5-shreeya.patel@collabora.com> (Shreeya Patel's message of "Wed, 7 Apr 2021 20:18:45 +0530") Message-ID: <875z0wvbhj.fsf@collabora.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8BIT Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org Shreeya Patel writes: > utf8data.h_shipped has a large database table which is an auto-generated > decodification trie for the unicode normalization functions. > It is not necessary to load this large table in the kernel if no > filesystem is using it, hence make UTF-8 encoding loadable by converting > it into a module. > > Modify the file called unicode-core which will act as a layer for > unicode subsystem. It will load the UTF-8 module and access it's functions > whenever any filesystem that needs unicode is mounted. > Currently, only UTF-8 encoding is supported but if any other encodings > are supported in future then the layer file would be responsible for > loading the desired encoding module. > > Also, indirect calls using function pointers are slow, use static calls to > avoid overhead caused in case of repeated indirect calls. Static calls > improves the performance by directly calling the functions as opposed to > indirect calls. > > Signed-off-by: Shreeya Patel > --- > Changes in v7 > - Update the help text in Kconfig > - Handle the unicode_load_static_call function failure by decrementing > the reference. > - Correct the code for handling built-in utf8 option as well. > - Correct the synchronization for accessing utf8mod. > - Make changes to unicode_unload() for handling the situation where > utf8mod != NULL and um == NULL. > > Changes in v6 > - Add spinlock to protect utf8mod and avoid NULL pointer > dereference. > - Change the static call function names for being consistent with > kernel coding style. > - Merge the unicode_load_module function with unicode_load as it is > not really needed to have a separate function. > - Use try_then_module_get instead of module_get to avoid loading the > module even when it is already loaded. > - Improve the commit message. > > Changes in v5 > - Rename global variables and default static call functions for better > understanding > - Make only config UNICODE_UTF8 visible and config UNICODE to be always > enabled provided UNICODE_UTF8 is enabled. > - Improve the documentation for Kconfig > - Improve the commit message. > > Changes in v4 > - Return error from the static calls instead of doing nothing and > succeeding even without loading the module. > - Remove the complete usage of utf8_ops and use static calls at all > places. > - Restore the static calls to default values when module is unloaded. > - Decrement the reference of module after calling the unload function. > - Remove spinlock as there will be no race conditions after removing > utf8_ops. > > Changes in v3 > - Add a patch which checks if utf8 is loaded before calling utf8_unload() > in ext4 and f2fs filesystems > - Return error if strscpy() returns value < 0 > - Correct the conditions to prevent NULL pointer dereference while > accessing functions via utf8_ops variable. > - Add spinlock to avoid race conditions. > - Use static_call() for preventing speculative execution attacks. > > Changes in v2 > - Remove the duplicate file from the last patch. > - Make the wrapper functions inline. > - Remove msleep and use try_module_get() and module_put() > for ensuring that module is loaded correctly and also > doesn't get unloaded while in use. > - Resolve the warning reported by kernel test robot. > - Resolve all the checkpatch.pl warnings. > > fs/unicode/Kconfig | 26 +++- > fs/unicode/Makefile | 5 +- > fs/unicode/unicode-core.c | 297 ++++++++++++++------------------------ > fs/unicode/unicode-utf8.c | 264 +++++++++++++++++++++++++++++++++ > include/linux/unicode.h | 96 ++++++++++-- > 5 files changed, 483 insertions(+), 205 deletions(-) > create mode 100644 fs/unicode/unicode-utf8.c > > diff --git a/fs/unicode/Kconfig b/fs/unicode/Kconfig > index 2c27b9a5cd6c..0c69800a2a37 100644 > --- a/fs/unicode/Kconfig > +++ b/fs/unicode/Kconfig > @@ -2,13 +2,31 @@ > # > # UTF-8 normalization > # > +# CONFIG_UNICODE will be automatically enabled if CONFIG_UNICODE_UTF8 > +# is enabled. This config option adds the unicode subsystem layer which loads > +# the UTF-8 module whenever any filesystem needs it. > config UNICODE > - bool "UTF-8 normalization and casefolding support" > + bool > + > +config UNICODE_UTF8 > + tristate "UTF-8 module" "UTF-8 module" is the text that will appear in menuconfig and other configuration utilities. This string not very helpful to describe what this code is about or why it is different from NLS_utf8. People come to this option looking for the case-insensitive feature in ext4, so I'd prefer to keep the mention to 'casefolding'. or even improve the original a bit to say: tristate: "UTF-8 support for native Case-Insensitive filesystems" Other than these and what Eric mentioned, the code looks good to me. I gave this series a try and it seems to work fine. It does raise a new warning, though /home/krisman/src/linux/fs/unicode/unicode-core.c: In function ‘unicode_load’: /home/krisman/src/linux/include/linux/kmod.h:28:8: warning: the omitted middle operand in ‘?:’ will always be ‘true’, suggest explicit middle operand [-Wparentheses] 28 | ((x) ?: (__request_module(true, mod), (x))) | ^ /home/krisman/src/linux/fs/unicode/unicode-core.c:123:7: note: in expansion of macro ‘try_then_request_module’ 123 | if (!try_then_request_module(utf8mod_get(), "utf8")) { But in this specific case, i think gcc is just being silly. What would be the right way to avoid it? -- Gabriel Krisman Bertazi 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=-13.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED 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 E1AC8C433ED for ; Thu, 8 Apr 2021 19:10:44 +0000 (UTC) Received: from lists.sourceforge.net (lists.sourceforge.net [216.105.38.7]) (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 6A301610FB for ; Thu, 8 Apr 2021 19:10:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6A301610FB Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=collabora.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=linux-f2fs-devel-bounces@lists.sourceforge.net Received: from [127.0.0.1] (helo=sfs-ml-2.v29.lw.sourceforge.com) by sfs-ml-2.v29.lw.sourceforge.com with esmtp (Exim 4.92.3) (envelope-from ) id 1lUa38-0002Q3-QX; Thu, 08 Apr 2021 19:10:42 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-2.v29.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92.3) (envelope-from ) id 1lUa36-0002Pu-FJ for linux-f2fs-devel@lists.sourceforge.net; Thu, 08 Apr 2021 19:10:40 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:Content-Type:MIME-Version :Message-ID:In-Reply-To:Date:References:Subject:Cc:To:From:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=0ZDcm9DH7O+UOmw6KCtMqHYsTSVZO8IiWmjD2xeGTq0=; b=V4zVLN5XnCDEIovDRtubNR566i /njEls6jmTb7OoNQn61srbvsEwvtaJVgH8+5uz4Bp/vYYELyDVcyhVL4aFR74UIiR8nJH2juAHBD6 osaF+7HRvwXBdjRjwbF27sQ3ES53YmGc0C0CTWRtBDppa3oSBN2ROxR68EXHaIZFB5Tc=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:Content-Type:MIME-Version:Message-ID: In-Reply-To:Date:References:Subject:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=0ZDcm9DH7O+UOmw6KCtMqHYsTSVZO8IiWmjD2xeGTq0=; b=EbH85sF7tIxIdi28rvYX2F/KEy fmCer67gu0ERY2PTV35Fw8CCP9Z7osFO5XuPGXmaIybbk/uv7n+tvdxCAqJIem/wo9o/gLQmRkWHl 9Q1wFL8mC1fVhXUUrPXjBmhNKcNqL8Sj/tSFjnAPsmSblYPruWviDGPhsviALrDL4eIs=; Received: from bhuna.collabora.co.uk ([46.235.227.227]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92.3) id 1lUa2s-0005rL-SF for linux-f2fs-devel@lists.sourceforge.net; Thu, 08 Apr 2021 19:10:40 +0000 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: krisman) with ESMTPSA id 4F58F1F46053 From: Gabriel Krisman Bertazi To: Shreeya Patel Organization: Collabora References: <20210407144845.53266-1-shreeya.patel@collabora.com> <20210407144845.53266-5-shreeya.patel@collabora.com> Date: Thu, 08 Apr 2021 15:10:16 -0400 In-Reply-To: <20210407144845.53266-5-shreeya.patel@collabora.com> (Shreeya Patel's message of "Wed, 7 Apr 2021 20:18:45 +0530") Message-ID: <875z0wvbhj.fsf@collabora.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 X-Headers-End: 1lUa2s-0005rL-SF Subject: Re: [f2fs-dev] [PATCH v7 4/4] fs: unicode: Add utf8 module and a unicode layer X-BeenThere: linux-f2fs-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: tytso@mit.edu, drosen@google.com, ebiggers@google.com, linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, ebiggers@kernel.org, kernel@collabora.com, adilger.kernel@dilger.ca, linux-fsdevel@vger.kernel.org, jaegeuk@kernel.org, andre.almeida@collabora.com, linux-ext4@vger.kernel.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net U2hyZWV5YSBQYXRlbCA8c2hyZWV5YS5wYXRlbEBjb2xsYWJvcmEuY29tPiB3cml0ZXM6Cgo+IHV0 ZjhkYXRhLmhfc2hpcHBlZCBoYXMgYSBsYXJnZSBkYXRhYmFzZSB0YWJsZSB3aGljaCBpcyBhbiBh dXRvLWdlbmVyYXRlZAo+IGRlY29kaWZpY2F0aW9uIHRyaWUgZm9yIHRoZSB1bmljb2RlIG5vcm1h bGl6YXRpb24gZnVuY3Rpb25zLgo+IEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gbG9hZCB0aGlzIGxh cmdlIHRhYmxlIGluIHRoZSBrZXJuZWwgaWYgbm8KPiBmaWxlc3lzdGVtIGlzIHVzaW5nIGl0LCBo ZW5jZSBtYWtlIFVURi04IGVuY29kaW5nIGxvYWRhYmxlIGJ5IGNvbnZlcnRpbmcKPiBpdCBpbnRv IGEgbW9kdWxlLgo+Cj4gTW9kaWZ5IHRoZSBmaWxlIGNhbGxlZCB1bmljb2RlLWNvcmUgd2hpY2gg d2lsbCBhY3QgYXMgYSBsYXllciBmb3IKPiB1bmljb2RlIHN1YnN5c3RlbS4gSXQgd2lsbCBsb2Fk IHRoZSBVVEYtOCBtb2R1bGUgYW5kIGFjY2VzcyBpdCdzIGZ1bmN0aW9ucwo+IHdoZW5ldmVyIGFu eSBmaWxlc3lzdGVtIHRoYXQgbmVlZHMgdW5pY29kZSBpcyBtb3VudGVkLgo+IEN1cnJlbnRseSwg b25seSBVVEYtOCBlbmNvZGluZyBpcyBzdXBwb3J0ZWQgYnV0IGlmIGFueSBvdGhlciBlbmNvZGlu Z3MKPiBhcmUgc3VwcG9ydGVkIGluIGZ1dHVyZSB0aGVuIHRoZSBsYXllciBmaWxlIHdvdWxkIGJl IHJlc3BvbnNpYmxlIGZvcgo+IGxvYWRpbmcgdGhlIGRlc2lyZWQgZW5jb2RpbmcgbW9kdWxlLgo+ Cj4gQWxzbywgaW5kaXJlY3QgY2FsbHMgdXNpbmcgZnVuY3Rpb24gcG9pbnRlcnMgYXJlIHNsb3cs IHVzZSBzdGF0aWMgY2FsbHMgdG8KPiBhdm9pZCBvdmVyaGVhZCBjYXVzZWQgaW4gY2FzZSBvZiBy ZXBlYXRlZCBpbmRpcmVjdCBjYWxscy4gU3RhdGljIGNhbGxzCj4gaW1wcm92ZXMgdGhlIHBlcmZv cm1hbmNlIGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIGZ1bmN0aW9ucyBhcyBvcHBvc2VkIHRvCj4g aW5kaXJlY3QgY2FsbHMuCj4KPiBTaWduZWQtb2ZmLWJ5OiBTaHJlZXlhIFBhdGVsIDxzaHJlZXlh LnBhdGVsQGNvbGxhYm9yYS5jb20+Cj4gLS0tCj4gQ2hhbmdlcyBpbiB2Nwo+ICAgLSBVcGRhdGUg dGhlIGhlbHAgdGV4dCBpbiBLY29uZmlnCj4gICAtIEhhbmRsZSB0aGUgdW5pY29kZV9sb2FkX3N0 YXRpY19jYWxsIGZ1bmN0aW9uIGZhaWx1cmUgYnkgZGVjcmVtZW50aW5nCj4gICAgIHRoZSByZWZl cmVuY2UuCj4gICAtIENvcnJlY3QgdGhlIGNvZGUgZm9yIGhhbmRsaW5nIGJ1aWx0LWluIHV0Zjgg b3B0aW9uIGFzIHdlbGwuCj4gICAtIENvcnJlY3QgdGhlIHN5bmNocm9uaXphdGlvbiBmb3IgYWNj ZXNzaW5nIHV0Zjhtb2QuCj4gICAtIE1ha2UgY2hhbmdlcyB0byB1bmljb2RlX3VubG9hZCgpIGZv ciBoYW5kbGluZyB0aGUgc2l0dWF0aW9uIHdoZXJlCj4gICAgIHV0Zjhtb2QgIT0gTlVMTCBhbmQg dW0gPT0gTlVMTC4KPgo+IENoYW5nZXMgaW4gdjYKPiAgIC0gQWRkIHNwaW5sb2NrIHRvIHByb3Rl Y3QgdXRmOG1vZCBhbmQgYXZvaWQgTlVMTCBwb2ludGVyCj4gICAgIGRlcmVmZXJlbmNlLgo+ICAg LSBDaGFuZ2UgdGhlIHN0YXRpYyBjYWxsIGZ1bmN0aW9uIG5hbWVzIGZvciBiZWluZyBjb25zaXN0 ZW50IHdpdGgKPiAgICAga2VybmVsIGNvZGluZyBzdHlsZS4KPiAgIC0gTWVyZ2UgdGhlIHVuaWNv ZGVfbG9hZF9tb2R1bGUgZnVuY3Rpb24gd2l0aCB1bmljb2RlX2xvYWQgYXMgaXQgaXMKPiAgICAg bm90IHJlYWxseSBuZWVkZWQgdG8gaGF2ZSBhIHNlcGFyYXRlIGZ1bmN0aW9uLgo+ICAgLSBVc2Ug dHJ5X3RoZW5fbW9kdWxlX2dldCBpbnN0ZWFkIG9mIG1vZHVsZV9nZXQgdG8gYXZvaWQgbG9hZGlu ZyB0aGUKPiAgICAgbW9kdWxlIGV2ZW4gd2hlbiBpdCBpcyBhbHJlYWR5IGxvYWRlZC4KPiAgIC0g SW1wcm92ZSB0aGUgY29tbWl0IG1lc3NhZ2UuCj4KPiBDaGFuZ2VzIGluIHY1Cj4gICAtIFJlbmFt ZSBnbG9iYWwgdmFyaWFibGVzIGFuZCBkZWZhdWx0IHN0YXRpYyBjYWxsIGZ1bmN0aW9ucyBmb3Ig YmV0dGVyCj4gICAgIHVuZGVyc3RhbmRpbmcKPiAgIC0gTWFrZSBvbmx5IGNvbmZpZyBVTklDT0RF X1VURjggdmlzaWJsZSBhbmQgY29uZmlnIFVOSUNPREUgdG8gYmUgYWx3YXlzCj4gICAgIGVuYWJs ZWQgcHJvdmlkZWQgVU5JQ09ERV9VVEY4IGlzIGVuYWJsZWQuICAKPiAgIC0gSW1wcm92ZSB0aGUg ZG9jdW1lbnRhdGlvbiBmb3IgS2NvbmZpZwo+ICAgLSBJbXByb3ZlIHRoZSBjb21taXQgbWVzc2Fn ZS4KPiAgCj4gQ2hhbmdlcyBpbiB2NAo+ICAgLSBSZXR1cm4gZXJyb3IgZnJvbSB0aGUgc3RhdGlj IGNhbGxzIGluc3RlYWQgb2YgZG9pbmcgbm90aGluZyBhbmQKPiAgICAgc3VjY2VlZGluZyBldmVu IHdpdGhvdXQgbG9hZGluZyB0aGUgbW9kdWxlLgo+ICAgLSBSZW1vdmUgdGhlIGNvbXBsZXRlIHVz YWdlIG9mIHV0Zjhfb3BzIGFuZCB1c2Ugc3RhdGljIGNhbGxzIGF0IGFsbAo+ICAgICBwbGFjZXMu Cj4gICAtIFJlc3RvcmUgdGhlIHN0YXRpYyBjYWxscyB0byBkZWZhdWx0IHZhbHVlcyB3aGVuIG1v ZHVsZSBpcyB1bmxvYWRlZC4KPiAgIC0gRGVjcmVtZW50IHRoZSByZWZlcmVuY2Ugb2YgbW9kdWxl IGFmdGVyIGNhbGxpbmcgdGhlIHVubG9hZCBmdW5jdGlvbi4KPiAgIC0gUmVtb3ZlIHNwaW5sb2Nr IGFzIHRoZXJlIHdpbGwgYmUgbm8gcmFjZSBjb25kaXRpb25zIGFmdGVyIHJlbW92aW5nCj4gICAg IHV0Zjhfb3BzLgo+Cj4gQ2hhbmdlcyBpbiB2Mwo+ICAgLSBBZGQgYSBwYXRjaCB3aGljaCBjaGVj a3MgaWYgdXRmOCBpcyBsb2FkZWQgYmVmb3JlIGNhbGxpbmcgdXRmOF91bmxvYWQoKQo+ICAgICBp biBleHQ0IGFuZCBmMmZzIGZpbGVzeXN0ZW1zCj4gICAtIFJldHVybiBlcnJvciBpZiBzdHJzY3B5 KCkgcmV0dXJucyB2YWx1ZSA8IDAKPiAgIC0gQ29ycmVjdCB0aGUgY29uZGl0aW9ucyB0byBwcmV2 ZW50IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGlsZQo+ICAgICBhY2Nlc3NpbmcgZnVuY3Rp b25zIHZpYSB1dGY4X29wcyB2YXJpYWJsZS4KPiAgIC0gQWRkIHNwaW5sb2NrIHRvIGF2b2lkIHJh Y2UgY29uZGl0aW9ucy4KPiAgIC0gVXNlIHN0YXRpY19jYWxsKCkgZm9yIHByZXZlbnRpbmcgc3Bl Y3VsYXRpdmUgZXhlY3V0aW9uIGF0dGFja3MuCj4KPiBDaGFuZ2VzIGluIHYyCj4gICAtIFJlbW92 ZSB0aGUgZHVwbGljYXRlIGZpbGUgZnJvbSB0aGUgbGFzdCBwYXRjaC4KPiAgIC0gTWFrZSB0aGUg d3JhcHBlciBmdW5jdGlvbnMgaW5saW5lLgo+ICAgLSBSZW1vdmUgbXNsZWVwIGFuZCB1c2UgdHJ5 X21vZHVsZV9nZXQoKSBhbmQgbW9kdWxlX3B1dCgpCj4gICAgIGZvciBlbnN1cmluZyB0aGF0IG1v ZHVsZSBpcyBsb2FkZWQgY29ycmVjdGx5IGFuZCBhbHNvCj4gICAgIGRvZXNuJ3QgZ2V0IHVubG9h ZGVkIHdoaWxlIGluIHVzZS4KPiAgIC0gUmVzb2x2ZSB0aGUgd2FybmluZyByZXBvcnRlZCBieSBr ZXJuZWwgdGVzdCByb2JvdC4KPiAgIC0gUmVzb2x2ZSBhbGwgdGhlIGNoZWNrcGF0Y2gucGwgd2Fy bmluZ3MuCj4KPiAgZnMvdW5pY29kZS9LY29uZmlnICAgICAgICB8ICAyNiArKystCj4gIGZzL3Vu aWNvZGUvTWFrZWZpbGUgICAgICAgfCAgIDUgKy0KPiAgZnMvdW5pY29kZS91bmljb2RlLWNvcmUu YyB8IDI5NyArKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICBmcy91bmlj b2RlL3VuaWNvZGUtdXRmOC5jIHwgMjY0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kwo+ICBpbmNsdWRlL2xpbnV4L3VuaWNvZGUuaCAgIHwgIDk2ICsrKysrKysrKystLQo+ICA1IGZp bGVzIGNoYW5nZWQsIDQ4MyBpbnNlcnRpb25zKCspLCAyMDUgZGVsZXRpb25zKC0pCj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBmcy91bmljb2RlL3VuaWNvZGUtdXRmOC5jCj4KPiBkaWZmIC0tZ2l0IGEv ZnMvdW5pY29kZS9LY29uZmlnIGIvZnMvdW5pY29kZS9LY29uZmlnCj4gaW5kZXggMmMyN2I5YTVj ZDZjLi4wYzY5ODAwYTJhMzcgMTAwNjQ0Cj4gLS0tIGEvZnMvdW5pY29kZS9LY29uZmlnCj4gKysr IGIvZnMvdW5pY29kZS9LY29uZmlnCj4gQEAgLTIsMTMgKzIsMzEgQEAKPiAgIwo+ICAjIFVURi04 IG5vcm1hbGl6YXRpb24KPiAgIwo+ICsjIENPTkZJR19VTklDT0RFIHdpbGwgYmUgYXV0b21hdGlj YWxseSBlbmFibGVkIGlmIENPTkZJR19VTklDT0RFX1VURjgKPiArIyBpcyBlbmFibGVkLiBUaGlz IGNvbmZpZyBvcHRpb24gYWRkcyB0aGUgdW5pY29kZSBzdWJzeXN0ZW0gbGF5ZXIgd2hpY2ggbG9h ZHMKPiArIyB0aGUgVVRGLTggbW9kdWxlIHdoZW5ldmVyIGFueSBmaWxlc3lzdGVtIG5lZWRzIGl0 Lgo+ICBjb25maWcgVU5JQ09ERQo+IC0JYm9vbCAiVVRGLTggbm9ybWFsaXphdGlvbiBhbmQgY2Fz ZWZvbGRpbmcgc3VwcG9ydCIKPiArCWJvb2wKPiArCj4gK2NvbmZpZyBVTklDT0RFX1VURjgKPiAr CXRyaXN0YXRlICJVVEYtOCBtb2R1bGUiCgoiVVRGLTggbW9kdWxlIiBpcyB0aGUgdGV4dCB0aGF0 IHdpbGwgYXBwZWFyIGluIG1lbnVjb25maWcgYW5kIG90aGVyCmNvbmZpZ3VyYXRpb24gdXRpbGl0 aWVzLiAgVGhpcyBzdHJpbmcgbm90IHZlcnkgaGVscGZ1bCB0byBkZXNjcmliZSB3aGF0CnRoaXMg Y29kZSBpcyBhYm91dCBvciB3aHkgaXQgaXMgZGlmZmVyZW50IGZyb20gTkxTX3V0ZjguICBQZW9w bGUgY29tZSB0bwp0aGlzIG9wdGlvbiBsb29raW5nIGZvciB0aGUgY2FzZS1pbnNlbnNpdGl2ZSBm ZWF0dXJlIGluIGV4dDQsIHNvIEknZApwcmVmZXIgdG8ga2VlcCB0aGUgbWVudGlvbiB0byAnY2Fz ZWZvbGRpbmcnLiBvciBldmVuIGltcHJvdmUgdGhlCm9yaWdpbmFsIGEgYml0IHRvIHNheToKCnRy aXN0YXRlOiAiVVRGLTggc3VwcG9ydCBmb3IgbmF0aXZlIENhc2UtSW5zZW5zaXRpdmUgZmlsZXN5 c3RlbXMiCgpPdGhlciB0aGFuIHRoZXNlIGFuZCB3aGF0IEVyaWMgbWVudGlvbmVkLCB0aGUgY29k ZSBsb29rcyBnb29kIHRvIG1lLiAgSQpnYXZlIHRoaXMgc2VyaWVzIGEgdHJ5IGFuZCBpdCBzZWVt cyB0byB3b3JrIGZpbmUuCgpJdCBkb2VzIHJhaXNlIGEgbmV3IHdhcm5pbmcsIHRob3VnaAoKL2hv bWUva3Jpc21hbi9zcmMvbGludXgvZnMvdW5pY29kZS91bmljb2RlLWNvcmUuYzogSW4gZnVuY3Rp b24g4oCYdW5pY29kZV9sb2Fk4oCZOgovaG9tZS9rcmlzbWFuL3NyYy9saW51eC9pbmNsdWRlL2xp bnV4L2ttb2QuaDoyODo4OiB3YXJuaW5nOiB0aGUgb21pdHRlZCBtaWRkbGUgb3BlcmFuZCBpbiDi gJg/OuKAmSB3aWxsIGFsd2F5cyBiZSDigJh0cnVl4oCZLCBzdWdnZXN0IGV4cGxpY2l0IG1pZGRs ZSBvcGVyYW5kIFstV3BhcmVudGhlc2VzXQogICAyOCB8ICAoKHgpID86IChfX3JlcXVlc3RfbW9k dWxlKHRydWUsIG1vZCksICh4KSkpCiAgICAgIHwgICAgICAgIF4KL2hvbWUva3Jpc21hbi9zcmMv bGludXgvZnMvdW5pY29kZS91bmljb2RlLWNvcmUuYzoxMjM6Nzogbm90ZTogaW4gZXhwYW5zaW9u IG9mIG1hY3JvIOKAmHRyeV90aGVuX3JlcXVlc3RfbW9kdWxl4oCZCiAgMTIzIHwgIGlmICghdHJ5 X3RoZW5fcmVxdWVzdF9tb2R1bGUodXRmOG1vZF9nZXQoKSwgInV0ZjgiKSkgewoKQnV0IGluIHRo aXMgc3BlY2lmaWMgY2FzZSwgaSB0aGluayBnY2MgaXMganVzdCBiZWluZyBzaWxseS4gV2hhdCB3 b3VsZApiZSB0aGUgcmlnaHQgd2F5IHRvIGF2b2lkIGl0PwoKLS0gCkdhYnJpZWwgS3Jpc21hbiBC ZXJ0YXppCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K TGludXgtZjJmcy1kZXZlbCBtYWlsaW5nIGxpc3QKTGludXgtZjJmcy1kZXZlbEBsaXN0cy5zb3Vy Y2Vmb3JnZS5uZXQKaHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8v bGludXgtZjJmcy1kZXZlbAo=