[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Patch for w3m-end-of-tag to handle HTML tags that enclose whitespace



When an HTML tag encloses only whitespace, as in

  <blockquote>   </blockquote>

, function w3m-end-of-tag can set the match-data in an inconsistent way where the start of a group comes *after* the beginning of a group. In particular, group 3 starts at the end of the enclosed whitespace, and group 3 ends at the beginning of the enclosed whitespace. This causes clients such as mew-w3m-cite-blockquote to fail.

The attached patch fixes this problem.

Other routines such as w3m-beginning-of-tag might suffer the same problem; I have not investigated them.

I noticed this problem while running the Mew email reader.
The attached email message reproduces the problem.

                    -Mike

--- w3m-util.el.~1.166.~	2014-01-08 08:02:55.305693318 -0800
+++ w3m-util.el	2014-04-17 08:00:23.848474460 -0700
@@ -1097,7 +1097,7 @@
 			      (1+ num))))
 		(setq nd1 (nth 3 (match-data)) ;; (match-end 1)
 		      nd2 (nth 2 (match-data)) ;; (match-beginning 1)
-		      nd3 (car (match-data)))) ;; (match-beginning 0)
+		      nd3 (max st3 (car (match-data))))) ;; (match-beginning 0)
 	    (search-backward "<")
 	    (setq st1 (car (match-data))) ;; (match-beginning 0)
 	    (goto-char init)
Delivered-To: mernst@xxxxxxxxxxxxxxxxx
Received: by 10.182.213.97 with SMTP id nr1csp203066obc;
        Tue, 15 Apr 2014 10:06:12 -0700 (PDT)
X-Received: by 10.68.171.193 with SMTP id aw1mr3078976pbc.117.1397581571874;
        Tue, 15 Apr 2014 10:06:11 -0700 (PDT)
Return-Path: <damiano.macedonio@xxxxxxxxx>
Received: from mx4.cs.washington.edu (mx4.cs.washington.edu. [2607:4000:200:17::35]) by mx.google.com with ESMTPS id wh4si11174862pbc.348.2014.04.15.10.06.11
        for <mernst@xxxxxxxxxxxxxxxxx>
        (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
        Tue, 15 Apr 2014 10:06:11 -0700 (PDT)
Received-SPF: pass (google.com: domain of damiano.macedonio@xxxxxxxxx designates 2607:4000:200:17::35 as permitted sender)
Authentication-Results: mx.google.com;
spf=pass (google.com: domain of damiano.macedonio@xxxxxxxxx designates 2607:4000:200:17::35 as permitted sender) smtp.mail=damiano.macedonio@xxxxxxxxx;
       dkim=pass header.i=@xxxxxxxxx
Received: from mx2.cs.washington.edu (mx2.cs.washington.edu [IPv6:2607:4000:200:11::69]) by mx4.cs.washington.edu (8.14.7/8.14.7/1.12) with ESMTP id s3FH68AC025387 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL)
	for <mernst@xxxxxxxxxxxxxxxxx>; Tue, 15 Apr 2014 10:06:08 -0700
	(envelope-from damiano.macedonio@xxxxxxxxx)
Received: from mail-oa0-x235.google.com (mail-oa0-x235.google.com [IPv6:2607:f8b0:4003:c02::235]) by mx2.cs.washington.edu (8.14.7/8.14.7/1.12) with ESMTP id s3FH63I0025819
	(version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT);
	Tue, 15 Apr 2014 10:06:03 -0700
	(envelope-from damiano.macedonio@xxxxxxxxx)
Received: by mail-oa0-f53.google.com with SMTP id j17so10848821oag.26
        for <multiple recipients>; Tue, 15 Apr 2014 10:06:03 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20120113;
h=mime-version:sender:in-reply-to:references:date:message-id:subject
         :from:to:cc:content-type;
        bh=wmCbzG6Xpdfu5brY8wkGSFQ4GE1jtF5IGZKM/jqr2vE=;
b=YpD141XlF9HxdypgEb3/Dg0soVR+BxMzkLn89iGF00c1GDMCgnycLFSoDFSLvEN4qO J/l38/zTTSr2zrddrqfsyPJhaUboycTPOHt0uJAAp4pRAQdJatq/ME244gMSZj9tBGh7 P0i0yiHok+Wr7bWMQdCRRdAmgvZOYPOFwXY2k4DrLwpstjodXH8C8NDWy2o7x5vGnJRC d5zLQspQcOM4fwiWhBQqszYHjBFRRH/cvdaIHpiu4F5/I7gSuedG0Wt/ViHxGbAr3zNZ I1d1eR9/mLKyAmm8VwZrIEO9SLe1Erv6fKA/NWe8DGPW7bcqEqXehPu/ykKhQBYCuJIO
         NBiA==
MIME-Version: 1.0
X-Received: by 10.182.120.40 with SMTP id kz8mr2492028obb.6.1397581563162;
 Tue, 15 Apr 2014 10:06:03 -0700 (PDT)
Sender: damiano.macedonio@xxxxxxxxx
Received: by 10.182.186.71 with HTTP; Tue, 15 Apr 2014 10:06:02 -0700 (PDT)
In-Reply-To: <20140415.085825.525497345661014287.mernst@xxxxxxxxxxxxxxxxx>
References: <022235e2a9187ece238e0f10c4a712c9@xxxxxxxxxxxxxx>
	<20140414.093327.1551137378242287599.mernst@xxxxxxxxxxxxxxxxx>
	<CAMi4Anc7tVcH8=hAojgajNM9dLPygTxPSd_XgGaOS1E_ta6QPg@xxxxxxxxxxxxxx>
	<20140415.085825.525497345661014287.mernst@xxxxxxxxxxxxxxxxx>
Date: Tue, 15 Apr 2014 19:06:02 +0200
X-Google-Sender-Auth: xhP7X3MIvBUleg5qnSpPVSJZfe4
Message-ID: <CADo8cTyHrheg16Gn-tuXRGevYdbG5gZ2Eb0=nk47tZdJPaOTyA@xxxxxxxxxxxxxx>
Subject: Re: Lock inference for Google Guava library
From: Damiano Macedonio <damiano.macedonio@xxxxxxxxxxxxx>
To: Michael Ernst <mernst@xxxxxxxxxxxxxxxxx>
Cc: Fausto Spoto <fausto.spoto@xxxxxxxx>,
        Javier Thaine <jthaine@xxxxxxxxxxxxxxxxx>,
        "alberto.lovato" <alberto.lovato@xxxxxxxxxxxxx>
Content-Type: multipart/mixed; boundary=089e0139fc3a9e12ef04f717d0a5
X-Uwcse-Spam-Status: No, score=0.0 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, FREEMAIL_FROM,HTML_MESSAGE,SPF_PASS autolearn=disabled version=3.3.2-20140413
X-Uwcse-Spam-Checker-Version: SpamAssassin 3.3.2-20140413 (2011-06-06) on
	mx4.cs.washington.edu

