GNU bug report logs - #57598
[PATCH] doc: Update contribution guidelines on patches, etc.

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: guix-patches; Reported by: Maxime Devos <maximedevos@HIDDEN>; Keywords: patch; dated Mon, 5 Sep 2022 16:02:02 UTC; Maintainer for guix-patches is guix-patches@HIDDEN.

Message received at 57598 <at> debbugs.gnu.org:


Received: (at 57598) by debbugs.gnu.org; 24 Sep 2022 13:03:40 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 24 09:03:40 2022
Received: from localhost ([127.0.0.1]:42643 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1oc4ol-0001KM-Nm
	for submit <at> debbugs.gnu.org; Sat, 24 Sep 2022 09:03:40 -0400
Received: from eggs.gnu.org ([209.51.188.92]:55108)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1oc4oj-0001K8-7a
 for 57598 <at> debbugs.gnu.org; Sat, 24 Sep 2022 09:03:38 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:48228)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <ludo@HIDDEN>)
 id 1oc4od-00061E-2N; Sat, 24 Sep 2022 09:03:31 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-Version:In-Reply-To:Date:References:Subject:To:
 From; bh=AxObal4qm450UT8ANxsL5PWP3Hia809U6SipdDNiwh4=; b=BSso5tYjZxv1BuEETzpl
 z9h01AsF1wkUr3HJZ/FoQXp2izxJIL4sWia3PnKrFPZBwz9/HTR9TclMhpYOX83yh9lQOSeRTDrVG
 vjEelJ3376mWRCyXtsZyiXZP+tXhO9I4P6isMaNAUsmzrMqb93USuYes7tGAITHriLq1RVziEuMwO
 jfB+TxqJkrmu+vmEf/dfTU+hcpORGfiSHTMnjLgQ86uaL4sqpF76ubzzw8GOKFNwd0JL41F/XrQKD
 3+NVSG/aRMk0mk07H1xYLizkijkSTa7qqO3mpvOA6AKAFBO/kbuTcSLdp4WAfjJklsyQhqEDKAuQZ
 I2ZQ0IcRvgFvlQ==;
Received: from 91-160-117-201.subs.proxad.net ([91.160.117.201]:55887
 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <ludo@HIDDEN>)
 id 1oc4oc-0003q9-E3; Sat, 24 Sep 2022 09:03:30 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: Maxime Devos <maximedevos@HIDDEN>
Subject: Re: bug#57598: [PATCH] doc: Update contribution guidelines on
 patches, etc.
References: <20220905160048.18173-1-maximedevos@HIDDEN>
 <20220909123051.15747-1-maximedevos@HIDDEN>
Date: Sat, 24 Sep 2022 15:03:27 +0200
In-Reply-To: <20220909123051.15747-1-maximedevos@HIDDEN> (Maxime Devos's
 message of "Fri, 9 Sep 2022 14:30:51 +0200")
Message-ID: <87zgeoapr4.fsf_-_@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.1 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 57598
Cc: 57598 <at> debbugs.gnu.org, guix-maintainers@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hi!

Thanks for this welcome addition!  Modulo the cosmetic suggestions
below, I think it=E2=80=99s fine.

Maintainers, if you have something to say on the guidelines, now=E2=80=99s =
the
time!

  https://issues.guix.gnu.org/57598

Maxime Devos <maximedevos@HIDDEN> skribis:

> * doc/contributing.texi (Modifying Sources): Replaced with ...
> ("Modifying Sources"): ... this.  List more use cases and some principles.
>
> This patch incorporates some text written by Liliana Marie Prikler.  The
> structure is based on a proposal by Julien Lepiller.  The text has been
> revised based on reviews by David Larsson and blake.
>
> (! remove following text before committing !)

You can write comments below the --- and diffstats.  That way, =E2=80=98git=
 am=E2=80=99
will ignore them when applying the patch.

> +Guix has tree main ways of modifying the source code of a package, that
> +you as a packager may use.  These are patches, snippets and phases.
                            ^
=E2=80=9Cmay use: patches, snippets, and build phases.=E2=80=9D

> +Each one has its strengths and drawbacks.  To decide between the three,

s/decide between the three/choose among these/

> +there are a few guiding principles to satisfy simultanuously where
> +possible:
> +
> +@itemize
> +@item
> +In principle, Guix only has free software; when the upstream source

s/In principle, Guix only has free software/Every package in Guix is
free software/g

> +community (i.e., patterns that appear throughout @code{gnu/packages/...})

Normally such parenthetical expressions go between em dashes:

  community---i.e., patterns that appear throughout
  @file{gnu/packages}---and =E2=80=A6

> +To make things more concrete and to resolve conflicts between the
> +principles, a few cases have been worked out:
> +
> +@subsubsection Removing non-free software
> +Non-free software has to be removed in snippets; the reason is that
> +patches or phases will not work.

You can=E2=80=99t have a colon between the section heading.  Instead, you c=
an
write =E2=80=9Ca few cases have been worked out and will be illustrated in =
the
following sections.=E2=80=9D

Section titles should be capitalized.

Leave a blank line after the section title.

(Same comment for the sections that come after.)

Instead of =E2=80=9Cwill not work=E2=80=9D, which is vague, I=E2=80=99d sug=
gest more explicit
wording: =E2=80=9Cwould not be appropriate because they would expose the
offending code.=E2=80=9D

> +For patches, the problem is that a patch removing a non-free file
> +automatically contains the non-free file@footnote{It has been noted that
> +git patches support removing files without including the file in the
> +patch in
> +@url{https://yhetil.org/guix/8b13e899-eb60-490b-a268-639249698c81@@www.f=
astmail.com/}. If
> +it is verified that the @command{patch} utility supports such patches,
> +this method can be used and this policy adjusted appropriately.}, and we
> +do not want anything non-free in Guix even if only in its patches.

I=E2=80=99d drop the footnote, it=E2=80=99s already dense enough.

> +@code{delete-file-recursively}. There are a few benefits for snippets he=
re:
> +
> +When using snippets, the bundled library does not occur in the source

s/snippets here:/snippets here./
s/When using snippets/First, when using snippets/

> +As such, snippets are recommended here.

s/are recommended here/are the recommended way to delete non-free material/

> +@subsubsection Fixing technical issues (compilation errors, test failure=
s, other bugs ...)

In addition to capitalizing, please remove the parenthetical bit.

> +@subsubsection Adding new functionality
> +To add new functionality, a patch is almost always the most convenient
> +choice of the three -- patches are usually multi-line changes, which are

s/three -- patches/three---patches/

That=E2=80=99s all I have to say!

I think what the text says is fine.  It=E2=80=99s dense and rather long tho=
ugh,
which means that people may overlook things.  OTOH it=E2=80=99s structured =
so
it=E2=80=99s easier to skim through it, and I wouldn=E2=80=99t know what to=
 remove.

Could you send an updated version?

Thanks,
Ludo=E2=80=99.




Information forwarded to guix-patches@HIDDEN:
bug#57598; Package guix-patches. Full text available.

Message received at 57598 <at> debbugs.gnu.org:


Received: (at 57598) by debbugs.gnu.org; 9 Sep 2022 20:09:39 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Sep 09 16:09:38 2022
Received: from localhost ([127.0.0.1]:35600 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1oWkJl-0003Oj-I0
	for submit <at> debbugs.gnu.org; Fri, 09 Sep 2022 16:09:38 -0400
Received: from mailrelay.tugraz.at ([129.27.2.202]:25110)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <liliana.prikler@HIDDEN>) id 1oWkJe-0003OU-KJ
 for 57598 <at> debbugs.gnu.org; Fri, 09 Sep 2022 16:09:36 -0400
Received: from kagayaki.fritz.box (85-127-52-93.dsl.dynamic.surfer.at
 [85.127.52.93])
 by mailrelay.tugraz.at (Postfix) with ESMTPSA id 4MPRsW2lFpz3wjx;
 Fri,  9 Sep 2022 22:09:19 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tugraz.at;
 s=mailrelay; t=1662754159;
 bh=1golxioZAdWYz7RxQ0+HVkei2WDNiGf923wwsuDeG10=;
 h=Subject:From:To:Date:In-Reply-To:References;
 b=se1boxWDEeglFEA/kPQ9t3ETNsicCoXp+wKvry4oqike6AAw/HSYGfzG1ZRhF8alf
 1UF3yFwPfnUgOsGmpEYWfE1KL3kzuij3oZ0a4R+ejpCLFMgrsD+6NwxI1BgrbZUi/k
 CwzTNCPOKPZ5q+IzY0Y+eS+jbtjzgztG+ODcARfM=
Message-ID: <4e167aa3c88bdbf86b65af118967bc3d1aeb26a4.camel@HIDDEN>
Subject: Re: [PATCH] doc: Update contribution guidelines on patches, etc.
From: Liliana Marie Prikler <liliana.prikler@HIDDEN>
To: Maxime Devos <maximedevos@HIDDEN>, 57598 <at> debbugs.gnu.org
Date: Fri, 09 Sep 2022 22:09:18 +0200
In-Reply-To: <e9162363-e67b-956e-6346-6a1a6e529abf@HIDDEN>
References: <20220905160048.18173-1-maximedevos@HIDDEN>
 <0f78953d57d8f66a934baf518b7c9e3247b580fd.camel@HIDDEN>
 <d0a48b72-c62b-cc97-e399-22abc0af182d@HIDDEN>
 <44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN>
 <b33540cb-0c72-6170-34d0-b8df4ab79b8f@HIDDEN>
 <1e707c8e345af7b2fb0353c5f1c0e37d716e3308.camel@HIDDEN>
 <a24e8c5c-a986-3f6f-15a4-03caeb801e6d@HIDDEN>
 <b74c40c57dff2a0ac6eee2a7a2124d8ab2d6314e.camel@HIDDEN>
 <e9162363-e67b-956e-6346-6a1a6e529abf@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
User-Agent: Evolution 3.42.1 
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-TUG-Backscatter-control: waObeELIUl4ypBWmcn/8wQ
X-Spam-Scanner: SpamAssassin 3.003001 
X-Spam-Score-relay: -0.4
X-Scanned-By: MIMEDefang 2.74 on 129.27.10.117
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 57598
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Am Freitag, dem 09.09.2022 um 20:44 +0200 schrieb Maxime Devos:
> GNU project encourages reading source code, we put useful 
> information in the source code (e.g. records on what non-free parts
> haven't been replaced yet).
You mean bundled parts not unbundled, right?  IIUC, there should be no
non-free parts in a free software distribution.

> > You can, but it's still wiser to just keep the snippet short enough
> > so you don't have to.
> 
> That's also the case for phases, though?  Conciseness is both good
> for phases and snippets.
Intentionally or otherwise, you're talking past me.

> > >    I would however very
> > > > much prefer a wording that points people toward this practice
> > > > existing,
> > > > even if they have to go look in the code for examples.
> > > > Alternatively,
> > > > a footnote for the most common case (search-input-file inputs
> > > > "bin/command") ought to suffice for the time being.
> > > 
> > > Aside from the typo's and a few rephrasings, I'm done with the
> > > documentation.  If someone wants to extend the section with such
> > > information, they can always do so later.
> > I haven't seen a v2 though.  Am I correct in assuming that none of
> > the
> > points we discussed in the last few mails are going to be
> > addressed?
> 
> I did sent a v2: <https://issues.guix.gnu.org/57598#8>.
> And most were addressed, even if only as me not considering it an
> issue.
Hmm, that was while I was still composing that message.

> > In that case, let me rephrase my criticism: "It passes the
> > guidelines" should not be part of the logical reasoning here. 
> > Otherwise, why not have a guideline checklist at the end of each
> > subsection (which would be silly, obviously, but that's the point).
> 
> Because, as you note, that's a silly structure, putting the premises
> (= guiding principles) after the conclusions (= worked-out cases) is
> an illogical structure, whereas putting the premises _before_ the 
> conclusions is logical
And yet you're putting a premise after a conclusion here.

> > For the record, the exception is the "most convenient" bit you've
> > copied from my patch :)
> 
> That guideline actually predates your patch, it's part of the
> original proposal (of which the wording changed later):
> 
>  >
> https://yhetil.org/guix/c4c0a071-2e03-d4d6-6718-05424d21d146@HIDDEN/
> > Sometimes, there remains more than one acceptable way to accomplish
> > the goal. In that case, choose whatever appears to be most
> > convenient.
Fair enough.
> 

> > Note "should" rather than "shall" or "must", meaning that slightly
> > larger tarballs are still acceptable.
> OK.  The criterium remains overly tight though -- by that criterium, 
> slightly larger tarballs are considered undesirable, even when they
> have useful (and hence, desired) things:
Point taken, but...

> > 
> > > * the source contains documentation that could be built and
> > > installed,
> > >     but Guix doesn't do so yet.  --> should be kept (unless non-
> > > free)
> > > * documentation that isn't meant to be built or installed
> > >     (e.g. HACKING, PACKAGERS, ...) --> useful, shouldn't be
> > > removed.
> > > * .gitignore, .github, ... --> nothing wrong with removing those,
> > >     but pointless, let's not waste our time with looking for
> > > those
> > >     and removing them, even though doing so would make it
> > > smaller.
> > > * source files for platforms the upstream does not support
> > > yet/anymore
> > >     (but with some volunteer effort (e.g. bugfixes), it might
> > > become
> > >     a supported system again)
> > >     --> removing them (e.g. as part of an overly-broad
> > > (delete-file-recursively
> > > "this-dir-has-bundling-albeit-not-all-of-it-is-bundling"))
> > >         can be OK-ish, but removing them for 'minimality' is
> > > pointless.
> 
> > I see you're nitpicking for the sake of the argument,
> 
> I'm not.  It's nitpicking for the sake of the four * examples above.
> 
> > but none of the
> > examples you provide (safe for the bundling one) add much cost to
> > either packing or unpacking.
> 
> Not the point, the point is that having to treat those examples 
> seriously  is a waste of time and even somewhat harmful (removing
> useful stuff).
> 
> > Thus, I'm pretty sure we can ignore them
> > for practical purposes.
> 
> As I've explained, this guideline is inconsistent with what is
> actually recommended.  Here are some practical purposes:
> 
> * minimal dissonance between 'appreciated by policy' and 'appreciated
> by
>    reviewers, packagers, users'.
> * not having to review and accept pointless patches to Guix for
> deleting
>    .github, .gitignore, uninstalled documentation that were written
>    for the sake of minimality
> * not having to (in the sense of: it would be appreciated if you'd do
>    that) write such patches
> 
>    That being said, if you have a better
> > formulation, please do tell.
> 
> The four guiding principles.
That's an awful lot to write rather than "the package's source should
be the corresponding source minus the bits we don't like".  Ludo’
already commented on the length of my patch (and yes, I'm aware that
both of our patches blow up the section by a factor of like 3 at
minimum), so I don't think you're doing anyone a service here by
expanding something into four guidelines that would take, like, a
simple sentence instead if carefully worded.  Let's take the time to
write the shorter letter, shall we?


> By removing the information that 'patches are the most convenient 
> choice' (by replacing it with ‘patches are the preferred choice’),
> the logical structure becomes weaker; a part of the explanation on
> the ‘why’ becomes missing.
I'm going to sound like a broken record, but conciseness is key:
"Patches are preferred when adding functionality to a package.  They
can more easily be shared with upstreams and are easier to work with
when making multi-line changes.  Next item."

> > > > [W]e barely have enough principles to allow the use of a
> > > > plural.
> Your argument is that ‘there aren't a sufficient amount of principles
> to allow the use of a plural’.  
Don't put words into my mouth.

> 'Plural' is a concept of English grammar.  
The concept of a plural is not unique to English grammar.

> As such, you have written an argument about English grammar.
You're failing to read between the lines and it's getting rather
exhausting.

> You appear to have meant some different argument, but all the
> arguments on ‘are they guiding principles or not’ I've read are based
> on the number of principles or on what 'guiding principle' means,
> which are issues of grammar and vocabulary respectively.
> 
> I'm still not seeing how they aren't guiding principles.  Maybe you
> have a different meaning of ‘guiding principles’ in mind?  Or maybe
> you would like to name them 'guidelines' or 'general recommendations'
> instead.
Call it whatever you want, my point is twofold:
1. By proper counting and simplification, you will have at most two.
2. At least one of those two doesn't feel very "guiding" to me.
Further, I think you're doing a bad job of splitting mandatory and
optional "recommendations" by lumping them together.

> > > 
> > > The introduction has a set of guiding principles, from with
> > > concrete cases are built.  By adding another principle at the
> > > end, the cases cannot make use of the "use [...] convenient"
> > > principle.
> > > 
> > > Additionally, now the user has to look at _two_ places to find
> > > the guiding principles -- at the beginning, and at the end. 
> > > Worse, the beginning does not have a cross-reference to the end,
> > > so since the set at the beginning is presented as exhaustive, the
> > > user might not know there is another guiding principle.
> > > 
> > > And even if they did read through the whole section (even though
> > > they should only have to read the introduction and the relevant
> > > worked-out case), assuming they read through it in a linear
> > > fashion, due to the new guiding principle that wasn't alluded to
> > > at the beginning, they have to redo their mental model of
> > > "Modifying Sources" as this principle could invalidate things.
> > This shows both a problem with your structure,
> 
> I'm not seeing the problem.  How does this show a problem?
You're writing three paragraphs to lament how necessary the principle
of "use whatever is convenient" – which mind you I believe should never
be used outside of resolving conflicts between otherwise equally
applicable choices – is to your reasoning.

> > but more importantly, a failure to understand what I meant when I
> > wrote "use whatever is convenient" in my own patch.  This principle
> > *can* only work for cases in which there is *no clearly established
> > practice*, thus putting it at the end *after having enumerated all
> > practices* is the logical choice.
> > With your structure, you have to bend it sideways to shoehorn it in
> > with the other principles.
> 
> You appear to have meant it as a kind of ‘fallback principle’, in
> which case putting it at the end does indeed make sense.
> 
> In my patch, the principle works differently, it is also used for 
> explaining already established practices, for the cases where there
> are multiple technically allowed [technique] but still often a single
> _recommended_ [technique].  E.g.:
> 
> > Usually, a bug fix comes in the form of a patch copied from
> > upstream or another distribution.  In that case, simply adding the
> > patch to the @code{patches} field is the most convenient and
> > usually does not cause any problems; there is no need to rewrite it
> > as a snippet or a phase.
> > 
> > If no ready-made patch already exists, then ...]
> 
> and
> 
> > To add new functionality, a patch is almost always the most
> > convenient choice of the three 
> 
> .
> 
> To go from the principle as used in your patch to the principle as
> used  in my patch, perhaps in the process it is bent sideways and
> shoehorned.
> But after all the bending and shoehorning, it seems to fit well now
> in the beginning (and not well at all the end), so I'm not seeing any
> problems here.
And here I must disagree with the nature of your patch, because
elevating this into a guiding principle makes what feels most
convenient to you (or any other writer at the time of editing the
manual) most convenient to everyone.  My patch allows for deliberation
by both the packager and reviewer, which might lead to some conflicts
of opinion, but unless either solution can be shown clearly superior by
appeal to *another reason*, which mind you is lacking here, both
solutions should be accepted.
> 

> > in a way that might
> > inhibit natural information flow.
> 
> I'm not seeing it.  As I've explained previously, putting the
> premises (= guiding principles) before the conclusions (= worked out
> cases / solutions) is a logical (hence, natural) information flow,
> and introducing them on-the-way or implicitly is ad-hoc (unnatural).


> > I think we might be disagreeing about what constitutes "solving the
> > problem" here.  Correct me if I'm wrong, but to me it seems any
> > scenario that is not covered by whatever patch is applied counts as
> > "not having solved the problem".
> 
> It doesn't -- I consider the Shepherd problem to be solved by my
> patch (albeit rather weakly, see later), and the wider problem of
> unclear guidelines and policy on snippet/phase/patch to be, perhaps
> not really solved, but still much improved (this time not weakly).
> 
> > I personally find this line of reasoning questionable, as there are
> > perfectly valid reasons why multiple tools could apply.
> 
> See previous paragraph.


> > Take the problem of embedding a store path.  You could for instance
> > replace all occurences of "sh" with /gnu/store/.../bin/sh, or you
> > could first replace them in a patch with "@sh@" and then replace
> > that with /gnu/store/.../bin/sh.  Of course, you rarely have to do
> > the latter and the former is simpler, hence why you will often see
> > the former, but that doesn't mean the latter is invalid.
> 
> It's contrary to 'It preferably should also work on non-Guix systems’
> -- 
> not invalid, but still usually (*) against (proposed) policy because
> a direct substitute* is at the same time more convenient and follows
> all the the principles.
> 
> (*) sometimes, in case of shell scripts, a substitute* is fragile 
> (substituting too much), in which case a "sh" -> "@sh@" becomes more 
> convenient and hence the violation of the 'non-Guix system' rules 
> becomes acceptable.
Fair enough, guess I'll have to update configure.ac in the same patch
to honour the guiding principles.

> > > > > 
> > > In both patches, if the user only reads the
> > > introduction and conclusion (if any) and doesn't read the actual
> > > (relevant examples)/(explanation of patches, snippets, phases),
> > > then that's their problem.
> > I do think a table in the middle of the section is hard to ignore,
> 
> I think so too, hence my previous response.
> 
> > but suppose for the sake of argument that they do, [...]
> 
> Given this response, I assume I've misinterpreted what you meant with
> ‘not having looked at the worked-out cases yet’.
I think you understood it elsewhere, see the fallback guiding
principle.

> > No particular order is problematic,
> 
> I'm not seeing why.
Why have a structure, when you won't have a structure?  Sounds a little
counterintuitive, does it not?

>   but more importantly if a
> > technology appears more than once (guaranteed by the pigeonhole
> > principle), then either its properties get repeated (not good for
> > length) or scattered (not good for the flow you want).  Again, a
> > structural problem.
> 
> That's equally applies to your patch too, though?  (Switching 
> "technology" with "problem".)
Not really, since most problems that are to be uniquely solved with a
given tool can be uniquely named under that tool.  I do expand a little
on using patches and phases in combination for a more complicated job,
but that use case is notably missing from your patch.  I also repeat
shared characteristics of patches and snippets, which I could condense
to save some space, but in comparison to your patch, space is no issue.

> Also, I've re-read my patch, and I didn't find any repeated
> properties or scattering, except for a single property (patches are
> upstreamable):
> 
>  > First, when the fix is not Guix-specific, upstreaming the fix is
>  > strongly desired to avoid the additional maintenance cost to Guix.
>  > [...]
> > As such, patches are preferred.  However, as with bug
> > fixes, upstreaming the new functionality is desired.
> 
> As such, I'm not following your point here.
The trend of you not seeing continues.  Look at your first two
subsubsections (both v1 and v2).
> 

> > Point taken, but imho cross-references are nice for those who just
> > learned "okay, I now know I need to solve my technical problem with
> > a phase, how do I do that?"
> 
> They are indeed.  But I'm not following what you mean with "But"
> here.  I didn't claim anything about cross-references there?
> 
> Do you want me to add a few cross-references (for 'patch', 'snippet'
> and 'phases')?
I don't think you have a useful location to put them though, owing once
again to structure :)

> 
> > I do get the impression that this patch simply codifies what you
> > feel is right based on the shepherd situation
> 
> True, except for the 'simply'
Okay, I'll correct myself: This patch complicatedly codifies what you
feel is right based on the shepherd situation.

Jokes aside,

> I also considered several other situations (Removing bundled
> libraries, Removing non-free software, Adding new functionality).  I
> do not see the problem with this -- the proposed policy was
> considered workable even if some would like it to be a little bit
> different, and if others feel strongly about they could, I don't,
> maybe set up a vote system or such.
I think this is not the place for the kind of democracy where you put
everything barely the half of people can agree is the worst tradeoff
into "law".  Even worse if we had an anonymous online vote, because
those aren't susceptible to manipulation at all.

I think we should rather exercise caution and document what if not the
entire community then at least the reviewers can agree on.

> > rather than thinking about the general case,
> 
> See: several other cases that should cover most situations
> encountered in practice, and for the parts of the general case that
> aren't worked-out yet, there are the guiding principles.
"guiding" principle"s"

> > which is why my patch makes weaker statements here.  If
> > this issue could have been avoided with a #:make-flag, we would
> > have used that.
> > 
> > More importantly, I fail to see the superiority of your patch here
> > > IIUC neither patch offers a unique solution to the shepherd
> > thing, so
> > the room for debate remains
> 
> In my patch, multiple options remain, but there is no real room for 
> debate.  More concretely:
> 
> > When there is more than one way to do something, choose whichever
> > method is the simplest.  Sometimes this is subjective, which is
> > also fine.
> > What matters is that you use techniques that are common within the
> > community (i.e., patterns that appear throughout
> > @code{gnu/packages/...})
> > and are thus clearly legible for reviewers.
> 
> it is considered subjective, having multiple options if fine!  To 
> correct a packaging following the other option (to help with
> following the policies), you don't have to debate on what's the
> proper option to get a fix in, as both are considered acceptable.  In
> many cases, no need for debate, just pick one and move on.  (Also the
> case for your patch IIUC.)
I do think elevating this into a guiding principle somewhat undermines
what you're stating here though.

> Things are also phrased reconciliatory, e;g.:
> 
> > To make things more concrete and to resolve conflicts between the
> > principles, a few cases have been worked out:
> 
> However, in your patch, there is more opportunity for conflicts.
> E.g.:
> 
> > Each one has its strengths and drawbacks, along with intended
> > andhistorically derived use cases.
> 
> By this line, arguments like 'X was historically the intended purpose
> of Y, using Y for Z is incorrect' become reasonable, which makes 
> disagreements more difficult to resolve (as you know need to consult 
> history and because history is fixed, so no improvements would be 
> possible anymore in areas where there is a historically intended use
> case).
The intended and historically derived use cases are those that ought to
be explicitly named in the following.  If it's not documented, there is
no historic precedent.

> > > > In particular, for review purposes, mine should be easier to
> > > > work with.  For instance, the reviewer sees a hash embedded in
> > > > a snippet, sees in the snippet entry that you shouldn't do
> > > > that, and can thus say "nope, don't do a snippet here".
> 
> That is also the case for problem->solution?  A "sh" -> #$(file-
> append bash-minimal "/bin/sh") substitution can be recognised on
> sight as not possibly being anything else than a technical fix, and
> then the subsubsection on technical fixes mentions that those must be
> done in phases.
> 
> Or, another explanation: reviewers usually have seen a lot of more 
> packages than a new packager.  Because of that, and because they have
> familiarised theirselves with policy, they have over time
> automatically built a mental 'reverse index' of solutions->problems.
I wouldn't put too much value in this experience.  It can also blind
you to the point of producing old-style inputs, for example.

> > 
> > > I think we should optimise for packagers before reviewers
> > Code is more often read than written, so optimising for the reader
> > is optimizing for the packager as well.
> 
> While all reviewers are readers, not all readers are reviewers, and 
> reviewing usually happens only once, maybe twice per patch.
That's not a problem, though? You can take my guidelines, apply it to
any random package in the Guix source and see whether things (still)
fit.  That's more troublesome with the problem->solution style.  In
other words, that the solution passes is apparent from the written form
rather than requiring the process of writing it.

> > > > Regardless of which patch we pick, it should not mandate a
> > > > particular solution in potentially contentious cases,
> > > 
> > > Actually the whole point was to mandate a particular solution for
> > > the
> > > contentious cases, see Shepherd.
> > But I disagree.
> > 
> > Memes aside, please refrain from the "I'm right, do this" style
> > (which is another problem with the "problem-centric" approach),
> 
> Is this referring to the style of the documentation patch?  If so: it
> does explain why the "do this" is right, so I don't see the problem. 
> Do you have a particular point of the documentation in mind you
> consider wrong (*)?
> 
> (*) points I know of:
> * keep lists / remove lists (for the footnote about not-yet-policy on
> removing things in patches)
> * the guiding principles aren't guiding principles
For one, you seriously erred on the test cases thing.  I also wonder if
we're drawing the wrong conclusions for Makefiles from the Shepherd
incident.  Historically, patching build files in a phase has been very
fine.

> > but rather focus on writing a patch that makes reviewers not
> > discard a patch due to formalities.
> 
> I think the patch (v1 and v2) satisfies that.
I'm getting slightly different vibes, but sure.

Cheers




Information forwarded to guix-patches@HIDDEN:
bug#57598; Package guix-patches. Full text available.

Message received at 57598 <at> debbugs.gnu.org:


Received: (at 57598) by debbugs.gnu.org; 9 Sep 2022 18:44:28 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Sep 09 14:44:27 2022
Received: from localhost ([127.0.0.1]:35456 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1oWizJ-0007O1-GS
	for submit <at> debbugs.gnu.org; Fri, 09 Sep 2022 14:44:27 -0400
Received: from andre.telenet-ops.be ([195.130.132.53]:58758)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <maximedevos@HIDDEN>) id 1oWizF-0007Nr-EG
 for 57598 <at> debbugs.gnu.org; Fri, 09 Sep 2022 14:44:24 -0400
Received: from [IPV6:2a02:1811:8c09:9d00:5dba:d409:33f7:a16]
 ([IPv6:2a02:1811:8c09:9d00:5dba:d409:33f7:a16])
 by andre.telenet-ops.be with bizsmtp
 id HukH2800D20ykKC01ukHhx; Fri, 09 Sep 2022 20:44:18 +0200
Message-ID: <e9162363-e67b-956e-6346-6a1a6e529abf@HIDDEN>
Date: Fri, 9 Sep 2022 20:44:16 +0200
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101
 Thunderbird/91.12.0
Content-Language: en-US
To: Liliana Marie Prikler <liliana.prikler@HIDDEN>,
 57598 <at> debbugs.gnu.org
References: <20220905160048.18173-1-maximedevos@HIDDEN>
 <0f78953d57d8f66a934baf518b7c9e3247b580fd.camel@HIDDEN>
 <d0a48b72-c62b-cc97-e399-22abc0af182d@HIDDEN>
 <44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN>
 <b33540cb-0c72-6170-34d0-b8df4ab79b8f@HIDDEN>
 <1e707c8e345af7b2fb0353c5f1c0e37d716e3308.camel@HIDDEN>
 <a24e8c5c-a986-3f6f-15a4-03caeb801e6d@HIDDEN>
 <b74c40c57dff2a0ac6eee2a7a2124d8ab2d6314e.camel@HIDDEN>
From: Maxime Devos <maximedevos@HIDDEN>
Subject: Re: [PATCH] doc: Update contribution guidelines on patches, etc.
In-Reply-To: <b74c40c57dff2a0ac6eee2a7a2124d8ab2d6314e.camel@HIDDEN>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="------------b304Y9bejnymBhUvwnTF0ap0"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r22;
 t=1662749058; bh=0aADSMKUBU0fzd5tekJnVsAmdaUV9xOfGxfaDG9HTMk=;
 h=Date:To:References:From:Subject:In-Reply-To;
 b=TvH5hWTI4Y0BceTANeve4Q2BypLqxRgPXGP4T/ITvlQPJPDslCbl6lw2P8VwYGAgp
 ogX5MGtvVBwARKhVnWxJ1tsjy04teNje65/oVRJ609OW2XY8eXjj8OlKSeSMvUPqk9
 VMKsXnwtKYhSe6dmgiuh2bXzGpJYVheq+G6VQU5E5WIM9YVr38tZHxQvSNAnLRpkOj
 waJZNWIe8/9f3TjHiZzNEbIYB518W9mSpQ2uYPwyJPblG8aXFuZfo9NlMzH5NMBzlg
 FL4T9r0BjczBp3B54/TrZ3eFHBkDN1rOU1blOEocoihnbb5Uh/1m/Jn1sZcAkaRGWj
 iJXuzsuWpLOyg==
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 57598
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--------------b304Y9bejnymBhUvwnTF0ap0
Content-Type: multipart/mixed; boundary="------------A60oN2LySqwFEM12Dd7BpjjC";
 protected-headers="v1"
From: Maxime Devos <maximedevos@HIDDEN>
To: Liliana Marie Prikler <liliana.prikler@HIDDEN>,
 57598 <at> debbugs.gnu.org
Message-ID: <e9162363-e67b-956e-6346-6a1a6e529abf@HIDDEN>
Subject: Re: [PATCH] doc: Update contribution guidelines on patches, etc.
References: <20220905160048.18173-1-maximedevos@HIDDEN>
 <0f78953d57d8f66a934baf518b7c9e3247b580fd.camel@HIDDEN>
 <d0a48b72-c62b-cc97-e399-22abc0af182d@HIDDEN>
 <44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN>
 <b33540cb-0c72-6170-34d0-b8df4ab79b8f@HIDDEN>
 <1e707c8e345af7b2fb0353c5f1c0e37d716e3308.camel@HIDDEN>
 <a24e8c5c-a986-3f6f-15a4-03caeb801e6d@HIDDEN>
 <b74c40c57dff2a0ac6eee2a7a2124d8ab2d6314e.camel@HIDDEN>
In-Reply-To: <b74c40c57dff2a0ac6eee2a7a2124d8ab2d6314e.camel@HIDDEN>

--------------A60oN2LySqwFEM12Dd7BpjjC
Content-Type: multipart/mixed; boundary="------------RneJSr4rW60YFuWvSkivYcO6"

--------------RneJSr4rW60YFuWvSkivYcO6
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: base64

DQoNCk9uIDA5LTA5LTIwMjIgMTU6MzIsIExpbGlhbmEgTWFyaWUgUHJpa2xlciB3cm90ZToN
Cj4+IEFsc28sIHRoaXMgaXMgdGhlIHBhY2thZ2Ugc291cmNlIGZpZWxkLCBub3QgdGhlIGRl
c2NyaXB0aW9uLCBJIGRvbid0DQo+PiBzZWUgaG93IHRoZSAiaGVscHMgc29mdHdhcmUgc3Rh
bmQgb24gaXRzIG93biBtZXJpdHMiIGFwcGxpZXMgdG8NCj4+IHNuaXBwZXRzIG9mIHRoZSBw
YWNrYWdlIHNvdXJjZS4NCj4gUG9pbnQgdGFrZW4sIGJ1dCBpbWhvIGl0IHN0aWxsIG1ha2Vz
IHNlbnNlIHRvIHByZWZlciBrZWVwIGxpc3RzIG92ZXINCj4gcmVtb3ZlIGxpc3RzLiAgVGhl
IEdOVSBwcm9qZWN0IGVuY291cmFnZXMgcGVvcGxlIHRvIHJlYWQgdGhlIHNvdXJjZXMNCj4g
YWZ0ZXIgYWxsLg0KDQpJIGRvIG5vdCBzZWUgaG93IHRoZSBmb3JtZXIgZm9sbG93cyBmcm9t
IHRoZSBsYXR0ZXIsIEkgd291bGQgZXhwZWN0IHRoZSANCm9wcG9zaXRlLiAgR05VIHByb2pl
Y3QgZW5jb3VyYWdlcyByZWFkaW5nIHNvdXJjZSBjb2RlLCB3ZSBwdXQgdXNlZnVsIA0KaW5m
b3JtYXRpb24gaW4gdGhlIHNvdXJjZSBjb2RlIChlLmcuIHJlY29yZHMgb24gd2hhdCBub24t
ZnJlZSBwYXJ0cw0KaGF2ZW4ndCBiZWVuIHJlcGxhY2VkIHlldCkuDQoNCj4+Pj4NCj4+Pj4+
IFRoZXJlIHN0aWxsIGlzIHRoZSBkaWZmZXJlbmNlIHRoYXQgcGhhc2VzIGFyZSBjbGVhcmx5
IGRlbGltaXRlZA0KPj4+Pj4gd2hpbGUgc25pcHBldHMgYXJlIGEgYmxvY2sgb2YgY29kZSB0
aGF0IHNob3VsZG4ndCBnZXQgdG9vDQo+Pj4+PiBsYXJnZS4NCj4+Pj4gU25pcHBldHMgYXJl
IGRlbGltaXRlZCBjbGVhcmx5IGFzIHdlbGwsIHRob3VnaCwgd2l0aCB0aGUNCj4+Pj4gJ3Nu
aXBwZXQnIGZpZWxkPw0KPj4+PiBBbmQgdGhlIGxpbWl0YXRpb25zIG9mIHNuaXBwZXQgbGVu
Z3RoIGFuZCBwaGFzZXMgbGVuZ3RoIGFyZSB0aGUNCj4+Pj4gc2FtZcKgLS0gbm8gbGltaXRz
LCB0aG91Z2ggY29uY2lzZW5lc3MgaXMgYXBwcmVjaWF0ZSBhcyBhbHdheXMuDQo+Pj4gVHJ1
ZSwgYnV0IHBoYXNlcyBjYW4gYmUgbWFkZSB0byBkbyBqdXN0IG9uZSB0aGluZywgd2hlcmVh
cyBzbmlwcGV0cw0KPj4+IGhhdmUgdG8gZml4IGV2ZXJ5dGhpbmcgdGhhdCdzIHdyb25nIGlu
IG1vcmUgb3IgbGVzcyBvbmUgKGJlZ2luDQo+Pj4gLi4uKS4NCj4+PiBUaGlzIGlzIGEgbm90
aWNhYmxlIGRpc3RpbmN0aW9uLj4NCj4+DQo+PiBZb3UgY2FuIGRvIHRoYXQgaW4gc25pcHBl
dHMgdG9vLCB3aXRoIGNvbW1lbnRzOg0KPj4NCj4+IChzbmlwcGV0DQo+PiAgwqDCoCAjfihi
ZWdpbg0KPj4gIMKgwqDCoMKgwqDCoCA7OyBEbyB0aGUgZm9vIHRoaW5nDQo+PiAgwqDCoMKg
wqDCoMKgIChmb28pDQo+PiAgwqDCoMKgwqDCoMKgIChmb28tMiBbLi4uXSkNCj4+ICDCoMKg
wqDCoMKgwqAgWy4uLl0NCj4+ICDCoMKgwqDCoMKgwqAgOzsgRG8gdGhlIGJhciB0aGluZw0K
Pj4gIMKgwqDCoMKgwqDCoCAoYmFyKQ0KPj4gIMKgwqDCoMKgwqDCoCAoYmFyLTIgWy4uLl0p
DQo+PiAgwqDCoMKgwqDCoMKgIFsuLi5dKSkNCj4gWW91IGNhbiwgYnV0IGl0J3Mgc3RpbGwg
d2lzZXIgdG8ganVzdCBrZWVwIHRoZSBzbmlwcGV0IHNob3J0IGVub3VnaCBzbw0KPiB5b3Ug
ZG9uJ3QgaGF2ZSB0by4NCg0KVGhhdCdzIGFsc28gdGhlIGNhc2UgZm9yIHBoYXNlcywgdGhv
dWdoPyAgQ29uY2lzZW5lc3MgaXMgYm90aCBnb29kIGZvciANCnBoYXNlcyBhbmQgc25pcHBl
dHMuDQo+PiAgwqAgSSB3b3VsZCBob3dldmVyIHZlcnkNCj4+PiBtdWNoIHByZWZlciBhIHdv
cmRpbmcgdGhhdCBwb2ludHMgcGVvcGxlIHRvd2FyZCB0aGlzIHByYWN0aWNlDQo+Pj4gZXhp
c3RpbmcsDQo+Pj4gZXZlbiBpZiB0aGV5IGhhdmUgdG8gZ28gbG9vayBpbiB0aGUgY29kZSBm
b3IgZXhhbXBsZXMuDQo+Pj4gQWx0ZXJuYXRpdmVseSwNCj4+PiBhIGZvb3Rub3RlIGZvciB0
aGUgbW9zdCBjb21tb24gY2FzZSAoc2VhcmNoLWlucHV0LWZpbGUgaW5wdXRzDQo+Pj4gImJp
bi9jb21tYW5kIikgb3VnaHQgdG8gc3VmZmljZSBmb3IgdGhlIHRpbWUgYmVpbmcuDQo+Pg0K
Pj4gQXNpZGUgZnJvbSB0aGUgdHlwbydzIGFuZCBhIGZldyByZXBocmFzaW5ncywgSSdtIGRv
bmUgd2l0aCB0aGUNCj4+IGRvY3VtZW50YXRpb24uwqAgSWYgc29tZW9uZSB3YW50cyB0byBl
eHRlbmQgdGhlIHNlY3Rpb24gd2l0aCBzdWNoDQo+PiBpbmZvcm1hdGlvbiwgdGhleSBjYW4g
YWx3YXlzIGRvIHNvIGxhdGVyLg0KPiBJIGhhdmVuJ3Qgc2VlbiBhIHYyIHRob3VnaC4gIEFt
IEkgY29ycmVjdCBpbiBhc3N1bWluZyB0aGF0IG5vbmUgb2YgdGhlDQo+IHBvaW50cyB3ZSBk
aXNjdXNzZWQgaW4gdGhlIGxhc3QgZmV3IG1haWxzIGFyZSBnb2luZyB0byBiZSBhZGRyZXNz
ZWQ/DQoNCkkgZGlkIHNlbnQgYSB2MjogPGh0dHBzOi8vaXNzdWVzLmd1aXguZ251Lm9yZy81
NzU5OCM4Pi4NCkFuZCBtb3N0IHdlcmUgYWRkcmVzc2VkLCBldmVuIGlmIG9ubHkgYXMgbWUg
bm90IGNvbnNpZGVyaW5nIGl0IGFuIGlzc3VlLg0KDQo+Pj4NCj4+PiBJTUhPLCBJIHRoaW5r
IGEgcmVhZGVyIHdobyByZW1lbWJlcnMgdGhlIGd1aWRpbmcgcHJpbmNpcGxlcyBzaG91bGQN
Cj4+PiBzZWUgdGhhdCBpdCBhcHBsaWVzLg0KPj4NCj4+IExpa2VseS4gQnV0IHJlbW92aW5n
IHRoZSBleHBsaWNpdCBtZW50aW9uIG9mIHRoZSBndWlkaW5nIHByaW5jaXBsZQ0KPj4gc3Rp
bGwgbWFrZXMgdGhlIGxvZ2ljYWwgcmVhc29uaW5nIGluY29tcGxldGUsIHJlbWVtYmVyaW5n
IGhhcyBub3RoaW5nDQo+PiB0byBkbyB3aXRoIGl0LsKgIEFzIEkndmUgd3JpdHRlbiBwcmV2
aW91c2x5OiDigJhUaGlzIGhhcyBub3RoaW5nIGRvIGRvDQo+PiB3aXRoIFsuLi5dIGFuZCBy
ZW1lbWJlcmluZywgYnV0IHJhdGhlciB3aXRoIFsuLi5d4oCZLg0KPiBJbiB0aGF0IGNhc2Us
IGxldCBtZSByZXBocmFzZSBteSBjcml0aWNpc206ICJJdCBwYXNzZXMgdGhlIGd1aWRlbGlu
ZXMiDQo+IHNob3VsZCBub3QgYmUgcGFydCBvZiB0aGUgbG9naWNhbCByZWFzb25pbmcgaGVy
ZS4gIE90aGVyd2lzZSwgd2h5IG5vdA0KPiBoYXZlIGEgZ3VpZGVsaW5lIGNoZWNrbGlzdCBh
dCB0aGUgZW5kIG9mIGVhY2ggc3Vic2VjdGlvbiAod2hpY2ggd291bGQNCj4gYmUgc2lsbHks
IG9idmlvdXNseSwgYnV0IHRoYXQncyB0aGUgcG9pbnQpLg0KDQpCZWNhdXNlLCBhcyB5b3Ug
bm90ZSwgdGhhdCdzIGEgc2lsbHkgc3RydWN0dXJlLCBwdXR0aW5nIHRoZSBwcmVtaXNlcyAo
PSANCmd1aWRpbmcgcHJpbmNpcGxlcykgYWZ0ZXIgdGhlIGNvbmNsdXNpb25zICg9IHdvcmtl
ZC1vdXQgY2FzZXMpIGlzIGFuIA0KaWxsb2dpY2FsIHN0cnVjdHVyZSwgd2hlcmVhcyBwdXR0
aW5nIHRoZSBwcmVtaXNlcyBfYmVmb3JlXyB0aGUgDQpjb25jbHVzaW9ucyBpcyBsb2dpY2Fs
DQoNCj4+Pj4NCj4+PiBBbHNvLCB5b3VyIGd1aWRpbmcgcHJpbmNpcGxlcyBhcmUgKHdpdGgg
b25lIGV4Y2VwdGlvbikgcmVhbGx5IGp1c3QNCj4+PiBpbnZhcmlhbnRzIHRoYXQgb3VnaHQg
dG8gaG9sZCBmb3IgdGhlIHNvdXJjZSBmaWVsZCBvZiBhIHBhY2thZ2UuDQo+Pg0KPj4gSSBk
b24ndCBrbm93IGFib3V0IHRoZSBleGNlcHRpb25zIChJIGhhdmVuJ3QgY291bnRlZCB0aGVt
KSwgYnV0IHllcywNCj4+IGluZGVlZC7CoCBJIGRvIG5vdCBzZWUgdGhlIHByb2JsZW0gb2Yg
dGhpcy4NCj4gRm9yIHRoZSByZWNvcmQsIHRoZSBleGNlcHRpb24gaXMgdGhlICJtb3N0IGNv
bnZlbmllbnQiIGJpdCB5b3UndmUNCj4gY29waWVkIGZyb20gbXkgcGF0Y2ggOikNCg0KVGhh
dCBndWlkZWxpbmUgYWN0dWFsbHkgcHJlZGF0ZXMgeW91ciBwYXRjaCwgaXQncyBwYXJ0IG9m
IHRoZSBvcmlnaW5hbCANCnByb3Bvc2FsIChvZiB3aGljaCB0aGUgd29yZGluZyBjaGFuZ2Vk
IGxhdGVyKToNCg0KID4gaHR0cHM6Ly95aGV0aWwub3JnL2d1aXgvYzRjMGEwNzEtMmUwMy1k
NGQ2LTY3MTgtMDU0MjRkMjFkMTQ2QHRlbGVuZXQuYmUvDQo+IFNvbWV0aW1lcywgdGhlcmUg
cmVtYWlucyBtb3JlIHRoYW4gb25lIGFjY2VwdGFibGUgd2F5IHRvIGFjY29tcGxpc2ggdGhl
IA0KPiBnb2FsLiBJbiB0aGF0IGNhc2UsIGNob29zZSB3aGF0ZXZlciBhcHBlYXJzIHRvIGJl
IG1vc3QgY29udmVuaWVudC4NCg0KDQoNCg0KPj4+IEFzIHN1Y2gsIEkgdGhpbmsgaXQgd291
bGQgYmUgZWFzaWVyIHRvIHN0YXRlICJBIHBhY2thZ2UncyBzb3VyY2UNCj4+PiBzaG91bGQN
Cj4+PiBiZSB0aGUgc21hbGxlc3QgY29ycmVzcG9uZGluZyBzb3VyY2UgaW4gdGVybXMgb2Yg
dW5jb21wcmVzc2VkIGZpbGUNCj4+PiBzaXplLsKgIFRoaXMgY29ycmVzcG9uZGluZyBzb3Vy
Y2UgbXVzdCBjb25zaXN0IG9ubHkgb2YgZnJlZSBzb2Z0d2FyZQ0KPj4+IChub3RlIEZyZWUg
U29mdHdhcmUpIGFuZCBzaG91bGQgYnVpbGQgb24gYWxsIHBsYXRmb3JtcyBzdXBwb3J0ZWQg
YnkNCj4+PiB1cHN0cmVhbS4iwqAgTm90ZSBob3cgc21hbGxlc3QgbmF0dXJhbGx5IGltcGxp
ZXMgdW5idW5kbGluZyBidW5kbGVkDQo+Pj4gc291cmNlcy4NCj4+DQo+PiBUaGlzIGNyaXRl
cml1bSBvbiBvdmVybHkgc21hbGwgc291cmNlcy7CoCBPZnRlbiwgYSBwYWNrYWdlJ3Mgc291
cmNlDQo+PiBjb250YWlucyB0aGluZ3MgdGhhdCBpcyBub3QgdXNlZCBmb3IgdGhlIGJ1aWxk
IG9yIG91dHB1dHMgYW5kIGhlbmNlDQo+PiBpcyBub3QgcGFydCBvZiB0aGUgY29ycmVzcG9u
ZGluZyBzb3VyY2UuwqAgRXhhbXBsZXM6DQo+IE5vdGUgInNob3VsZCIgcmF0aGVyIHRoYW4g
InNoYWxsIiBvciAibXVzdCIsIG1lYW5pbmcgdGhhdCBzbGlnaHRseQ0KPiBsYXJnZXIgdGFy
YmFsbHMgYXJlIHN0aWxsIGFjY2VwdGFibGUuDQpPSy4gIFRoZSBjcml0ZXJpdW0gcmVtYWlu
cyBvdmVybHkgdGlnaHQgdGhvdWdoIC0tIGJ5IHRoYXQgY3JpdGVyaXVtLCANCnNsaWdodGx5
IGxhcmdlciB0YXJiYWxscyBhcmUgY29uc2lkZXJlZCB1bmRlc2lyYWJsZSwgZXZlbiB3aGVu
IHRoZXkgaGF2ZSANCnVzZWZ1bCAoYW5kIGhlbmNlLCBkZXNpcmVkKSB0aGluZ3M6DQoNCj4g
DQo+PiAqIHRoZSBzb3VyY2UgY29udGFpbnMgZG9jdW1lbnRhdGlvbiB0aGF0IGNvdWxkIGJl
IGJ1aWx0IGFuZA0KPj4gaW5zdGFsbGVkLA0KPj4gIMKgwqAgYnV0IEd1aXggZG9lc24ndCBk
byBzbyB5ZXQuwqAgLS0+IHNob3VsZCBiZSBrZXB0ICh1bmxlc3Mgbm9uLWZyZWUpDQo+PiAq
IGRvY3VtZW50YXRpb24gdGhhdCBpc24ndCBtZWFudCB0byBiZSBidWlsdCBvciBpbnN0YWxs
ZWQNCj4+ICDCoMKgIChlLmcuIEhBQ0tJTkcsIFBBQ0tBR0VSUywgLi4uKSAtLT4gdXNlZnVs
LCBzaG91bGRuJ3QgYmUgcmVtb3ZlZC4NCj4+ICogLmdpdGlnbm9yZSwgLmdpdGh1YiwgLi4u
IC0tPiBub3RoaW5nIHdyb25nIHdpdGggcmVtb3ZpbmcgdGhvc2UsDQo+PiAgwqDCoCBidXQg
cG9pbnRsZXNzLCBsZXQncyBub3Qgd2FzdGUgb3VyIHRpbWUgd2l0aCBsb29raW5nIGZvciB0
aG9zZQ0KPj4gIMKgwqAgYW5kIHJlbW92aW5nIHRoZW0sIGV2ZW4gdGhvdWdoIGRvaW5nIHNv
IHdvdWxkIG1ha2UgaXQgc21hbGxlci4NCj4+ICogc291cmNlIGZpbGVzIGZvciBwbGF0Zm9y
bXMgdGhlIHVwc3RyZWFtIGRvZXMgbm90IHN1cHBvcnQNCj4+IHlldC9hbnltb3JlDQo+PiAg
wqDCoCAoYnV0IHdpdGggc29tZSB2b2x1bnRlZXIgZWZmb3J0IChlLmcuIGJ1Z2ZpeGVzKSwg
aXQgbWlnaHQgYmVjb21lDQo+PiAgwqDCoCBhIHN1cHBvcnRlZCBzeXN0ZW0gYWdhaW4pDQo+
PiAgwqDCoCAtLT4gcmVtb3ZpbmcgdGhlbSAoZS5nLiBhcyBwYXJ0IG9mIGFuIG92ZXJseS1i
cm9hZA0KPj4gKGRlbGV0ZS1maWxlLXJlY3Vyc2l2ZWx5DQo+PiAidGhpcy1kaXItaGFzLWJ1
bmRsaW5nLWFsYmVpdC1ub3QtYWxsLW9mLWl0LWlzLWJ1bmRsaW5nIikpDQo+PiAgwqDCoMKg
wqDCoMKgIGNhbiBiZSBPSy1pc2gsIGJ1dCByZW1vdmluZyB0aGVtIGZvciAnbWluaW1hbGl0
eScgaXMNCj4+IHBvaW50bGVzcy4NCg0KPiBJIHNlZSB5b3UncmUgbml0cGlja2luZyBmb3Ig
dGhlIHNha2Ugb2YgdGhlIGFyZ3VtZW50LA0KDQpJJ20gbm90LiAgSXQncyBuaXRwaWNraW5n
IGZvciB0aGUgc2FrZSBvZiB0aGUgZm91ciAqIGV4YW1wbGVzIGFib3ZlLg0KDQo+IGJ1dCBu
b25lIG9mIHRoZQ0KPiBleGFtcGxlcyB5b3UgcHJvdmlkZSAoc2FmZSBmb3IgdGhlIGJ1bmRs
aW5nIG9uZSkgYWRkIG11Y2ggY29zdCB0bw0KPiBlaXRoZXIgcGFja2luZyBvciB1bnBhY2tp
bmcuDQoNCk5vdCB0aGUgcG9pbnQsIHRoZSBwb2ludCBpcyB0aGF0IGhhdmluZyB0byB0cmVh
dCB0aG9zZSBleGFtcGxlcyANCnNlcmlvdXNseSAgaXMgYSB3YXN0ZSBvZiB0aW1lIGFuZCBl
dmVuIHNvbWV3aGF0IGhhcm1mdWwgKHJlbW92aW5nIHVzZWZ1bCANCnN0dWZmKS4NCg0KPiBU
aHVzLCBJJ20gcHJldHR5IHN1cmUgd2UgY2FuIGlnbm9yZSB0aGVtDQo+IGZvciBwcmFjdGlj
YWwgcHVycG9zZXMuDQoNCkFzIEkndmUgZXhwbGFpbmVkLCB0aGlzIGd1aWRlbGluZSBpcyBp
bmNvbnNpc3RlbnQgd2l0aCB3aGF0IGlzIGFjdHVhbGx5IA0KcmVjb21tZW5kZWQuICBIZXJl
IGFyZSBzb21lIHByYWN0aWNhbCBwdXJwb3NlczoNCg0KKiBtaW5pbWFsIGRpc3NvbmFuY2Ug
YmV0d2VlbiAnYXBwcmVjaWF0ZWQgYnkgcG9saWN5JyBhbmQgJ2FwcHJlY2lhdGVkIGJ5DQog
ICByZXZpZXdlcnMsIHBhY2thZ2VycywgdXNlcnMnLg0KKiBub3QgaGF2aW5nIHRvIHJldmll
dyBhbmQgYWNjZXB0IHBvaW50bGVzcyBwYXRjaGVzIHRvIEd1aXggZm9yIGRlbGV0aW5nDQog
ICAuZ2l0aHViLCAuZ2l0aWdub3JlLCB1bmluc3RhbGxlZCBkb2N1bWVudGF0aW9uIHRoYXQg
d2VyZSB3cml0dGVuDQogICBmb3IgdGhlIHNha2Ugb2YgbWluaW1hbGl0eQ0KKiBub3QgaGF2
aW5nIHRvIChpbiB0aGUgc2Vuc2Ugb2Y6IGl0IHdvdWxkIGJlIGFwcHJlY2lhdGVkIGlmIHlv
dSdkIGRvDQogICB0aGF0KSB3cml0ZSBzdWNoIHBhdGNoZXMNCg0KICAgVGhhdCBiZWluZyBz
YWlkLCBpZiB5b3UgaGF2ZSBhIGJldHRlcg0KPiBmb3JtdWxhdGlvbiwgcGxlYXNlIGRvIHRl
bGwuDQoNClRoZSBmb3VyIGd1aWRpbmcgcHJpbmNpcGxlcy4NCg0KPiANCj4+DQo+Pj4+PiBJ
IHN0aWxsIGZpbmQgdGhpcyB3b3JkaW5nIHZlcnkgY29uZnVzaW5nLiBQZXJoYXBzICJUbyBh
ZGQgbmV3DQo+Pj4+PiBmdW5jdGlvbmFsaXR5LCBhIHBhdGNoIGlzIGFsbW9zdCBhbHdheXMg
dGhlIGJlc3QgY2hvaWNlLiBGb3INCj4+Pj4+IG9uZSwNCj4+Pj4+IGl0IGlzIGxpa2VseSB0
aGF0IHRoZSBuZXcgZnVuY3Rpb25hbGl0eSByZXF1aXJlcyBjaGFuZ2luZw0KPj4+Pj4gbXVs
dGlwbGUNCj4+Pj4+IGxpbmVzIG9mIHNvdXJjZSBjb2RlLCB3aGljaCBpcyBtb3JlIGNvbnZl
bmllbnQgdG8gZG8gd2l0aCBhDQo+Pj4+PiBwYXRjaA0KPj4+Pj4gdGhhbiB3aXRoIGEgc25p
cHBldC4gRnVydGhlciwgcGF0Y2hlcyBjYW4gYmUgdGFrZW4gZnJvbSBhbmQNCj4+Pj4+IHN1
Ym1pdHRlZCB0byB1cHN0cmVhbXMgbW9yZSBlYXNpbHkuIElmIHlvdXIgcGF0Y2ggaGFzIG5v
dCBiZWVuDQo+Pj4+PiBzdWJtaXR0ZWQgdG8gdXBzdHJlYW0sIGNvbnNpZGVyIGRvaW5nIHNv
LiINCj4+Pj4gSXQgbG9zZXMgc29tZSBpbmZvcm1hdGlvbiAodGhhdCBwYXRjaGVzIGFyZSBw
cmVmZXJyZWQpIGFuZA0KPj4+PiAoYWZ0ZXIgcmUtYWRkaW5nIHRoZSBjb25jbHVzaW9uKSBp
cyBtb3JlIHZlcmJvc2UsIHdoaWNoIGFwcGVhcnMNCj4+Pj4gdG8gYmUgY29uc2lkZXJlZCB2
ZXJ5IGltcG9ydGFudC4NCj4+PiBXaGljaCBjb25jbHVzaW9uIGlzIHRoZXJlIHRvIHJlLWFk
ZD8NCj4+DQo+PiAicGF0Y2hlcyBhcmUgcHJlZmVycmVkIg0KPj4NCj4+ICDCoMKgIFRoZSBj
b25jbHVzaW9uIGlzIGFscmVhZHkgc3RhdGVkDQo+Pj4gaW4gdGhlIGJlZ2lubmluZzogcGF0
Y2hlcyBhcmUgYWxtb3N0IGFsd2F5cyB0aGUgYmVzdCBjaG9pY2UuwqAgVGhlbg0KPj4+IHR3
bw0KPj4+IHJlYXNvbnMgYXMgZm9yIHdoeS7CoCBUaGUgcGFydCB3LnIudC4gdXBzdHJlYW1p
bmcgY2hhbmdlcyBoYXMgYWxzbw0KPj4+IGJlZW4NCj4+PiBhZGRyZXNzZWQuDQo+Pg0KPj4g
V2hpbGUgSSBjb25zaWRlciB0aGF0IHBvbGljaWVzIHNob3VsZCBoYXZlICJiZXN0IGNob2lj
ZXMiIGNvaW5jaWRpbmcNCj4+IHdpdGggInByZWZlcnJlZCIgYW5kIHRoYXQgbm90IGRvaW5n
IHNvIHdvdWxkIGJlIGlsbG9naWNhbCwgcGVvcGxlLA0KPj4gcHJvamVjdHMsIGRlY2lzaW9u
cyAuLi4gYXJlIGZhciBmcm9tIGFsd2F5cyBsb2dpY2FsLg0KPj4NCj4+IEJlY2F1c2Ugb2Yg
dGhpcywgcGVvcGxlIGNhbm5vdCBhc3N1bWUgdGhhdCB0aGUgJ2Jlc3QgY2hvaWNlcycgYXJl
DQo+PiAncHJlZmVycmVkJywgc28gaXQgbmVlZHMgdG8gYmUgbWVudGlvbmVkIGV4cGxpY2l0
bHkgdGhhdCB0aGVzZSAnYmVzdA0KPj4gY2hvaWNlcycgYXJlIGFjdHVhbGx5ICdwcmVmZXJy
ZWQnLg0KPiBJbiB0aGF0IGNhc2UsIHNpbXBseSB3cml0ZSBwcmVmZXJyZWQgY2hvaWNlPw0K
DQpJdCBpcyBhbHJlYWR5IG1lbnRpb25lZCB0aGF0IHRoZXkgYXJlIHByZWZlcnJlZDoNCg0K
PiDigJhBcyBzdWNoLCBwYXRjaGVzIGFyZSBwcmVmZXJyZWTigJkNCg0KQnkgcmVtb3Zpbmcg
dGhlIGluZm9ybWF0aW9uIHRoYXQgJ3BhdGNoZXMgYXJlIHRoZSBtb3N0IGNvbnZlbmllbnQg
DQpjaG9pY2UnIChieSByZXBsYWNpbmcgaXQgd2l0aCDigJhwYXRjaGVzIGFyZSB0aGUgcHJl
ZmVycmVkIGNob2ljZeKAmSksIHRoZSANCmxvZ2ljYWwgc3RydWN0dXJlIGJlY29tZXMgd2Vh
a2VyOyBhIHBhcnQgb2YgdGhlIGV4cGxhbmF0aW9uIG9uIHRoZSDigJh3aHnigJkgDQpiZWNv
bWVzIG1pc3NpbmcuDQoNCj4gDQo+Pj4gSSdtIHVzaW5nIGVudW1lcmF0aW9uIGFzIGEgc3Vw
ZXIgdGVybSBoZXJlLCB3aGljaCBjYW4gYmUNCj4+PiAoKHN1YilzdWIpc2VjdGlvbnMsIGNo
YXB0ZXJzLCBsaXN0IGVsZW1lbnRzLCB3aGF0ZXZlciwgYW5kIG15IGNsYWltDQo+Pj4gaXMg
dGhhdCB3ZSBiYXJlbHkgaGF2ZSBlbm91Z2ggcHJpbmNpcGxlcyB0byBhbGxvdyB0aGUgdXNl
IG9mIGENCj4+PiBwbHVyYWwuDQo+Pg0KPj4gSW4gRW5nbGlzaCwgdGhpbmdzIGFyZSBlaXRo
ZXIgcGx1cmFsIG9yIHNpbmd1bGFyLsKgIEV2ZXJ5dGhpbmcgPj0gMiBpcw0KPj4gcGx1cmFs
LsKgIFRoZXJlIG51bWJlciBvZiBwcmluY2lwbGVzLCBob3dldmVyIHdlIGNvdW50IHRoZW0s
IGlzLCBhdA0KPj4gbGVhc3QsIDIuwqAgQ29uc2VxdWVudGx5LCB0aGUgcHJpbmNpcGxlcyBh
cmUgcGx1cmFsLCBub3Qgc2luZ3VsYXIuDQo+PiBUcmVhdGluZyB0aGUgcHJpbmNpcGxlcyBh
cyBzaW5ndWxhciBpcyBzaW1wbHkgZ3JhbW1hdGljYWxseQ0KPj4gaW5jb3JyZWN0Lg0KPiBD
b3JyZWN0aW9uOiBFdmVyeXRoaW5nIHRoYXQgaXNuJ3QgZXhhY3RseSAxIGlzIHBsdXJhbCBp
biBFbmdsaXNoLA0KPiBpbmNsdWRpbmcgMCwgd2l0aCBwZXJoYXBzIHRoZSBleGNlcHRpb24g
b2YgLTEgYWxzbyB1c2luZyBzaW5ndWxhci4NCj4gDQo+PiBNYXliZSBpdCBpcyBiYXJlbHkg
YWxsb3dlZCB0byBiZSBwbHVyYWwsIGJ1dCBFbmdsaXNoIGdyYW1tYXIgZG9lc24ndA0KPj4g
Y2FyZSBhYm91dCB0aGF0IC0tIGl0IGlzIGRlZmluaXRpdmVseSBkaXNhbGxvd2VkIHRvIGJl
IHNpbmd1bGFyLCBvbmx5DQo+PiBwbHVyYWwgcmVtYWlucy4NCj4gTm90ZSB0aGF0IG15IGFy
Z3VtZW50IGlzbid0IGFib3V0IEVuZ2xpc2ggZ3JhbW1hciwgaXQgdXNlcyBFbmdsaXNoDQo+
IGdyYW1tYXIuDQoNCllvdXIgYXJndW1lbnQgaXMgdGhhdCDigJh0aGVyZSBhcmVuJ3QgYSBz
dWZmaWNpZW50IGFtb3VudCBvZiBwcmluY2lwbGVzIHRvIA0KYWxsb3cgdGhlIHVzZSBvZiBh
IHBsdXJhbOKAmS4gICdQbHVyYWwnIGlzIGEgY29uY2VwdCBvZiBFbmdsaXNoIGdyYW1tYXIu
DQpBcyBzdWNoLCB5b3UgaGF2ZSB3cml0dGVuIGFuIGFyZ3VtZW50IGFib3V0IEVuZ2xpc2gg
Z3JhbW1hci4NCg0KWW91IGFwcGVhciB0byBoYXZlIG1lYW50IHNvbWUgZGlmZmVyZW50IGFy
Z3VtZW50LCBidXQgYWxsIHRoZSBhcmd1bWVudHMgDQpvbiDigJhhcmUgdGhleSBndWlkaW5n
IHByaW5jaXBsZXMgb3Igbm904oCZIEkndmUgcmVhZCBhcmUgYmFzZWQgb24gdGhlIA0KbnVt
YmVyIG9mIHByaW5jaXBsZXMgb3Igb24gd2hhdCAnZ3VpZGluZyBwcmluY2lwbGUnIG1lYW5z
LCB3aGljaCBhcmUgDQppc3N1ZXMgb2YgZ3JhbW1hciBhbmQgdm9jYWJ1bGFyeSByZXNwZWN0
aXZlbHkuDQoNCkknbSBzdGlsbCBub3Qgc2VlaW5nIGhvdyB0aGV5IGFyZW4ndCBndWlkaW5n
IHByaW5jaXBsZXMuICBNYXliZSB5b3UgaGF2ZSANCmEgZGlmZmVyZW50IG1lYW5pbmcgb2Yg
4oCYZ3VpZGluZyBwcmluY2lwbGVz4oCZIGluIG1pbmQ/ICBPciBtYXliZSB5b3Ugd291bGQN
Cmxpa2UgdG8gbmFtZSB0aGVtICdndWlkZWxpbmVzJyBvciAnZ2VuZXJhbCByZWNvbW1lbmRh
dGlvbnMnIGluc3RlYWQuDQoNCj4+PiBBZGRpbmcgdG8gdGhhdCwgbm93IHRoYXQgSSB0aGlu
ayBvZiBpdCwgSSBhbHNvIGRvdWJ0IHRoZWlyDQo+Pj4gdXNlZnVsbmVzcyBpbiBndWlkaW5n
LsKgICJVc2Ugd2hhdGV2ZXIgZmVlbHMgY29udmVuaWVudCwgYnV0IG5vdGUNCj4+PiB0aGF0
IHRoYXQgbWlnaHQgYmUgc3ViamVjdGl2ZSIgaXMgbW9yZSB1c2VmdWwgYXQgdGhlIGVuZCBv
ZiB0aGUNCj4+PiBzZWN0aW9uIHdoZW4gYSB1c2VyIGRpZG4ndCBmaW5kIHdoYXQgdGhleSB3
ZXJlIGxvb2tpbmcgZm9yIHRoYW4gYXQNCj4+PiB0aGUgc3RhcnQuDQo+Pg0KPj4gVGhlIGlu
dHJvZHVjdGlvbiBoYXMgYSBzZXQgb2YgZ3VpZGluZyBwcmluY2lwbGVzLCBmcm9tIHdpdGgg
Y29uY3JldGUNCj4+IGNhc2VzIGFyZSBidWlsdC7CoCBCeSBhZGRpbmcgYW5vdGhlciBwcmlu
Y2lwbGUgYXQgdGhlIGVuZCwgdGhlIGNhc2VzDQo+PiBjYW5ub3QgbWFrZSB1c2Ugb2YgdGhl
ICJ1c2UgWy4uLl0gY29udmVuaWVudCIgcHJpbmNpcGxlLg0KPj4NCj4+IEFkZGl0aW9uYWxs
eSwgbm93IHRoZSB1c2VyIGhhcyB0byBsb29rIGF0IF90d29fIHBsYWNlcyB0byBmaW5kIHRo
ZQ0KPj4gZ3VpZGluZyBwcmluY2lwbGVzIC0tIGF0IHRoZSBiZWdpbm5pbmcsIGFuZCBhdCB0
aGUgZW5kLsKgIFdvcnNlLA0KPj4gdGhlIGJlZ2lubmluZyBkb2VzIG5vdCBoYXZlIGEgY3Jv
c3MtcmVmZXJlbmNlIHRvIHRoZSBlbmQsIHNvIHNpbmNlDQo+PiB0aGUgc2V0IGF0IHRoZSBi
ZWdpbm5pbmcgaXMgcHJlc2VudGVkIGFzIGV4aGF1c3RpdmUsIHRoZSB1c2VyIG1pZ2h0DQo+
PiBub3Qga25vdyB0aGVyZSBpcyBhbm90aGVyIGd1aWRpbmcgcHJpbmNpcGxlLg0KPj4NCj4+
IEFuZCBldmVuIGlmIHRoZXkgZGlkIHJlYWQgdGhyb3VnaCB0aGUgd2hvbGUgc2VjdGlvbiAo
ZXZlbiB0aG91Z2ggdGhleQ0KPj4gc2hvdWxkIG9ubHkgaGF2ZSB0byByZWFkIHRoZSBpbnRy
b2R1Y3Rpb24gYW5kIHRoZSByZWxldmFudCB3b3JrZWQtb3V0DQo+PiBjYXNlKSwgYXNzdW1p
bmcgdGhleSByZWFkIHRocm91Z2ggaXQgaW4gYSBsaW5lYXIgZmFzaGlvbiwgZHVlIHRvIHRo
ZQ0KPj4gbmV3IGd1aWRpbmcgcHJpbmNpcGxlIHRoYXQgd2Fzbid0IGFsbHVkZWQgdG8gYXQg
dGhlIGJlZ2lubmluZywgdGhleQ0KPj4gaGF2ZSB0byByZWRvIHRoZWlyIG1lbnRhbCBtb2Rl
bCBvZiAiTW9kaWZ5aW5nIFNvdXJjZXMiIGFzIHRoaXMNCj4+IHByaW5jaXBsZSBjb3VsZCBp
bnZhbGlkYXRlIHRoaW5ncy4NCj4gVGhpcyBzaG93cyBib3RoIGEgcHJvYmxlbSB3aXRoIHlv
dXIgc3RydWN0dXJlLA0KDQpJJ20gbm90IHNlZWluZyB0aGUgcHJvYmxlbS4gIEhvdyBkb2Vz
IHRoaXMgc2hvdyBhIHByb2JsZW0/DQoNCj4gYnV0IG1vcmUgaW1wb3J0YW50bHksIGENCj4g
ZmFpbHVyZSB0byB1bmRlcnN0YW5kIHdoYXQgSSBtZWFudCB3aGVuIEkgd3JvdGUgInVzZSB3
aGF0ZXZlciBpcw0KPiBjb252ZW5pZW50IiBpbiBteSBvd24gcGF0Y2guICBUaGlzIHByaW5j
aXBsZSAqY2FuKiBvbmx5IHdvcmsgZm9yIGNhc2VzDQo+IGluIHdoaWNoIHRoZXJlIGlzICpu
byBjbGVhcmx5IGVzdGFibGlzaGVkIHByYWN0aWNlKiwgdGh1cyBwdXR0aW5nIGl0IGF0DQo+
IHRoZSBlbmQgKmFmdGVyIGhhdmluZyBlbnVtZXJhdGVkIGFsbCBwcmFjdGljZXMqIGlzIHRo
ZSBsb2dpY2FsIGNob2ljZS4NCj4gV2l0aCB5b3VyIHN0cnVjdHVyZSwgeW91IGhhdmUgdG8g
YmVuZCBpdCBzaWRld2F5cyB0byBzaG9laG9ybiBpdCBpbg0KPiB3aXRoIHRoZSBvdGhlciBw
cmluY2lwbGVzLg0KDQpZb3UgYXBwZWFyIHRvIGhhdmUgbWVhbnQgaXQgYXMgYSBraW5kIG9m
IOKAmGZhbGxiYWNrIHByaW5jaXBsZeKAmSwgaW4gd2hpY2ggDQpjYXNlIHB1dHRpbmcgaXQg
YXQgdGhlIGVuZCBkb2VzIGluZGVlZCBtYWtlIHNlbnNlLg0KDQpJbiBteSBwYXRjaCwgdGhl
IHByaW5jaXBsZSB3b3JrcyBkaWZmZXJlbnRseSwgaXQgaXMgYWxzbyB1c2VkIGZvciANCmV4
cGxhaW5pbmcgYWxyZWFkeSBlc3RhYmxpc2hlZCBwcmFjdGljZXMsIGZvciB0aGUgY2FzZXMg
d2hlcmUgdGhlcmUgYXJlIA0KbXVsdGlwbGUgdGVjaG5pY2FsbHkgYWxsb3dlZCBwcmluY2lw
bGVzIGJ1dCBzdGlsbCBvZnRlbiBhIHNpbmdsZSANCl9yZWNvbW1lbmRlZF8gcHJpbmNpcGxl
LiAgRS5nLjoNCg0KPiBVc3VhbGx5LCBhIGJ1ZyBmaXggY29tZXMgaW4gdGhlIGZvcm0gb2Yg
YSBwYXRjaCBjb3BpZWQgZnJvbSB1cHN0cmVhbSBvcg0KPiBhbm90aGVyIGRpc3RyaWJ1dGlv
bi4gIEluIHRoYXQgY2FzZSwgc2ltcGx5IGFkZGluZyB0aGUgcGF0Y2ggdG8gdGhlDQo+IEBj
b2Rle3BhdGNoZXN9IGZpZWxkIGlzIHRoZSBtb3N0IGNvbnZlbmllbnQgYW5kIHVzdWFsbHkg
ZG9lcyBub3QgY2F1c2UNCj4gYW55IHByb2JsZW1zOyB0aGVyZSBpcyBubyBuZWVkIHRvIHJl
d3JpdGUgaXQgYXMgYSBzbmlwcGV0IG9yIGEgcGhhc2UuDQo+IA0KPiBJZiBubyByZWFkeS1t
YWRlIHBhdGNoIGFscmVhZHkgZXhpc3RzLCB0aGVuIC4uLl0NCg0KYW5kDQoNCj4gVG8gYWRk
IG5ldyBmdW5jdGlvbmFsaXR5LCBhIHBhdGNoIGlzIGFsbW9zdCBhbHdheXMgdGhlIG1vc3Qg
Y29udmVuaWVudA0KPiBjaG9pY2Ugb2YgdGhlIHRocmVlIA0KDQouDQoNClRvIGdvIGZyb20g
dGhlIHByaW5jaXBsZSBhcyB1c2VkIGluIHlvdXIgcGF0Y2ggdG8gdGhlIHByaW5jaXBsZSBh
cyB1c2VkIA0KaW4gbXkgcGF0Y2gsIHBlcmhhcHMgaW4gdGhlIHByb2Nlc3MgaXQgaXMgYmVu
dCBzaWRld2F5cyBhbmQgc2hvZWhvcm5lZC4NCkJ1dCBhZnRlciBhbGwgdGhlIGJlbmRpbmcg
YW5kIHNob2Vob3JuaW5nLCBpdCBzZWVtcyB0byBmaXQgd2VsbCBub3cgaW4gDQp0aGUgYmVn
aW5uaW5nIChhbmQgbm90IHdlbGwgYXQgYWxsIHRoZSBlbmQpLCBzbyBJJ20gbm90IHNlZWlu
ZyBhbnkgDQpwcm9ibGVtcyBoZXJlLg0KDQo+IA0KPj4+IEF0IHRoZSByaXNrIG9mIHJlc3Bv
bmRpbmcgam9raW5nbHkgdG8gd2hhdCB3YXMgbWVhbnQgc2VyaW91czogSQ0KPj4+IGRpZG4n
dCBrbm93IHdlIHN1ZGRlbmx5IGdhaW5lZCAyMCBndWlkaW5nIHByaW5jaXBsZXMuDQo+Pg0K
Pj4gMjUgbGluZXMgYXJlIGZvciB0aGUgZ3VpZGluZyBwcmluY2lwbGVzIChzb21ldGltZXMg
cmVmZXJyaW5nIHRvIGENCj4+IHByaW5jaXBsZSBvZiBlbHNld2hlcmUgaW4gR3VpeCwgc29t
ZXRpbWVzIGEgbmV3IHByaW5jaXBsZSBmb3INCj4+ICJNb2RpZnlpbmcgU291cmNlcyIpLsKg
IFlvdSBwcm9wb3NlZCB0byAnY2FjaGUnIHRoZW0gc29tZWhvdy7CoCBJbg0KPj4gR3VpbGUs
IHRvIGNhY2hlIHNvbWV0aGluZywgeW91IGNhbiB1c2UgJ2RlbGF5L2ZvcmNlJy7CoCBCdXQg
dGhpcw0KPj4gaW5jcmVhc2VzIHRoZSBhbW91bnQgb2YgY29kZSAoZHVlIHRvIHRoZSBhZGRp
dGlvbmFsIHVzZSBvZiAnZGVsYXknKSwNCj4+IGluc3RlYWQgb2YgZGVjcmVhc2luZy4NCj4+
DQo+PiBUaGUgZG9jdW1lbnRhdGlvbiBlcXVpdmFsZW50ICh3aGF0ZXZlciB0aGF0IG1pZ2h0
IGJlLCBJIGFtIG5vdCBzZWVpbmcNCj4+IG9uZSBteXNlbGYpIHdvdWxkIHRoZW4gYWxzbyBi
ZSBhdCBsZWFzdCBhcyBsb25nLCBtYXliZSBldmVuIGEgbGl0dGxlDQo+PiBsb25nZXIgZHVl
IHRvIHRoZSB1c2Ugb2YgJ2RlbGF5Jy4NCj4gT2theSwgc28gSSBkaWQgbWlzdW5kZXJzdGFu
ZCB0aG9zZSAyNSBsaW5lcyBhcyAyNSBsaW5lcyB3aXRoaW4gdGhlIHRleHQNCj4gY2FsbGlu
ZyBiYWNrIHRvIHRob3NlIGd1aWRpbmcgcHJpbmNpcGxlcyByYXRoZXIgdGhhbiAyNSBsaW5l
cyBmb3IgdGhlDQo+IGd1aWRpbmcgcHJpbmNpcGxlcyB0aGVtc2VsdmVzLiAgU3RpbGwsIDI1
IGxpbmVzIGFyZSBhIGxpdHRsZSBtdWNoLA0KPiBlc3BlY2lhbGx5IGdpdmVuIHRoYXQgdGhl
IGJ1bGsgb2YgaXQgZXhwbGFpbnMgdGhlIHNlbWFudGljcyBvZiB0aGUNCj4gcGFja2FnZXMn
IHNvdXJjZSBmaWVsZC4NCg0KSSB0aGluayB3ZSdsbCBoYXZlIHRvIGFncmVlIHRvIGRpc2Fn
cmVlIG9uIHRoYXQuDQoNCj4gDQo+Pj4+IEkgc3VwcG9zZSB0YWJsZSBpdGVtcyBtaWdodCB0
YWtlIHR3byBsZXNzIGxpbmUgb3Igc28gbGVzcyB0aGFuDQo+Pj4+IHN1YnN1YnNlY3Rpb25z
LCBidXQgSSBkb24ndCB0aGluayB0aGF0J3Mgc3VmZmljaWVudCByZWFzb24gdG8NCj4+Pj4g
c3RlcCBhd2F5IGZyb20gYSBuaWNlIHNlY3Rpb24gc3RydWN0dXJlLg0KPj4+IEFub3RoZXIg
cmVhc29uIGlzIHRoYXQgeW91IGNhbiBlbmQgYSB0YWJsZSBpbiB0aGUgbWlkZGxlIG9mIGEN
Cj4+PiBzZWN0aW9uLCB3aGljaCB5b3UgY2FuJ3QgZG8gd2l0aCBzdWJzZWN0aW9ucy7CoCBI
ZW5jZSB3aHkgSSdtIGFibGUNCj4+PiB0byBwdXQgYSByZW1hcmsgYXQgdGhlIGJvdHRvbSwg
d2hpY2ggeW91IGhhdmUgdG8gY2x1bXNpbHkgZml0IGludG8NCj4+PiB0aGUgdG9wLg0KPj4N
Cj4+IEkgY2FuLCBpbmRlZWQsIG5vdCBwdXQgdGhlICdjb252ZW5pZW5jZSBwcmluY2lwbGUn
IGF0IHRoZSBib3R0b20sDQo+PiBleGNlcHQgcGVyaGFwcyBieSBhZGRpbmcgYSBuZXcgc3Vi
c3Vic2VjdGlvbiwgYW5kIGZvciB0YWJsZXMgYWRkaW5nDQo+PiBzdWNoIGEgcmVtYXJrIGF0
IHRoZSBib3R0b20gaXMgaW5kZWVkIG1vcmUgY29udmVuaWVudC4NCj4+DQo+PiBIb3dldmVy
LCBJIGRvbid0IHNlZSB0aGUgJ2hhdmUgdG8gY2x1bXNpbHknIGhlcmUgLS0gYXMgZXhwbGFp
bmVkDQo+PiBlbHNld2hlcmUsIEkgYmVsaWV2ZSB0aGF0IHRoZSAnY29udmVuaWVuY2UgcHJp
bmNpcGxlJyBzaG91bGRuJ3QgYmUNCj4+IHNlcGFyYXRlZCBmcm9tIHRoZSBvdGhlciBwcmlu
Y2lwbGVzIGFuZCB0aGF0IGl0IGZpdHMgbmljZWx5IG5leHQgdG8NCj4+IHRoZSB0aGUgcHJp
bmNpcGxlcyAtLS0gdGhlcmUgaXMgbm8gJ2hhdmUgdG8nLCBiZWNhdXNlIEkgY2hvb3NlIGZv
cg0KPj4gdGhpcywgYW5kIEkgYW0gbm90IHNlZWluZyBhbnkgJ2NsdW1zaW5lc3MnIGhlcmUu
DQo+IEkgdGhpbmsgd2UnZCBoYXZlIHRvIGRlYmF0ZSBjaG9pY2UgdnMuIGZvcmNlIGhlcmUg
d2hpY2ggd291bGQgYmUgYQ0KPiByYXRoZXIgbG9uZyBhc2lkZSwgYnV0IHRvIG1ha2UgbXkg
YXJndW1lbnQgc2hvcnQsIHlvdXIgY2hvaWNlIG9mIGhvdyB0bw0KPiBzdHJ1Y3R1cmUgdGhp
cyBzZWN0aW9uICh0YWJsZSB2cyBzdWJzZWN0aW9ucykgZGlyZWN0bHkgaW5mbHVlbmNlcyB5
b3VyDQo+ICJjaG9pY2UiIHdoZXJlIHRvIHBsYWNlIHBhcnRpY3VsYXIgaW5mb3JtYXRpb24N
Cg0KU3VyZS4NCg0KPiBpbiBhIHdheSB0aGF0IG1pZ2h0DQo+IGluaGliaXQgbmF0dXJhbCBp
bmZvcm1hdGlvbiBmbG93Lg0KDQpJJ20gbm90IHNlZWluZyBpdC4gIEFzIEkndmUgZXhwbGFp
bmVkIHByZXZpb3VzbHksIHB1dHRpbmcgdGhlIHByZW1pc2VzIA0KKD0gZ3VpZGluZyBwcmlu
Y2lwbGVzKSBiZWZvcmUgdGhlIGNvbmNsdXNpb25zICg9IHdvcmtlZCBvdXQgY2FzZXMgLyAN
CnNvbHV0aW9ucykgaXMgYSBsb2dpY2FsIChoZW5jZSwgbmF0dXJhbCkgaW5mb3JtYXRpb24g
ZmxvdywgYW5kIA0KaW50cm9kdWNpbmcgdGhlbSBvbi10aGUtd2F5IG9yIGltcGxpY2l0bHkg
aXMgYWQtaG9jICh1bm5hdHVyYWwpLg0KPj4+PiBUaGUgcGF0Y2ggZG9lcyB0aGlzLCBjdXJy
ZW50bHkuwqAgSXQgYWxyZWFkeSBwcm9wb3NlcyBhIG51bWJlciBvZg0KPj4+PiBoYW1tZXJz
IChwYXRjaGVzLCBzbmlwcGV0cyBhbmQgcGhhc2VzKSBhbmQgcHVycG9zZXMgKGFkZGluZyBu
ZXcNCj4+Pj4gZnVuY3Rpb25hbGl0eSwgZml4aW5nIHRlY2huaWNhbCBpc3N1ZXMsIHVuYnVu
ZGxpbmcsIC4uLikuDQo+Pj4+IEFsc28sIHRoZSBzY2VuYXJpbyAib2ggbm8sIGhvd2V2ZXIg
d2lsbCBJIHB1dCB0aGlzIG5haWwgaW50byBhDQo+Pj4+IHdhbGwiDQo+Pj4+IGFjdHVhbGx5
IGhhcHBlbmVkIC0tIHNlZSB0aGUgU2hlcGhlcmQgZGlzY3Vzc2lvbiwgd2hlcmUgdGhlcmUg
d2FzDQo+Pj4+IGEgbG90IG9mIGRpc2FncmVlbWVudCBvbiBob3cgbmFpbHMgKD0gc21hbGwg
d29yay1hcm91bmQgaW4gdGhlDQo+Pj4+IE1ha2VmaWxlKSBzaG91bGQgYmUgcHV0IGluIHdh
bGxzICg9IHBhdGNoZXMsIHNuaXBwZXQsIHBoYXNlPykuDQo+Pj4+IEl0DQo+Pj4+IHdhcyB0
aGUgd2hvbGXCoHJlYXNvbiB0byBzdGFydCB3cml0aW5nIGEgZG9jdW1lbnRhdGlvbiBwYXRj
aC4NCj4+PiBZb3UgbWlnaHQgd2FudCB0byBhZGQgYSBsaW5rIGhlcmUgaWYgaXQgc3VwcG9y
dHMgeW91ciBhcmd1bWVudCwgYnV0DQo+Pj4gd2l0aG91dCBsb29raW5nIGF0IHRoZSBkaXNj
dXNzaW9uIHRoaXMgcmF0aGVyIHNvdW5kcyBsaWtlICJvaCBubywgSQ0KPj4+IGhhdmUgdGhy
ZWUgaGFtbWVycywgd2hpY2ggb25lIGRvIEkgcGljaz8iIOKAkyB3aGljaCwgZmFpciBlbm91
Z2gsIGlzDQo+Pj4gc3RpbGwgYSBwcm9ibGVtLCBidXQgb25lIHRoYXQgbmVpdGhlciBvZiBv
dXIgcGF0Y2hlcyB3b3VsZCBjYXVzZQ0KPj4+IGltaG8uDQo+Pg0KPj4gQXMgSSB0aGluayBJ
J3ZlIHdyaXR0ZW4gcHJldmlvdXNseSwgdGhlIHdob2xlIHBvaW50IHdhcyB0byBzb2x2ZSB0
aGF0DQo+PiBwcm9ibGVtLiBGb3IgdGhlIGRpc2N1c3Npb24sIHNlZToNCj4+DQo+PiAqIGh0
dHBzOi8vaXNzdWVzLmd1aXguZ251Lm9yZy81NDIxNg0KPj4gKg0KPj4gaHR0cHM6Ly95aGV0
aWwub3JnL2d1aXgvYzRjMGEwNzEtMmUwMy1kNGQ2LTY3MTgtMDU0MjRkMjFkMTQ2QHRlbGVu
ZXQuYmUvDQo+PiAqDQo+PiBodHRwczovL3loZXRpbC5vcmcvZ3VpeC1kZXZlbC84NGUxM2Vm
N2Q0MzcwNjJkZjVjY2E1MWExMmU2ZGE1NDkyOWUwMTc2LmNhbWVsQHRlbGVuZXQuYmUvDQo+
Pg0KPj4gTm90IHNvbHZpbmcgdGhlIHByb2JsZW0gZGVmZWF0cyB0aGUgd2hvbGUgcG9pbnQs
IGFzIHRoZSBwdXJwb3NlIGlzIHRvDQo+PiBzb2x2ZSB0aGF0IHByb2JsZW0uDQo+IEkgdGhp
bmsgd2UgbWlnaHQgYmUgZGlzYWdyZWVpbmcgYWJvdXQgd2hhdCBjb25zdGl0dXRlcyAic29s
dmluZyB0aGUNCj4gcHJvYmxlbSIgaGVyZS4gIENvcnJlY3QgbWUgaWYgSSdtIHdyb25nLCBi
dXQgdG8gbWUgaXQgc2VlbXMgYW55DQo+IHNjZW5hcmlvIHRoYXQgaXMgbm90IGNvdmVyZWQg
Ynkgd2hhdGV2ZXIgcGF0Y2ggaXMgYXBwbGllZCBjb3VudHMgYXMNCj4gIm5vdCBoYXZpbmcg
c29sdmVkIHRoZSBwcm9ibGVtIi4NCg0KSXQgZG9lc24ndCAtLSBJIGNvbnNpZGVyIHRoZSBT
aGVwaGVyZCBwcm9ibGVtIHRvIGJlIHNvbHZlZCBieSBteSBwYXRjaCANCihhbGJlaXQgcmF0
aGVyIHdlYWtseSwgc2VlIGxhdGVyKSwgYW5kIHRoZSB3aWRlciBwcm9ibGVtIG9mIHVuY2xl
YXIgDQpndWlkZWxpbmVzIGFuZCBwb2xpY3kgb24gc25pcHBldC9waGFzZS9wYXRjaCB0byBi
ZSwgcGVyaGFwcyBub3QgcmVhbGx5IA0Kc29sdmVkLCBidXQgc3RpbGwgbXVjaCBpbXByb3Zl
ZCAodGhpcyB0aW1lIG5vdCB3ZWFrbHkpLg0KDQo+IEkgcGVyc29uYWxseSBmaW5kIHRoaXMg
bGluZSBvZg0KPiByZWFzb25pbmcgcXVlc3Rpb25hYmxlLCBhcyB0aGVyZSBhcmUgcGVyZmVj
dGx5IHZhbGlkIHJlYXNvbnMgd2h5DQo+IG11bHRpcGxlIHRvb2xzIGNvdWxkIGFwcGx5Lg0K
DQpTZWUgcHJldmlvdXMgcGFyYWdyYXBoLg0KDQo+IFRha2UgdGhlIHByb2JsZW0gb2YgZW1i
ZWRkaW5nIGEgc3RvcmUgcGF0aC4gIFlvdSBjb3VsZCBmb3IgaW5zdGFuY2UNCj4gcmVwbGFj
ZSBhbGwgb2NjdXJlbmNlcyBvZiAic2giIHdpdGggL2dudS9zdG9yZS8uLi4vYmluL3NoLCBv
ciB5b3UgY291bGQNCj4gZmlyc3QgcmVwbGFjZSB0aGVtIGluIGEgcGF0Y2ggd2l0aCAiQHNo
QCIgYW5kIHRoZW4gcmVwbGFjZSB0aGF0IHdpdGgNCj4gL2dudS9zdG9yZS8uLi4vYmluL3No
LiAgT2YgY291cnNlLCB5b3UgcmFyZWx5IGhhdmUgdG8gZG8gdGhlIGxhdHRlciBhbmQNCj4g
dGhlIGZvcm1lciBpcyBzaW1wbGVyLCBoZW5jZSB3aHkgeW91IHdpbGwgb2Z0ZW4gc2VlIHRo
ZSBmb3JtZXIsIGJ1dA0KPiB0aGF0IGRvZXNuJ3QgbWVhbiB0aGUgbGF0dGVyIGlzIGludmFs
aWQuDQoNCkl0J3MgY29udHJhcnkgdG8gJ0l0IHByZWZlcmFibHkgc2hvdWxkIGFsc28gd29y
ayBvbiBub24tR3VpeCBzeXN0ZW1z4oCZIC0tIA0Kbm90IGludmFsaWQsIGJ1dCBzdGlsbCB1
c3VhbGx5ICgqKSBhZ2FpbnN0IChwcm9wb3NlZCkgcG9saWN5IGJlY2F1c2UgYSANCmRpcmVj
dCBzdWJzdGl0dXRlKiBpcyBhdCB0aGUgc2FtZSB0aW1lIG1vcmUgY29udmVuaWVudCBhbmQg
Zm9sbG93cyBhbGwgDQp0aGUgdGhlIHByaW5jaXBsZXMuDQoNCigqKSBzb21ldGltZXMsIGlu
IGNhc2Ugb2Ygc2hlbGwgc2NyaXB0cywgYSBzdWJzdGl0dXRlKiBpcyBmcmFnaWxlIA0KKHN1
YnN0aXR1dGluZyB0b28gbXVjaCksIGluIHdoaWNoIGNhc2UgYSAic2giIC0+ICJAc2hAIiBi
ZWNvbWVzIG1vcmUgDQpjb252ZW5pZW50IGFuZCBoZW5jZSB0aGUgdmlvbGF0aW9uIG9mIHRo
ZSAnbm9uLUd1aXggc3lzdGVtJyBydWxlcyANCmJlY29tZXMgYWNjZXB0YWJsZS4NCg0KPj4+
Pj4gQW5kIGlmIHRoZXkgZG9uJ3QgZmluZCBhbnl0aGluZywgdGhleSBzZWUgdGhlIGhhbmR5
IGxpdHRsZSBsaW5lDQo+Pj4+PiBhdCB0aGUgYm90dG9tIHNheWluZyAidXNlIHdoYXRldmVy
IHlvdSB0aGluayBpcyBjb252ZW5pZW50Ii4NCj4+Pj4gTm93aGVyZSBkaWQgdGhlIHBhdGNo
IGltcGx5IHRoYXQgdGhlIGxpc3RlZCBjYXNlcyB3ZXJlIGFsbCBjYXNlcy4NCj4+Pj4gSW4g
ZmFjdCwgaW4gdHdvIHBsYWNlcyBpbiB0aGUgaW50cm9kdWN0aW9uIGl0IGlzIGltcGxpZWQg
dGhhdCB0aGUNCj4+Pj4gZXhhbXBsZXMgYXJlIG5vdCBleGhhdXN0aXZlLCBhbmQgdGhhdCB0
aGV5IGNhbiBjaG9vc2UgYWNjb3JkaW5nDQo+Pj4+IHRvIGNvbnZlbmllbmNlwqAgWy4uLl0N
Cj4+PiBFbXBoYXNpcyBvbiBoYW5keSBsaXR0bGUgbGluZSByYXRoZXIgdGhhbiBuZWVkaW5n
IHRvIGJlIHRvbGQgdHdpY2UNCj4+PiAocGFydGljdWxhcmx5IGlmIHBlb3BsZSBoYXZlIG5v
IGlkZWEgd2hhdCB0byBleHBlY3QgZHVlIHRvIG5vdA0KPj4+IGhhdmluZyBsb29rZWQgYXQg
dGhlIHdvcmtlZC1vdXQgY2FzZXMgeWV0KS4NCj4+DQo+PiBUaGV5IGRvbid0IG5lZWQgdG8g
YmUgdG9sZCB0d2ljZS7CoCBBbHNvLCBteSBwYXRjaCBhbHNvIGhhcyB0aGF0IGhhbmR5DQo+
PiBsaXR0bGUgbGluZSAoYWxiZWl0IGRpZmZlcmVudGx5IHdvcmRlZCksIHNlZSB0aGUgJ2d1
aWRpbmcNCj4+IHByaW5jaXBsZXMnLg0KPj4NCj4+IEFsc28sIG9uIHRoZSAnbm8gaWRlYSB3
aGF0IHRvIGV4cGVjdCcgLS0gdGhpcyBpcyBleGFjdGx5IHRoZSBzYW1lIGZvcg0KPj4geW91
ciBwYXRjaCB0b28/wqAgSW4gYm90aCBwYXRjaGVzLCBpZiB0aGUgdXNlciBvbmx5IHJlYWRz
IHRoZQ0KPj4gaW50cm9kdWN0aW9uIGFuZCBjb25jbHVzaW9uIChpZiBhbnkpIGFuZCBkb2Vz
bid0IHJlYWQgdGhlIGFjdHVhbA0KPj4gKHJlbGV2YW50IGV4YW1wbGVzKS8oZXhwbGFuYXRp
b24gb2YgcGF0Y2hlcywgc25pcHBldHMsIHBoYXNlcyksIHRoZW4NCj4+IHRoYXQncyB0aGVp
ciBwcm9ibGVtLg0KPiBJIGRvIHRoaW5rIGEgdGFibGUgaW4gdGhlIG1pZGRsZSBvZiB0aGUg
c2VjdGlvbiBpcyBoYXJkIHRvIGlnbm9yZSwNCg0KSSB0aGluayBzbyB0b28sIGhlbmNlIG15
IHByZXZpb3VzIHJlc3BvbnNlLg0KDQo+IGJ1dCBzdXBwb3NlIGZvciB0aGUgc2FrZSBvZiBh
cmd1bWVudCB0aGF0IHRoZXkgZG8sIFsuLi5dDQoNCkdpdmVuIHRoaXMgcmVzcG9uc2UsIEkg
YXNzdW1lIEkndmUgbWlzaW50ZXJwcmV0ZWQgd2hhdCB5b3UgbWVhbnQgd2l0aCANCuKAmG5v
dCBoYXZpbmcgbG9va2VkIGF0IHRoZSB3b3JrZWQtb3V0IGNhc2VzIHlldOKAmS4NCg0KPj4+
Pg0KPj4+Pj4gSSBhbHNvIGV4cGFuZCBhIGxpdHRsZSBvbiB0aGUgYmVuZWZpdHMgYW5kIGRy
YXdiYWNrcyBvZg0KPj4+Pj4gdGhlc2UgYXBwcm9hY2hlcyBhcyB5b3Ugd291bGQgd2hlbiBk
ZXNjcmliaW5nIGRlc2lnbiBwYXR0ZXJucy4NCj4+Pj4gVGhpcyBpcyBhbHNvIGRvbmUgaW4g
bXkgcGF0Y2guIFsuLi5dDQo+Pj4gVGhpcyBpcyBub3QgYWJvdXQgdGhlIGNvbnRhaW5lZCBp
bmZvcm1hdGlvbiwgYnV0IHRoZSBzdHJ1Y3R1cmUgb2YNCj4+PiB0aGUgY29udGFpbmVkIGlu
Zm9ybWF0aW9uLg0KPj4+DQo+Pj4gTXkgc29sdXRpb24tPnByb2JsZW0gc3R5bGUgZm9sbG93
cyByb3VnaGx5IHRoaXMgc3R5bGU6DQo+Pj4gMS4gc29sdXRpb24NCj4+PiAyLiBwcm9ibGVt
cyBpdCBpcyBrbm93biB0byBzb2x2ZQ0KPj4+IDMuIGhvdyB0byB1c2UNCj4+PiA0LiBwcm9w
ZXJ0aWVzLCBjYXZlYXRzLCBldGMuDQo+Pj4NCj4+PiBZb3VyIHByb2JsZW0tPnNvbHV0aW9u
IHN0eWxlIHJvdWdobHkgaGFzIHRoZSBmb2xsb3dpbmc6DQo+Pj4gMS4gcHJvYmxlbQ0KPj4+
IDIuIChzZXQgb2YpIHNvbHV0aW9uKHMpDQo+Pj4gMy4gaWYgbW9yZSB0aGFuIG9uZSBzb2x1
dGlvbiwgbWF5YmUgYSBoZWxwIHRvIHNlbGVjdA0KPj4NCj4+IEFsc28sIGluIG5vIHBhcnRp
Y3VsYXIgb3JkZXINCj4+DQo+PiAgwqDCoCA0LjogaG93IHRvIHVzZQ0KPj4gIMKgwqAgNS46
IGV4cGxhbmF0aW9uIHdoeSBpdCBpcyBwcmVmZXJyZWQgKHByb3BlcnRpZXMsIGNhdmVhdHM/
KQ0KPiBObyBwYXJ0aWN1bGFyIG9yZGVyIGlzIHByb2JsZW1hdGljLA0KDQpJJ20gbm90IHNl
ZWluZyB3aHkuDQoNCiAgYnV0IG1vcmUgaW1wb3J0YW50bHkgaWYgYQ0KPiB0ZWNobm9sb2d5
IGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgKGd1YXJhbnRlZWQgYnkgdGhlIHBpZ2VvbmhvbGUN
Cj4gcHJpbmNpcGxlKSwgdGhlbiBlaXRoZXIgaXRzIHByb3BlcnRpZXMgZ2V0IHJlcGVhdGVk
IChub3QgZ29vZCBmb3INCj4gbGVuZ3RoKSBvciBzY2F0dGVyZWQgKG5vdCBnb29kIGZvciB0
aGUgZmxvdyB5b3Ugd2FudCkuICBBZ2FpbiwgYQ0KPiBzdHJ1Y3R1cmFsIHByb2JsZW0uDQoN
ClRoYXQncyBlcXVhbGx5IGFwcGxpZXMgdG8geW91ciBwYXRjaCB0b28sIHRob3VnaD8gIChT
d2l0Y2hpbmcgDQoidGVjaG5vbG9neSIgd2l0aCAicHJvYmxlbSIuKQ0KDQpBbHNvLCBJJ3Zl
IHJlLXJlYWQgbXkgcGF0Y2gsIGFuZCBJIGRpZG4ndCBmaW5kIGFueSByZXBlYXRlZCBwcm9w
ZXJ0aWVzIA0Kb3Igc2NhdHRlcmluZywgZXhjZXB0IGZvciBhIHNpbmdsZSBwcm9wZXJ0eSAo
cGF0Y2hlcyBhcmUgdXBzdHJlYW1hYmxlKToNCg0KID4gRmlyc3QsIHdoZW4gdGhlIGZpeCBp
cyBub3QgR3VpeC1zcGVjaWZpYywgdXBzdHJlYW1pbmcgdGhlIGZpeCBpcw0KID4gc3Ryb25n
bHkgZGVzaXJlZCB0byBhdm9pZCB0aGUgYWRkaXRpb25hbCBtYWludGVuYW5jZSBjb3N0IHRv
IEd1aXguDQogPiBbLi4uXQ0KPiBBcyBzdWNoLCBwYXRjaGVzIGFyZSBwcmVmZXJyZWQuICBI
b3dldmVyLCBhcyB3aXRoIGJ1Zw0KPiBmaXhlcywgdXBzdHJlYW1pbmcgdGhlIG5ldyBmdW5j
dGlvbmFsaXR5IGlzIGRlc2lyZWQuDQoNCkFzIHN1Y2gsIEknbSBub3QgZm9sbG93aW5nIHlv
dXIgcG9pbnQgaGVyZS4NCg0KPj4+IFRoaXMgbWFrZXMgaXQgc28gdGhhdCBwZW9wbGUgbWln
aHQgaGF2ZSB0byBnbyB0byBhIGRpZmZlcmVudA0KPj4+IHN1YnNlY3Rpb24gdGhhbiB0aGUg
b25lIHRoZXkgcmVhZCBmb3IgdGhlaXIgc29sdXRpb24gdG8gZmluZCBvdXQNCj4+PiBhYm91
dCBwb3RlbnRpYWwgY2F2ZWF0cywgZS5nLiBub3QgZW1iZWRkaW5nIHN0b3JlIHBhdGhzIGlu
IGENCj4+PiBzbmlwcGV0Lg0KPj4NCj4+IEkgYXNzdW1lIHRoZWlyIHByb2JsZW0gd2FzICJY
IGRvZXNuJ3QgZmluZCBZIi7CoCBUaGlzIGJlaW5nIGENCj4+IHRlY2huaWNhbCBpc3N1ZSwg
dGhleSBnbyB0byAiRml4aW5nIHRlY2huaWNhbCBpc3N1ZXMiLsKgIEluIHRoYXQNCj4+IHN1
YnN1YnNlY3Rpb24sICB0aGVyZSBhcmUgdGhlIHdvcmRzOg0KPj4NCj4+PiBTZWNvbmRseSwg
aWYgdGhlIGZpeCBvZiBhIHRlY2huaWNhbCBpc3N1ZSBlbWJlZHMgYSBzdG9yZSBmaWxlIG5h
bWUsDQo+Pj4gdGhlbiBpdCBoYXMgdG8gYmUgYSBwaGFzZS7CoCBPdGhlcndpc2UsIGlmIHRo
ZSBzdG9yZSBmaWxlIG5hbWUgd2VyZQ0KPj4+IGVtYmVkZGVkIGluIHRoZSBzb3VyY2UsIHRo
ZSByZXN1bHQgb2YgQGNvbW1hbmR7Z3VpeCBidWlsZCAtLXNvdXJjZX0NCj4+PiB3b3VsZCBi
ZSB1bnVzYWJsZSBvbiBub24tR3VpeCBzeXN0ZW1zIGFuZCBhbHNvIGxpa2VseSB1bnVzYWJs
ZSBvbg0KPj4+IEd1aXggc3lzdGVtcyBvZiBhbm90aGVyIGFyY2hpdGVjdHVyZS4NCj4+DQo+
PiBzbyB0aGV5IGFjdHVhbGx5IGRvIGtub3cgb2YgdGhlIGNhdmVhdCAnZG9uJ3QgZW1iZWQg
c3RvcmUgcGF0aHMgaW4gYQ0KPj4gc25pcHBldCwgZG8gaXQgaW4gYSBwaGFzZSBpbnN0ZWFk
JywgYW5kIHRoZXkgZGlkIG5vdCBuZWVkIHRvIGdvIHRvIGENCj4+IGRpZmZlcmVudCBzdWJz
dWJzZWN0aW9uLg0KPiBUeXBpY2FsIGhhcHB5IHBhdGguDQoNCkluZGVlZCwgaXQncyBhIGhh
cHB5IHBhdGghDQoNCj4+Pj4NCj4+Pj4+IFlvdXIgcHJvYmxlbS0+c29sdXRpb24gYXBwcm9h
Y2ggaW5zdGVhZCBsZWF2ZXMgcGVvcGxlIHdvbmRlcmluZw0KPj4+Pj4gd2hlbiB0aGVpciBw
YXJ0aWN1bGFyIHVzZSBjYXNlIGhhcyBub3QgYmVlbiBkZXNjcmliZWQuDQo+Pj4+IFNlZSBt
eSByZXBseSB0byDigJhBbmQgaWYgdGhleSBkb24ndCBmaW5kIGFueXRoaW5nLCB0aGV5IHNl
ZSB0aGUNCj4+Pj4gaGFuZHkgbGl0dGxlIGxpbmUgYXQgdGhlIGJvdHRvbSBzYXlpbmcgInVz
ZSB3aGF0ZXZlciB5b3UgdGhpbmsgaXMNCj4+Pj4gY29udmVuaWVudOKAmS4NCj4+Pj4+IEl0
IGdpdmVzIHRoZW0gYSBzb2x1dGlvbiByYXRoZXIgdGhhbiB0aGUgdG9vbHMgdG8gYnVpbGQN
Cj4+Pj4+IHNvbHV0aW9ucyB3aXRoLg0KPj4+PiBJdCBkb2VzIGdpdmUgdGhlIHRvb2xzOiBz
bmlwcGV0cywgcGF0Y2hlcyBhbmQgcGhhc2VzLg0KPj4+IEFzIGZhciBhcyBJIHJlYWQsIGl0
IGRlc2NyaWJlcyBub25lIG9mIHRob3NlLsKgIEl0IHB1dHMgb3V0IGd1aWRpbmcNCj4+PiBw
cmluY2lwbGVzIGFuZCBzb21lIGFscmVhZHkgd29ya2VkLW91dCBjYXNlcy4NCj4+IEhlcmUg
YXJlIHRoZSBkZXNjcmlwdGlvbnM6DQo+Pg0KPj4+IEd1aXggaGFzIHRyZWUgbWFpbiB3YXlz
IG9mIG1vZGlmeWluZyB0aGUgc291cmNlIGNvZGUgb2YgYSBwYWNrYWdlLA0KPj4+IHRoYXQg
eW91IGFzIGEgcGFja2FnZXIgbWF5IHVzZS7CoCBUaGVzZSBhcmUgcGF0Y2hlcywgc25pcHBl
dHMgYW5kDQo+Pj4gcGhhc2VzDQo+Pg0KPj4gT25jZSB0aGUgdXNlciBrbm93cyBfd2hpY2hf
IG9mIHRoZSB0aHJlZSB0aGV5IHNob3VsZCB1c2UgKGJ5DQo+PiBjb25zdWx0aW5nIHRoZSBm
b2xsb3dpbmcgc3Vic3Vic2VjdGlvbnMpLCB0aGV5IGNhbiB0aGVuIHNlYXJjaCBmb3INCj4+
ICdwYXRjaCcsICdzbmlwcGV0JyBhbmQgJ3BoYXNlcycgaW4gdGhlIG1hbnVhbCBmb3IgbW9y
ZSBpbmZvcm1hdGlvbiwNCj4+IG5vIG5lZWQgdG8gZHVwbGljYXRlIHRoYXQgaW5mb3JtYXRp
b24uDQo+IFBvaW50IHRha2VuLCBidXQgaW1obyBjcm9zcy1yZWZlcmVuY2VzIGFyZSBuaWNl
IGZvciB0aG9zZSB3aG8ganVzdA0KPiBsZWFybmVkICJva2F5LCBJIG5vdyBrbm93IEkgbmVl
ZCB0byBzb2x2ZSBteSB0ZWNobmljYWwgcHJvYmxlbSB3aXRoIGENCj4gcGhhc2UsIGhvdyBk
byBJIGRvIHRoYXQ/Ig0KDQpUaGV5IGFyZSBpbmRlZWQuICBCdXQgSSdtIG5vdCBmb2xsb3dp
bmcgd2hhdCB5b3UgbWVhbiB3aXRoICJCdXQiIGhlcmUuDQpJIGRpZG4ndCBjbGFpbSBhbnl0
aGluZyBhYm91dCBjcm9zcy1yZWZlcmVuY2VzIHRoZXJlPw0KDQpEbyB5b3Ugd2FudCBtZSB0
byBhZGQgYSBmZXcgY3Jvc3MtcmVmZXJlbmNlcyAoZm9yICdwYXRjaCcsICdzbmlwcGV0JyBh
bmQgDQoncGhhc2VzJyk/DQoNCj4+Pj4gQWxzbywgImdpdmluZyB0aGUgdG9vbHMgdG8gYnVp
bGQgc29sdXRpb25zIHdpdGgiIGRvZXMgbm90IGhlbHANCj4+Pj4gd2l0aCB0aGXCoHByb2Js
ZW0gdGhhdCBJIGFpbWVkIHRvIHNvbHZlIC0tIHRoZXJlIHdhcyBkaXNhZ3JlZW1lbnQNCj4+
Pj4gb24gd2hhdCB0aGXCoGFwcHJvcHJpYXRlIHRvb2xzIGFyZSAoc2VlOiBTaGVwaGVyZCks
IHNvIGl0IG5vdCBqdXN0DQo+Pj4+IG5lZWRzIHRvIGdpdmUgdGhlwqB0b29scywgYnV0IGFs
c28gdGhlIHNvbHV0aW9ucy4NCj4+PiBJIGRvbid0IHNlZSBob3cgbXkgcGF0Y2ggbGFja3Mg
dGhpcyBpbmZvcm1hdGlvbiBob3dldmVyLg0KPj4NCj4+IElJVUMsIHRoZSByYXcgaW5mb3Jt
YXRpb24gc2hvdWxkIHVzdWFsbHkgYmUgaW5kZWVkIGFsbCB0aGVyZSwgYnV0IHRoZQ0KPj4g
dXNlciBoYXMgdG8gY29uc3VsdCBfYWxsXyBvZiB0aGUgc2VjdGlvbnMgdG8gZGV0ZXJtaW5l
IHdoaWNoIG9wdGlvbg0KPj4gKHBhdGNoLCBzbmlwcGV0LCBwaGFzZSkgaXMgYXBwcm9wcmlh
dGUsIGhhdmluZyB0byBhc3NlbWJsZSBhbGwgdGhlDQo+PiBpbmZvcm1hdGlvbiBpcyAoYSkg
YSB3YXN0ZSBvZiB0aW1lIGFuZCAoYikgY2FuIGxlYWQgdG8gZGlmZmVyZW50DQo+PiBpbnRl
cnByZXRhdGlvbnMgYW5kIGNvbmNsdXNpb25zIChzZWU6IFNoZXBoZXJkKS4NCj4+DQo+PiBN
b3JlIGNvbmNyZXRlbHksIEkgY2Fubm90IHVzZSB5b3VyIHBhdGNoIHRvIGRlY2lkZSBiZXR3
ZWVuIHBoYXNlcywNCj4+IHNuaXBwZXRzIGFuZCBwYXRjaGVzIGZvciB0aGUgU2hlcGhlcmQg
aXNzdWU6DQo+Pg0KPj4gKiBub25lIG9mIHRocmVlIGFwcGVhciB0byBiZSBmb3JiaWRkZW4g
YnkgeW91ciBkb2N1bWVudGF0aW9uDQo+PiAqIHRoZXJlIGlzIG5vIHJlY29tbWVuZGF0aW9u
IGZvciAncGF0Y2hlcycgKElJUkMgaXQgd2Fzbid0IGFjY2VwdGVkDQo+PiB1cHN0cmVhbSBh
bmQgdGhlcmUgd2FzIG5vIGludGVudCB0byBzdWJtaXQgaXQgdXBzdHJlYW0sIGl0IGJlaW5n
DQo+PiByZWFsbHkgYSBHdWlsZSBidWcsIG5vdCBhIFNoZXBoZXJkIGJ1ZykNCj4+ICogdGhl
cmUgaXMgbm8gcmVjb21tZW5kYXRpb24gZm9yIHNuaXBwZXRzIChpdCdzIGFsbCBmcmVlLCBu
bw0KPj4gYnVuZGxpbmcpDQo+PiAqIGJ1aWxkIHBoYXNlcyBhcmUgJ3RvIGJlIGF2b2lkZWQn
IChidXQgbm90IGZvcmJpZGRlbiksIGFzIGl0DQo+PiByZXN1bHRlZA0KPj4gIMKgwqAgaW4g
b2JzZXJ2YWJseSBkaWZmZXJlbnQgcnVudGltZSBiZWhhdmlvdXIgKGJlaW5nIGEgYnVnIGZp
eCkNCj4+DQo+PiAtLSB0aHJlZSAob3IgYXQgYmVzdCwgdHdvLCBpZiBidWlsZCBwaGFzZXMg
YXJlIGRpc2NvdW50ZWQpIG9wdGlvbnMNCj4+IHJlbWFpbi7CoCBNeXNlbGYsIEkgd291bGQg
dGhlbiBjb25zaWRlciAnc25pcHBldHMnIHRvIGJlIHRoZSBtb3N0DQo+PiBjb252ZW5pZW50
LCBidXQgc29tZSBvdGhlcnMgKHNlZTogU2hlcGhlcmQsIElJUkMpIHdvdWxkIHJlYWxseSB3
YW50IGENCj4+IHBhdGNoIGluc3RlYWQsIGJlY2F1c2UgJ3BhdGNoZXMgY2FuIGJlIHJldmVy
dGVkJyBvciBzb21ldGhpbmcgbGlrZQ0KPj4gdGhhdC4NCj4+DQo+PiBBcyBzdWNoLCB5b3Ug
YXJlIGdpdmluZyB0aGUgdG9vbHMgKHNuaXBwZXRzIC8gcGF0Y2hlcyAvIHBoYXNlcywgc29t
ZQ0KPj4gZG93bnNpZGVzIGFuZCB1cHNpZGVzKSwgYnV0IGRpZmZlcmVudCBwZW9wbGUgY2Fu
IGNvbnN0cnVjdCBkaWZmZXJlbnQNCj4+IHNvbHV0aW9ucyBmcm9tIHRob3NlIHRvb2xzIGV2
ZW4gaW4gdGhlIHNhbWUgc2l0dWF0aW9uLCBsZWFkaW5nIHRvDQo+PiBjb25mbGljdHMuDQo+
Pg0KPj4gSWYgSSB1c2UgbXkgcGF0Y2ggaW5zdGVhZCwgSSBnbyB0byAiZml4aW5nIHRlY2hu
aWNhbCBpc3N1ZXMiLiBUaGlzDQo+PiBzZWN0aW9uIHRlbGxzIG1lIHRvIHVzZSBhIHBhdGNo
IG9yIGEgc25pcHBldC7CoCBBcyB0aGUgZml4IGlzIG5vdA0KPj4gR3VpeC1zcGVjaWZpYywg
aXQgcmVjb21tZW5kcyBhIHBhdGNoIHRvIHNhdmUgdGltZSB3aGVuIHVwc3RyZWFtaW5nLg0K
Pj4gQ29uY2x1c2lvbjogd3JpdGUgYSBwYXRjaC7CoCBJdCB3YXMgYSBHdWlsZSBidWcsIHNv
IHRoZSBmaXggd2FzIGENCj4+IHBhdGNoIHRvIEd1aWxlLsKgIEJ1dCB0aGF0IHdvdWxkIHRh
a2UgdGltZSBhbmQgdXBzdHJlYW0gdG9vayB0aGUNCj4+IHJlc3BvbnNpYmlsaXR5IGZvciBh
IGZpeCwgc28gdGhlICdlZmZpY2llbnQgdGltZSB0aGluZycgZG9lc24ndA0KPj4gcmVhbGx5
IGFwcGx5IGFuZCBhIHNtYWxsIHdvcmstYXJvdW5kIChzZXR0aW5nIG9wdGltaXNhdGlvbiBm
bGFncykNCj4+IHN1ZmZpY2VzLg0KPj4NCj4+IEluIHRoaXMgc2l0dWF0aW9uLCB0aGUgc3Vi
c3Vic2VjdGlvbiBkb2Vzbid0IGNhcmUgYXQgYWxsIGlmIHlvdSBnbw0KPj4gZm9yIGEgc25p
cHBldCwgc28gYXBwbHkgdGhlIGxhc3QgZ3VpZGluZyBwcmluY2lwbGU6IGdvIGZvciB0aGUN
Cj4+IHNpbXBsZXN0IHRoaW5nOiBhIHNuaXBwZXQuIChVbmxlc3MgeW91IGFscmVhZHkgaGF2
ZSBhIHBhdGNoLCB0aGVuIGENCj4+IHBhdGNoIGlzIHNpbXBsZXN0LikNCj4+IERvZXMgc29t
ZW9uZSBlbHNlIGhhdmUgYSBkaWZmZXJlbnQgaWRlYSBvbiB3aGF0J3Mgc2ltcGxlc3Q/wqAg
RG9lc24ndA0KPj4gcmVhbGx5IG1hdHRlciwg4oCYU29tZXRpbWVzIHRoaXMgaXMgc3ViamVj
dGl2ZSwgd2hpY2ggaXMgYWxzbyBmaW5l4oCZLg0KPiBJIGRvIGdldCB0aGUgaW1wcmVzc2lv
biB0aGF0IHRoaXMgcGF0Y2ggc2ltcGx5IGNvZGlmaWVzIHdoYXQgeW91IGZlZWwNCj4gaXMg
cmlnaHQgYmFzZWQgb24gdGhlIHNoZXBoZXJkIHNpdHVhdGlvbg0KDQpUcnVlLCBleGNlcHQg
Zm9yIHRoZSAnc2ltcGx5JywgYXMgSSBhbHNvIGNvbnNpZGVyZWQgc2V2ZXJhbCBvdGhlciAN
CnNpdHVhdGlvbnMgKFJlbW92aW5nIGJ1bmRsZWQgbGlicmFyaWVzLCBSZW1vdmluZyBub24t
ZnJlZSBzb2Z0d2FyZSwgDQpBZGRpbmcgbmV3IGZ1bmN0aW9uYWxpdHkpLiAgSSBkbyBub3Qg
c2VlIHRoZSBwcm9ibGVtIHdpdGggdGhpcyAtLSB0aGUgDQpwcm9wb3NlZCBwb2xpY3kgd2Fz
IGNvbnNpZGVyZWQgd29ya2FibGUgZXZlbiBpZiBzb21lIHdvdWxkIGxpa2UgaXQgdG8gYmUg
DQphIGxpdHRsZSBiaXQgZGlmZmVyZW50LCBhbmQgaWYgb3RoZXJzIGZlZWwgc3Ryb25nbHkg
YWJvdXQgdGhleSBjb3VsZCwgSSANCmRvbid0LCBtYXliZSBzZXQgdXAgYSB2b3RlIHN5c3Rl
bSBvciBzdWNoLg0KDQo+IHJhdGhlciB0aGFuIHRoaW5raW5nIGFib3V0IHRoZSBnZW5lcmFs
IGNhc2UsDQoNClNlZTogc2V2ZXJhbCBvdGhlciBjYXNlcyB0aGF0IHNob3VsZCBjb3ZlciBt
b3N0IHNpdHVhdGlvbnMgZW5jb3VudGVyZWQgDQppbiBwcmFjdGljZSwgYW5kIGZvciB0aGUg
cGFydHMgb2YgdGhlIGdlbmVyYWwgY2FzZSB0aGF0IGFyZW4ndCANCndvcmtlZC1vdXQgeWV0
LCB0aGVyZSBhcmUgdGhlIGd1aWRpbmcgcHJpbmNpcGxlcy4NCg0KPiB3aGljaCBpcyB3aHkg
bXkgcGF0Y2ggbWFrZXMgd2Vha2VyIHN0YXRlbWVudHMgaGVyZS4gIElmDQo+IHRoaXMgaXNz
dWUgY291bGQgaGF2ZSBiZWVuIGF2b2lkZWQgd2l0aCBhICM6bWFrZS1mbGFnLCB3ZSB3b3Vs
ZCBoYXZlDQo+IHVzZWQgdGhhdC4NCj4gDQo+IE1vcmUgaW1wb3J0YW50bHksIEkgZmFpbCB0
byBzZWUgdGhlIHN1cGVyaW9yaXR5IG9mIHlvdXIgcGF0Y2ggaGVyZSA+IElJVUMgbmVpdGhl
ciBwYXRjaCBvZmZlcnMgYSB1bmlxdWUgc29sdXRpb24gdG8gdGhlIHNoZXBoZXJkIHRoaW5n
LCBzbw0KPiB0aGUgcm9vbSBmb3IgZGViYXRlIHJlbWFpbnMNCg0KSW4gbXkgcGF0Y2gsIG11
bHRpcGxlIG9wdGlvbnMgcmVtYWluLCBidXQgdGhlcmUgaXMgbm8gcmVhbCByb29tIGZvciAN
CmRlYmF0ZS4gIE1vcmUgY29uY3JldGVseToNCg0KPiBXaGVuIHRoZXJlIGlzIG1vcmUgdGhh
biBvbmUgd2F5IHRvIGRvIHNvbWV0aGluZywgY2hvb3NlIHdoaWNoZXZlciBtZXRob2QNCj4g
aXMgdGhlIHNpbXBsZXN0LiAgU29tZXRpbWVzIHRoaXMgaXMgc3ViamVjdGl2ZSwgd2hpY2gg
aXMgYWxzbyBmaW5lLg0KPiBXaGF0IG1hdHRlcnMgaXMgdGhhdCB5b3UgdXNlIHRlY2huaXF1
ZXMgdGhhdCBhcmUgY29tbW9uIHdpdGhpbiB0aGUNCj4gY29tbXVuaXR5IChpLmUuLCBwYXR0
ZXJucyB0aGF0IGFwcGVhciB0aHJvdWdob3V0IEBjb2Rle2dudS9wYWNrYWdlcy8uLi59KQ0K
PiBhbmQgYXJlIHRodXMgY2xlYXJseSBsZWdpYmxlIGZvciByZXZpZXdlcnMuDQoNCml0IGlz
IGNvbnNpZGVyZWQgc3ViamVjdGl2ZSwgaGF2aW5nIG11bHRpcGxlIG9wdGlvbnMgaWYgZmlu
ZSEgIFRvIA0KY29ycmVjdCBhIHBhY2thZ2luZyBmb2xsb3dpbmcgdGhlIG90aGVyIG9wdGlv
biAodG8gaGVscCB3aXRoIGZvbGxvd2luZyANCnRoZSBwb2xpY2llcyksIHlvdSBkb24ndCBo
YXZlIHRvIGRlYmF0ZSBvbiB3aGF0J3MgdGhlIHByb3BlciBvcHRpb24gdG8gDQpnZXQgYSBm
aXggaW4sIGFzIGJvdGggYXJlIGNvbnNpZGVyZWQgYWNjZXB0YWJsZS4gIEluIG1hbnkgY2Fz
ZXMsIG5vIG5lZWQgDQpmb3IgZGViYXRlLCBqdXN0IHBpY2sgb25lIGFuZCBtb3ZlIG9uLiAg
KEFsc28gdGhlIGNhc2UgZm9yIHlvdXIgcGF0Y2ggSUlVQy4pDQoNClRoaW5ncyBhcmUgYWxz
byBwaHJhc2VkIHJlY29uY2lsaWF0b3J5LCBlO2cuOg0KDQo+IFRvIG1ha2UgdGhpbmdzIG1v
cmUgY29uY3JldGUgYW5kIHRvIHJlc29sdmUgY29uZmxpY3RzIGJldHdlZW4gdGhlDQo+IHBy
aW5jaXBsZXMsIGEgZmV3IGNhc2VzIGhhdmUgYmVlbiB3b3JrZWQgb3V0Og0KDQpIb3dldmVy
LCBpbiB5b3VyIHBhdGNoLCB0aGVyZSBpcyBtb3JlIG9wcG9ydHVuaXR5IGZvciBjb25mbGlj
dHMuIEUuZy46DQoNCj4gRWFjaCBvbmUgaGFzIGl0cyBzdHJlbmd0aHMgYW5kIGRyYXdiYWNr
cywgYWxvbmcgd2l0aCBpbnRlbmRlZCBhbmRoaXN0b3JpY2FsbHkgZGVyaXZlZCB1c2UgY2Fz
ZXMuDQoNCkJ5IHRoaXMgbGluZSwgYXJndW1lbnRzIGxpa2UgJ1ggd2FzIGhpc3RvcmljYWxs
eSB0aGUgaW50ZW5kZWQgcHVycG9zZSBvZiANClksIHVzaW5nIFkgZm9yIFogaXMgaW5jb3Jy
ZWN0JyBiZWNvbWUgcmVhc29uYWJsZSwgd2hpY2ggbWFrZXMgDQpkaXNhZ3JlZW1lbnRzIG1v
cmUgZGlmZmljdWx0IHRvIHJlc29sdmUgKGFzIHlvdSBrbm93IG5lZWQgdG8gY29uc3VsdCAN
Cmhpc3RvcnkgYW5kIGJlY2F1c2UgaGlzdG9yeSBpcyBmaXhlZCwgc28gbm8gaW1wcm92ZW1l
bnRzIHdvdWxkIGJlIA0KcG9zc2libGUgYW55bW9yZSBpbiBhcmVhcyB3aGVyZSB0aGVyZSBp
cyBhIGhpc3RvcmljYWxseSBpbnRlbmRlZCB1c2UgY2FzZSkuDQoNCj4gWW91IGNvdWxkIGNs
YWltIHRoYXQgbXkgcGF0Y2ggb2ZmZXJzIG1vcmUNCj4gcm9vbSwgd2hpY2ggZmFpciBlbm91
Z2gsIGl0IGRvZXMsIGJ1dCBvbiB0aGUgc2FtZSB0b2tlbiBpdCBhbGxvd3MNCj4gcGVvcGxl
IHRvIHNlZSB0aGF0IHRoZSBndWlkZWxpbmVzIGhhdmUgYmVlbiBmb2xsb3dlZCBhbmQgdGhl
IHBhdGNoIGNhbg0KPiBiZSBhcHBsaWVkLg0KPiANCj4+PiBJbiBwYXJ0aWN1bGFyLCBmb3Ig
cmV2aWV3IHB1cnBvc2VzLCBtaW5lIHNob3VsZCBiZSBlYXNpZXIgdG8gd29yaw0KPj4+IHdp
dGguICBGb3IgaW5zdGFuY2UsIHRoZSByZXZpZXdlciBzZWVzIGEgaGFzaCBlbWJlZGRlZCBp
biBhDQo+Pj4gc25pcHBldCwgc2VlcyBpbiB0aGUgc25pcHBldCBlbnRyeSB0aGF0IHlvdSBz
aG91bGRuJ3QgZG8gdGhhdCwgYW5kDQo+Pj4gY2FuIHRodXMgc2F5ICJub3BlLCBkb24ndCBk
byBhIHNuaXBwZXQgaGVyZSIuDQoNClRoYXQgaXMgYWxzbyB0aGUgY2FzZSBmb3IgcHJvYmxl
bS0+c29sdXRpb24/ICBBICJzaCIgLT4gIyQoZmlsZS1hcHBlbmQgDQpiYXNoLW1pbmltYWwg
Ii9iaW4vc2giKSBzdWJzdGl0dXRpb24gY2FuIGJlIHJlY29nbmlzZWQgb24gc2lnaHQgYXMg
bm90IA0KcG9zc2libHkgYmVpbmcgYW55dGhpbmcgZWxzZSB0aGFuIGEgdGVjaG5pY2FsIGZp
eCwgYW5kIHRoZW4gdGhlIA0Kc3Vic3Vic2VjdGlvbiBvbiB0ZWNobmljYWwgZml4ZXMgbWVu
dGlvbnMgdGhhdCB0aG9zZSBtdXN0IGJlIGRvbmUgaW4gcGhhc2VzLg0KDQpPciwgYW5vdGhl
ciBleHBsYW5hdGlvbjogcmV2aWV3ZXJzIHVzdWFsbHkgaGF2ZSBzZWVuIGEgbG90IG9mIG1v
cmUgDQpwYWNrYWdlcyB0aGFuIGEgbmV3IHBhY2thZ2VyLiAgQmVjYXVzZSBvZiB0aGF0LCBh
bmQgYmVjYXVzZSB0aGV5IGhhdmUgDQpmYW1pbGlhcmlzZWQgdGhlaXJzZWx2ZXMgd2l0aCBw
b2xpY3ksIHRoZXkgaGF2ZSBvdmVyIHRpbWUgYXV0b21hdGljYWxseSANCmJ1aWx0IGEgbWVu
dGFsICdyZXZlcnNlIGluZGV4JyBvZiBzb2x1dGlvbnMtPnByb2JsZW1zLg0KPj4gSSB0aGlu
ayB3ZSBzaG91bGQgb3B0aW1pc2UgZm9yIHBhY2thZ2VycyBiZWZvcmUgcmV2aWV3ZXJzDQo+
IENvZGUgaXMgbW9yZSBvZnRlbiByZWFkIHRoYW4gd3JpdHRlbiwgc28gb3B0aW1pc2luZyBm
b3IgdGhlIHJlYWRlciBpcw0KPiBvcHRpbWl6aW5nIGZvciB0aGUgcGFja2FnZXIgYXMgd2Vs
bC4NCg0KV2hpbGUgYWxsIHJldmlld2VycyBhcmUgcmVhZGVycywgbm90IGFsbCByZWFkZXJz
IGFyZSByZXZpZXdlcnMsIGFuZCANCnJldmlld2luZyB1c3VhbGx5IGhhcHBlbnMgb25seSBv
bmNlLCBtYXliZSB0d2ljZSBwZXIgcGF0Y2guDQoNCj4+PiBSZWdhcmRsZXNzIG9mIHdoaWNo
IHBhdGNoIHdlIHBpY2ssIGl0IHNob3VsZCBub3QgbWFuZGF0ZSBhDQo+Pj4gcGFydGljdWxh
ciBzb2x1dGlvbiBpbiBwb3RlbnRpYWxseSBjb250ZW50aW91cyBjYXNlcywNCj4+DQo+PiBB
Y3R1YWxseSB0aGUgd2hvbGUgcG9pbnQgd2FzIHRvIG1hbmRhdGUgYSBwYXJ0aWN1bGFyIHNv
bHV0aW9uIGZvciB0aGUNCj4+IGNvbnRlbnRpb3VzIGNhc2VzLCBzZWUgU2hlcGhlcmQuDQo+
IEJ1dCBJIGRpc2FncmVlLg0KPiANCj4gTWVtZXMgYXNpZGUsIHBsZWFzZSByZWZyYWluIGZy
b20gdGhlICJJJ20gcmlnaHQsIGRvIHRoaXMiIHN0eWxlICh3aGljaA0KPiBpcyBhbm90aGVy
IHByb2JsZW0gd2l0aCB0aGUgInByb2JsZW0tY2VudHJpYyIgYXBwcm9hY2gpLA0KDQpJcyB0
aGlzIHJlZmVycmluZyB0byB0aGUgc3R5bGUgb2YgdGhlIGRvY3VtZW50YXRpb24gcGF0Y2g/
ICBJZiBzbzogaXQgDQpkb2VzIGV4cGxhaW4gd2h5IHRoZSAiZG8gdGhpcyIgaXMgcmlnaHQs
IHNvIEkgZG9uJ3Qgc2VlIHRoZSBwcm9ibGVtLiAgRG8gDQp5b3UgaGF2ZSBhIHBhcnRpY3Vs
YXIgcG9pbnQgb2YgdGhlIGRvY3VtZW50YXRpb24gaW4gbWluZCB5b3UgY29uc2lkZXIgDQp3
cm9uZyAoKik/DQoNCigqKSBwb2ludHMgSSBrbm93IG9mOg0KKiBrZWVwIGxpc3RzIC8gcmVt
b3ZlIGxpc3RzIChmb3IgdGhlIGZvb3Rub3RlIGFib3V0IG5vdC15ZXQtcG9saWN5IG9uIA0K
cmVtb3ZpbmcgdGhpbmdzIGluIHBhdGNoZXMpDQoqIHRoZSBndWlkaW5nIHByaW5jaXBsZXMg
YXJlbid0IGd1aWRpbmcgcHJpbmNpcGxlcw0KDQo+IGJ1dCByYXRoZXINCj4gZm9jdXMgb24g
d3JpdGluZyBhIHBhdGNoIHRoYXQgbWFrZXMgcmV2aWV3ZXJzIG5vdCBkaXNjYXJkIGEgcGF0
Y2ggZHVlDQo+IHRvIGZvcm1hbGl0aWVzLg0KDQpJIHRoaW5rIHRoZSBwYXRjaCAodjEgYW5k
IHYyKSBzYXRpc2ZpZXMgdGhhdC4NCg0KPiBJZiB0aGUgc2hlcGhlcmQgdGhpbmcgaGFkIG5l
ZWRlZCBhbiB1cHN0cmVhbSBwYXRjaCwNCj4gZXZlbiB3aXRoIGEgc25pcHBldCB0aGF0IHBh
dGNoIGNvdWxkIGhhdmUgZWFzaWx5IGJlZW4gY3JlYXRlZCBieQ0KPiBjb252ZXJ0aW5nIHRo
YXQgc25pcHBldCB0byBhIHNlZCwgc28gbW9yZSB0aW1lIHdhcyB3YXN0ZWQgZGViYXRpbmcg
dGhhbg0KPiBvdmVyd29ya2luZy4NCg0KSSBkbyBub3Qgc2VlIHlvdXIgcG9pbnQgaGVyZSAt
LSAjNTc1OTggaXMgYWJvdXQgZG9jdW1lbnRhdGluZy9tYWtpbmcgDQpwb2xpY3ksIG5vdCAn
c2hvdWxkIHdlIHNwZW50IHRpbWUgb24gY29ycmVjdGluZyB0aGUgc2hlcGhlcmQgcGFja2Fn
ZSB0byANCm1hdGNoIHBvbGljeSAvIGNvbnZpbmNpbmcgdGhlIG90aGVyIHBhcnR5IHRoYXQg
dGhlIHN0YXR1cyBxdW8gbWF0Y2hlcyANCnBvbGljeScuDQoNCj4+PiBhbmQgYWxzbyBwb2lu
dCB0b3dhcmRzIHRoZSByaWdodCBzb2x1dGlvbi7CoCBTZWUgb3VyIGRpc2N1c3Npb25zIG9u
DQo+Pj4gdGhlIGluZGl2aWR1YWwgc29sdXRpb25zIG9uIHBvaW50cyBpbiB3aGljaCBJIGJl
bGlldmUgeW91J3ZlDQo+Pj4gZXJyb3JlZC4NCj4+DQo+PiBUaGVzZSBhcmU6DQo+Pg0KPj4g
KiB0aGUgdHlwbydzDQo+PiAqIGluY2x1ZGluZyAic2tpcHBpbmcgdGVzdHMgaW5kaWNhdGlu
ZyBmYWlsdXJlIHVuZGVyIOKAmEZpeGluZw0KPj4gdGVjaG5pY2FsIGlzc3Vlc+KAmSINCj4+
ICogImRvbid0IG1lbnRpb24gZmlsZSBuYW1lcyBvZiBub24tZnJlZSB0aGluZ3MgaW4gcGF0
Y2hlcyINCj4+DQo+PiBEaWQgSSBtaXNzIGFueT8NCj4gSSdtIHByZXR0eSBzdXJlIHRoZXJl
J3MgYWxzbyBhIGRpc2N1c3Npb24gb24gc3RvcmUgcGF0aCBlbWJlZGRpbmdzIGF0DQo+IHRo
ZSB2ZXJ5IGxlYXN0LiAgRm9yZ2l2ZSBtZSBpZiBJIHRvbyBtaXNzZWQgc29tZXRoaW5nLg0K
VGhlcmUgd2FzIGEgZGlzY3Vzc2lvbiBvbiBzdG9yZSBmaWxlIG5hbWUgZW1iZWRkaW5ncy4g
IFRoZXJlIHdhcyBubyANCm1lbnRpb24gb2YgYW55IGVycm9ycyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBvZiBzdG9yZSBmaWxlIG5hbWVzLiAgSUlSQywgDQp3ZSBhZ3JlZSBvbiBob3cgc3Rv
cmUgZmlsZSBuYW1lIGVtYmVkZGluZ3MgbXVzdCBiZSBkb25lLiAgVGhlcmUgd2VyZSwgDQpo
b3dldmVyLCBwcm9wb3NhbHMgdG8gZXh0ZW5kIHRoZSBkb2N1bWVudGF0aW9uIHRvIGNvdmVy
IOKAmGhvdyB0byBlbWJlZOKAmSANCmluIG1vcmUgZGV0YWlsIChzdWJzdGl0dXRlKiArIHNl
YXJjaC1pbnB1dC1maWxlIC4uLiksIGJ1dCBubyBlcnJvcnMuDQoNCkdyZWV0aW5ncywNCk1h
eGltZS4NCg==
--------------RneJSr4rW60YFuWvSkivYcO6
Content-Type: application/pgp-keys; name="OpenPGP_0x49E3EE22191725EE.asc"
Content-Disposition: attachment; filename="OpenPGP_0x49E3EE22191725EE.asc"
Content-Description: OpenPGP public key
Content-Transfer-Encoding: quoted-printable

-----BEGIN PGP PUBLIC KEY BLOCK-----

xjMEX4ch6BYJKwYBBAHaRw8BAQdANPb/d6MrGnGi5HyvODCkBUJPRjiFQcRU5V+m
xvMaAa/NL01heGltZSBEZXZvcyA8bWF4aW1lLmRldm9zQHN0dWRlbnQua3VsZXV2
ZW4uYmU+wpAEExYIADgWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCX4ch6AIbAwUL
CQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRBJ4+4iGRcl7japAQC3opZ2KGWzWmRc
/gIWSu0AAcfMwyinFEEPa/QhUt2CogD/e2RdF4CYAgaRHJJmZ9WU7piKbLZ7llB4
LzgezVDHggzNJU1heGltZSBEZXZvcyA8bWF4aW1lZGV2b3NAdGVsZW5ldC5iZT7C
kAQTFggAOBYhBMHzPuIMUo/bfdcBH0nj7iIZFyXuBQJf56ycAhsDBQsJCAcDBRUK
CQgLBRYCAwEAAh4BAheAAAoJEEnj7iIZFyXujpQBAKV1SwDDl4f24rXciDlB9L8W
ycZt30CgbewMSRQk4mvbAP9dFMbVVixYBd6C8cfhR+NsOBGiOJnQABlUmgNuqGFJ
Dc44BF+HIegSCisGAQQBl1UBBQEBB0BOlzIWiJzgobMF6/cqwLaLk7jIcFSZ++c0
k9cCNT6YXwMBCAfCeAQYFggAIBYhBMHzPuIMUo/bfdcBH0nj7iIZFyXuBQJfhyHo
AhsMAAoJEEnj7iIZFyXuMr0BAJc8cl5PGvVmVuSQVKjleNl4DK1/XAaPAYPe34AE
fZJPAP9IqLCQhH/FeJanHqBP8gNdGNI2qn8RnnLVfRJgUjZ1BA=3D=3D
=3DOVqp
-----END PGP PUBLIC KEY BLOCK-----

--------------RneJSr4rW60YFuWvSkivYcO6--

--------------A60oN2LySqwFEM12Dd7BpjjC--

--------------b304Y9bejnymBhUvwnTF0ap0
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wnsEABYIACMWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYxuJgAUDAAAAAAAKCRBJ4+4iGRcl7op3
AQCYF8cmXphoV90U1eiSpXMlv1ETCRG9s0Prpbm/bTfHPQEAr76d7Ou/26rqpoEkxxsU+Hb6Ubc9
B3HI+QwSS8wO9g4=
=BW3S
-----END PGP SIGNATURE-----

--------------b304Y9bejnymBhUvwnTF0ap0--




Information forwarded to guix-patches@HIDDEN:
bug#57598; Package guix-patches. Full text available.

Message received at 57598 <at> debbugs.gnu.org:


Received: (at 57598) by debbugs.gnu.org; 9 Sep 2022 15:09:52 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Sep 09 11:09:52 2022
Received: from localhost ([127.0.0.1]:35009 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1oWfdf-0003BB-Im
	for submit <at> debbugs.gnu.org; Fri, 09 Sep 2022 11:09:52 -0400
Received: from mail-ej1-f65.google.com ([209.85.218.65]:33655)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <liliana.prikler@HIDDEN>) id 1oWfdd-0003Ay-DI
 for 57598 <at> debbugs.gnu.org; Fri, 09 Sep 2022 11:09:50 -0400
Received: by mail-ej1-f65.google.com with SMTP id lc7so4789376ejb.0
 for <57598 <at> debbugs.gnu.org>; Fri, 09 Sep 2022 08:09:49 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112;
 h=mime-version:message-id:content-transfer-encoding:cc:to:subject
 :date:from:from:to:cc:subject:date;
 bh=DSH2NtZY3PQTC9fFJQkWMf/DkB/1uEtpmw/Cv0n+AMo=;
 b=RB27Z8fDTtIJ2XFhBirBQANWfULF0jfkBugGZd4Rw0w6xoRT4pHsnPzA/oUwy+QU4c
 2kl9ebzqGuLU31Dxvb3pYQyJilPkTfwNIlxb8T5Ae0DDDFUJ/3OFjLg1ORSnlBsNFYeh
 ab1QRNL7dsEruUKgQElSScUflGRqFadVfFUXY/zNOEAwE6PuP2P8QRYrPsKlUAaJuGzI
 DpqRrZ7H7yJUp2vkY4iuUiqW6gVEXnSyOtwbkJCIKDRmB7Xa7QsTalWn/pqmoTBGfJUF
 tZ6/bPbrlTbMScxnr7FUdnP4Dz7kx5uRZSr9l/QWm7pIuwnwESrv50ygtNQgYNG0dfm1
 pILQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=mime-version:message-id:content-transfer-encoding:cc:to:subject
 :date:from:x-gm-message-state:from:to:cc:subject:date;
 bh=DSH2NtZY3PQTC9fFJQkWMf/DkB/1uEtpmw/Cv0n+AMo=;
 b=GjYi+GizlJchSsS5oFpLLPwS97G55b+1jnU1J3wI1q8liMrm1xfylMx0zEThGzQ0au
 hsBjyJAgm5IBVlbfZXd+F5N7n2DSdNbv9OTUlG6CPEYEKtxk9wrxoQ91RNa2xEK0a9ZP
 yxYv1sgGFt7ibI/jYgYo+e475hOVile106DKh/qZxy6M9mDIo4NuiSxgGPy+KE1AkeuX
 OofFU2WSyfjTkn9qggVWn5BvcUt6xTpg6RQQE3xmfkhth6ONndQWbIZcgEOAb1Z35Fik
 icuAn0tZBEvCNsOBLGlZnNDDfN8rRSZAS8NxZxyRul6Pa1v1b4vDnVCEZCROe4SAMQTK
 93iw==
X-Gm-Message-State: ACgBeo1H2SPRi20lgo7GbcB57M8vAcIwahZa3dizEXvYeX2b8+f7xiGV
 HGhz7nPsg2FKQQyrqk9WIS7hKCrqt+A=
X-Google-Smtp-Source: AA6agR5rA2mTbgIBetX28G58h2IWMDUL2Bom3iKU1G5I9NNBL3Cc5B7j6p74jt+jiXD6+YpXV6jpqA==
X-Received: by 2002:a17:907:2c75:b0:741:5871:4318 with SMTP id
 ib21-20020a1709072c7500b0074158714318mr9954710ejc.532.1662736183642; 
 Fri, 09 Sep 2022 08:09:43 -0700 (PDT)
Received: from nijino.fritz.box (85-127-52-93.dsl.dynamic.surfer.at.
 [85.127.52.93]) by smtp.gmail.com with ESMTPSA id
 kz5-20020a17090777c500b007708851c6f0sm389200ejc.146.2022.09.09.08.09.43
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Fri, 09 Sep 2022 08:09:43 -0700 (PDT)
From: Liliana Marie Prikler <liliana.prikler@HIDDEN>
Date: Sat, 6 Aug 2022 08:55:03 +0200
Subject: [alternative PATCH] doc: Update contribution guidelines on
 patches, etc.
to: 57598 <at> debbugs.gnu.org
Content-Transfer-Encoding: 8bit
Message-ID: <246b28ff9c402cfce8c2ef799d7d73b1dbb2cca9.camel@HIDDEN>
MIME-Version: 1.0
X-Spam-Score: 2.1 (++)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 
 Content preview:  * doc/contributing.texi ("Snippets versus Phases"): Replaced
    with... ("Modifying Sources"): ... this. List more use cases and some principles.
    --- Hi Maxime, here is an update of my guidelines patch, incorporating the
    changes Ludo’ requested and some of your bits, as well as fixing some omissions.
    
 
 Content analysis details:   (2.1 points, 10.0 required)
 
  pts rule name              description
 ---- ---------------------- --------------------------------------------------
  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
 -0.0 SPF_PASS               SPF: sender matches SPF record
  0.0 FREEMAIL_FROM          Sender email is commonly abused enduser mail
                             provider (liliana.prikler[at]gmail.com)
  2.1 DATE_IN_PAST_96_XX     Date: is 96 hours or more before Received:
                             date
  0.0 RCVD_IN_MSPIKE_H3      RBL: Good reputation (+3)
                             [209.85.218.65 listed in wl.mailspike.net]
  0.1 PP_MIME_FAKE_ASCII_TEXT BODY: MIME text/plain claims to be ASCII
                              but isn't
  0.0 RCVD_IN_MSPIKE_WL      Mailspike good senders
 -0.0 T_SCC_BODY_TEXT_LINE   No description available.
X-Debbugs-Envelope-To: 57598
Cc: Maxime Devos <maximedevos@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: 1.1 (+)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 
 Content preview:  * doc/contributing.texi ("Snippets versus Phases"): Replaced
    with... ("Modifying Sources"): ... this. List more use cases and some principles.
    --- Hi Maxime, here is an update of my guidelines patch, incorporating the
    changes Ludo’ requested and some of your bits, as well as fixing some omissions.
    
 
 Content analysis details:   (1.1 points, 10.0 required)
 
  pts rule name              description
 ---- ---------------------- --------------------------------------------------
  0.0 RCVD_IN_MSPIKE_H3      RBL: Good reputation (+3)
                             [209.85.218.65 listed in wl.mailspike.net]
  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
 -0.0 SPF_PASS               SPF: sender matches SPF record
  0.0 FREEMAIL_FROM          Sender email is commonly abused enduser mail
                             provider (liliana.prikler[at]gmail.com)
  2.1 DATE_IN_PAST_96_XX     Date: is 96 hours or more before Received:
                             date
  0.1 PP_MIME_FAKE_ASCII_TEXT BODY: MIME text/plain claims to be ASCII
                              but isn't
  0.0 RCVD_IN_MSPIKE_WL      Mailspike good senders
 -0.0 T_SCC_BODY_TEXT_LINE   No description available.
 -1.0 MAILING_LIST_MULTI     Multiple indicators imply a widely-seen list
                             manager

* doc/contributing.texi ("Snippets versus Phases"): Replaced with...
("Modifying Sources"): ... this.  List more use cases and some principles.
---
Hi Maxime,

here is an update of my guidelines patch, incorporating the changes Ludo’
requested and some of your bits, as well as fixing some omissions.

Cheers

 doc/contributing.texi | 115 +++++++++++++++++++++++++++++++++++++-----
 1 file changed, 102 insertions(+), 13 deletions(-)

diff --git a/doc/contributing.texi b/doc/contributing.texi
index 17a54f94cc..4894982259 100644
--- a/doc/contributing.texi
+++ b/doc/contributing.texi
@@ -451,7 +451,7 @@ needed is to review and apply the patch.
 * Package Naming::              What's in a name?
 * Version Numbers::             When the name is not enough.
 * Synopses and Descriptions::   Helping users find the right package.
-* Snippets versus Phases::      Whether to use a snippet, or a build phase.
+* Modifying Sources::           When to use patches, snippets, or build phases.
 * Emacs Packages::              Your Elisp fix.
 * Python Modules::              A touch of British comedy.
 * Perl Modules::                Little pearls.
@@ -708,20 +708,109 @@ Gettext}):
 for the X11 resize-and-rotate (RandR) extension. @dots{}")
 @end lisp
 
-@node Snippets versus Phases
-@subsection Snippets versus Phases
+@node Modifying Sources
+@subsection Modifying Sources
 
+@cindex patches, when to use
 @cindex snippets, when to use
-The boundary between using an origin snippet versus a build phase to
-modify the sources of a package can be elusive.  Origin snippets are
-typically used to remove unwanted files such as bundled libraries,
-nonfree sources, or to apply simple substitutions.  The source derived
-from an origin should produce a source that can be used to build the
-package on any system that the upstream package supports (i.e., act as
-the corresponding source).  In particular, origin snippets must not
-embed store items in the sources; such patching should rather be done
-using build phases.  Refer to the @code{origin} record documentation for
-more information (@pxref{origin Reference}).
+
+Guix has three main ways of modifying the source code of a package,
+that you as a packager may use.  Each one has its strengths and
+drawbacks, along with intended and historically derived use cases.
+These are
+
+@table @b
+
+@item patches
+If your package has a bug that takes multiple lines to fix, or a fix
+has already been accepted upstream, patches are the preferred way of
+eliminating said bug.@footnote{If you patch a bug that has hitherto
+not been reported or fixed upstream, consider also contacting upstream
+unless the bug and its fix are specific to Guix.}
+Refer to the @code{origin} record documentation
+(particularly the fields @code{patches}, @code{patch-inputs}, and
+@code{patch-flags}) for more information on how to use patches
+(@pxref{origin Reference}).
+When adding a patch, do not forget to also list it in
+@code{dist_patch_DATA} of @file{gnu/local.mk}
+
+As patches are applied to the origin of a package, they become part
+of the corresponding source.  You can retrieve this source by
+invoking @code{guix build -S YOUR_PACKAGE}.  This also means that
+modifying the patch causes two rebuilds: one for the source and one
+for the package built from it.
+
+Patches are limited in that they lack the expressiveness of Guile.
+If all changes are constrained to single lines, a patch might be much
+larger than the equivalent @code{substitute*}.  It is further bad form
+to use a single patch to address multiple unrelated issues, whereas
+snippets can take ``multiple jobs''.
+
+@item snippets
+If your package contains non-free sources, these need to be removed
+through a snippet.  This snippet should not only remove the sources in
+question, but also references to the removed sources in build scripts,
+documentation, and so on. @ref{Software Freedom}
+
+If your package bundles external libraries, snippets are the preferred
+way of removing said them.  Unlike with non-free sources, it is not a
+requirement to remove @emph{all} bundled libraries, although doing so
+is very much preferred.  Bundled libraries that are kept should be
+clearly indicated, preferrably with a reason as to why the bundled copy
+remains.  As with non-free sources, references to the removed libraries
+should also be updated in the snippet.
+
+Refer to the @code{origin} record documentation
+(particularly the fields @code{snippet} and @code{modules}), for more
+information on how to use snippets (@pxref{origin Reference}).
+
+While snippets have all of Guile's core as well as extra @code{modules}
+available, their most useful procedure for @emph{editing} sources
+(rather than removing them), is @code{substitute*}, which can not deal
+with multi-line changes that well.  Like patches, snippets become part
+of the corresponding source.
+
+@item build phases
+For modifications that retain the intended functionality of the
+package, build phases (usually between @code{unpack} and
+@code{configure}, sometimes between @code{configure} and @code{build})
+can be used.  @ref{Build Phases}.
+Such changes include, but are not limited to, fixes of the
+build script(s) or embeddings of store paths (e.g. replacement of
+@file{/bin/sh} with @code{(search-input-file inputs "bin/sh")}).
+
+If you need to embed a store path, do so only inside a build phase.
+A workaround for patches that span multiple lines, is to use a variable
+such as @code{@@store_path@@} inside the patch and substitute the actual
+store path at build time via @code{substitute*}.
+
+Unlike patches and snippets, build phases do @b{not} become part of
+the corresponding source of a package, and should thus be avoided for
+changes that result in observably different runtime behaviour.
+On the other hand, the reduced overhead of unpacking, repacking and
+unpacking again might make for a slightly more pleasant debugging
+experience.
+
+@end table
+
+If your change does not neatly fit in any of the categories above, it
+is usually a matter of preference or convenience.
+
+@cindex auxiliary files
+
+Sometimes, you may need to add a new file, e.g. a source file or
+configuration file, to your package.  As a matter of principle
+@b{auxiliary files} should be preferred over an equivalent
+@code{display} or @code{format} when creating non-trivial files, as that
+makes them easier to edit.  The exact threshold for a non-trivial file
+might be subjective, though it should lie somewhere between
+10--20 lines.
+
+Auxiliary files are stored in the @file{gnu/packages/aux-files}
+directory and can be retrieved in a snippet or build phase via
+@code{search-auxiliary-file}.
+When adding an auxiliary file, do not forget to also list it in
+@code{AUX_FILES} of @file{Makefile.am}.
 
 @node Emacs Packages
 @subsection Emacs Packages
-- 
2.37.2





Information forwarded to guix-patches@HIDDEN:
bug#57598; Package guix-patches. Full text available.

Message received at 57598 <at> debbugs.gnu.org:


Received: (at 57598) by debbugs.gnu.org; 9 Sep 2022 13:32:42 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Sep 09 09:32:42 2022
Received: from localhost ([127.0.0.1]:32876 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1oWe7c-0008VG-TC
	for submit <at> debbugs.gnu.org; Fri, 09 Sep 2022 09:32:42 -0400
Received: from mailrelay.tugraz.at ([129.27.2.202]:7899)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <liliana.prikler@HIDDEN>) id 1oWe7Z-0008V6-NR
 for 57598 <at> debbugs.gnu.org; Fri, 09 Sep 2022 09:32:39 -0400
Received: from kagayaki.fritz.box (85-127-52-93.dsl.dynamic.surfer.at
 [85.127.52.93])
 by mailrelay.tugraz.at (Postfix) with ESMTPSA id 4MPH3h4PwXz1LXsR;
 Fri,  9 Sep 2022 15:32:32 +0200 (CEST)
DKIM-Filter: OpenDKIM Filter v2.11.0 mailrelay.tugraz.at 4MPH3h4PwXz1LXsR
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tugraz.at;
 s=mailrelay; t=1662730353;
 bh=JlOFPewa0DKs44hThj4/dpGiOvpO1u72noMUmD4yX54=;
 h=Subject:From:To:Date:In-Reply-To:References:From;
 b=FYFFf9RocV5xJx5Qc6OkXbDDU6gGyi98JRPLI8Cyo33IEm3S6ORg2SoKRtlPaT4WV
 h1k+zjm2GIpf2DpHi43LW8GmJOMbi1cqgOGJyqfk2huIDhWlHcMvhuCBzh3zn4gjf1
 DT8iW/EH073UICz/E4sLzqigVnbynUARSXIHSCAM=
Message-ID: <b74c40c57dff2a0ac6eee2a7a2124d8ab2d6314e.camel@HIDDEN>
Subject: Re: [PATCH] doc: Update contribution guidelines on patches, etc.
From: Liliana Marie Prikler <liliana.prikler@HIDDEN>
To: Maxime Devos <maximedevos@HIDDEN>, 57598 <at> debbugs.gnu.org
Date: Fri, 09 Sep 2022 15:32:31 +0200
In-Reply-To: <a24e8c5c-a986-3f6f-15a4-03caeb801e6d@HIDDEN>
References: <20220905160048.18173-1-maximedevos@HIDDEN>
 <0f78953d57d8f66a934baf518b7c9e3247b580fd.camel@HIDDEN>
 <d0a48b72-c62b-cc97-e399-22abc0af182d@HIDDEN>
 <44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN>
 <b33540cb-0c72-6170-34d0-b8df4ab79b8f@HIDDEN>
 <1e707c8e345af7b2fb0353c5f1c0e37d716e3308.camel@HIDDEN>
 <a24e8c5c-a986-3f6f-15a4-03caeb801e6d@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
User-Agent: Evolution 3.42.1 
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-TUG-Backscatter-control: waObeELIUl4ypBWmcn/8wQ
X-Spam-Scanner: SpamAssassin 3.003001 
X-Spam-Score-relay: -0.4
X-Scanned-By: MIMEDefang 2.74 on 129.27.10.116
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 57598
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Am Freitag, dem 09.09.2022 um 13:14 +0200 schrieb Maxime Devos:
> 
> > In descriptions, it is wise to do so because it helps software
> > stand on its own merits rather than just "being a clone of this
> > thing you aren't allowed to have" (this is real criticism pointed
> > at us from the proprietary software embracers).  See for instance
> > minetest, which is described in terms of its features rather than
> > "being a Minecraft clone".
> 
> Sentence might have been truncated? 
Corrected above.

> Also, this is the package source field, not the description, I don't
> see how the "helps software stand on its own merits" applies to
> snippets of the package source.
Point taken, but imho it still makes sense to prefer keep lists over
remove lists.  The GNU project encourages people to read the sources
after all.


> > > How does ignoring a test fix the technical issue identified by
> > > the test (sometimes, the technical issue being a bug in the test
> > > itself)?
> > It fixes the technical issue that an otherwise functional package
> > (w.r.t. the N tests that don't fail) builds.  This is a
> > particularly
> > useful distinction with tests that require a network connection and
> > thus have to fail in a build container, or are known flaky upstream
> > and thus cause reproducibility issues.
> 
> Network test: right (though preferably those would support a 
> --no-network-tests test option or such).
> 
> For flaky tests: those sound like bugs to me, ignoring them doesn't 
> remove the flakyness.
Call it a bug or whatever, it is a technical issue that we deal with at
build time and not in the origin.

> > > 
> > > > There still is the difference that phases are clearly delimited
> > > > while snippets are a block of code that shouldn't get too
> > > > large.
> > > Snippets are delimited clearly as well, though, with the
> > > 'snippet' field?
> > > And the limitations of snippet length and phases length are the
> > > same -- no limits, though conciseness is appreciate as always.
> > True, but phases can be made to do just one thing, whereas snippets
> > have to fix everything that's wrong in more or less one (begin
> > ...).
> > This is a noticable distinction.> 
> 
> You can do that in snippets too, with comments:
> 
> (snippet
>    #~(begin
>        ;; Do the foo thing
>        (foo)
>        (foo-2 [...])
>        [...]
>        ;; Do the bar thing
>        (bar)
>        (bar-2 [...])
>        [...]))
You can, but it's still wiser to just keep the snippet short enough so
you don't have to.

> > 
> > > > I think my version at least hinted at this practice in a more
> > > > concise way, so it's not impossible to mention. [...]
> > > I agree it's possible -- as I replied previously:
> > > > I suppose a section could be added somewhere to properly
> > > > document
> > > > the 'embedding store file names' practice, and insert a
> > > > cross-reference,
> > > I don't think documenting the how of the practice should be done
> > > in this section, properly explaining 'search-input-file' /
> > > 'search-
> > > input-directory', 'inputs / native-inputs', 'bash' being an
> > > implicit
> > > input but you still have to add it to 'inputs' in some cases
> > > because
> > > of cross-compilation, this-package-input and this-package-native-
> > > input ... would make the
> > > subsubsection a bit too long I think, distracting from other
> > > situations, hence the proposal for a cross-reference.
> > > How about leaving the 'how to embed store file names' for a
> > > separate
> > >   documentation patch and section, adding a cross-reference
> > > later?
> > See above, "I suppose a section could be added..." means I'm
> > somewhat indifferent to whether it's done now or later;
> 
> Nitpick: you are quoting some text I wrote, so 'I' refers to me here,
> not you.
Ahh, my bad, the nesting level confused me.

>   I would however very
> > much prefer a wording that points people toward this practice
> > existing,
> > even if they have to go look in the code for examples. 
> > Alternatively,
> > a footnote for the most common case (search-input-file inputs
> > "bin/command") ought to suffice for the time being.
> 
> Aside from the typo's and a few rephrasings, I'm done with the 
> documentation.  If someone wants to extend the section with such 
> information, they can always do so later.
I haven't seen a v2 though.  Am I correct in assuming that none of the
points we discussed in the last few mails are going to be addressed?

> > 
> > IMHO, I think a reader who remembers the guiding principles should
> > see that it applies.
> 
> Likely. But removing the explicit mention of the guiding principle
> still makes the logical reasoning incomplete, remembering has nothing
> to do with it.  As I've written previously: ‘This has nothing do do
> with [...] and remembering, but rather with [...]’.
In that case, let me rephrase my criticism: "It passes the guidelines"
should not be part of the logical reasoning here.  Otherwise, why not
have a guideline checklist at the end of each subsection (which would
be silly, obviously, but that's the point).

> > > 
> > Also, your guiding principles are (with one exception) really just
> > invariants that ought to hold for the source field of a package.
> 
> I don't know about the exceptions (I haven't counted them), but yes, 
> indeed.  I do not see the problem of this.
For the record, the exception is the "most convenient" bit you've
copied from my patch :)

> > As such, I think it would be easier to state "A package's source
> > should
> > be the smallest corresponding source in terms of uncompressed file
> > size.  This corresponding source must consist only of free software
> > (note Free Software) and should build on all platforms supported by
> > upstream."  Note how smallest naturally implies unbundling bundled
> > sources.
> 
> This criterium on overly small sources.  Often, a package's source 
> contains things that is not used for the build or outputs and hence
> is not part of the corresponding source.  Examples:
Note "should" rather than "shall" or "must", meaning that slightly
larger tarballs are still acceptable.

> * the source contains documentation that could be built and
> installed,
>    but Guix doesn't do so yet.  --> should be kept (unless non-free)
> * documentation that isn't meant to be built or installed
>    (e.g. HACKING, PACKAGERS, ...) --> useful, shouldn't be removed.
> * .gitignore, .github, ... --> nothing wrong with removing those,
>    but pointless, let's not waste our time with looking for those
>    and removing them, even though doing so would make it smaller.
> * source files for platforms the upstream does not support
> yet/anymore
>    (but with some volunteer effort (e.g. bugfixes), it might become
>    a supported system again)
>    --> removing them (e.g. as part of an overly-broad 
> (delete-file-recursively 
> "this-dir-has-bundling-albeit-not-all-of-it-is-bundling"))
>        can be OK-ish, but removing them for 'minimality' is
> pointless.
I see you're nitpicking for the sake of the argument, but none of the
examples you provide (safe for the bundling one) add much cost to
either packing or unpacking.  Thus, I'm pretty sure we can ignore them
for practical purposes.  That being said, if you have a better
formulation, please do tell.

> 
> > > > I still find this wording very confusing. Perhaps "To add new
> > > > functionality, a patch is almost always the best choice. For
> > > > one,
> > > > it is likely that the new functionality requires changing
> > > > multiple
> > > > lines of source code, which is more convenient to do with a
> > > > patch
> > > > than with a snippet. Further, patches can be taken from and
> > > > submitted to upstreams more easily. If your patch has not been
> > > > submitted to upstream, consider doing so."
> > > It loses some information (that patches are preferred) and
> > > (after re-adding the conclusion) is more verbose, which appears
> > > to be considered very important.
> > Which conclusion is there to re-add?
> 
> "patches are preferred"
> 
>    The conclusion is already stated
> > in the beginning: patches are almost always the best choice.  Then
> > two
> > reasons as for why.  The part w.r.t. upstreaming changes has also
> > been
> > addressed.
> 
> While I consider that policies should have "best choices" coinciding 
> with "preferred" and that not doing so would be illogical, people, 
> projects, decisions ... are far from always logical.
> 
> Because of this, people cannot assume that the 'best choices' are 
> 'preferred', so it needs to be mentioned explicitly that these 'best 
> choices' are actually 'preferred'.
In that case, simply write preferred choice?

> > I'm using enumeration as a super term here, which can be
> > ((sub)sub)sections, chapters, list elements, whatever, and my claim
> > is that we barely have enough principles to allow the use of a
> > plural.
> 
> In English, things are either plural or singular.  Everything >= 2 is
> plural.  There number of principles, however we count them, is, at 
> least, 2.  Consequently, the principles are plural, not singular. 
> Treating the principles as singular is simply grammatically
> incorrect.
Correction: Everything that isn't exactly 1 is plural in English,
including 0, with perhaps the exception of -1 also using singular.

> Maybe it is barely allowed to be plural, but English grammar doesn't 
> care about that -- it is definitively disallowed to be singular, only
> plural remains.
Note that my argument isn't about English grammar, it uses English
grammar.

> > Adding to that, now that I think of it, I also doubt their
> > usefulness in guiding.  "Use whatever feels convenient, but note
> > that that might be subjective" is more useful at the end of the
> > section when a user didn't find what they were looking for than at
> > the start.
> 
> The introduction has a set of guiding principles, from with concrete 
> cases are built.  By adding another principle at the end, the cases
> cannot make use of the "use [...] convenient" principle.
> 
> Additionally, now the user has to look at _two_ places to find the 
> guiding principles -- at the beginning, and at the end.  Worse,
> the beginning does not have a cross-reference to the end, so since
> the set at the beginning is presented as exhaustive, the user might
> not know there is another guiding principle.
> 
> And even if they did read through the whole section (even though they
> should only have to read the introduction and the relevant worked-out
> case), assuming they read through it in a linear fashion, due to the
> new guiding principle that wasn't alluded to at the beginning, they
> have to redo their mental model of "Modifying Sources" as this
> principle could invalidate things.
This shows both a problem with your structure, but more importantly, a
failure to understand what I meant when I wrote "use whatever is
convenient" in my own patch.  This principle *can* only work for cases
in which there is *no clearly established practice*, thus putting it at
the end *after having enumerated all practices* is the logical choice.
With your structure, you have to bend it sideways to shoehorn it in
with the other principles.

> > At the risk of responding jokingly to what was meant serious: I
> > didn't know we suddenly gained 20 guiding principles.
> 
> 25 lines are for the guiding principles (sometimes referring to a 
> principle of elsewhere in Guix, sometimes a new principle for
> "Modifying Sources").  You proposed to 'cache' them somehow.  In
> Guile, to cache something, you can use 'delay/force'.  But this
> increases the amount of code (due to the additional use of 'delay'),
> instead of decreasing.
> 
> The documentation equivalent (whatever that might be, I am not seeing
> one myself) would then also be at least as long, maybe even a little 
> longer due to the use of 'delay'.
Okay, so I did misunderstand those 25 lines as 25 lines within the text
calling back to those guiding principles rather than 25 lines for the
guiding principles themselves.  Still, 25 lines are a little much,
especially given that the bulk of it explains the semantics of the
packages' source field.
> > 

> > > I suppose table items might take two less line or so less than
> > > subsubsections, but I don't think that's sufficient reason to
> > > step away from a nice section structure.
> > Another reason is that you can end a table in the middle of a
> > section, which you can't do with subsections.  Hence why I'm able
> > to put a remark at the bottom, which you have to clumsily fit into
> > the top.
> 
> I can, indeed, not put the 'convenience principle' at the bottom,
> except perhaps by adding a new subsubsection, and for tables adding
> such a remark at the bottom is indeed more convenient.
> 
> However, I don't see the 'have to clumsily' here -- as explained 
> elsewhere, I believe that the 'convenience principle' shouldn't be 
> separated from the other principles and that it fits nicely next to
> the the principles --- there is no 'have to', because I choose for
> this, and I am not seeing any 'clumsiness' here.
I think we'd have to debate choice vs. force here which would be a
rather long aside, but to make my argument short, your choice of how to
structure this section (table vs subsections) directly influences your
"choice" where to place particular information in a way that might 
inhibit natural information flow.
> > 
> > 
> > 

> > > The patch does this, currently.  It already proposes a number of
> > > hammers (patches, snippets and phases) and purposes (adding new
> > > functionality, fixing technical issues, unbundling, ...).
> > > Also, the scenario "oh no, however will I put this nail into a
> > > wall"
> > > actually happened -- see the Shepherd discussion, where there was
> > > a lot of disagreement on how nails (= small work-around in the
> > > Makefile) should be put in walls (= patches, snippet, phase?).  
> > > It
> > > was the whole reason to start writing a documentation patch.
> > You might want to add a link here if it supports your argument, but
> > without looking at the discussion this rather sounds like "oh no, I
> > have three hammers, which one do I pick?" – which, fair enough, is
> > still a problem, but one that neither of our patches would cause
> > imho.
> 
> As I think I've written previously, the whole point was to solve that
> problem. For the discussion, see:
> 
> * https://issues.guix.gnu.org/54216
> *
> https://yhetil.org/guix/c4c0a071-2e03-d4d6-6718-05424d21d146@HIDDEN/
> * 
> https://yhetil.org/guix-devel/84e13ef7d437062df5cca51a12e6da54929e0176.camel@HIDDEN/
> 
> Not solving the problem defeats the whole point, as the purpose is to
> solve that problem.
I think we might be disagreeing about what constitutes "solving the
problem" here.  Correct me if I'm wrong, but to me it seems any
scenario that is not covered by whatever patch is applied counts as
"not having solved the problem".  I personally find this line of
reasoning questionable, as there are perfectly valid reasons why
multiple tools could apply.

Take the problem of embedding a store path.  You could for instance
replace all occurences of "sh" with /gnu/store/.../bin/sh, or you could
first replace them in a patch with "@sh@" and then replace that with
/gnu/store/.../bin/sh.  Of course, you rarely have to do the latter and
the former is simpler, hence why you will often see the former, but
that doesn't mean the latter is invalid.
> 

> 
> > > 
> > > > And if they don't find anything, they see the handy little line
> > > > at the bottom saying "use whatever you think is convenient".
> > > Nowhere did the patch imply that the listed cases were all cases.
> > > In fact, in two places in the introduction it is implied that the
> > > examples are not exhaustive, and that they can choose according
> > > to convenience  [...]
> > Emphasis on handy little line rather than needing to be told twice
> > (particularly if people have no idea what to expect due to not
> > having looked at the worked-out cases yet).
> 
> They don't need to be told twice.  Also, my patch also has that handy
> little line (albeit differently worded), see the 'guiding
> principles'.
> 
> Also, on the 'no idea what to expect' -- this is exactly the same for
> your patch too?  In both patches, if the user only reads the 
> introduction and conclusion (if any) and doesn't read the actual 
> (relevant examples)/(explanation of patches, snippets, phases), then 
> that's their problem.
I do think a table in the middle of the section is hard to ignore, but
suppose for the sake of argument that they do, then in my case they
will have learned exactly nothing.  In your case, they will know the
"guiding principles" and then interpret them to mean whatever they
think it means.  I'm not convinced mine is worse here.

> > > 
> > > > I also expand a little on the benefits and drawbacks of
> > > > these approaches as you would when describing design patterns.
> > > This is also done in my patch. [...]
> > This is not about the contained information, but the structure of
> > the contained information.
> > 
> > My solution->problem style follows roughly this style:
> > 1. solution
> > 2. problems it is known to solve
> > 3. how to use
> > 4. properties, caveats, etc.
> > 
> > Your problem->solution style roughly has the following:
> > 1. problem
> > 2. (set of) solution(s)
> > 3. if more than one solution, maybe a help to select
> 
> Also, in no particular order
> 
>    4.: how to use
>    5.: explanation why it is preferred (properties, caveats?)
No particular order is problematic, but more importantly if a
technology appears more than once (guaranteed by the pigeonhole
principle), then either its properties get repeated (not good for
length) or scattered (not good for the flow you want).  Again, a
structural problem.

> > This makes it so that people might have to go to a different
> > subsection than the one they read for their solution to find out
> > about potential caveats, e.g. not embedding store paths in a
> > snippet.
> 
> I assume their problem was "X doesn't find Y".  This being a
> technical issue, they go to "Fixing technical issues".  In that
> subsubsection,  there are the words:
> 
> > Secondly, if the fix of a technical issue embeds a store file name,
> > then it has to be a phase.  Otherwise, if the store file name were
> > embedded in the source, the result of @command{guix build --source}
> > would be unusable on non-Guix systems and also likely unusable on
> > Guix systems of another architecture.
> 
> so they actually do know of the caveat 'don't embed store paths in a 
> snippet, do it in a phase instead', and they did not need to go to a 
> different subsubsection.
Typical happy path.

> > > 
> > > > Your problem->solution approach instead leaves people wondering
> > > > when their particular use case has not been described.
> > > See my reply to ‘And if they don't find anything, they see the
> > > handy little line at the bottom saying "use whatever you think is
> > > convenient’.
> > > > It gives them a solution rather than the tools to build
> > > > solutions with.
> > > It does give the tools: snippets, patches and phases.
> > As far as I read, it describes none of those.  It puts out guiding
> > principles and some already worked-out cases.
> Here are the descriptions:
> 
> > Guix has tree main ways of modifying the source code of a package,
> > that you as a packager may use.  These are patches, snippets and
> > phases
> 
> Once the user knows _which_ of the three they should use (by
> consulting the following subsubsections), they can then search for
> 'patch', 'snippet' and 'phases' in the manual for more information,
> no need to duplicate that information.
Point taken, but imho cross-references are nice for those who just
learned "okay, I now know I need to solve my technical problem with a
phase, how do I do that?"  
> 
> > > Also, "giving the tools to build solutions with" does not help
> > > with the problem that I aimed to solve -- there was disagreement
> > > on what the appropriate tools are (see: Shepherd), so it not just
> > > needs to give the tools, but also the solutions.
> > I don't see how my patch lacks this information however.
> 
> IIUC, the raw information should usually be indeed all there, but the
> user has to consult _all_ of the sections to determine which option 
> (patch, snippet, phase) is appropriate, having to assemble all the 
> information is (a) a waste of time and (b) can lead to different 
> interpretations and conclusions (see: Shepherd).
> 
> More concretely, I cannot use your patch to decide between phases, 
> snippets and patches for the Shepherd issue:
> 
> * none of three appear to be forbidden by your documentation
> * there is no recommendation for 'patches' (IIRC it wasn't accepted 
> upstream and there was no intent to submit it upstream, it being
> really a Guile bug, not a Shepherd bug)
> * there is no recommendation for snippets (it's all free, no
> bundling)
> * build phases are 'to be avoided' (but not forbidden), as it
> resulted
>    in observably different runtime behaviour (being a bug fix)
> 
> -- three (or at best, two, if build phases are discounted) options 
> remain.  Myself, I would then consider 'snippets' to be the most 
> convenient, but some others (see: Shepherd, IIRC) would really want a
> patch instead, because 'patches can be reverted' or something like
> that.
> 
> As such, you are giving the tools (snippets / patches / phases, some 
> downsides and upsides), but different people can construct different 
> solutions from those tools even in the same situation, leading to
> conflicts.
> 
> If I use my patch instead, I go to "fixing technical issues". This 
> section tells me to use a patch or a snippet.  As the fix is not 
> Guix-specific, it recommends a patch to save time when upstreaming. 
> Conclusion: write a patch.  It was a Guile bug, so the fix was a
> patch to Guile.  But that would take time and upstream took the
> responsibility for a fix, so the 'efficient time thing' doesn't
> really apply and a small work-around (setting optimisation flags)
> suffices.
> 
> In this situation, the subsubsection doesn't care at all if you go
> for a snippet, so apply the last guiding principle: go for the
> simplest thing: a snippet. (Unless you already have a patch, then a
> patch is simplest.)
> Does someone else have a different idea on what's simplest?  Doesn't
> really matter, ‘Sometimes this is subjective, which is also fine’.
I do get the impression that this patch simply codifies what you feel
is right based on the shepherd situation rather than thinking about the
general case, which is why my patch makes weaker statements here.  If
this issue could have been avoided with a #:make-flag, we would have
used that.

More importantly, I fail to see the superiority of your patch here. 
IIUC neither patch offers a unique solution to the shepherd thing, so
the room for debate remains.  You could claim that my patch offers more
room, which fair enough, it does, but on the same token it allows
people to see that the guidelines have been followed and the patch can
be applied.

> > In particular, for review purposes, mine should be easier to work
> > with.  For instance, the reviewer sees a hash embedded in a
> > snippet, sees in the snippet entry that you shouldn't do that, and
> > can thus say "nope, don't do a snippet here".
> 
> I think we should optimise for packagers before reviewers
Code is more often read than written, so optimising for the reader is
optimizing for the packager as well.

> > Regardless of which patch we pick, it should not mandate a
> > particular solution in potentially contentious cases,
> 
> Actually the whole point was to mandate a particular solution for the
> contentious cases, see Shepherd.
But I disagree.

Memes aside, please refrain from the "I'm right, do this" style (which
is another problem with the "problem-centric" approach), but rather
focus on writing a patch that makes reviewers not discard a patch due
to formalities.  If the shepherd thing had needed an upstream patch,
even with a snippet that patch could have easily been created by
converting that snippet to a sed, so more time was wasted debating than
overworking.

> > and also point towards the right solution.  See our discussions on
> > the individual solutions on points in which I believe you've
> > errored.
> 
> These are:
> 
> * the typo's
> * including "skipping tests indicating failure under ‘Fixing
> technical issues’"
> * "don't mention file names of non-free things in patches"
> 
> Did I miss any?
I'm pretty sure there's also a discussion on store path embeddings at
the very least.  Forgive me if I too missed something.

Cheers




Information forwarded to guix-patches@HIDDEN:
bug#57598; Package guix-patches. Full text available.

Message received at 57598 <at> debbugs.gnu.org:


Received: (at 57598) by debbugs.gnu.org; 9 Sep 2022 12:31:05 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Sep 09 08:31:05 2022
Received: from localhost ([127.0.0.1]:60998 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1oWdA0-0006xj-7B
	for submit <at> debbugs.gnu.org; Fri, 09 Sep 2022 08:31:05 -0400
Received: from albert.telenet-ops.be ([195.130.137.90]:52404)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <maximedevos@HIDDEN>) id 1oWd9w-0006xI-KE
 for 57598 <at> debbugs.gnu.org; Fri, 09 Sep 2022 08:31:03 -0400
Received: from localhost.localdomain
 ([IPv6:2a02:1811:8c09:9d00:5dba:d409:33f7:a16])
 by albert.telenet-ops.be with bizsmtp
 id HoWy2800N20ykKC06oWyqS; Fri, 09 Sep 2022 14:30:58 +0200
From: Maxime Devos <maximedevos@HIDDEN>
To: 57598 <at> debbugs.gnu.org
Subject: [PATCH v2] doc: Update contribution guidelines on patches, etc.
Date: Fri,  9 Sep 2022 14:30:51 +0200
Message-Id: <20220909123051.15747-1-maximedevos@HIDDEN>
X-Mailer: git-send-email 2.37.2
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r22;
 t=1662726659; bh=ShuyIi5oL2KLu5raMueIVayMxJvraM6D4TAkISgfEBU=;
 h=From:To:Cc:Subject:Date;
 b=WhNwaFDfVGb1lt3/LKr8fbyZWF1n1GX/h40LURo36dX5Gf81MjofENZePz+wp6/0j
 4ovILLK/DSRrY0ab0eftwP1dwT7rNgIeYbfp11QQoY915TgzvH/uUhr0bkdO4iK2MQ
 x4/7qK8iA8sHzcVcO84nh5y1g5/B7EJiob4L9A8AeGm0kcu0NFf+CcE+HnOYVd7H2k
 /tzJ0Y2K+ZDIc2WOA6DbP2z3seyXX2N8CtBn0maIvZWUaq5OFvBBZBanLrkHmbk5Re
 +EeAbRdGW/RhksxuddT2rYzUpVMB/8wpsOdNi+OPuIHeQjzsw6yWGgi92WwAsSFBI2
 hs+j5qc+tf9dQ==
X-Spam-Score: -0.0 (/)
X-Debbugs-Envelope-To: 57598
Cc: Maxime Devos <maximedevos@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

* doc/contributing.texi (Modifying Sources): Replaced with ...
("Modifying Sources"): ... this.  List more use cases and some principles.

This patch incorporates some text written by Liliana Marie Prikler.  The
structure is based on a proposal by Julien Lepiller.  The text has been
revised based on reviews by David Larsson and blake.

(! remove following text before committing !)

Unless someone finds some more typo's or such, this is the final version for
me, as it has become a time sink with diminishing returns.

Changes since previous version:

- typofix: tree -> three
- third and fourth principle are merged
- corrected @subsection -> @subsubsection

Not changed:
- no additional information on bugfixes even though initially proposed, I'm
  done with the patch, if you'd like such information please write a follow-up
  patch.
- I didn't add 'no naming the file names of non-free things in the snippets’,
  as I don't think this is currently policy and it seems rather inconvenient
  to work with (e.g.: then we wouldn't be able to keep records of what parts
  still need to be replaced with something free in the comments)
- going from ‘problem -> solution’ to ‘solution -> problem’ -- would partially
  defeats the point of the patch.
- going through the two different patches and take the most concise phrasing
  (other people in 57598 <at> debbugs.gnu.org didn't agree to my proposal, also,
  I'm about done with the patch
- ‘subsubsections -> item / table’: I haven't read a convincing explanation
  on why item / table is better here.
---
 doc/contributing.texi | 140 +++++++++++++++++++++++++++++++++++++-----
 doc/guix.texi         |   2 +-
 2 files changed, 126 insertions(+), 16 deletions(-)

diff --git a/doc/contributing.texi b/doc/contributing.texi
index 02c7c5ae59..bd2ae8d9b6 100644
--- a/doc/contributing.texi
+++ b/doc/contributing.texi
@@ -441,7 +441,7 @@ needed is to review and apply the patch.
 * Package Naming::              What's in a name?
 * Version Numbers::             When the name is not enough.
 * Synopses and Descriptions::   Helping users find the right package.
-* Snippets versus Phases::      Whether to use a snippet, or a build phase.
+* Modifying Sources::           Whether to use a snippet, or a build phase.
 * Emacs Packages::              Your Elisp fix.
 * Python Modules::              A touch of British comedy.
 * Perl Modules::                Little pearls.
@@ -698,20 +698,130 @@ Gettext}):
 for the X11 resize-and-rotate (RandR) extension. @dots{}")
 @end lisp
 
-@node Snippets versus Phases
-@subsection Snippets versus Phases
-
-@cindex snippets, when to use
-The boundary between using an origin snippet versus a build phase to
-modify the sources of a package can be elusive.  Origin snippets are
-typically used to remove unwanted files such as bundled libraries,
-nonfree sources, or to apply simple substitutions.  The source derived
-from an origin should produce a source that can be used to build the
-package on any system that the upstream package supports (i.e., act as
-the corresponding source).  In particular, origin snippets must not
-embed store items in the sources; such patching should rather be done
-using build phases.  Refer to the @code{origin} record documentation for
-more information (@pxref{origin Reference}).
+@node Modifying Sources
+@subsection Modifying Sources
+
+Guix has tree main ways of modifying the source code of a package, that
+you as a packager may use.  These are patches, snippets and phases.
+Each one has its strengths and drawbacks.  To decide between the three,
+there are a few guiding principles to satisfy simultanuously where
+possible:
+
+@itemize
+@item
+In principle, Guix only has free software; when the upstream source
+contains some non-free software, it has to be removed such that
+@command{guix build --source} returns the ‘freed’ source code rather than
+the unmodified upstream source (@pxref{Software Freedom}).
+@item
+The source of the package needs to correspond to what is actually built
+(i.e., act as the corresponding source), to fulfill our ethical and
+legal obligations.
+@item
+The source needs to actually work, not only on your Guix system but also
+on other Guix systems.  It preferably should also work on non-Guix
+systems if supported by upstream.  This requires some care for
+substitutions involving store items and other architecture-specific
+changes.
+@item
+When there is more than one way to do something, choose whichever method
+is the simplest.  Sometimes this is subjective, which is also fine.
+What matters is that you use techniques that are common within the
+community (i.e., patterns that appear throughout @code{gnu/packages/...})
+and are thus clearly legible for reviewers.
+@end itemize
+
+To make things more concrete and to resolve conflicts between the
+principles, a few cases have been worked out:
+
+@subsubsection Removing non-free software
+Non-free software has to be removed in snippets; the reason is that
+patches or phases will not work.
+
+For patches, the problem is that a patch removing a non-free file
+automatically contains the non-free file@footnote{It has been noted that
+git patches support removing files without including the file in the
+patch in
+@url{https://yhetil.org/guix/8b13e899-eb60-490b-a268-639249698c81@@www.fastmail.com/}. If
+it is verified that the @command{patch} utility supports such patches,
+this method can be used and this policy adjusted appropriately.}, and we
+do not want anything non-free in Guix even if only in its patches.
+
+For phases, the problem is that phases do not influence the result of
+@command{guix build --source}.
+
+@subsubsection Removing bundled libraries
+Bundled libraries should not be removed with patches, because then the
+patch would contain the full bundled library, which can be large. They
+can be removed either in snippets or phases, often using the procedure
+@code{delete-file-recursively}. There are a few benefits for snippets here:
+
+When using snippets, the bundled library does not occur in the source
+returned by @code{guix build --source}, so users and reviewers do not
+have to worry about whether the bundled library contains malware,
+whether it is non-free, if it contains pre-compiled binaries ... There
+are also less licensing concerns: if the bundled libraries are removed,
+it becomes less likely that the licensing conditions apply to people
+sharing the source returned by @command{guix build --source}, especially if
+the bundled library is not actually used on Guix systems.@footnote{This
+is @emph{not} a claim that you can simply ignore the licenses of
+libraries when they are unbundled and replaced by Guix packages -- there
+are less concerns, not none.}
+
+As such, snippets are recommended here.
+
+@subsubsection Fixing technical issues (compilation errors, test failures, other bugs ...)
+Usually, a bug fix comes in the form of a patch copied from upstream or
+another distribution.  In that case, simply adding the patch to the
+@code{patches} field is the most convenient and usually does not cause
+any problems; there is no need to rewrite it as a snippet or a phase.
+
+If no ready-made patch already exists, then choosing between a patch or
+a snippet is a matter of convenience. However, there are two things to
+keep in mind:
+
+First, when the fix is not Guix-specific, upstreaming the fix is
+strongly desired to avoid the additional maintenance cost to Guix.  As
+upstreams cannot accept snippets, writing a patch can be a more
+efficient use of time.  Secondly, if the fix of a technical issue embeds
+a store file name, then it has to be a phase.  Otherwise, if the store
+file name were embedded in the source, the result of @command{guix build
+--source} would be unusable on non-Guix systems and also likely unusable
+on Guix systems of another architecture.
+
+@subsubsection Adding new functionality
+To add new functionality, a patch is almost always the most convenient
+choice of the three -- patches are usually multi-line changes, which are
+convenient to do with patches and inconvenient to do with phases or
+snippets.  This choice is usually also compatible with all the guiding
+principles.  As such, patches are preferred.  However, as with bug
+fixes, upstreaming the new functionality is desired.
+
+@subsubsection How to add patches
+Refer to the @code{origin} record documentation (particularly the fields
+@code{patches}, @code{patch-inputs}, and @code{patch-flags}) for
+information on how to use patches (@pxref{origin Reference}).  When
+adding a patch, do not forget to also list it in @code{dist_patch_DATA}
+of @file{gnu/local.mk}.
+
+@subsubsection How to add files
+New source files can be added in phases or snippets, by using
+@b{auxiliarry files}.  Auxiliary files are stored in the
+@file{gnu/packages/aux-files} directory and can be retrieved (in a
+snippet or a phase) with @code{search-auxiliary-file}.  When adding an
+auxiliary file, do not forget to also list it in @code{AUX_FILES} of
+@file{Makefile.am}.
+
+Another option for adding new files, is to use procedures such as
+@code{display}, @code{format} and @code{call-with-output-file}.  As a
+matter of principle, auxiliary files ought to be preferred over an
+equivalent @code{call-with-output-file} when creating non-trivil files,
+as that makes them easier to edit.  The exact threshold for a
+non-trivial file might be subjective, though it should lie somewhere
+between 10--20 lines.
+
+Currently, there is no policy on deciding between phase and snippets for
+adding new files, except for the guiding principles.
 
 @node Emacs Packages
 @subsection Emacs Packages
diff --git a/doc/guix.texi b/doc/guix.texi
index 7bce8a567c..042ab3bd8a 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -70,7 +70,7 @@ Copyright @copyright{} 2019 Jakob L. Kreuze@*
 Copyright @copyright{} 2019 Kyle Andrews@*
 Copyright @copyright{} 2019 Alex Griffin@*
 Copyright @copyright{} 2019, 2020, 2021, 2022 Guillaume Le Vaillant@*
-Copyright @copyright{} 2020 Liliana Marie Prikler@*
+Copyright @copyright{} 2020, 2022 Liliana Marie Prikler@*
 Copyright @copyright{} 2019, 2020, 2021, 2022 Simon Tournier@*
 Copyright @copyright{} 2020 Wiktor Żelazny@*
 Copyright @copyright{} 2020 Damien Cassou@*

base-commit: a44e08337d15b3f254a35d0311663c2bbd501852
prerequisite-patch-id: 0caac311875ee39cb48573657ebb960e90da6dfb
prerequisite-patch-id: 418285493d89ebf102175902d9b09a0174e88190
prerequisite-patch-id: 3c39eb839d9d3ff3fca6cd98621a5d5c411b7af4
prerequisite-patch-id: 8d5662e874c469f5ee496ef5181cf2d0a30ad1d8
prerequisite-patch-id: 26513c3b3b86963df718ee41d14a25d1cc6a8f3f
prerequisite-patch-id: 2b2497e2edec0afc48ebadd6f09f0c661c466127
prerequisite-patch-id: 2712efb97bf33985fd0658e4dd8e936dc08be5fe
prerequisite-patch-id: 9d2409b480a8bff0fef029b4b095922d4957e06f
-- 
2.37.2





Information forwarded to guix-patches@HIDDEN:
bug#57598; Package guix-patches. Full text available.

Message received at 57598 <at> debbugs.gnu.org:


Received: (at 57598) by debbugs.gnu.org; 9 Sep 2022 11:14:39 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Sep 09 07:14:38 2022
Received: from localhost ([127.0.0.1]:60941 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1oWbxz-0002sz-Ce
	for submit <at> debbugs.gnu.org; Fri, 09 Sep 2022 07:14:38 -0400
Received: from baptiste.telenet-ops.be ([195.130.132.51]:56248)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <maximedevos@HIDDEN>) id 1oWbxt-0002si-H0
 for 57598 <at> debbugs.gnu.org; Fri, 09 Sep 2022 07:14:34 -0400
Received: from [IPV6:2a02:1811:8c09:9d00:5dba:d409:33f7:a16]
 ([IPv6:2a02:1811:8c09:9d00:5dba:d409:33f7:a16])
 by baptiste.telenet-ops.be with bizsmtp
 id HnER2800P20ykKC01nERlQ; Fri, 09 Sep 2022 13:14:27 +0200
Message-ID: <a24e8c5c-a986-3f6f-15a4-03caeb801e6d@HIDDEN>
Date: Fri, 9 Sep 2022 13:14:25 +0200
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101
 Thunderbird/91.12.0
Content-Language: en-US
To: Liliana Marie Prikler <liliana.prikler@HIDDEN>,
 57598 <at> debbugs.gnu.org
References: <20220905160048.18173-1-maximedevos@HIDDEN>
 <0f78953d57d8f66a934baf518b7c9e3247b580fd.camel@HIDDEN>
 <d0a48b72-c62b-cc97-e399-22abc0af182d@HIDDEN>
 <44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN>
 <b33540cb-0c72-6170-34d0-b8df4ab79b8f@HIDDEN>
 <1e707c8e345af7b2fb0353c5f1c0e37d716e3308.camel@HIDDEN>
From: Maxime Devos <maximedevos@HIDDEN>
Subject: Re: [PATCH] doc: Update contribution guidelines on patches, etc.
In-Reply-To: <1e707c8e345af7b2fb0353c5f1c0e37d716e3308.camel@HIDDEN>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="------------ztoDhl3zz8S7BeO6MhLpiOLo"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r22;
 t=1662722067; bh=1Y1FS593G81grZ4wkUEizHFCc0seFdnJfROIZljCB3A=;
 h=Date:To:References:From:Subject:In-Reply-To;
 b=dI9rZonTyHxJI5VccKRyRLeOgT2KAA5j9ep4DsaH4ZC4AXqeojOqv/ptfDLNd5zHt
 Bd3T079JVIA4YxFrXbJpS+qFgvWOiJ3tVOQNO/qF9mmYAZerkeiJyFjwD/1VRTlMi1
 zE/jyIon2Qufagw/Rl8HXmtw1yEE0SsRx8Wpz4selzayeYdsgqDbjlT++CbJ82LTdQ
 7Jg7SOPwCmRnWoRoopbPr5tF/qGxaNftiMTDED5zNIPpoN8MKsd00kIjj0YpyWi7EP
 9aJtD/UXt3pDOOaUy4iqfU0TJIqQQF4JEJrSFw0vpYrgmOFx3C3OVVeFxrNHhrjL5x
 ZlpH30Grn5INA==
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 57598
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--------------ztoDhl3zz8S7BeO6MhLpiOLo
Content-Type: multipart/mixed; boundary="------------LEdw0eVxVIORtTBS4903Yefe";
 protected-headers="v1"
From: Maxime Devos <maximedevos@HIDDEN>
To: Liliana Marie Prikler <liliana.prikler@HIDDEN>,
 57598 <at> debbugs.gnu.org
Message-ID: <a24e8c5c-a986-3f6f-15a4-03caeb801e6d@HIDDEN>
Subject: Re: [PATCH] doc: Update contribution guidelines on patches, etc.
References: <20220905160048.18173-1-maximedevos@HIDDEN>
 <0f78953d57d8f66a934baf518b7c9e3247b580fd.camel@HIDDEN>
 <d0a48b72-c62b-cc97-e399-22abc0af182d@HIDDEN>
 <44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN>
 <b33540cb-0c72-6170-34d0-b8df4ab79b8f@HIDDEN>
 <1e707c8e345af7b2fb0353c5f1c0e37d716e3308.camel@HIDDEN>
In-Reply-To: <1e707c8e345af7b2fb0353c5f1c0e37d716e3308.camel@HIDDEN>

--------------LEdw0eVxVIORtTBS4903Yefe
Content-Type: multipart/mixed; boundary="------------tRDWi1bv5GRDIutW2FCxCszJ"

--------------tRDWi1bv5GRDIutW2FCxCszJ
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: base64

DQoNCk9uIDA5LTA5LTIwMjIgMTA6MDQsIExpbGlhbmEgTWFyaWUgUHJpa2xlciB3cm90ZToN
Cj4gQW0gRG9ubmVyc3RhZywgZGVtIDA4LjA5LjIwMjIgdW0gMTM6MTIgKzAyMDAgc2Nocmll
YiBNYXhpbWUgRGV2b3M6DQo+PiBPbiAwNy0wOS0yMDIyIDEwOjA5LCBMaWxpYW5hIE1hcmll
IFByaWtsZXIgd3JvdGU6DQo+Pj4gQW0gRGllbnN0YWcsIGRlbSAwNi4wOS4yMDIyIHVtIDIy
OjIxICswMjAwIHNjaHJpZWIgTWF4aW1lIERldm9zOg0KPj4+PiBJdCBpcywgdG8gbXkga25v
d2xlZGdlLCBub3QgZm9yYmlkZGVuIHRvIG1lbnRpb24gbm9uLWZyZWUNCj4+Pj4gc29mdHdh
cmUgYnkgbmFtZSBpbiBjb2RlLCBhcyBsb25nIGFzIGl0cyBub3QgYSByZWNvbW1lbmRhdGlv
bg0KPj4+PiAoZXhwbGljaXQgb3IgaW1wbGllZCkuDQo+Pj4gSW5kZWVkLCB0aGVyZSBpcyBu
byBoYXJkIHJ1bGUsIGhlbmNlICJhdm9pZCIgcmF0aGVyIHRoYW4gImZvcmJpZCIuDQo+PiBX
aGF0IEkgYWxzbyBtZWFudCBpcywgdGhhdCB0byBteSBrbm93bGVkZ2UgdGhlcmUgaXMgbm8g
c29mdCBydWxlDQo+PiBlaXRoZXIuICBBZ2Fpbiwgd2h5IHNob3VsZCB3ZSBhdm9pZCB0aGlz
LCB3aGF0J3MgdGhlIHBvaW50IG9mIHRoYXQ/DQo+IEluIGRlc2NyaXB0aW9ucywgaXQgaXMg
d2lzZSB0byBkbyBzbyBiZWNhdXNlIGl0IGhlbHBzIHNvZnR3YXJlIHN0YW5kIG9uDQo+IGl0
cyBvd24gbWVyaXRzIHJhdGhlciB0aGFuIGp1c3QgImJlaW5nIGEgY2xvbmUgb2YgdGhpcyB0
aGluZyB5b3UgYXJlbid0DQo+IGFsbG93ZWQgdG8gaGF2ZSIgKHRoaXMgaXMgcmVhbCBjcml0
aWNpc20gcG9pbnRlZCBhdCB1cyBmcm9tIHRoZQ0KPiBwcm9wcmlldGFyeSBzb2Z0d2FyZSBl
bWJyYWNlcnMpLiAgU2VlIGZvciBpbnN0YW5jZSBtaW5ldGVzdCwgd2hpY2hpc3kNCg0KU2Vu
dGVuY2UgbWlnaHQgaGF2ZSBiZWVuIHRydW5jYXRlZD8gQWxzbywgdGhpcyBpcyB0aGUgcGFj
a2FnZSBzb3VyY2UgDQpmaWVsZCwgbm90IHRoZSBkZXNjcmlwdGlvbiwgSSBkb24ndCBzZWUg
aG93IHRoZSAiaGVscHMgc29mdHdhcmUgc3RhbmQgb24gDQppdHMgb3duIG1lcml0cyIgYXBw
bGllcyB0byBzbmlwcGV0cyBvZiB0aGUgcGFja2FnZSBzb3VyY2UuDQoNCj4gDQo+PiBIb3cg
ZG9lcyBpZ25vcmluZyBhIHRlc3QgZml4IHRoZSB0ZWNobmljYWwgaXNzdWUgaWRlbnRpZmll
ZCBieSB0aGUNCj4+IHRlc3QgKHNvbWV0aW1lcywgdGhlIHRlY2huaWNhbCBpc3N1ZSBiZWlu
ZyBhIGJ1ZyBpbiB0aGUgdGVzdCBpdHNlbGYpPw0KPiBJdCBmaXhlcyB0aGUgdGVjaG5pY2Fs
IGlzc3VlIHRoYXQgYW4gb3RoZXJ3aXNlIGZ1bmN0aW9uYWwgcGFja2FnZQ0KPiAody5yLnQu
IHRoZSBOIHRlc3RzIHRoYXQgZG9uJ3QgZmFpbCkgYnVpbGRzLiAgVGhpcyBpcyBhIHBhcnRp
Y3VsYXJseQ0KPiB1c2VmdWwgZGlzdGluY3Rpb24gd2l0aCB0ZXN0cyB0aGF0IHJlcXVpcmUg
YSBuZXR3b3JrIGNvbm5lY3Rpb24gYW5kDQo+IHRodXMgaGF2ZSB0byBmYWlsIGluIGEgYnVp
bGQgY29udGFpbmVyLCBvciBhcmUga25vd24gZmxha3kgdXBzdHJlYW0gYW5kDQo+IHRodXMg
Y2F1c2UgcmVwcm9kdWNpYmlsaXR5IGlzc3Vlcy4NCg0KTmV0d29yayB0ZXN0OiByaWdodCAo
dGhvdWdoIHByZWZlcmFibHkgdGhvc2Ugd291bGQgc3VwcG9ydCBhIA0KLS1uby1uZXR3b3Jr
LXRlc3RzIHRlc3Qgb3B0aW9uIG9yIHN1Y2gpLg0KDQpGb3IgZmxha3kgdGVzdHM6IHRob3Nl
IHNvdW5kIGxpa2UgYnVncyB0byBtZSwgaWdub3JpbmcgdGhlbSBkb2Vzbid0IA0KcmVtb3Zl
IHRoZSBmbGFreW5lc3MuDQoNCj4+PiBUaGVyZSBzdGlsbCBpcyB0aGUgZGlmZmVyZW5jZSB0
aGF0IHBoYXNlcyBhcmUgY2xlYXJseSBkZWxpbWl0ZWQNCj4+PiB3aGlsZSBzbmlwcGV0cyBh
cmUgYSBibG9jayBvZiBjb2RlIHRoYXQgc2hvdWxkbid0IGdldCB0b28gbGFyZ2UuDQo+PiBT
bmlwcGV0cyBhcmUgZGVsaW1pdGVkIGNsZWFybHkgYXMgd2VsbCwgdGhvdWdoLCB3aXRoIHRo
ZSAnc25pcHBldCcNCj4+IGZpZWxkPw0KPj4gQW5kIHRoZSBsaW1pdGF0aW9ucyBvZiBzbmlw
cGV0IGxlbmd0aCBhbmQgcGhhc2VzIGxlbmd0aCBhcmUgdGhlIHNhbWUNCj4+ICDCoC0tIG5v
IGxpbWl0cywgdGhvdWdoIGNvbmNpc2VuZXNzIGlzIGFwcHJlY2lhdGUgYXMgYWx3YXlzLg0K
PiBUcnVlLCBidXQgcGhhc2VzIGNhbiBiZSBtYWRlIHRvIGRvIGp1c3Qgb25lIHRoaW5nLCB3
aGVyZWFzIHNuaXBwZXRzDQo+IGhhdmUgdG8gZml4IGV2ZXJ5dGhpbmcgdGhhdCdzIHdyb25n
IGluIG1vcmUgb3IgbGVzcyBvbmUgKGJlZ2luIC4uLikuDQo+IFRoaXMgaXMgYSBub3RpY2Fi
bGUgZGlzdGluY3Rpb24uPiANCg0KWW91IGNhbiBkbyB0aGF0IGluIHNuaXBwZXRzIHRvbywg
d2l0aCBjb21tZW50czoNCg0KKHNuaXBwZXQNCiAgICN+KGJlZ2luDQogICAgICAgOzsgRG8g
dGhlIGZvbyB0aGluZw0KICAgICAgIChmb28pDQogICAgICAgKGZvby0yIFsuLi5dKQ0KICAg
ICAgIFsuLi5dDQogICAgICAgOzsgRG8gdGhlIGJhciB0aGluZw0KICAgICAgIChiYXIpDQog
ICAgICAgKGJhci0yIFsuLi5dKQ0KICAgICAgIFsuLi5dKSkNCg0KDQo+Pg0KPj4+IEkgdGhp
bmsgbXkgdmVyc2lvbiBhdCBsZWFzdCBoaW50ZWQgYXQgdGhpcyBwcmFjdGljZSBpbiBhIG1v
cmUNCj4+PiBjb25jaXNlIHdheSwgc28gaXQncyBub3QgaW1wb3NzaWJsZSB0byBtZW50aW9u
LiBbLi4uXQ0KPj4gSSBhZ3JlZSBpdCdzIHBvc3NpYmxlIC0tIGFzIEkgcmVwbGllZCBwcmV2
aW91c2x5Og0KPj4+IEkgc3VwcG9zZSBhIHNlY3Rpb24gY291bGQgYmUgYWRkZWQgc29tZXdo
ZXJlIHRvIHByb3Blcmx5IGRvY3VtZW50DQo+Pj4gdGhlICdlbWJlZGRpbmcgc3RvcmUgZmls
ZSBuYW1lcycgcHJhY3RpY2UsIGFuZCBpbnNlcnQgYQ0KPj4+IGNyb3NzLXJlZmVyZW5jZSwN
Cj4+IEkgZG9uJ3QgdGhpbmsgZG9jdW1lbnRpbmcgdGhlIGhvdyBvZiB0aGUgcHJhY3RpY2Ug
c2hvdWxkIGJlIGRvbmUNCj4+IGluIHRoaXMgc2VjdGlvbiwgcHJvcGVybHkgZXhwbGFpbmlu
ZyAnc2VhcmNoLWlucHV0LWZpbGUnIC8gJ3NlYXJjaC0NCj4+IGlucHV0LWRpcmVjdG9yeScs
ICdpbnB1dHMgLyBuYXRpdmUtaW5wdXRzJywgJ2Jhc2gnIGJlaW5nIGFuIGltcGxpY2l0DQo+
PiBpbnB1dCBidXQgeW91IHN0aWxsIGhhdmUgdG8gYWRkIGl0IHRvICdpbnB1dHMnIGluIHNv
bWUgY2FzZXMgYmVjYXVzZQ0KPj4gb2YgY3Jvc3MtY29tcGlsYXRpb24sIHRoaXMtcGFja2Fn
ZS1pbnB1dCBhbmQgdGhpcy1wYWNrYWdlLW5hdGl2ZS0NCj4+IGlucHV0IC4uLiB3b3VsZCBt
YWtlIHRoZQ0KPj4gc3Vic3Vic2VjdGlvbiBhIGJpdCB0b28gbG9uZyBJIHRoaW5rLCBkaXN0
cmFjdGluZyBmcm9tIG90aGVyDQo+PiBzaXR1YXRpb25zLCBoZW5jZSB0aGUgcHJvcG9zYWwg
Zm9yIGEgY3Jvc3MtcmVmZXJlbmNlLg0KPj4gSG93IGFib3V0IGxlYXZpbmcgdGhlICdob3cg
dG8gZW1iZWQgc3RvcmUgZmlsZSBuYW1lcycgZm9yIGEgc2VwYXJhdGUNCj4+ICDCoGRvY3Vt
ZW50YXRpb24gcGF0Y2ggYW5kIHNlY3Rpb24sIGFkZGluZyBhIGNyb3NzLXJlZmVyZW5jZSBs
YXRlcj8NCj4gU2VlIGFib3ZlLCAiSSBzdXBwb3NlIGEgc2VjdGlvbiBjb3VsZCBiZSBhZGRl
ZC4uLiIgbWVhbnMgSSdtIHNvbWV3aGF0DQo+IGluZGlmZmVyZW50IHRvIHdoZXRoZXIgaXQn
cyBkb25lIG5vdyBvciBsYXRlcjsNCg0KTml0cGljazogeW91IGFyZSBxdW90aW5nIHNvbWUg
dGV4dCBJIHdyb3RlLCBzbyAnSScgcmVmZXJzIHRvIG1lIGhlcmUsIA0Kbm90IHlvdS4NCg0K
ICBJIHdvdWxkIGhvd2V2ZXIgdmVyeQ0KPiBtdWNoIHByZWZlciBhIHdvcmRpbmcgdGhhdCBw
b2ludHMgcGVvcGxlIHRvd2FyZCB0aGlzIHByYWN0aWNlIGV4aXN0aW5nLA0KPiBldmVuIGlm
IHRoZXkgaGF2ZSB0byBnbyBsb29rIGluIHRoZSBjb2RlIGZvciBleGFtcGxlcy4gIEFsdGVy
bmF0aXZlbHksDQo+IGEgZm9vdG5vdGUgZm9yIHRoZSBtb3N0IGNvbW1vbiBjYXNlIChzZWFy
Y2gtaW5wdXQtZmlsZSBpbnB1dHMNCj4gImJpbi9jb21tYW5kIikgb3VnaHQgdG8gc3VmZmlj
ZSBmb3IgdGhlIHRpbWUgYmVpbmcuDQoNCkFzaWRlIGZyb20gdGhlIHR5cG8ncyBhbmQgYSBm
ZXcgcmVwaHJhc2luZ3MsIEknbSBkb25lIHdpdGggdGhlIA0KZG9jdW1lbnRhdGlvbi4gIElm
IHNvbWVvbmUgd2FudHMgdG8gZXh0ZW5kIHRoZSBzZWN0aW9uIHdpdGggc3VjaCANCmluZm9y
bWF0aW9uLCB0aGV5IGNhbiBhbHdheXMgZG8gc28gbGF0ZXIuDQoNCj4+DQo+Pj4gSSB0aGlu
ayBjYWxsaW5nIGJhY2sgdG8gYSBndWlkaW5nIHByaW5jaXBsZSBpbiBhbmQgb2YgaXRzZWxm
IHNob3dzDQo+Pj4gdGhhdCB0aGUgc2VjdGlvbiBoYXMgZ3Jvd24gdG9vIGxvbmcgdG8gcmVt
ZW1iZXIgaXQgYnkgdGhlIHBvaW50IHlvdQ0KPj4+IGNvbWUgdG8gdGhpcyBleGFtcGxlLA0K
Pj4gVGhpcyBoYXMgbm90aGluZyB0byBkbyB3aXRoIGxlbmd0aCBhbmQgcmVtZW1iZXJpbmcs
IGJ1dCByYXRoZXIgd2l0aA0KPj4gZXhwbGFpbmluZyB3aHkgYSBwaGFzZSBtdXN0IGJlIHVz
ZWQgLS0gdG8gZXhwbGFpbiB0aGF0LCBJIHN0YXRlIHdoaWNoDQo+PiBwcmluY2lwbGUgYXBw
bGllcyAoYXMgbWVudGlvbmVkIHByZXZpb3VzbHkpLiBJZiBJIHJlbW92ZWQgdGhlDQo+PiBl
eHBsYW5hdGlvbnMsIEkgd291bGQganVzdCBiZSBzdGF0aW5nIGhvdyB0byBkbyB0aGluZ3Ms
IHdpdGhvdXQNCj4+IGdpdmluZyBhIGxvZ2ljYWwgcmVhc29uaW5nIG9uIHRoZSAnd2h5Jy4N
Cj4gSU1ITywgSSB0aGluayBhIHJlYWRlciB3aG8gcmVtZW1iZXJzIHRoZSBndWlkaW5nIHBy
aW5jaXBsZXMgc2hvdWxkIHNlZQ0KPiB0aGF0IGl0IGFwcGxpZXMuDQoNCkxpa2VseS4gQnV0
IHJlbW92aW5nIHRoZSBleHBsaWNpdCBtZW50aW9uIG9mIHRoZSBndWlkaW5nIHByaW5jaXBs
ZSBzdGlsbCANCm1ha2VzIHRoZSBsb2dpY2FsIHJlYXNvbmluZyBpbmNvbXBsZXRlLCByZW1l
bWJlcmluZyBoYXMgbm90aGluZyB0byBkbyANCndpdGggaXQuICBBcyBJJ3ZlIHdyaXR0ZW4g
cHJldmlvdXNseTog4oCYVGhpcyBoYXMgbm90aGluZyBkbyBkbyB3aXRoIFsuLi5dIA0KYW5k
IHJlbWVtYmVyaW5nLCBidXQgcmF0aGVyIHdpdGggWy4uLl3igJkuDQoNCj4+PiBhbmQgSSB0
aGluayB0aGF0J3MgbW9yZSBwcm9ibGVtYXRpYyB0aGFuIG1lcmVseSB0aGUNCj4+PiBjYWxs
YmFjay4gSWYgeW91IGRpZG4ndCBuZWVkIHRvIGRpdmlkZSB0aGlzIGludG8gc3Vic3Vic2Vj
dGlvbnMsDQo+Pj4geW91IGNvdWxkIGludHJvZHVjZSB0aGUgZ3VpZGluZyBwcmluY2lwbGVz
IGluIGEgd2F5IHRoYXQgZmVlbHMgbW9yZQ0KPj4+IG5hdHVyYWwuDQo+PiBJIGNvbnNpZGVy
IGl0IG1vcmUgbmF0dXJhbCB0byBoYXZlIHRoZSAnZ3VpZGluZyBwcmluY2lwbGVzJyBfYmVm
b3JlXw0KPj4gdGhlIGNvbmNyZXRlIGNhc2VzLCBhcyB0aGV5IGFyZSBtZWFudCB0byBiZSAn
Z3VpZGluZycgYW5kDQo+PiAncHJpbmNpcGxlcycuDQo+PiBJdCdzIGxpa2UgJ3N0YXJ0aW5n
IGZyb20gZmlyc3QgcHJpbmNpcGxlcycsIHRoZXJlIGludHJvZHVjaW5nIHRoZQ0KPj4gZmly
c3QgcHJpbmNpcGxlcyBhcyB5b3UgZ28gaXMgYWQtaG9jLg0KPj4gVGhlIGd1aWRpbmcgcHJp
bmNpcGxlcyBhbHNvIG5lZWQgdG8gYmUgb3V0c2lkZSB0aGUgZXhhbXBsZXMsIGluIGNhc2UN
Cj4+ICDCoG9uZSBvZiB0aGUgZXhhbXBsZXMgZG9lc24ndCBhcHBseSB0byB0aGUgcGFja2Fn
ZXIncyB1c2UgY2FzZSwgc3VjaA0KPj4gIMKgdGhhdCB0aGV5IGNhbiBmYWxsLWJhY2sgdG8g
dGhlIGd1aWRpbmcgcHJpbmNpcGxlcy4NCj4+IEFsc28sIGluIHlvdXIgcGF0Y2ggeW91IGFy
ZSBkaXZpZGluZyB0aGluZ3MgaW4gc3Vic3Vic2VjdGlvbnMgYXMNCj4+IHdlbGwswqBqdXN0
IHVuZGVyIGEgZGlmZmVyZW50IG5hbWUgYW5kIGRpZmZlcmVudCByZXByZXNlbnRhdGlvbiAo
dGFibGUNCj4+IGVudHJpZXPCoGluIGEgc3Vic2VjdGlvbiksIGFzIG1lbnRpb25lZCBwcmV2
aW91c2x5Lg0KPiBBIHRhYmxlIGVudHJ5IGlzIG5vdCBhIHN1YnNlY3Rpb24sIGFzIG11Y2gg
YXMgeW91IHdhbnQgaXQgdG8gYmUgdGhhdC4NCg0KSXQgaW5kZWVkIGlzIG5vdCwgcmF0aGVy
IHRoZXkgYXJlIGVxdWl2YWxlbnQgaGVyZSBpbiB0ZXJtcyBvZiBzdHJ1Y3R1cmUsIA0KbmVz
dGluZyBhbmQgcHJvYmxlbWF0aWNuZXNzLg0KDQo+IA0KPiBBbHNvLCB5b3VyIGd1aWRpbmcg
cHJpbmNpcGxlcyBhcmUgKHdpdGggb25lIGV4Y2VwdGlvbikgcmVhbGx5IGp1c3QNCj4gaW52
YXJpYW50cyB0aGF0IG91Z2h0IHRvIGhvbGQgZm9yIHRoZSBzb3VyY2UgZmllbGQgb2YgYSBw
YWNrYWdlLg0KDQpJIGRvbid0IGtub3cgYWJvdXQgdGhlIGV4Y2VwdGlvbnMgKEkgaGF2ZW4n
dCBjb3VudGVkIHRoZW0pLCBidXQgeWVzLCANCmluZGVlZC4gIEkgZG8gbm90IHNlZSB0aGUg
cHJvYmxlbSBvZiB0aGlzLg0KDQo+IEFzIHN1Y2gsIEkgdGhpbmsgaXQgd291bGQgYmUgZWFz
aWVyIHRvIHN0YXRlICJBIHBhY2thZ2UncyBzb3VyY2Ugc2hvdWxkDQo+IGJlIHRoZSBzbWFs
bGVzdCBjb3JyZXNwb25kaW5nIHNvdXJjZSBpbiB0ZXJtcyBvZiB1bmNvbXByZXNzZWQgZmls
ZQ0KPiBzaXplLiAgVGhpcyBjb3JyZXNwb25kaW5nIHNvdXJjZSBtdXN0IGNvbnNpc3Qgb25s
eSBvZiBmcmVlIHNvZnR3YXJlDQo+IChub3RlIEZyZWUgU29mdHdhcmUpIGFuZCBzaG91bGQg
YnVpbGQgb24gYWxsIHBsYXRmb3JtcyBzdXBwb3J0ZWQgYnkNCj4gdXBzdHJlYW0uIiAgTm90
ZSBob3cgc21hbGxlc3QgbmF0dXJhbGx5IGltcGxpZXMgdW5idW5kbGluZyBidW5kbGVkDQo+
IHNvdXJjZXMuDQoNClRoaXMgY3JpdGVyaXVtIG9uIG92ZXJseSBzbWFsbCBzb3VyY2VzLiAg
T2Z0ZW4sIGEgcGFja2FnZSdzIHNvdXJjZSANCmNvbnRhaW5zIHRoaW5ncyB0aGF0IGlzIG5v
dCB1c2VkIGZvciB0aGUgYnVpbGQgb3Igb3V0cHV0cyBhbmQgaGVuY2UNCmlzIG5vdCBwYXJ0
IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZS4gIEV4YW1wbGVzOg0KDQoqIHRoZSBzb3Vy
Y2UgY29udGFpbnMgZG9jdW1lbnRhdGlvbiB0aGF0IGNvdWxkIGJlIGJ1aWx0IGFuZCBpbnN0
YWxsZWQsDQogICBidXQgR3VpeCBkb2Vzbid0IGRvIHNvIHlldC4gIC0tPiBzaG91bGQgYmUg
a2VwdCAodW5sZXNzIG5vbi1mcmVlKQ0KKiBkb2N1bWVudGF0aW9uIHRoYXQgaXNuJ3QgbWVh
bnQgdG8gYmUgYnVpbHQgb3IgaW5zdGFsbGVkDQogICAoZS5nLiBIQUNLSU5HLCBQQUNLQUdF
UlMsIC4uLikgLS0+IHVzZWZ1bCwgc2hvdWxkbid0IGJlIHJlbW92ZWQuDQoqIC5naXRpZ25v
cmUsIC5naXRodWIsIC4uLiAtLT4gbm90aGluZyB3cm9uZyB3aXRoIHJlbW92aW5nIHRob3Nl
LA0KICAgYnV0IHBvaW50bGVzcywgbGV0J3Mgbm90IHdhc3RlIG91ciB0aW1lIHdpdGggbG9v
a2luZyBmb3IgdGhvc2UNCiAgIGFuZCByZW1vdmluZyB0aGVtLCBldmVuIHRob3VnaCBkb2lu
ZyBzbyB3b3VsZCBtYWtlIGl0IHNtYWxsZXIuDQoqIHNvdXJjZSBmaWxlcyBmb3IgcGxhdGZv
cm1zIHRoZSB1cHN0cmVhbSBkb2VzIG5vdCBzdXBwb3J0IHlldC9hbnltb3JlDQogICAoYnV0
IHdpdGggc29tZSB2b2x1bnRlZXIgZWZmb3J0IChlLmcuIGJ1Z2ZpeGVzKSwgaXQgbWlnaHQg
YmVjb21lDQogICBhIHN1cHBvcnRlZCBzeXN0ZW0gYWdhaW4pDQogICAtLT4gcmVtb3Zpbmcg
dGhlbSAoZS5nLiBhcyBwYXJ0IG9mIGFuIG92ZXJseS1icm9hZCANCihkZWxldGUtZmlsZS1y
ZWN1cnNpdmVseSANCiJ0aGlzLWRpci1oYXMtYnVuZGxpbmctYWxiZWl0LW5vdC1hbGwtb2Yt
aXQtaXMtYnVuZGxpbmciKSkNCiAgICAgICBjYW4gYmUgT0staXNoLCBidXQgcmVtb3Zpbmcg
dGhlbSBmb3IgJ21pbmltYWxpdHknIGlzIHBvaW50bGVzcy4NCg0KDQo+Pj4gSSBzdGlsbCBm
aW5kIHRoaXMgd29yZGluZyB2ZXJ5IGNvbmZ1c2luZy4gUGVyaGFwcyAiVG8gYWRkIG5ldw0K
Pj4+IGZ1bmN0aW9uYWxpdHksIGEgcGF0Y2ggaXMgYWxtb3N0IGFsd2F5cyB0aGUgYmVzdCBj
aG9pY2UuIEZvciBvbmUsDQo+Pj4gaXQgaXMgbGlrZWx5IHRoYXQgdGhlIG5ldyBmdW5jdGlv
bmFsaXR5IHJlcXVpcmVzIGNoYW5naW5nIG11bHRpcGxlDQo+Pj4gbGluZXMgb2Ygc291cmNl
IGNvZGUsIHdoaWNoIGlzIG1vcmUgY29udmVuaWVudCB0byBkbyB3aXRoIGEgcGF0Y2gNCj4+
PiB0aGFuIHdpdGggYSBzbmlwcGV0LiBGdXJ0aGVyLCBwYXRjaGVzIGNhbiBiZSB0YWtlbiBm
cm9tIGFuZA0KPj4+IHN1Ym1pdHRlZCB0byB1cHN0cmVhbXMgbW9yZSBlYXNpbHkuIElmIHlv
dXIgcGF0Y2ggaGFzIG5vdCBiZWVuDQo+Pj4gc3VibWl0dGVkIHRvIHVwc3RyZWFtLCBjb25z
aWRlciBkb2luZyBzby4iDQo+PiBJdCBsb3NlcyBzb21lIGluZm9ybWF0aW9uICh0aGF0IHBh
dGNoZXMgYXJlIHByZWZlcnJlZCkgYW5kDQo+PiAoYWZ0ZXIgcmUtYWRkaW5nIHRoZSBjb25j
bHVzaW9uKSBpcyBtb3JlIHZlcmJvc2UsIHdoaWNoIGFwcGVhcnMNCj4+IHRvIGJlIGNvbnNp
ZGVyZWQgdmVyeSBpbXBvcnRhbnQuDQo+IFdoaWNoIGNvbmNsdXNpb24gaXMgdGhlcmUgdG8g
cmUtYWRkPw0KDQoicGF0Y2hlcyBhcmUgcHJlZmVycmVkIg0KDQogICBUaGUgY29uY2x1c2lv
biBpcyBhbHJlYWR5IHN0YXRlZA0KPiBpbiB0aGUgYmVnaW5uaW5nOiBwYXRjaGVzIGFyZSBh
bG1vc3QgYWx3YXlzIHRoZSBiZXN0IGNob2ljZS4gIFRoZW4gdHdvDQo+IHJlYXNvbnMgYXMg
Zm9yIHdoeS4gIFRoZSBwYXJ0IHcuci50LiB1cHN0cmVhbWluZyBjaGFuZ2VzIGhhcyBhbHNv
IGJlZW4NCj4gYWRkcmVzc2VkLg0KDQpXaGlsZSBJIGNvbnNpZGVyIHRoYXQgcG9saWNpZXMg
c2hvdWxkIGhhdmUgImJlc3QgY2hvaWNlcyIgY29pbmNpZGluZyANCndpdGggInByZWZlcnJl
ZCIgYW5kIHRoYXQgbm90IGRvaW5nIHNvIHdvdWxkIGJlIGlsbG9naWNhbCwgcGVvcGxlLCAN
CnByb2plY3RzLCBkZWNpc2lvbnMgLi4uIGFyZSBmYXIgZnJvbSBhbHdheXMgbG9naWNhbC4N
Cg0KQmVjYXVzZSBvZiB0aGlzLCBwZW9wbGUgY2Fubm90IGFzc3VtZSB0aGF0IHRoZSAnYmVz
dCBjaG9pY2VzJyBhcmUgDQoncHJlZmVycmVkJywgc28gaXQgbmVlZHMgdG8gYmUgbWVudGlv
bmVkIGV4cGxpY2l0bHkgdGhhdCB0aGVzZSAnYmVzdCANCmNob2ljZXMnIGFyZSBhY3R1YWxs
eSAncHJlZmVycmVkJy4NCg0KPj4+IEFuIGVudW1lcmF0aW9uIG91Z2h0IHRvIGhhdmUgYXQg
bGVhc3QgdGhyZWUgZWxlbWVudHMgKG90aGVyd2lzZQ0KPj4+IGl0J3MganVzdCBhIHBhaXIp
LCBhbmQgSSB0aGluayBpZiB3ZSBkbyBwcm9wZXIgY291bnRpbmcgYW5kIG9taXQNCj4+PiBu
by1icmFpbmVycywgc3VjaCBhcyB0aGUgIm9ubHkgZnJlZSBzb2Z0d2FyZSIgcGFydCB0aGF0
IGhhcyBhbHJlYWR5DQo+Pj4gYmVlbiBtZW50aW9uZWQsIHdlIGNvbWUgdmVyeSBjbG9zZSB0
byBza2lydGluZyB0aGF0IGxpbmUuDQo+PiBUaGUgIm9ubHkgZnJlZSBzb2Z0d2FyZSIgaXMg
bWVudGlvbmVkIGVsc2V3aGVyZSwgeWVzLCBidXQgaXQgaXMgb25lDQo+PiBvZiB0aGUgcHJp
bmNpcGxlcyBmb3IgZGVjaWRpbmcgYmV0d2VlbiBzbmlwcGV0cywgcGhhc2VzIGFuZCBwYXRj
aGVzLg0KPj4gV2hpbGUgeW91IGNhbGwgaXQgYSBuby1icmFpbmVyLCBpdCBpcyBzb21ldGlt
ZXMgbmVnbGVjdGVkLCBzbyBpdA0KPj4gc291bmRzIGltcG9ydGFudCB0byBtZSB0byBleHBs
aWNpdGx5IGxpc3QgaXQuDQo+PiBNZXJnaW5nIHRoZSAzdGggYW5kIDR0aCBAaXRlbSwgSSBj
b3VudCA0IHByaW5jaXBsZXMsIHNvIGl0IGZpdHMgd2l0aA0KPj4gYW4gZW51bWVyYXRpb24u
DQo+PiBBbHNvLCBJJ20gbm90IGZvbGxvd2luZyB5b3VyIHBvaW50IGhlcmUgLS0geW91ciBj
b21wbGFpbnQgd2FzIHRoYXQNCj4+IHRoZXnCoGFyZW4ndCBndWlkaW5nIHByaW5jaXBsZXMg
KGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgdGhlbSksIGJ1dA0KPj4geW91csKgcmVzcG9uc2Ug
aXMgdGhhdCB0aGV5IG1pZ2h0IG5vdCBmb3JtIGFuIGVudW1lcmF0aW9uP8KgIFRoZXkgYXJl
DQo+PiBuYW1lZMKgdGhlIGd1aWRpbmcgcHJpbmNpcGxlcywgbm90IHRoZSBndWlkaW5nIGVu
dW1lcmF0aW9uLsKgIFdoYXQgaGF2ZQ0KPj4gZW51bWVyYXRpb25zIHRvIGRvIHdpdGggYW55
dGhpbmc/DQo+IEknbSB1c2luZyBlbnVtZXJhdGlvbiBhcyBhIHN1cGVyIHRlcm0gaGVyZSwg
d2hpY2ggY2FuIGJlDQo+ICgoc3ViKXN1YilzZWN0aW9ucywgY2hhcHRlcnMsIGxpc3QgZWxl
bWVudHMsIHdoYXRldmVyLCBhbmQgbXkgY2xhaW0gaXMNCj4gdGhhdCB3ZSBiYXJlbHkgaGF2
ZSBlbm91Z2ggcHJpbmNpcGxlcyB0byBhbGxvdyB0aGUgdXNlIG9mIGEgcGx1cmFsLg0KDQpJ
biBFbmdsaXNoLCB0aGluZ3MgYXJlIGVpdGhlciBwbHVyYWwgb3Igc2luZ3VsYXIuICBFdmVy
eXRoaW5nID49IDIgaXMgDQpwbHVyYWwuICBUaGVyZSBudW1iZXIgb2YgcHJpbmNpcGxlcywg
aG93ZXZlciB3ZSBjb3VudCB0aGVtLCBpcywgYXQgDQpsZWFzdCwgMi4gIENvbnNlcXVlbnRs
eSwgdGhlIHByaW5jaXBsZXMgYXJlIHBsdXJhbCwgbm90IHNpbmd1bGFyLiANClRyZWF0aW5n
IHRoZSBwcmluY2lwbGVzIGFzIHNpbmd1bGFyIGlzIHNpbXBseSBncmFtbWF0aWNhbGx5IGlu
Y29ycmVjdC4NCg0KTWF5YmUgaXQgaXMgYmFyZWx5IGFsbG93ZWQgdG8gYmUgcGx1cmFsLCBi
dXQgRW5nbGlzaCBncmFtbWFyIGRvZXNuJ3QgDQpjYXJlIGFib3V0IHRoYXQgLS0gaXQgaXMg
ZGVmaW5pdGl2ZWx5IGRpc2FsbG93ZWQgdG8gYmUgc2luZ3VsYXIsIG9ubHkgDQpwbHVyYWwg
cmVtYWlucy4NCg0KPiBBZGRpbmcgdG8gdGhhdCwgbm93IHRoYXQgSSB0aGluayBvZiBpdCwg
SSBhbHNvIGRvdWJ0IHRoZWlyIHVzZWZ1bG5lc3MNCj4gaW4gZ3VpZGluZy4gICJVc2Ugd2hh
dGV2ZXIgZmVlbHMgY29udmVuaWVudCwgYnV0IG5vdGUgdGhhdCB0aGF0IG1pZ2h0DQo+IGJl
IHN1YmplY3RpdmUiIGlzIG1vcmUgdXNlZnVsIGF0IHRoZSBlbmQgb2YgdGhlIHNlY3Rpb24g
d2hlbiBhIHVzZXINCj4gZGlkbid0IGZpbmQgd2hhdCB0aGV5IHdlcmUgbG9va2luZyBmb3Ig
dGhhbiBhdCB0aGUgc3RhcnQuDQoNClRoZSBpbnRyb2R1Y3Rpb24gaGFzIGEgc2V0IG9mIGd1
aWRpbmcgcHJpbmNpcGxlcywgZnJvbSB3aXRoIGNvbmNyZXRlIA0KY2FzZXMgYXJlIGJ1aWx0
LiAgQnkgYWRkaW5nIGFub3RoZXIgcHJpbmNpcGxlIGF0IHRoZSBlbmQsIHRoZSBjYXNlcw0K
Y2Fubm90IG1ha2UgdXNlIG9mIHRoZSAidXNlIFsuLi5dIGNvbnZlbmllbnQiIHByaW5jaXBs
ZS4NCg0KQWRkaXRpb25hbGx5LCBub3cgdGhlIHVzZXIgaGFzIHRvIGxvb2sgYXQgX3R3b18g
cGxhY2VzIHRvIGZpbmQgdGhlIA0KZ3VpZGluZyBwcmluY2lwbGVzIC0tIGF0IHRoZSBiZWdp
bm5pbmcsIGFuZCBhdCB0aGUgZW5kLiAgV29yc2UsDQp0aGUgYmVnaW5uaW5nIGRvZXMgbm90
IGhhdmUgYSBjcm9zcy1yZWZlcmVuY2UgdG8gdGhlIGVuZCwgc28gc2luY2UNCnRoZSBzZXQg
YXQgdGhlIGJlZ2lubmluZyBpcyBwcmVzZW50ZWQgYXMgZXhoYXVzdGl2ZSwgdGhlIHVzZXIg
bWlnaHQNCm5vdCBrbm93IHRoZXJlIGlzIGFub3RoZXIgZ3VpZGluZyBwcmluY2lwbGUuDQoN
CkFuZCBldmVuIGlmIHRoZXkgZGlkIHJlYWQgdGhyb3VnaCB0aGUgd2hvbGUgc2VjdGlvbiAo
ZXZlbiB0aG91Z2ggdGhleSANCnNob3VsZCBvbmx5IGhhdmUgdG8gcmVhZCB0aGUgaW50cm9k
dWN0aW9uIGFuZCB0aGUgcmVsZXZhbnQgd29ya2VkLW91dCANCmNhc2UpLCBhc3N1bWluZyB0
aGV5IHJlYWQgdGhyb3VnaCBpdCBpbiBhIGxpbmVhciBmYXNoaW9uLCBkdWUgdG8gdGhlIG5l
dyANCmd1aWRpbmcgcHJpbmNpcGxlIHRoYXQgd2Fzbid0IGFsbHVkZWQgdG8gYXQgdGhlIGJl
Z2lubmluZywgdGhleSBoYXZlDQp0byByZWRvIHRoZWlyIG1lbnRhbCBtb2RlbCBvZiAiTW9k
aWZ5aW5nIFNvdXJjZXMiIGFzIHRoaXMgcHJpbmNpcGxlDQpjb3VsZCBpbnZhbGlkYXRlIHRo
aW5ncy4NCg0KPj4+PiBJIGRvIG5vdCBzZWUgd2hhdCB0aGUgcHJvYmxlbSBpcyB3aXRoIGFk
ZGl0aW9uYWwgbGVuZ3RoIGFzIGxvbmcNCj4+Pj4gYXMgdGhpcyBhZGRpdGlvbmFsIGxlbmd0
aCBjb21lcyB3aXRoIGFkZGl0aW9uYWwgdXNlZnVsDQo+Pj4+IGluZm9ybWF0aW9uIGFuZCB0
aGUgbWFudWFsIGlzIHdlbGwtc3RydWN0dXJlZCAoZS5nLiB3aXRoDQo+Pj4+IChzdWIpKHN1
YilzZWN0aW9ucywgY2hhcHRlcnMgYW5kIGluZGljZXMpIC0tIHdlIGRvIG5vdCBoYXZlIGEN
Cj4+Pj4gcGFnZSBsaW1pdC4NCj4+Pj4NCj4+Pj4gQXQgd29yc3QsIHBlcmhhcHMgdGhlIHNh
bWUgaW5mb3JtYXRpb24gY291bGQgcGVyaGFwcyBiZSBlbmNvZGVkDQo+Pj4+IHdpdGggZmV3
ZXIgd29yZHM/IEkgY291bGQgY29tcGFyZSB0aGUgdHdvIHBhdGNoZXMgdG8gc2VlIHdoaWNo
DQo+Pj4+IG9uZSBmb3JtdWxhdGVzIGNlcnRhaW4gaW5mb3JtYXRpb24gaW4gdGhlIGZld2Vz
dCB3b3JkcywgYW5kDQo+Pj4+IGNob29zZSB0aGUgbGVhc3QgdmVyYm9zZSBvZiB0aGUgdHdv
IGZvciBlYWNoIHBpZWNlIG9mIGluZm9ybWF0aW9uDQo+Pj4+IHRoYXQgaXMgcHJlc2VudCBp
biBib3RoPw0KPj4+Pg0KPj4+PiBBbHNvLCBjb21wYXJpbmcgdGhlIHR3byBwYXRjaGVzLCBt
eSBwYXRjaCBoYXMgNDAgbW9yZSBsaW5lcywgYnV0DQo+Pj4+IGFib3V0IDI1IG9mIHRoZW0g
YXJlIGZvciBub3RpbmcgdGhlIGd1aWRpbmcgcHJpbmNpcGxlcyAod2hpY2ggYXJlDQo+Pj4+
IGFic2VudCBpbiB5b3VyIHBhdGNoKS4NCj4+Pj4gQ29tcGVuc2F0aW5nIGZvciB0aGF0LCB0
aGUgcGF0Y2hlcyBhcmUgYWJvdXQgdGhlIHNhbWUgbGVuZ3RoLCBzbw0KPj4+PiBJIGRvIG5v
dCB0aGluayB0aGF0ICdzaGVlciBsZW5ndGgnIGlzIGFjY3VyYXRlIGhlcmUuDQo+Pj4gMjUg
bGluZXMgY2FsbGluZyBiYWNrIHRvIGVhcmxpZXIgaW5mb3JtYXRpb24gYXJlLCBpbWhvLCBh
bg0KPj4+IGluZGljYXRvciB0aGF0IHRoZSBzZWN0aW9uIGlzIHRvbyBsb25nLiBJbWFnaW5l
IHlvdSdkIGhhdmUgdHdlbnR5LQ0KPj4+IGZpdmUgZnVuY3Rpb24gY2FsbHMgdG8gZ3VpZGlu
Z19wcmluY2lwbGVzKG4pIGluIHlvdXIgcHJvZ3JhbSDigJMgYXQNCj4+PiBzb21lIHBvaW50
LCB5b3UnZCB0cnkgdG8gY2FjaGUgdGhvc2UuDQo+PiAoZGVmaW5lIGNhY2hlZC1ndWlkaW5n
LXByaW5jaXBsZXMNCj4+ICDCoCAoZGVsYXkgKGxpc3QgKGd1aWRpbmctcHJpbmNpcGxlLTAp
DQo+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgWy4uLl0NCj4+
ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoZ3VpZGluZy1wcmlu
Y2lwbGUtMjQpKSkpDQo+PiBDYWNoaW5nIHRoZSBndWlkaW5nIHByaW5jaXBsZXMgZG9lcyBu
b3QgcmVkdWNlIHRoZSBsZW5ndGguDQo+PiBJIGRvbid0IHNlZSB0aGUgcHJvYmxlbSB3aXRo
IGNhbGxpbmcgYmFjayB0byBlYXJsaWVyIGluZm9ybWF0aW9uLg0KPj4gQWxzbywgaXQgaXNu
J3QgZWFybGllciBpbmZvcm1hdGlvbiwgdGhlcmUgaXMgbm8gbmljZSBsaXN0IG9mIGd1aWRp
bmcNCj4+IHByaW5jaXBsZXMgYW55d2hlcmUgZWxzZS4NCj4gQXQgdGhlIHJpc2sgb2YgcmVz
cG9uZGluZyBqb2tpbmdseSB0byB3aGF0IHdhcyBtZWFudCBzZXJpb3VzOiBJIGRpZG4ndA0K
PiBrbm93IHdlIHN1ZGRlbmx5IGdhaW5lZCAyMCBndWlkaW5nIHByaW5jaXBsZXMuDQoNCjI1
IGxpbmVzIGFyZSBmb3IgdGhlIGd1aWRpbmcgcHJpbmNpcGxlcyAoc29tZXRpbWVzIHJlZmVy
cmluZyB0byBhIA0KcHJpbmNpcGxlIG9mIGVsc2V3aGVyZSBpbiBHdWl4LCBzb21ldGltZXMg
YSBuZXcgcHJpbmNpcGxlIGZvciAiTW9kaWZ5aW5nIA0KU291cmNlcyIpLiAgWW91IHByb3Bv
c2VkIHRvICdjYWNoZScgdGhlbSBzb21laG93LiAgSW4gR3VpbGUsIHRvIGNhY2hlIA0Kc29t
ZXRoaW5nLCB5b3UgY2FuIHVzZSAnZGVsYXkvZm9yY2UnLiAgQnV0IHRoaXMgaW5jcmVhc2Vz
IHRoZSBhbW91bnQgb2YgDQpjb2RlIChkdWUgdG8gdGhlIGFkZGl0aW9uYWwgdXNlIG9mICdk
ZWxheScpLCBpbnN0ZWFkIG9mIGRlY3JlYXNpbmcuDQoNClRoZSBkb2N1bWVudGF0aW9uIGVx
dWl2YWxlbnQgKHdoYXRldmVyIHRoYXQgbWlnaHQgYmUsIEkgYW0gbm90IHNlZWluZyANCm9u
ZSBteXNlbGYpIHdvdWxkIHRoZW4gYWxzbyBiZSBhdCBsZWFzdCBhcyBsb25nLCBtYXliZSBl
dmVuIGEgbGl0dGxlIA0KbG9uZ2VyIGR1ZSB0byB0aGUgdXNlIG9mICdkZWxheScuDQoNCj4+
Pj4+IEdvaW5nIGRvd24gdG8gc3Vic3Vic2VjdGlvbnMganVzdCB0byBmaW5kIG91dCB3aGVy
ZSBwYXRjaGVzIGFyZQ0KPj4+Pj4gYXBwcm9wcmlhdGUsIGlzIGltaG8gb3ZlcmtpbGwuDQo+
Pj4+IFRoZSAnZ29pbmcgZG93biB0byBzdWJzdWJzZWN0aW9uJyBpcyB0aGUgY2FzZSBmb3Ig
eW91ciBwYXRjaCB0b28sDQo+Pj4+IHRob3VnaD8gSW4gbXkgY2FzZSwgaXQncyBhIHN1YnN1
YnNlY3Rpb24sIGluIHlvdXIgY2FzZSBpdCdzIGENCj4+Pj4gdGFibGUNCj4+Pj4gZW50cnkg
aW5zaWRlIGEgc3Vic2VjdGlvbiwgYm90aCBhcmUgdGhlIHNhbWUgbGV2ZWwgb2YgbmVzdGlu
Zy4NCj4+PiBUaGVzZSBhcmUgc3RpbGwgdHdvIHZlcnkgZGlmZmVyZW50IGtpbmRzIG9mIG5l
c3RpbmcuIEEgdGFibGUgZml0cw0KPj4+IG9udG8gYSAodmlydHVhbCkgcGFnZSBtb3JlIGVh
c2lseSB0aGFuIHNldmVyYWwgc3Vic2VjdGlvbnMuDQo+PiBJIHN1cHBvc2UgdGFibGUgaXRl
bXMgbWlnaHQgdGFrZSB0d28gbGVzcyBsaW5lIG9yIHNvIGxlc3MgdGhhbg0KPj4gc3Vic3Vi
c2VjdGlvbnMsIGJ1dCBJIGRvbid0IHRoaW5rIHRoYXQncyBzdWZmaWNpZW50IHJlYXNvbiB0
byBzdGVwDQo+PiBhd2F5IGZyb20gYSBuaWNlIHNlY3Rpb24gc3RydWN0dXJlLg0KPiBBbm90
aGVyIHJlYXNvbiBpcyB0aGF0IHlvdSBjYW4gZW5kIGEgdGFibGUgaW4gdGhlIG1pZGRsZSBv
ZiBhIHNlY3Rpb24sDQo+IHdoaWNoIHlvdSBjYW4ndCBkbyB3aXRoIHN1YnNlY3Rpb25zLiAg
SGVuY2Ugd2h5IEknbSBhYmxlIHRvIHB1dCBhDQo+IHJlbWFyayBhdCB0aGUgYm90dG9tLCB3
aGljaCB5b3UgaGF2ZSB0byBjbHVtc2lseSBmaXQgaW50byB0aGUgdG9wLg0KDQpJIGNhbiwg
aW5kZWVkLCBub3QgcHV0IHRoZSAnY29udmVuaWVuY2UgcHJpbmNpcGxlJyBhdCB0aGUgYm90
dG9tLCBleGNlcHQgDQpwZXJoYXBzIGJ5IGFkZGluZyBhIG5ldyBzdWJzdWJzZWN0aW9uLCBh
bmQgZm9yIHRhYmxlcyBhZGRpbmcgc3VjaCBhIA0KcmVtYXJrIGF0IHRoZSBib3R0b20gaXMg
aW5kZWVkIG1vcmUgY29udmVuaWVudC4NCg0KSG93ZXZlciwgSSBkb24ndCBzZWUgdGhlICdo
YXZlIHRvIGNsdW1zaWx5JyBoZXJlIC0tIGFzIGV4cGxhaW5lZCANCmVsc2V3aGVyZSwgSSBi
ZWxpZXZlIHRoYXQgdGhlICdjb252ZW5pZW5jZSBwcmluY2lwbGUnIHNob3VsZG4ndCBiZSAN
CnNlcGFyYXRlZCBmcm9tIHRoZSBvdGhlciBwcmluY2lwbGVzIGFuZCB0aGF0IGl0IGZpdHMg
bmljZWx5IG5leHQgdG8gdGhlIA0KdGhlIHByaW5jaXBsZXMgLS0tIHRoZXJlIGlzIG5vICdo
YXZlIHRvJywgYmVjYXVzZSBJIGNob29zZSBmb3IgdGhpcywgYW5kIA0KSSBhbSBub3Qgc2Vl
aW5nIGFueSAnY2x1bXNpbmVzcycgaGVyZS4NCg0KPj4+PiBBbHNvLCBpdCdzIGEgbWF0dGVy
IG9mIGRpZmZlcmVudCBzdHJ1Y3R1cmUgLS0gaW4gbXkgdjIgYW5kIHYzDQo+Pj4+IHBhdGNo
LCBJIGhhdmUgYSAncHJvYmxlbSAtPiBzb2x1dGlvbicgc3RydWN0dXJlIC0tIHRoZSBpZGVh
IGlzDQo+Pj4+IHRoYXQgdGhlIHBhY2thZ2VzIGhhcyBhIHByb2JsZW0sIHRoZXkgbG9vayBh
dCB0aGUgc2VjdGlvbiwgdGhleQ0KPj4+PiByZWFkIHRoZSBzdWJzdWJzZWN0aW9uIG5hbWVz
LCBzZWxlY3QgdGhlDQo+Pj4+IHN1YnN1YnNlY3Rpb24gdGhhdCBtYXRjaGVzIHRoZWlyIHBy
b2JsZW0gYW5kIHJlYWQgdGhlIHNvbHV0aW9uIC0tDQo+Pj4+IGluIHNob3J0LCB0aGUgaWRl
YSBpcyB0byBwcm92aWRlIGEgc29sdXRpb24gdG8gdGhlIHByb2JsZW0uDQo+Pj4+DQo+Pj4+
IFlvdXIgc3RydWN0dXJlIGlzIHRoZSBvdGhlciB3YXkgYXJvdW5kIC0tIGZvciBzb2x1dGlv
bnMgKHBhdGNoZXMsDQo+Pj4+IHNuaXBwZXRzLCBwaGFzZXMpLCBpdCBnaXZlcyB0aGUgcGVy
bWl0dGVkIHByb2JsZW1zIHRvIGFwcGx5IGl0DQo+Pj4+IHRvLg0KPj4+Pg0KPj4+PiBTbyB5
ZXMsIHlvdXIgcGF0Y2ggaXMgbW9yZSBjb252ZW5pZW50IGZvciBmaW5kaW5nIG91dCB3aGVy
ZQ0KPj4+PiBwYXRjaGVzIGFyZSBhcHByb3ByaWF0ZS7CoCBJIGRvIG5vdCBzZWUgdGhlIGJl
bmVmaXQgb2YgdGhhdCB0aG91Z2gNCj4+Pj4gLS0gYSBuZXcgY29udHJpYnV0b3IgcGFja2Fn
aW5nIGEgdGhpbmcgd291bGRuJ3Qga25vdyBpbiBhZHZhbmNlDQo+Pj4+IHdoaWNoIHNvbHV0
aW9ucyBjb3VsZCBiZSBhcHByb3ByaWF0ZSBmb3IgdGhlbSAoeW91ciAnc29sdXRpb24gLT4N
Cj4+Pj4gcHJvYmxlbScgcGF0Y2g/KSwgcmF0aGVyLCB0aGV5IHN0YXJ0IHdpdGggYSBwcm9i
bGVtIGFuZCBhcmUNCj4+Pj4gc2VhcmNoaW5nIGZvciBhbiBhcHByb3ByaWF0ZSBzb2x1dGlv
biAobXkgcHJvYmxlbS0+c29sdXRpb24NCj4+Pj4gcGF0Y2gpLg0KPj4+IEkgdGhpbmsgdGhp
cyBpZGVhIGNhbiBiZSBkZWJ1bmtlZCBwcmV0dHkgZWFzaWx5LiBJZiBJIGdpdmUgeW91IGEN
Cj4+PiBoYW1tZXIgYW5kIEkgdGVsbCB5b3UgInRoaXMgaXMgYSBoYW1tZXIsIHlvdSBjYW4g
dXNlIGl0IHRvIHB1dA0KPj4+IG5haWxzIGludG8gYSB3YWxsIiwgYW5kIHlvdSBoYXZlIGEg
bmFpbCBhbmQgeW91IHdhbnQgdG8gcHV0IGl0IGludG8NCj4+PiBhIHdhbGwsIHlvdSB3b24n
dCBnbyAib2ggbm8sIGhvd2V2ZXIgd2lsbCBJIHB1dCB0aGlzIG5haWwgaW50byBhDQo+Pj4g
d2FsbD8iIOKAkyB5b3Ugd2lsbCBzaW1wbHkgdXNlIHRoZSBoYW1tZXIgdG8gZG8gc28uDQo+
PiBUaGUgcGF0Y2ggZG9lcyB0aGlzLCBjdXJyZW50bHkuwqAgSXQgYWxyZWFkeSBwcm9wb3Nl
cyBhIG51bWJlciBvZg0KPj4gaGFtbWVycyAocGF0Y2hlcywgc25pcHBldHMgYW5kIHBoYXNl
cykgYW5kIHB1cnBvc2VzIChhZGRpbmcgbmV3DQo+PiBmdW5jdGlvbmFsaXR5LCBmaXhpbmcg
dGVjaG5pY2FsIGlzc3VlcywgdW5idW5kbGluZywgLi4uKS4NCj4+IEFsc28sIHRoZSBzY2Vu
YXJpbyAib2ggbm8sIGhvd2V2ZXIgd2lsbCBJIHB1dCB0aGlzIG5haWwgaW50byBhIHdhbGwi
DQo+PiBhY3R1YWxseSBoYXBwZW5lZCAtLSBzZWUgdGhlIFNoZXBoZXJkIGRpc2N1c3Npb24s
IHdoZXJlIHRoZXJlIHdhcw0KPj4gYSBsb3Qgb2YgZGlzYWdyZWVtZW50IG9uIGhvdyBuYWls
cyAoPSBzbWFsbCB3b3JrLWFyb3VuZCBpbiB0aGUNCj4+IE1ha2VmaWxlKSBzaG91bGQgYmUg
cHV0IGluIHdhbGxzICg9IHBhdGNoZXMsIHNuaXBwZXQsIHBoYXNlPykuwqDCoCBJdA0KPj4g
d2FzIHRoZSB3aG9sZcKgcmVhc29uIHRvIHN0YXJ0IHdyaXRpbmcgYSBkb2N1bWVudGF0aW9u
IHBhdGNoLg0KPiBZb3UgbWlnaHQgd2FudCB0byBhZGQgYSBsaW5rIGhlcmUgaWYgaXQgc3Vw
cG9ydHMgeW91ciBhcmd1bWVudCwgYnV0DQo+IHdpdGhvdXQgbG9va2luZyBhdCB0aGUgZGlz
Y3Vzc2lvbiB0aGlzIHJhdGhlciBzb3VuZHMgbGlrZSAib2ggbm8sIEkNCj4gaGF2ZSB0aHJl
ZSBoYW1tZXJzLCB3aGljaCBvbmUgZG8gSSBwaWNrPyIg4oCTIHdoaWNoLCBmYWlyIGVub3Vn
aCwgaXMNCj4gc3RpbGwgYSBwcm9ibGVtLCBidXQgb25lIHRoYXQgbmVpdGhlciBvZiBvdXIg
cGF0Y2hlcyB3b3VsZCBjYXVzZSBpbWhvLg0KDQpBcyBJIHRoaW5rIEkndmUgd3JpdHRlbiBw
cmV2aW91c2x5LCB0aGUgd2hvbGUgcG9pbnQgd2FzIHRvIHNvbHZlIHRoYXQgDQpwcm9ibGVt
LiBGb3IgdGhlIGRpc2N1c3Npb24sIHNlZToNCg0KKiBodHRwczovL2lzc3Vlcy5ndWl4Lmdu
dS5vcmcvNTQyMTYNCiogaHR0cHM6Ly95aGV0aWwub3JnL2d1aXgvYzRjMGEwNzEtMmUwMy1k
NGQ2LTY3MTgtMDU0MjRkMjFkMTQ2QHRlbGVuZXQuYmUvDQoqIA0KaHR0cHM6Ly95aGV0aWwu
b3JnL2d1aXgtZGV2ZWwvODRlMTNlZjdkNDM3MDYyZGY1Y2NhNTFhMTJlNmRhNTQ5MjllMDE3
Ni5jYW1lbEB0ZWxlbmV0LmJlLw0KDQpOb3Qgc29sdmluZyB0aGUgcHJvYmxlbSBkZWZlYXRz
IHRoZSB3aG9sZSBwb2ludCwgYXMgdGhlIHB1cnBvc2UgaXMgdG8gDQpzb2x2ZSB0aGF0IHBy
b2JsZW0uDQoNCj4+PiBPZiBjb3Vyc2UsIGZvciB0aGlzIHRvIHdvcmsgSSBhbHNvIGhhdmUg
dG8gdGVsbCB5b3UgKmhvdyogdG8gdXNlIGENCj4+PiBoYW1tZXIgdG8gcHV0IG5haWxzIGlu
dG8gYSB3YWxsLCBidXQgdGhhdCdzIGV4YWN0bHkgd2hhdCBJIGRpZCBpbg0KPj4+IG15IHBh
dGNoIGJ5IGluc2VydGluZyB0aGUgcmlnaHQgbm90ZXMgaW50byB0aGUgR3VpeCBtYW51YWwu
DQo+PiBBbHNvIGFscmVhZHkgdGhlIGNhc2UuDQo+Pj4gTXkgc29sdXRpb24tPnByb2JsZW0g
YXBwcm9hY2ggaGFzIHRoZSBiZW5lZml0LCB0aGF0IGZvbGtzIGNhbiBqdXN0DQo+Pj4gZ28g
b3ZlciBhbGwgdGhlIHNvbHV0aW9ucywgY2hlY2sgaWYgdGhlaXIgcHJvYmxlbSBmaXRzLCBh
bmQgYXBwbHkNCj4+PiB0aGUgb25lIHRoYXQgc2F5cyAiaGVyZSwgdXNlIHRoaXMiLg0KPj4g
QSBwcm9ibGVtLT5zb2x1dGlvbiBzdHJ1Y3R1cmUgaXMgdXNlZnVsIGZvciB0aGF0IHRvbz8N
Cj4+IEFuZCBpdCBhbHJlYWR5IGxpc3RzIGFsbCB0aGUgc29sdXRpb25zIChzbmlwcGV0cywg
cGhhc2VzIGFuZCBwYXRjaGVzKQ0KPj4gYW5kIGluZm9ybWF0aW9uIHRvIGRlY2lkZSB3aGV0
aGVyIHRoZSBzb2x1dGlvbiBmaXRzIHRoZWlyIHByb2JsZW0NCj4+ICh0aGUgZ3VpZGluZyBw
cmluY2lwbGVzLCBhbmQgdGhlIHdvcmtlZC1vdXQgY2FzZXMpLg0KPiBBZ2FpbiwgSSBiZWxp
ZXZlIHlvdSdyZSBvdmVyc2VsbGluZyB0aGUgZ3VpZGluZyBwcmluY2lwbGVzLg0KDQpJIG5l
dmVyIGNsYWltZWQgdGhleSB3ZXJlIHN1cGVyIGdyZWF0LCBqdXN0IHRoYXQgdGhleSBhcmUg
Y29udmVuaWVudCBhbmQgDQpzb2x2ZWQgYSBudW1iZXIgb2YgcHJvYmxlbXMuICBJJ20gbm90
IHNlZWluZyBhbnkgb3ZlcnNlbGxpbmcgaGVyZS4NCg0KPj4+IEFuZCBpZiB0aGV5IGRvbid0
IGZpbmQgYW55dGhpbmcsIHRoZXkgc2VlIHRoZSBoYW5keSBsaXR0bGUgbGluZSBhdA0KPj4+
IHRoZSBib3R0b20gc2F5aW5nICJ1c2Ugd2hhdGV2ZXIgeW91IHRoaW5rIGlzIGNvbnZlbmll
bnQiLg0KPj4gTm93aGVyZSBkaWQgdGhlIHBhdGNoIGltcGx5IHRoYXQgdGhlIGxpc3RlZCBj
YXNlcyB3ZXJlIGFsbCBjYXNlcy4gSW4NCj4+IGZhY3QsIGluIHR3byBwbGFjZXMgaW4gdGhl
IGludHJvZHVjdGlvbiBpdCBpcyBpbXBsaWVkIHRoYXQgdGhlDQo+PiBleGFtcGxlcyBhcmUg
bm90IGV4aGF1c3RpdmUsIGFuZCB0aGF0IHRoZXkgY2FuIGNob29zZSBhY2NvcmRpbmcgdG8N
Cj4+IGNvbnZlbmllbmNlICBbLi4uXQ0KPiBFbXBoYXNpcyBvbiBoYW5keSBsaXR0bGUgbGlu
ZSByYXRoZXIgdGhhbiBuZWVkaW5nIHRvIGJlIHRvbGQgdHdpY2UNCj4gKHBhcnRpY3VsYXJs
eSBpZiBwZW9wbGUgaGF2ZSBubyBpZGVhIHdoYXQgdG8gZXhwZWN0IGR1ZSB0byBub3QgaGF2
aW5nDQo+IGxvb2tlZCBhdCB0aGUgd29ya2VkLW91dCBjYXNlcyB5ZXQpLg0KDQpUaGV5IGRv
bid0IG5lZWQgdG8gYmUgdG9sZCB0d2ljZS4gIEFsc28sIG15IHBhdGNoIGFsc28gaGFzIHRo
YXQgaGFuZHkgDQpsaXR0bGUgbGluZSAoYWxiZWl0IGRpZmZlcmVudGx5IHdvcmRlZCksIHNl
ZSB0aGUgJ2d1aWRpbmcgcHJpbmNpcGxlcycuDQoNCkFsc28sIG9uIHRoZSAnbm8gaWRlYSB3
aGF0IHRvIGV4cGVjdCcgLS0gdGhpcyBpcyBleGFjdGx5IHRoZSBzYW1lIGZvciANCnlvdXIg
cGF0Y2ggdG9vPyAgSW4gYm90aCBwYXRjaGVzLCBpZiB0aGUgdXNlciBvbmx5IHJlYWRzIHRo
ZSANCmludHJvZHVjdGlvbiBhbmQgY29uY2x1c2lvbiAoaWYgYW55KSBhbmQgZG9lc24ndCBy
ZWFkIHRoZSBhY3R1YWwgDQoocmVsZXZhbnQgZXhhbXBsZXMpLyhleHBsYW5hdGlvbiBvZiBw
YXRjaGVzLCBzbmlwcGV0cywgcGhhc2VzKSwgdGhlbiANCnRoYXQncyB0aGVpciBwcm9ibGVt
Lg0KDQo+Pj4gIMKgSSBhbHNvIGV4cGFuZCBhIGxpdHRsZSBvbiB0aGUgYmVuZWZpdHMgYW5k
IGRyYXdiYWNrcyBvZg0KPj4+IHRoZXNlIGFwcHJvYWNoZXMgYXMgeW91IHdvdWxkIHdoZW4g
ZGVzY3JpYmluZyBkZXNpZ24gcGF0dGVybnMuDQo+PiBUaGlzIGlzIGFsc28gZG9uZSBpbiBt
eSBwYXRjaC4gWy4uLl0NCj4gVGhpcyBpcyBub3QgYWJvdXQgdGhlIGNvbnRhaW5lZCBpbmZv
cm1hdGlvbiwgYnV0IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlDQo+IGNvbnRhaW5lZCBpbmZvcm1h
dGlvbi4NCj4gDQo+IE15IHNvbHV0aW9uLT5wcm9ibGVtIHN0eWxlIGZvbGxvd3Mgcm91Z2hs
eSB0aGlzIHN0eWxlOg0KPiAxLiBzb2x1dGlvbg0KPiAyLiBwcm9ibGVtcyBpdCBpcyBrbm93
biB0byBzb2x2ZQ0KPiAzLiBob3cgdG8gdXNlDQo+IDQuIHByb3BlcnRpZXMsIGNhdmVhdHMs
IGV0Yy4NCj4gDQo+IFlvdXIgcHJvYmxlbS0+c29sdXRpb24gc3R5bGUgcm91Z2hseSBoYXMg
dGhlIGZvbGxvd2luZzoNCj4gMS4gcHJvYmxlbQ0KPiAyLiAoc2V0IG9mKSBzb2x1dGlvbihz
KQ0KPiAzLiBpZiBtb3JlIHRoYW4gb25lIHNvbHV0aW9uLCBtYXliZSBhIGhlbHAgdG8gc2Vs
ZWN0DQoNCkFsc28sIGluIG5vIHBhcnRpY3VsYXIgb3JkZXINCg0KICAgNC46IGhvdyB0byB1
c2UNCiAgIDUuOiBleHBsYW5hdGlvbiB3aHkgaXQgaXMgcHJlZmVycmVkIChwcm9wZXJ0aWVz
LCBjYXZlYXRzPykNCg0KPiANCj4gVGhpcyBtYWtlcyBpdCBzbyB0aGF0IHBlb3BsZSBtaWdo
dCBoYXZlIHRvIGdvIHRvIGEgZGlmZmVyZW50IHN1YnNlY3Rpb24NCj4gdGhhbiB0aGUgb25l
IHRoZXkgcmVhZCBmb3IgdGhlaXIgc29sdXRpb24gdG8gZmluZCBvdXQgYWJvdXQgcG90ZW50
aWFsDQo+IGNhdmVhdHMsIGUuZy4gbm90IGVtYmVkZGluZyBzdG9yZSBwYXRocyBpbiBhIHNu
aXBwZXQuDQoNCkkgYXNzdW1lIHRoZWlyIHByb2JsZW0gd2FzICJYIGRvZXNuJ3QgZmluZCBZ
Ii4gIFRoaXMgYmVpbmcgYSB0ZWNobmljYWwgDQppc3N1ZSwgdGhleSBnbyB0byAiRml4aW5n
IHRlY2huaWNhbCBpc3N1ZXMiLiAgSW4gdGhhdCBzdWJzdWJzZWN0aW9uLCANCnRoZXJlIGFy
ZSB0aGUgd29yZHM6DQoNCj4gU2Vjb25kbHksIGlmIHRoZSBmaXggb2YgYSB0ZWNobmljYWwg
aXNzdWUgZW1iZWRzIGEgc3RvcmUgZmlsZSBuYW1lLCB0aGVuDQo+IGl0IGhhcyB0byBiZSBh
IHBoYXNlLiAgT3RoZXJ3aXNlLCBpZiB0aGUgc3RvcmUgZmlsZSBuYW1lIHdlcmUgZW1iZWRk
ZWQgaW4NCj4gdGhlIHNvdXJjZSwgdGhlIHJlc3VsdCBvZiBAY29tbWFuZHtndWl4IGJ1aWxk
IC0tc291cmNlfSB3b3VsZCBiZSB1bnVzYWJsZQ0KPiBvbiBub24tR3VpeCBzeXN0ZW1zIGFu
ZCBhbHNvIGxpa2VseSB1bnVzYWJsZSBvbiBHdWl4IHN5c3RlbXMgb2YgYW5vdGhlcg0KPiBh
cmNoaXRlY3R1cmUuDQoNCnNvIHRoZXkgYWN0dWFsbHkgZG8ga25vdyBvZiB0aGUgY2F2ZWF0
ICdkb24ndCBlbWJlZCBzdG9yZSBwYXRocyBpbiBhIA0Kc25pcHBldCwgZG8gaXQgaW4gYSBw
aGFzZSBpbnN0ZWFkJywgYW5kIHRoZXkgZGlkIG5vdCBuZWVkIHRvIGdvIHRvIGEgDQpkaWZm
ZXJlbnQgc3Vic3Vic2VjdGlvbi4NCg0KPj4+IFlvdXIgcHJvYmxlbS0+c29sdXRpb24gYXBw
cm9hY2ggaW5zdGVhZCBsZWF2ZXMgcGVvcGxlIHdvbmRlcmluZw0KPj4+IHdoZW4gdGhlaXIg
cGFydGljdWxhciB1c2UgY2FzZSBoYXMgbm90IGJlZW4gZGVzY3JpYmVkLg0KPj4gU2VlIG15
IHJlcGx5IHRvIOKAmEFuZCBpZiB0aGV5IGRvbid0IGZpbmQgYW55dGhpbmcsIHRoZXkgc2Vl
IHRoZSBoYW5keQ0KPj4gbGl0dGxlIGxpbmUgYXQgdGhlIGJvdHRvbSBzYXlpbmcgInVzZSB3
aGF0ZXZlciB5b3UgdGhpbmsgaXMNCj4+IGNvbnZlbmllbnTigJkuDQo+Pj4gSXQgZ2l2ZXMg
dGhlbSBhIHNvbHV0aW9uIHJhdGhlciB0aGFuIHRoZSB0b29scyB0byBidWlsZCBzb2x1dGlv
bnMNCj4+PiB3aXRoLg0KPj4gSXQgZG9lcyBnaXZlIHRoZSB0b29sczogc25pcHBldHMsIHBh
dGNoZXMgYW5kIHBoYXNlcy4NCj4gQXMgZmFyIGFzIEkgcmVhZCwgaXQgZGVzY3JpYmVzIG5v
bmUgb2YgdGhvc2UuICBJdCBwdXRzIG91dCBndWlkaW5nDQo+IHByaW5jaXBsZXMgYW5kIHNv
bWUgYWxyZWFkeSB3b3JrZWQtb3V0IGNhc2VzLg0KSGVyZSBhcmUgdGhlIGRlc2NyaXB0aW9u
czoNCg0KPiBHdWl4IGhhcyB0cmVlIG1haW4gd2F5cyBvZiBtb2RpZnlpbmcgdGhlIHNvdXJj
ZSBjb2RlIG9mIGEgcGFja2FnZSwgdGhhdA0KPiB5b3UgYXMgYSBwYWNrYWdlciBtYXkgdXNl
LiAgVGhlc2UgYXJlIHBhdGNoZXMsIHNuaXBwZXRzIGFuZCBwaGFzZXMNCg0KT25jZSB0aGUg
dXNlciBrbm93cyBfd2hpY2hfIG9mIHRoZSB0aHJlZSB0aGV5IHNob3VsZCB1c2UgKGJ5IGNv
bnN1bHRpbmcNCnRoZSBmb2xsb3dpbmcgc3Vic3Vic2VjdGlvbnMpLCB0aGV5IGNhbiB0aGVu
IHNlYXJjaCBmb3IgJ3BhdGNoJywgDQonc25pcHBldCcgYW5kICdwaGFzZXMnIGluIHRoZSBt
YW51YWwgZm9yIG1vcmUgaW5mb3JtYXRpb24sIG5vIG5lZWQgdG8gDQpkdXBsaWNhdGUgdGhh
dCBpbmZvcm1hdGlvbi4NCg0KPj4gQWxzbywgImdpdmluZyB0aGUgdG9vbHMgdG8gYnVpbGQg
c29sdXRpb25zIHdpdGgiIGRvZXMgbm90IGhlbHAgd2l0aA0KPj4gdGhlwqBwcm9ibGVtIHRo
YXQgSSBhaW1lZCB0byBzb2x2ZSAtLSB0aGVyZSB3YXMgZGlzYWdyZWVtZW50IG9uIHdoYXQN
Cj4+IHRoZcKgYXBwcm9wcmlhdGUgdG9vbHMgYXJlIChzZWU6IFNoZXBoZXJkKSwgc28gaXQg
bm90IGp1c3QgbmVlZHMgdG8NCj4+IGdpdmUgdGhlwqB0b29scywgYnV0IGFsc28gdGhlIHNv
bHV0aW9ucy4NCj4gSSBkb24ndCBzZWUgaG93IG15IHBhdGNoIGxhY2tzIHRoaXMgaW5mb3Jt
YXRpb24gaG93ZXZlci4NCg0KSUlVQywgdGhlIHJhdyBpbmZvcm1hdGlvbiBzaG91bGQgdXN1
YWxseSBiZSBpbmRlZWQgYWxsIHRoZXJlLCBidXQgdGhlIA0KdXNlciBoYXMgdG8gY29uc3Vs
dCBfYWxsXyBvZiB0aGUgc2VjdGlvbnMgdG8gZGV0ZXJtaW5lIHdoaWNoIG9wdGlvbiANCihw
YXRjaCwgc25pcHBldCwgcGhhc2UpIGlzIGFwcHJvcHJpYXRlLCBoYXZpbmcgdG8gYXNzZW1i
bGUgYWxsIHRoZSANCmluZm9ybWF0aW9uIGlzIChhKSBhIHdhc3RlIG9mIHRpbWUgYW5kIChi
KSBjYW4gbGVhZCB0byBkaWZmZXJlbnQgDQppbnRlcnByZXRhdGlvbnMgYW5kIGNvbmNsdXNp
b25zIChzZWU6IFNoZXBoZXJkKS4NCg0KTW9yZSBjb25jcmV0ZWx5LCBJIGNhbm5vdCB1c2Ug
eW91ciBwYXRjaCB0byBkZWNpZGUgYmV0d2VlbiBwaGFzZXMsIA0Kc25pcHBldHMgYW5kIHBh
dGNoZXMgZm9yIHRoZSBTaGVwaGVyZCBpc3N1ZToNCg0KKiBub25lIG9mIHRocmVlIGFwcGVh
ciB0byBiZSBmb3JiaWRkZW4gYnkgeW91ciBkb2N1bWVudGF0aW9uDQoqIHRoZXJlIGlzIG5v
IHJlY29tbWVuZGF0aW9uIGZvciAncGF0Y2hlcycgKElJUkMgaXQgd2Fzbid0IGFjY2VwdGVk
IA0KdXBzdHJlYW0gYW5kIHRoZXJlIHdhcyBubyBpbnRlbnQgdG8gc3VibWl0IGl0IHVwc3Ry
ZWFtLCBpdCBiZWluZyByZWFsbHkgDQphIEd1aWxlIGJ1Zywgbm90IGEgU2hlcGhlcmQgYnVn
KQ0KKiB0aGVyZSBpcyBubyByZWNvbW1lbmRhdGlvbiBmb3Igc25pcHBldHMgKGl0J3MgYWxs
IGZyZWUsIG5vIGJ1bmRsaW5nKQ0KKiBidWlsZCBwaGFzZXMgYXJlICd0byBiZSBhdm9pZGVk
JyAoYnV0IG5vdCBmb3JiaWRkZW4pLCBhcyBpdCByZXN1bHRlZA0KICAgaW4gb2JzZXJ2YWJs
eSBkaWZmZXJlbnQgcnVudGltZSBiZWhhdmlvdXIgKGJlaW5nIGEgYnVnIGZpeCkNCg0KLS0g
dGhyZWUgKG9yIGF0IGJlc3QsIHR3bywgaWYgYnVpbGQgcGhhc2VzIGFyZSBkaXNjb3VudGVk
KSBvcHRpb25zIA0KcmVtYWluLiAgTXlzZWxmLCBJIHdvdWxkIHRoZW4gY29uc2lkZXIgJ3Nu
aXBwZXRzJyB0byBiZSB0aGUgbW9zdCANCmNvbnZlbmllbnQsIGJ1dCBzb21lIG90aGVycyAo
c2VlOiBTaGVwaGVyZCwgSUlSQykgd291bGQgcmVhbGx5IHdhbnQgYSANCnBhdGNoIGluc3Rl
YWQsIGJlY2F1c2UgJ3BhdGNoZXMgY2FuIGJlIHJldmVydGVkJyBvciBzb21ldGhpbmcgbGlr
ZSB0aGF0Lg0KDQpBcyBzdWNoLCB5b3UgYXJlIGdpdmluZyB0aGUgdG9vbHMgKHNuaXBwZXRz
IC8gcGF0Y2hlcyAvIHBoYXNlcywgc29tZSANCmRvd25zaWRlcyBhbmQgdXBzaWRlcyksIGJ1
dCBkaWZmZXJlbnQgcGVvcGxlIGNhbiBjb25zdHJ1Y3QgZGlmZmVyZW50IA0Kc29sdXRpb25z
IGZyb20gdGhvc2UgdG9vbHMgZXZlbiBpbiB0aGUgc2FtZSBzaXR1YXRpb24sIGxlYWRpbmcg
dG8gY29uZmxpY3RzLg0KDQpJZiBJIHVzZSBteSBwYXRjaCBpbnN0ZWFkLCBJIGdvIHRvICJm
aXhpbmcgdGVjaG5pY2FsIGlzc3VlcyIuIFRoaXMgDQpzZWN0aW9uIHRlbGxzIG1lIHRvIHVz
ZSBhIHBhdGNoIG9yIGEgc25pcHBldC4gIEFzIHRoZSBmaXggaXMgbm90IA0KR3VpeC1zcGVj
aWZpYywgaXQgcmVjb21tZW5kcyBhIHBhdGNoIHRvIHNhdmUgdGltZSB3aGVuIHVwc3RyZWFt
aW5nLiANCkNvbmNsdXNpb246IHdyaXRlIGEgcGF0Y2guICBJdCB3YXMgYSBHdWlsZSBidWcs
IHNvIHRoZSBmaXggd2FzIGEgcGF0Y2ggDQp0byBHdWlsZS4gIEJ1dCB0aGF0IHdvdWxkIHRh
a2UgdGltZSBhbmQgdXBzdHJlYW0gdG9vayB0aGUgcmVzcG9uc2liaWxpdHkgDQpmb3IgYSBm
aXgsIHNvIHRoZSAnZWZmaWNpZW50IHRpbWUgdGhpbmcnIGRvZXNuJ3QgcmVhbGx5IGFwcGx5
IGFuZCBhIA0Kc21hbGwgd29yay1hcm91bmQgKHNldHRpbmcgb3B0aW1pc2F0aW9uIGZsYWdz
KSBzdWZmaWNlcy4NCg0KSW4gdGhpcyBzaXR1YXRpb24sIHRoZSBzdWJzdWJzZWN0aW9uIGRv
ZXNuJ3QgY2FyZSBhdCBhbGwgaWYgeW91IGdvIGZvciBhIA0Kc25pcHBldCwgc28gYXBwbHkg
dGhlIGxhc3QgZ3VpZGluZyBwcmluY2lwbGU6IGdvIGZvciB0aGUgc2ltcGxlc3QgdGhpbmc6
DQphIHNuaXBwZXQuIChVbmxlc3MgeW91IGFscmVhZHkgaGF2ZSBhIHBhdGNoLCB0aGVuIGEg
cGF0Y2ggaXMgc2ltcGxlc3QuKQ0KRG9lcyBzb21lb25lIGVsc2UgaGF2ZSBhIGRpZmZlcmVu
dCBpZGVhIG9uIHdoYXQncyBzaW1wbGVzdD8gIERvZXNuJ3QNCnJlYWxseSBtYXR0ZXIsIOKA
mFNvbWV0aW1lcyB0aGlzIGlzIHN1YmplY3RpdmUsIHdoaWNoIGlzIGFsc28gZmluZeKAmS4N
Cg0KPiBJbg0KPiBwYXJ0aWN1bGFyLCBmb3IgcmV2aWV3IHB1cnBvc2VzLCBtaW5lIHNob3Vs
ZCBiZSBlYXNpZXIgdG8gd29yayB3aXRoLg0KPiBGb3IgaW5zdGFuY2UsIHRoZSByZXZpZXdl
ciBzZWVzIGEgaGFzaCBlbWJlZGRlZCBpbiBhIHNuaXBwZXQsIHNlZXMgaW4NCj4gdGhlIHNu
aXBwZXQgZW50cnkgdGhhdCB5b3Ugc2hvdWxkbid0IGRvIHRoYXQsIGFuZCBjYW4gdGh1cyBz
YXkgIm5vcGUsDQo+IGRvbid0IGRvIGEgc25pcHBldCBoZXJlIi4NCg0KSSB0aGluayB3ZSBz
aG91bGQgb3B0aW1pc2UgZm9yIHBhY2thZ2VycyBiZWZvcmUgcmV2aWV3ZXJzDQo+IA0KPiBS
ZWdhcmRsZXNzIG9mIHdoaWNoIHBhdGNoIHdlIHBpY2ssIGl0IHNob3VsZCBub3QgbWFuZGF0
ZSBhIHBhcnRpY3VsYXINCj4gc29sdXRpb24gaW4gcG90ZW50aWFsbHkgY29udGVudGlvdXMg
Y2FzZXMsDQoNCkFjdHVhbGx5IHRoZSB3aG9sZSBwb2ludCB3YXMgdG8gbWFuZGF0ZSBhIHBh
cnRpY3VsYXIgc29sdXRpb24gZm9yIHRoZSANCmNvbnRlbnRpb3VzIGNhc2VzLCBzZWUgU2hl
cGhlcmQuDQoNCj4gYW5kIGFsc28gcG9pbnQgdG93YXJkcyB0aGUNCj4gcmlnaHQgc29sdXRp
b24uICBTZWUgb3VyIGRpc2N1c3Npb25zIG9uIHRoZSBpbmRpdmlkdWFsIHNvbHV0aW9ucyBv
bg0KPiBwb2ludHMgaW4gd2hpY2ggSSBiZWxpZXZlIHlvdSd2ZSBlcnJvcmVkLg0KDQpUaGVz
ZSBhcmU6DQoNCiogdGhlIHR5cG8ncw0KKiBpbmNsdWRpbmcgInNraXBwaW5nIHRlc3RzIGlu
ZGljYXRpbmcgZmFpbHVyZSB1bmRlciDigJhGaXhpbmcgdGVjaG5pY2FsIA0KaXNzdWVz4oCZ
Ig0KKiAiZG9uJ3QgbWVudGlvbiBmaWxlIG5hbWVzIG9mIG5vbi1mcmVlIHRoaW5ncyBpbiBw
YXRjaGVzIg0KDQpEaWQgSSBtaXNzIGFueT8NCg0KR3JlZXRpbmdzLA0KTWF4aW1lDQo=
--------------tRDWi1bv5GRDIutW2FCxCszJ
Content-Type: application/pgp-keys; name="OpenPGP_0x49E3EE22191725EE.asc"
Content-Disposition: attachment; filename="OpenPGP_0x49E3EE22191725EE.asc"
Content-Description: OpenPGP public key
Content-Transfer-Encoding: quoted-printable

-----BEGIN PGP PUBLIC KEY BLOCK-----

xjMEX4ch6BYJKwYBBAHaRw8BAQdANPb/d6MrGnGi5HyvODCkBUJPRjiFQcRU5V+m
xvMaAa/NL01heGltZSBEZXZvcyA8bWF4aW1lLmRldm9zQHN0dWRlbnQua3VsZXV2
ZW4uYmU+wpAEExYIADgWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCX4ch6AIbAwUL
CQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRBJ4+4iGRcl7japAQC3opZ2KGWzWmRc
/gIWSu0AAcfMwyinFEEPa/QhUt2CogD/e2RdF4CYAgaRHJJmZ9WU7piKbLZ7llB4
LzgezVDHggzNJU1heGltZSBEZXZvcyA8bWF4aW1lZGV2b3NAdGVsZW5ldC5iZT7C
kAQTFggAOBYhBMHzPuIMUo/bfdcBH0nj7iIZFyXuBQJf56ycAhsDBQsJCAcDBRUK
CQgLBRYCAwEAAh4BAheAAAoJEEnj7iIZFyXujpQBAKV1SwDDl4f24rXciDlB9L8W
ycZt30CgbewMSRQk4mvbAP9dFMbVVixYBd6C8cfhR+NsOBGiOJnQABlUmgNuqGFJ
Dc44BF+HIegSCisGAQQBl1UBBQEBB0BOlzIWiJzgobMF6/cqwLaLk7jIcFSZ++c0
k9cCNT6YXwMBCAfCeAQYFggAIBYhBMHzPuIMUo/bfdcBH0nj7iIZFyXuBQJfhyHo
AhsMAAoJEEnj7iIZFyXuMr0BAJc8cl5PGvVmVuSQVKjleNl4DK1/XAaPAYPe34AE
fZJPAP9IqLCQhH/FeJanHqBP8gNdGNI2qn8RnnLVfRJgUjZ1BA=3D=3D
=3DOVqp
-----END PGP PUBLIC KEY BLOCK-----

--------------tRDWi1bv5GRDIutW2FCxCszJ--

--------------LEdw0eVxVIORtTBS4903Yefe--

--------------ztoDhl3zz8S7BeO6MhLpiOLo
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wnsEABYIACMWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYxsgEQUDAAAAAAAKCRBJ4+4iGRcl7lVn
AP0c+nSCLm1gIRDKhyzhSqGikSO1/NELtlT7yKCO7xDq4gD/bWt8MRqdlRdLGYTDFgFSL4Nhnao0
EVHaLzEKmrPgbAk=
=ftmT
-----END PGP SIGNATURE-----

--------------ztoDhl3zz8S7BeO6MhLpiOLo--




Information forwarded to guix-patches@HIDDEN:
bug#57598; Package guix-patches. Full text available.

Message received at 57598 <at> debbugs.gnu.org:


Received: (at 57598) by debbugs.gnu.org; 9 Sep 2022 08:04:44 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Sep 09 04:04:44 2022
Received: from localhost ([127.0.0.1]:60854 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1oWZ0F-0006Og-Dx
	for submit <at> debbugs.gnu.org; Fri, 09 Sep 2022 04:04:44 -0400
Received: from mailrelay.tugraz.at ([129.27.2.202]:4606)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <liliana.prikler@HIDDEN>) id 1oWZ0A-0006OR-WF
 for 57598 <at> debbugs.gnu.org; Fri, 09 Sep 2022 04:04:42 -0400
Received: from kagayaki.fritz.box (85-127-52-93.dsl.dynamic.surfer.at
 [85.127.52.93])
 by mailrelay.tugraz.at (Postfix) with ESMTPSA id 4MP7nF6sNXz3wkj;
 Fri,  9 Sep 2022 10:04:33 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tugraz.at;
 s=mailrelay; t=1662710674;
 bh=wt03wgni0fyW7+DkIj8549+pqugm7pa/dcKT+FftKvs=;
 h=Subject:From:To:Date:In-Reply-To:References;
 b=ojTfoV6Q4mRmaAN1svBf5VRWzsRW57q8CpVPwXqFg8J4NBWvtHYYKkGKVs0eHi85J
 cjAQWkUtOn5OppSaarjNlqZJleK8MLKiypb/UMeNiKeFR3xJD/woBN8Z9w+5vZ7uR1
 jZbB6eeq63h328fPbam6jBRZCghC1PTP5za0bhbk=
Message-ID: <1e707c8e345af7b2fb0353c5f1c0e37d716e3308.camel@HIDDEN>
Subject: Re: [PATCH] doc: Update contribution guidelines on patches, etc.
From: Liliana Marie Prikler <liliana.prikler@HIDDEN>
To: Maxime Devos <maximedevos@HIDDEN>, 57598 <at> debbugs.gnu.org
Date: Fri, 09 Sep 2022 10:04:32 +0200
In-Reply-To: <b33540cb-0c72-6170-34d0-b8df4ab79b8f@HIDDEN>
References: <20220905160048.18173-1-maximedevos@HIDDEN>
 <0f78953d57d8f66a934baf518b7c9e3247b580fd.camel@HIDDEN>
 <d0a48b72-c62b-cc97-e399-22abc0af182d@HIDDEN>
 <44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN>
 <b33540cb-0c72-6170-34d0-b8df4ab79b8f@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
User-Agent: Evolution 3.42.1 
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-TUG-Backscatter-control: waObeELIUl4ypBWmcn/8wQ
X-Spam-Scanner: SpamAssassin 3.003001 
X-Spam-Score-relay: -1.9
X-Scanned-By: MIMEDefang 2.74 on 129.27.10.116
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 57598
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Am Donnerstag, dem 08.09.2022 um 13:12 +0200 schrieb Maxime Devos:
> On 07-09-2022 10:09, Liliana Marie Prikler wrote:
> > Am Dienstag, dem 06.09.2022 um 22:21 +0200 schrieb Maxime Devos:
> > > It is, to my knowledge, not forbidden to mention non-free
> > > software by name in code, as long as its not a recommendation
> > > (explicit or implied).
> > Indeed, there is no hard rule, hence "avoid" rather than "forbid".
> What I also meant is, that to my knowledge there is no soft rule
> either.  Again, why should we avoid this, what's the point of that?
In descriptions, it is wise to do so because it helps software stand on
its own merits rather than just "being a clone of this thing you aren't
allowed to have" (this is real criticism pointed at us from the
proprietary software embracers).  See for instance minetest, whichisy

> How does ignoring a test fix the technical issue identified by the
> test (sometimes, the technical issue being a bug in the test itself)?
It fixes the technical issue that an otherwise functional package
(w.r.t. the N tests that don't fail) builds.  This is a particularly
useful distinction with tests that require a network connection and
thus have to fail in a build container, or are known flaky upstream and
thus cause reproducibility issues.

> > There still is the difference that phases are clearly delimited
> > while snippets are a block of code that shouldn't get too large.
> Snippets are delimited clearly as well, though, with the 'snippet'
> field?
> And the limitations of snippet length and phases length are the same
>  -- no limits, though conciseness is appreciate as always. 
True, but phases can be made to do just one thing, whereas snippets
have to fix everything that's wrong in more or less one (begin ...). 
This is a noticable distinction.

> 
> > I think my version at least hinted at this practice in a more
> > concise way, so it's not impossible to mention. [...]
> I agree it's possible -- as I replied previously:
> > I suppose a section could be added somewhere to properly document
> > the 'embedding store file names' practice, and insert a
> > cross-reference,
> I don't think documenting the how of the practice should be done
> in this section, properly explaining 'search-input-file' / 'search-
> input-directory', 'inputs / native-inputs', 'bash' being an implicit
> input but you still have to add it to 'inputs' in some cases because
> of cross-compilation, this-package-input and this-package-native-
> input ... would make the
> subsubsection a bit too long I think, distracting from other
> situations, hence the proposal for a cross-reference.
> How about leaving the 'how to embed store file names' for a separate
>  documentation patch and section, adding a cross-reference later?
See above, "I suppose a section could be added..." means I'm somewhat
indifferent to whether it's done now or later; I would however very
much prefer a wording that points people toward this practice existing,
even if they have to go look in the code for examples.  Alternatively,
a footnote for the most common case (search-input-file inputs
"bin/command") ought to suffice for the time being.

> 
> 
> > I think calling back to a guiding principle in and of itself shows
> > that the section has grown too long to remember it by the point you
> > come to this example,
> This has nothing to do with length and remembering, but rather with
> explaining why a phase must be used -- to explain that, I state which
> principle applies (as mentioned previously). If I removed the
> explanations, I would just be stating how to do things, without
> giving a logical reasoning on the 'why'.
IMHO, I think a reader who remembers the guiding principles should see
that it applies.

> > and I think that's more problematic than merely the
> > callback. If you didn't need to divide this into subsubsections,
> > you could introduce the guiding principles in a way that feels more
> > natural.
> I consider it more natural to have the 'guiding principles' _before_
> the concrete cases, as they are meant to be 'guiding' and
> 'principles'. 
> It's like 'starting from first principles', there introducing the
> first principles as you go is ad-hoc.
> The guiding principles also need to be outside the examples, in case
>  one of the examples doesn't apply to the packager's use case, such
>  that they can fall-back to the guiding principles.
> Also, in your patch you are dividing things in subsubsections as
> well, just under a different name and different representation (table
> entries in a subsection), as mentioned previously.
A table entry is not a subsection, as much as you want it to be that.

Also, your guiding principles are (with one exception) really just
invariants that ought to hold for the source field of a package.  
As such, I think it would be easier to state "A package's source should
be the smallest corresponding source in terms of uncompressed file
size.  This corresponding source must consist only of free software
(note Free Software) and should build on all platforms supported by
upstream."  Note how smallest naturally implies unbundling bundled
sources.

> > I still find this wording very confusing. Perhaps "To add new
> > functionality, a patch is almost always the best choice. For one,
> > it is likely that the new functionality requires changing multiple
> > lines of source code, which is more convenient to do with a patch
> > than with a snippet. Further, patches can be taken from and
> > submitted to upstreams more easily. If your patch has not been
> > submitted to upstream, consider doing so."
> It loses some information (that patches are preferred) and
> (after re-adding the conclusion) is more verbose, which appears
> to be considered very important.
Which conclusion is there to re-add?  The conclusion is already stated
in the beginning: patches are almost always the best choice.  Then two
reasons as for why.  The part w.r.t. upstreaming changes has also been
addressed.

> > An enumeration ought to have at least three elements (otherwise
> > it's just a pair), and I think if we do proper counting and omit
> > no-brainers, such as the "only free software" part that has already
> > been mentioned, we come very close to skirting that line.
> The "only free software" is mentioned elsewhere, yes, but it is one
> of the principles for deciding between snippets, phases and patches.
> While you call it a no-brainer, it is sometimes neglected, so it
> sounds important to me to explicitly list it. 
> Merging the 3th and 4th @item, I count 4 principles, so it fits with
> an enumeration.
> Also, I'm not following your point here -- your complaint was that
> they aren't guiding principles (based on the number of them), but
> your response is that they might not form an enumeration?  They are
> named the guiding principles, not the guiding enumeration.  What have
> enumerations to do with anything?
I'm using enumeration as a super term here, which can be
((sub)sub)sections, chapters, list elements, whatever, and my claim is
that we barely have enough principles to allow the use of a plural. 
Adding to that, now that I think of it, I also doubt their usefulness
in guiding.  "Use whatever feels convenient, but note that that might
be subjective" is more useful at the end of the section when a user
didn't find what they were looking for than at the start.

> > > > which (along with its sheer length) is my main
> > > > complaint with the way you've phrased things.
> > > (I'm assuming "its = the patch as a whole" here)
> > > 
> > > I could remove another section of the manual to compensate for
> > > the additional length, but I doubt that's what you intended.  I
> > > do not see the problem with the sheer length -- we have a bit of
> > > a documentation problem in Guix, there is lots of useful
> > > information that is currently undocumented.
> > > I do not think there have been any complaints about the manual
> > > being too long, if anything, it's too short.
> > I personally tend towards "less verbose", hence my complaint of
> > describing something with many words that could be described with
> > fewer. A section can still be too long while the chapter around it
> > is too short.
> Do you have anything in particular in mind?
This is more of a broad statement that applies to the patch as a whole
than to any of its constituent parts in particular.  However, in some
cases where I think it's particularly noticable, I'll try to point out
shorter formulations.

> > > I've written some documentation, it was originally a bit hard to
> > > follow so in a next version I've restructured it a bit and
> > > explained more, this restructuring and explanation entailed some
> > > additional length.
> > > 
> > > There had been some proposals for additional cases to document,
> > > so they were added, increasing the length.  You have added new
> > > information is your patch, it was considered useful so I've
> > > integrated some of it in my patch, increasing the length.  (I
> > > didn't integrate all of the new parts, if I did, it would
> > > increase even further.  (If desired, in can integrate the rest,
> > > at cost of some time.)).
> > My patch did not just state some things you missed, it also omitted
> > things that I think are either not necessary or probably better
> > documented elsewhere.
> What particular things do you have in mind, and where do you
> think they should better be documented?  I can move things
> around a bit and add cross-references. 
> > 
> > > I do not see what the problem is with additional length as long
> > > as this additional length comes with additional useful
> > > information and the manual is well-structured (e.g. with
> > > (sub)(sub)sections, chapters and indices) -- we do not have a
> > > page limit.
> > > 
> > > At worst, perhaps the same information could perhaps be encoded
> > > with fewer words? I could compare the two patches to see which
> > > one formulates certain information in the fewest words, and
> > > choose the least verbose of the two for each piece of information
> > > that is present in both?
> > > 
> > > Also, comparing the two patches, my patch has 40 more lines, but
> > > about 25 of them are for noting the guiding principles (which are
> > > absent in your patch).
> > > Compensating for that, the patches are about the same length, so
> > > I do not think that 'sheer length' is accurate here.
> > 25 lines calling back to earlier information are, imho, an
> > indicator that the section is too long. Imagine you'd have twenty-
> > five function calls to guiding_principles(n) in your program – at
> > some point, you'd try to cache those.
> (define cached-guiding-principles
>   (delay (list (guiding-principle-0)
>                     [...]
>                     (guiding-principle-24)))) 
> Caching the guiding principles does not reduce the length.
> I don't see the problem with calling back to earlier information.
> Also, it isn't earlier information, there is no nice list of guiding
> principles anywhere else.
At the risk of responding jokingly to what was meant serious: I didn't
know we suddenly gained 20 guiding principles.

> 
> > > > Going down to subsubsections just to find out where patches are
> > > > appropriate, is imho overkill.
> > > The 'going down to subsubsection' is the case for your patch too,
> > > though? In my case, it's a subsubsection, in your case it's a
> > > table
> > > entry inside a subsection, both are the same level of nesting.
> > These are still two very different kinds of nesting. A table fits
> > onto a (virtual) page more easily than several subsections.
> I suppose table items might take two less line or so less than
> subsubsections, but I don't think that's sufficient reason to step
> away from a nice section structure.
Another reason is that you can end a table in the middle of a section,
which you can't do with subsections.  Hence why I'm able to put a
remark at the bottom, which you have to clumsily fit into the top.

> > > Also, it's a matter of different structure -- in my v2 and v3
> > > patch, I have a 'problem -> solution' structure -- the idea is
> > > that the packages has a problem, they look at the section, they
> > > read the subsubsection names, select the
> > > subsubsection that matches their problem and read the solution --
> > > in short, the idea is to provide a solution to the problem.
> > > 
> > > Your structure is the other way around -- for solutions (patches,
> > > snippets, phases), it gives the permitted problems to apply it
> > > to.
> > > 
> > > So yes, your patch is more convenient for finding out where
> > > patches are appropriate.  I do not see the benefit of that though
> > > -- a new contributor packaging a thing wouldn't know in advance
> > > which solutions could be appropriate for them (your 'solution ->
> > > problem' patch?), rather, they start with a problem and are
> > > searching for an appropriate solution (my problem->solution
> > > patch).
> > I think this idea can be debunked pretty easily. If I give you a
> > hammer and I tell you "this is a hammer, you can use it to put
> > nails into a wall", and you have a nail and you want to put it into
> > a wall, you won't go "oh no, however will I put this nail into a
> > wall?" – you will simply use the hammer to do so.
> The patch does this, currently.  It already proposes a number of
> hammers (patches, snippets and phases) and purposes (adding new
> functionality, fixing technical issues, unbundling, ...). 
> Also, the scenario "oh no, however will I put this nail into a wall"
> actually happened -- see the Shepherd discussion, where there was
> a lot of disagreement on how nails (= small work-around in the
> Makefile) should be put in walls (= patches, snippet, phase?).   It
> was the whole reason to start writing a documentation patch.
You might want to add a link here if it supports your argument, but
without looking at the discussion this rather sounds like "oh no, I
have three hammers, which one do I pick?" – which, fair enough, is
still a problem, but one that neither of our patches would cause imho.

> > Of course, for this to work I also have to tell you *how* to use a
> > hammer to put nails into a wall, but that's exactly what I did in
> > my patch by inserting the right notes into the Guix manual.
> Also already the case. 
> > My solution->problem approach has the benefit, that folks can just
> > go over all the solutions, check if their problem fits, and apply
> > the one that says "here, use this".
> A problem->solution structure is useful for that too?
> And it already lists all the solutions (snippets, phases and patches)
> and information to decide whether the solution fits their problem
> (the guiding principles, and the worked-out cases).
Again, I believe you're overselling the guiding principles.

> > And if they don't find anything, they see the handy little line at
> > the bottom saying "use whatever you think is convenient".
> Nowhere did the patch imply that the listed cases were all cases. In
> fact, in two places in the introduction it is implied that the
> examples are not exhaustive, and that they can choose according to
> convenience  [...]
Emphasis on handy little line rather than needing to be told twice
(particularly if people have no idea what to expect due to not having
looked at the worked-out cases yet).

> >  I also expand a little on the benefits and drawbacks of
> > these approaches as you would when describing design patterns.
> This is also done in my patch. [...]
This is not about the contained information, but the structure of the
contained information.

My solution->problem style follows roughly this style:
1. solution
2. problems it is known to solve
3. how to use
4. properties, caveats, etc.

Your problem->solution style roughly has the following:
1. problem
2. (set of) solution(s)
3. if more than one solution, maybe a help to select

This makes it so that people might have to go to a different subsection
than the one they read for their solution to find out about potential
caveats, e.g. not embedding store paths in a snippet.

> > Your problem->solution approach instead leaves people wondering
> > when their particular use case has not been described.
> See my reply to ‘And if they don't find anything, they see the handy
> little line at the bottom saying "use whatever you think is
> convenient’. 
> > It gives them a solution rather than the tools to build solutions
> > with.
> It does give the tools: snippets, patches and phases.
As far as I read, it describes none of those.  It puts out guiding
principles and some already worked-out cases.

> Also, "giving the tools to build solutions with" does not help with
> the problem that I aimed to solve -- there was disagreement on what
> the appropriate tools are (see: Shepherd), so it not just needs to
> give the tools, but also the solutions.
I don't see how my patch lacks this information however.  In
particular, for review purposes, mine should be easier to work with. 
For instance, the reviewer sees a hash embedded in a snippet, sees in
the snippet entry that you shouldn't do that, and can thus say "nope,
don't do a snippet here".

Regardless of which patch we pick, it should not mandate a particular
solution in potentially contentious cases, and also point towards the
right solution.  See our discussions on the individual solutions on
points in which I believe you've errored.

Cheers




Information forwarded to guix-patches@HIDDEN:
bug#57598; Package guix-patches. Full text available.

Message received at 57598 <at> debbugs.gnu.org:


Received: (at 57598) by debbugs.gnu.org; 8 Sep 2022 11:12:55 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Sep 08 07:12:54 2022
Received: from localhost ([127.0.0.1]:57364 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1oWFSm-0002LM-S8
	for submit <at> debbugs.gnu.org; Thu, 08 Sep 2022 07:12:54 -0400
Received: from laurent.telenet-ops.be ([195.130.137.89]:36376)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <maximedevos@HIDDEN>) id 1oWFSh-0002LA-KM
 for 57598 <at> debbugs.gnu.org; Thu, 08 Sep 2022 07:12:51 -0400
Received: from [IPV6:2a02:1811:8c09:9d00:5dba:d409:33f7:a16]
 ([IPv6:2a02:1811:8c09:9d00:5dba:d409:33f7:a16])
 by laurent.telenet-ops.be with bizsmtp
 id HPCj2800E20ykKC01PCjxg; Thu, 08 Sep 2022 13:12:46 +0200
Message-ID: <b33540cb-0c72-6170-34d0-b8df4ab79b8f@HIDDEN>
Date: Thu, 8 Sep 2022 13:12:43 +0200
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101
 Thunderbird/91.12.0
Content-Language: en-US
To: Liliana Marie Prikler <liliana.prikler@HIDDEN>,
 57598 <at> debbugs.gnu.org
References: <20220905160048.18173-1-maximedevos@HIDDEN>
 <0f78953d57d8f66a934baf518b7c9e3247b580fd.camel@HIDDEN>
 <d0a48b72-c62b-cc97-e399-22abc0af182d@HIDDEN>
 <44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN>
From: Maxime Devos <maximedevos@HIDDEN>
Subject: Re: [PATCH] doc: Update contribution guidelines on patches, etc.
In-Reply-To: <44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="------------bYZznqRF4e00yv03Q3Otn4Cv"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r22;
 t=1662635566; bh=BVj7tKpf7nZIYzt8MDLzRBiS15zOU/pDnYZAaFh4sMU=;
 h=Date:To:References:From:Subject:In-Reply-To;
 b=L9pccPYsqDvdVfGfZo600Nvy5POMADKNHMwjwsR3tsM03UkqiVvW1cS2VIZ6fbu2F
 q1afo3I3P0ab0PmnTKbeYohJ+QgqyVhYEfJD09a6c88psEKDXrdp/hR8oTX7wa09nt
 GlKKHDd8+NqBbowj6Uq5RYtPHH6e9QnU1pXfEbGMM3APzn5s3Lnn6blt/1AqmNnV4q
 y+pOXtLckMpIppflgMLJXbq7Ncv/+HR2bzncx0gkJzpHzCZAEWkTuE05lIEFC3efDI
 81oGJD4W18n3zJpS46Z/l7pSKXJBLHUqg/UefopNbEWNeLIq4xRK7NKqJwxOIWJgH3
 jyLSbWMBrvq8w==
X-Spam-Score: -0.0 (/)
X-Debbugs-Envelope-To: 57598
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--------------bYZznqRF4e00yv03Q3Otn4Cv
Content-Type: multipart/mixed; boundary="------------N4yS7ui6DXqk1oJogkEaW0eQ";
 protected-headers="v1"
From: Maxime Devos <maximedevos@HIDDEN>
To: Liliana Marie Prikler <liliana.prikler@HIDDEN>,
 57598 <at> debbugs.gnu.org
Message-ID: <b33540cb-0c72-6170-34d0-b8df4ab79b8f@HIDDEN>
Subject: Re: [PATCH] doc: Update contribution guidelines on patches, etc.
References: <20220905160048.18173-1-maximedevos@HIDDEN>
 <0f78953d57d8f66a934baf518b7c9e3247b580fd.camel@HIDDEN>
 <d0a48b72-c62b-cc97-e399-22abc0af182d@HIDDEN>
 <44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN>
In-Reply-To: <44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN>

--------------N4yS7ui6DXqk1oJogkEaW0eQ
Content-Type: multipart/mixed; boundary="------------lT8JlkWSD5VQXD90Dz1boRGV"

--------------lT8JlkWSD5VQXD90Dz1boRGV
Content-Type: multipart/alternative;
 boundary="------------fiI7W13Wn7SOCrw0E7hFeOyo"

--------------fiI7W13Wn7SOCrw0E7hFeOyo
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: base64

T24gMDctMDktMjAyMiAxMDowOSwgTGlsaWFuYSBNYXJpZSBQcmlrbGVyIHdyb3RlOg0KDQo+
IEFtIERpZW5zdGFnLCBkZW0gMDYuMDkuMjAyMiB1bSAyMjoyMSArMDIwMCBzY2hyaWViIE1h
eGltZSBEZXZvczoNCj4+PiBXZSBhbHNvIGF2b2lkIHNwZWxsaW5nIG91dCB0aGUgbm9uLWZy
ZWUgZmlsZW5hbWUgd2hlcmUgcG9zc2libGUsDQo+Pj4gcHJlZmVycmluZyBrZWVwIGxpc3Rz
IG92ZXIgcmVtb3ZlIGxpc3RzLCB3aGljaCB0aGlzIGtpbmQgb2YgcGF0Y2hlcw0KPj4+IHdv
dWxkIGJlLg0KPj4gU2hvdWxkIHdlPyBJJ20gbm90IHNlZWluZyB0aGUgcG9pbnQgb2YgdGhh
dC4gSSBoYXZlIG5vdCBleHBlcmllbmNlZA0KPj4gYW55IHN1Y2ggYXZvaWRhbmNlIG15c2Vs
Ziwgc2VlIGUuZy4gJ3Rlbm5peCcsICduZXZlcmJhbGwnIGFuZA0KPj4gJ3Nob2d1bicuICBJ
dCBpcywgdG8gbXkga25vd2xlZGdlLCBub3QgZm9yYmlkZGVuIHRvIG1lbnRpb24gbm9uLWZy
ZWUNCj4+IHNvZnR3YXJlIGJ5IG5hbWUgaW4gY29kZSwgYXMgbG9uZyBhcyBpdHMgbm90IGEg
cmVjb21tZW5kYXRpb24NCj4+IChleHBsaWNpdCBvciBpbXBsaWVkKS4NCj4gSW5kZWVkLCAg
dGhlcmUgaXMgbm8gaGFyZCBydWxlLCBoZW5jZSAiYXZvaWQiIHJhdGhlciB0aGFuICJmb3Ji
aWQiLg0KDQpXaGF0IEkgYWxzbyBtZWFudCBpcywgdGhhdCB0byBteSBrbm93bGVkZ2UgdGhl
cmUgaXMgbm8gc29mdCBydWxlIGVpdGhlci4NCg0KQWdhaW4sIHdoeSBzaG91bGQgd2UgYXZv
aWQgdGhpcywgd2hhdCdzIHRoZSBwb2ludCBvZiB0aGF0Pw0KDQo+Pj4+ICtAc3Vic3Vic2Vj
dGlvbiBGaXhpbmcgdGVjaG5pY2FsIGlzc3VlcyAoY29tcGlsYXRpb24gZXJyb3JzLCB0ZXN0
DQo+Pj4+IGZhaWx1cmVzLCBvdGhlciBidWdzIC4uLikNCj4+Pj4gWy4uLl0NCj4+PiBJIGFt
IHByZXR0eSBzdXJlIHRoYXQgbW9zdCBvZiB0aGVzZSBhcmUgKm5vdCogZG9uZSBpbiBzbmlw
cGV0cywgYnV0DQo+Pj4gcmF0aGVyIHBoYXNlcywgaWYgdGhleSBvbmx5IGFmZmVjdCBHdWl4
LsKgIEluIHBhcnRpY3VsYXIsIGdyZXAgZm9yDQo+Pj4gZmFpbGluZy10ZXN0cyBhbmQgeW91
IHdpbGwgZmluZCBhIGZldyBwaGFzZXMgZGlzYWJsaW5nIHRoZW0uDQo+PiBJIGRvIG5vdCB0
aGluayB0aGF0IGlnbm9yaW5nIGEgdGVzdCBjb3VudHMgYXMgYSBidWcgZml4LsKgIEknbGwg
YWRkIGl0DQo+PiB0byB0aGlzIHN1YnN1YnNlY3Rpb24sIGF0IGNvc3Qgb2Ygc29tZSBhZGRp
dGlvbmFsIGxlbmd0aC4NCj4gSSBkbyB0aGluayBpdCBjb3VudHMgYXMgImZpeGluZyB0ZWNo
bmljYWwgaXNzdWVzIHN1Y2ggYXMgdGVzdA0KPiBmYWlsdXJlcyIuDQpIb3cgZG9lcyBpZ25v
cmluZyBhIHRlc3QgZml4IHRoZSB0ZWNobmljYWwgaXNzdWUgaWRlbnRpZmllZCBieSB0aGUg
dGVzdA0KKHNvbWV0aW1lcywgdGhlIHRlY2huaWNhbCBpc3N1ZSBiZWluZyBhIGJ1ZyBpbiB0
aGUgdGVzdCBpdHNlbGYpPw0KPj4+IEluIGZhY3QsIGFzIGZhciBhcyBmaWxlcyB0aGF0IHdp
bGwgbm90IGJlIGluc3RhbGxlZCBhcmUgY29uY2VybmVkLA0KPj4+IEkgdGhpbmsgcGhhc2Vz
IG91Z2h0IHRvIGJlIHByZWZlcnJlZCwgYmVjYXVzZSB0aGV5J3JlIGVhc2llciB0bw0KPj4+
IHRha2UgYXdheSBpZiBhbiBhY3R1YWwgZml4IGlzIG1hZGUuDQo+PiBJIGRvIG5vdCBzZWUg
YSBkaWZmZXJlbmNlIGluIGhhcmRuZXNzL2Vhc3luZXNzIGJldHdlZW4gcmVtb3ZpbmcgYQ0K
Pj4gcGhhc2UgYW5kIHJlbW92aW5nIGEgc25pcHBldCAoYm90aCBhcmUganVzdCBhIG1hdHRl
ciBvZiBvcGVuaW5nDQo+PiBhbiBlZGl0b3IsIHBvaW50aW5nIGl0IGF0IGdudS9wYWNrYWdl
cy8uLi4gYW5kIHJlbW92aW5nIGEgZmV3IGxpbmVzKSwNCj4+IHRob3VnaCBJIGRvIGNvbnNp
ZGVyIHJlbW92aW5nIGEgcGF0Y2ggdG8gYmUgc2xpZ2h0bHkgaGFyZGVyIChiZWNhdXNlDQo+
PiBnbnUvbG9jYWwubWsgaXMgZWFzeSB0byBmb3JnZXQpLg0KPiBUaGVyZSBzdGlsbCBpcyB0
aGUgZGlmZmVyZW5jZSB0aGF0IHBoYXNlcyBhcmUgY2xlYXJseSBkZWxpbWl0ZWQgd2hpbGUN
Cj4gc25pcHBldHMgYXJlIGEgYmxvY2sgb2YgY29kZSB0aGF0IHNob3VsZG4ndCBnZXQgdG9v
IGxhcmdlLg0KDQpTbmlwcGV0cyBhcmUgZGVsaW1pdGVkIGNsZWFybHkgYXMgd2VsbCwgdGhv
dWdoLCB3aXRoIHRoZSAnc25pcHBldCcgZmllbGQ/DQoNCkFuZCB0aGUgbGltaXRhdGlvbnMg
b2Ygc25pcHBldCBsZW5ndGggYW5kIHBoYXNlcyBsZW5ndGggYXJlIHRoZSBzYW1lDQotLSBu
byBsaW1pdHMsIHRob3VnaCBjb25jaXNlbmVzcyBpcyBhcHByZWNpYXRlIGFzIGFsd2F5cy4N
Cg0KPj4+IEZvciB0aGUgc3RvcmUgcGF0aCBlbWJlZGRpbmcsIHRoYXQncyBhIHJhdGhlciBy
b3VuZGFib3V0IHdheSBvZg0KPj4+IHNheWluZyB0aGF0IGNvbnRyaWJ1dGVycyAqb3VnaHQg
dG8qIGVtYmVkIHN0b3JlIHBhdGhzIG9mIGNlcnRhaW5nDQo+Pj4gdGhpbmdzLCBzdWNoIGFz
IGNvbW1hbmRzIGludm9rZWQgdmlhIGV4ZWMgZXQgYWwuDQo+PiBJdCdzIG5vdD8gSXQncyBr
aW5kIG9mIGltcGxpZWQsIHllcywgYnV0IHRoZSBwdXJwb3NlIGlzbid0IGJlaW5nIGENCj4+
ICd5b3Ugc2hvdWxkIGVtYmVkIHN0b3JlIHBhdGhzJyAoc3Vic3ViKXNlY3Rpb24sIGJ1dCBy
YXRoZXIsICdpZiB5b3UNCj4+IGdvIGVtYmVkZGluZyBzdG9yZSBwYXRocyAoYXQgbGVhc3Qg
Zm9yIGZpeGluZyBhIHRlY2huaWNhbCBpc3N1ZSksIGRvDQo+PiBpdCBpbiBhIHBoYXNlJy4N
Cj4+DQo+PiBJJ20gbm90IGZvbGxvd2luZyB3aGF0IHRoZSBjb21wbGFpbnQgaXMsIEkgc3Vw
cG9zZSBhIHNlY3Rpb24gY291bGQgYmUNCj4+IGFkZGVkIHNvbWV3aGVyZSB0byBwcm9wZXJs
eSBkb2N1bWVudCB0aGUgJ2VtYmVkZGluZyBzdG9yZSBmaWxlIG5hbWVzJw0KPj4gcHJhY3Rp
Y2UsIGFuZCBpbnNlcnQgYSBjcm9zcy1yZWZlcmVuY2UsIGJ1dCB0aGF0IHdhc24ndCB0aGUg
cHVycG9zZQ0KPj4gb2YgdGhlIHBhdGNoIGFuZCBnb2luZyBieSBsYXRlciByZXNwb25zZXMs
IHlvdSBzZWVtIG9wcG9zZWQgdG8gbWFraW5nDQo+PiB0aGluZ3MgbG9uZ2VyLg0KPj4NCj4+
IFRoZSBhbHRlcm5hdGl2ZSB3b3VsZCBiZSB0byByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbiwg
YnV0IHRoZW4NCj4+IHZhbHVhYmxlIGluZm9ybWF0aW9uIHdvdWxkIGJlIGxvc3QgKHRoZXJl
IGhhZCBiZWVuIHNvbWUgY2FzZXMgd2hlcmUNCj4+IHN0b3JlIGZpbGUgbmFtZXMgd2VyZSBl
bWJlZGRlZCBpbiBvcmlnaW4pLg0KPiBJIHRoaW5rIG15IHZlcnNpb24gYXQgbGVhc3QgaGlu
dGVkIGF0IHRoaXMgcHJhY3RpY2UgaW4gYSBtb3JlIGNvbmNpc2UNCj4gd2F5LCBzbyBpdCdz
IG5vdCBpbXBvc3NpYmxlIHRvIG1lbnRpb24uIFsuLi5dDQoNCkkgYWdyZWUgaXQncyBwb3Nz
aWJsZSAtLSBhcyBJIHJlcGxpZWQgcHJldmlvdXNseToNCg0KPiBJIHN1cHBvc2UgYSBzZWN0
aW9uIGNvdWxkIGJlIGFkZGVkIHNvbWV3aGVyZSB0byBwcm9wZXJseSBkb2N1bWVudCB0aGUN
Cj4gJ2VtYmVkZGluZyBzdG9yZSBmaWxlIG5hbWVzJyBwcmFjdGljZSwgYW5kIGluc2VydCBh
IGNyb3NzLXJlZmVyZW5jZSwNCkkgZG9uJ3QgdGhpbmsgZG9jdW1lbnRpbmcgdGhlIGhvdyBv
ZiB0aGUgcHJhY3RpY2Ugc2hvdWxkIGJlIGRvbmUNCmluIHRoaXMgc2VjdGlvbiwgcHJvcGVy
bHkgZXhwbGFpbmluZyAnc2VhcmNoLWlucHV0LWZpbGUnIC8gDQonc2VhcmNoLWlucHV0LWRp
cmVjdG9yeScsDQonaW5wdXRzIC8gbmF0aXZlLWlucHV0cycsICdiYXNoJyBiZWluZyBhbiBp
bXBsaWNpdCBpbnB1dCBidXQgeW91IHN0aWxsDQpoYXZlIHRvIGFkZCBpdCB0byAnaW5wdXRz
JyBpbiBzb21lIGNhc2VzIGJlY2F1c2Ugb2YgY3Jvc3MtY29tcGlsYXRpb24sDQp0aGlzLXBh
Y2thZ2UtaW5wdXQgYW5kIHRoaXMtcGFja2FnZS1uYXRpdmUtaW5wdXQgLi4uIHdvdWxkIG1h
a2UgdGhlDQpzdWJzdWJzZWN0aW9uIGEgYml0IHRvbyBsb25nIEkgdGhpbmssIGRpc3RyYWN0
aW5nIGZyb20gb3RoZXIgc2l0dWF0aW9ucywNCmhlbmNlIHRoZSBwcm9wb3NhbCBmb3IgYSBj
cm9zcy1yZWZlcmVuY2UuDQoNCkhvdyBhYm91dCBsZWF2aW5nIHRoZSAnaG93IHRvIGVtYmVk
IHN0b3JlIGZpbGUgbmFtZXMnIGZvciBhIHNlcGFyYXRlDQpkb2N1bWVudGF0aW9uIHBhdGNo
IGFuZCBzZWN0aW9uLCBhZGRpbmcgYSBjcm9zcy1yZWZlcmVuY2UgbGF0ZXI/DQoNCj4+Pj4g
T3RoZXJ3aXNlLCBpZiB0aGUgc3RvcmUNCj4+Pj4gK2ZpbGUgbmFtZSB3ZXJlIGVtYmVkZGVk
IGluIHRoZSBzb3VyY2UsIHRoZSByZXN1bHQgb2YNCj4+Pj4gQGNvbW1hbmR7Z3VpeCBidWls
ZA0KPj4+PiArLS1zb3VyY2V9IHdvdWxkIGJlIHVudXNhYmxlIG9uIG5vbi1HdWl4IHN5c3Rl
bXMgYW5kIGFsc28gbGlrZWx5DQo+Pj4+IHVudXNhYmxlDQo+Pj4+ICtvbiBHdWl4IHN5c3Rl
bXMgb2YgYW5vdGhlciBhcmNoaXRlY3R1cmUuDQo+Pj4gV2h5IGFyZSB5b3UgcmVwZWF0aW5n
IGEgZ3VpZGluZyBwcmluY2lwbGU/DQo+PiBJJ20gc2hvd2luZyB3aHksIGluIHRoaXMgY2Fz
ZSwgYSBwaGFzZSBtdXN0IGJlIHVzZWQsIGJ5IG5vdGluZyB0aGF0DQo+PiBub3QgZG9pbmcg
c28gd291bGQgYmUgY29udHJhcnkgdG8gb25lIG9mIHRoZSBwcmluY2lwbGVzLg0KPj4NCj4+
IElmIG5vdCByZXBlYXRpbmcgdGhlIHByaW5jaXBsZSBpcyBkZXNpcmVkLCBJIGNvdWxkIHBl
cmhhcHMgbnVtYmVyDQo+PiB0aGVtLCBhbmQgcmVmZXIgdG8gdGhlIHByaW5jaXBsZXMgYnkg
bnVtYmVyIGluc3RlYWQgb2YgcmVzdGF0aW5nDQo+PiB0aGVtPyBXb3VsZCByZWR1Y2UgdGhl
IGxlbmd0aCBhIGxpdHRsZS4NCj4gSSB0aGluayBjYWxsaW5nIGJhY2sgdG8gYSBndWlkaW5n
IHByaW5jaXBsZSBpbiBhbmQgb2YgaXRzZWxmIHNob3dzIHRoYXQNCj4gdGhlIHNlY3Rpb24g
aGFzIGdyb3duIHRvbyBsb25nIHRvIHJlbWVtYmVyIGl0IGJ5IHRoZSBwb2ludCB5b3UgY29t
ZSB0bw0KPiB0aGlzIGV4YW1wbGUsDQpUaGlzIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggbGVu
Z3RoIGFuZCByZW1lbWJlcmluZywgYnV0IHJhdGhlciB3aXRoDQpleHBsYWluaW5nIHdoeSBh
IHBoYXNlIG11c3QgYmUgdXNlZCAtLSB0byBleHBsYWluIHRoYXQsIEkgc3RhdGUgd2hpY2gN
CnByaW5jaXBsZSBhcHBsaWVzIChhcyBtZW50aW9uZWQgcHJldmlvdXNseSkuIElmIEkgcmVt
b3ZlZCB0aGUNCmV4cGxhbmF0aW9ucywgSSB3b3VsZCBqdXN0IGJlIHN0YXRpbmcgaG93IHRv
IGRvIHRoaW5ncywgd2l0aG91dCBnaXZpbmcNCmEgbG9naWNhbCByZWFzb25pbmcgb24gdGhl
ICd3aHknLg0KPiBhbmQgSSB0aGluayB0aGF0J3MgbW9yZSBwcm9ibGVtYXRpYyB0aGFuIG1l
cmVseSB0aGUNCj4gY2FsbGJhY2suICBJZiB5b3UgZGlkbid0IG5lZWQgdG8gZGl2aWRlIHRo
aXMgaW50byBzdWJzdWJzZWN0aW9ucywgeW91DQo+IGNvdWxkIGludHJvZHVjZSB0aGUgZ3Vp
ZGluZyBwcmluY2lwbGVzIGluIGEgd2F5IHRoYXQgZmVlbHMgbW9yZQ0KPiBuYXR1cmFsLg0K
SSBjb25zaWRlciBpdCBtb3JlIG5hdHVyYWwgdG8gaGF2ZSB0aGUgJ2d1aWRpbmcgcHJpbmNp
cGxlcycgX2JlZm9yZV8gdGhlDQpjb25jcmV0ZSBjYXNlcywgYXMgdGhleSBhcmUgbWVhbnQg
dG8gYmUgJ2d1aWRpbmcnIGFuZCAncHJpbmNpcGxlcycuIEl0J3MNCmxpa2UgJ3N0YXJ0aW5n
IGZyb20gZmlyc3QgcHJpbmNpcGxlcycsIHRoZXJlIGludHJvZHVjaW5nIHRoZSBmaXJzdCAN
CnByaW5jaXBsZXMNCmFzIHlvdSBnbyBpcyBhZC1ob2MuDQoNClRoZSBndWlkaW5nIHByaW5j
aXBsZXMgYWxzbyBuZWVkIHRvIGJlIG91dHNpZGUgdGhlIGV4YW1wbGVzLCBpbiBjYXNlDQpv
bmUgb2YgdGhlIGV4YW1wbGVzIGRvZXNuJ3QgYXBwbHkgdG8gdGhlIHBhY2thZ2VyJ3MgdXNl
IGNhc2UsIHN1Y2gNCnRoYXQgdGhleSBjYW4gZmFsbC1iYWNrIHRvIHRoZSBndWlkaW5nIHBy
aW5jaXBsZXMuDQoNCkFsc28sIGluIHlvdXIgcGF0Y2ggeW91IGFyZSBkaXZpZGluZyB0aGlu
Z3MgaW4gc3Vic3Vic2VjdGlvbnMgYXMgd2VsbCwNCmp1c3QgdW5kZXIgYSBkaWZmZXJlbnQg
bmFtZSBhbmQgZGlmZmVyZW50IHJlcHJlc2VudGF0aW9uICh0YWJsZSBlbnRyaWVzDQppbiBh
IHN1YnNlY3Rpb24pLCBhcyBtZW50aW9uZWQgcHJldmlvdXNseS4NCg0KPj4+PiArQHN1YnN1
YnNlY3Rpb24gQWRkaW5nIG5ldyBmdW5jdGlvbmFsaXR5DQo+Pj4+ICtUbyBhZGQgbmV3IGZ1
bmN0aW9uYWxpdHksIGEgcGF0Y2ggaXMgYWxtb3N0IGFsd2F5cyB0aGUgbW9zdA0KPj4+PiBj
b252ZW5pZW50DQo+Pj4+ICtjaG9pY2Ugb2YgdGhlIHRocmVlIC0tIHBhdGNoZXMgYXJlIHVz
dWFsbHkgbXVsdGktbGluZSBjaGFuZ2VzLA0KPj4+PiB3aGljaA0KPj4+PiBhcmUNCj4+Pj4g
K2NvbnZlbmllbnQgdG8gZG8gd2l0aCBwYXRjaGVzIGFuZCBpbmNvbnZlbmllbnQgdG8gZG8g
d2l0aCBwaGFzZXMNCj4+Pj4gb3INCj4+Pj4gK3NuaXBwZXRzLg0KPj4+IFVobSwgd2hhdD/C
oCBQYXRjaGVzIGFyZSB0aGUgcHJlZmVycmVkIGZvcm0gb2YgcGF0Y2hlcz8NCj4+IE5vLCBJ
IG1lYW50IHRoYXQgcGF0Y2hlcyBhcmUgKHVzdWFsbHkpIHRoZSBwcmVmZXJyZWQgbWV0aG9k
IGZvcg0KPj4gYWRkaW5nIG5ldyBmdW5jdGlvbmFsaXR5LCBhbmQgdGhhdCBtdWx0aS1saW5l
IGNoYW5nZXMgYXJlIGNvbnZlbmllbnQNCj4+IHRvIGRvIHdpdGggcGF0Y2hlcy7CoCDigJh3
aGljaOKAmSByZWZlcnMgdG8gdGhlIOKAmG11bHRpLWxpbmUgY2hhbmdlc+KAmSBoZXJlLA0K
Pj4gbm90IOKAmHBhdGNoZXPigJkuDQo+IEkgc3RpbGwgZmluZCB0aGlzIHdvcmRpbmcgdmVy
eSBjb25mdXNpbmcuICBQZXJoYXBzICJUbyBhZGQgbmV3DQo+IGZ1bmN0aW9uYWxpdHksIGEg
cGF0Y2ggaXMgYWxtb3N0IGFsd2F5cyB0aGUgYmVzdCBjaG9pY2UuICBGb3Igb25lLCBpdA0K
PiBpcyBsaWtlbHkgdGhhdCB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgcmVxdWlyZXMgY2hhbmdp
bmcgbXVsdGlwbGUgbGluZXMNCj4gb2Ygc291cmNlIGNvZGUsIHdoaWNoIGlzIG1vcmUgY29u
dmVuaWVudCB0byBkbyB3aXRoIGEgcGF0Y2ggdGhhbiB3aXRoIGENCj4gc25pcHBldC4gIEZ1
cnRoZXIsIHBhdGNoZXMgY2FuIGJlIHRha2VuIGZyb20gYW5kIHN1Ym1pdHRlZCB0byB1cHN0
cmVhbXMNCj4gbW9yZSBlYXNpbHkuICBJZiB5b3VyIHBhdGNoIGhhcyBub3QgYmVlbiBzdWJt
aXR0ZWQgdG8gdXBzdHJlYW0sDQo+IGNvbnNpZGVyIGRvaW5nIHNvLiINCkl0IGxvc2VzIHNv
bWUgaW5mb3JtYXRpb24gKHRoYXQgcGF0Y2hlcyBhcmUgcHJlZmVycmVkKSBhbmQNCihhZnRl
ciByZS1hZGRpbmcgdGhlIGNvbmNsdXNpb24pIGlzIG1vcmUgdmVyYm9zZSwgd2hpY2ggYXBw
ZWFycw0KdG8gYmUgY29uc2lkZXJlZCB2ZXJ5IGltcG9ydGFudC4NCj4+PiBbLi4uXQ0KPj4+
IE92ZXJhbGwsIEknbSBub3QgY29udmluY2VkIHRoYXQgd2UgaGF2ZSBlbm91Z2ggZ3VpZGlu
ZyBwcmluY2lwbGVzDQo+Pj4gdG8gY2FsbCB0aGVtIHRoYXQsDQo+PiBJIGRvbid0IHRoaW5r
IHRoZXJlJ3MgYW55IGxvd2VyIGxpbWl0IG9uIGhvdyBtYW55IGd1aWRpbmcgcHJpbmNpcGxl
cw0KPj4gdG8gaGF2ZSwgZXhjZXB0IGZvciBwZXJoYXBzIDIgKGJlY2F1c2Ugb3RoZXJ3aXNl
IGl0IHNob3VsZCBoYXZlIGJlZW4NCj4+IHNpbmd1bGFyIG9yIHRoZXJlIGFyZW4ndCBhbnkp
LsKgIEF0IGhvdyBmZXcgZ3VpZGluZyBwcmluY2lwbGVzIHN0b3ANCj4+IHRoZSBndWlkaW5n
IHByaW5jaXBsZXMgZnJvbSBiZWluZyBndWlkaW5nIHByaW5jaXBsZXMgZm9yIHlvdSwgYW5k
DQo+PiB3aHk/DQo+Pg0KPj4gRm9yIGV4YW1wbGUsIG9uPGh0dHBzOi8vd3d3LmdudS5vcmcv
cGhpbG9zb3BoeS9mcmVlLXN3Lmh0bWw+LCBmb3VyDQo+PiBndWlkaW5nIHByaW5jaXBsZXMg
YXJlIG1lbnRpb25lZCAod2hpY2ggYXJlIG5hbWVkICdlc3NlbnRpYWwNCj4+IGZyZWVkb21z
JyB0aGVyZSksIGFuZA0KPj4gPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0d1aWRp
bmdfUHJpbmNpcGxlcz4gIGhhcyA1IOKAmEd1aWRpbmcNCj4+IFByaW5jaXBsZXPigJkuDQo+
IEFuIGVudW1lcmF0aW9uIG91Z2h0IHRvIGhhdmUgYXQgbGVhc3QgdGhyZWUgZWxlbWVudHMg
KG90aGVyd2lzZSBpdCdzDQo+IGp1c3QgYSBwYWlyKSwgYW5kIEkgdGhpbmsgaWYgd2UgZG8g
cHJvcGVyIGNvdW50aW5nIGFuZCBvbWl0IG5vLQ0KPiBicmFpbmVycywgc3VjaCBhcyB0aGUg
Im9ubHkgZnJlZSBzb2Z0d2FyZSIgcGFydCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4NCj4gbWVu
dGlvbmVkLCB3ZSBjb21lIHZlcnkgY2xvc2UgdG8gc2tpcnRpbmcgdGhhdCBsaW5lLg0KVGhl
ICJvbmx5IGZyZWUgc29mdHdhcmUiIGlzIG1lbnRpb25lZCBlbHNld2hlcmUsIHllcywgYnV0
IGl0IGlzIG9uZQ0Kb2YgdGhlIHByaW5jaXBsZXMgZm9yIGRlY2lkaW5nIGJldHdlZW4gc25p
cHBldHMsIHBoYXNlcyBhbmQgcGF0Y2hlcy4NCldoaWxlIHlvdSBjYWxsIGl0IGEgbm8tYnJh
aW5lciwgaXQgaXMgc29tZXRpbWVzIG5lZ2xlY3RlZCwgc28gaXQgc291bmRzDQppbXBvcnRh
bnQgdG8gbWUgdG8gZXhwbGljaXRseSBsaXN0IGl0Lg0KDQpNZXJnaW5nIHRoZSAzdGggYW5k
IDR0aCBAaXRlbSwgSSBjb3VudCA0IHByaW5jaXBsZXMsIHNvIGl0IGZpdHMgd2l0aA0KYW4g
ZW51bWVyYXRpb24uDQoNCkFsc28sIEknbSBub3QgZm9sbG93aW5nIHlvdXIgcG9pbnQgaGVy
ZSAtLSB5b3VyIGNvbXBsYWludCB3YXMgdGhhdCB0aGV5DQphcmVuJ3QgZ3VpZGluZyBwcmlu
Y2lwbGVzIChiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHRoZW0pLCBidXQgeW91cg0KcmVzcG9u
c2UgaXMgdGhhdCB0aGV5IG1pZ2h0IG5vdCBmb3JtIGFuIGVudW1lcmF0aW9uP8KgIFRoZXkg
YXJlIG5hbWVkDQp0aGUgZ3VpZGluZyBwcmluY2lwbGVzLCBub3QgdGhlIGd1aWRpbmcgZW51
bWVyYXRpb24uwqAgV2hhdCBoYXZlDQplbnVtZXJhdGlvbnMgdG8gZG8gd2l0aCBhbnl0aGlu
Zz8NCg0KPj4+IHdoaWNoIChhbG9uZyB3aXRoIGl0cyBzaGVlciBsZW5ndGgpIGlzIG15IG1h
aW4NCj4+PiBjb21wbGFpbnQgd2l0aCB0aGUgd2F5IHlvdSd2ZSBwaHJhc2VkIHRoaW5ncy4N
Cj4+IChJJ20gYXNzdW1pbmcgIml0cyA9IHRoZSBwYXRjaCBhcyBhIHdob2xlIiBoZXJlKQ0K
Pj4NCj4+IEkgY291bGQgcmVtb3ZlIGFub3RoZXIgc2VjdGlvbiBvZiB0aGUgbWFudWFsIHRv
IGNvbXBlbnNhdGUgZm9yIHRoZQ0KPj4gYWRkaXRpb25hbCBsZW5ndGgsIGJ1dCBJIGRvdWJ0
IHRoYXQncyB3aGF0IHlvdSBpbnRlbmRlZC7CoCBJIGRvIG5vdA0KPj4gc2VlIHRoZSBwcm9i
bGVtIHdpdGggdGhlIHNoZWVyIGxlbmd0aCAtLSB3ZSBoYXZlIGEgYml0IG9mIGENCj4+IGRv
Y3VtZW50YXRpb24gcHJvYmxlbSBpbiBHdWl4LCB0aGVyZSBpcyBsb3RzIG9mIHVzZWZ1bCBp
bmZvcm1hdGlvbg0KPj4gdGhhdCBpcyBjdXJyZW50bHkgdW5kb2N1bWVudGVkLg0KPj4gSSBk
byBub3QgdGhpbmsgdGhlcmUgaGF2ZSBiZWVuIGFueSBjb21wbGFpbnRzIGFib3V0IHRoZSBt
YW51YWwgYmVpbmcNCj4+IHRvbyBsb25nLCBpZiBhbnl0aGluZywgaXQncyB0b28gc2hvcnQu
DQo+IEkgcGVyc29uYWxseSB0ZW5kIHRvd2FyZHMgImxlc3MgdmVyYm9zZSIsIGhlbmNlIG15
IGNvbXBsYWludCBvZg0KPiBkZXNjcmliaW5nIHNvbWV0aGluZyB3aXRoIG1hbnkgd29yZHMg
dGhhdCBjb3VsZCBiZSBkZXNjcmliZWQgd2l0aA0KPiBmZXdlci4gIEEgc2VjdGlvbiBjYW4g
c3RpbGwgYmUgdG9vIGxvbmcgd2hpbGUgdGhlIGNoYXB0ZXIgYXJvdW5kIGl0IGlzDQo+IHRv
byBzaG9ydC4NCg0KRG8geW91IGhhdmUgYW55dGhpbmcgaW4gcGFydGljdWxhciBpbiBtaW5k
Pw0KDQo+PiBJJ3ZlIHdyaXR0ZW4gc29tZSBkb2N1bWVudGF0aW9uLCBpdCB3YXMgb3JpZ2lu
YWxseSBhIGJpdCBoYXJkIHRvDQo+PiBmb2xsb3cgc28gaW4gYSBuZXh0IHZlcnNpb24gSSd2
ZSByZXN0cnVjdHVyZWQgaXQgYSBiaXQgYW5kIGV4cGxhaW5lZA0KPj4gbW9yZSwgdGhpcyBy
ZXN0cnVjdHVyaW5nIGFuZCBleHBsYW5hdGlvbiBlbnRhaWxlZCBzb21lIGFkZGl0aW9uYWwN
Cj4+IGxlbmd0aC4NCj4+DQo+PiBUaGVyZSBoYWQgYmVlbiBzb21lIHByb3Bvc2FscyBmb3Ig
YWRkaXRpb25hbCBjYXNlcyB0byBkb2N1bWVudCwgc28NCj4+IHRoZXkgd2VyZSBhZGRlZCwg
aW5jcmVhc2luZyB0aGUgbGVuZ3RoLsKgIFlvdSBoYXZlIGFkZGVkIG5ldw0KPj4gaW5mb3Jt
YXRpb24gaXMgeW91ciBwYXRjaCwgaXQgd2FzIGNvbnNpZGVyZWQgdXNlZnVsIHNvIEkndmUN
Cj4+IGludGVncmF0ZWQgc29tZSBvZiBpdCBpbiBteSBwYXRjaCwgaW5jcmVhc2luZyB0aGUg
bGVuZ3RoLsKgIChJIGRpZG4ndA0KPj4gaW50ZWdyYXRlIGFsbCBvZiB0aGUgbmV3IHBhcnRz
LCBpZiBJIGRpZCwgaXQgd291bGQgaW5jcmVhc2UgZXZlbg0KPj4gZnVydGhlci7CoCAoSWYg
ZGVzaXJlZCwgaW4gY2FuIGludGVncmF0ZSB0aGUgcmVzdCwgYXQgY29zdCAgb2Ygc29tZQ0K
Pj4gdGltZS4pKS4NCj4gTXkgcGF0Y2ggZGlkIG5vdCBqdXN0IHN0YXRlIHNvbWUgdGhpbmdz
IHlvdSBtaXNzZWQsIGl0IGFsc28gb21pdHRlZA0KPiB0aGluZ3MgdGhhdCBJIHRoaW5rIGFy
ZSBlaXRoZXIgbm90IG5lY2Vzc2FyeSBvciBwcm9iYWJseSBiZXR0ZXINCj4gZG9jdW1lbnRl
ZCBlbHNld2hlcmUuDQpXaGF0IHBhcnRpY3VsYXIgdGhpbmdzIGRvIHlvdSBoYXZlIGluIG1p
bmQsIGFuZCB3aGVyZSBkbyB5b3UNCnRoaW5rIHRoZXkgc2hvdWxkIGJldHRlciBiZSBkb2N1
bWVudGVkP8KgIEkgY2FuIG1vdmUgdGhpbmdzDQphcm91bmQgYSBiaXQgYW5kIGFkZCBjcm9z
cy1yZWZlcmVuY2VzLg0KPj4gSSBkbyBub3Qgc2VlIHdoYXQgdGhlIHByb2JsZW0gaXMgd2l0
aCBhZGRpdGlvbmFsIGxlbmd0aCBhcyBsb25nIGFzDQo+PiB0aGlzIGFkZGl0aW9uYWwgbGVu
Z3RoIGNvbWVzIHdpdGggYWRkaXRpb25hbCB1c2VmdWwgaW5mb3JtYXRpb24gYW5kDQo+PiB0
aGUgbWFudWFsIGlzIHdlbGwtc3RydWN0dXJlZCAoZS5nLiB3aXRoIChzdWIpKHN1YilzZWN0
aW9ucywgY2hhcHRlcnMNCj4+IGFuZCBpbmRpY2VzKSAtLSB3ZSBkbyBub3QgaGF2ZSBhIHBh
Z2UgbGltaXQuDQo+Pg0KPj4gQXQgd29yc3QsIHBlcmhhcHMgdGhlIHNhbWUgaW5mb3JtYXRp
b24gY291bGQgcGVyaGFwcyBiZSBlbmNvZGVkIHdpdGgNCj4+IGZld2VyIHdvcmRzPyBJIGNv
dWxkIGNvbXBhcmUgdGhlIHR3byBwYXRjaGVzIHRvIHNlZSB3aGljaCBvbmUNCj4+IGZvcm11
bGF0ZXMgY2VydGFpbiBpbmZvcm1hdGlvbiBpbiB0aGUgZmV3ZXN0IHdvcmRzLCBhbmQgY2hv
b3NlIHRoZQ0KPj4gbGVhc3QgdmVyYm9zZSBvZiB0aGUgdHdvIGZvciBlYWNoIHBpZWNlIG9m
IGluZm9ybWF0aW9uIHRoYXQgaXMNCj4+IHByZXNlbnQgaW4gYm90aD8NCj4+DQo+PiBBbHNv
LCBjb21wYXJpbmcgdGhlIHR3byBwYXRjaGVzLCBteSBwYXRjaCBoYXMgNDAgbW9yZSBsaW5l
cywgYnV0DQo+PiBhYm91dCAyNSBvZiB0aGVtIGFyZSBmb3Igbm90aW5nIHRoZSBndWlkaW5n
IHByaW5jaXBsZXMgKHdoaWNoIGFyZQ0KPj4gYWJzZW50IGluIHlvdXIgcGF0Y2gpLg0KPj4g
Q29tcGVuc2F0aW5nIGZvciB0aGF0LCB0aGUgcGF0Y2hlcyBhcmUgYWJvdXQgdGhlIHNhbWUg
bGVuZ3RoLCBzbyBJIGRvDQo+PiBub3QgdGhpbmsgdGhhdCAnc2hlZXIgbGVuZ3RoJyBpcyBh
Y2N1cmF0ZSBoZXJlLg0KPiAyNSBsaW5lcyBjYWxsaW5nIGJhY2sgdG8gZWFybGllciBpbmZv
cm1hdGlvbiBhcmUsIGltaG8sIGFuIGluZGljYXRvcg0KPiB0aGF0IHRoZSBzZWN0aW9uIGlz
IHRvbyBsb25nLiAgSW1hZ2luZSB5b3UnZCBoYXZlIHR3ZW50eS1maXZlIGZ1bmN0aW9uDQo+
IGNhbGxzIHRvIGd1aWRpbmdfcHJpbmNpcGxlcyhuKSBpbiB5b3VyIHByb2dyYW0g4oCTIGF0
IHNvbWUgcG9pbnQsIHlvdSdkDQo+IHRyeSB0byBjYWNoZSB0aG9zZS4NCihkZWZpbmUgY2Fj
aGVkLWd1aWRpbmctcHJpbmNpcGxlcw0KIMKgIChkZWxheSAobGlzdCAoZ3VpZGluZy1wcmlu
Y2lwbGUtMCkNCiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBbLi4u
XQ0KIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChndWlkaW5nLXBy
aW5jaXBsZS0yNCkpKSkNCg0KQ2FjaGluZyB0aGUgZ3VpZGluZyBwcmluY2lwbGVzIGRvZXMg
bm90IHJlZHVjZSB0aGUgbGVuZ3RoLg0KDQpJIGRvbid0IHNlZSB0aGUgcHJvYmxlbSB3aXRo
IGNhbGxpbmcgYmFjayB0byBlYXJsaWVyIGluZm9ybWF0aW9uLg0KQWxzbywgaXQgaXNuJ3Qg
ZWFybGllciBpbmZvcm1hdGlvbiwgdGhlcmUgaXMgbm8gbmljZSBsaXN0IG9mIGd1aWRpbmcN
CnByaW5jaXBsZXMgYW55d2hlcmUgZWxzZS4NCg0KPj4+IEdvaW5nIGRvd24gdG8gc3Vic3Vi
c2VjdGlvbnMganVzdCB0byBmaW5kIG91dCB3aGVyZSBwYXRjaGVzIGFyZQ0KPj4+IGFwcHJv
cHJpYXRlLCBpcyBpbWhvIG92ZXJraWxsLg0KPj4gVGhlICdnb2luZyBkb3duIHRvIHN1YnN1
YnNlY3Rpb24nIGlzIHRoZSBjYXNlIGZvciB5b3VyIHBhdGNoIHRvbywNCj4+IHRob3VnaD8g
IEluIG15IGNhc2UsIGl0J3MgYSBzdWJzdWJzZWN0aW9uLCBpbiB5b3VyIGNhc2UgaXQncyBh
IHRhYmxlDQo+PiBlbnRyeSBpbnNpZGUgYSBzdWJzZWN0aW9uLCBib3RoIGFyZSB0aGUgc2Ft
ZSBsZXZlbCBvZiBuZXN0aW5nLg0KPiBUaGVzZSBhcmUgc3RpbGwgdHdvIHZlcnkgZGlmZmVy
ZW50IGtpbmRzIG9mIG5lc3RpbmcuICBBIHRhYmxlIGZpdHMgb250bw0KPiBhICh2aXJ0dWFs
KSBwYWdlIG1vcmUgZWFzaWx5IHRoYW4gc2V2ZXJhbCBzdWJzZWN0aW9ucy4NCkkgc3VwcG9z
ZSB0YWJsZSBpdGVtcyBtaWdodCB0YWtlIHR3byBsZXNzIGxpbmUgb3Igc28gbGVzcyB0aGFu
DQpzdWJzdWJzZWN0aW9ucywgYnV0IEkgZG9uJ3QgdGhpbmsgdGhhdCdzIHN1ZmZpY2llbnQg
cmVhc29uIHRvIHN0ZXANCmF3YXkgZnJvbSBhIG5pY2Ugc2VjdGlvbiBzdHJ1Y3R1cmUuDQo+
PiBBbHNvLCBpdCdzIGEgbWF0dGVyIG9mIGRpZmZlcmVudCBzdHJ1Y3R1cmUgLS0gaW4gbXkg
djIgYW5kIHYzIHBhdGNoLA0KPj4gSSBoYXZlIGEgJ3Byb2JsZW0gLT4gc29sdXRpb24nIHN0
cnVjdHVyZSAtLSB0aGUgaWRlYSBpcyB0aGF0IHRoZQ0KPj4gcGFja2FnZXMgaGFzIGEgcHJv
YmxlbSwgdGhleSBsb29rIGF0IHRoZSBzZWN0aW9uLCB0aGV5IHJlYWQgdGhlDQo+PiBzdWJz
dWJzZWN0aW9uIG5hbWVzLCBzZWxlY3QgdGhlDQo+PiBzdWJzdWJzZWN0aW9uIHRoYXQgbWF0
Y2hlcyB0aGVpciBwcm9ibGVtIGFuZCByZWFkIHRoZSBzb2x1dGlvbiAtLSBpbg0KPj4gc2hv
cnQsIHRoZSBpZGVhIGlzIHRvIHByb3ZpZGUgYSBzb2x1dGlvbiB0byB0aGUgcHJvYmxlbS4N
Cj4+DQo+PiBZb3VyIHN0cnVjdHVyZSBpcyB0aGUgb3RoZXIgd2F5IGFyb3VuZCAtLSBmb3Ig
c29sdXRpb25zIChwYXRjaGVzLA0KPj4gc25pcHBldHMsIHBoYXNlcyksIGl0IGdpdmVzIHRo
ZSBwZXJtaXR0ZWQgcHJvYmxlbXMgdG8gYXBwbHkgaXQgdG8uDQo+Pg0KPj4gU28geWVzLCB5
b3VyIHBhdGNoIGlzIG1vcmUgY29udmVuaWVudCBmb3IgZmluZGluZyBvdXQgd2hlcmUgcGF0
Y2hlcw0KPj4gYXJlIGFwcHJvcHJpYXRlLsKgIEkgZG8gbm90IHNlZSB0aGUgYmVuZWZpdCBv
ZiB0aGF0IHRob3VnaCAtLSBhIG5ldw0KPj4gY29udHJpYnV0b3IgcGFja2FnaW5nIGEgdGhp
bmcgd291bGRuJ3Qga25vdyBpbiBhZHZhbmNlIHdoaWNoDQo+PiBzb2x1dGlvbnMgY291bGQg
YmUgYXBwcm9wcmlhdGUgZm9yIHRoZW0gKHlvdXIgJ3NvbHV0aW9uIC0+IHByb2JsZW0nDQo+
PiBwYXRjaD8pLCByYXRoZXIsIHRoZXkgc3RhcnQgd2l0aCBhIHByb2JsZW0gYW5kIGFyZSBz
ZWFyY2hpbmcgZm9yIGFuDQo+PiBhcHByb3ByaWF0ZSBzb2x1dGlvbiAobXkgcHJvYmxlbS0+
c29sdXRpb24gcGF0Y2gpLg0KPiBJIHRoaW5rIHRoaXMgaWRlYSBjYW4gYmUgZGVidW5rZWQg
cHJldHR5IGVhc2lseS4gIElmIEkgZ2l2ZSB5b3UgYQ0KPiBoYW1tZXIgYW5kIEkgdGVsbCB5
b3UgInRoaXMgaXMgYSBoYW1tZXIsIHlvdSBjYW4gdXNlIGl0IHRvIHB1dCBuYWlscw0KPiBp
bnRvIGEgd2FsbCIsIGFuZCB5b3UgaGF2ZSBhIG5haWwgYW5kIHlvdSB3YW50IHRvIHB1dCBp
dCBpbnRvIGEgd2FsbCwNCj4geW91IHdvbid0IGdvICJvaCBubywgaG93ZXZlciB3aWxsIEkg
cHV0IHRoaXMgbmFpbCBpbnRvIGEgd2FsbD8iIOKAkyB5b3UNCj4gd2lsbCBzaW1wbHkgdXNl
IHRoZSBoYW1tZXIgdG8gZG8gc28uDQpUaGUgcGF0Y2ggZG9lcyB0aGlzLCBjdXJyZW50bHku
wqAgSXQgYWxyZWFkeSBwcm9wb3NlcyBhIG51bWJlciBvZiBoYW1tZXJzDQoocGF0Y2hlcywg
c25pcHBldHMgYW5kIHBoYXNlcykgYW5kIHB1cnBvc2VzIChhZGRpbmcgbmV3IGZ1bmN0aW9u
YWxpdHksDQpmaXhpbmcgdGVjaG5pY2FsIGlzc3VlcywgdW5idW5kbGluZywgLi4uKS4NCg0K
QWxzbywgdGhlIHNjZW5hcmlvICJvaCBubywgaG93ZXZlciB3aWxsIEkgcHV0IHRoaXMgbmFp
bCBpbnRvIGEgd2FsbCINCmFjdHVhbGx5IGhhcHBlbmVkIC0tIHNlZSB0aGUgU2hlcGhlcmQg
ZGlzY3Vzc2lvbiwgd2hlcmUgdGhlcmUgd2FzDQphIGxvdCBvZiBkaXNhZ3JlZW1lbnQgb24g
aG93IG5haWxzICg9IHNtYWxsIHdvcmstYXJvdW5kIGluIHRoZSBNYWtlZmlsZSkNCnNob3Vs
ZCBiZSBwdXQgaW4gd2FsbHMgKD0gcGF0Y2hlcywgc25pcHBldCwgcGhhc2U/KS7CoMKgIEl0
IHdhcyB0aGUgd2hvbGUNCnJlYXNvbiB0byBzdGFydCB3cml0aW5nIGEgZG9jdW1lbnRhdGlv
biBwYXRjaC4NCg0KPiBPZiBjb3Vyc2UsIGZvciB0aGlzIHRvIHdvcmsgSQ0KPiBhbHNvIGhh
dmUgdG8gdGVsbCB5b3UgKmhvdyogdG8gdXNlIGEgaGFtbWVyIHRvIHB1dCBuYWlscyBpbnRv
IGEgd2FsbCwNCj4gYnV0IHRoYXQncyBleGFjdGx5IHdoYXQgSSBkaWQgaW4gbXkgcGF0Y2gg
YnkgaW5zZXJ0aW5nIHRoZSByaWdodCBub3Rlcw0KPiBpbnRvIHRoZSBHdWl4IG1hbnVhbC4N
CkFsc28gYWxyZWFkeSB0aGUgY2FzZS4NCj4gTXkgc29sdXRpb24tPnByb2JsZW0gYXBwcm9h
Y2ggaGFzIHRoZSBiZW5lZml0LCB0aGF0IGZvbGtzIGNhbiBqdXN0IGdvDQo+IG92ZXIgYWxs
IHRoZSBzb2x1dGlvbnMsIGNoZWNrIGlmIHRoZWlyIHByb2JsZW0gZml0cywgYW5kIGFwcGx5
IHRoZSBvbmUNCj4gdGhhdCBzYXlzICJoZXJlLCB1c2UgdGhpcyIuDQoNCkEgcHJvYmxlbS0+
c29sdXRpb24gc3RydWN0dXJlIGlzIHVzZWZ1bCBmb3IgdGhhdCB0b28/DQoNCkFuZCBpdCBh
bHJlYWR5IGxpc3RzIGFsbCB0aGUgc29sdXRpb25zIChzbmlwcGV0cywgcGhhc2VzIGFuZCBw
YXRjaGVzKQ0KYW5kIGluZm9ybWF0aW9uIHRvIGRlY2lkZSB3aGV0aGVyIHRoZSBzb2x1dGlv
biBmaXRzIHRoZWlyIHByb2JsZW0NCih0aGUgZ3VpZGluZyBwcmluY2lwbGVzLCBhbmQgdGhl
IHdvcmtlZC1vdXQgY2FzZXMpLg0KDQo+IEFuZCBpZiB0aGV5IGRvbid0IGZpbmQgYW55dGhp
bmcsIHRoZXkgc2VlDQo+IHRoZSBoYW5keSBsaXR0bGUgbGluZSBhdCB0aGUgYm90dG9tIHNh
eWluZyAidXNlIHdoYXRldmVyIHlvdSB0aGluayBpcw0KPiBjb252ZW5pZW50Ii4NCk5vd2hl
cmUgZGlkIHRoZSBwYXRjaCBpbXBseSB0aGF0IHRoZSBsaXN0ZWQgY2FzZXMgd2VyZSBhbGwg
Y2FzZXMuIEluIGZhY3QsDQppbiB0d28gcGxhY2VzIGluIHRoZSBpbnRyb2R1Y3Rpb24gaXQg
aXMgaW1wbGllZCB0aGF0IHRoZSBleGFtcGxlcyBhcmUgbm90DQpleGhhdXN0aXZlLCBhbmQg
dGhhdCB0aGV5IGNhbiBjaG9vc2UgYWNjb3JkaW5nIHRvIGNvbnZlbmllbmNlOg0KDQogICog
4oCYVG8gbWFrZSB0aGluZ3MgbW9yZSBjb25jcmV0ZSBhbmQgdG8gcmVzb2x2ZSBjb25mbGlj
dHMgYmV0d2VlbiB0aGUNCiAgICBwcmluY2lwbGVzLCBhIF9mZXdfIGNhc2VzIGhhdmUgYmVl
biB3b3JrZWQgb3V0OuKAmQ0KDQogICAgKEVtcGhhc2lzIG9uIF9mZXdfIGFkZGVkKQ0KICAq
IOKAmFdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSB3YXkgdG8gZG8gc29tZXRoaW5nLCBj
aG9vc2Ugd2hpY2hldmVyDQogICAgbWV0aG9kDQogICAgaXMgdGhlIHNpbXBsZXN04oCZDQoN
CiAgICAoSXQgc2F5cyDigJhzaW1wbGVzdOKAmSBpbnN0ZWFkIG9mIOKAmG1vc3QgY29udmVu
aWVudOKAmSwgYnV0IHdoYXRldmVyLikNCg0KPiAgICBJIGFsc28gZXhwYW5kIGEgbGl0dGxl
IG9uIHRoZSBiZW5lZml0cyBhbmQgZHJhd2JhY2tzIG9mDQo+IHRoZXNlIGFwcHJvYWNoZXMg
YXMgeW91IHdvdWxkIHdoZW4gZGVzY3JpYmluZyBkZXNpZ24gcGF0dGVybnMuDQoNClRoaXMg
aXMgYWxzbyBkb25lIGluIG15IHBhdGNoLiBFLmcuLA0KDQogICog4oCYVGhlcmUgYXJlIGEg
ZmV3IGJlbmVmaXRzIGZvciBzbmlwcGV0cyBoZXJlOg0KDQogICAgV2hlbiB1c2luZyBzbmlw
cGV0cywgdGhlIGJ1bmRsZWQgbGlicmFyeSBkb2VzIG5vdCBvY2N1ciBpbiB0aGUgc291cmNl
DQoNCiAgICByZXR1cm5lZCBieSBAY29kZXtndWl4IGJ1aWxkIC0tc291cmNlfSwgc28gdXNl
cnMgYW5kIHJldmlld2VycyBkbyBub3QNCg0KICAgIGhhdmUgdG8gd29ycnkgYWJvdXQgd2hl
dGhlciB0aGUgYnVuZGxlZCBsaWJyYXJ5IGNvbnRhaW5zIG1hbHdhcmUsDQoNCiAgICB3aGV0
aGVyIGl0IGlzIG5vbi1mcmVlLCBpZiBpdCBjb250YWlucyBwcmUtY29tcGlsZWQgYmluYXJp
ZXMgLi4uIFRoZXJlDQoNCiAgICBhcmUgYWxzbyBsZXNzIGxpY2Vuc2luZyBjb25jZXJuczog
aWYgdGhlIGJ1bmRsZWQgbGlicmFyaWVzIGFyZSByZW1vdmVkLA0KDQogICAgaXQgYmVjb21l
cyBsZXNzIGxpa2VseSB0aGF0IHRoZSBsaWNlbnNpbmcgY29uZGl0aW9ucyBhcHBseSB0byBw
ZW9wbGUNCg0KICAgIHNoYXJpbmcgdGhlIHNvdXJjZSByZXR1cm5lZCBieSBAY29tbWFuZHtn
dWl4IGJ1aWxkIC0tc291cmNlfSwgZXNwZWNpYWxseSBpZg0KDQogICAgdGhlIGJ1bmRsZWQg
bGlicmFyeSBpcyBub3QgYWN0dWFsbHkgdXNlZCBvbiBHdWl4IHN5c3RlbXMuQGZvb3Rub3Rl
e1RoaXMNCg0KICAgIGlzIEBlbXBoe25vdH0gYSBjbGFpbSB0aGF0IHlvdSBjYW4gc2ltcGx5
IGlnbm9yZSB0aGUgbGljZW5zZXMgb2YNCg0KICAgIGxpYnJhcmllcyB3aGVuIHRoZXkgYXJl
IHVuYnVuZGxlZCBhbmQgcmVwbGFjZWQgYnkgR3VpeCBwYWNrYWdlcyAtLSB0aGVyZQ0KDQog
ICAgYXJlIGxlc3MgY29uY2VybnMsIG5vdCBub25lLn0NCg0KICAgIEFzIHN1Y2gsIHNuaXBw
ZXRzIGFyZSByZWNvbW1lbmRlZCBoZXJlLuKAmQ0KDQogICog4oCYRm9yIHBoYXNlcywgdGhl
IHByb2JsZW0gaXMgdGhhdCBwaGFzZXMgZG8gbm90IGluZmx1ZW5jZSB0aGUgcmVzdWx0IG9m
DQogICAgQGNvbW1hbmR7Z3VpeCBidWlsZCAtLXNvdXJjZX0u4oCZDQoNCj4gWW91ciBwcm9i
bGVtLT5zb2x1dGlvbiBhcHByb2FjaCBpbnN0ZWFkIGxlYXZlcyBwZW9wbGUgd29uZGVyaW5n
IHdoZW4NCj4gdGhlaXIgcGFydGljdWxhciB1c2UgY2FzZSBoYXMgbm90IGJlZW4gZGVzY3Jp
YmVkLg0KU2VlIG15IHJlcGx5IHRvIOKAmEFuZCBpZiB0aGV5IGRvbid0IGZpbmQgYW55dGhp
bmcsIHRoZXkgc2VlIHRoZSBoYW5keSBsaXR0bGUNCmxpbmUgYXQgdGhlIGJvdHRvbSBzYXlp
bmcgInVzZSB3aGF0ZXZlciB5b3UgdGhpbmsgaXMgY29udmVuaWVudOKAmS4NCj4gSXQgZ2l2
ZXMgdGhlbSBhIHNvbHV0aW9uIHJhdGhlciB0aGFuIHRoZSB0b29scyB0byBidWlsZCBzb2x1
dGlvbnMgd2l0aC4NCg0KSXQgZG9lcyBnaXZlIHRoZSB0b29sczogc25pcHBldHMsIHBhdGNo
ZXMgYW5kIHBoYXNlcy7CoCBBbmQgYXMgdG9vbHMNCmZvciBkZWNpZGluZyBiZXR3ZWVuIHRo
ZSB0aHJlZSBmb3Igbm90LXlldC1kb2N1bWVudGVkIGNhc2VzLCB0aGVyZSBhcmUNCnRoZSBn
dWlkaW5nIHByaW5jaXBsZXMuwqAgQXMgYSBkZW1vbnN0cmF0aW9uIG9uIGhvdyB0byB1c2Ug
dGhlc2UgZ3VpZGluZw0KcHJpbmNpcGxlcywgdmFyaW91cyBjYXNlcyBoYXZlIGJlZW4gd29y
a2VkIG91dCBiYXNlZCBvbiB0aGUgZ3VpZGluZw0KcHJpbmNpcGxlcy4NCg0KU3VtbWFyaXNl
ZCwgaXQgZ2l2ZXMgYm90aCB0aGUgdG9vbHMgX2FuZF8gdGhlIHNvbHV0aW9ucy4NCg0KQWxz
bywgImdpdmluZyB0aGUgdG9vbHMgdG8gYnVpbGQgc29sdXRpb25zIHdpdGgiIGRvZXMgbm90
IGhlbHAgd2l0aCB0aGUNCnByb2JsZW0gdGhhdCBJIGFpbWVkIHRvIHNvbHZlIC0tIHRoZXJl
IHdhcyBkaXNhZ3JlZW1lbnQgb24gd2hhdCB0aGUNCmFwcHJvcHJpYXRlIHRvb2xzIGFyZSAo
c2VlOiBTaGVwaGVyZCksIHNvIGl0IG5vdCBqdXN0IG5lZWRzIHRvIGdpdmUgdGhlDQp0b29s
cywgYnV0IGFsc28gdGhlIHNvbHV0aW9ucy4NCg0KR3JlZXRpbmdzLA0KTWF4aW1lDQo=
--------------fiI7W13Wn7SOCrw0E7hFeOyo
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<html>
  <head>
    <meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3DUTF=
-8">
  </head>
  <body>
    <p>On 07-09-2022 10:09, Liliana Marie Prikler wrote:<br>
    </p>
    <blockquote type=3D"cite"
      cite=3D"mid:44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN=
az.at">
      <pre class=3D"moz-quote-pre" wrap=3D"">Am Dienstag, dem 06.09.2022 =
um 22:21 +0200 schrieb Maxime Devos:
</pre>
      <blockquote type=3D"cite">
        <pre class=3D"moz-quote-pre" wrap=3D"">
</pre>
        <blockquote type=3D"cite">
          <pre class=3D"moz-quote-pre" wrap=3D"">We also avoid spelling o=
ut the non-free filename where possible,
preferring keep lists over remove lists, which this kind of patches
would be.
</pre>
        </blockquote>
        <pre class=3D"moz-quote-pre" wrap=3D"">Should we? I'm not seeing =
the point of that. I have not experienced
any such avoidance myself, see e.g. 'tennix', 'neverball' and
'shogun'.  It is, to my knowledge, not forbidden to mention non-free
software by name in code, as long as its not a recommendation
(explicit or implied).
</pre>
      </blockquote>
      <pre class=3D"moz-quote-pre" wrap=3D"">Indeed,  there is no hard ru=
le, hence "avoid" rather than "forbid".
</pre>
    </blockquote>
    <p>What I also meant is, that to my knowledge there is no soft rule
      either.</p>
    <p>Again, why should we avoid this, what's the point of that?<br>
    </p>
    <blockquote type=3D"cite"
      cite=3D"mid:44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN=
az.at">
      <blockquote type=3D"cite">
        <blockquote type=3D"cite">
          <pre class=3D"moz-quote-pre" wrap=3D"">
</pre>
          <blockquote type=3D"cite">
            <pre class=3D"moz-quote-pre" wrap=3D"">+@subsubsection Fixing=
 technical issues (compilation errors, test
failures, other bugs ...)
[...]
</pre>
          </blockquote>
          <pre class=3D"moz-quote-pre" wrap=3D"">I am pretty sure that mo=
st of these are *not* done in snippets, but
rather phases, if they only affect Guix.=C2=A0 In particular, grep for
failing-tests and you will find a few phases disabling them.
</pre>
        </blockquote>
        <pre class=3D"moz-quote-pre" wrap=3D"">I do not think that ignori=
ng a test counts as a bug fix.=C2=A0 I'll add it
to this subsubsection, at cost of some additional length.
</pre>
      </blockquote>
      <pre class=3D"moz-quote-pre" wrap=3D"">I do think it counts as "fix=
ing technical issues such as test
failures".
</pre>
    </blockquote>
    How does ignoring a test fix the technical issue identified by the
    test<br>
    (sometimes, the technical issue being a bug in the test itself)?<br>
    <blockquote type=3D"cite"
      cite=3D"mid:44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN=
az.at">
      <blockquote type=3D"cite">
        <blockquote type=3D"cite">
          <pre class=3D"moz-quote-pre" wrap=3D"">In fact, as far as files=
 that will not be installed are concerned,
I think phases ought to be preferred, because they're easier to
take away if an actual fix is made.
</pre>
        </blockquote>
        <pre class=3D"moz-quote-pre" wrap=3D"">I do not see a difference =
in hardness/easyness between removing a
phase and removing a snippet (both are just a matter of opening
an editor, pointing it at gnu/packages/... and removing a few lines),
though I do consider removing a patch to be slightly harder (because
gnu/local.mk is easy to forget).
</pre>
      </blockquote>
      <pre class=3D"moz-quote-pre" wrap=3D"">There still is the differenc=
e that phases are clearly delimited while
snippets are a block of code that shouldn't get too large.
</pre>
    </blockquote>
    <p>Snippets are delimited clearly as well, though, with the
      'snippet' field?</p>
    <p>And the limitations of snippet length and phases length are the
      same<br>
      -- no limits, though conciseness is appreciate as always.
    </p>
    <blockquote type=3D"cite"
      cite=3D"mid:44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN=
az.at">
      <blockquote type=3D"cite">
        <blockquote type=3D"cite">
          <pre class=3D"moz-quote-pre" wrap=3D"">For the store path embed=
ding, that's a rather roundabout way of
saying that contributers *ought to* embed store paths of certaing
things, such as commands invoked via exec et al.
</pre>
        </blockquote>
        <pre class=3D"moz-quote-pre" wrap=3D"">
It's not? It's kind of implied, yes, but the purpose isn't being a
'you should embed store paths' (subsub)section, but rather, 'if you
go embedding store paths (at least for fixing a technical issue), do
it in a phase'.

I'm not following what the complaint is, I suppose a section could be
added somewhere to properly document the 'embedding store file names'
practice, and insert a cross-reference, but that wasn't the purpose
of the patch and going by later responses, you seem opposed to making
things longer.

The alternative would be to remove this information, but then
valuable information would be lost (there had been some cases where
store file names were embedded in origin).
</pre>
      </blockquote>
      <pre class=3D"moz-quote-pre" wrap=3D"">I think my version at least =
hinted at this practice in a more concise
way, so it's not impossible to mention. [...]</pre>
    </blockquote>
    <p>I agree it's possible -- as I replied previously:</p>
    <p>
      <blockquote type=3D"cite">
        <pre class=3D"moz-quote-pre" wrap=3D"">I suppose a section could =
be added somewhere to properly document the
'embedding store file names' practice, and insert a cross-reference,</pre=
>
      </blockquote>
      I don't think documenting the how of the practice should be done<br=
>
      in this section, properly explaining 'search-input-file' /
      'search-input-directory',<br>
      'inputs / native-inputs', 'bash' being an implicit input but you
      still<br>
      have to add it to 'inputs' in some cases because of
      cross-compilation,<br>
      this-package-input and this-package-native-input ... would make
      the<br>
      subsubsection a bit too long I think, distracting from other
      situations,<br>
      hence the proposal for a cross-reference.</p>
    <p>How about leaving the 'how to embed store file names' for a
      separate<br>
      documentation patch and section, adding a cross-reference later?<br=
>
    </p>
    <blockquote type=3D"cite"
      cite=3D"mid:44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN=
az.at">
      <blockquote type=3D"cite">
        <blockquote type=3D"cite">
          <blockquote type=3D"cite">
            <pre class=3D"moz-quote-pre" wrap=3D"">Otherwise, if the stor=
e
+file name were embedded in the source, the result of
@command{guix build
+--source} would be unusable on non-Guix systems and also likely
unusable
+on Guix systems of another architecture.
</pre>
          </blockquote>
          <pre class=3D"moz-quote-pre" wrap=3D"">Why are you repeating a =
guiding principle?
</pre>
        </blockquote>
        <pre class=3D"moz-quote-pre" wrap=3D"">I'm showing why, in this c=
ase, a phase must be used, by noting that
not doing so would be contrary to one of the principles.

If not repeating the principle is desired, I could perhaps number
them, and refer to the principles by number instead of restating
them? Would reduce the length a little.
</pre>
      </blockquote>
      <pre class=3D"moz-quote-pre" wrap=3D"">I think calling back to a gu=
iding principle in and of itself shows that
the section has grown too long to remember it by the point you come to
this example,</pre>
    </blockquote>
    This has nothing to do with length and remembering, but rather with<b=
r>
    explaining why a phase must be used -- to explain that, I state
    which<br>
    principle applies (as mentioned previously). If I removed the<br>
    explanations, I would just be stating how to do things, without
    giving<br>
    a logical reasoning on the 'why'.<br>
    <blockquote type=3D"cite"
      cite=3D"mid:44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN=
az.at">
      <pre class=3D"moz-quote-pre" wrap=3D"">and I think that's more prob=
lematic than merely the
callback.  If you didn't need to divide this into subsubsections, you
could introduce the guiding principles in a way that feels more
natural.
</pre>
    </blockquote>
    I consider it more natural to have the 'guiding principles' _before_
    the<br>
    concrete cases, as they are meant to be 'guiding' and 'principles'.=C2=
=A0
    It's<br>
    like 'starting from first principles', there introducing the first
    principles<br>
    as you go is ad-hoc.<br>
    <p>The guiding principles also need to be outside the examples, in
      case<br>
      one of the examples doesn't apply to the packager's use case, such<=
br>
      that they can fall-back to the guiding principles.<br>
    </p>
    <p>Also, in your patch you are dividing things in subsubsections as
      well,<br>
      just under a different name and different representation (table
      entries<br>
      in a subsection), as mentioned previously.<br>
    </p>
    <blockquote type=3D"cite"
      cite=3D"mid:44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN=
az.at">
      <blockquote type=3D"cite">
        <blockquote type=3D"cite">
          <blockquote type=3D"cite">
            <pre class=3D"moz-quote-pre" wrap=3D"">+@subsubsection Adding=
 new functionality
+To add new functionality, a patch is almost always the most
convenient
+choice of the three -- patches are usually multi-line changes,
which
are
+convenient to do with patches and inconvenient to do with phases
or
+snippets.
</pre>
          </blockquote>
          <pre class=3D"moz-quote-pre" wrap=3D"">Uhm, what?=C2=A0 Patches=
 are the preferred form of patches?
</pre>
        </blockquote>
        <pre class=3D"moz-quote-pre" wrap=3D"">
No, I meant that patches are (usually) the preferred method for
adding new functionality, and that multi-line changes are convenient
to do with patches.=C2=A0 =E2=80=98which=E2=80=99 refers to the =E2=80=98=
multi-line changes=E2=80=99 here,
not =E2=80=98patches=E2=80=99.
</pre>
      </blockquote>
      <pre class=3D"moz-quote-pre" wrap=3D"">I still find this wording ve=
ry confusing.  Perhaps "To add new
functionality, a patch is almost always the best choice.  For one, it
is likely that the new functionality requires changing multiple lines
of source code, which is more convenient to do with a patch than with a
snippet.  Further, patches can be taken from and submitted to upstreams
more easily.  If your patch has not been submitted to upstream,
consider doing so."
</pre>
    </blockquote>
    It loses some information (that patches are preferred) and<br>
    (after re-adding the conclusion) is more verbose, which appears<br>
    to be considered very important.<br>
    <blockquote type=3D"cite"
      cite=3D"mid:44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN=
az.at">
      <blockquote type=3D"cite">
        <blockquote type=3D"cite">
          <pre class=3D"moz-quote-pre" wrap=3D"">[...]
Overall, I'm not convinced that we have enough guiding principles
to call them that,
</pre>
        </blockquote>
        <pre class=3D"moz-quote-pre" wrap=3D"">
I don't think there's any lower limit on how many guiding principles
to have, except for perhaps 2 (because otherwise it should have been
singular or there aren't any).=C2=A0 At how few guiding principles stop
the guiding principles from being guiding principles for you, and
why?

For example, on <a class=3D"moz-txt-link-rfc2396E" href=3D"https://www.gn=
u.org/philosophy/free-sw.html">&lt;https://www.gnu.org/philosophy/free-sw=
=2Ehtml&gt;</a>, four=20
guiding principles are mentioned (which are named 'essential
freedoms' there), and
<a class=3D"moz-txt-link-rfc2396E" href=3D"https://en.wikipedia.org/wiki/=
Guiding_Principles">&lt;https://en.wikipedia.org/wiki/Guiding_Principles&=
gt;</a> has 5 =E2=80=98Guiding=20
Principles=E2=80=99.
</pre>
      </blockquote>
      <pre class=3D"moz-quote-pre" wrap=3D"">An enumeration ought to have=
 at least three elements (otherwise it's
just a pair), and I think if we do proper counting and omit no-
brainers, such as the "only free software" part that has already been
mentioned, we come very close to skirting that line.
</pre>
    </blockquote>
    The "only free software" is mentioned elsewhere, yes, but it is one<b=
r>
    of the principles for deciding between snippets, phases and patches.<=
br>
    While you call it a no-brainer, it is sometimes neglected, so it
    sounds<br>
    important to me to explicitly list it.
    <p>Merging the 3th and 4th @item, I count 4 principles, so it fits
      with<br>
      an enumeration.</p>
    <p>Also, I'm not following your point here -- your complaint was
      that they<br>
      aren't guiding principles (based on the number of them), but your<b=
r>
      response is that they might not form an enumeration?=C2=A0 They are=

      named<br>
      the guiding principles, not the guiding enumeration.=C2=A0 What hav=
e<br>
      enumerations to do with anything?<br>
    </p>
    <blockquote type=3D"cite"
      cite=3D"mid:44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN=
az.at">
      <blockquote type=3D"cite">
        <blockquote type=3D"cite">
          <pre class=3D"moz-quote-pre" wrap=3D"">which (along with its sh=
eer length) is my main
complaint with the way you've phrased things.
</pre>
        </blockquote>
        <pre class=3D"moz-quote-pre" wrap=3D"">
(I'm assuming "its =3D the patch as a whole" here)

I could remove another section of the manual to compensate for the
additional length, but I doubt that's what you intended.=C2=A0 I do not
see the problem with the sheer length -- we have a bit of a
documentation problem in Guix, there is lots of useful information
that is currently undocumented.
I do not think there have been any complaints about the manual being
too long, if anything, it's too short.
</pre>
      </blockquote>
      <pre class=3D"moz-quote-pre" wrap=3D"">I personally tend towards "l=
ess verbose", hence my complaint of
describing something with many words that could be described with
fewer.  A section can still be too long while the chapter around it is
too short.</pre>
    </blockquote>
    <p>Do you have anything in particular in mind?<br>
    </p>
    <blockquote type=3D"cite"
      cite=3D"mid:44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN=
az.at">
      <blockquote type=3D"cite">
        <pre class=3D"moz-quote-pre" wrap=3D"">I've written some document=
ation, it was originally a bit hard to
follow so in a next version I've restructured it a bit and explained
more, this restructuring and explanation entailed some additional
length.

There had been some proposals for additional cases to document, so
they were added, increasing the length.=C2=A0 You have added new
information is your patch, it was considered useful so I've
integrated some of it in my patch, increasing the length.=C2=A0 (I didn't=

integrate all of the new parts, if I did, it would increase even
further.=C2=A0 (If desired, in can integrate the rest, at cost  of some
time.)).
</pre>
      </blockquote>
      <pre class=3D"moz-quote-pre" wrap=3D"">My patch did not just state =
some things you missed, it also omitted
things that I think are either not necessary or probably better
documented elsewhere.
</pre>
    </blockquote>
    What particular things do you have in mind, and where do you<br>
    think they should better be documented?=C2=A0 I can move things<br>
    around a bit and add cross-references.
    <blockquote type=3D"cite"
      cite=3D"mid:44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN=
az.at">
      <blockquote type=3D"cite">
        <pre class=3D"moz-quote-pre" wrap=3D"">I do not see what the prob=
lem is with additional length as long as
this additional length comes with additional useful information and
the manual is well-structured (e.g. with (sub)(sub)sections, chapters
and indices) -- we do not have a page limit.

At worst, perhaps the same information could perhaps be encoded with
fewer words? I could compare the two patches to see which one
formulates certain information in the fewest words, and choose the
least verbose of the two for each piece of information that is
present in both?

Also, comparing the two patches, my patch has 40 more lines, but
about 25 of them are for noting the guiding principles (which are
absent in your patch).
Compensating for that, the patches are about the same length, so I do
not think that 'sheer length' is accurate here.
</pre>
      </blockquote>
      <pre class=3D"moz-quote-pre" wrap=3D"">25 lines calling back to ear=
lier information are, imho, an indicator
that the section is too long.  Imagine you'd have twenty-five function
calls to guiding_principles(n) in your program =E2=80=93 at some point, y=
ou'd
try to cache those.
</pre>
    </blockquote>
    (define cached-guiding-principles<br>
    =C2=A0 (delay (list (guiding-principle-0)<br>
    =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 [...]<br>
    =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (guiding-principle-24))))
    <p>Caching the guiding principles does not reduce the length.</p>
    <p>I don't see the problem with calling back to earlier information.<=
br>
      Also, it isn't earlier information, there is no nice list of
      guiding<br>
      principles anywhere else.<br>
    </p>
    <blockquote type=3D"cite"
      cite=3D"mid:44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN=
az.at">
      <blockquote type=3D"cite">
        <blockquote type=3D"cite">
          <pre class=3D"moz-quote-pre" wrap=3D"">Going down to subsubsect=
ions just to find out where patches are
appropriate, is imho overkill.
</pre>
        </blockquote>
        <pre class=3D"moz-quote-pre" wrap=3D"">
The 'going down to subsubsection' is the case for your patch too,
though?  In my case, it's a subsubsection, in your case it's a table
entry inside a subsection, both are the same level of nesting.
</pre>
      </blockquote>
      <pre class=3D"moz-quote-pre" wrap=3D"">These are still two very dif=
ferent kinds of nesting.  A table fits onto
a (virtual) page more easily than several subsections.
</pre>
    </blockquote>
    I suppose table items might take two less line or so less than<br>
    subsubsections, but I don't think that's sufficient reason to step<br=
>
    away from a nice section structure.<br>
    <blockquote type=3D"cite"
      cite=3D"mid:44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN=
az.at">
      <blockquote type=3D"cite">
        <pre class=3D"moz-quote-pre" wrap=3D"">Also, it's a matter of dif=
ferent structure -- in my v2 and v3 patch,
I have a 'problem -&gt; solution' structure -- the idea is that the
packages has a problem, they look at the section, they read the
subsubsection names, select the
subsubsection that matches their problem and read the solution -- in
short, the idea is to provide a solution to the problem.

Your structure is the other way around -- for solutions (patches,
snippets, phases), it gives the permitted problems to apply it to.

So yes, your patch is more convenient for finding out where patches
are appropriate.=C2=A0 I do not see the benefit of that though -- a new
contributor packaging a thing wouldn't know in advance which
solutions could be appropriate for them (your 'solution -&gt; problem'
patch?), rather, they start with a problem and are searching for an
appropriate solution (my problem-&gt;solution patch).
</pre>
      </blockquote>
      <pre class=3D"moz-quote-pre" wrap=3D"">I think this idea can be deb=
unked pretty easily.  If I give you a
hammer and I tell you "this is a hammer, you can use it to put nails
into a wall", and you have a nail and you want to put it into a wall,
you won't go "oh no, however will I put this nail into a wall?" =E2=80=93=
 you
will simply use the hammer to do so.</pre>
    </blockquote>
    The patch does this, currently.=C2=A0 It already proposes a number of=

    hammers<br>
    (patches, snippets and phases) and purposes (adding new
    functionality,<br>
    fixing technical issues, unbundling, ...).
    <p>Also, the scenario "oh no, however will I put this nail into a
      wall"<br>
      actually happened -- see the Shepherd discussion, where there was<b=
r>
      a lot of disagreement on how nails (=3D small work-around in the
      Makefile)<br>
      should be put in walls (=3D patches, snippet, phase?).=C2=A0=C2=A0 =
It was the
      whole<br>
      reason to start writing a documentation patch.<br>
    </p>
    <blockquote type=3D"cite"
      cite=3D"mid:44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN=
az.at">
      <pre class=3D"moz-quote-pre" wrap=3D"">Of course, for this to work =
I
also have to tell you *how* to use a hammer to put nails into a wall,
but that's exactly what I did in my patch by inserting the right notes
into the Guix manual.
</pre>
    </blockquote>
    Also already the case.
    <blockquote type=3D"cite"
      cite=3D"mid:44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN=
az.at">
      <pre class=3D"moz-quote-pre" wrap=3D"">My solution-&gt;problem appr=
oach has the benefit, that folks can just go
over all the solutions, check if their problem fits, and apply the one
that says "here, use this".</pre>
    </blockquote>
    <p>A problem-&gt;solution structure is useful for that too?</p>
    <p>And it already lists all the solutions (snippets, phases and
      patches)<br>
      and information to decide whether the solution fits their problem<b=
r>
      (the guiding principles, and the worked-out cases).<br>
    </p>
    <blockquote type=3D"cite"
      cite=3D"mid:44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN=
az.at">
      <pre class=3D"moz-quote-pre" wrap=3D"">And if they don't find anyth=
ing, they see
the handy little line at the bottom saying "use whatever you think is
convenient".</pre>
    </blockquote>
    Nowhere did the patch imply that the listed cases were all cases. In
    fact,<br>
    in two places in the introduction it is implied that the examples
    are not<br>
    exhaustive, and that they can choose according to convenience:<br>
    <ul>
      <li>=E2=80=98To make things more concrete and to resolve conflicts =
between
        the<br>
        principles, a _few_ cases have been worked out:=E2=80=99<br>
        <br>
        (Emphasis on _few_ added)</li>
      <li>=E2=80=98When there is more than one way to do something, choos=
e
        whichever method<br>
        is the simplest=E2=80=99<br>
        <br>
        (It says =E2=80=98simplest=E2=80=99 instead of =E2=80=98most conv=
enient=E2=80=99, but whatever.)<br>
      </li>
    </ul>
    <blockquote type=3D"cite"
      cite=3D"mid:44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN=
az.at">
      <pre class=3D"moz-quote-pre" wrap=3D"">  I also expand a little on =
the benefits and drawbacks of
these approaches as you would when describing design patterns.</pre>
    </blockquote>
    <p>This is also done in my patch. E.g.,</p>
    <ul>
      <li>=E2=80=98There are a few benefits for snippets here:<br>
        <br>
        <div class=3D"line diff addition">
          <pre>When using snippets, the bundled library does not occur in=
 the source</pre>
        </div>
        <div class=3D"line diff addition">
          <pre>returned by @code{guix build --source}, so users and revie=
wers do not</pre>
        </div>
        <div class=3D"line diff addition">
          <pre>have to worry about whether the bundled library contains m=
alware,</pre>
        </div>
        <div class=3D"line diff addition">
          <pre>whether it is non-free, if it contains pre-compiled binari=
es ... There</pre>
        </div>
        <div class=3D"line diff addition">
          <pre>are also less licensing concerns: if the bundled libraries=
 are removed,</pre>
        </div>
        <div class=3D"line diff addition">
          <pre>it becomes less likely that the licensing conditions apply=
 to people</pre>
        </div>
        <div class=3D"line diff addition">
          <pre>sharing the source returned by @command{guix build --sourc=
e}, especially if</pre>
        </div>
        <div class=3D"line diff addition">
          <pre>the bundled library is not actually used on Guix systems.@=
footnote{This</pre>
        </div>
        <div class=3D"line diff addition">
          <pre>is @emph{not} a claim that you can simply ignore the licen=
ses of</pre>
        </div>
        <div class=3D"line diff addition">
          <pre>libraries when they are unbundled and replaced by Guix pac=
kages -- there</pre>
        </div>
        <div class=3D"line diff addition">
          <pre>are less concerns, not none.}</pre>
        </div>
        <div class=3D"line diff addition">
          <pre>
</pre>
        </div>
        <div class=3D"line diff addition">
          <pre>As such, snippets are recommended here.=E2=80=99</pre>
        </div>
      </li>
      <li>=E2=80=98For phases, the problem is that phases do not influenc=
e the
        result of<br>
        @command{guix build --source}.=E2=80=99
      </li>
    </ul>
    <blockquote type=3D"cite"
      cite=3D"mid:44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN=
az.at">
      <pre class=3D"moz-quote-pre" wrap=3D"">Your problem-&gt;solution ap=
proach instead leaves people wondering when
their particular use case has not been described.</pre>
    </blockquote>
    See my reply to =E2=80=98And if they don't find anything, they see th=
e handy
    little<br>
    line at the bottom saying "use whatever you think is convenient=E2=80=
=99.
    <blockquote type=3D"cite"
      cite=3D"mid:44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN=
az.at">
      <pre class=3D"moz-quote-pre" wrap=3D"">It gives them a solution rat=
her than the tools to build solutions with.</pre>
    </blockquote>
    <p>It does give the tools: snippets, patches and phases.=C2=A0 And as=

      tools<br>
      for deciding between the three for not-yet-documented cases, there
      are<br>
      the guiding principles.=C2=A0 As a demonstration on how to use thes=
e
      guiding<br>
      principles, various cases have been worked out based on the
      guiding<br>
      principles.</p>
    <p>Summarised, it gives both the tools _and_ the solutions.<br>
    </p>
    <p>Also, "giving the tools to build solutions with" does not help
      with the<br>
      problem that I aimed to solve -- there was disagreement on what
      the<br>
      appropriate tools are (see: Shepherd), so it not just needs to
      give the<br>
      tools, but also the solutions.<br>
    </p>
    Greetings,<br>
    Maxime<br>
  </body>
</html>

--------------fiI7W13Wn7SOCrw0E7hFeOyo--

--------------lT8JlkWSD5VQXD90Dz1boRGV
Content-Type: application/pgp-keys; name="OpenPGP_0x49E3EE22191725EE.asc"
Content-Disposition: attachment; filename="OpenPGP_0x49E3EE22191725EE.asc"
Content-Description: OpenPGP public key
Content-Transfer-Encoding: quoted-printable

-----BEGIN PGP PUBLIC KEY BLOCK-----

xjMEX4ch6BYJKwYBBAHaRw8BAQdANPb/d6MrGnGi5HyvODCkBUJPRjiFQcRU5V+m
xvMaAa/NL01heGltZSBEZXZvcyA8bWF4aW1lLmRldm9zQHN0dWRlbnQua3VsZXV2
ZW4uYmU+wpAEExYIADgWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCX4ch6AIbAwUL
CQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRBJ4+4iGRcl7japAQC3opZ2KGWzWmRc
/gIWSu0AAcfMwyinFEEPa/QhUt2CogD/e2RdF4CYAgaRHJJmZ9WU7piKbLZ7llB4
LzgezVDHggzNJU1heGltZSBEZXZvcyA8bWF4aW1lZGV2b3NAdGVsZW5ldC5iZT7C
kAQTFggAOBYhBMHzPuIMUo/bfdcBH0nj7iIZFyXuBQJf56ycAhsDBQsJCAcDBRUK
CQgLBRYCAwEAAh4BAheAAAoJEEnj7iIZFyXujpQBAKV1SwDDl4f24rXciDlB9L8W
ycZt30CgbewMSRQk4mvbAP9dFMbVVixYBd6C8cfhR+NsOBGiOJnQABlUmgNuqGFJ
Dc44BF+HIegSCisGAQQBl1UBBQEBB0BOlzIWiJzgobMF6/cqwLaLk7jIcFSZ++c0
k9cCNT6YXwMBCAfCeAQYFggAIBYhBMHzPuIMUo/bfdcBH0nj7iIZFyXuBQJfhyHo
AhsMAAoJEEnj7iIZFyXuMr0BAJc8cl5PGvVmVuSQVKjleNl4DK1/XAaPAYPe34AE
fZJPAP9IqLCQhH/FeJanHqBP8gNdGNI2qn8RnnLVfRJgUjZ1BA=3D=3D
=3DOVqp
-----END PGP PUBLIC KEY BLOCK-----

--------------lT8JlkWSD5VQXD90Dz1boRGV--

--------------N4yS7ui6DXqk1oJogkEaW0eQ--

--------------bYZznqRF4e00yv03Q3Otn4Cv
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wnsEABYIACMWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYxnOKwUDAAAAAAAKCRBJ4+4iGRcl7oE4
AQDtdxmMVTnJacU9WxjP4u0o+5DrGsvJxnT41XavjvSmfgD/UucFg4ulPdrlNij3rvlwEFU2y+1/
/n00uv4kVb+vswI=
=7etQ
-----END PGP SIGNATURE-----

--------------bYZznqRF4e00yv03Q3Otn4Cv--




Information forwarded to guix-patches@HIDDEN:
bug#57598; Package guix-patches. Full text available.

Message received at 57598 <at> debbugs.gnu.org:


Received: (at 57598) by debbugs.gnu.org; 7 Sep 2022 08:10:14 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Sep 07 04:10:14 2022
Received: from localhost ([127.0.0.1]:53313 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1oVq8T-0001Q4-48
	for submit <at> debbugs.gnu.org; Wed, 07 Sep 2022 04:10:14 -0400
Received: from mailrelay.tugraz.at ([129.27.2.202]:30599)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <liliana.prikler@HIDDEN>) id 1oVq8N-0001Po-Kw
 for 57598 <at> debbugs.gnu.org; Wed, 07 Sep 2022 04:10:12 -0400
Received: from lprikler-laptop.ist.intra (gw.ist.tugraz.at [129.27.202.101])
 by mailrelay.tugraz.at (Postfix) with ESMTPSA id 4MMw0Q5pwSz3wVf;
 Wed,  7 Sep 2022 10:09:58 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tugraz.at;
 s=mailrelay; t=1662538198;
 bh=lu8bYcjyUDFPErl1qLcQyrpo/NtDhSTJfp6UDgESjIo=;
 h=Subject:From:To:Date:In-Reply-To:References;
 b=ZtnApfojCspEyGEBp5JYBzpKqvZ7CByrGzCEM9f3/Yg/dRujoaHbhnc/A8jVB6hkF
 rMTJ8axgO2oQpHb1fzCxak8hLYRQ2aJgK70jLvvlSB8LXOY4bwyWT1f6N17NkWgLJE
 E4d2pL1NWgm94n+3pzF0UJHLqpv51S+s0owZgbaY=
Message-ID: <44573c52ae3781b85f76d113735f3f85b82548bf.camel@HIDDEN>
Subject: Re: [PATCH] doc: Update contribution guidelines on patches, etc.
From: Liliana Marie Prikler <liliana.prikler@HIDDEN>
To: Maxime Devos <maximedevos@HIDDEN>, 57598 <at> debbugs.gnu.org
Date: Wed, 07 Sep 2022 10:09:58 +0200
In-Reply-To: <d0a48b72-c62b-cc97-e399-22abc0af182d@HIDDEN>
References: <20220905160048.18173-1-maximedevos@HIDDEN>
 <0f78953d57d8f66a934baf518b7c9e3247b580fd.camel@HIDDEN>
 <d0a48b72-c62b-cc97-e399-22abc0af182d@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
User-Agent: Evolution 3.42.1 
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-TUG-Backscatter-control: waObeELIUl4ypBWmcn/8wQ
X-Spam-Scanner: SpamAssassin 3.003001 
X-Spam-Score-relay: -0.4
X-Scanned-By: MIMEDefang 2.74 on 129.27.10.116
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 57598
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Am Dienstag, dem 06.09.2022 um 22:21 +0200 schrieb Maxime Devos:
> 
> > We also avoid spelling out the non-free filename where possible,
> > preferring keep lists over remove lists, which this kind of patches
> > would be.
> Should we? I'm not seeing the point of that. I have not experienced
> any such avoidance myself, see e.g. 'tennix', 'neverball' and
> 'shogun'.  It is, to my knowledge, not forbidden to mention non-free
> software by name in code, as long as its not a recommendation
> (explicit or implied).
Indeed,  there is no hard rule, hence "avoid" rather than "forbid".

> > 
> > > +@subsubsection Fixing technical issues (compilation errors, test
> > > failures, other bugs ...)
> > > [...]
> > I am pretty sure that most of these are *not* done in snippets, but
> > rather phases, if they only affect Guix.  In particular, grep for
> > failing-tests and you will find a few phases disabling them.
> I do not think that ignoring a test counts as a bug fix.  I'll add it
> to this subsubsection, at cost of some additional length.
I do think it counts as "fixing technical issues such as test
failures".

> > In fact, as far as files that will not be installed are concerned,
> > I think phases ought to be preferred, because they're easier to
> > take away if an actual fix is made.
> I do not see a difference in hardness/easyness between removing a
> phase and removing a snippet (both are just a matter of opening
> an editor, pointing it at gnu/packages/... and removing a few lines),
> though I do consider removing a patch to be slightly harder (because
> gnu/local.mk is easy to forget).
There still is the difference that phases are clearly delimited while
snippets are a block of code that shouldn't get too large.

> > For the store path embedding, that's a rather roundabout way of
> > saying that contributers *ought to* embed store paths of certaing
> > things, such as commands invoked via exec et al.
> 
> It's not? It's kind of implied, yes, but the purpose isn't being a
> 'you should embed store paths' (subsub)section, but rather, 'if you
> go embedding store paths (at least for fixing a technical issue), do
> it in a phase'.
> 
> I'm not following what the complaint is, I suppose a section could be
> added somewhere to properly document the 'embedding store file names'
> practice, and insert a cross-reference, but that wasn't the purpose
> of the patch and going by later responses, you seem opposed to making
> things longer.
> 
> The alternative would be to remove this information, but then
> valuable information would be lost (there had been some cases where
> store file names were embedded in origin).
I think my version at least hinted at this practice in a more concise
way, so it's not impossible to mention.  Not embedding store paths *is*
a technical issue, because it'll cause the installed program to fail
and most people new to Guix will then just go "oh, let's propagate gcc-
toolchain".

> > > Otherwise, if the store
> > > +file name were embedded in the source, the result of
> > > @command{guix build
> > > +--source} would be unusable on non-Guix systems and also likely
> > > unusable
> > > +on Guix systems of another architecture.
> > Why are you repeating a guiding principle?
> I'm showing why, in this case, a phase must be used, by noting that
> not doing so would be contrary to one of the principles.
> 
> If not repeating the principle is desired, I could perhaps number
> them, and refer to the principles by number instead of restating
> them? Would reduce the length a little.
I think calling back to a guiding principle in and of itself shows that
the section has grown too long to remember it by the point you come to
this example, and I think that's more problematic than merely the
callback.  If you didn't need to divide this into subsubsections, you
could introduce the guiding principles in a way that feels more
natural.

> > > +@subsubsection Adding new functionality
> > > +To add new functionality, a patch is almost always the most
> > > convenient
> > > +choice of the three -- patches are usually multi-line changes,
> > > which
> > > are
> > > +convenient to do with patches and inconvenient to do with phases
> > > or
> > > +snippets.
> > Uhm, what?  Patches are the preferred form of patches?
> 
> No, I meant that patches are (usually) the preferred method for
> adding new functionality, and that multi-line changes are convenient
> to do with patches.  ‘which’ refers to the ‘multi-line changes’ here,
> not ‘patches’.
I still find this wording very confusing.  Perhaps "To add new
functionality, a patch is almost always the best choice.  For one, it
is likely that the new functionality requires changing multiple lines
of source code, which is more convenient to do with a patch than with a
snippet.  Further, patches can be taken from and submitted to upstreams
more easily.  If your patch has not been submitted to upstream,
consider doing so."

> > 
> > [...]
> > Overall, I'm not convinced that we have enough guiding principles
> > to call them that,
> 
> I don't think there's any lower limit on how many guiding principles
> to have, except for perhaps 2 (because otherwise it should have been
> singular or there aren't any).  At how few guiding principles stop
> the guiding principles from being guiding principles for you, and
> why?
> 
> For example, on <https://www.gnu.org/philosophy/free-sw.html>, four 
> guiding principles are mentioned (which are named 'essential
> freedoms' there), and
> <https://en.wikipedia.org/wiki/Guiding_Principles> has 5 ‘Guiding 
> Principles’.
An enumeration ought to have at least three elements (otherwise it's
just a pair), and I think if we do proper counting and omit no-
brainers, such as the "only free software" part that has already been
mentioned, we come very close to skirting that line.

> > which (along with its sheer length) is my main
> > complaint with the way you've phrased things.
> 
> (I'm assuming "its = the patch as a whole" here)
> 
> I could remove another section of the manual to compensate for the
> additional length, but I doubt that's what you intended.  I do not
> see the problem with the sheer length -- we have a bit of a
> documentation problem in Guix, there is lots of useful information
> that is currently undocumented.
> I do not think there have been any complaints about the manual being
> too long, if anything, it's too short.
I personally tend towards "less verbose", hence my complaint of
describing something with many words that could be described with
fewer.  A section can still be too long while the chapter around it is
too short.

> I've written some documentation, it was originally a bit hard to
> follow so in a next version I've restructured it a bit and explained
> more, this restructuring and explanation entailed some additional
> length.
> 
> There had been some proposals for additional cases to document, so
> they were added, increasing the length.  You have added new
> information is your patch, it was considered useful so I've
> integrated some of it in my patch, increasing the length.  (I didn't
> integrate all of the new parts, if I did, it would increase even
> further.  (If desired, in can integrate the rest, at cost  of some
> time.)).
My patch did not just state some things you missed, it also omitted
things that I think are either not necessary or probably better
documented elsewhere.

> I do not see what the problem is with additional length as long as
> this additional length comes with additional useful information and
> the manual is well-structured (e.g. with (sub)(sub)sections, chapters
> and indices) -- we do not have a page limit.
> 
> At worst, perhaps the same information could perhaps be encoded with
> fewer words? I could compare the two patches to see which one
> formulates certain information in the fewest words, and choose the
> least verbose of the two for each piece of information that is
> present in both?
> 
> Also, comparing the two patches, my patch has 40 more lines, but
> about 25 of them are for noting the guiding principles (which are
> absent in your patch).
> Compensating for that, the patches are about the same length, so I do
> not think that 'sheer length' is accurate here.
25 lines calling back to earlier information are, imho, an indicator
that the section is too long.  Imagine you'd have twenty-five function
calls to guiding_principles(n) in your program – at some point, you'd
try to cache those.

> > Going down to subsubsections just to find out where patches are
> > appropriate, is imho overkill.
> 
> The 'going down to subsubsection' is the case for your patch too,
> though?  In my case, it's a subsubsection, in your case it's a table
> entry inside a subsection, both are the same level of nesting.
These are still two very different kinds of nesting.  A table fits onto
a (virtual) page more easily than several subsections.

> Also, it's a matter of different structure -- in my v2 and v3 patch,
> I have a 'problem -> solution' structure -- the idea is that the
> packages has a problem, they look at the section, they read the
> subsubsection names, select the
> subsubsection that matches their problem and read the solution -- in
> short, the idea is to provide a solution to the problem.
> 
> Your structure is the other way around -- for solutions (patches,
> snippets, phases), it gives the permitted problems to apply it to.
> 
> So yes, your patch is more convenient for finding out where patches
> are appropriate.  I do not see the benefit of that though -- a new
> contributor packaging a thing wouldn't know in advance which
> solutions could be appropriate for them (your 'solution -> problem'
> patch?), rather, they start with a problem and are searching for an
> appropriate solution (my problem->solution patch).
I think this idea can be debunked pretty easily.  If I give you a
hammer and I tell you "this is a hammer, you can use it to put nails
into a wall", and you have a nail and you want to put it into a wall,
you won't go "oh no, however will I put this nail into a wall?" – you
will simply use the hammer to do so.  Of course, for this to work I
also have to tell you *how* to use a hammer to put nails into a wall,
but that's exactly what I did in my patch by inserting the right notes
into the Guix manual.

My solution->problem approach has the benefit, that folks can just go
over all the solutions, check if their problem fits, and apply the one
that says "here, use this".  And if they don't find anything, they see
the handy little line at the bottom saying "use whatever you think is
convenient".  I also expand a little on the benefits and drawbacks of
these approaches as you would when describing design patterns.

Your problem->solution approach instead leaves people wondering when
their particular use case has not been described.  It gives them a
solution rather than the tools to build solutions with.

Cheers




Information forwarded to guix-patches@HIDDEN:
bug#57598; Package guix-patches. Full text available.

Message received at 57598 <at> debbugs.gnu.org:


Received: (at 57598) by debbugs.gnu.org; 6 Sep 2022 20:21:18 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Sep 06 16:21:18 2022
Received: from localhost ([127.0.0.1]:52801 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1oVf4P-0000XW-2v
	for submit <at> debbugs.gnu.org; Tue, 06 Sep 2022 16:21:18 -0400
Received: from michel.telenet-ops.be ([195.130.137.88]:39050)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <maximedevos@HIDDEN>) id 1oVf4M-0000XM-9f
 for 57598 <at> debbugs.gnu.org; Tue, 06 Sep 2022 16:21:16 -0400
Received: from [IPV6:2a02:1811:8c09:9d00:5dba:d409:33f7:a16]
 ([IPv6:2a02:1811:8c09:9d00:5dba:d409:33f7:a16])
 by michel.telenet-ops.be with bizsmtp
 id GkMB2800H20ykKC06kMBVn; Tue, 06 Sep 2022 22:21:12 +0200
Message-ID: <d0a48b72-c62b-cc97-e399-22abc0af182d@HIDDEN>
Date: Tue, 6 Sep 2022 22:21:11 +0200
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101
 Thunderbird/91.12.0
Content-Language: en-US
To: Liliana Marie Prikler <liliana.prikler@HIDDEN>,
 57598 <at> debbugs.gnu.org
References: <20220905160048.18173-1-maximedevos@HIDDEN>
 <0f78953d57d8f66a934baf518b7c9e3247b580fd.camel@HIDDEN>
From: Maxime Devos <maximedevos@HIDDEN>
Subject: Re: [PATCH] doc: Update contribution guidelines on patches, etc.
In-Reply-To: <0f78953d57d8f66a934baf518b7c9e3247b580fd.camel@HIDDEN>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="------------NLNRqI000ekw60aGGVxBGoXf"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r22;
 t=1662495672; bh=tr8EL3KA3vekhc/xYcxJ8meZq/gKoXYrOpKkpe/CptY=;
 h=Date:To:References:From:Subject:In-Reply-To;
 b=KMD1/DEbTAQ7r2FxcZHUlcqMOdVcFTMvPtyxJ6EQtXWSe+ASvR+U/kfPInNHximKt
 yqtkyMOyqE33UB/xtv75mwgKkhAMZKLodnFPPvAcmdoOk6Wv+B8VR0ZC/mMxTXyLwV
 qNg+f475gniCm3tLwLE0y9/06CyEaBh7oslbUvx6p8d6yssbYjdTNbdqv4fd4vxdJJ
 QJOqXPCBXkHIh0pZXr2YszmZOdDzbezwmYygQErU81L7BEWinGBF9NMz6wmPB1viy2
 X95ux8xGNHzXpSwO53JesOi1p3iKudzmpne1tsb50jk3OQGknj87eV9V4TRjRE6Yv2
 VQ1KOTCznpDhg==
X-Spam-Score: -0.0 (/)
X-Debbugs-Envelope-To: 57598
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--------------NLNRqI000ekw60aGGVxBGoXf
Content-Type: multipart/mixed; boundary="------------mg1vH0aCGVVMzb0Ns8xAZUcB";
 protected-headers="v1"
From: Maxime Devos <maximedevos@HIDDEN>
To: Liliana Marie Prikler <liliana.prikler@HIDDEN>,
 57598 <at> debbugs.gnu.org
Message-ID: <d0a48b72-c62b-cc97-e399-22abc0af182d@HIDDEN>
Subject: Re: [PATCH] doc: Update contribution guidelines on patches, etc.
References: <20220905160048.18173-1-maximedevos@HIDDEN>
 <0f78953d57d8f66a934baf518b7c9e3247b580fd.camel@HIDDEN>
In-Reply-To: <0f78953d57d8f66a934baf518b7c9e3247b580fd.camel@HIDDEN>

--------------mg1vH0aCGVVMzb0Ns8xAZUcB
Content-Type: multipart/mixed; boundary="------------8K9TKb9cQWdHijgVuosbMcLl"

--------------8K9TKb9cQWdHijgVuosbMcLl
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: base64

T24gMDYtMDktMjAyMiAxMzozMywgTGlsaWFuYSBNYXJpZSBQcmlrbGVyIHdyb3RlOg0KDQo+
IEFtIE1vbnRhZywgZGVtIDA1LjA5LjIwMjIgdW0gMTg6MDAgKzAyMDAgc2NocmllYiBNYXhp
bWUgRGV2b3M6DQo+PiArR3VpeCBoYXMgdHJlZSBtYWluIHdheXMgb2YgbW9kaWZ5aW5nIHRo
ZSBzb3VyY2UgY29kZSBvZiBhIHBhY2thZ2UsDQo+PiB0aGF0DQo+PiAreW91IGFzIGEgcGFj
a2FnZXIgbWF5IHVzZS7CoCBUaGVzZSBhcmUgcGF0Y2hlcywgc25pcHBldHMgYW5kIHBoYXNl
cy4NCj4+ICtFYWNoIG9uZSBoYXMgaXRzIHN0cmVuZ3RocyBhbmQgZHJhd2JhY2tzLsKgIFRv
IGRlY2lkZSBiZXR3ZWVuIHRoZSB0cmVlLA0KPiB0aHJlZQ0KUmlnaHQuDQo+PiArdGhlcmUg
YXJlIGEgZmV3IGd1aWRpbmcgcHJpbmNpcGxlcyB0aGF0IHRvIHNhdGlzZnkgc2ltdWx0YW51
b3VzbHkNCj4+IHdoZXJlDQo+PiArcG9zc2libGU6DQo+ICJ0aGVyZSBhcmUgYSBmZXcgZ3Vp
ZGluZyBwcmluY2lwbGVzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkiLA0KPiAidGhlcmUg
YXJlIHNvbWUgZ3VpZGluZyBwcmluY2lwbGVzLCBvZiB3aGljaCBhcyBtYW55IGFzIHBvc3Np
YmxlIHNob3VsZA0KPiBiZSBzYXRpc2ZpZWQiLg0KPj4gKw0KPj4gK0BpdGVtaXplDQo+PiAr
QGl0ZW0NCj4+ICtJbiBwcmluY2lwbGUsIEd1aXggb25seSBoYXMgZnJlZSBzb2Z0d2FyZTsg
d2hlbiB0aGUgdXBzdHJlYW0gc291cmNlDQo+PiArY29udGFpbnMgc29tZSBub24tZnJlZSBz
b2Z0d2FyZSwgaXQgaGFzIHRvIGJlIHJlbW92ZWQgc3VjaCB0aGF0DQo+PiArQGNvbW1hbmR7
Z3VpeCBidWlsZCAtLXNvdXJjZX0gcmV0dXJucyB0aGUg4oCYZnJlZWTigJkgc291cmNlIGNv
ZGUgcmF0aGVyDQo+PiB0aGFuDQo+PiArdGhlIHVubW9kaWZpZWQgdXBzdHJlYW0gc291cmNl
IChAcHhyZWZ7U29mdHdhcmUgRnJlZWRvbX0pLg0KPiBJZiB0aGUgbGF0dGVyIHdvcmRpbmcg
YWJvdmUgaXMgY2hvc2VuLCB0aGlzIGlzIG5vdCBhICJndWlkaW5nDQo+IHByaW5jaXBsZSIs
IGJlY2F1c2UgaXQgaXMgbm9uLW5lZ290aWFibGUuDQpJJ2xsIGdvIGZvciBmaXJzdCBvcHRp
b24sICJ0aGVyZSBhcmUgYSBmZXcgZ3VpZGluZyBwcmluY2lwbGVzIHRvIHNhdGlzZnkNCnNp
bXVsdGFuZW91c2x5IHdoZXJlIHBvc3NpYmxlIiwgZHJvcHBpbmcgdGhlIG1pc3BsYWNlZCAi
dG8iLg0KPj4gK0BpdGVtDQo+PiArVGhlIHNvdXJjZSBvZiB0aGUgcGFja2FnZSBuZWVkcyB0
byBjb3JyZXNwb25kIHRvIHdoYXQgaXMgYWN0dWFsbHkNCj4+IGJ1aWx0DQo+PiArKGkuZS4s
IGFjdCBhcyB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UpLCB0byBmdWxmaWxsIG91ciBldGhp
Y2FsIGFuZA0KPj4gK2xlZ2FsIG9ibGlnYXRpb25zLg0KPj4gK0BpdGVtDQo+PiArSXQgaXMg
Y29udmVuaWVudCBmb3IgdGhlIHNvdXJjZSBkZXJpdmVkIGZyb20gYW4gb3JpZ2luIHRvIGJ1
aWxkIG9uIGFueQ0KPj4gK3N5c3RlbSB0aGF0IHRoZSB1cHN0cmVhbSBwYWNrYWdlIHN1cHBv
cnRzLg0KPj4gK0BpdGVtDQo+PiArVGhlIHNvdXJjZSBuZWVkcyB0byBhY3R1YWxseSB3b3Jr
LCBub3Qgb25seSBvbiB5b3VyIEd1aXggc3lzdGVtIGJ1dA0KPj4gYWxzbw0KPj4gK2ZvciBv
dGhlciBzeXN0ZW1zOyB0aGlzIHJlcXVpcmVzIHNvbWUgY2FyZSBmb3Igc3Vic3RpdHV0aW9u
cyBpbnZvbHZpbmcNCj4+ICtzdG9yZSBpdGVtcyBhbmQgb3RoZXIgYXJjaGl0ZWN0dXJlLXNw
ZWNpZmljIGNoYW5nZXMuDQo+IElmIHlvdSBlbWJlZCBzdG9yZSBpdGVtcywgaXQgd29uJ3Qg
ZXZlbiB3b3JrIG9uIEd1aXggU3lzdGVtIPCfmJvvuI8NCg0KSXQgZG9lcywgdGhvdWdoPyBD
b25kaXRpb25hbCBvbiBubyAtLXN5c3RlbSBhbmQgbm8gLS10YXJnZXQuIFRob3VnaCBnaXZl
bg0KdGhlIHRoaXJkIEBpdGVtLCBkb2Vzbid0IG1hdHRlci4NCg0KPiBBbHNvLCB0aGlzIGFw
cGVhcnMgdG8gYmUgYSByYXRoZXIgY29udmVuaWVudCByZXdvcmRpbmcgb2YgdGhlIHByZXZp
b3VzDQo+IGl0ZW0sIGRvZXMgaXQgbm90Pw0KSSB0aGluayB0aGF0IHdpdGggdGhlIGZpcnN0
LCBJIHJlZmVycmVkIHRvIHN5c3RlbXMgaW4gdGhlIHNlbnNlIG9mDQotLXN5c3RlbSAvIC0t
dGFyZ2V0LCBhbmQgdGhhdCB3aXRoIHRoZSBzZWNvbmQgSSBtZWFudCBkaXN0cmlidXRpb25z
LA0KdGhvdWdoIHllcy4gSSdsbCBsb29rIGludG8gdW5pZnlpbmcgdGhlIHR3by4NCj4+ICtA
aXRlbQ0KPj4gK1doZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSB3YXkgdG8gZG8gc29tZXRo
aW5nLCBjaG9vc2Ugd2hpY2hldmVyDQo+PiBtZXRob2QNCj4+ICtpcyB0aGUgc2ltcGxlc3Qu
wqAgU29tZXRpbWVzIHRoaXMgaXMgc3ViamVjdGl2ZSwgd2hpY2ggaXMgYWxzbyBmaW5lLg0K
Pj4gK1doYXQgbWF0dGVycyBpcyB0aGF0IHlvdSB1c2UgdGVjaG5pcXVlcyB0aGF0IGFyZSBj
b21tb24gd2l0aGluIHRoZQ0KPj4gK2NvbW11bml0eSAoaS5lLiwgcGF0dGVybnMgdGhhdCBh
cHBlYXIgdGhyb3VnaG91dA0KPj4gQGNvZGV7Z251L3BhY2thZ2VzLy4uLn0pDQo+PiArYW5k
IGFyZSB0aHVzIGNsZWFybHkgbGVnaWJsZSBmb3IgcmV2aWV3ZXJzLg0KPj4gK0BlbmQgaXRl
bWl6ZQ0KPj4gKw0KPj4gK1RvIG1ha2UgdGhpbmdzIG1vcmUgY29uY3JldGUgYW5kIHRvIHJl
c29sdmUgY29uZmxpY3RzIGJldHdlZW4gdGhlDQo+PiArcHJpbmNpcGxlcywgYSBmZXcgY2Fz
ZXMgaGF2ZSBiZWVuIHdvcmtlZCBvdXQ6DQo+PiArDQo+PiArQHN1YnN1YnNlY3Rpb24gUmVt
b3Zpbmcgbm9uLWZyZWUgc29mdHdhcmUNCj4+ICtOb24tZnJlZSBzb2Z0d2FyZSBoYXMgdG8g
YmUgcmVtb3ZlZCBpbiBzbmlwcGV0czsgdGhlIHJlYXNvbiBpcyB0aGF0DQo+PiArcGF0Y2hl
cyBvciBwaGFzZXMgd2lsbCBub3Qgd29yay4NCj4+ICsNCj4+ICtGb3IgcGF0Y2hlcywgdGhl
IHByb2JsZW0gaXMgdGhhdCBhIHBhdGNoIHJlbW92aW5nIGEgbm9uLWZyZWUgZmlsZQ0KPj4g
K2F1dG9tYXRpY2FsbHkgY29udGFpbnMgdGhlIG5vbi1mcmVlIGZpbGVAZm9vdG5vdGV7SXQg
aGFzIGJlZW4gbm90ZWQNCj4+IHRoYXQNCj4+ICtnaXQgcGF0Y2hlcyBzdXBwb3J0IHJlbW92
aW5nIGZpbGVzIHdpdGhvdXQgaW5jbHVkaW5nIHRoZSBmaWxlIGluIHRoZQ0KPj4gK3BhdGNo
IGluDQo+PiArQHVybHsNCj4+IGh0dHBzOi8veWhldGlsLm9yZy9ndWl4LzhiMTNlODk5LWVi
NjAtNDkwYi1hMjY4LTYzOTI0OTY5OGM4MUBAd3d3LmZhc3RtYWlsLmNvbS8NCj4+IH0uIElm
DQo+PiAraXQgaXMgdmVyaWZpZWQgdGhhdCB0aGUgQGNvbW1hbmR7cGF0Y2h9IHV0aWxpdHkg
c3VwcG9ydHMgc3VjaCBwYXRjaGVzLA0KPj4gK3RoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIGFu
ZCB0aGlzIHBvbGljeSBhZGp1c3RlZCBhcHByb3ByaWF0ZWx5Ln0sIGFuZA0KPj4gd2UNCj4+
ICtkbyBub3Qgd2FudCBhbnl0aGluZyBub24tZnJlZSBpbiBHdWl4IGV2ZW4gaWYgb25seSBp
biBpdHMgcGF0Y2hlcy4NCj4gV2UgYWxzbyBhdm9pZCBzcGVsbGluZyBvdXQgdGhlIG5vbi1m
cmVlIGZpbGVuYW1lIHdoZXJlIHBvc3NpYmxlLA0KPiBwcmVmZXJyaW5nIGtlZXAgbGlzdHMg
b3ZlciByZW1vdmUgbGlzdHMsIHdoaWNoIHRoaXMga2luZCBvZiBwYXRjaGVzDQo+IHdvdWxk
IGJlLg0KU2hvdWxkIHdlPyBJJ20gbm90IHNlZWluZyB0aGUgcG9pbnQgb2YgdGhhdC4gSSBo
YXZlIG5vdCBleHBlcmllbmNlZCBhbnkNCnN1Y2ggYXZvaWRhbmNlIG15c2VsZiwgc2VlIGUu
Zy4gJ3Rlbm5peCcsICduZXZlcmJhbGwnIGFuZCAnc2hvZ3VuJy4gSXQgaXMsDQp0byBteSBr
bm93bGVkZ2UsIG5vdCBmb3JiaWRkZW4gdG8gbWVudGlvbiBub24tZnJlZSBzb2Z0d2FyZSBi
eSBuYW1lDQppbiBjb2RlLCBhcyBsb25nIGFzIGl0cyBub3QgYSByZWNvbW1lbmRhdGlvbiAo
ZXhwbGljaXQgb3IgaW1wbGllZCkuDQo+PiArRm9yIHBoYXNlcywgdGhlIHByb2JsZW0gaXMg
dGhhdCBwaGFzZXMgZG8gbm90IGluZmx1ZW5jZSB0aGUgcmVzdWx0IG9mDQo+PiArQGNvbW1h
bmR7Z3VpeCBidWlsZCAtLXNvdXJjZX0uDQo+PiArDQo+PiArQHN1YnN1YnNlY3Rpb24gUmVt
b3ZpbmcgYnVuZGxlZCBsaWJyYXJpZXMNCj4+ICtCdW5kbGVkIGxpYnJhcmllcyBzaG91bGQg
bm90IGJlIHJlbW92ZWQgd2l0aCBwYXRjaGVzLCBiZWNhdXNlIHRoZW4gdGhlDQo+PiArcGF0
Y2ggd291bGQgY29udGFpbiB0aGUgZnVsbCBidW5kbGVkIGxpYnJhcnksIHdoaWNoIGNhbiBi
ZSBsYXJnZS4gVGhleQ0KPj4gK2NhbiBiZSByZW1vdmVkIGVpdGhlciBpbiBzbmlwcGV0cyBv
ciBwaGFzZXMsIG9mdGVuIHVzaW5nIHRoZSBwcm9jZWR1cmUNCj4+ICtAY29kZXtkZWxldGUt
ZmlsZS1yZWN1cnNpdmVseX0uIFRoZXJlIGFyZSBhIGZldyBiZW5lZml0cyBmb3Igc25pcHBl
dHMNCj4+IGhlcmU6DQo+PiArDQo+PiArV2hlbiB1c2luZyBzbmlwcGV0cywgdGhlIGJ1bmRs
ZWQgbGlicmFyeSBkb2VzIG5vdCBvY2N1ciBpbiB0aGUgc291cmNlDQo+PiArcmV0dXJuZWQg
YnkgQGNvZGV7Z3VpeCBidWlsZCAtLXNvdXJjZX0sIHNvIHVzZXJzIGFuZCByZXZpZXdlcnMg
ZG8gbm90DQo+PiAraGF2ZSB0byB3b3JyeSBhYm91dCB3aGV0aGVyIHRoZSBidW5kbGVkIGxp
YnJhcnkgY29udGFpbnMgbWFsd2FyZSwNCj4+ICt3aGV0aGVyIGl0IGlzIG5vbi1mcmVlLCBp
ZiBpdCBjb250YWlucyBwcmUtY29tcGlsZWQgYmluYXJpZXMgLi4uIFRoZXJlDQo+PiArYXJl
IGFsc28gbGVzcyBsaWNlbnNpbmcgY29uY2VybnM6IGlmIHRoZSBidW5kbGVkIGxpYnJhcmll
cyBhcmUNCj4+IHJlbW92ZWQsDQo+PiAraXQgYmVjb21lcyBsZXNzIGxpa2VseSB0aGF0IHRo
ZSBsaWNlbnNpbmcgY29uZGl0aW9ucyBhcHBseSB0byBwZW9wbGUNCj4+ICtzaGFyaW5nIHRo
ZSBzb3VyY2UgcmV0dXJuZWQgYnkgQGNvbW1hbmR7Z3VpeCBidWlsZCAtLXNvdXJjZX0sDQo+
PiBlc3BlY2lhbGx5IGlmDQo+PiArdGhlIGJ1bmRsZWQgbGlicmFyeSBpcyBub3QgYWN0dWFs
bHkgdXNlZCBvbiBHdWl4DQo+PiBzeXN0ZW1zLkBmb290bm90ZXtUaGlzDQo+PiAraXMgQGVt
cGh7bm90fSBhIGNsYWltIHRoYXQgeW91IGNhbiBzaW1wbHkgaWdub3JlIHRoZSBsaWNlbnNl
cyBvZg0KPj4gK2xpYnJhcmllcyB3aGVuIHRoZXkgYXJlIHVuYnVuZGxlZCBhbmQgcmVwbGFj
ZWQgYnkgR3VpeCBwYWNrYWdlcyAtLQ0KPj4gdGhlcmUNCj4+ICthcmUgbGVzcyBjb25jZXJu
cywgbm90IG5vbmUufQ0KPj4gKw0KPj4gK0FzIHN1Y2gsIHNuaXBwZXRzIGFyZSByZWNvbW1l
bmRlZCBoZXJlLg0KPj4gKw0KPj4gK0BzdWJzdWJzZWN0aW9uIEZpeGluZyB0ZWNobmljYWwg
aXNzdWVzIChjb21waWxhdGlvbiBlcnJvcnMsIHRlc3QNCj4+IGZhaWx1cmVzLCBvdGhlciBi
dWdzIC4uLikNCj4+ICtVc3VhbGx5LCBhIGJ1ZyBmaXggY29tZXMgaW4gdGhlIGZvcm0gb2Yg
YSBwYXRjaCBjb3BpZWQgZnJvbSB1cHN0cmVhbQ0KPj4gb3INCj4+ICthbm90aGVyIGRpc3Ry
aWJ1dGlvbi7CoCBJbiB0aGF0IGNhc2UsIHNpbXBseSBhZGRpbmcgdGhlIHBhdGNoIHRvIHRo
ZQ0KPj4gK0Bjb2Rle3BhdGNoZXN9IGZpZWxkIGlzIHRoZSBtb3N0IGNvbnZlbmllbnQgYW5k
IHVzdWFsbHkgZG9lcyBub3QgY2F1c2UNCj4+ICthbnkgcHJvYmxlbXM7IHRoZXJlIGlzIG5v
IG5lZWQgdG8gcmV3cml0ZSBpdCBhcyBhIHNuaXBwZXQgb3IgYSBwaGFzZS4NCj4+ICsNCj4+
ICtJZiBubyByZWFkeS1tYWRlIHBhdGNoIGFscmVhZHkgZXhpc3RzLCB0aGVuIGNob29zaW5n
IGJldHdlZW4gYSBwYXRjaA0KPj4gb3INCj4+ICthIHNuaXBwZXQgaXMgYSBtYXR0ZXIgb2Yg
Y29udmVuaWVuY2UuIEhvd2V2ZXIsIHRoZXJlIGFyZSB0d28gdGhpbmdzIHRvDQo+PiAra2Vl
cCBpbiBtaW5kOg0KPj4gKw0KPj4gK0ZpcnN0LCB3aGVuIHRoZSBmaXggaXMgbm90IEd1aXgt
c3BlY2lmaWMsIHVwc3RyZWFtaW5nIHRoZSBmaXggaXMNCj4+ICtzdHJvbmdseSBkZXNpcmVk
IHRvIGF2b2lkIHRoZSBhZGRpdGlvbmFsIG1haW50ZW5hbmNlIGNvc3QgdG8gR3VpeC7CoCBB
cw0KPj4gK3Vwc3RyZWFtcyBjYW5ub3QgYWNjZXB0IHNuaXBwZXRzLCB3cml0aW5nIGEgcGF0
Y2ggY2FuIGJlIGEgbW9yZQ0KPj4gK2VmZmljaWVudCB1c2Ugb2YgdGltZS7CoCBTZWNvbmRs
eSwgaWYgdGhlIGZpeCBvZiBhIHRlY2huaWNhbCBpc3N1ZQ0KPj4gZW1iZWRzDQo+PiArYSBz
dG9yZSBmaWxlIG5hbWUsIHRoZW4gaXQgaGFzIHRvIGJlIGEgcGhhc2UuDQo+IEkgYW0gcHJl
dHR5IHN1cmUgdGhhdCBtb3N0IG9mIHRoZXNlIGFyZSAqbm90KiBkb25lIGluIHNuaXBwZXRz
LCBidXQNCj4gcmF0aGVyIHBoYXNlcywgaWYgdGhleSBvbmx5IGFmZmVjdCBHdWl4LiAgSW4g
cGFydGljdWxhciwgZ3JlcCBmb3INCj4gZmFpbGluZy10ZXN0cyBhbmQgeW91IHdpbGwgZmlu
ZCBhIGZldyBwaGFzZXMgZGlzYWJsaW5nIHRoZW0uDQpJIGRvIG5vdCB0aGluayB0aGF0IGln
bm9yaW5nIGEgdGVzdCBjb3VudHMgYXMgYSBidWcgZml4LsKgIEknbGwgYWRkIGl0IHRvIA0K
dGhpcw0Kc3Vic3Vic2VjdGlvbiwgYXQgY29zdCBvZiBzb21lIGFkZGl0aW9uYWwgbGVuZ3Ro
Lg0KPiAgICBJbiBmYWN0LA0KPiBhcyBmYXIgYXMgZmlsZXMgdGhhdCB3aWxsIG5vdCBiZSBp
bnN0YWxsZWQgYXJlIGNvbmNlcm5lZCwgSSB0aGluaw0KPiBwaGFzZXMgb3VnaHQgdG8gYmUg
cHJlZmVycmVkLCBiZWNhdXNlIHRoZXkncmUgZWFzaWVyIHRvIHRha2UgYXdheSBpZiBhbg0K
PiBhY3R1YWwgZml4IGlzIG1hZGUuDQpJIGRvIG5vdCBzZWUgYSBkaWZmZXJlbmNlIGluIGhh
cmRuZXNzL2Vhc3luZXNzIGJldHdlZW4gcmVtb3ZpbmcgYQ0KcGhhc2UgYW5kIHJlbW92aW5n
IGEgc25pcHBldCAoYm90aCBhcmUganVzdCBhIG1hdHRlciBvZiBvcGVuaW5nDQphbiBlZGl0
b3IsIHBvaW50aW5nIGl0IGF0IGdudS9wYWNrYWdlcy8uLi4gYW5kIHJlbW92aW5nIGEgZmV3
IGxpbmVzKSwNCnRob3VnaCBJIGRvIGNvbnNpZGVyIHJlbW92aW5nIGEgcGF0Y2ggdG8gYmUg
c2xpZ2h0bHkgaGFyZGVyIChiZWNhdXNlDQpnbnUvbG9jYWwubWsgaXMgZWFzeSB0byBmb3Jn
ZXQpLg0KPiBGb3IgdGhlIHN0b3JlIHBhdGggZW1iZWRkaW5nLCB0aGF0J3MgYSByYXRoZXIg
cm91bmRhYm91dCB3YXkgb2Ygc2F5aW5nDQo+IHRoYXQgY29udHJpYnV0ZXJzICpvdWdodCB0
byogZW1iZWQgc3RvcmUgcGF0aHMgb2YgY2VydGFpbmcgdGhpbmdzLCBzdWNoDQo+IGFzIGNv
bW1hbmRzIGludm9rZWQgdmlhIGV4ZWMgZXQgYWwuDQoNCkl0J3Mgbm90PyBJdCdzIGtpbmQg
b2YgaW1wbGllZCwgeWVzLCBidXQgdGhlIHB1cnBvc2UgaXNuJ3QgYmVpbmcgYSAneW91DQpz
aG91bGQgZW1iZWQgc3RvcmUgcGF0aHMnIChzdWJzdWIpc2VjdGlvbiwgYnV0IHJhdGhlciwg
J2lmIHlvdSBnbyANCmVtYmVkZGluZyBzdG9yZQ0KcGF0aHMgKGF0IGxlYXN0IGZvciBmaXhp
bmcgYSB0ZWNobmljYWwgaXNzdWUpLCBkbyBpdCBpbiBhIHBoYXNlJy4NCg0KSSdtIG5vdCBm
b2xsb3dpbmcgd2hhdCB0aGUgY29tcGxhaW50IGlzLCBJIHN1cHBvc2UgYSBzZWN0aW9uIGNv
dWxkIGJlIGFkZGVkDQpzb21ld2hlcmUgdG8gcHJvcGVybHkgZG9jdW1lbnQgdGhlICdlbWJl
ZGRpbmcgc3RvcmUgZmlsZSBuYW1lcycgcHJhY3RpY2UsDQphbmQgaW5zZXJ0IGEgY3Jvc3Mt
cmVmZXJlbmNlLCBidXQgdGhhdCB3YXNuJ3QgdGhlIHB1cnBvc2Ugb2YgdGhlIHBhdGNoIGFu
ZA0KZ29pbmcgYnkgbGF0ZXIgcmVzcG9uc2VzLCB5b3Ugc2VlbSBvcHBvc2VkIHRvIG1ha2lu
ZyB0aGluZ3MgbG9uZ2VyLg0KDQpUaGUgYWx0ZXJuYXRpdmUgd291bGQgYmUgdG8gcmVtb3Zl
IHRoaXMgaW5mb3JtYXRpb24sIGJ1dCB0aGVuIHZhbHVhYmxlDQppbmZvcm1hdGlvbiB3b3Vs
ZCBiZSBsb3N0ICh0aGVyZSBoYWQgYmVlbiBzb21lIGNhc2VzIHdoZXJlIHN0b3JlIGZpbGUg
bmFtZXMNCndlcmUgZW1iZWRkZWQgaW4gb3JpZ2luKS4NCg0KPj4gT3RoZXJ3aXNlLCBpZiB0
aGUgc3RvcmUNCj4+ICtmaWxlIG5hbWUgd2VyZSBlbWJlZGRlZCBpbiB0aGUgc291cmNlLCB0
aGUgcmVzdWx0IG9mIEBjb21tYW5ke2d1aXgNCj4+IGJ1aWxkDQo+PiArLS1zb3VyY2V9IHdv
dWxkIGJlIHVudXNhYmxlIG9uIG5vbi1HdWl4IHN5c3RlbXMgYW5kIGFsc28gbGlrZWx5DQo+
PiB1bnVzYWJsZQ0KPj4gK29uIEd1aXggc3lzdGVtcyBvZiBhbm90aGVyIGFyY2hpdGVjdHVy
ZS4NCj4gV2h5IGFyZSB5b3UgcmVwZWF0aW5nIGEgZ3VpZGluZyBwcmluY2lwbGU/DQpJJ20g
c2hvd2luZyB3aHksIGluIHRoaXMgY2FzZSwgYSBwaGFzZSBtdXN0IGJlIHVzZWQsIGJ5IG5v
dGluZyB0aGF0DQpub3QgZG9pbmcgc28gd291bGQgYmUgY29udHJhcnkgdG8gb25lIG9mIHRo
ZSBwcmluY2lwbGVzLg0KDQpJZiBub3QgcmVwZWF0aW5nIHRoZSBwcmluY2lwbGUgaXMgZGVz
aXJlZCwgSSBjb3VsZCBwZXJoYXBzIG51bWJlciB0aGVtLCBhbmQNCnJlZmVyIHRvIHRoZSBw
cmluY2lwbGVzIGJ5IG51bWJlciBpbnN0ZWFkIG9mIHJlc3RhdGluZyB0aGVtPyBXb3VsZCBy
ZWR1Y2UNCnRoZSBsZW5ndGggYSBsaXR0bGUuDQoNCj4+ICtAc3Vic3Vic2VjdGlvbiBBZGRp
bmcgbmV3IGZ1bmN0aW9uYWxpdHkNCj4+ICtUbyBhZGQgbmV3IGZ1bmN0aW9uYWxpdHksIGEg
cGF0Y2ggaXMgYWxtb3N0IGFsd2F5cyB0aGUgbW9zdCBjb252ZW5pZW50DQo+PiArY2hvaWNl
IG9mIHRoZSB0aHJlZSAtLSBwYXRjaGVzIGFyZSB1c3VhbGx5IG11bHRpLWxpbmUgY2hhbmdl
cywgd2hpY2gNCj4+IGFyZQ0KPj4gK2NvbnZlbmllbnQgdG8gZG8gd2l0aCBwYXRjaGVzIGFu
ZCBpbmNvbnZlbmllbnQgdG8gZG8gd2l0aCBwaGFzZXMgb3INCj4+ICtzbmlwcGV0cy4NCj4g
VWhtLCB3aGF0PyAgUGF0Y2hlcyBhcmUgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHBhdGNoZXM/
DQoNCk5vLCBJIG1lYW50IHRoYXQgcGF0Y2hlcyBhcmUgKHVzdWFsbHkpIHRoZSBwcmVmZXJy
ZWQgbWV0aG9kIGZvciBhZGRpbmcNCm5ldyBmdW5jdGlvbmFsaXR5LCBhbmQgdGhhdCBtdWx0
aS1saW5lIGNoYW5nZXMgYXJlIGNvbnZlbmllbnQgdG8gZG8gd2l0aA0KcGF0Y2hlcy7CoCDi
gJh3aGljaOKAmSByZWZlcnMgdG8gdGhlIOKAmG11bHRpLWxpbmUgY2hhbmdlc+KAmSBoZXJl
LCBub3Qg4oCYcGF0Y2hlc+KAmS4NCg0KPj4gIMKgIFRoaXMgY2hvaWNlIGlzIHVzdWFsbHkg
YWxzbyBjb21wYXRpYmxlIHdpdGggYWxsIHRoZSBndWlkaW5nDQo+PiArcHJpbmNpcGxlcy7C
oCBBcyBzdWNoLCBwYXRjaGVzIGFyZSBwcmVmZXJyZWQuwqAgSG93ZXZlciwgYXMgd2l0aCBi
dWcNCj4+ICtmaXhlcywgdXBzdHJlYW1pbmcgdGhlIG5ldyBmdW5jdGlvbmFsaXR5IGlzIGRl
c2lyZWQuDQo+PiArDQo+PiArQHN1YnNlY3Rpb24gSG93IHRvIGFkZCBwYXRjaGVzDQo+PiAr
UmVmZXIgdG8gdGhlIEBjb2Rle29yaWdpbn0gcmVjb3JkIGRvY3VtZW50YXRpb24gKHBhcnRp
Y3VsYXJseSB0aGUNCj4+IGZpZWxkcw0KPj4gK0Bjb2Rle3BhdGNoZXN9LCBAY29kZXtwYXRj
aC1pbnB1dHN9LCBhbmQgQGNvZGV7cGF0Y2gtZmxhZ3N9KSBmb3INCj4+ICtpbmZvcm1hdGlv
biBvbiBob3cgdG8gdXNlIHBhdGNoZXMgKEBweHJlZntvcmlnaW4gUmVmZXJlbmNlfSkuwqAg
V2hlbg0KPj4gK2FkZGluZyBhIHBhdGNoLCBkbyBub3QgZm9yZ2V0IHRvIGFsc28gbGlzdCBp
dCBpbg0KPj4gQGNvZGV7ZGlzdF9wYXRjaF9EQVRBfQ0KPj4gK29mIEBmaWxle2dudS9sb2Nh
bC5ta30uDQo+IEkgZG9uJ3QgdGhpbmsgdGhpcyBzaG91bGQgYmUgYSBzdWJzZWN0aW9uLg0K
UmlnaHQsIHNob3VsZCBoYXZlIGJlZW4gYSBzdWJzdWJzZWN0aW9uLg0KPj4gK0BzdWJzZWN0
aW9uIEhvdyB0byBhZGQgZmlsZXMNCj4+ICtOZXcgc291cmNlIGZpbGVzIGNhbiBiZSBhZGRl
ZCBpbiBwaGFzZXMgb3Igc25pcHBldHMsIGJ5IHVzaW5nDQo+PiArQGJ7YXV4aWxpYXJyeSBm
aWxlc30uwqAgQXV4aWxpYXJ5IGZpbGVzIGFyZSBzdG9yZWQgaW4gdGhlDQo+PiArQGZpbGV7
Z251L3BhY2thZ2VzL2F1eC1maWxlc30gZGlyZWN0b3J5IGFuZCBjYW4gYmUgcmV0cmlldmVk
IChpbiBhDQo+PiArc25pcHBldCBvciBhIHBoYXNlKSB3aXRoIEBjb2Rle3NlYXJjaC1hdXhp
bGlhcnktZmlsZX0uwqAgV2hlbiBhZGRpbmcgYW4NCj4+ICthdXhpbGlhcnkgZmlsZSwgZG8g
bm90IGZvcmdldCB0byBhbHNvIGxpc3QgaXQgaW4gQGNvZGV7QVVYX0ZJTEVTfSBvZg0KPj4g
K0BmaWxle01ha2VmaWxlLmFtfS4NCj4+ICsNCj4+ICtBbm90aGVyIG9wdGlvbiBmb3IgYWRk
aW5nIG5ldyBmaWxlcywgaXMgdG8gdXNlIHByb2NlZHVyZXMgc3VjaCBhcw0KPj4gK0Bjb2Rl
e2Rpc3BsYXl9LCBAY29kZXtmb3JtYXR9IGFuZCBAY29kZXtjYWxsLXdpdGgtb3V0cHV0LWZp
bGV9LsKgIEFzIGENCj4+ICttYXR0ZXIgb2YgcHJpbmNpcGxlLCBhdXhpbGlhcnkgZmlsZXMg
b3VnaHQgdG8gYmUgcHJlZmVycmVkIG92ZXIgYW4NCj4+ICtlcXVpdmFsZW50IEBjb2Rle2Nh
bGwtd2l0aC1vdXRwdXQtZmlsZX0gd2hlbiBjcmVhdGluZyBub24tdHJpdmlsDQo+PiBmaWxl
cywNCj4+ICthcyB0aGF0IG1ha2VzIHRoZW0gZWFzaWVyIHRvIGVkaXQuwqAgVGhlIGV4YWN0
IHRocmVzaG9sZCBmb3IgYQ0KPj4gK25vbi10cml2aWFsIGZpbGUgbWlnaHQgYmUgc3ViamVj
dGl2ZSwgdGhvdWdoIGl0IHNob3VsZCBsaWUgc29tZXdoZXJlDQo+PiArYmV0d2VlbiAxMC0t
MjAgbGluZXMuDQo+PiArDQo+PiArQ3VycmVudGx5LCB0aGVyZSBpcyBubyBwb2xpY3kgb24g
ZGVjaWRpbmcgYmV0d2VlbiBwaGFzZSBhbmQgc25pcHBldHMNCj4+IGZvcg0KPj4gK2FkZGlu
ZyBuZXcgZmlsZXMsIGV4Y2VwdCBmb3IgdGhlIGd1aWRpbmcgcHJpbmNpcGxlcy4NCj4gVGhp
cyBzaG91bGQgcHJvYmFibHkgYmUgYSBzdWJzdWJzZWN0aW9uIGFmdGVyICJBZGRpbmcgbmV3
DQo+IGZ1bmN0aW9uYWxpdHkiIG9yIGV4cGxhaW5lZCB3aXRoaW4gIkFkZGluZyBuZXcgZnVu
Y3Rpb25hbGl0eSIuDQo+DQo+IE92ZXJhbGwsIEknbSBub3QgY29udmluY2VkIHRoYXQgd2Ug
aGF2ZSBlbm91Z2ggZ3VpZGluZyBwcmluY2lwbGVzIHRvDQo+IGNhbGwgdGhlbSB0aGF0LA0K
DQpJIGRvbid0IHRoaW5rIHRoZXJlJ3MgYW55IGxvd2VyIGxpbWl0IG9uIGhvdyBtYW55IGd1
aWRpbmcgcHJpbmNpcGxlcw0KdG8gaGF2ZSwgZXhjZXB0IGZvciBwZXJoYXBzIDIgKGJlY2F1
c2Ugb3RoZXJ3aXNlIGl0IHNob3VsZCBoYXZlIGJlZW4NCnNpbmd1bGFyIG9yIHRoZXJlIGFy
ZW4ndCBhbnkpLsKgIEF0IGhvdyBmZXcgZ3VpZGluZyBwcmluY2lwbGVzIHN0b3ANCnRoZSBn
dWlkaW5nIHByaW5jaXBsZXMgZnJvbSBiZWluZyBndWlkaW5nIHByaW5jaXBsZXMgZm9yIHlv
dSwgYW5kIHdoeT8NCg0KRm9yIGV4YW1wbGUsIG9uIDxodHRwczovL3d3dy5nbnUub3JnL3Bo
aWxvc29waHkvZnJlZS1zdy5odG1sPiwgZm91ciANCmd1aWRpbmcgcHJpbmNpcGxlcyBhcmUg
bWVudGlvbmVkICh3aGljaCBhcmUgbmFtZWQgJ2Vzc2VudGlhbCBmcmVlZG9tcycgDQp0aGVy
ZSksIGFuZA0KPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0d1aWRpbmdfUHJpbmNp
cGxlcz4gaGFzIDUg4oCYR3VpZGluZyANClByaW5jaXBsZXPigJkuDQo+IHdoaWNoIChhbG9u
ZyB3aXRoIGl0cyBzaGVlciBsZW5ndGgpIGlzIG15IG1haW4NCj4gY29tcGxhaW50IHdpdGgg
dGhlIHdheSB5b3UndmUgcGhyYXNlZCB0aGluZ3MuDQoNCihJJ20gYXNzdW1pbmcgIml0cyA9
IHRoZSBwYXRjaCBhcyBhIHdob2xlIiBoZXJlKQ0KDQpJIGNvdWxkIHJlbW92ZSBhbm90aGVy
IHNlY3Rpb24gb2YgdGhlIG1hbnVhbCB0byBjb21wZW5zYXRlIGZvciB0aGUNCmFkZGl0aW9u
YWwgbGVuZ3RoLCBidXQgSSBkb3VidCB0aGF0J3Mgd2hhdCB5b3UgaW50ZW5kZWQuwqAgSSBk
byBub3Qgc2VlIHRoZQ0KcHJvYmxlbSB3aXRoIHRoZSBzaGVlciBsZW5ndGggLS0gd2UgaGF2
ZSBhIGJpdCBvZiBhIGRvY3VtZW50YXRpb24gcHJvYmxlbQ0KaW4gR3VpeCwgdGhlcmUgaXMg
bG90cyBvZiB1c2VmdWwgaW5mb3JtYXRpb24gdGhhdCBpcyBjdXJyZW50bHkgdW5kb2N1bWVu
dGVkLg0KSSBkbyBub3QgdGhpbmsgdGhlcmUgaGF2ZSBiZWVuIGFueSBjb21wbGFpbnRzIGFi
b3V0IHRoZSBtYW51YWwgYmVpbmcgdG9vIA0KbG9uZywNCmlmIGFueXRoaW5nLCBpdCdzIHRv
byBzaG9ydC4NCg0KSSd2ZSB3cml0dGVuIHNvbWUgZG9jdW1lbnRhdGlvbiwgaXQgd2FzIG9y
aWdpbmFsbHkgYSBiaXQgaGFyZCB0byBmb2xsb3cgc28NCmluIGEgbmV4dCB2ZXJzaW9uIEkn
dmUgcmVzdHJ1Y3R1cmVkIGl0IGEgYml0IGFuZCBleHBsYWluZWQgbW9yZSwgdGhpcw0KcmVz
dHJ1Y3R1cmluZyBhbmQgZXhwbGFuYXRpb24gZW50YWlsZWQgc29tZSBhZGRpdGlvbmFsIGxl
bmd0aC4NCg0KVGhlcmUgaGFkIGJlZW4gc29tZSBwcm9wb3NhbHMgZm9yIGFkZGl0aW9uYWwg
Y2FzZXMgdG8gZG9jdW1lbnQsIHNvIHRoZXkNCndlcmUgYWRkZWQsIGluY3JlYXNpbmcgdGhl
IGxlbmd0aC7CoCBZb3UgaGF2ZSBhZGRlZCBuZXcgaW5mb3JtYXRpb24gaXMgeW91cg0KcGF0
Y2gsIGl0IHdhcyBjb25zaWRlcmVkIHVzZWZ1bCBzbyBJJ3ZlIGludGVncmF0ZWQgc29tZSBv
ZiBpdCBpbiBteSBwYXRjaCwNCmluY3JlYXNpbmcgdGhlIGxlbmd0aC7CoCAoSSBkaWRuJ3Qg
aW50ZWdyYXRlIGFsbCBvZiB0aGUgbmV3IHBhcnRzLCBpZiBJIA0KZGlkLCBpdCB3b3VsZA0K
aW5jcmVhc2UgZXZlbiBmdXJ0aGVyLsKgIChJZiBkZXNpcmVkLCBpbiBjYW4gaW50ZWdyYXRl
IHRoZSByZXN0LCBhdCBjb3N0IA0Kb2Ygc29tZQ0KdGltZS4pKS4NCg0KSSBkbyBub3Qgc2Vl
IHdoYXQgdGhlIHByb2JsZW0gaXMgd2l0aCBhZGRpdGlvbmFsIGxlbmd0aCBhcyBsb25nIGFz
IHRoaXMNCmFkZGl0aW9uYWwgbGVuZ3RoIGNvbWVzIHdpdGggYWRkaXRpb25hbCB1c2VmdWwg
aW5mb3JtYXRpb24gYW5kIHRoZSBtYW51YWwNCmlzIHdlbGwtc3RydWN0dXJlZCAoZS5nLiB3
aXRoIChzdWIpKHN1YilzZWN0aW9ucywgY2hhcHRlcnMgYW5kIGluZGljZXMpIA0KLS0gd2UN
CmRvIG5vdCBoYXZlIGEgcGFnZSBsaW1pdC4NCg0KQXQgd29yc3QsIHBlcmhhcHMgdGhlIHNh
bWUgaW5mb3JtYXRpb24gY291bGQgcGVyaGFwcyBiZSBlbmNvZGVkIHdpdGgNCmZld2VyIHdv
cmRzPyBJIGNvdWxkIGNvbXBhcmUgdGhlIHR3byBwYXRjaGVzIHRvIHNlZSB3aGljaCBvbmUg
Zm9ybXVsYXRlcw0KY2VydGFpbiBpbmZvcm1hdGlvbiBpbiB0aGUgZmV3ZXN0IHdvcmRzLCBh
bmQgY2hvb3NlIHRoZSBsZWFzdCB2ZXJib3NlIG9mIHRoZQ0KdHdvIGZvciBlYWNoIHBpZWNl
IG9mIGluZm9ybWF0aW9uIHRoYXQgaXMgcHJlc2VudCBpbiBib3RoPw0KDQpBbHNvLCBjb21w
YXJpbmcgdGhlIHR3byBwYXRjaGVzLCBteSBwYXRjaCBoYXMgNDAgbW9yZSBsaW5lcywgYnV0
IGFib3V0DQoyNSBvZiB0aGVtIGFyZSBmb3Igbm90aW5nIHRoZSBndWlkaW5nIHByaW5jaXBs
ZXMgKHdoaWNoIGFyZSBhYnNlbnQgaW4gDQp5b3VyIHBhdGNoKS4NCkNvbXBlbnNhdGluZyBm
b3IgdGhhdCwgdGhlIHBhdGNoZXMgYXJlIGFib3V0IHRoZSBzYW1lIGxlbmd0aCwgc28gSSBk
byANCm5vdCB0aGluaw0KdGhhdCAnc2hlZXIgbGVuZ3RoJyBpcyBhY2N1cmF0ZSBoZXJlLg0K
DQo+IEdvaW5nIGRvd24gdG8NCj4gc3Vic3Vic2VjdGlvbnMganVzdCB0byBmaW5kIG91dCB3
aGVyZSBwYXRjaGVzIGFyZSBhcHByb3ByaWF0ZSwgaXMgaW1obw0KPiBvdmVya2lsbC4NCg0K
VGhlICdnb2luZyBkb3duIHRvIHN1YnN1YnNlY3Rpb24nIGlzIHRoZSBjYXNlIGZvciB5b3Vy
IHBhdGNoIHRvbywgdGhvdWdoPw0KSW4gbXkgY2FzZSwgaXQncyBhIHN1YnN1YnNlY3Rpb24s
IGluIHlvdXIgY2FzZSBpdCdzIGEgdGFibGUgZW50cnkgaW5zaWRlIGENCnN1YnNlY3Rpb24s
IGJvdGggYXJlIHRoZSBzYW1lIGxldmVsIG9mIG5lc3RpbmcuDQoNCkFsc28sIGl0J3MgYSBt
YXR0ZXIgb2YgZGlmZmVyZW50IHN0cnVjdHVyZSAtLSBpbiBteSB2MiBhbmQgdjMgcGF0Y2gs
IEkgDQpoYXZlIGENCidwcm9ibGVtIC0+IHNvbHV0aW9uJyBzdHJ1Y3R1cmUgLS0gdGhlIGlk
ZWEgaXMgdGhhdCB0aGUgcGFja2FnZXMgaGFzIGEgDQpwcm9ibGVtLA0KdGhleSBsb29rIGF0
IHRoZSBzZWN0aW9uLCB0aGV5IHJlYWQgdGhlIHN1YnN1YnNlY3Rpb24gbmFtZXMsIHNlbGVj
dCB0aGUNCnN1YnN1YnNlY3Rpb24gdGhhdCBtYXRjaGVzIHRoZWlyIHByb2JsZW0gYW5kIHJl
YWQgdGhlIHNvbHV0aW9uIC0tIGluIHNob3J0LA0KdGhlIGlkZWEgaXMgdG8gcHJvdmlkZSBh
IHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtLg0KDQpZb3VyIHN0cnVjdHVyZSBpcyB0aGUgb3Ro
ZXIgd2F5IGFyb3VuZCAtLSBmb3Igc29sdXRpb25zIChwYXRjaGVzLCBzbmlwcGV0cywNCnBo
YXNlcyksIGl0IGdpdmVzIHRoZSBwZXJtaXR0ZWQgcHJvYmxlbXMgdG8gYXBwbHkgaXQgdG8u
DQoNClNvIHllcywgeW91ciBwYXRjaCBpcyBtb3JlIGNvbnZlbmllbnQgZm9yIGZpbmRpbmcg
b3V0IHdoZXJlIHBhdGNoZXMgYXJlDQphcHByb3ByaWF0ZS7CoCBJIGRvIG5vdCBzZWUgdGhl
IGJlbmVmaXQgb2YgdGhhdCB0aG91Z2ggLS0gYSBuZXcgY29udHJpYnV0b3INCnBhY2thZ2lu
ZyBhIHRoaW5nIHdvdWxkbid0IGtub3cgaW4gYWR2YW5jZSB3aGljaCBzb2x1dGlvbnMgY291
bGQgYmUNCmFwcHJvcHJpYXRlIGZvciB0aGVtICh5b3VyICdzb2x1dGlvbiAtPiBwcm9ibGVt
JyBwYXRjaD8pLCByYXRoZXIsIHRoZXkgc3RhcnQNCndpdGggYSBwcm9ibGVtIGFuZCBhcmUg
c2VhcmNoaW5nIGZvciBhbiBhcHByb3ByaWF0ZSBzb2x1dGlvbiAobXkNCnByb2JsZW0tPnNv
bHV0aW9uIHBhdGNoKS4NCg0KR3JlZXRpbmdzLA0KTWF4aW1lLg0K
--------------8K9TKb9cQWdHijgVuosbMcLl
Content-Type: application/pgp-keys; name="OpenPGP_0x49E3EE22191725EE.asc"
Content-Disposition: attachment; filename="OpenPGP_0x49E3EE22191725EE.asc"
Content-Description: OpenPGP public key
Content-Transfer-Encoding: quoted-printable

-----BEGIN PGP PUBLIC KEY BLOCK-----

xjMEX4ch6BYJKwYBBAHaRw8BAQdANPb/d6MrGnGi5HyvODCkBUJPRjiFQcRU5V+m
xvMaAa/NL01heGltZSBEZXZvcyA8bWF4aW1lLmRldm9zQHN0dWRlbnQua3VsZXV2
ZW4uYmU+wpAEExYIADgWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCX4ch6AIbAwUL
CQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRBJ4+4iGRcl7japAQC3opZ2KGWzWmRc
/gIWSu0AAcfMwyinFEEPa/QhUt2CogD/e2RdF4CYAgaRHJJmZ9WU7piKbLZ7llB4
LzgezVDHggzNJU1heGltZSBEZXZvcyA8bWF4aW1lZGV2b3NAdGVsZW5ldC5iZT7C
kAQTFggAOBYhBMHzPuIMUo/bfdcBH0nj7iIZFyXuBQJf56ycAhsDBQsJCAcDBRUK
CQgLBRYCAwEAAh4BAheAAAoJEEnj7iIZFyXujpQBAKV1SwDDl4f24rXciDlB9L8W
ycZt30CgbewMSRQk4mvbAP9dFMbVVixYBd6C8cfhR+NsOBGiOJnQABlUmgNuqGFJ
Dc44BF+HIegSCisGAQQBl1UBBQEBB0BOlzIWiJzgobMF6/cqwLaLk7jIcFSZ++c0
k9cCNT6YXwMBCAfCeAQYFggAIBYhBMHzPuIMUo/bfdcBH0nj7iIZFyXuBQJfhyHo
AhsMAAoJEEnj7iIZFyXuMr0BAJc8cl5PGvVmVuSQVKjleNl4DK1/XAaPAYPe34AE
fZJPAP9IqLCQhH/FeJanHqBP8gNdGNI2qn8RnnLVfRJgUjZ1BA=3D=3D
=3DOVqp
-----END PGP PUBLIC KEY BLOCK-----

--------------8K9TKb9cQWdHijgVuosbMcLl--

--------------mg1vH0aCGVVMzb0Ns8xAZUcB--

--------------NLNRqI000ekw60aGGVxBGoXf
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wnsEABYIACMWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYxertwUDAAAAAAAKCRBJ4+4iGRcl7gK1
AP404PUOiqiRh83oSZGTgC1xGaM3+Yf2cT2uo8ZE+T+0PwEAnTtBSLXNjkFAo8uoJ6MZJiJhWOSy
nX/roFyoAOueyQU=
=mpfU
-----END PGP SIGNATURE-----

--------------NLNRqI000ekw60aGGVxBGoXf--




Information forwarded to guix-patches@HIDDEN:
bug#57598; Package guix-patches. Full text available.

Message received at 57598 <at> debbugs.gnu.org:


Received: (at 57598) by debbugs.gnu.org; 6 Sep 2022 11:34:12 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Sep 06 07:34:12 2022
Received: from localhost ([127.0.0.1]:49881 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1oVWq5-0002yB-2G
	for submit <at> debbugs.gnu.org; Tue, 06 Sep 2022 07:34:12 -0400
Received: from mailrelay.tugraz.at ([129.27.2.202]:15843)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <liliana.prikler@HIDDEN>) id 1oVWq2-0002y1-Io
 for 57598 <at> debbugs.gnu.org; Tue, 06 Sep 2022 07:33:56 -0400
Received: from lprikler-laptop.ist.intra (gw.ist.tugraz.at [129.27.202.101])
 by mailrelay.tugraz.at (Postfix) with ESMTPSA id 4MMNZ60QrVz3wk1;
 Tue,  6 Sep 2022 13:33:49 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tugraz.at;
 s=mailrelay; t=1662464030;
 bh=LAYm5HIuwF/zB9QMru6igLB+LSuMQyJA6hrE4W57i1Y=;
 h=Subject:From:To:Date:In-Reply-To:References;
 b=A5YvNcq+VVxbui4lxT6Sf+/g0ZLZbcIjHtLcJ/oRhTUsohdj1SLuTqiorwkrD7GyL
 XUNSd6loyGr6BWuZOPUa0hnGd4scYzvx8bV7cCgc7QOojdKZRBRSUhtZYYtK4i+MOq
 cWaxhg9GQ8IxU1GU1iUQPpbc2VmzHH+L6xfZJXr0=
Message-ID: <0f78953d57d8f66a934baf518b7c9e3247b580fd.camel@HIDDEN>
Subject: Re: [PATCH] doc: Update contribution guidelines on patches, etc.
From: Liliana Marie Prikler <liliana.prikler@HIDDEN>
To: Maxime Devos <maximedevos@HIDDEN>, 57598 <at> debbugs.gnu.org
Date: Tue, 06 Sep 2022 13:33:49 +0200
In-Reply-To: <20220905160048.18173-1-maximedevos@HIDDEN>
References: <20220905160048.18173-1-maximedevos@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
User-Agent: Evolution 3.42.1 
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-TUG-Backscatter-control: waObeELIUl4ypBWmcn/8wQ
X-Spam-Scanner: SpamAssassin 3.003001 
X-Spam-Score-relay: -0.4
X-Scanned-By: MIMEDefang 2.74 on 129.27.10.116
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 57598
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Am Montag, dem 05.09.2022 um 18:00 +0200 schrieb Maxime Devos:
> +Guix has tree main ways of modifying the source code of a package,
> that
> +you as a packager may use.  These are patches, snippets and phases.
> +Each one has its strengths and drawbacks.  To decide between the tree,
three
> +there are a few guiding principles that to satisfy simultanuously
> where
> +possible:
"there are a few guiding principles to satisfy simultaneously",
"there are some guiding principles, of which as many as possible should
be satisfied".
> +
> +@itemize
> +@item
> +In principle, Guix only has free software; when the upstream source
> +contains some non-free software, it has to be removed such that
> +@command{guix build --source} returns the ‘freed’ source code rather
> than
> +the unmodified upstream source (@pxref{Software Freedom}).
If the latter wording above is chosen, this is not a "guiding
principle", because it is non-negotiable.
> +@item
> +The source of the package needs to correspond to what is actually
> built
> +(i.e., act as the corresponding source), to fulfill our ethical and
> +legal obligations.
> +@item
> +It is convenient for the source derived from an origin to build on any
> +system that the upstream package supports.
> +@item
> +The source needs to actually work, not only on your Guix system but
> also
> +for other systems; this requires some care for substitutions involving
> +store items and other architecture-specific changes.
If you embed store items, it won't even work on Guix System 😛️

Also, this appears to be a rather convenient rewording of the previous
item, does it not?
> +@item
> +When there is more than one way to do something, choose whichever
> method
> +is the simplest.  Sometimes this is subjective, which is also fine.
> +What matters is that you use techniques that are common within the
> +community (i.e., patterns that appear throughout
> @code{gnu/packages/...})
> +and are thus clearly legible for reviewers.
> +@end itemize
> +
> +To make things more concrete and to resolve conflicts between the
> +principles, a few cases have been worked out:
> +
> +@subsubsection Removing non-free software
> +Non-free software has to be removed in snippets; the reason is that
> +patches or phases will not work.
> +
> +For patches, the problem is that a patch removing a non-free file
> +automatically contains the non-free file@footnote{It has been noted
> that
> +git patches support removing files without including the file in the
> +patch in
> +@url{
> https://yhetil.org/guix/8b13e899-eb60-490b-a268-639249698c81@@www.fastmail.com/
> }. If
> +it is verified that the @command{patch} utility supports such patches,
> +this method can be used and this policy adjusted appropriately.}, and
> we
> +do not want anything non-free in Guix even if only in its patches.
We also avoid spelling out the non-free filename where possible,
preferring keep lists over remove lists, which this kind of patches
would be.

> +For phases, the problem is that phases do not influence the result of
> +@command{guix build --source}.
> +
> +@subsubsection Removing bundled libraries
> +Bundled libraries should not be removed with patches, because then the
> +patch would contain the full bundled library, which can be large. They
> +can be removed either in snippets or phases, often using the procedure
> +@code{delete-file-recursively}. There are a few benefits for snippets
> here:
> +
> +When using snippets, the bundled library does not occur in the source
> +returned by @code{guix build --source}, so users and reviewers do not
> +have to worry about whether the bundled library contains malware,
> +whether it is non-free, if it contains pre-compiled binaries ... There
> +are also less licensing concerns: if the bundled libraries are
> removed,
> +it becomes less likely that the licensing conditions apply to people
> +sharing the source returned by @command{guix build --source},
> especially if
> +the bundled library is not actually used on Guix
> systems.@footnote{This
> +is @emph{not} a claim that you can simply ignore the licenses of
> +libraries when they are unbundled and replaced by Guix packages --
> there
> +are less concerns, not none.}
> +
> +As such, snippets are recommended here.
> +
> +@subsubsection Fixing technical issues (compilation errors, test
> failures, other bugs ...)
> +Usually, a bug fix comes in the form of a patch copied from upstream
> or
> +another distribution.  In that case, simply adding the patch to the
> +@code{patches} field is the most convenient and usually does not cause
> +any problems; there is no need to rewrite it as a snippet or a phase.
> +
> +If no ready-made patch already exists, then choosing between a patch
> or
> +a snippet is a matter of convenience. However, there are two things to
> +keep in mind:
> +
> +First, when the fix is not Guix-specific, upstreaming the fix is
> +strongly desired to avoid the additional maintenance cost to Guix.  As
> +upstreams cannot accept snippets, writing a patch can be a more
> +efficient use of time.  Secondly, if the fix of a technical issue
> embeds
> +a store file name, then it has to be a phase.  
I am pretty sure that most of these are *not* done in snippets, but
rather phases, if they only affect Guix.  In particular, grep for
failing-tests and you will find a few phases disabling them.  In fact,
as far as files that will not be installed are concerned, I think
phases ought to be preferred, because they're easier to take away if an
actual fix is made.

For the store path embedding, that's a rather roundabout way of saying
that contributers *ought to* embed store paths of certaing things, such
as commands invoked via exec et al.

> Otherwise, if the store
> +file name were embedded in the source, the result of @command{guix
> build
> +--source} would be unusable on non-Guix systems and also likely
> unusable
> +on Guix systems of another architecture.
Why are you repeating a guiding principle?

> +@subsubsection Adding new functionality
> +To add new functionality, a patch is almost always the most convenient
> +choice of the three -- patches are usually multi-line changes, which
> are
> +convenient to do with patches and inconvenient to do with phases or
> +snippets.
Uhm, what?  Patches are the preferred form of patches?

>   This choice is usually also compatible with all the guiding
> +principles.  As such, patches are preferred.  However, as with bug
> +fixes, upstreaming the new functionality is desired.
> +
> +@subsection How to add patches
> +Refer to the @code{origin} record documentation (particularly the
> fields
> +@code{patches}, @code{patch-inputs}, and @code{patch-flags}) for
> +information on how to use patches (@pxref{origin Reference}).  When
> +adding a patch, do not forget to also list it in
> @code{dist_patch_DATA}
> +of @file{gnu/local.mk}.
I don't think this should be a subsection.

> +@subsection How to add files
> +New source files can be added in phases or snippets, by using
> +@b{auxiliarry files}.  Auxiliary files are stored in the
> +@file{gnu/packages/aux-files} directory and can be retrieved (in a
> +snippet or a phase) with @code{search-auxiliary-file}.  When adding an
> +auxiliary file, do not forget to also list it in @code{AUX_FILES} of
> +@file{Makefile.am}.
> +
> +Another option for adding new files, is to use procedures such as
> +@code{display}, @code{format} and @code{call-with-output-file}.  As a
> +matter of principle, auxiliary files ought to be preferred over an
> +equivalent @code{call-with-output-file} when creating non-trivil
> files,
> +as that makes them easier to edit.  The exact threshold for a
> +non-trivial file might be subjective, though it should lie somewhere
> +between 10--20 lines.
> +
> +Currently, there is no policy on deciding between phase and snippets
> for
> +adding new files, except for the guiding principles.
This should probably be a subsubsection after "Adding new
functionality" or explained within "Adding new functionality".

Overall, I'm not convinced that we have enough guiding principles to
call them that, which (along with its sheer length) is my main
complaint with the way you've phrased things.  Going down to
subsubsections just to find out where patches are appropriate, is imho
overkill.

Cheers




Information forwarded to guix-patches@HIDDEN:
bug#57598; Package guix-patches. Full text available.

Message received at 57598 <at> debbugs.gnu.org:


Received: (at 57598) by debbugs.gnu.org; 5 Sep 2022 16:04:36 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Sep 05 12:04:36 2022
Received: from localhost ([127.0.0.1]:48685 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1oVEaS-000310-9U
	for submit <at> debbugs.gnu.org; Mon, 05 Sep 2022 12:04:36 -0400
Received: from michel.telenet-ops.be ([195.130.137.88]:44400)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <maximedevos@HIDDEN>) id 1oVEaQ-00030q-4z
 for 57598 <at> debbugs.gnu.org; Mon, 05 Sep 2022 12:04:34 -0400
Received: from [IPV6:2a02:1811:8c09:9d00:5dba:d409:33f7:a16]
 ([IPv6:2a02:1811:8c09:9d00:5dba:d409:33f7:a16])
 by michel.telenet-ops.be with bizsmtp
 id GG4Y2800820ykKC06G4YWw; Mon, 05 Sep 2022 18:04:32 +0200
Message-ID: <af31b3f4-b3da-6037-0232-ce18cc315847@HIDDEN>
Date: Mon, 5 Sep 2022 18:04:32 +0200
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101
 Thunderbird/91.12.0
Subject: Re: [PATCH] doc: Update contribution guidelines on patches, etc.
Content-Language: en-US
To: 57598 <at> debbugs.gnu.org
References: <20220905160048.18173-1-maximedevos@HIDDEN>
From: Maxime Devos <maximedevos@HIDDEN>
In-Reply-To: <20220905160048.18173-1-maximedevos@HIDDEN>
Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="------------9PE0NeYvpkrEq4ClQkcSqD9K"
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r22;
 t=1662393872; bh=hnk2WgffFcJR4jv001NrSILY2Sie5l0UpvNNDezf7Gg=;
 h=Date:Subject:To:References:From:In-Reply-To;
 b=hp8or0ROJ58z/RwwS/0P+rU96EkSnh+ofUVfbNEYXY+AwH6S9QR8UdCIAOZfsnqtU
 wzUDPxr1cFkygKsDXgdK5mI6ooQQ3lspq7OIV8ETsF2kTXSEVqpj+wRsG+/M8/Iqh+
 takoBxuz8sZ9HnDR5rjmBosDO1fHA4EAfofz764j3BY/fcgC5HlhqhwLVAA60QmS/N
 6fLu+EsA5CN4o6cnbsL7EJ7NKHACiR4JLJIlJD4gjM7mQ5P85M/F8M79E41nhEchzs
 bFyLrZQxe0LEBvig8dwIBP1kFvD7rSTp8mCteLvY+sGFt+Urei+JCYMevoO/j8aCfQ
 BOFTgnNnLEftA==
X-Spam-Score: -0.0 (/)
X-Debbugs-Envelope-To: 57598
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--------------9PE0NeYvpkrEq4ClQkcSqD9K
Content-Type: multipart/mixed; boundary="------------imrO1rPoHPpkXkVxDoogeyWv";
 protected-headers="v1"
From: Maxime Devos <maximedevos@HIDDEN>
To: 57598 <at> debbugs.gnu.org
Message-ID: <af31b3f4-b3da-6037-0232-ce18cc315847@HIDDEN>
Subject: Re: [PATCH] doc: Update contribution guidelines on patches, etc.
References: <20220905160048.18173-1-maximedevos@HIDDEN>
In-Reply-To: <20220905160048.18173-1-maximedevos@HIDDEN>

--------------imrO1rPoHPpkXkVxDoogeyWv
Content-Type: multipart/mixed; boundary="------------HS8VwQD1bKu4RzpvrCKxNxhV"

--------------HS8VwQD1bKu4RzpvrCKxNxhV
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: base64

U2VlIHRoZSB0aHJlYWQgDQo8aHR0cHM6Ly95aGV0aWwub3JnL2d1aXgvMDNhMjgyNjItMzE2
ZC0yMGZjLWVhOTEtNTM3OWM3NDM2MmIxQHRlbGVuZXQuYmUvPi4NCg0KVGhlcmUgaXMgYWxz
byBhbm90aGVyIHBhdGNoIA0KPGh0dHBzOi8veWhldGlsLm9yZy9ndWl4LzFkY2NhNTc1NTgw
NjI0ZGRjYzIwODg4M2VlNjJkOGM3NWY5MDgxMzkuY2FtZWxAZ21haWwuY29tLz4sIA0Kd2hp
Y2ggZG9jdW1lbnRzIHRoZSBzYW1lIHRoaW5nLCBidXQgZGlmZmVyZW50bHkuDQoNCkdyZWV0
aW5ncywNCk1heGltZQ0K
--------------HS8VwQD1bKu4RzpvrCKxNxhV
Content-Type: application/pgp-keys; name="OpenPGP_0x49E3EE22191725EE.asc"
Content-Disposition: attachment; filename="OpenPGP_0x49E3EE22191725EE.asc"
Content-Description: OpenPGP public key
Content-Transfer-Encoding: quoted-printable

-----BEGIN PGP PUBLIC KEY BLOCK-----

xjMEX4ch6BYJKwYBBAHaRw8BAQdANPb/d6MrGnGi5HyvODCkBUJPRjiFQcRU5V+m
xvMaAa/NL01heGltZSBEZXZvcyA8bWF4aW1lLmRldm9zQHN0dWRlbnQua3VsZXV2
ZW4uYmU+wpAEExYIADgWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCX4ch6AIbAwUL
CQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRBJ4+4iGRcl7japAQC3opZ2KGWzWmRc
/gIWSu0AAcfMwyinFEEPa/QhUt2CogD/e2RdF4CYAgaRHJJmZ9WU7piKbLZ7llB4
LzgezVDHggzNJU1heGltZSBEZXZvcyA8bWF4aW1lZGV2b3NAdGVsZW5ldC5iZT7C
kAQTFggAOBYhBMHzPuIMUo/bfdcBH0nj7iIZFyXuBQJf56ycAhsDBQsJCAcDBRUK
CQgLBRYCAwEAAh4BAheAAAoJEEnj7iIZFyXujpQBAKV1SwDDl4f24rXciDlB9L8W
ycZt30CgbewMSRQk4mvbAP9dFMbVVixYBd6C8cfhR+NsOBGiOJnQABlUmgNuqGFJ
Dc44BF+HIegSCisGAQQBl1UBBQEBB0BOlzIWiJzgobMF6/cqwLaLk7jIcFSZ++c0
k9cCNT6YXwMBCAfCeAQYFggAIBYhBMHzPuIMUo/bfdcBH0nj7iIZFyXuBQJfhyHo
AhsMAAoJEEnj7iIZFyXuMr0BAJc8cl5PGvVmVuSQVKjleNl4DK1/XAaPAYPe34AE
fZJPAP9IqLCQhH/FeJanHqBP8gNdGNI2qn8RnnLVfRJgUjZ1BA=3D=3D
=3DOVqp
-----END PGP PUBLIC KEY BLOCK-----

--------------HS8VwQD1bKu4RzpvrCKxNxhV--

--------------imrO1rPoHPpkXkVxDoogeyWv--

--------------9PE0NeYvpkrEq4ClQkcSqD9K
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wnsEABYIACMWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYxYeEAUDAAAAAAAKCRBJ4+4iGRcl7kJR
AQD2D1RcH32u+syWAHDP91rOjDdvl8g+gokXNnISDiEOVwD9FRq8sVXqerK2QdLjKUU8Cu6rdjMy
mM0ojNtvoj/8aQI=
=k2zR
-----END PGP SIGNATURE-----

--------------9PE0NeYvpkrEq4ClQkcSqD9K--




Information forwarded to guix-patches@HIDDEN:
bug#57598; Package guix-patches. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 5 Sep 2022 16:01:07 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Sep 05 12:01:07 2022
Received: from localhost ([127.0.0.1]:48672 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1oVEX4-0002uF-JG
	for submit <at> debbugs.gnu.org; Mon, 05 Sep 2022 12:01:07 -0400
Received: from lists.gnu.org ([209.51.188.17]:47192)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <maximedevos@HIDDEN>) id 1oVEX2-0002u7-Dp
 for submit <at> debbugs.gnu.org; Mon, 05 Sep 2022 12:01:05 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:54508)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <maximedevos@HIDDEN>)
 id 1oVEX1-0002eu-O8
 for guix-patches@HIDDEN; Mon, 05 Sep 2022 12:01:04 -0400
Received: from laurent.telenet-ops.be ([2a02:1800:110:4::f00:19]:56432)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <maximedevos@HIDDEN>)
 id 1oVEWu-0005oG-R3
 for guix-patches@HIDDEN; Mon, 05 Sep 2022 12:01:02 -0400
Received: from localhost.localdomain
 ([IPv6:2a02:1811:8c09:9d00:5dba:d409:33f7:a16])
 by laurent.telenet-ops.be with bizsmtp
 id GG0q2800B20ykKC01G0qud; Mon, 05 Sep 2022 18:00:50 +0200
From: Maxime Devos <maximedevos@HIDDEN>
To: guix-patches@HIDDEN
Subject: [PATCH] doc: Update contribution guidelines on patches, etc.
Date: Mon,  5 Sep 2022 18:00:48 +0200
Message-Id: <20220905160048.18173-1-maximedevos@HIDDEN>
X-Mailer: git-send-email 2.37.2
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r22;
 t=1662393650; bh=KPB1SsoMTS46gQyNDNiuGhWEicwgcbuMCxn15uCYdD4=;
 h=From:To:Cc:Subject:Date;
 b=butgFw7JPLgjy5LI96zN20DCLhjISBaU/bRi7uzkf6vFVF7iqVecfClD0r6QPmNtR
 M2JmduTUU62kuyfWKIEIwYkHt6q+2OlPqaxYeoF1etX+cTa6F2CNtgOPBtqj0VWipU
 rkfNyc/ZlBrHnq9rxPsPvrSWhuAu4x8xQYoeTw3QrxsFCDyTRnijV5OUOx9eqy9KKe
 Ht3Engzo5E3KQiC6hTMYYahtF1Tcud9zlYnHeHlF1B4c1c30jhrbGzVVfQKjq3XGUo
 RSPk4fwm4Vrqap57rxV7FPphkj695ccZVb4iGzGUe+tRdzF6OCR87nAWuctQbB1Bdw
 TBkakAJTsWzVw==
Received-SPF: pass client-ip=2a02:1800:110:4::f00:19;
 envelope-from=maximedevos@HIDDEN; helo=laurent.telenet-ops.be
X-Spam_score_int: -27
X-Spam_score: -2.8
X-Spam_bar: --
X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001,
 T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 0.1 (/)
X-Debbugs-Envelope-To: submit
Cc: Maxime Devos <maximedevos@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -2.3 (--)

* doc/contributing.texi (Modifying Sources): Replaced with ...
("Modifying Sources"): ... this.  List more use cases and some principles.

This patch incorporates some tet written by Liliana Marie Prikler.  The
structure is based on a proposal by Julien Lepiller.  The text has been
revised based on reviews by David Larsson and blake.
---
 doc/contributing.texi | 141 +++++++++++++++++++++++++++++++++++++-----
 doc/guix.texi         |   2 +-
 2 files changed, 127 insertions(+), 16 deletions(-)

diff --git a/doc/contributing.texi b/doc/contributing.texi
index 02c7c5ae59..f6bdb8a441 100644
--- a/doc/contributing.texi
+++ b/doc/contributing.texi
@@ -441,7 +441,7 @@ needed is to review and apply the patch.
 * Package Naming::              What's in a name?
 * Version Numbers::             When the name is not enough.
 * Synopses and Descriptions::   Helping users find the right package.
-* Snippets versus Phases::      Whether to use a snippet, or a build phase.
+* Modifying Sources::           Whether to use a snippet, or a build phase.
 * Emacs Packages::              Your Elisp fix.
 * Python Modules::              A touch of British comedy.
 * Perl Modules::                Little pearls.
@@ -698,20 +698,131 @@ Gettext}):
 for the X11 resize-and-rotate (RandR) extension. @dots{}")
 @end lisp
 
-@node Snippets versus Phases
-@subsection Snippets versus Phases
-
-@cindex snippets, when to use
-The boundary between using an origin snippet versus a build phase to
-modify the sources of a package can be elusive.  Origin snippets are
-typically used to remove unwanted files such as bundled libraries,
-nonfree sources, or to apply simple substitutions.  The source derived
-from an origin should produce a source that can be used to build the
-package on any system that the upstream package supports (i.e., act as
-the corresponding source).  In particular, origin snippets must not
-embed store items in the sources; such patching should rather be done
-using build phases.  Refer to the @code{origin} record documentation for
-more information (@pxref{origin Reference}).
+@node Modifying Sources
+@subsection Modifying Sources
+
+Guix has tree main ways of modifying the source code of a package, that
+you as a packager may use.  These are patches, snippets and phases.
+Each one has its strengths and drawbacks.  To decide between the tree,
+there are a few guiding principles that to satisfy simultanuously where
+possible:
+
+@itemize
+@item
+In principle, Guix only has free software; when the upstream source
+contains some non-free software, it has to be removed such that
+@command{guix build --source} returns the ‘freed’ source code rather than
+the unmodified upstream source (@pxref{Software Freedom}).
+@item
+The source of the package needs to correspond to what is actually built
+(i.e., act as the corresponding source), to fulfill our ethical and
+legal obligations.
+@item
+It is convenient for the source derived from an origin to build on any
+system that the upstream package supports.
+@item
+The source needs to actually work, not only on your Guix system but also
+for other systems; this requires some care for substitutions involving
+store items and other architecture-specific changes.
+@item
+When there is more than one way to do something, choose whichever method
+is the simplest.  Sometimes this is subjective, which is also fine.
+What matters is that you use techniques that are common within the
+community (i.e., patterns that appear throughout @code{gnu/packages/...})
+and are thus clearly legible for reviewers.
+@end itemize
+
+To make things more concrete and to resolve conflicts between the
+principles, a few cases have been worked out:
+
+@subsubsection Removing non-free software
+Non-free software has to be removed in snippets; the reason is that
+patches or phases will not work.
+
+For patches, the problem is that a patch removing a non-free file
+automatically contains the non-free file@footnote{It has been noted that
+git patches support removing files without including the file in the
+patch in
+@url{https://yhetil.org/guix/8b13e899-eb60-490b-a268-639249698c81@@www.fastmail.com/}. If
+it is verified that the @command{patch} utility supports such patches,
+this method can be used and this policy adjusted appropriately.}, and we
+do not want anything non-free in Guix even if only in its patches.
+
+For phases, the problem is that phases do not influence the result of
+@command{guix build --source}.
+
+@subsubsection Removing bundled libraries
+Bundled libraries should not be removed with patches, because then the
+patch would contain the full bundled library, which can be large. They
+can be removed either in snippets or phases, often using the procedure
+@code{delete-file-recursively}. There are a few benefits for snippets here:
+
+When using snippets, the bundled library does not occur in the source
+returned by @code{guix build --source}, so users and reviewers do not
+have to worry about whether the bundled library contains malware,
+whether it is non-free, if it contains pre-compiled binaries ... There
+are also less licensing concerns: if the bundled libraries are removed,
+it becomes less likely that the licensing conditions apply to people
+sharing the source returned by @command{guix build --source}, especially if
+the bundled library is not actually used on Guix systems.@footnote{This
+is @emph{not} a claim that you can simply ignore the licenses of
+libraries when they are unbundled and replaced by Guix packages -- there
+are less concerns, not none.}
+
+As such, snippets are recommended here.
+
+@subsubsection Fixing technical issues (compilation errors, test failures, other bugs ...)
+Usually, a bug fix comes in the form of a patch copied from upstream or
+another distribution.  In that case, simply adding the patch to the
+@code{patches} field is the most convenient and usually does not cause
+any problems; there is no need to rewrite it as a snippet or a phase.
+
+If no ready-made patch already exists, then choosing between a patch or
+a snippet is a matter of convenience. However, there are two things to
+keep in mind:
+
+First, when the fix is not Guix-specific, upstreaming the fix is
+strongly desired to avoid the additional maintenance cost to Guix.  As
+upstreams cannot accept snippets, writing a patch can be a more
+efficient use of time.  Secondly, if the fix of a technical issue embeds
+a store file name, then it has to be a phase.  Otherwise, if the store
+file name were embedded in the source, the result of @command{guix build
+--source} would be unusable on non-Guix systems and also likely unusable
+on Guix systems of another architecture.
+
+@subsubsection Adding new functionality
+To add new functionality, a patch is almost always the most convenient
+choice of the three -- patches are usually multi-line changes, which are
+convenient to do with patches and inconvenient to do with phases or
+snippets.  This choice is usually also compatible with all the guiding
+principles.  As such, patches are preferred.  However, as with bug
+fixes, upstreaming the new functionality is desired.
+
+@subsection How to add patches
+Refer to the @code{origin} record documentation (particularly the fields
+@code{patches}, @code{patch-inputs}, and @code{patch-flags}) for
+information on how to use patches (@pxref{origin Reference}).  When
+adding a patch, do not forget to also list it in @code{dist_patch_DATA}
+of @file{gnu/local.mk}.
+
+@subsection How to add files
+New source files can be added in phases or snippets, by using
+@b{auxiliarry files}.  Auxiliary files are stored in the
+@file{gnu/packages/aux-files} directory and can be retrieved (in a
+snippet or a phase) with @code{search-auxiliary-file}.  When adding an
+auxiliary file, do not forget to also list it in @code{AUX_FILES} of
+@file{Makefile.am}.
+
+Another option for adding new files, is to use procedures such as
+@code{display}, @code{format} and @code{call-with-output-file}.  As a
+matter of principle, auxiliary files ought to be preferred over an
+equivalent @code{call-with-output-file} when creating non-trivil files,
+as that makes them easier to edit.  The exact threshold for a
+non-trivial file might be subjective, though it should lie somewhere
+between 10--20 lines.
+
+Currently, there is no policy on deciding between phase and snippets for
+adding new files, except for the guiding principles.
 
 @node Emacs Packages
 @subsection Emacs Packages
diff --git a/doc/guix.texi b/doc/guix.texi
index 7bce8a567c..042ab3bd8a 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -70,7 +70,7 @@ Copyright @copyright{} 2019 Jakob L. Kreuze@*
 Copyright @copyright{} 2019 Kyle Andrews@*
 Copyright @copyright{} 2019 Alex Griffin@*
 Copyright @copyright{} 2019, 2020, 2021, 2022 Guillaume Le Vaillant@*
-Copyright @copyright{} 2020 Liliana Marie Prikler@*
+Copyright @copyright{} 2020, 2022 Liliana Marie Prikler@*
 Copyright @copyright{} 2019, 2020, 2021, 2022 Simon Tournier@*
 Copyright @copyright{} 2020 Wiktor Żelazny@*
 Copyright @copyright{} 2020 Damien Cassou@*

base-commit: 57f8f69562e942557e3331bb81c7e4acd973d189
prerequisite-patch-id: 78c06b38a189109a5108a157d39ffe7eab8be109
prerequisite-patch-id: aaf0731113d36df901ed2186975e3bb872ec22c0
prerequisite-patch-id: 28e8223cfd59adf84007db9ceefd8a78c41fd10d
prerequisite-patch-id: fb73228d99c36f50e2959c2303c7c707460fd147
prerequisite-patch-id: 7626f1464f4926416fb13daf3d846176aa93f51b
prerequisite-patch-id: 445c6f624e99627959f2e54a6ee97337c44d9ea6
prerequisite-patch-id: 7a16c500faec9d58700a2b50b26bded079e9c3ac
prerequisite-patch-id: f7d406c61e069c04c3b7da453192f51c04763db1
prerequisite-patch-id: 4674bf40052d97215f837c9dfd4e7e1ae999492d
prerequisite-patch-id: 6259468375bfa157277521b17fdd97d6ab0748b7
prerequisite-patch-id: 9d14b38a33b68883c43d6b26dcdbdf7c28e417e7
prerequisite-patch-id: f0e3faffe768e9c660b0a9340042acfa0f790308
prerequisite-patch-id: 550485506255a67c0a1cb9ede7778d4d538b6e2a
prerequisite-patch-id: 9282e95ff076cc2c742be8d2fede83ac14006f6f
prerequisite-patch-id: 1503aa5c698f72ee47b7a987a95c0919efb203c4
prerequisite-patch-id: 24297940086a3780fd7e2e7fa345f262b12efb6f
prerequisite-patch-id: c5f647b5472465666328b123f0f314a6138d6293
prerequisite-patch-id: 56386c4df9130221cad664ec161d1ad9713f4dc3
prerequisite-patch-id: f09ccfb7e53bc7934326af603a197344f4ef53f3
prerequisite-patch-id: 0c18c83d1f2da4639b43861103a028706a147022
prerequisite-patch-id: 066bfca8bf0c3d3bc57a14b48aa1e241555c1e86
prerequisite-patch-id: 13d9ac7b0fadc92b9351409df26b41443497a964
prerequisite-patch-id: ad831a04543475288aba1c938078dcc5ad05870e
prerequisite-patch-id: ed9ec2d0bea23c2c2dbfa4c62290893f1a938f7f
prerequisite-patch-id: 335ce9dbbb2b36b960203a79fdc8f6033ebda2fb
prerequisite-patch-id: f2ca362056369913d0b8319187a8f46ea78b6dc7
prerequisite-patch-id: c02a17479ad4e01837fc307cf6defe0ae92e2435
prerequisite-patch-id: 3a794307f3bbd3641023d978f4b359eb2f5a46e4
prerequisite-patch-id: c545007535db365a29dc3a86e10866f5eef7b7d5
prerequisite-patch-id: 8b8fd18762282129e2d034f7cdceb368f53295d6
prerequisite-patch-id: d435d42bafa65f14049740a3d6cf1a163f855f97
prerequisite-patch-id: 27da1b857019b217b25b6795b84577fdc992a84c
prerequisite-patch-id: aef95e76144ae5e92a41f81b11e84ddc7ececd91
prerequisite-patch-id: 95aa6b45d93026e4375b53a471f0f96e2016914e
prerequisite-patch-id: 715d2bb93fe711e72388458846a0afde6babdc97
prerequisite-patch-id: 63422b710539c3eeac249bf0201107914a215d16
prerequisite-patch-id: 53c9d2236538f9a9009b5b7b2455ef4875d0e31a
prerequisite-patch-id: 37df0e9658435e0a5e2b49fe54a69b91385fb596
prerequisite-patch-id: d2ecaf3439d153de1d53f608e7f5815c73d7b93c
-- 
2.37.2





Acknowledgement sent to Maxime Devos <maximedevos@HIDDEN>:
New bug report received and forwarded. Copy sent to guix-patches@HIDDEN. Full text available.
Report forwarded to guix-patches@HIDDEN:
bug#57598; Package guix-patches. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Sat, 24 Sep 2022 13:15:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.