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=-12.9 required=3.0 tests=BAYES_00,FORGED_MUA_MOZILLA, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,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 7DFE8C48BD1 for ; Fri, 11 Jun 2021 20:12:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5D1DF613D9 for ; Fri, 11 Jun 2021 20:12:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230443AbhFKUOJ (ORCPT ); Fri, 11 Jun 2021 16:14:09 -0400 Received: from ciao.gmane.io ([116.202.254.214]:44496 "EHLO ciao.gmane.io" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230393AbhFKUOI (ORCPT ); Fri, 11 Jun 2021 16:14:08 -0400 X-Greylist: delayed 301 seconds by postgrey-1.27 at vger.kernel.org; Fri, 11 Jun 2021 16:14:08 EDT Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1lrnQq-0009Xp-19 for linux-btrfs@vger.kernel.org; Fri, 11 Jun 2021 22:07:08 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: linux-btrfs@vger.kernel.org From: Jean-Denis Girard Subject: Re: [GIT PULL][PATCH v11 0/4] Update to zstd-1.4.10 Date: Fri, 11 Jun 2021 10:06:58 -1000 Message-ID: References: <20210430013157.747152-1-nickrterrell@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 In-Reply-To: <20210430013157.747152-1-nickrterrell@gmail.com> Content-Language: fr Cc: linux-crypto@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org Hi list, Le 29/04/2021 à 15:31, Nick Terrell a écrit : > From: Nick Terrell > > Please pull from > > git@github.com:terrelln/linux.git tags/v11-zstd-1.4.10 > > to get these changes. Alternatively the patchset is included. > > This patchset lists me as the maintainer for zstd and upgrades the zstd library > to the latest upstream release. The current zstd version in the kernel is a > modified version of upstream zstd-1.3.1. At the time it was integrated, zstd > wasn't ready to be used in the kernel as-is. But, it is now possible to use > upstream zstd directly in the kernel. > > I have not yet released zstd-1.4.10 upstream. I want the zstd version in the > kernel to match up with a known upstream release, so we know exactly what code > is running. Whenever this patchset is ready for merge, I will cut a release at > the upstream commit that gets merged. This should not be necessary for future > releases. > > The kernel zstd library is automatically generated from upstream zstd. A script > makes the necessary changes and imports it into the kernel. The changes are: > > 1. Replace all libc dependencies with kernel replacements and rewrite includes. > 2. Remove unncessary portability macros like: #if defined(_MSC_VER). > 3. Use the kernel xxhash instead of bundling it. > > This automation gets tested every commit by upstream's continuous integration. > When we cut a new zstd release, we will submit a patch to the kernel to update > the zstd version in the kernel. > > I've updated zstd to upstream with one big patch because every commit must build, > so that precludes partial updates. Since the commit is 100% generated, I hope the > review burden is lightened. I considered replaying upstream commits, but that is > not possible because there have been ~3500 upstream commits since the last zstd > import, and the commits don't all build individually. The bulk update preserves > bisectablity because bugs can be bisected to the zstd version update. At that > point the update can be reverted, and we can work with upstream to find and fix > the bug. After this big switch in how the kernel consumes zstd, future patches > will be smaller, because they will only have one upstream release worth of > changes each. > > This patchset adds a new kernel-style wrapper around zstd. This wrapper API is > functionally equivalent to the subset of the current zstd API that is currently > used. The wrapper API changes to be kernel style so that the symbols don't > collide with zstd's symbols. The update to zstd-1.4.6 maintains the same API > and preserves the semantics, so that none of the callers need to be updated. > > This patchset comes in 2 parts: > 1. The first 2 patches prepare for the zstd upgrade. The first patch adds the > new kernel style API so zstd can be upgraded without modifying any callers. > The second patch adds an indirection for the lib/decompress_unzstd.c > including of all decompression source files. > 2. Import zstd-1.4.10. This patch is completely generated from upstream using > automated tooling. > > I tested every caller of zstd on x86_64. I tested both after the 1.4.10 upgrade > using the compatibility wrapper, and after the final patch in this series. > > I tested kernel and initramfs decompression in i386 and arm. > > I ran benchmarks to compare the current zstd in the kernel with zstd-1.4.6. > I benchmarked on x86_64 using QEMU with KVM enabled on an Intel i9-9900k. > I found: > * BtrFS zstd compression at levels 1 and 3 is 5% faster > * BtrFS zstd decompression+read is 15% faster > * SquashFS zstd decompression+read is 15% faster > * F2FS zstd compression+write at level 3 is 8% faster > * F2FS zstd decompression+read is 20% faster > * ZRAM decompression+read is 30% faster > * Kernel zstd decompression is 35% faster > * Initramfs zstd decompression+build is 5% faster > > The latest zstd also offers bug fixes. For example the problem with large kernel > decompression has been fixed upstream for over 2 years > https://lkml.org/lkml/2020/9/29/27. > > Please let me know if there is anything that I can do to ease the way for these > patches. I think it is important because it gets large performance improvements, > contains bug fixes, and is switching to a more maintainable model of consuming > upstream zstd directly, making it easy to keep up to date. > > Best, > Nick Terrell I've been using this series on stable kernel since 5.12.3 (now on 5.12.10) on my main system without issues. Tested-by: Jean-Denis Girard Thanks, -- Jean-Denis Girard SysNux Systèmes Linux en Polynésie française https://www.sysnux.pf/ Tél: +689 40.50.10.40 / GSM: +689 87.797.527 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=-12.9 required=3.0 tests=BAYES_00,FORGED_MUA_MOZILLA, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=unavailable 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 64D10C48BE0 for ; Fri, 11 Jun 2021 20:25:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4C780613C6 for ; Fri, 11 Jun 2021 20:25:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229951AbhFKU1C (ORCPT ); Fri, 11 Jun 2021 16:27:02 -0400 Received: from ciao.gmane.io ([116.202.254.214]:35424 "EHLO ciao.gmane.io" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229937AbhFKU1C (ORCPT ); Fri, 11 Jun 2021 16:27:02 -0400 X-Greylist: delayed 301 seconds by postgrey-1.27 at vger.kernel.org; Fri, 11 Jun 2021 16:27:02 EDT Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1lrndK-0005WL-4K for linux-crypto@vger.kernel.org; Fri, 11 Jun 2021 22:20:02 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: linux-crypto@vger.kernel.org From: Jean-Denis Girard Subject: Re: [GIT PULL][PATCH v11 0/4] Update to zstd-1.4.10 Date: Fri, 11 Jun 2021 10:06:58 -1000 Message-ID: References: <20210430013157.747152-1-nickrterrell@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 In-Reply-To: <20210430013157.747152-1-nickrterrell@gmail.com> Content-Language: fr Cc: linux-btrfs@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org Hi list, Le 29/04/2021 à 15:31, Nick Terrell a écrit : > From: Nick Terrell > > Please pull from > > git@github.com:terrelln/linux.git tags/v11-zstd-1.4.10 > > to get these changes. Alternatively the patchset is included. > > This patchset lists me as the maintainer for zstd and upgrades the zstd library > to the latest upstream release. The current zstd version in the kernel is a > modified version of upstream zstd-1.3.1. At the time it was integrated, zstd > wasn't ready to be used in the kernel as-is. But, it is now possible to use > upstream zstd directly in the kernel. > > I have not yet released zstd-1.4.10 upstream. I want the zstd version in the > kernel to match up with a known upstream release, so we know exactly what code > is running. Whenever this patchset is ready for merge, I will cut a release at > the upstream commit that gets merged. This should not be necessary for future > releases. > > The kernel zstd library is automatically generated from upstream zstd. A script > makes the necessary changes and imports it into the kernel. The changes are: > > 1. Replace all libc dependencies with kernel replacements and rewrite includes. > 2. Remove unncessary portability macros like: #if defined(_MSC_VER). > 3. Use the kernel xxhash instead of bundling it. > > This automation gets tested every commit by upstream's continuous integration. > When we cut a new zstd release, we will submit a patch to the kernel to update > the zstd version in the kernel. > > I've updated zstd to upstream with one big patch because every commit must build, > so that precludes partial updates. Since the commit is 100% generated, I hope the > review burden is lightened. I considered replaying upstream commits, but that is > not possible because there have been ~3500 upstream commits since the last zstd > import, and the commits don't all build individually. The bulk update preserves > bisectablity because bugs can be bisected to the zstd version update. At that > point the update can be reverted, and we can work with upstream to find and fix > the bug. After this big switch in how the kernel consumes zstd, future patches > will be smaller, because they will only have one upstream release worth of > changes each. > > This patchset adds a new kernel-style wrapper around zstd. This wrapper API is > functionally equivalent to the subset of the current zstd API that is currently > used. The wrapper API changes to be kernel style so that the symbols don't > collide with zstd's symbols. The update to zstd-1.4.6 maintains the same API > and preserves the semantics, so that none of the callers need to be updated. > > This patchset comes in 2 parts: > 1. The first 2 patches prepare for the zstd upgrade. The first patch adds the > new kernel style API so zstd can be upgraded without modifying any callers. > The second patch adds an indirection for the lib/decompress_unzstd.c > including of all decompression source files. > 2. Import zstd-1.4.10. This patch is completely generated from upstream using > automated tooling. > > I tested every caller of zstd on x86_64. I tested both after the 1.4.10 upgrade > using the compatibility wrapper, and after the final patch in this series. > > I tested kernel and initramfs decompression in i386 and arm. > > I ran benchmarks to compare the current zstd in the kernel with zstd-1.4.6. > I benchmarked on x86_64 using QEMU with KVM enabled on an Intel i9-9900k. > I found: > * BtrFS zstd compression at levels 1 and 3 is 5% faster > * BtrFS zstd decompression+read is 15% faster > * SquashFS zstd decompression+read is 15% faster > * F2FS zstd compression+write at level 3 is 8% faster > * F2FS zstd decompression+read is 20% faster > * ZRAM decompression+read is 30% faster > * Kernel zstd decompression is 35% faster > * Initramfs zstd decompression+build is 5% faster > > The latest zstd also offers bug fixes. For example the problem with large kernel > decompression has been fixed upstream for over 2 years > https://lkml.org/lkml/2020/9/29/27. > > Please let me know if there is anything that I can do to ease the way for these > patches. I think it is important because it gets large performance improvements, > contains bug fixes, and is switching to a more maintainable model of consuming > upstream zstd directly, making it easy to keep up to date. > > Best, > Nick Terrell I've been using this series on stable kernel since 5.12.3 (now on 5.12.10) on my main system without issues. Tested-by: Jean-Denis Girard Thanks, -- Jean-Denis Girard SysNux Systèmes Linux en Polynésie française https://www.sysnux.pf/ Tél: +689 40.50.10.40 / GSM: +689 87.797.527 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=-12.7 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,FORGED_MUA_MOZILLA,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,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 819AFC48BD1 for ; Fri, 11 Jun 2021 20:15:28 +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 E7BE4613CF; Fri, 11 Jun 2021 20:15:27 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E7BE4613CF Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=sysnux.pf 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-4.v29.lw.sourceforge.com) by sfs-ml-4.v29.lw.sourceforge.com with esmtp (Exim 4.90_1) (envelope-from ) id 1lrnYp-00078V-Pe; Fri, 11 Jun 2021 20:15:23 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-4.v29.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lrnYn-00078J-DP for linux-f2fs-devel@lists.sourceforge.net; Fri, 11 Jun 2021 20:15:21 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Cc:In-Reply-To:Content-Transfer-Encoding: Content-Type:Mime-Version:References:Message-ID:Date:Subject:From:To: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=uKIkIheBkMZmt+Bs8HlTmLxlz0bB/KpyDWqPI/f0QVw=; b=fMEM9RGEWzRLr/B3iym1v+Phit 5dpn57W+/u/YLo6drrwiDXAKrFs3nafKE+rm996jokJk5BpYGADoKjXbg9pSgy0YQK4MJ+ggiVEKm C7fQHJ+xAakoX252gZ/z7/CJ6k0Teco1neiTLkH0EaxZYDgcW01msqERaUfC/+mEtTkQ=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Cc:In-Reply-To:Content-Transfer-Encoding:Content-Type:Mime-Version: References:Message-ID:Date:Subject:From:To: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=uKIkIheBkMZmt+Bs8HlTmLxlz0bB/KpyDWqPI/f0QVw=; b=eNnywAYqh+0PeHecc+xzq2yrET uZmw7pgdEpLmtwUpdPjaPsNv8fvIUTEWx/f3K2QoRLEyDpSmCmuDRq8FHDXEmnHthhSXVysob5gyy ltpZbpVkH1nfzJqxIV6qkRDjLu7krpIF4whGUIiCuRmigITDj43LuKrJYQHO9/dKB7iw=; Received: from ciao.gmane.io ([116.202.254.214]) by sfi-mx-1.v28.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92.3) id 1lrnYf-005Ymh-MT for linux-f2fs-devel@lists.sourceforge.net; Fri, 11 Jun 2021 20:15:24 +0000 Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1lrnYU-0009Xh-Dk for linux-f2fs-devel@lists.sourceforge.net; Fri, 11 Jun 2021 22:15:02 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: linux-f2fs-devel@lists.sourceforge.net From: Jean-Denis Girard Date: Fri, 11 Jun 2021 10:06:58 -1000 Message-ID: References: <20210430013157.747152-1-nickrterrell@gmail.com> Mime-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 In-Reply-To: <20210430013157.747152-1-nickrterrell@gmail.com> Content-Language: fr X-Headers-End: 1lrnYf-005Ymh-MT Subject: Re: [f2fs-dev] [GIT PULL][PATCH v11 0/4] Update to zstd-1.4.10 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: linux-f2fs-devel@lists.sourceforge.net, linux-crypto@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net SGkgbGlzdCwKCkxlIDI5LzA0LzIwMjEgw6AgMTU6MzEsIE5pY2sgVGVycmVsbCBhIMOpY3JpdMKg Ogo+IEZyb206IE5pY2sgVGVycmVsbCA8dGVycmVsbG5AZmIuY29tPgo+IAo+IFBsZWFzZSBwdWxs IGZyb20KPiAKPiAgICBnaXRAZ2l0aHViLmNvbTp0ZXJyZWxsbi9saW51eC5naXQgdGFncy92MTEt enN0ZC0xLjQuMTAKPiAKPiB0byBnZXQgdGhlc2UgY2hhbmdlcy4gQWx0ZXJuYXRpdmVseSB0aGUg cGF0Y2hzZXQgaXMgaW5jbHVkZWQuCj4gCj4gVGhpcyBwYXRjaHNldCBsaXN0cyBtZSBhcyB0aGUg bWFpbnRhaW5lciBmb3IgenN0ZCBhbmQgdXBncmFkZXMgdGhlIHpzdGQgbGlicmFyeQo+IHRvIHRo ZSBsYXRlc3QgdXBzdHJlYW0gcmVsZWFzZS4gVGhlIGN1cnJlbnQgenN0ZCB2ZXJzaW9uIGluIHRo ZSBrZXJuZWwgaXMgYQo+IG1vZGlmaWVkIHZlcnNpb24gb2YgdXBzdHJlYW0genN0ZC0xLjMuMS4g QXQgdGhlIHRpbWUgaXQgd2FzIGludGVncmF0ZWQsIHpzdGQKPiB3YXNuJ3QgcmVhZHkgdG8gYmUg dXNlZCBpbiB0aGUga2VybmVsIGFzLWlzLiBCdXQsIGl0IGlzIG5vdyBwb3NzaWJsZSB0byB1c2UK PiB1cHN0cmVhbSB6c3RkIGRpcmVjdGx5IGluIHRoZSBrZXJuZWwuCj4gCj4gSSBoYXZlIG5vdCB5 ZXQgcmVsZWFzZWQgenN0ZC0xLjQuMTAgdXBzdHJlYW0uIEkgd2FudCB0aGUgenN0ZCB2ZXJzaW9u IGluIHRoZQo+IGtlcm5lbCB0byBtYXRjaCB1cCB3aXRoIGEga25vd24gdXBzdHJlYW0gcmVsZWFz ZSwgc28gd2Uga25vdyBleGFjdGx5IHdoYXQgY29kZQo+IGlzIHJ1bm5pbmcuIFdoZW5ldmVyIHRo aXMgcGF0Y2hzZXQgaXMgcmVhZHkgZm9yIG1lcmdlLCBJIHdpbGwgY3V0IGEgcmVsZWFzZSBhdAo+ IHRoZSB1cHN0cmVhbSBjb21taXQgdGhhdCBnZXRzIG1lcmdlZC4gVGhpcyBzaG91bGQgbm90IGJl IG5lY2Vzc2FyeSBmb3IgZnV0dXJlCj4gcmVsZWFzZXMuCj4gCj4gVGhlIGtlcm5lbCB6c3RkIGxp YnJhcnkgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB1cHN0cmVhbSB6c3RkLiBBIHNj cmlwdAo+IG1ha2VzIHRoZSBuZWNlc3NhcnkgY2hhbmdlcyBhbmQgaW1wb3J0cyBpdCBpbnRvIHRo ZSBrZXJuZWwuIFRoZSBjaGFuZ2VzIGFyZToKPiAKPiAxLiBSZXBsYWNlIGFsbCBsaWJjIGRlcGVu ZGVuY2llcyB3aXRoIGtlcm5lbCByZXBsYWNlbWVudHMgYW5kIHJld3JpdGUgaW5jbHVkZXMuCj4g Mi4gUmVtb3ZlIHVubmNlc3NhcnkgcG9ydGFiaWxpdHkgbWFjcm9zIGxpa2U6ICNpZiBkZWZpbmVk KF9NU0NfVkVSKS4KPiAzLiBVc2UgdGhlIGtlcm5lbCB4eGhhc2ggaW5zdGVhZCBvZiBidW5kbGlu ZyBpdC4KPiAKPiBUaGlzIGF1dG9tYXRpb24gZ2V0cyB0ZXN0ZWQgZXZlcnkgY29tbWl0IGJ5IHVw c3RyZWFtJ3MgY29udGludW91cyBpbnRlZ3JhdGlvbi4KPiBXaGVuIHdlIGN1dCBhIG5ldyB6c3Rk IHJlbGVhc2UsIHdlIHdpbGwgc3VibWl0IGEgcGF0Y2ggdG8gdGhlIGtlcm5lbCB0byB1cGRhdGUK PiB0aGUgenN0ZCB2ZXJzaW9uIGluIHRoZSBrZXJuZWwuCj4gCj4gSSd2ZSB1cGRhdGVkIHpzdGQg dG8gdXBzdHJlYW0gd2l0aCBvbmUgYmlnIHBhdGNoIGJlY2F1c2UgZXZlcnkgY29tbWl0IG11c3Qg YnVpbGQsCj4gc28gdGhhdCBwcmVjbHVkZXMgcGFydGlhbCB1cGRhdGVzLiBTaW5jZSB0aGUgY29t bWl0IGlzIDEwMCUgZ2VuZXJhdGVkLCBJIGhvcGUgdGhlCj4gcmV2aWV3IGJ1cmRlbiBpcyBsaWdo dGVuZWQuIEkgY29uc2lkZXJlZCByZXBsYXlpbmcgdXBzdHJlYW0gY29tbWl0cywgYnV0IHRoYXQg aXMKPiBub3QgcG9zc2libGUgYmVjYXVzZSB0aGVyZSBoYXZlIGJlZW4gfjM1MDAgdXBzdHJlYW0g Y29tbWl0cyBzaW5jZSB0aGUgbGFzdCB6c3RkCj4gaW1wb3J0LCBhbmQgdGhlIGNvbW1pdHMgZG9u J3QgYWxsIGJ1aWxkIGluZGl2aWR1YWxseS4gVGhlIGJ1bGsgdXBkYXRlIHByZXNlcnZlcwo+IGJp c2VjdGFibGl0eSBiZWNhdXNlIGJ1Z3MgY2FuIGJlIGJpc2VjdGVkIHRvIHRoZSB6c3RkIHZlcnNp b24gdXBkYXRlLiBBdCB0aGF0Cj4gcG9pbnQgdGhlIHVwZGF0ZSBjYW4gYmUgcmV2ZXJ0ZWQsIGFu ZCB3ZSBjYW4gd29yayB3aXRoIHVwc3RyZWFtIHRvIGZpbmQgYW5kIGZpeAo+IHRoZSBidWcuIEFm dGVyIHRoaXMgYmlnIHN3aXRjaCBpbiBob3cgdGhlIGtlcm5lbCBjb25zdW1lcyB6c3RkLCBmdXR1 cmUgcGF0Y2hlcwo+IHdpbGwgYmUgc21hbGxlciwgYmVjYXVzZSB0aGV5IHdpbGwgb25seSBoYXZl IG9uZSB1cHN0cmVhbSByZWxlYXNlIHdvcnRoIG9mCj4gY2hhbmdlcyBlYWNoLgo+IAo+IFRoaXMg cGF0Y2hzZXQgYWRkcyBhIG5ldyBrZXJuZWwtc3R5bGUgd3JhcHBlciBhcm91bmQgenN0ZC4gVGhp cyB3cmFwcGVyIEFQSSBpcwo+IGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIHRoZSBzdWJzZXQg b2YgdGhlIGN1cnJlbnQgenN0ZCBBUEkgdGhhdCBpcyBjdXJyZW50bHkKPiB1c2VkLiBUaGUgd3Jh cHBlciBBUEkgY2hhbmdlcyB0byBiZSBrZXJuZWwgc3R5bGUgc28gdGhhdCB0aGUgc3ltYm9scyBk b24ndAo+IGNvbGxpZGUgd2l0aCB6c3RkJ3Mgc3ltYm9scy4gVGhlIHVwZGF0ZSB0byB6c3RkLTEu NC42IG1haW50YWlucyB0aGUgc2FtZSBBUEkKPiBhbmQgcHJlc2VydmVzIHRoZSBzZW1hbnRpY3Ms IHNvIHRoYXQgbm9uZSBvZiB0aGUgY2FsbGVycyBuZWVkIHRvIGJlIHVwZGF0ZWQuCj4gCj4gVGhp cyBwYXRjaHNldCBjb21lcyBpbiAyIHBhcnRzOgo+IDEuIFRoZSBmaXJzdCAyIHBhdGNoZXMgcHJl cGFyZSBmb3IgdGhlIHpzdGQgdXBncmFkZS4gVGhlIGZpcnN0IHBhdGNoIGFkZHMgdGhlCj4gICAg IG5ldyBrZXJuZWwgc3R5bGUgQVBJIHNvIHpzdGQgY2FuIGJlIHVwZ3JhZGVkIHdpdGhvdXQgbW9k aWZ5aW5nIGFueSBjYWxsZXJzLgo+ICAgICBUaGUgc2Vjb25kIHBhdGNoIGFkZHMgYW4gaW5kaXJl Y3Rpb24gZm9yIHRoZSBsaWIvZGVjb21wcmVzc191bnpzdGQuYwo+ICAgICBpbmNsdWRpbmcgb2Yg YWxsIGRlY29tcHJlc3Npb24gc291cmNlIGZpbGVzLgo+IDIuIEltcG9ydCB6c3RkLTEuNC4xMC4g VGhpcyBwYXRjaCBpcyBjb21wbGV0ZWx5IGdlbmVyYXRlZCBmcm9tIHVwc3RyZWFtIHVzaW5nCj4g ICAgIGF1dG9tYXRlZCB0b29saW5nLgo+IAo+IEkgdGVzdGVkIGV2ZXJ5IGNhbGxlciBvZiB6c3Rk IG9uIHg4Nl82NC4gSSB0ZXN0ZWQgYm90aCBhZnRlciB0aGUgMS40LjEwIHVwZ3JhZGUKPiB1c2lu ZyB0aGUgY29tcGF0aWJpbGl0eSB3cmFwcGVyLCBhbmQgYWZ0ZXIgdGhlIGZpbmFsIHBhdGNoIGlu IHRoaXMgc2VyaWVzLgo+IAo+IEkgdGVzdGVkIGtlcm5lbCBhbmQgaW5pdHJhbWZzIGRlY29tcHJl c3Npb24gaW4gaTM4NiBhbmQgYXJtLgo+IAo+IEkgcmFuIGJlbmNobWFya3MgdG8gY29tcGFyZSB0 aGUgY3VycmVudCB6c3RkIGluIHRoZSBrZXJuZWwgd2l0aCB6c3RkLTEuNC42Lgo+IEkgYmVuY2ht YXJrZWQgb24geDg2XzY0IHVzaW5nIFFFTVUgd2l0aCBLVk0gZW5hYmxlZCBvbiBhbiBJbnRlbCBp OS05OTAway4KPiBJIGZvdW5kOgo+ICogQnRyRlMgenN0ZCBjb21wcmVzc2lvbiBhdCBsZXZlbHMg MSBhbmQgMyBpcyA1JSBmYXN0ZXIKPiAqIEJ0ckZTIHpzdGQgZGVjb21wcmVzc2lvbityZWFkIGlz IDE1JSBmYXN0ZXIKPiAqIFNxdWFzaEZTIHpzdGQgZGVjb21wcmVzc2lvbityZWFkIGlzIDE1JSBm YXN0ZXIKPiAqIEYyRlMgenN0ZCBjb21wcmVzc2lvbit3cml0ZSBhdCBsZXZlbCAzIGlzIDglIGZh c3Rlcgo+ICogRjJGUyB6c3RkIGRlY29tcHJlc3Npb24rcmVhZCBpcyAyMCUgZmFzdGVyCj4gKiBa UkFNIGRlY29tcHJlc3Npb24rcmVhZCBpcyAzMCUgZmFzdGVyCj4gKiBLZXJuZWwgenN0ZCBkZWNv bXByZXNzaW9uIGlzIDM1JSBmYXN0ZXIKPiAqIEluaXRyYW1mcyB6c3RkIGRlY29tcHJlc3Npb24r YnVpbGQgaXMgNSUgZmFzdGVyCj4gCj4gVGhlIGxhdGVzdCB6c3RkIGFsc28gb2ZmZXJzIGJ1ZyBm aXhlcy4gRm9yIGV4YW1wbGUgdGhlIHByb2JsZW0gd2l0aCBsYXJnZSBrZXJuZWwKPiBkZWNvbXBy ZXNzaW9uIGhhcyBiZWVuIGZpeGVkIHVwc3RyZWFtIGZvciBvdmVyIDIgeWVhcnMKPiBodHRwczov L2xrbWwub3JnL2xrbWwvMjAyMC85LzI5LzI3Lgo+IAo+IFBsZWFzZSBsZXQgbWUga25vdyBpZiB0 aGVyZSBpcyBhbnl0aGluZyB0aGF0IEkgY2FuIGRvIHRvIGVhc2UgdGhlIHdheSBmb3IgdGhlc2UK PiBwYXRjaGVzLiBJIHRoaW5rIGl0IGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IGdldHMgbGFyZ2Ug cGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLAo+IGNvbnRhaW5zIGJ1ZyBmaXhlcywgYW5kIGlzIHN3 aXRjaGluZyB0byBhIG1vcmUgbWFpbnRhaW5hYmxlIG1vZGVsIG9mIGNvbnN1bWluZwo+IHVwc3Ry ZWFtIHpzdGQgZGlyZWN0bHksIG1ha2luZyBpdCBlYXN5IHRvIGtlZXAgdXAgdG8gZGF0ZS4KPiAK PiBCZXN0LAo+IE5pY2sgVGVycmVsbAoKCkkndmUgYmVlbiB1c2luZyB0aGlzIHNlcmllcyBvbiBz dGFibGUga2VybmVsIHNpbmNlIDUuMTIuMyAobm93IG9uIAo1LjEyLjEwKSBvbiBteSBtYWluIHN5 c3RlbSB3aXRob3V0IGlzc3Vlcy4KClRlc3RlZC1ieTogSmVhbi1EZW5pcyBHaXJhcmQgPGpkLmdp cmFyZEBzeXNudXgucGY+CgoKVGhhbmtzLAotLSAKSmVhbi1EZW5pcyBHaXJhcmQKClN5c051eCAg ICAgICAgICAgICAgICAgICBTeXN0w6htZXMgICBMaW51eCAgIGVuICAgUG9seW7DqXNpZSAgZnJh bsOnYWlzZQpodHRwczovL3d3dy5zeXNudXgucGYvICAgVMOpbDogKzY4OSA0MC41MC4xMC40MCAv IEdTTTogKzY4OSA4Ny43OTcuNTI3CgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkxpbnV4LWYyZnMtZGV2ZWwgbWFpbGluZyBsaXN0CkxpbnV4LWYyZnMt ZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0Cmh0dHBzOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0 L2xpc3RzL2xpc3RpbmZvL2xpbnV4LWYyZnMtZGV2ZWwK