--089e0139fc3a9e12ef04f717d0a5
Content-Type: multipart/alternative; boundary=089e0139fc3a9e12ea04f717d0a3

--089e0139fc3a9e12ea04f717d0a3
Content-Type: text/plain; charset=UTF-8

Mike,


You said "jaif ... generated by the Checker Framework".
Can you clarify this?  The Checker Framework doesn't do inference except
intra-procedurally.


We mean the annotation inferred by the Checker Framework, as we want to
compare the Checker Framework's intraprocedural inference with Julia's.

I believe that the argument to @GuardedBy should be a string.  Is it the
symbol bottom, or a string with that content, or empty, or something else? Can you tell us exactly how you obtained the problematic jaif file so that
we can reproduce the problem locally?


Yes, that's correct. We obtain a lot of @GuardedByBottom annotation, which
are of minor relevance as they represent an implementation detail of the
checker. We are looking for @GuardedBy annotation different from
@GuardedByBottom. At the moment we found just the annotation listed in the
file I am enclosing. We would like to know if we are missing something or
those are all the annotations that are intra-procedurally inferred by the
Checker.

Tanks a lot!

Damiano.


2014-04-15 17:58 GMT+02:00 Michael Ernst <mernst@xxxxxxxxxxxxxxxxx>:

Fausto-


 this is completely fine. For the paper, we wanted however to compare the
jaif generated by Julia and that generated by the Checker Framework, on the
same code. In this direction, we need to:

1) run the Checker Framework on the source code
2) extract the inferred @GuardedBy and @Holding annotations


You said "jaif ... generated by the Checker Framework".
Can you clarify this?  The Checker Framework doesn't do inference except
intra-procedurally.

Maybe you mean "jaif for annotations that are verifiable by the Checker
Framework".  Or maybe you want to compare the Checker Framework's
intraprocedural inference with Julia's.  Or maybe something else and I'm
not interpreting your writing correctly.


 At the moment, Damiano and Alberto get a jaif file with
@GuardedBy(bottom) annotations, that is not what we need. Is this a problem in the Checker Framework or in the annotation extraction tool? Or we just
use the wrong options? How can we overcome it?


I believe that the argument to @GuardedBy should be a string.  Is it the
symbol bottom, or a string with that content, or empty, or something else? Can you tell us exactly how you obtained the problematic jaif file so that
we can reproduce the problem locally?

Thanks!

                    -Mike


--089e0139fc3a9e12ea04f717d0a3
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Mike,<br><br><div class=3D"gmail_extra"><div class=3D"gmai= l_quote"><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8e= x;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class=3D"">= <blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-=
left:1px solid rgb(204,204,204);padding-left:1ex">

</blockquote>
<br></div>
You said &quot;jaif ... generated by the Checker Framework&quot;.<br>
Can you clarify this? =C2=A0The Checker Framework doesn&#39;t do inference =
except intra-procedurally.<br>
<br></blockquote><div><br></div><div class=3D"">We mean the annotation infe= rred by the Checker Framework, as we want to compare the Checker Framework&=
#39;s intraprocedural inference with Julia&#39;s.<br>
<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8=
ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
I believe that the argument to @GuardedBy should be a string. =C2=A0Is it t= he symbol bottom, or a string with that content, or empty, or something els= e? Can you tell us exactly how you obtained the problematic jaif file so th=
at we can reproduce the problem locally?<br>

<br>
</blockquote><div><br></div><div>Yes, that&#39;s correct. We obtain a lot o= f @GuardedByBottom annotation, which are of minor relevance as they represe= nt an implementation detail of the checker. We are looking for @GuardedBy a= nnotation different from @GuardedByBottom. At the moment we found just the = annotation listed in the file I am enclosing. We would like to know if we a= re missing something or those are all the annotations that are intra-proced=
urally inferred by the Checker. <br>
<br></div><div>Tanks a lot!<br><br></div><div>Damiano.<br></div></div></div=
</div><div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">2014-0=
4-15 17:58 GMT+02:00 Michael Ernst <span dir=3D"ltr">&lt;<a href=3D"mailto:= mernst@xxxxxxxxxxxxxxxxx" target=3D"_blank">mernst@xxxxxxxxxxxxxxxxx</a>&gt=
;</span>:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">Fausto-<div class=3D""><br>
<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
this is completely fine. For the paper, we wanted however to compare the ja= if generated by Julia and that generated by the Checker Framework, on the s=
ame code. In this direction, we need to:<br>
<br>
1) run the Checker Framework on the source code<br>
2) extract the inferred @GuardedBy and @Holding annotations<br>
</blockquote>
<br></div>
You said &quot;jaif ... generated by the Checker Framework&quot;.<br>
Can you clarify this? =C2=A0The Checker Framework doesn&#39;t do inference =
except intra-procedurally.<br>
<br>
Maybe you mean &quot;jaif for annotations that are verifiable by the Checke= r Framework&quot;. =C2=A0Or maybe you want to compare the Checker Framework= &#39;s intraprocedural inference with Julia&#39;s. =C2=A0Or maybe something=
 else and I&#39;m not interpreting your writing correctly.<div class=3D"">
<br>
<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
At the moment, Damiano and Alberto get a jaif file with @GuardedBy(bottom) = annotations, that is not what we need. Is this a problem in the Checker Fra= mework or in the annotation extraction tool? Or we just use the wrong optio=
ns? How can we overcome it?<br>

</blockquote>
<br></div>
I believe that the argument to @GuardedBy should be a string. =C2=A0Is it t= he symbol bottom, or a string with that content, or empty, or something els= e? Can you tell us exactly how you obtained the problematic jaif file so th=
at we can reproduce the problem locally?<br>

<br>
Thanks!<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 -Mike=
<br>
</blockquote></div><br></div>

--089e0139fc3a9e12ea04f717d0a3--
--089e0139fc3a9e12ef04f717d0a5
Content-Type: text/plain; charset=US-ASCII;
	name="checkerFrameworkIntraproceduralInferences.txt"
Content-Disposition: attachment;
	filename="checkerFrameworkIntraproceduralInferences.txt"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hu1fyp6i0

Ly8gc29ubyB0dXR0ZSBhbm5vdGF6aW9uaSBjaGUgZXJhbm8gcHJlc2VudGkgbmVsIHNvcmdlbnRl
IGNvbiBqYXZheC5hbm5vdGF0aW9uLmNvbmN1cnJlbnQuCi8vIGlsIENoZWNrZXIgbGUgaGEgdHJh
ZG90dGUgYW5jaGUgaW4gY2hlY2tlcnMubG9jay5xdWFscy4KCnBhY2thZ2UgY29tLmdvb2dsZS5j
b21tb24uY2FjaGU6CmNsYXNzIExvY2FsQ2FjaGUkU3Ryb25nQWNjZXNzV3JpdGVFbnRyeToKCiAg
ICBmaWVsZCBuZXh0QWNjZXNzOiBAamF2YXguYW5ub3RhdGlvbi5jb25jdXJyZW50Lkd1YXJkZWRC
eSh2YWx1ZT0iU2VnbWVudC50aGlzIikKICAgICAgICB0eXBlOiBAY2hlY2tlcnMubG9jay5xdWFs
cy5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIpCiAgICAgICAgCiAgICBmaWVsZCBwcmV2
aW91c0FjY2VzczogQGphdmF4LmFubm90YXRpb24uY29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9
IlNlZ21lbnQudGhpcyIpCiAgICAgICAgdHlwZTogQGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRl
ZEJ5KHZhbHVlPSJTZWdtZW50LnRoaXMiKQogICAgICAgIAogICAgZmllbGQgbmV4dFdyaXRlOiBA
amF2YXguYW5ub3RhdGlvbi5jb25jdXJyZW50Lkd1YXJkZWRCeSh2YWx1ZT0iU2VnbWVudC50aGlz
IikKICAgICAgICB0eXBlOiBAY2hlY2tlcnMubG9jay5xdWFscy5HdWFyZGVkQnkodmFsdWU9IlNl
Z21lbnQudGhpcyIpCiAgICAgICAgCiAgICBmaWVsZCBwcmV2aW91c1dyaXRlOiBAamF2YXguYW5u
b3RhdGlvbi5jb25jdXJyZW50Lkd1YXJkZWRCeSh2YWx1ZT0iU2VnbWVudC50aGlzIikKICAgICAg
ICB0eXBlOiBAY2hlY2tlcnMubG9jay5xdWFscy5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhp
cyIpICAgICAgICAKICAgICAgICAKY2xhc3MgTG9jYWxDYWNoZTogQGNvbS5nb29nbGUuY29tbW9u
LmFubm90YXRpb25zLkd3dENvbXBhdGlibGUoZW11bGF0ZWQ9dHJ1ZSkKCiAgICBtZXRob2QgbmV3
RW50cnkoTGphdmEvbGFuZy9PYmplY3Q7SUxjb20vZ29vZ2xlL2NvbW1vbi9jYWNoZS9Mb2NhbENh
Y2hlJFJlZmVyZW5jZUVudHJ5OylMY29tL2dvb2dsZS9jb21tb24vY2FjaGUvTG9jYWxDYWNoZSRS
ZWZlcmVuY2VFbnRyeTs6IEBqYXZheC5hbm5vdGF0aW9uLmNvbmN1cnJlbnQuR3VhcmRlZEJ5KHZh
bHVlPSJTZWdtZW50LnRoaXMiKSBAY29tLmdvb2dsZS5jb21tb24uYW5ub3RhdGlvbnMuVmlzaWJs
ZUZvclRlc3RpbmcKICAgICAgICByZXR1cm46IEBjaGVja2Vycy5sb2NrLnF1YWxzLkd1YXJkZWRC
eSh2YWx1ZT0iU2VnbWVudC50aGlzIikKICAgICAgICAKICAgIG1ldGhvZCBjb3B5RW50cnkoTGNv
bS9nb29nbGUvY29tbW9uL2NhY2hlL0xvY2FsQ2FjaGUkUmVmZXJlbmNlRW50cnk7TGNvbS9nb29n
bGUvY29tbW9uL2NhY2hlL0xvY2FsQ2FjaGUkUmVmZXJlbmNlRW50cnk7KUxjb20vZ29vZ2xlL2Nv
bW1vbi9jYWNoZS9Mb2NhbENhY2hlJFJlZmVyZW5jZUVudHJ5OzogQGphdmF4LmFubm90YXRpb24u
Y29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIpIEBjb20uZ29vZ2xlLmNv
bW1vbi5hbm5vdGF0aW9ucy5WaXNpYmxlRm9yVGVzdGluZwogICAgICAgIHJldHVybjogQGNoZWNr
ZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVlPSJTZWdtZW50LnRoaXMiKQogICAgICAgIAog
ICAgbWV0aG9kIG5ld1ZhbHVlUmVmZXJlbmNlKExjb20vZ29vZ2xlL2NvbW1vbi9jYWNoZS9Mb2Nh
bENhY2hlJFJlZmVyZW5jZUVudHJ5O0xqYXZhL2xhbmcvT2JqZWN0O0kpTGNvbS9nb29nbGUvY29t
bW9uL2NhY2hlL0xvY2FsQ2FjaGUkVmFsdWVSZWZlcmVuY2U7OiBAamF2YXguYW5ub3RhdGlvbi5j
b25jdXJyZW50Lkd1YXJkZWRCeSh2YWx1ZT0iU2VnbWVudC50aGlzIikgQGNvbS5nb29nbGUuY29t
bW9uLmFubm90YXRpb25zLlZpc2libGVGb3JUZXN0aW5nCiAgICAgICAgcmV0dXJuOiBAY2hlY2tl
cnMubG9jay5xdWFscy5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIpCgpjbGFzcyBMb2Nh
bENhY2hlJFN0cm9uZ0FjY2Vzc0VudHJ5OgogICAgICAgIAogICAgZmllbGQgbmV4dEFjY2Vzczog
QGphdmF4LmFubm90YXRpb24uY29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhp
cyIpCiAgICAgICAgdHlwZTogQGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVlPSJT
ZWdtZW50LnRoaXMiKQoKICAgIGZpZWxkIHByZXZpb3VzQWNjZXNzOiBAamF2YXguYW5ub3RhdGlv
bi5jb25jdXJyZW50Lkd1YXJkZWRCeSh2YWx1ZT0iU2VnbWVudC50aGlzIikKICAgICAgICB0eXBl
OiBAY2hlY2tlcnMubG9jay5xdWFscy5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIpCgpj
bGFzcyBMb2NhbENhY2hlJFdlYWtXcml0ZUVudHJ5OgoKICAgIGZpZWxkIG5leHRXcml0ZTogQGph
dmF4LmFubm90YXRpb24uY29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIp
CiAgICAgICAgdHlwZTogQGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVlPSJTZWdt
ZW50LnRoaXMiKQoKICAgIGZpZWxkIHByZXZpb3VzV3JpdGU6IEBqYXZheC5hbm5vdGF0aW9uLmNv
bmN1cnJlbnQuR3VhcmRlZEJ5KHZhbHVlPSJTZWdtZW50LnRoaXMiKQogICAgICAgIHR5cGU6IEBj
aGVja2Vycy5sb2NrLnF1YWxzLkd1YXJkZWRCeSh2YWx1ZT0iU2VnbWVudC50aGlzIikKCmNsYXNz
IExvY2FsQ2FjaGUkU2VnbWVudDoKCiAgICBmaWVsZCB0b3RhbFdlaWdodDogQGphdmF4LmFubm90
YXRpb24uY29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9InRoaXMiKQogICAgICAgIHR5cGU6IEBj
aGVja2Vycy5sb2NrLnF1YWxzLkd1YXJkZWRCeSh2YWx1ZT0idGhpcyIpCgogICAgZmllbGQgd3Jp
dGVRdWV1ZTogQGphdmF4LmFubm90YXRpb24uY29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9InRo
aXMiKQogICAgICAgIHR5cGU6IEBjaGVja2Vycy5sb2NrLnF1YWxzLkd1YXJkZWRCeSh2YWx1ZT0i
dGhpcyIpCiAgICAgICAKICAgIGZpZWxkIGFjY2Vzc1F1ZXVlOiBAamF2YXguYW5ub3RhdGlvbi5j
b25jdXJyZW50Lkd1YXJkZWRCeSh2YWx1ZT0idGhpcyIpCiAgICAgICAgdHlwZTogQGNoZWNrZXJz
LmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVlPSJ0aGlzIikKCiAgICBtZXRob2QgbmV3RW50cnko
TGphdmEvbGFuZy9PYmplY3Q7SUxjb20vZ29vZ2xlL2NvbW1vbi9jYWNoZS9Mb2NhbENhY2hlJFJl
ZmVyZW5jZUVudHJ5OylMY29tL2dvb2dsZS9jb21tb24vY2FjaGUvTG9jYWxDYWNoZSRSZWZlcmVu
Y2VFbnRyeTs6IEBqYXZheC5hbm5vdGF0aW9uLmNvbmN1cnJlbnQuR3VhcmRlZEJ5KHZhbHVlPSJ0
aGlzIikKICAgICAgICByZXR1cm46IEBjaGVja2Vycy5sb2NrLnF1YWxzLkd1YXJkZWRCeSh2YWx1
ZT0idGhpcyIpCiAgICAgCiAgICBtZXRob2QgY29weUVudHJ5KExjb20vZ29vZ2xlL2NvbW1vbi9j
YWNoZS9Mb2NhbENhY2hlJFJlZmVyZW5jZUVudHJ5O0xjb20vZ29vZ2xlL2NvbW1vbi9jYWNoZS9M
b2NhbENhY2hlJFJlZmVyZW5jZUVudHJ5OylMY29tL2dvb2dsZS9jb21tb24vY2FjaGUvTG9jYWxD
YWNoZSRSZWZlcmVuY2VFbnRyeTs6IEBqYXZheC5hbm5vdGF0aW9uLmNvbmN1cnJlbnQuR3VhcmRl
ZEJ5KHZhbHVlPSJ0aGlzIikKICAgICAgICByZXR1cm46IEBjaGVja2Vycy5sb2NrLnF1YWxzLkd1
YXJkZWRCeSh2YWx1ZT0idGhpcyIpCiAgICAgICAgCiAgICBtZXRob2QgcmVtb3ZlVmFsdWVGcm9t
Q2hhaW4oTGNvbS9nb29nbGUvY29tbW9uL2NhY2hlL0xvY2FsQ2FjaGUkUmVmZXJlbmNlRW50cnk7
TGNvbS9nb29nbGUvY29tbW9uL2NhY2hlL0xvY2FsQ2FjaGUkUmVmZXJlbmNlRW50cnk7TGphdmEv
bGFuZy9PYmplY3Q7SUxjb20vZ29vZ2xlL2NvbW1vbi9jYWNoZS9Mb2NhbENhY2hlJFZhbHVlUmVm
ZXJlbmNlO0xjb20vZ29vZ2xlL2NvbW1vbi9jYWNoZS9SZW1vdmFsQ2F1c2U7KUxjb20vZ29vZ2xl
L2NvbW1vbi9jYWNoZS9Mb2NhbENhY2hlJFJlZmVyZW5jZUVudHJ5OzogQGphdmF4LmFubm90YXRp
b24uY29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9InRoaXMiKQogICAgICAgIHJldHVybjogQGph
dmF4LmFubm90YXRpb24uTnVsbGFibGUgQGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZh
bHVlPSJ0aGlzIikKICAgICAgICAKICAgIG1ldGhvZCByZW1vdmVFbnRyeUZyb21DaGFpbihMY29t
L2dvb2dsZS9jb21tb24vY2FjaGUvTG9jYWxDYWNoZSRSZWZlcmVuY2VFbnRyeTtMY29tL2dvb2ds
ZS9jb21tb24vY2FjaGUvTG9jYWxDYWNoZSRSZWZlcmVuY2VFbnRyeTspTGNvbS9nb29nbGUvY29t
bW9uL2NhY2hlL0xvY2FsQ2FjaGUkUmVmZXJlbmNlRW50cnk7OiBAamF2YXguYW5ub3RhdGlvbi5j
b25jdXJyZW50Lkd1YXJkZWRCeSh2YWx1ZT0idGhpcyIpCiAgICAgICAgcmV0dXJuOiBAamF2YXgu
YW5ub3RhdGlvbi5OdWxsYWJsZSBAY2hlY2tlcnMubG9jay5xdWFscy5HdWFyZGVkQnkodmFsdWU9
InRoaXMiKQogICAgICAgIAogICAgbWV0aG9kIHJlbW92ZUVudHJ5KExjb20vZ29vZ2xlL2NvbW1v
bi9jYWNoZS9Mb2NhbENhY2hlJFJlZmVyZW5jZUVudHJ5O0lMY29tL2dvb2dsZS9jb21tb24vY2Fj
aGUvUmVtb3ZhbENhdXNlOylaOiBAamF2YXguYW5ub3RhdGlvbi5jb25jdXJyZW50Lkd1YXJkZWRC
eSh2YWx1ZT0iU2VnbWVudC50aGlzIikKICAgICAgICByZXR1cm46IEBjaGVja2Vycy5sb2NrLnF1
YWxzLkd1YXJkZWRCeSh2YWx1ZT0iU2VnbWVudC50aGlzIikKICAgICAgICAKY2xhc3MgTG9jYWxD
YWNoZSRXZWFrQWNjZXNzRW50cnk6CgogICAgZmllbGQgbmV4dEFjY2VzczogQGphdmF4LmFubm90
YXRpb24uY29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIpCiAgICAgICAg
dHlwZTogQGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVlPSJTZWdtZW50LnRoaXMi
KQoKICAgIGZpZWxkIHByZXZpb3VzQWNjZXNzOiBAamF2YXguYW5ub3RhdGlvbi5jb25jdXJyZW50
Lkd1YXJkZWRCeSh2YWx1ZT0iU2VnbWVudC50aGlzIikKICAgICAgICB0eXBlOiBAY2hlY2tlcnMu
bG9jay5xdWFscy5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIpCgpjbGFzcyBMb2NhbENh
Y2hlJFN0cm9uZ1dyaXRlRW50cnk6CgogICAgZmllbGQgbmV4dFdyaXRlOiBAamF2YXguYW5ub3Rh
dGlvbi5jb25jdXJyZW50Lkd1YXJkZWRCeSh2YWx1ZT0iU2VnbWVudC50aGlzIikKICAgICAgICB0
eXBlOiBAY2hlY2tlcnMubG9jay5xdWFscy5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIp
CgogICAgZmllbGQgcHJldmlvdXNXcml0ZTogQGphdmF4LmFubm90YXRpb24uY29uY3VycmVudC5H
dWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIpCiAgICAgICAgdHlwZTogQGNoZWNrZXJzLmxv
Y2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVlPSJTZWdtZW50LnRoaXMiKQogICAgICAgIApjbGFzcyBM
b2NhbENhY2hlJFdlYWtBY2Nlc3NXcml0ZUVudHJ5OgoKICAgIGZpZWxkIG5leHRBY2Nlc3M6IEBq
YXZheC5hbm5vdGF0aW9uLmNvbmN1cnJlbnQuR3VhcmRlZEJ5KHZhbHVlPSJTZWdtZW50LnRoaXMi
KQogICAgICAgIHR5cGU6IEBjaGVja2Vycy5sb2NrLnF1YWxzLkd1YXJkZWRCeSh2YWx1ZT0iU2Vn
bWVudC50aGlzIikKCiAgICBmaWVsZCBwcmV2aW91c0FjY2VzczogQGphdmF4LmFubm90YXRpb24u
Y29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIpCiAgICAgICAgdHlwZTog
QGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVlPSJTZWdtZW50LnRoaXMiKQogICAg
ICAgIAogICAgZmllbGQgbmV4dFdyaXRlOiBAamF2YXguYW5ub3RhdGlvbi5jb25jdXJyZW50Lkd1
YXJkZWRCeSh2YWx1ZT0iU2VnbWVudC50aGlzIikKICAgICAgICB0eXBlOiBAY2hlY2tlcnMubG9j
ay5xdWFscy5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIpCgogICAgZmllbGQgcHJldmlv
dXNXcml0ZTogQGphdmF4LmFubm90YXRpb24uY29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9IlNl
Z21lbnQudGhpcyIpCiAgICAgICAgdHlwZTogQGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5
KHZhbHVlPSJTZWdtZW50LnRoaXMiKQoKcGFja2FnZSBjb20uZ29vZ2xlLmNvbW1vbi51dGlsLmNv
bmN1cnJlbnQ6CmNsYXNzIEV4ZWN1dGlvbkxpc3Q6CgogICAgZmllbGQgcnVubmFibGVzOiBAamF2
YXguYW5ub3RhdGlvbi5jb25jdXJyZW50Lkd1YXJkZWRCeSh2YWx1ZT0idGhpcyIpCiAgICAgICAg
dHlwZTogQGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVlPSJ0aGlzIikKCiAgICBm
aWVsZCBleGVjdXRlZDogQGphdmF4LmFubm90YXRpb24uY29uY3VycmVudC5HdWFyZGVkQnkodmFs
dWU9InRoaXMiKQogICAgICAgIHR5cGU6IEBjaGVja2Vycy5sb2NrLnF1YWxzLkd1YXJkZWRCeSh2
YWx1ZT0idGhpcyIpCgpjbGFzcyBNb25pdG9yJEd1YXJkOiBAY29tLmdvb2dsZS5jb21tb24uYW5u
b3RhdGlvbnMuQmV0YQogICAgICAgIAogICAgZmllbGQgd2FpdGVyQ291bnQ6IEBqYXZheC5hbm5v
dGF0aW9uLmNvbmN1cnJlbnQuR3VhcmRlZEJ5KHZhbHVlPSJtb25pdG9yLmxvY2siKQogICAgICAg
IHR5cGU6IEBjaGVja2Vycy5sb2NrLnF1YWxzLkd1YXJkZWRCeSh2YWx1ZT0ibW9uaXRvci5sb2Nr
IikKCiAgICBmaWVsZCBuZXh0OiBAamF2YXguYW5ub3RhdGlvbi5jb25jdXJyZW50Lkd1YXJkZWRC
eSh2YWx1ZT0ibW9uaXRvci5sb2NrIikKICAgICAgICB0eXBlOiBAY2hlY2tlcnMubG9jay5xdWFs
cy5HdWFyZGVkQnkodmFsdWU9Im1vbml0b3IubG9jayIpCgpjbGFzcyBBYnN0cmFjdFNlcnZpY2U6
IEBjb20uZ29vZ2xlLmNvbW1vbi5hbm5vdGF0aW9ucy5CZXRhCgogICAgZmllbGQgbGlzdGVuZXJz
OiBAamF2YXguYW5ub3RhdGlvbi5jb25jdXJyZW50Lkd1YXJkZWRCeSh2YWx1ZT0ibW9uaXRvciIp
CiAgICAgICAgdHlwZTogQGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVlPSJtb25p
dG9yIikKICAgICAgICAKICAgIGZpZWxkIHNuYXBzaG90OiBAamF2YXguYW5ub3RhdGlvbi5jb25j
dXJyZW50Lkd1YXJkZWRCeSh2YWx1ZT0ibW9uaXRvciIpCiAgICAgICAgdHlwZTogQGNoZWNrZXJz
LmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVlPSJtb25pdG9yIikgICAgICAgCgpjbGFzcyBNb25p
dG9yOiBAY29tLmdvb2dsZS5jb21tb24uYW5ub3RhdGlvbnMuQmV0YQoKICAgIGZpZWxkIGFjdGl2
ZUd1YXJkczogQGphdmF4LmFubm90YXRpb24uY29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9Imxv
Y2siKQogICAgICAgIHR5cGU6IEBjaGVja2Vycy5sb2NrLnF1YWxzLkd1YXJkZWRCeSh2YWx1ZT0i
bG9jayIpCgogICAgbWV0aG9kIGlzU2F0aXNmaWVkKExjb20vZ29vZ2xlL2NvbW1vbi91dGlsL2Nv
bmN1cnJlbnQvTW9uaXRvciRHdWFyZDspWjogQGphdmF4LmFubm90YXRpb24uY29uY3VycmVudC5H
dWFyZGVkQnkodmFsdWU9ImxvY2siKQogICAgICAgIHJldHVybjogQGNoZWNrZXJzLmxvY2sucXVh
bHMuR3VhcmRlZEJ5KHZhbHVlPSJsb2NrIikKICAgICAgICAKICAgIG1ldGhvZCBhd2FpdE5hbm9z
KExjb20vZ29vZ2xlL2NvbW1vbi91dGlsL2NvbmN1cnJlbnQvTW9uaXRvciRHdWFyZDtKWilaOiBA
amF2YXguYW5ub3RhdGlvbi5jb25jdXJyZW50Lkd1YXJkZWRCeSh2YWx1ZT0ibG9jayIpCiAgICAg
ICAgcmV0dXJuOiBAY2hlY2tlcnMubG9jay5xdWFscy5HdWFyZGVkQnkodmFsdWU9ImxvY2siKQoK
Y2xhc3MgQWJzdHJhY3RTY2hlZHVsZWRTZXJ2aWNlJEN1c3RvbVNjaGVkdWxlciRSZXNjaGVkdWxh
YmxlQ2FsbGFibGU6CgogICAgZmllbGQgY3VycmVudEZ1dHVyZTogQGphdmF4LmFubm90YXRpb24u
Y29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9ImxvY2siKQogICAgICAgIHR5cGU6IEBjaGVja2Vy
cy5sb2NrLnF1YWxzLkd1YXJkZWRCeSh2YWx1ZT0ibG9jayIpICAgICAgICAgICAgICAgIAoKY2xh
c3MgRXhlY3V0aW9uUXVldWUkUnVubmFibGVFeGVjdXRvclBhaXI6CgogICAgZmllbGQgaGFzQmVl
bkV4ZWN1dGVkOiBAamF2YXguYW5ub3RhdGlvbi5jb25jdXJyZW50Lkd1YXJkZWRCeSh2YWx1ZT0i
bG9jayIpCiAgICAgICAgdHlwZTogQGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVl
PSJsb2NrIikKCnBhY2thZ2UgY29tLmdvb2dsZS5jb21tb24uY29sbGVjdDoKY2xhc3MgTWFwTWFr
ZXJJbnRlcm5hbE1hcCRXZWFrRXZpY3RhYmxlRW50cnk6CgogICAgZmllbGQgbmV4dEV2aWN0YWJs
ZTogQGphdmF4LmFubm90YXRpb24uY29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQu
dGhpcyIpCiAgICAgICAgdHlwZTogQGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVl
PSJTZWdtZW50LnRoaXMiKQoKICAgIGZpZWxkIHByZXZpb3VzRXZpY3RhYmxlOiBAamF2YXguYW5u
b3RhdGlvbi5jb25jdXJyZW50Lkd1YXJkZWRCeSh2YWx1ZT0iU2VnbWVudC50aGlzIikKICAgICAg
ICB0eXBlOiBAY2hlY2tlcnMubG9jay5xdWFscy5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhp
cyIpCiAgICAgICAgCmNsYXNzIE1hcE1ha2VySW50ZXJuYWxNYXAkU3Ryb25nRXZpY3RhYmxlRW50
cnk6CgogICAgZmllbGQgbmV4dEV2aWN0YWJsZTogQGphdmF4LmFubm90YXRpb24uY29uY3VycmVu
dC5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIpCiAgICAgICAgdHlwZTogQGNoZWNrZXJz
LmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVlPSJTZWdtZW50LnRoaXMiKQoKICAgIGZpZWxkIHBy
ZXZpb3VzRXZpY3RhYmxlOiBAamF2YXguYW5ub3RhdGlvbi5jb25jdXJyZW50Lkd1YXJkZWRCeSh2
YWx1ZT0iU2VnbWVudC50aGlzIikKICAgICAgICB0eXBlOiBAY2hlY2tlcnMubG9jay5xdWFscy5H
dWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIpCgpjbGFzcyBNYXBNYWtlckludGVybmFsTWFw
JFNlZ21lbnQ6CgogICAgZmllbGQgZXZpY3Rpb25RdWV1ZTogQGphdmF4LmFubm90YXRpb24uY29u
Y3VycmVudC5HdWFyZGVkQnkodmFsdWU9InRoaXMiKQogICAgICAgIHR5cGU6IEBjaGVja2Vycy5s
b2NrLnF1YWxzLkd1YXJkZWRCeSh2YWx1ZT0idGhpcyIpCgogICAgZmllbGQgZXhwaXJhdGlvblF1
ZXVlOiBAamF2YXguYW5ub3RhdGlvbi5jb25jdXJyZW50Lkd1YXJkZWRCeSh2YWx1ZT0idGhpcyIp
CiAgICAgICAgdHlwZTogQGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVlPSJ0aGlz
IikKICAgICAgICAKICAgIG1ldGhvZCBuZXdFbnRyeShMamF2YS9sYW5nL09iamVjdDtJTGNvbS9n
b29nbGUvY29tbW9uL2NvbGxlY3QvTWFwTWFrZXJJbnRlcm5hbE1hcCRSZWZlcmVuY2VFbnRyeTsp
TGNvbS9nb29nbGUvY29tbW9uL2NvbGxlY3QvTWFwTWFrZXJJbnRlcm5hbE1hcCRSZWZlcmVuY2VF
bnRyeTs6IEBqYXZheC5hbm5vdGF0aW9uLmNvbmN1cnJlbnQuR3VhcmRlZEJ5KHZhbHVlPSJ0aGlz
IikKICAgICAgICByZXR1cm46IEBjaGVja2Vycy5sb2NrLnF1YWxzLkd1YXJkZWRCeSh2YWx1ZT0i
dGhpcyIpCiAgICAgICAgCiAgICBtZXRob2QgY29weUVudHJ5KExjb20vZ29vZ2xlL2NvbW1vbi9j
b2xsZWN0L01hcE1ha2VySW50ZXJuYWxNYXAkUmVmZXJlbmNlRW50cnk7TGNvbS9nb29nbGUvY29t
bW9uL2NvbGxlY3QvTWFwTWFrZXJJbnRlcm5hbE1hcCRSZWZlcmVuY2VFbnRyeTspTGNvbS9nb29n
bGUvY29tbW9uL2NvbGxlY3QvTWFwTWFrZXJJbnRlcm5hbE1hcCRSZWZlcmVuY2VFbnRyeTs6IEBq
YXZheC5hbm5vdGF0aW9uLmNvbmN1cnJlbnQuR3VhcmRlZEJ5KHZhbHVlPSJ0aGlzIikKICAgICAg
ICByZXR1cm46IEBjaGVja2Vycy5sb2NrLnF1YWxzLkd1YXJkZWRCeSh2YWx1ZT0idGhpcyIpCiAg
ICAgICAgCiAgICBtZXRob2QgZXZpY3RFbnRyaWVzKClaOiBAamF2YXguYW5ub3RhdGlvbi5jb25j
dXJyZW50Lkd1YXJkZWRCeSh2YWx1ZT0idGhpcyIpCiAgICAgICAgcmV0dXJuOiBAY2hlY2tlcnMu
bG9jay5xdWFscy5HdWFyZGVkQnkodmFsdWU9InRoaXMiKQogICAgICAgIAogICAgbWV0aG9kIHJl
bW92ZUZyb21DaGFpbihMY29tL2dvb2dsZS9jb21tb24vY29sbGVjdC9NYXBNYWtlckludGVybmFs
TWFwJFJlZmVyZW5jZUVudHJ5O0xjb20vZ29vZ2xlL2NvbW1vbi9jb2xsZWN0L01hcE1ha2VySW50
ZXJuYWxNYXAkUmVmZXJlbmNlRW50cnk7KUxjb20vZ29vZ2xlL2NvbW1vbi9jb2xsZWN0L01hcE1h
a2VySW50ZXJuYWxNYXAkUmVmZXJlbmNlRW50cnk7OiBAamF2YXguYW5ub3RhdGlvbi5jb25jdXJy
ZW50Lkd1YXJkZWRCeSh2YWx1ZT0idGhpcyIpCiAgICAgICAgcmV0dXJuOiBAY2hlY2tlcnMubG9j
ay5xdWFscy5HdWFyZGVkQnkodmFsdWU9InRoaXMiKQogICAgICAgIAogICAgbWV0aG9kIHJlbW92
ZUVudHJ5KExjb20vZ29vZ2xlL2NvbW1vbi9jb2xsZWN0L01hcE1ha2VySW50ZXJuYWxNYXAkUmVm
ZXJlbmNlRW50cnk7SUxjb20vZ29vZ2xlL2NvbW1vbi9jb2xsZWN0L01hcE1ha2VyJFJlbW92YWxD
YXVzZTspWjogQGphdmF4LmFubm90YXRpb24uY29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9InRo
aXMiKQogICAgICAgIHJldHVybjogQGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVl
PSJ0aGlzIikKCmNsYXNzIE1hcE1ha2VySW50ZXJuYWxNYXAkU29mdEV4cGlyYWJsZUV2aWN0YWJs
ZUVudHJ5OgoKICAgIGZpZWxkIG5leHRFeHBpcmFibGU6IEBqYXZheC5hbm5vdGF0aW9uLmNvbmN1
cnJlbnQuR3VhcmRlZEJ5KHZhbHVlPSJTZWdtZW50LnRoaXMiKQogICAgICAgIHR5cGU6IEBjaGVj
a2Vycy5sb2NrLnF1YWxzLkd1YXJkZWRCeSh2YWx1ZT0iU2VnbWVudC50aGlzIikKCiAgICBmaWVs
ZCBwcmV2aW91c0V4cGlyYWJsZTogQGphdmF4LmFubm90YXRpb24uY29uY3VycmVudC5HdWFyZGVk
QnkodmFsdWU9IlNlZ21lbnQudGhpcyIpCiAgICAgICAgdHlwZTogQGNoZWNrZXJzLmxvY2sucXVh
bHMuR3VhcmRlZEJ5KHZhbHVlPSJTZWdtZW50LnRoaXMiKQoKICAgIGZpZWxkIG5leHRFdmljdGFi
bGU6IEBqYXZheC5hbm5vdGF0aW9uLmNvbmN1cnJlbnQuR3VhcmRlZEJ5KHZhbHVlPSJTZWdtZW50
LnRoaXMiKQogICAgICAgIHR5cGU6IEBjaGVja2Vycy5sb2NrLnF1YWxzLkd1YXJkZWRCeSh2YWx1
ZT0iU2VnbWVudC50aGlzIikKCiAgICBmaWVsZCBwcmV2aW91c0V2aWN0YWJsZTogQGphdmF4LmFu
bm90YXRpb24uY29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIpCiAgICAg
ICAgdHlwZTogQGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVlPSJTZWdtZW50LnRo
aXMiKQoKY2xhc3MgTWFwTWFrZXJJbnRlcm5hbE1hcCRTb2Z0RXhwaXJhYmxlRW50cnk6CgogICAg
ZmllbGQgbmV4dEV4cGlyYWJsZTogQGphdmF4LmFubm90YXRpb24uY29uY3VycmVudC5HdWFyZGVk
QnkodmFsdWU9IlNlZ21lbnQudGhpcyIpCiAgICAgICAgdHlwZTogQGNoZWNrZXJzLmxvY2sucXVh
bHMuR3VhcmRlZEJ5KHZhbHVlPSJTZWdtZW50LnRoaXMiKQoKICAgIGZpZWxkIHByZXZpb3VzRXhw
aXJhYmxlOiBAamF2YXguYW5ub3RhdGlvbi5jb25jdXJyZW50Lkd1YXJkZWRCeSh2YWx1ZT0iU2Vn
bWVudC50aGlzIikKICAgICAgICB0eXBlOiBAY2hlY2tlcnMubG9jay5xdWFscy5HdWFyZGVkQnko
dmFsdWU9IlNlZ21lbnQudGhpcyIpCgpjbGFzcyBNYXBNYWtlckludGVybmFsTWFwJFNvZnRFdmlj
dGFibGVFbnRyeToKCiAgICBmaWVsZCBuZXh0RXZpY3RhYmxlOiBAamF2YXguYW5ub3RhdGlvbi5j
b25jdXJyZW50Lkd1YXJkZWRCeSh2YWx1ZT0iU2VnbWVudC50aGlzIikKICAgICAgICB0eXBlOiBA
Y2hlY2tlcnMubG9jay5xdWFscy5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIpCgogICAg
ZmllbGQgcHJldmlvdXNFdmljdGFibGU6IEBqYXZheC5hbm5vdGF0aW9uLmNvbmN1cnJlbnQuR3Vh
cmRlZEJ5KHZhbHVlPSJTZWdtZW50LnRoaXMiKQogICAgICAgIHR5cGU6IEBjaGVja2Vycy5sb2Nr
LnF1YWxzLkd1YXJkZWRCeSh2YWx1ZT0iU2VnbWVudC50aGlzIikKCmNsYXNzIE1hcE1ha2VySW50
ZXJuYWxNYXA6CgogICAgbWV0aG9kIG5ld0VudHJ5KExqYXZhL2xhbmcvT2JqZWN0O0lMY29tL2dv
b2dsZS9jb21tb24vY29sbGVjdC9NYXBNYWtlckludGVybmFsTWFwJFJlZmVyZW5jZUVudHJ5OylM
Y29tL2dvb2dsZS9jb21tb24vY29sbGVjdC9NYXBNYWtlckludGVybmFsTWFwJFJlZmVyZW5jZUVu
dHJ5OzogQGphdmF4LmFubm90YXRpb24uY29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9IlNlZ21l
bnQudGhpcyIpIEBjb20uZ29vZ2xlLmNvbW1vbi5hbm5vdGF0aW9ucy5WaXNpYmxlRm9yVGVzdGlu
ZwogICAgICAgIHJldHVybjogQGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVlPSJT
ZWdtZW50LnRoaXMiKQoKICAgIG1ldGhvZCBjb3B5RW50cnkoTGNvbS9nb29nbGUvY29tbW9uL2Nv
bGxlY3QvTWFwTWFrZXJJbnRlcm5hbE1hcCRSZWZlcmVuY2VFbnRyeTtMY29tL2dvb2dsZS9jb21t
b24vY29sbGVjdC9NYXBNYWtlckludGVybmFsTWFwJFJlZmVyZW5jZUVudHJ5OylMY29tL2dvb2ds
ZS9jb21tb24vY29sbGVjdC9NYXBNYWtlckludGVybmFsTWFwJFJlZmVyZW5jZUVudHJ5OzogQGph
dmF4LmFubm90YXRpb24uY29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIp
IEBjb20uZ29vZ2xlLmNvbW1vbi5hbm5vdGF0aW9ucy5WaXNpYmxlRm9yVGVzdGluZwogICAgICAg
IHJldHVybjogQGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVlPSJTZWdtZW50LnRo
aXMiKQoKICAgIG1ldGhvZCBuZXdWYWx1ZVJlZmVyZW5jZShMY29tL2dvb2dsZS9jb21tb24vY29s
bGVjdC9NYXBNYWtlckludGVybmFsTWFwJFJlZmVyZW5jZUVudHJ5O0xqYXZhL2xhbmcvT2JqZWN0
OylMY29tL2dvb2dsZS9jb21tb24vY29sbGVjdC9NYXBNYWtlckludGVybmFsTWFwJFZhbHVlUmVm
ZXJlbmNlOzogQGphdmF4LmFubm90YXRpb24uY29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9IlNl
Z21lbnQudGhpcyIpIEBjb20uZ29vZ2xlLmNvbW1vbi5hbm5vdGF0aW9ucy5WaXNpYmxlRm9yVGVz
dGluZwoKY2xhc3MgQ29tcHV0aW5nQ29uY3VycmVudEhhc2hNYXAkQ29tcHV0aW5nVmFsdWVSZWZl
cmVuY2U6CgogICAgZmllbGQgY29tcHV0ZWRSZWZlcmVuY2U6IEBqYXZheC5hbm5vdGF0aW9uLmNv
bmN1cnJlbnQuR3VhcmRlZEJ5KHZhbHVlPSJ0aGlzIikKICAgICAgICB0eXBlOiBAY2hlY2tlcnMu
bG9jay5xdWFscy5HdWFyZGVkQnkodmFsdWU9InRoaXMiKQoKY2xhc3MgTWFwTWFrZXJJbnRlcm5h
bE1hcCRXZWFrRXhwaXJhYmxlRW50cnk6CgogICAgZmllbGQgbmV4dEV4cGlyYWJsZTogQGphdmF4
LmFubm90YXRpb24uY29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIpCiAg
ICAgICAgdHlwZTogQGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVlPSJTZWdtZW50
LnRoaXMiKQoKICAgIGZpZWxkIHByZXZpb3VzRXhwaXJhYmxlOiBAamF2YXguYW5ub3RhdGlvbi5j
b25jdXJyZW50Lkd1YXJkZWRCeSh2YWx1ZT0iU2VnbWVudC50aGlzIikKICAgICAgICB0eXBlOiBA
Y2hlY2tlcnMubG9jay5xdWFscy5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIpCgpjbGFz
cyBNYXBNYWtlckludGVybmFsTWFwJFN0cm9uZ0V4cGlyYWJsZUVudHJ5OgoKICAgIGZpZWxkIG5l
eHRFeHBpcmFibGU6IEBqYXZheC5hbm5vdGF0aW9uLmNvbmN1cnJlbnQuR3VhcmRlZEJ5KHZhbHVl
PSJTZWdtZW50LnRoaXMiKQogICAgICAgIHR5cGU6IEBjaGVja2Vycy5sb2NrLnF1YWxzLkd1YXJk
ZWRCeSh2YWx1ZT0iU2VnbWVudC50aGlzIikKCiAgICBmaWVsZCBwcmV2aW91c0V4cGlyYWJsZTog
QGphdmF4LmFubm90YXRpb24uY29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhp
cyIpCiAgICAgICAgdHlwZTogQGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVlPSJT
ZWdtZW50LnRoaXMiKQoKY2xhc3MgTWFwTWFrZXJJbnRlcm5hbE1hcCRXZWFrRXhwaXJhYmxlRXZp
Y3RhYmxlRW50cnk6CgogICAgZmllbGQgbmV4dEV4cGlyYWJsZTogQGphdmF4LmFubm90YXRpb24u
Y29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIpCiAgICAgICAgdHlwZTog
QGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVlPSJTZWdtZW50LnRoaXMiKQoKICAg
IGZpZWxkIHByZXZpb3VzRXhwaXJhYmxlOiBAamF2YXguYW5ub3RhdGlvbi5jb25jdXJyZW50Lkd1
YXJkZWRCeSh2YWx1ZT0iU2VnbWVudC50aGlzIikKICAgICAgICB0eXBlOiBAY2hlY2tlcnMubG9j
ay5xdWFscy5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIpCgogICAgZmllbGQgbmV4dEV2
aWN0YWJsZTogQGphdmF4LmFubm90YXRpb24uY29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9IlNl
Z21lbnQudGhpcyIpCiAgICAgICAgdHlwZTogQGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5
KHZhbHVlPSJTZWdtZW50LnRoaXMiKQoKICAgIGZpZWxkIHByZXZpb3VzRXZpY3RhYmxlOiBAamF2
YXguYW5ub3RhdGlvbi5jb25jdXJyZW50Lkd1YXJkZWRCeSh2YWx1ZT0iU2VnbWVudC50aGlzIikK
ICAgICAgICB0eXBlOiBAY2hlY2tlcnMubG9jay5xdWFscy5HdWFyZGVkQnkodmFsdWU9IlNlZ21l
bnQudGhpcyIpCgpjbGFzcyBNYXBNYWtlckludGVybmFsTWFwJFN0cm9uZ0V4cGlyYWJsZUV2aWN0
YWJsZUVudHJ5OgoKICAgIGZpZWxkIG5leHRFeHBpcmFibGU6IEBqYXZheC5hbm5vdGF0aW9uLmNv
bmN1cnJlbnQuR3VhcmRlZEJ5KHZhbHVlPSJTZWdtZW50LnRoaXMiKQogICAgICAgIHR5cGU6IEBj
aGVja2Vycy5sb2NrLnF1YWxzLkd1YXJkZWRCeSh2YWx1ZT0iU2VnbWVudC50aGlzIikKCiAgICBm
aWVsZCBwcmV2aW91c0V4cGlyYWJsZTogQGphdmF4LmFubm90YXRpb24uY29uY3VycmVudC5HdWFy
ZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIpCiAgICAgICAgdHlwZTogQGNoZWNrZXJzLmxvY2su
cXVhbHMuR3VhcmRlZEJ5KHZhbHVlPSJTZWdtZW50LnRoaXMiKQoKICAgIGZpZWxkIG5leHRFdmlj
dGFibGU6IEBqYXZheC5hbm5vdGF0aW9uLmNvbmN1cnJlbnQuR3VhcmRlZEJ5KHZhbHVlPSJTZWdt
ZW50LnRoaXMiKQogICAgICAgIHR5cGU6IEBjaGVja2Vycy5sb2NrLnF1YWxzLkd1YXJkZWRCeSh2
YWx1ZT0iU2VnbWVudC50aGlzIikKCiAgICBmaWVsZCBwcmV2aW91c0V2aWN0YWJsZTogQGphdmF4
LmFubm90YXRpb24uY29uY3VycmVudC5HdWFyZGVkQnkodmFsdWU9IlNlZ21lbnQudGhpcyIpCiAg
ICAgICAgdHlwZTogQGNoZWNrZXJzLmxvY2sucXVhbHMuR3VhcmRlZEJ5KHZhbHVlPSJTZWdtZW50
LnRoaXMiKQo=
--089e0139fc3a9e12ef04f717d0a5--