<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>107390</bug_id>
          
          <creation_ts>2013-01-19 18:53:24 -0800</creation_ts>
          <short_desc>Delete webkit-perf.appspot.com code from WebKit repository</short_desc>
          <delta_ts>2013-01-19 21:05:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>barraclough</cc>
    
    <cc>mjs</cc>
    
    <cc>morrita</cc>
    
    <cc>pdr</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>811530</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-19 18:53:24 -0800</bug_when>
    <thetext>We should just remove the code in the WebKit repository given that I maintain and push the code via https://github.com/rniwa/webkit-perf these days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811531</commentid>
    <comment_count>1</comment_count>
      <attachid>183651</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-19 18:54:49 -0800</bug_when>
    <thetext>Created attachment 183651
Removed the code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811548</commentid>
    <comment_count>2</comment_count>
      <attachid>183651</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-19 20:47:51 -0800</bug_when>
    <thetext>Comment on attachment 183651
Removed the code

View in context: https://bugs.webkit.org/attachment.cgi?id=183651&amp;action=review

&gt; ChangeLog:8
&gt; +2013-01-19  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
&gt; +
&gt; +        Delete webkit-perf.appspot.com code from WebKit repository
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=107390
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        * Websites/webkit-perf.appspot.com: Removed.

I probably would have included more information in the ChangeLog, but this is ok too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811551</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-19 21:05:50 -0800</bug_when>
    <thetext>Committed r140266: &lt;http://trac.webkit.org/changeset/140266&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183651</attachid>
            <date>2013-01-19 18:54:49 -0800</date>
            <delta_ts>2013-01-19 20:47:51 -0800</delta_ts>
            <desc>Removed the code</desc>
            <filename>bug-107390-20130119185146.patch</filename>
            <type>text/plain</type>
            <size>135526</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE0MDI2
NCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEzLTAx
LTE5ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIERlbGV0ZSB3
ZWJraXQtcGVyZi5hcHBzcG90LmNvbSBjb2RlIGZyb20gV2ViS2l0IHJlcG9zaXRvcnkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzM5MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2Vic2l0ZXMvd2Vi
a2l0LXBlcmYuYXBwc3BvdC5jb206IFJlbW92ZWQuCisKIDIwMTMtMDEtMTggIFN1ZGFyc2FuYSBO
YWdpbmVuaSAgPHN1ZGFyc2FuYS5uYWdpbmVuaUBpbnRlbC5jb20+CiAKICAgICAgICAgW0NNYWtl
XSBGaXggQ01ha2Ugd2FybmluZ3MKSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3Qu
Y29tL2FkbWluLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3Bv
dC5jb20vYWRtaW4uaHRtbAkocmV2aXNpb24gMTQwMjU4KQorKysgV2Vic2l0ZXMvd2Via2l0LXBl
cmYuYXBwc3BvdC5jb20vYWRtaW4uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjMgKzAsMCBA
QAotPCFET0NUWVBFIGh0bWw+Ci08IS0tIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0
IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKLSAgIC0gTGljZW5zZSwgdi4gMi4w
LiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBmaWxl
LAotICAgLSBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAv
LiAgLS0+Ci08aHRtbD4KLTxoZWFkPgotICAgIDx0aXRsZT5BZG1pbiAtIFBlcmYtby1NYXRpYzwv
dGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9jc3MvcmVzZXQubWlu
LmNzcyIgdHlwZT0idGV4dC9jc3MiIC8+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSIuLi9jc3MvY29tbW9uLmNzcyIgdHlwZT0idGV4dC9jc3MiIC8+Ci0gICAgPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSIuLi9jc3MvYWRtaW4uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwv
aGVhZD4KLTxib2R5PgotICAgIAotPGhlYWRlciBpZD0iaGVhZGVyIj4KLSAgICA8aDE+Ci0gICAg
ICAgIDxhIGhyZWY9Ii8iPjxzcGFuIGlkPSJsb2dvIj5QZXJmLU8tTWF0aWM8L3NwYW4+PC9hPgot
ICAgIDwvaDE+Ci0gICAgPG5hdj4KLSAgICAgICAgPGEgaHJlZj0iLyI+RGFzaGJvYXJkPC9hPgot
ICAgICAgICA8YSBocmVmPSIvZ3JhcGguaHRtbCI+Q3VzdG9tIENoYXJ0PC9hPgotICAgIDwvbmF2
PgotPC9oZWFkZXI+Ci0KLTxkaXYgaWQ9InN1bW1hcnkiPgotCi08c2VjdGlvbj4KLTxoMj5SZXBv
cnQgbG9nczwvaDI+Ci08ZGwgY2xhc3M9ImNvdW50cyI+Ci0gICAgPGR0PlRvdGFsPC9kdD4KLSAg
ICA8ZGQ+e3sgcmVwb3J0X2xvZ190b3RhbCB9fTwvZGQ+Ci0gICAgPGR0PkNvbW1pdHRlZDwvZHQ+
Ci0gICAgPGRkPnt7IHJlcG9ydF9sb2dfY29tbWl0dGVkIH19PC9kZD4KLTwvZGw+Ci0KLTwhLS0g
RklYTUU6IE1lcmdlIC9hZG1pbi9yZXBvcnQtbG9ncyBoZXJlIC0tPgotPHA+PGEgaHJlZj0iL2Fk
bWluL3JlcG9ydC1sb2dzIj5NYW5hZ2UgcmVwb3J0IGxvZ3M8L2E+PC9wPgotPC9zZWN0aW9uPgot
Ci08c2VjdGlvbiBpZD0iYnJhbmNoZXMiPgotPGgyPkJyYW5jaGVzPC9oMj4KLTx1bD4KLSAgICA8
bGkgY2xhc3M9ImZvcm0iPgotICAgICAgICA8Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iY3Jl
YXRlL2JyYW5jaCI+Ci0gICAgICAgIDxkbD4KLSAgICAgICAgPGR0PjxsYWJlbCBmb3I9ImJyYW5j
aC1rZXkiPktleTwvbGFiZWw+PC9kdD48ZGQ+PGlucHV0IHR5cGU9InRleHQiIGlkPSJicmFuY2gt
a2V5IiBuYW1lPSJrZXkiPjwvZGQ+Ci0gICAgICAgIDxkdD48bGFiZWwgZm9yPSJicmFuY2gtbmFt
ZSI+TmFtZTwvbGFiZWw+PC9kdD48ZGQ+PGlucHV0IHR5cGU9InRleHQiIGlkPSJicmFuY2gtbmFt
ZSIgbmFtZT0ibmFtZSI+PC9kZD4KLSAgICAgICAgPC9kbD4KLSAgICAgICAgPGJ1dHRvbiB0eXBl
PSJzdWJtaXQiPkNyZWF0ZTwvYnV0dG9uPgotICAgICAgICA8L2Zvcm0+Ci0gICAgPC9saT4KLTwv
dWw+Ci08L3NlY3Rpb24+Ci0KLTxzZWN0aW9uIGlkPSJwbGF0Zm9ybXMiPgotPGgyPlBsYXRmb3Jt
czwvaDI+Ci08dWw+Ci0gICAgPGxpIGNsYXNzPSJmb3JtIj4KLSAgICAgICAgPGZvcm0gbWV0aG9k
PSJQT1NUIiBhY3Rpb249ImNyZWF0ZS9wbGF0Zm9ybSI+Ci0gICAgICAgIDxkbD4KLSAgICAgICAg
PGR0PjxsYWJlbCBmb3I9InBsYXRmb3JtLWtleSI+S2V5PC9sYWJlbD48L2R0PjxkZD48aW5wdXQg
dHlwZT0idGV4dCIgaWQ9InBsYXRmb3JtLWtleSIgbmFtZT0ia2V5Ij48L2RkPgotICAgICAgICA8
ZHQ+PGxhYmVsIGZvcj0icGxhdGZvcm0tbmFtZSI+TmFtZTwvbGFiZWw+PC9kdD48ZGQ+PGlucHV0
IHR5cGU9InRleHQiIGlkPSJwbGF0Zm9ybS1uYW1lIiBuYW1lPSJuYW1lIj48L2RkPgotICAgICAg
ICA8L2RsPgotICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCI+Q3JlYXRlPC9idXR0b24+Ci0g
ICAgICAgIDwvZm9ybT4KLSAgICA8L2xpPgotPC91bD4KLTwvc2VjdGlvbj4KLQotPHNlY3Rpb24g
aWQ9ImJ1aWxkZXJzIj4KLTxoMj5CdWlsZGVyczwvaDI+Ci08dWw+Ci0gICAgPGxpIGNsYXNzPSJm
b3JtIj4KLSAgICAgICAgPGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249ImNyZWF0ZS9idWlsZGVy
Ij4KLSAgICAgICAgPGRsPgotICAgICAgICA8ZHQ+PGxhYmVsIGZvcj0iYnVpbGRlci1uYW1lIj5O
YW1lPC9sYWJlbD48L2R0PjxkZD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImJ1aWxkZXItbmFtZSIg
bmFtZT0ibmFtZSI+PC9kZD4KLSAgICAgICAgPGR0PjxsYWJlbCBmb3I9ImJ1aWxkZXItcGFzc3dv
cmQiPlBhc3N3b3JkPC9sYWJlbD48L2R0PjxkZD48aW5wdXQgdHlwZT0icGFzc3dvcmQiIGlkPSJi
dWlsZGVyLXBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZCI+PC9kZD4KLSAgICAgICAgPC9kbD4KLSAg
ICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiPkNyZWF0ZTwvYnV0dG9uPgotICAgICAgICA8L2Zv
cm0+Ci0gICAgPC9saT4KLTwvdWw+Ci08L3NlY3Rpb24+Ci0KLTxzZWN0aW9uIGlkPSJ0ZXN0cyI+
Ci08aDI+VGVzdHM8L2gyPgotPHVsPgotICAgIDxsaSBjbGFzcz0iZm9ybSI+Ci0gICAgICAgIDxm
b3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSJtZXJnZS10ZXN0cyI+Ci0gICAgICAgIDxidXR0b24g
dHlwZT0ic3VibWl0Ij5NZXJnZTwvYnV0dG9uPgotICAgICAgICA8c2VsZWN0IG5hbWU9Im1lcmdl
Ij48L3NlbGVjdD4gaW50bwotICAgICAgICA8c2VsZWN0IG5hbWU9ImludG8iPjwvc2VsZWN0Pgot
ICAgICAgICA8L2Zvcm0+Ci0gICAgPC9saT4KLTwvdWw+Ci08L3NlY3Rpb24+Ci08L2Rpdj4KLQot
PGRpdiBpZD0ibWFudWFsLXN1Ym1pc3Npb24iPgotPHNlY3Rpb24+Ci08aDI+TWFudWFsIHN1Ym1p
c3Npb248L2gyPgotPGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249Ii9hZG1pbi9yZXBvcnQvIj4K
LTx0ZXh0YXJlYSBuYW1lPSJwYXlsb2FkIiByb3dzPSIyMCIgY29scz0iMTAwIj4KLTwvdGV4dGFy
ZWE+PGJyPgotPGJ1dHRvbiB0eXBlPSJzdWJtaXQiPlN1Ym1pdDwvYnV0dG9uPgotPC9mb3JtPgot
PC9zZWN0aW9uPgotPCEtLSBGSVhNRTogTWVyZ2UgYWRtaW4vbWFudWFsLXN1Ym1pdC5odG1sIGhl
cmUgLS0+Ci08L2Rpdj4KLQotPGRpdiBpZD0iZXJyb3JzIj4KLTwvZGl2PgotCi08ZGl2IGlkPSJm
b290ZXIiPgotPGEgaHJlZj0iaHR0cHM6Ly9hcHBlbmdpbmUuZ29vZ2xlLmNvbS9kYXNoYm9hcmQ/
YXBwX2lkPXdlYmtpdC1wZXJmIj5BcHAgRW5naW5lIGRhc2hib2FyZDwvYT4KLTwvZGl2PgotCi08
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9qcS9qcXVlcnktMS40LjQubWlu
LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2pz
L2NvbmZpZy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3Jj
PSIuLi9qcy9jb21tb24uanMiPjwvc2NyaXB0PgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiIHNyYz0iLi4vanMvYWRtaW4uanMiPjwvc2NyaXB0PgotCi08L2JvZHk+Ci08L2h0bWw+Cklu
ZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9hZG1pbl9oYW5kbGVycy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9hZG1pbl9oYW5k
bGVycy5weQkocmV2aXNpb24gMTQwMjU4KQorKysgV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3Bv
dC5jb20vYWRtaW5faGFuZGxlcnMucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMTYwICswLDAgQEAK
LSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMg
bWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCB3ZWJhcHAy
Ci1pbXBvcnQganNvbgotCi1mcm9tIGdvb2dsZS5hcHBlbmdpbmUuYXBpIGltcG9ydCB0YXNrcXVl
dWUKLWZyb20gZ29vZ2xlLmFwcGVuZ2luZS5hcGkgaW1wb3J0IHVzZXJzCi1mcm9tIGdvb2dsZS5h
cHBlbmdpbmUuZXh0LmRiIGltcG9ydCBHcWxRdWVyeQotZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4
dC53ZWJhcHAgaW1wb3J0IHRlbXBsYXRlCi0KLWZyb20gY29udHJvbGxlciBpbXBvcnQgc2NoZWR1
bGVfcnVuc191cGRhdGUKLWZyb20gY29udHJvbGxlciBpbXBvcnQgc2NoZWR1bGVfZGFzaGJvYXJk
X3VwZGF0ZQotZnJvbSBjb250cm9sbGVyIGltcG9ydCBzY2hlZHVsZV9tYW5pZmVzdF91cGRhdGUK
LWZyb20gbW9kZWxzIGltcG9ydCBCcmFuY2gKLWZyb20gbW9kZWxzIGltcG9ydCBCdWlsZGVyCi1m
cm9tIG1vZGVscyBpbXBvcnQgUGxhdGZvcm0KLWZyb20gbW9kZWxzIGltcG9ydCBSZXBvcnRMb2cK
LWZyb20gbW9kZWxzIGltcG9ydCBUZXN0Ci0KLQotY2xhc3MgSXNBZG1pbkhhbmRsZXIod2ViYXBw
Mi5SZXF1ZXN0SGFuZGxlcik6Ci0gICAgZGVmIGdldChzZWxmKToKLSAgICAgICAgc2VsZi5yZXNw
b25zZS5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJwotICAgICAg
ICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSgndHJ1ZScgaWYgdXNlcnMuaXNfY3VycmVudF91c2Vy
X2FkbWluKCkgZWxzZSAnZmFsc2UnKQotCi0KLWNsYXNzIEFkbWluRGFzaGJvYXJkSGFuZGxlcih3
ZWJhcHAyLlJlcXVlc3RIYW5kbGVyKToKLSAgICBkZWYgZ2V0KHNlbGYsIHRhc2spOgotICAgICAg
ICB0YXNrX21ldGhvZF9uYW1lID0gJ2dldF8nICsgdGFzawotICAgICAgICBpZiB0YXNrX21ldGhv
ZF9uYW1lIGluIGRpcihzZWxmKSBhbmQgdGFza19tZXRob2RfbmFtZSBub3QgaW4gZGlyKHN1cGVy
KToKLSAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoc2VsZiwgdGFza19tZXRob2RfbmFtZSkK
LSAgICAgICAgICAgIHJldHVybiBtZXRob2QoKQotCi0gICAgICAgIHJlcG9ydF9sb2dfdG90YWwg
PSBHcWxRdWVyeSgiU0VMRUNUIF9fa2V5X18gRlJPTSBSZXBvcnRMb2ciKS5jb3VudCgpCi0gICAg
ICAgIHJlcG9ydF9sb2dfY29tbWl0dGVkID0gR3FsUXVlcnkoIlNFTEVDVCBfX2tleV9fIEZST00g
UmVwb3J0TG9nIFdIRVJFIGNvbW1pdCA9IFRydWUiKS5jb3VudCgpCi0KLSAgICAgICAgc2VsZi5y
ZXNwb25zZS5vdXQud3JpdGUodGVtcGxhdGUucmVuZGVyKCdhZG1pbi5odG1sJywKLSAgICAgICAg
ICAgIHsncmVwb3J0X2xvZ190b3RhbCc6IHJlcG9ydF9sb2dfdG90YWwsICdyZXBvcnRfbG9nX2Nv
bW1pdHRlZCc6IHJlcG9ydF9sb2dfY29tbWl0dGVkfSkpCi0KLSAgICBkZWYgZ2V0X2JyYW5jaGVz
KHNlbGYpOgotICAgICAgICBzZWxmLnJlc3BvbnNlLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0g
J2FwcGxpY2F0aW9uL2pzb24nCi0gICAgICAgIHJlc3VsdCA9IHt9Ci0gICAgICAgIGZvciBicmFu
Y2ggaW4gQnJhbmNoLmFsbCgpOgotICAgICAgICAgICAgcmVzdWx0W2JyYW5jaC5rZXkoKS5uYW1l
KCldID0geyduYW1lJzogYnJhbmNoLm5hbWV9Ci0gICAgICAgIHNlbGYucmVzcG9uc2Uub3V0Lndy
aXRlKGpzb24uZHVtcHMocmVzdWx0KSkKLQotICAgIGRlZiBnZXRfcGxhdGZvcm1zKHNlbGYpOgot
ICAgICAgICBzZWxmLnJlc3BvbnNlLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0
aW9uL2pzb24nCi0gICAgICAgIHJlc3VsdCA9IHt9Ci0gICAgICAgIGZvciBwbGF0Zm9ybSBpbiBQ
bGF0Zm9ybS5hbGwoKToKLSAgICAgICAgICAgIHJlc3VsdFtwbGF0Zm9ybS5rZXkoKS5uYW1lKCld
ID0geyduYW1lJzogcGxhdGZvcm0ubmFtZSwgJ2hpZGRlbic6IHBsYXRmb3JtLmhpZGRlbn0KLSAg
ICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoanNvbi5kdW1wcyhyZXN1bHQpKQotCi0gICAg
ZGVmIGdldF9idWlsZGVycyhzZWxmKToKLSAgICAgICAgc2VsZi5yZXNwb25zZS5oZWFkZXJzWydD
b250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJwotICAgICAgICBzZWxmLnJlc3BvbnNl
Lm91dC53cml0ZShqc29uLmR1bXBzKFtidWlsZGVyLm5hbWUgZm9yIGJ1aWxkZXIgaW4gQnVpbGRl
ci5hbGwoKV0pKQotCi0gICAgZGVmIGdldF90ZXN0cyhzZWxmKToKLSAgICAgICAgc2VsZi5yZXNw
b25zZS5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJwotICAgICAg
ICByZXN1bHQgPSB7fQotICAgICAgICBmb3IgdGVzdCBpbiBUZXN0LmFsbCgpOgotICAgICAgICAg
ICAgcmVzdWx0W3Rlc3Qua2V5KCkubmFtZSgpXSA9IHsnbmFtZSc6IHRlc3QubmFtZSwgJ2hpZGRl
bic6IHRlc3QuaGlkZGVufQotICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZShqc29uLmR1
bXBzKHJlc3VsdCkpCi0KLQotY2xhc3MgQ2hhbmdlVmlzaWJpbGl0eUhhbmRsZXIod2ViYXBwMi5S
ZXF1ZXN0SGFuZGxlcik6Ci0gICAgZGVmIHBvc3Qoc2VsZik6Ci0gICAgICAgIHNlbGYucmVzcG9u
c2UuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCcK
LQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwYXlsb2FkID0ganNvbi5sb2FkcyhzZWxmLnJl
cXVlc3QuYm9keSkKLSAgICAgICAgICAgIGhpZGUgPSBwYXlsb2FkWydoaWRlJ10KLSAgICAgICAg
ZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoIkZhaWxlZCB0byBw
YXJzZSB0aGUgcGF5bG9hZDogJXMiICUgc2VsZi5yZXF1ZXN0LmJvZHkpCi0gICAgICAgICAgICBy
ZXR1cm4KLQotICAgICAgICBpZiAncGxhdGZvcm0nIGluIHBheWxvYWQ6Ci0gICAgICAgICAgICBt
b2RlbCA9IFBsYXRmb3JtLmdldF9ieV9rZXlfbmFtZShwYXlsb2FkWydwbGF0Zm9ybSddKQotICAg
ICAgICBlbGlmICd0ZXN0JyBpbiBwYXlsb2FkOgotICAgICAgICAgICAgbW9kZWwgPSBUZXN0Lmdl
dF9ieV9rZXlfbmFtZShwYXlsb2FkWyd0ZXN0J10pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSgnTm90IHN1cHBvcnRlZCcpCi0gICAgICAgICAgICBy
ZXR1cm4KLQotICAgICAgICBpZiBub3QgbW9kZWw6Ci0gICAgICAgICAgICBzZWxmLnJlc3BvbnNl
Lm91dC53cml0ZSgnQ291bGQgbm90IGZpbmQgdGhlIG1vZGVsJykKLSAgICAgICAgICAgIHJldHVy
bgotCi0gICAgICAgIG1vZGVsLmhpZGRlbiA9IGhpZGUKLSAgICAgICAgbW9kZWwucHV0KCkKLSAg
ICAgICAgc2NoZWR1bGVfZGFzaGJvYXJkX3VwZGF0ZSgpCi0gICAgICAgIHNjaGVkdWxlX21hbmlm
ZXN0X3VwZGF0ZSgpCi0KLSAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoJ09LJykKLQot
Ci1jbGFzcyBNZXJnZVRlc3RzSGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RIYW5kbGVyKToKLSAgICBk
ZWYgcG9zdChzZWxmLCB0YXNrKToKLSAgICAgICAgc2VsZi5yZXNwb25zZS5oZWFkZXJzWydDb250
ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04JwotCi0gICAgICAgIGlmIHRh
c2sgIT0gJ3J1bic6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcGF5bG9hZCA9
IGpzb24ubG9hZHMoc2VsZi5yZXF1ZXN0LmJvZHkpCi0gICAgICAgICAgICAgICAgbWVyZ2UgPSBw
YXlsb2FkLmdldCgnbWVyZ2UnLCAnJykKLSAgICAgICAgICAgICAgICBpbnRvID0gcGF5bG9hZC5n
ZXQoJ2ludG8nLCAnJykKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBzZWxm
LnJlc3BvbnNlLm91dC53cml0ZSgiRmFpbGVkIHRvIHBhcnNlIHRoZSBwYXlsb2FkOiAlcyIgJSBz
ZWxmLnJlcXVlc3QuYm9keSkKLSAgICAgICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAgICAg
aWYgbWVyZ2UgPT0gaW50byBvciBub3QgVGVzdC5nZXRfYnlfa2V5X25hbWUobWVyZ2UpIG9yIG5v
dCBUZXN0LmdldF9ieV9rZXlfbmFtZShpbnRvKToKLSAgICAgICAgICAgICAgICBzZWxmLnJlc3Bv
bnNlLm91dC53cml0ZSgnSW52YWxpZCB0ZXN0IG5hbWVzJykKLSAgICAgICAgICAgICAgICByZXR1
cm4KLQotICAgICAgICAgICAgdGFza3F1ZXVlLmFkZCh1cmw9Jy9hZG1pbi9tZXJnZS10ZXN0cy9y
dW4nLCBwYXJhbXM9eydtZXJnZSc6IG1lcmdlLCAnaW50byc6IGludG99LCB0YXJnZXQ9J21vZGVs
LW1hbmlwdWxhdG9yJykKLSAgICAgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCdPSycp
Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBtZXJnZSA9IFRlc3QuZ2V0X2J5X2tleV9u
YW1lKHNlbGYucmVxdWVzdC5nZXQoJ21lcmdlJykpCi0gICAgICAgIGludG8gPSBUZXN0LmdldF9i
eV9rZXlfbmFtZShzZWxmLnJlcXVlc3QuZ2V0KCdpbnRvJykpCi0KLSAgICAgICAgYnJhbmNoZXNf
YW5kX3BsYXRmb3Jtc190b191cGRhdGUgPSBpbnRvLm1lcmdlKG1lcmdlKQotICAgICAgICBpZiBi
cmFuY2hlc19hbmRfcGxhdGZvcm1zX3RvX3VwZGF0ZSA9PSBOb25lOgotICAgICAgICAgICAgIyBG
SVhNRTogVGhpcyBtZXNzYWdlIGlzIGludmlzaWJsZS4gTmVlZCB0byBzdG9yZSB0aGlzIHNvbWV3
aGVyZSBhbmQgbGV0IHRoZSBhZG1pbiBwYWdlIHB1bGwgaXQuCi0gICAgICAgICAgICBzZWxmLnJl
c3BvbnNlLm91dC53cml0ZSgnQ2Fubm90IG1lcmdlICVzIGludG8gJXMuIFRoZXJlIGFyZSBjb25m
bGljdGluZyByZXN1bHRzLicgJSAobWVyZ2UubmFtZSwgaW50by5uYW1lKSkKLSAgICAgICAgICAg
IHJldHVybgotCi0gICAgICAgIGZvciBicmFuY2hfaWQsIHBsYXRmb3JtX2lkIGluIGJyYW5jaGVz
X2FuZF9wbGF0Zm9ybXNfdG9fdXBkYXRlOgotICAgICAgICAgICAgc2NoZWR1bGVfcnVuc191cGRh
dGUoaW50by5pZCwgYnJhbmNoX2lkLCBwbGF0Zm9ybV9pZCkKLQotICAgICAgICBzY2hlZHVsZV9k
YXNoYm9hcmRfdXBkYXRlKCkKLSAgICAgICAgc2NoZWR1bGVfbWFuaWZlc3RfdXBkYXRlKCkKLQot
ICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSgnT0snKQpJbmRleDogV2Vic2l0ZXMvd2Vi
a2l0LXBlcmYuYXBwc3BvdC5jb20vYXBwLnlhbWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Vi
a2l0LXBlcmYuYXBwc3BvdC5jb20vYXBwLnlhbWwJKHJldmlzaW9uIDE0MDI1OCkKKysrIFdlYnNp
dGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2FwcC55YW1sCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDM5ICswLDAgQEAKLWFwcGxpY2F0aW9uOiB3ZWJraXQtcGVyZgotdmVyc2lvbjogMjAKLXJ1bnRp
bWU6IHB5dGhvbjI3Ci1hcGlfdmVyc2lvbjogMQotdGhyZWFkc2FmZTogZmFsc2UKLQotaGFuZGxl
cnM6Ci0tIHVybDogL2Zhdmljb25cLmljbwotICBzdGF0aWNfZmlsZXM6IGZhdmljb24uaWNvCi0g
IHVwbG9hZDogZmF2aWNvblwuaWNvCi0KLS0gdXJsOiAvCi0gIHN0YXRpY19maWxlczogaW5kZXgu
aHRtbAotICB1cGxvYWQ6IGluZGV4Lmh0bWwKLQotLSB1cmw6IC8oKGluZGV4fGVtYmVkfGdyYXBo
KVwuaHRtbCkKLSAgc3RhdGljX2ZpbGVzOiBcMQotICB1cGxvYWQ6ICgoaW5kZXh8ZW1iZWR8Z3Jh
cGgpXC5odG1sKQotCi0tIHVybDogL2NzcwotICBzdGF0aWNfZGlyOiBjc3MKLQotLSB1cmw6IC9q
cwotICBzdGF0aWNfZGlyOiBqcwotCi0tIHVybDogL2pxCi0gIHN0YXRpY19kaXI6IGpxCi0KLS0g
dXJsOiAvYXBpL3Rlc3QvcmVwb3J0Ci0gIHNjcmlwdDogbWFpbi5weQotICBzZWN1cmU6IGFsd2F5
cwotCi0tIHVybDogL2FkbWluLy4qCi0gIHNjcmlwdDogbWFpbi5weQotICBzZWN1cmU6IGFsd2F5
cwotICBsb2dpbjogYWRtaW4KLQotLSB1cmw6IC4qCi0gIHNjcmlwdDogbWFpbi5weQpJbmRleDog
V2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vYmFja2VuZHMueWFtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9iYWNrZW5kcy55YW1sCShyZXZp
c2lvbiAxNDAyNTgpCisrKyBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9iYWNrZW5k
cy55YW1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzAsMCBAQAotYmFja2VuZHM6Ci0tIG1vZGVs
LW1hbmlwdWxhdG9yCi0gIG9wdGlvbnM6IGR5bmFtaWMKSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1w
ZXJmLmFwcHNwb3QuY29tL2NvbnRyb2xsZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Vi
a2l0LXBlcmYuYXBwc3BvdC5jb20vY29udHJvbGxlci5weQkocmV2aXNpb24gMTQwMjU4KQorKysg
V2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vY29udHJvbGxlci5weQkod29ya2luZyBj
b3B5KQpAQCAtMSwxNzEgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotaW1wb3J0IHVybGxpYgotaW1wb3J0IHdlYmFwcDIKLWZyb20gZ29vZ2xlLmFwcGVu
Z2luZS5hcGkgaW1wb3J0IHRhc2txdWV1ZQotZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBv
cnQgZGIKLQotZnJvbSBqc29uX2dlbmVyYXRvcnMgaW1wb3J0IERhc2hib2FyZEpTT05HZW5lcmF0
b3IKLWZyb20ganNvbl9nZW5lcmF0b3JzIGltcG9ydCBNYW5pZmVzdEpTT05HZW5lcmF0b3IKLWZy
b20gbW9kZWxzIGltcG9ydCBCcmFuY2gKLWZyb20gbW9kZWxzIGltcG9ydCBEYXNoYm9hcmRJbWFn
ZQotZnJvbSBtb2RlbHMgaW1wb3J0IFBlcnNpc3RlbnRDYWNoZQotZnJvbSBtb2RlbHMgaW1wb3J0
IFBsYXRmb3JtCi1mcm9tIG1vZGVscyBpbXBvcnQgUnVucwotZnJvbSBtb2RlbHMgaW1wb3J0IFRl
c3QKLWZyb20gbW9kZWxzIGltcG9ydCBtb2RlbF9mcm9tX251bWVyaWNfaWQKLQotCi1kZWYgc2No
ZWR1bGVfbWFuaWZlc3RfdXBkYXRlKCk6Ci0gICAgdGFza3F1ZXVlLmFkZCh1cmw9Jy9hcGkvdGVz
dC91cGRhdGUnKQotCi0KLWNsYXNzIE1hbmlmZXN0VXBkYXRlSGFuZGxlcih3ZWJhcHAyLlJlcXVl
c3RIYW5kbGVyKToKLSAgICBkZWYgcG9zdChzZWxmKToKLSAgICAgICAgc2VsZi5yZXNwb25zZS5o
ZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04JwotICAg
ICAgICBQZXJzaXN0ZW50Q2FjaGUuc2V0X2NhY2hlKCdtYW5pZmVzdCcsIE1hbmlmZXN0SlNPTkdl
bmVyYXRvcigpLnRvX2pzb24oKSkKLSAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoJ09L
JykKLQotCi1jbGFzcyBDYWNoZWRNYW5pZmVzdEhhbmRsZXIod2ViYXBwMi5SZXF1ZXN0SGFuZGxl
cik6Ci0gICAgZGVmIGdldChzZWxmKToKLSAgICAgICAgc2VsZi5yZXNwb25zZS5oZWFkZXJzWydD
b250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJwotICAgICAgICBtYW5pZmVzdCA9IFBl
cnNpc3RlbnRDYWNoZS5nZXRfY2FjaGUoJ21hbmlmZXN0JykKLSAgICAgICAgaWYgbWFuaWZlc3Q6
Ci0gICAgICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZShtYW5pZmVzdCkKLSAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgIHNjaGVkdWxlX21hbmlmZXN0X3VwZGF0ZSgpCi0KLQotZGVmIHNj
aGVkdWxlX2Rhc2hib2FyZF91cGRhdGUoKToKLSAgICB0YXNrcXVldWUuYWRkKHVybD0nL2FwaS90
ZXN0L2Rhc2hib2FyZC91cGRhdGUnKQotCi0KLWNsYXNzIERhc2hib2FyZFVwZGF0ZUhhbmRsZXIo
d2ViYXBwMi5SZXF1ZXN0SGFuZGxlcik6Ci0gICAgZGVmIHBvc3Qoc2VsZik6Ci0gICAgICAgIHNl
bGYucmVzcG9uc2UuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbjsgY2hhcnNl
dD11dGYtOCcKLSAgICAgICAgUGVyc2lzdGVudENhY2hlLnNldF9jYWNoZSgnZGFzaGJvYXJkJywg
RGFzaGJvYXJkSlNPTkdlbmVyYXRvcigpLnRvX2pzb24oKSkKLSAgICAgICAgc2VsZi5yZXNwb25z
ZS5vdXQud3JpdGUoJ09LJykKLQotCi1jbGFzcyBDYWNoZWREYXNoYm9hcmRIYW5kbGVyKHdlYmFw
cDIuUmVxdWVzdEhhbmRsZXIpOgotICAgIGRlZiBnZXQoc2VsZik6Ci0gICAgICAgIHNlbGYucmVz
cG9uc2UuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24vanNvbicKLSAgICAg
ICAgZGFzaGJvYXJkID0gUGVyc2lzdGVudENhY2hlLmdldF9jYWNoZSgnZGFzaGJvYXJkJykKLSAg
ICAgICAgaWYgZGFzaGJvYXJkOgotICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUo
ZGFzaGJvYXJkKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2NoZWR1bGVfZGFzaGJvYXJk
X3VwZGF0ZSgpCi0KLQotZGVmIHNjaGVkdWxlX3J1bnNfdXBkYXRlKHRlc3RfaWQsIGJyYW5jaF9p
ZCwgcGxhdGZvcm1faWQsIHJlZ2VuZXJhdGVfcnVucz1UcnVlKToKLSAgICBpZiByZWdlbmVyYXRl
X3J1bnM6Ci0gICAgICAgIHRhc2txdWV1ZS5hZGQodXJsPScvYXBpL3Rlc3QvcnVucy91cGRhdGUn
LCBwYXJhbXM9eydpZCc6IHRlc3RfaWQsICdicmFuY2hpZCc6IGJyYW5jaF9pZCwgJ3BsYXRmb3Jt
aWQnOiBwbGF0Zm9ybV9pZH0pCi0gICAgdGFza3F1ZXVlLmFkZCh1cmw9Jy9hcGkvdGVzdC9ydW5z
L2NoYXJ0JywgcGFyYW1zPXsnaWQnOiB0ZXN0X2lkLCAnYnJhbmNoaWQnOiBicmFuY2hfaWQsICdw
bGF0Zm9ybWlkJzogcGxhdGZvcm1faWQsCi0gICAgICAgICdkaXNwbGF5RGF5cyc6IDd9KQotCi0K
LWRlZiBfZ2V0X3Rlc3RfYnJhbmNoX3BsYXRmb3JtX2lkcyhoYW5kbGVyKToKLSAgICB0cnk6Ci0g
ICAgICAgIHRlc3RfaWQgPSBpbnQoaGFuZGxlci5yZXF1ZXN0LmdldCgnaWQnLCAwKSkKLSAgICAg
ICAgYnJhbmNoX2lkID0gaW50KGhhbmRsZXIucmVxdWVzdC5nZXQoJ2JyYW5jaGlkJywgMCkpCi0g
ICAgICAgIHBsYXRmb3JtX2lkID0gaW50KGhhbmRsZXIucmVxdWVzdC5nZXQoJ3BsYXRmb3JtaWQn
LCAwKSkKLSAgICAgICAgcmV0dXJuIHRlc3RfaWQsIGJyYW5jaF9pZCwgcGxhdGZvcm1faWQKLSAg
ICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAjIEZJWE1FOiBPdXRwdXQgYW4gZXJyb3IgaGVy
ZQotICAgICAgICByZXR1cm4gMCwgMCwgMAotCi0KLWNsYXNzIFJ1bnNVcGRhdGVIYW5kbGVyKHdl
YmFwcDIuUmVxdWVzdEhhbmRsZXIpOgotICAgIGRlZiBwb3N0KHNlbGYpOgotICAgICAgICBzZWxm
LnJlc3BvbnNlLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW47IGNoYXJzZXQ9
dXRmLTgnCi0gICAgICAgIHRlc3RfaWQsIGJyYW5jaF9pZCwgcGxhdGZvcm1faWQgPSBfZ2V0X3Rl
c3RfYnJhbmNoX3BsYXRmb3JtX2lkcyhzZWxmKQotCi0gICAgICAgIGJyYW5jaCA9IG1vZGVsX2Zy
b21fbnVtZXJpY19pZChicmFuY2hfaWQsIEJyYW5jaCkKLSAgICAgICAgcGxhdGZvcm0gPSBtb2Rl
bF9mcm9tX251bWVyaWNfaWQocGxhdGZvcm1faWQsIFBsYXRmb3JtKQotICAgICAgICB0ZXN0ID0g
bW9kZWxfZnJvbV9udW1lcmljX2lkKHRlc3RfaWQsIFRlc3QpCi0gICAgICAgIGFzc2VydCBicmFu
Y2gKLSAgICAgICAgYXNzZXJ0IHBsYXRmb3JtCi0gICAgICAgIGFzc2VydCB0ZXN0Ci0KLSAgICAg
ICAgUnVucy51cGRhdGVfb3JfaW5zZXJ0KGJyYW5jaCwgcGxhdGZvcm0sIHRlc3QpCi0gICAgICAg
IHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCdPSycpCi0KLQotY2xhc3MgQ2FjaGVkUnVuc0hhbmRs
ZXIod2ViYXBwMi5SZXF1ZXN0SGFuZGxlcik6Ci0gICAgZGVmIGdldChzZWxmKToKLSAgICAgICAg
c2VsZi5yZXNwb25zZS5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29u
JwotCi0gICAgICAgIHRlc3RfaWQsIGJyYW5jaF9pZCwgcGxhdGZvcm1faWQgPSBfZ2V0X3Rlc3Rf
YnJhbmNoX3BsYXRmb3JtX2lkcyhzZWxmKQotICAgICAgICBydW5zID0gUnVucy5qc29uX2J5X2lk
cyhicmFuY2hfaWQsIHBsYXRmb3JtX2lkLCB0ZXN0X2lkKQotICAgICAgICBpZiBydW5zOgotICAg
ICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUocnVucykKLSAgICAgICAgZWxpZiBtb2Rl
bF9mcm9tX251bWVyaWNfaWQoYnJhbmNoX2lkLCBCcmFuY2gpIGFuZCBtb2RlbF9mcm9tX251bWVy
aWNfaWQocGxhdGZvcm1faWQsIFBsYXRmb3JtKSBhbmQgbW9kZWxfZnJvbV9udW1lcmljX2lkKHRl
c3RfaWQsIFRlc3QpOgotICAgICAgICAgICAgc2NoZWR1bGVfcnVuc191cGRhdGUodGVzdF9pZCwg
YnJhbmNoX2lkLCBwbGF0Zm9ybV9pZCkKLQotCi1jbGFzcyBSdW5zQ2hhcnRIYW5kbGVyKHdlYmFw
cDIuUmVxdWVzdEhhbmRsZXIpOgotICAgIGRlZiBwb3N0KHNlbGYpOgotICAgICAgICB4ID0gMAot
ICAgICAgICBzZWxmLnJlc3BvbnNlLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxh
aW47IGNoYXJzZXQ9dXRmLTgnCi0gICAgICAgIHRlc3RfaWQsIGJyYW5jaF9pZCwgcGxhdGZvcm1f
aWQgPSBfZ2V0X3Rlc3RfYnJhbmNoX3BsYXRmb3JtX2lkcyhzZWxmKQotCi0gICAgICAgIGJyYW5j
aCA9IG1vZGVsX2Zyb21fbnVtZXJpY19pZChicmFuY2hfaWQsIEJyYW5jaCkKLSAgICAgICAgcGxh
dGZvcm0gPSBtb2RlbF9mcm9tX251bWVyaWNfaWQocGxhdGZvcm1faWQsIFBsYXRmb3JtKQotICAg
ICAgICB0ZXN0ID0gbW9kZWxfZnJvbV9udW1lcmljX2lkKHRlc3RfaWQsIFRlc3QpCi0gICAgICAg
IGRpc3BsYXlfZGF5cyA9IGludChzZWxmLnJlcXVlc3QuZ2V0KCdkaXNwbGF5RGF5cycpKQotICAg
ICAgICBhc3NlcnQgYnJhbmNoCi0gICAgICAgIGFzc2VydCBwbGF0Zm9ybQotICAgICAgICBhc3Nl
cnQgdGVzdAotICAgICAgICBwYXJhbXMgPSBSdW5zLmdldF9ieV9vYmplY3RzKGJyYW5jaCwgcGxh
dGZvcm0sIHRlc3QpLmNoYXJ0X3BhcmFtcyhkaXNwbGF5X2RheXMpCi0gICAgICAgIGlmIG5vdCBw
YXJhbXM6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZGFzaGJvYXJkX2NoYXJ0X2ZpbGUg
PSB1cmxsaWIudXJsb3BlbignaHR0cDovL2NoYXJ0Lmdvb2dsZWFwaXMuY29tL2NoYXJ0JywgdXJs
bGliLnVybGVuY29kZShwYXJhbXMpKQotCi0gICAgICAgIERhc2hib2FyZEltYWdlLmNyZWF0ZShi
cmFuY2guaWQsIHBsYXRmb3JtLmlkLCB0ZXN0LmlkLCBkaXNwbGF5X2RheXMsIGRhc2hib2FyZF9j
aGFydF9maWxlLnJlYWQoKSkKLQotCi1jbGFzcyBEYXNoYm9hcmRJbWFnZUhhbmRsZXIod2ViYXBw
Mi5SZXF1ZXN0SGFuZGxlcik6Ci0gICAgZGVmIGdldChzZWxmLCB0ZXN0X2lkLCBicmFuY2hfaWQs
IHBsYXRmb3JtX2lkLCBkaXNwbGF5X2RheXMpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBi
cmFuY2hfaWQgPSBpbnQoYnJhbmNoX2lkKQotICAgICAgICAgICAgcGxhdGZvcm1faWQgPSBpbnQo
cGxhdGZvcm1faWQpCi0gICAgICAgICAgICB0ZXN0X2lkID0gaW50KHRlc3RfaWQpCi0gICAgICAg
ICAgICBkaXNwbGF5X2RheXMgPSBpbnQoZGlzcGxheV9kYXlzKQotICAgICAgICBleGNlcHQgVmFs
dWVFcnJvcjoKLSAgICAgICAgICAgIHNlbGYucmVzcG9uc2UuaGVhZGVyc1snQ29udGVudC1UeXBl
J10gPSAndGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCcKLSAgICAgICAgICAgIHNlbGYucmVzcG9u
c2Uub3V0LndyaXRlKCdGYWlsZWQnKQotCi0gICAgICAgIHNlbGYucmVzcG9uc2UuaGVhZGVyc1sn
Q29udGVudC1UeXBlJ10gPSAnaW1hZ2UvcG5nJwotICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53
cml0ZShEYXNoYm9hcmRJbWFnZS5nZXRfaW1hZ2UoYnJhbmNoX2lkLCBwbGF0Zm9ybV9pZCwgdGVz
dF9pZCwgZGlzcGxheV9kYXlzKSkKLQotCi1kZWYgc2NoZWR1bGVfcmVwb3J0X3Byb2Nlc3MobG9n
KToKLSAgICB0YXNrcXVldWUuYWRkKHVybD0nL2FwaS90ZXN0L3JlcG9ydC9wcm9jZXNzJywgcGFy
YW1zPXsnaWQnOiBsb2cua2V5KCkuaWQoKX0pCkluZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVyZi5h
cHBzcG90LmNvbS9jcmVhdGVfaGFuZGxlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJr
aXQtcGVyZi5hcHBzcG90LmNvbS9jcmVhdGVfaGFuZGxlci5weQkocmV2aXNpb24gMTQwMjU4KQor
KysgV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vY3JlYXRlX2hhbmRsZXIucHkJKHdv
cmtpbmcgY29weSkKQEAgLTEsOTMgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotaW1wb3J0IHdlYmFwcDIKLWZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQg
aW1wb3J0IGRiCi0KLWltcG9ydCBqc29uCi0KLWZyb20gY29udHJvbGxlciBpbXBvcnQgc2NoZWR1
bGVfZGFzaGJvYXJkX3VwZGF0ZQotZnJvbSBtb2RlbHMgaW1wb3J0IEJ1aWxkZXIKLWZyb20gbW9k
ZWxzIGltcG9ydCBCcmFuY2gKLWZyb20gbW9kZWxzIGltcG9ydCBOdW1lcmljSWRIb2xkZXIKLWZy
b20gbW9kZWxzIGltcG9ydCBQbGF0Zm9ybQotZnJvbSBtb2RlbHMgaW1wb3J0IGNyZWF0ZV9pbl90
cmFuc2FjdGlvbl93aXRoX251bWVyaWNfaWRfaG9sZGVyCi0KLQotY2xhc3MgQ3JlYXRlSGFuZGxl
cih3ZWJhcHAyLlJlcXVlc3RIYW5kbGVyKToKLSAgICBkZWYgcG9zdChzZWxmLCBtb2RlbCk6Ci0g
ICAgICAgIHNlbGYucmVzcG9uc2UuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFp
bjsgY2hhcnNldD11dGYtOCcKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwYXlsb2FkID0g
anNvbi5sb2FkcyhzZWxmLnJlcXVlc3QuYm9keSkKLSAgICAgICAgICAgIGtleSA9IHBheWxvYWQu
Z2V0KCdrZXknLCAnJykKLSAgICAgICAgICAgIG5hbWUgPSBwYXlsb2FkLmdldCgnbmFtZScsICcn
KQotICAgICAgICAgICAgcGFzc3dvcmQgPSBwYXlsb2FkLmdldCgncGFzc3dvcmQnLCAnJykKLSAg
ICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoIkZhaWxl
ZCB0byBwYXJzZSB0aGUgcGF5bG9hZDogJXMiICUgc2VsZi5yZXF1ZXN0LmJvZHkpCi0gICAgICAg
ICAgICByZXR1cm4KLQotICAgICAgICBpZiBtb2RlbCA9PSAnYnVpbGRlcic6Ci0gICAgICAgICAg
ICBlcnJvciA9IHNlbGYuX2NyZWF0ZV9idWlsZGVyKG5hbWUsIHBhc3N3b3JkKQotICAgICAgICBl
bGlmIG1vZGVsID09ICdicmFuY2gnOgotICAgICAgICAgICAgZXJyb3IgPSBzZWxmLl9jcmVhdGVf
YnJhbmNoKGtleSwgbmFtZSkKLSAgICAgICAgZWxpZiBtb2RlbCA9PSAncGxhdGZvcm0nOgotICAg
ICAgICAgICAgZXJyb3IgPSBzZWxmLl9jcmVhdGVfcGxhdGZvcm0oa2V5LCBuYW1lKQotICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgZXJyb3IgPSAiVW5rbm93biBtb2RlbCB0eXBlOiAlc1xuIiAl
IG1vZGVsCi0KLSAgICAgICAgIyBObyBuZWVkIHRvIGNsZWFyIG1hbmlmZXN0IG9yIHJ1bnMgc2lu
Y2UgdGhleSBvbmx5IGNvbnRhaW4gb25lcyB3aXRoIHRlc3QgcmVzdWx0cwotICAgICAgICBzY2hl
ZHVsZV9kYXNoYm9hcmRfdXBkYXRlKCkKLSAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUo
ZXJyb3IgaWYgZXJyb3IgZWxzZSAnT0snKQotCi0gICAgZGVmIF9jcmVhdGVfYnVpbGRlcihzZWxm
LCBuYW1lLCBwYXNzd29yZCk6Ci0gICAgICAgIGlmIG5vdCBuYW1lIG9yIG5vdCBwYXNzd29yZDoK
LSAgICAgICAgICAgIHJldHVybiAnSW52YWxpZCBuYW1lIG9yIHBhc3N3b3JkJwotCi0gICAgICAg
IGRlZiBleGVjdXRlKCk6Ci0gICAgICAgICAgICBtZXNzYWdlID0gTm9uZQotICAgICAgICAgICAg
Ym90ID0gQnVpbGRlci5nZXRfYnlfa2V5X25hbWUobmFtZSkKLSAgICAgICAgICAgIGlmIGJvdDoK
LSAgICAgICAgICAgICAgICBtZXNzYWdlID0gJ1VwZGF0aW5nIHRoZSBwYXNzd29yZCBzaW5jZSBi
b3QgIiVzIiBhbHJlYWR5IGV4aXN0cycgJSBuYW1lCi0gICAgICAgICAgICAgICAgYm90LnVwZGF0
ZV9wYXNzd29yZChwYXNzd29yZCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
QnVpbGRlci5jcmVhdGUobmFtZSwgcGFzc3dvcmQpCi0gICAgICAgICAgICByZXR1cm4gbWVzc2Fn
ZQotCi0gICAgICAgIHJldHVybiBkYi5ydW5faW5fdHJhbnNhY3Rpb24oZXhlY3V0ZSkKLQotICAg
IGRlZiBfY3JlYXRlX2JyYW5jaChzZWxmLCBrZXksIG5hbWUpOgotICAgICAgICBpZiBub3Qga2V5
IG9yIG5vdCBuYW1lOgotICAgICAgICAgICAgcmV0dXJuICdJbnZhbGlkIGtleSBvciBuYW1lJwot
ICAgICAgICByZXR1cm4gTm9uZSBpZiBCcmFuY2guY3JlYXRlX2lmX3Bvc3NpYmxlKGtleSwgbmFt
ZSkgZWxzZSAnQnJhbmNoICIlcyIgYWxyZWFkeSBleGlzdHMnICUga2V5Ci0KLSAgICBkZWYgX2Ny
ZWF0ZV9wbGF0Zm9ybShzZWxmLCBrZXksIG5hbWUpOgotICAgICAgICBpZiBub3Qga2V5IG9yIG5v
dCBuYW1lOgotICAgICAgICAgICAgcmV0dXJuICdJbnZhbGlkIGtleSBuYW1lJwotICAgICAgICBy
ZXR1cm4gTm9uZSBpZiBQbGF0Zm9ybS5jcmVhdGVfaWZfcG9zc2libGUoa2V5LCBuYW1lKSBlbHNl
ICdQbGF0Zm9ybSAiJXMiIGFscmVhZHkgZXhpc3RzJyAlIGtleQpJbmRleDogV2Vic2l0ZXMvd2Vi
a2l0LXBlcmYuYXBwc3BvdC5jb20vaW5kZXgueWFtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy93
ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9pbmRleC55YW1sCShyZXZpc2lvbiAxNDAyNTgpCisrKyBX
ZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9pbmRleC55YW1sCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDExICswLDAgQEAKLWluZGV4ZXM6Ci0KLSMgQVVUT0dFTkVSQVRFRAotCi0jIFRoaXMg
aW5kZXgueWFtbCBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2hlbmV2ZXIgdGhlIGRldl9hcHBz
ZXJ2ZXIKLSMgZGV0ZWN0cyB0aGF0IGEgbmV3IHR5cGUgb2YgcXVlcnkgaXMgcnVuLiAgSWYgeW91
IHdhbnQgdG8gbWFuYWdlIHRoZQotIyBpbmRleC55YW1sIGZpbGUgbWFudWFsbHksIHJlbW92ZSB0
aGUgYWJvdmUgbWFya2VyIGxpbmUgKHRoZSBsaW5lCi0jIHNheWluZyAiIyBBVVRPR0VORVJBVEVE
IikuICBJZiB5b3Ugd2FudCB0byBtYW5hZ2Ugc29tZSBpbmRleGVzCi0jIG1hbnVhbGx5LCBtb3Zl
IHRoZW0gYWJvdmUgdGhlIG1hcmtlciBsaW5lLiAgVGhlIGluZGV4LnlhbWwgZmlsZSBpcwotIyBh
dXRvbWF0aWNhbGx5IHVwbG9hZGVkIHRvIHRoZSBhZG1pbiBjb25zb2xlIHdoZW4geW91IG5leHQg
ZGVwbG95Ci0jIHlvdXIgYXBwbGljYXRpb24gdXNpbmcgYXBwY2ZnLnB5LgpJbmRleDogV2Vic2l0
ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vanNvbl9nZW5lcmF0b3JzLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2pzb25fZ2VuZXJhdG9ycy5weQko
cmV2aXNpb24gMTQwMjU4KQorKysgV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vanNv
bl9nZW5lcmF0b3JzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzMyArMCwwIEBACi0jIS91c3Iv
YmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMK
LSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
IyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQganNvbgotZnJvbSBkYXRl
dGltZSBpbXBvcnQgZGF0ZXRpbWUKLWZyb20gZGF0ZXRpbWUgaW1wb3J0IHRpbWVkZWx0YQotZnJv
bSB0aW1lIGltcG9ydCBta3RpbWUKLQotZnJvbSBtb2RlbHMgaW1wb3J0IEJ1aWxkCi1mcm9tIG1v
ZGVscyBpbXBvcnQgQnVpbGRlcgotZnJvbSBtb2RlbHMgaW1wb3J0IEJyYW5jaAotZnJvbSBtb2Rl
bHMgaW1wb3J0IFBsYXRmb3JtCi1mcm9tIG1vZGVscyBpbXBvcnQgVGVzdAotZnJvbSBtb2RlbHMg
aW1wb3J0IFRlc3RSZXN1bHQKLQotCi1jbGFzcyBKU09OR2VuZXJhdG9yQmFzZShvYmplY3QpOgot
ICAgIGRlZiB0b19qc29uKHNlbGYpOgotICAgICAgICByZXR1cm4ganNvbi5kdW1wcyhzZWxmLnZh
bHVlKCkpCi0KLQotY2xhc3MgRGFzaGJvYXJkSlNPTkdlbmVyYXRvcihKU09OR2VuZXJhdG9yQmFz
ZSk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiBEb24ndCBoYXJk
LWNvZGUgd2Via2l0LXRydW5rIGhlcmU7IGlkZWFsbHkgd2Ugd2FudCB0aGlzIGJlIGN1c3RvbWl6
YWJsZS4KLSAgICAgICAgd2Via2l0X3RydW5rID0gQnJhbmNoLmdldF9ieV9rZXlfbmFtZSgnd2Vi
a2l0LXRydW5rJykKLSAgICAgICAgaWYgbm90IHdlYmtpdF90cnVuazoKLSAgICAgICAgICAgIHNl
bGYuX2Rhc2hib2FyZCA9IE5vbmUKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICMgRklY
TUU6IERldGVybWluZSBwb3B1bGFyIGJyYW5jaGVzLCBwbGF0Zm9ybXMsIGFuZCB0ZXN0cwotICAg
ICAgICBzZWxmLl9kYXNoYm9hcmQgPSB7Ci0gICAgICAgICAgICAnZGVmYXVsdEJyYW5jaCc6ICdX
ZWJLaXQgdHJ1bmsnLAotICAgICAgICAgICAgJ2JyYW5jaFRvSWQnOiB7d2Via2l0X3RydW5rLm5h
bWU6IHdlYmtpdF90cnVuay5pZH0sCi0gICAgICAgICAgICAncGxhdGZvcm1Ub0lkJzoge30sCi0g
ICAgICAgICAgICAndGVzdFRvSWQnOiB7fSwKLSAgICAgICAgfQotCi0gICAgICAgIGZvciBwbGF0
Zm9ybSBpbiBQbGF0Zm9ybS5hbGwoKToKLSAgICAgICAgICAgIGlmIG5vdCBwbGF0Zm9ybS5oaWRk
ZW46Ci0gICAgICAgICAgICAgICAgc2VsZi5fZGFzaGJvYXJkWydwbGF0Zm9ybVRvSWQnXVtwbGF0
Zm9ybS5uYW1lXSA9IHBsYXRmb3JtLmlkCi0KLSAgICAgICAgZm9yIHRlc3QgaW4gVGVzdC5hbGwo
KToKLSAgICAgICAgICAgIGlmIG5vdCB0ZXN0LmhpZGRlbjoKLSAgICAgICAgICAgICAgICBzZWxm
Ll9kYXNoYm9hcmRbJ3Rlc3RUb0lkJ11bdGVzdC5uYW1lXSA9IHRlc3QuaWQKLQotICAgIGRlZiB2
YWx1ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2Rhc2hib2FyZAotCi0KLWNsYXNzIE1h
bmlmZXN0SlNPTkdlbmVyYXRvcihKU09OR2VuZXJhdG9yQmFzZSk6Ci0gICAgZGVmIF9faW5pdF9f
KHNlbGYpOgotICAgICAgICAjIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIG1hc3NpdmUuIEJyZWFr
IGl0IHVwCi0gICAgICAgIHNlbGYuX3Rlc3RfbWFwID0ge30KLSAgICAgICAgcGxhdGZvcm1faWRf
bWFwID0ge30KLSAgICAgICAgYnJhbmNoX2lkX21hcCA9IHt9Ci0gICAgICAgIGZvciB0ZXN0IGlu
IFRlc3QuYWxsKCk6Ci0gICAgICAgICAgICBpZiB0ZXN0LmhpZGRlbjoKLSAgICAgICAgICAgICAg
ICBjb250aW51ZQotCi0gICAgICAgICAgICBicmFuY2hfaWRzID0gW0JyYW5jaC5nZXQoYnJhbmNo
X2tleSkuaWQgZm9yIGJyYW5jaF9rZXkgaW4gdGVzdC5icmFuY2hlc10KLSAgICAgICAgICAgIHBs
YXRmb3JtX2lkcyA9IFtQbGF0Zm9ybS5nZXQocGxhdGZvcm1fa2V5KS5pZCBmb3IgcGxhdGZvcm1f
a2V5IGluIHRlc3QucGxhdGZvcm1zXQotICAgICAgICAgICAgc2VsZi5fdGVzdF9tYXBbdGVzdC5p
ZF0gPSB7Ci0gICAgICAgICAgICAgICAgJ25hbWUnOiB0ZXN0Lm5hbWUsCi0gICAgICAgICAgICAg
ICAgJ2JyYW5jaElkcyc6IGJyYW5jaF9pZHMsCi0gICAgICAgICAgICAgICAgJ3BsYXRmb3JtSWRz
JzogcGxhdGZvcm1faWRzLAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgcGxhdGZv
cm1faWQgaW4gcGxhdGZvcm1faWRzOgotICAgICAgICAgICAgICAgIHBsYXRmb3JtX2lkX21hcC5z
ZXRkZWZhdWx0KHBsYXRmb3JtX2lkLCB7J3Rlc3RzJzogW10sICdicmFuY2hlcyc6IFtdfSkKLSAg
ICAgICAgICAgICAgICBwbGF0Zm9ybV9pZF9tYXBbcGxhdGZvcm1faWRdWyd0ZXN0cyddLmFwcGVu
ZCh0ZXN0LmlkKQotICAgICAgICAgICAgICAgIHBsYXRmb3JtX2lkX21hcFtwbGF0Zm9ybV9pZF1b
J2JyYW5jaGVzJ10gKz0gYnJhbmNoX2lkcwotCi0gICAgICAgICAgICBmb3IgYnJhbmNoX2lkIGlu
IGJyYW5jaF9pZHM6Ci0gICAgICAgICAgICAgICAgYnJhbmNoX2lkX21hcC5zZXRkZWZhdWx0KGJy
YW5jaF9pZCwgeyd0ZXN0cyc6IFtdLCAncGxhdGZvcm1zJzogW119KQotICAgICAgICAgICAgICAg
IGJyYW5jaF9pZF9tYXBbYnJhbmNoX2lkXVsndGVzdHMnXS5hcHBlbmQodGVzdC5pZCkKLSAgICAg
ICAgICAgICAgICBicmFuY2hfaWRfbWFwW2JyYW5jaF9pZF1bJ3BsYXRmb3JtcyddICs9IHBsYXRm
b3JtX2lkcwotCi0gICAgICAgIHNlbGYuX3BsYXRmb3JtX21hcCA9IHt9Ci0gICAgICAgIGZvciBw
bGF0Zm9ybSBpbiBQbGF0Zm9ybS5hbGwoKToKLSAgICAgICAgICAgIGlmIHBsYXRmb3JtLmlkIG5v
dCBpbiBwbGF0Zm9ybV9pZF9tYXA6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAg
ICAgICAgaWYgcGxhdGZvcm0uaGlkZGVuOgotICAgICAgICAgICAgICAgIGZvciB0ZXN0X2lkIGlu
IHBsYXRmb3JtX2lkX21hcFtwbGF0Zm9ybS5pZF1bJ3Rlc3RzJ106Ci0gICAgICAgICAgICAgICAg
ICAgIHNlbGYuX3Rlc3RfbWFwW3Rlc3RfaWRdWydwbGF0Zm9ybUlkcyddLnJlbW92ZShwbGF0Zm9y
bS5pZCkKLSAgICAgICAgICAgICAgICBmb3IgYnJhbmNoX2lkIGluIHBsYXRmb3JtX2lkX21hcFtw
bGF0Zm9ybS5pZF1bJ2JyYW5jaGVzJ106Ci0gICAgICAgICAgICAgICAgICAgIGJyYW5jaF9pZF9t
YXBbYnJhbmNoX2lkXVsncGxhdGZvcm1zJ10ucmVtb3ZlKHBsYXRmb3JtLmlkKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgIHNlbGYuX3BsYXRmb3JtX21hcFtwbGF0Zm9y
bS5pZF0gPSB7Ci0gICAgICAgICAgICAgICAgJ25hbWUnOiBwbGF0Zm9ybS5uYW1lLAotICAgICAg
ICAgICAgICAgICd0ZXN0SWRzJzogbGlzdChzZXQocGxhdGZvcm1faWRfbWFwW3BsYXRmb3JtLmlk
XVsndGVzdHMnXSkpLAotICAgICAgICAgICAgICAgICdicmFuY2hJZHMnOiBsaXN0KHNldChwbGF0
Zm9ybV9pZF9tYXBbcGxhdGZvcm0uaWRdWydicmFuY2hlcyddKSksCi0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgc2VsZi5fYnJhbmNoX21hcCA9IHt9Ci0gICAgICAgIGZvciBicmFuY2ggaW4gQnJh
bmNoLmFsbCgpOgotICAgICAgICAgICAgaWYgYnJhbmNoLmlkIG5vdCBpbiBicmFuY2hfaWRfbWFw
OgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBzZWxmLl9icmFuY2hfbWFw
W2JyYW5jaC5pZF0gPSB7Ci0gICAgICAgICAgICAgICAgJ25hbWUnOiBicmFuY2gubmFtZSwKLSAg
ICAgICAgICAgICAgICAndGVzdElkcyc6IGxpc3Qoc2V0KGJyYW5jaF9pZF9tYXBbYnJhbmNoLmlk
XVsndGVzdHMnXSkpLAotICAgICAgICAgICAgICAgICdwbGF0Zm9ybUlkcyc6IGxpc3Qoc2V0KGJy
YW5jaF9pZF9tYXBbYnJhbmNoLmlkXVsncGxhdGZvcm1zJ10pKSwKLSAgICAgICAgICAgIH0KLQot
ICAgIGRlZiB2YWx1ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHsnYnJhbmNoTWFwJzogc2VsZi5f
YnJhbmNoX21hcCwgJ3BsYXRmb3JtTWFwJzogc2VsZi5fcGxhdGZvcm1fbWFwLCAndGVzdE1hcCc6
IHNlbGYuX3Rlc3RfbWFwfQpJbmRleDogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20v
anNvbl9nZW5lcmF0b3JzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3dlYmtp
dC1wZXJmLmFwcHNwb3QuY29tL2pzb25fZ2VuZXJhdG9yc191bml0dGVzdC5weQkocmV2aXNpb24g
MTQwMjU4KQorKysgV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vanNvbl9nZW5lcmF0
b3JzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDIzMyArMCwwIEBACi0jIS91c3Iv
YmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMK
LSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
IyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQganNvbgotaW1wb3J0IG1v
ZGVscwotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0
IHRlc3RiZWQKLWZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCi1mcm9tIGRhdGV0aW1lIGlt
cG9ydCB0aW1lZGVsdGEKLWZyb20ganNvbl9nZW5lcmF0b3JzIGltcG9ydCBKU09OR2VuZXJhdG9y
QmFzZQotZnJvbSBqc29uX2dlbmVyYXRvcnMgaW1wb3J0IERhc2hib2FyZEpTT05HZW5lcmF0b3IK
LWZyb20ganNvbl9nZW5lcmF0b3JzIGltcG9ydCBNYW5pZmVzdEpTT05HZW5lcmF0b3IKLWZyb20g
bW9kZWxzX3VuaXR0ZXN0IGltcG9ydCBEYXRhU3RvcmVUZXN0c0Jhc2UKLWZyb20gbW9kZWxzIGlt
cG9ydCBCcmFuY2gKLWZyb20gbW9kZWxzIGltcG9ydCBCdWlsZAotZnJvbSBtb2RlbHMgaW1wb3J0
IEJ1aWxkZXIKLWZyb20gbW9kZWxzIGltcG9ydCBQbGF0Zm9ybQotZnJvbSBtb2RlbHMgaW1wb3J0
IFRlc3QKLWZyb20gbW9kZWxzIGltcG9ydCBUZXN0UmVzdWx0Ci0KLQotZGVmIF9jcmVhdGVfcmVz
dWx0cyhicmFuY2gsIHBsYXRmb3JtLCBidWlsZGVyLCB0ZXN0X25hbWUsIHZhbHVlcyk6Ci0gICAg
cmVzdWx0cyA9IFtdCi0gICAgZm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOgotICAg
ICAgICBidWlsZCA9IEJ1aWxkKGJyYW5jaD1icmFuY2gsIHBsYXRmb3JtPXBsYXRmb3JtLCBidWls
ZGVyPWJ1aWxkZXIsCi0gICAgICAgICAgICBidWlsZE51bWJlcj1pLCByZXZpc2lvbj0xMDAgKyBp
LCB0aW1lc3RhbXA9ZGF0ZXRpbWUubm93KCkpCi0gICAgICAgIGJ1aWxkLnB1dCgpCi0gICAgICAg
IHJlc3VsdCA9IFRlc3RSZXN1bHQobmFtZT10ZXN0X25hbWUsIGJ1aWxkPWJ1aWxkLCB2YWx1ZT12
YWx1ZSkKLSAgICAgICAgcmVzdWx0LnB1dCgpCi0gICAgICAgIFRlc3QudXBkYXRlX29yX2luc2Vy
dCh0ZXN0X25hbWUsIGJyYW5jaCwgcGxhdGZvcm0pCi0gICAgICAgIHJlc3VsdHMuYXBwZW5kKHJl
c3VsdCkKLSAgICByZXR1cm4gcmVzdWx0cwotCi0KLWNsYXNzIEpTT05HZW5lcmF0b3JCYXNlVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfdG9fanNvbihzZWxmKToKLQotICAg
ICAgICBjbGFzcyBBSlNPTkdlbmVyYXRvcihKU09OR2VuZXJhdG9yQmFzZSk6Ci0gICAgICAgICAg
ICBkZWYgdmFsdWUoc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsna2V5JzogJ3ZhbHVl
J30KLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEFKU09OR2VuZXJhdG9yKCkudmFsdWUoKSwg
eyJrZXkiOiAidmFsdWUifSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChBSlNPTkdlbmVyYXRv
cigpLnRvX2pzb24oKSwgJ3sia2V5IjogInZhbHVlIn0nKQotCi0KLWNsYXNzIERhc2hib2FyZEpT
T05HZW5lcmF0b3JUZXN0KERhdGFTdG9yZVRlc3RzQmFzZSk6Ci0gICAgZGVmIHRlc3RfdmFsdWVf
bm9fYnJhbmNoKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNOb0luc3RhbmNlT2Yo
QnJhbmNoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERhc2hib2FyZEpTT05HZW5lcmF0b3Io
KS52YWx1ZSgpLCBOb25lKQotCi0gICAgZGVmIHRlc3RfdmFsdWVfbm9fcGxhZm9ybXMoc2VsZik6
Ci0gICAgICAgIHdlYmtpdF90cnVuayA9IEJyYW5jaC5jcmVhdGVfaWZfcG9zc2libGUoJ3dlYmtp
dC10cnVuaycsICdXZWJLaXQgdHJ1bmsnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERhc2hi
b2FyZEpTT05HZW5lcmF0b3IoKS52YWx1ZSgpLCB7Ci0gICAgICAgICAgICAnZGVmYXVsdEJyYW5j
aCc6ICdXZWJLaXQgdHJ1bmsnLAotICAgICAgICAgICAgJ2JyYW5jaFRvSWQnOiB7J1dlYktpdCB0
cnVuayc6IHdlYmtpdF90cnVuay5pZH0sCi0gICAgICAgICAgICAncGxhdGZvcm1Ub0lkJzoge30s
Ci0gICAgICAgICAgICAndGVzdFRvSWQnOiB7fSwKLSAgICAgICAgfSkKLQotICAgIGRlZiB0ZXN0
X3ZhbHVlX3NpbmdsZV9wbGF0Zm9ybShzZWxmKToKLSAgICAgICAgd2Via2l0X3RydW5rID0gQnJh
bmNoLmNyZWF0ZV9pZl9wb3NzaWJsZSgnd2Via2l0LXRydW5rJywgJ1dlYktpdCB0cnVuaycpCi0g
ICAgICAgIHNvbWVfcGxhdGZvcm0gPSBQbGF0Zm9ybS5jcmVhdGVfaWZfcG9zc2libGUoJ3NvbWUt
cGxhdGZvcm0nLCAnU29tZSBQbGF0Zm9ybScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGFz
aGJvYXJkSlNPTkdlbmVyYXRvcigpLnZhbHVlKCksIHsKLSAgICAgICAgICAgICdkZWZhdWx0QnJh
bmNoJzogJ1dlYktpdCB0cnVuaycsCi0gICAgICAgICAgICAnYnJhbmNoVG9JZCc6IHsnV2ViS2l0
IHRydW5rJzogd2Via2l0X3RydW5rLmlkfSwKLSAgICAgICAgICAgICdwbGF0Zm9ybVRvSWQnOiB7
J1NvbWUgUGxhdGZvcm0nOiBzb21lX3BsYXRmb3JtLmlkfSwKLSAgICAgICAgICAgICd0ZXN0VG9J
ZCc6IHt9LAotICAgICAgICB9KQotCi0gICAgICAgIFRlc3QudXBkYXRlX29yX2luc2VydCgnc29t
ZS10ZXN0Jywgd2Via2l0X3RydW5rLCBzb21lX3BsYXRmb3JtKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKERhc2hib2FyZEpTT05HZW5lcmF0b3IoKS52YWx1ZSgpLCB7Ci0gICAgICAgICAgICAn
ZGVmYXVsdEJyYW5jaCc6ICdXZWJLaXQgdHJ1bmsnLAotICAgICAgICAgICAgJ2JyYW5jaFRvSWQn
OiB7J1dlYktpdCB0cnVuayc6IHdlYmtpdF90cnVuay5pZH0sCi0gICAgICAgICAgICAncGxhdGZv
cm1Ub0lkJzogeydTb21lIFBsYXRmb3JtJzogc29tZV9wbGF0Zm9ybS5pZH0sCi0gICAgICAgICAg
ICAndGVzdFRvSWQnOiB7J3NvbWUtdGVzdCc6IFRlc3QuZ2V0X2J5X2tleV9uYW1lKCdzb21lLXRl
c3QnKS5pZH0sCi0gICAgICAgIH0pCi0KLSAgICBkZWYgdGVzdF92YWx1ZV90d29fcGxhdGZvcm1z
KHNlbGYpOgotICAgICAgICB3ZWJraXRfdHJ1bmsgPSBCcmFuY2guY3JlYXRlX2lmX3Bvc3NpYmxl
KCd3ZWJraXQtdHJ1bmsnLCAnV2ViS2l0IHRydW5rJykKLSAgICAgICAgc29tZV9wbGF0Zm9ybSA9
IFBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1wbGF0Zm9ybScsICdTb21lIFBsYXRm
b3JtJykKLSAgICAgICAgb3RoZXJfcGxhdGZvcm0gPSBQbGF0Zm9ybS5jcmVhdGVfaWZfcG9zc2li
bGUoJ290aGVyLXBsYXRmb3JtJywgJ090aGVyIFBsYXRmb3JtJykKLSAgICAgICAgVGVzdC51cGRh
dGVfb3JfaW5zZXJ0KCdzb21lLXRlc3QnLCB3ZWJraXRfdHJ1bmssIHNvbWVfcGxhdGZvcm0pCi0g
ICAgICAgIFRlc3QudXBkYXRlX29yX2luc2VydCgnc29tZS10ZXN0Jywgd2Via2l0X3RydW5rLCBv
dGhlcl9wbGF0Zm9ybSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEYXNoYm9hcmRKU09OR2Vu
ZXJhdG9yKCkudmFsdWUoKSwgewotICAgICAgICAgICAgJ2RlZmF1bHRCcmFuY2gnOiAnV2ViS2l0
IHRydW5rJywKLSAgICAgICAgICAgICdicmFuY2hUb0lkJzogeydXZWJLaXQgdHJ1bmsnOiB3ZWJr
aXRfdHJ1bmsuaWR9LAotICAgICAgICAgICAgJ3BsYXRmb3JtVG9JZCc6IHsnU29tZSBQbGF0Zm9y
bSc6IHNvbWVfcGxhdGZvcm0uaWQsICdPdGhlciBQbGF0Zm9ybSc6IG90aGVyX3BsYXRmb3JtLmlk
fSwKLSAgICAgICAgICAgICd0ZXN0VG9JZCc6IHsnc29tZS10ZXN0JzogVGVzdC5nZXRfYnlfa2V5
X25hbWUoJ3NvbWUtdGVzdCcpLmlkfSwKLSAgICAgICAgfSkKLQotICAgIGRlZiB0ZXN0X3ZhbHVl
X3dpdGhfaGlkZGVuX3BsYXRmb3JtX2FuZF90ZXNzdChzZWxmKToKLSAgICAgICAgd2Via2l0X3Ry
dW5rID0gQnJhbmNoLmNyZWF0ZV9pZl9wb3NzaWJsZSgnd2Via2l0LXRydW5rJywgJ1dlYktpdCB0
cnVuaycpCi0gICAgICAgIHNvbWVfcGxhdGZvcm0gPSBQbGF0Zm9ybS5jcmVhdGVfaWZfcG9zc2li
bGUoJ3NvbWUtcGxhdGZvcm0nLCAnU29tZSBQbGF0Zm9ybScpCi0gICAgICAgIGhpZGRlbl9wbGF0
Zm9ybSA9IFBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnaGlkZGVuLXBsYXRmb3JtJywgJ0hp
ZGRlbiBQbGF0Zm9ybScpCi0gICAgICAgIGhpZGRlbl9wbGF0Zm9ybS5oaWRkZW4gPSBUcnVlCi0g
ICAgICAgIGhpZGRlbl9wbGF0Zm9ybS5wdXQoKQotICAgICAgICBUZXN0LnVwZGF0ZV9vcl9pbnNl
cnQoJ3NvbWUtdGVzdCcsIHdlYmtpdF90cnVuaywgc29tZV9wbGF0Zm9ybSkKLSAgICAgICAgVGVz
dC51cGRhdGVfb3JfaW5zZXJ0KCdzb21lLXRlc3QnLCB3ZWJraXRfdHJ1bmssIGhpZGRlbl9wbGF0
Zm9ybSkKLSAgICAgICAgVGVzdC51cGRhdGVfb3JfaW5zZXJ0KCdvdGhlci10ZXN0Jywgd2Via2l0
X3RydW5rLCBzb21lX3BsYXRmb3JtKQotICAgICAgICBUZXN0LnVwZGF0ZV9vcl9pbnNlcnQoJ290
aGVyLXRlc3QnLCB3ZWJraXRfdHJ1bmssIGhpZGRlbl9wbGF0Zm9ybSkKLSAgICAgICAgVGVzdC51
cGRhdGVfb3JfaW5zZXJ0KCdoaWRkZW4tdGVzdCcsIHdlYmtpdF90cnVuaywgc29tZV9wbGF0Zm9y
bSkKLSAgICAgICAgVGVzdC51cGRhdGVfb3JfaW5zZXJ0KCdoaWRkZW4tdGVzdCcsIHdlYmtpdF90
cnVuaywgaGlkZGVuX3BsYXRmb3JtKQotICAgICAgICBoaWRkZW5fdGVzdCA9IFRlc3QuZ2V0X2J5
X2tleV9uYW1lKCdoaWRkZW4tdGVzdCcpCi0gICAgICAgIGhpZGRlbl90ZXN0LmhpZGRlbiA9IFRy
dWUKLSAgICAgICAgaGlkZGVuX3Rlc3QucHV0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChE
YXNoYm9hcmRKU09OR2VuZXJhdG9yKCkudmFsdWUoKVsncGxhdGZvcm1Ub0lkJ10sIHsnU29tZSBQ
bGF0Zm9ybSc6IHNvbWVfcGxhdGZvcm0uaWR9KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERh
c2hib2FyZEpTT05HZW5lcmF0b3IoKS52YWx1ZSgpWyd0ZXN0VG9JZCddLAotICAgICAgICAgICAg
eydzb21lLXRlc3QnOiBUZXN0LmdldF9ieV9rZXlfbmFtZSgnc29tZS10ZXN0JykuaWQsICdvdGhl
ci10ZXN0JzogVGVzdC5nZXRfYnlfa2V5X25hbWUoJ290aGVyLXRlc3QnKS5pZH0pCi0KLQotY2xh
c3MgTWFuaWZlc3RKU09OR2VuZXJhdG9yVGVzdChEYXRhU3RvcmVUZXN0c0Jhc2UpOgotICAgIGRl
ZiB0ZXN0X3ZhbHVlX25vX2JyYW5jaChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUaGVyZUlz
Tm9JbnN0YW5jZU9mKEJyYW5jaCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNYW5pZmVzdEpT
T05HZW5lcmF0b3IoKS52YWx1ZSgpLCB7J2JyYW5jaE1hcCc6IHt9LCAncGxhdGZvcm1NYXAnOiB7
fSwgJ3Rlc3RNYXAnOiB7fX0pCi0KLSAgICBkZWYgdGVzdF92YWx1ZV9ub19wbGFmb3JtcyhzZWxm
KToKLSAgICAgICAgc29tZV9icmFuY2ggPSBCcmFuY2guY3JlYXRlX2lmX3Bvc3NpYmxlKCdzb21l
LWJyYW5jaCcsICdTb21lIEJyYW5jaCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTWFuaWZl
c3RKU09OR2VuZXJhdG9yKCkudmFsdWUoKSwgeydicmFuY2hNYXAnOiB7fSwgJ3BsYXRmb3JtTWFw
Jzoge30sICd0ZXN0TWFwJzoge319KQotCi0gICAgZGVmIF9hc3NlcnRfc2luZ2xlX3Rlc3Qoc2Vs
ZiwgdmFsdWUsIGJyYW5jaCwgcGxhdGZvcm0sIHRlc3QpOgotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsVW5vcmRlcmVkTGlzdCh2YWx1ZS5rZXlzKCksIFsnYnJhbmNoTWFwJywgJ3BsYXRmb3JtTWFw
JywgJ3Rlc3RNYXAnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZVsnYnJhbmNoTWFw
J10sCi0gICAgICAgICAgICB7YnJhbmNoLmlkOiB7J25hbWUnOiBicmFuY2gubmFtZSwgJ3Rlc3RJ
ZHMnOiBbdGVzdC5pZF0sICdwbGF0Zm9ybUlkcyc6IFtwbGF0Zm9ybS5pZF19fSkKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCh2YWx1ZVsncGxhdGZvcm1NYXAnXSwKLSAgICAgICAgICAgIHtwbGF0
Zm9ybS5pZDogeyduYW1lJzogcGxhdGZvcm0ubmFtZSwgJ2JyYW5jaElkcyc6IFticmFuY2guaWRd
LCAndGVzdElkcyc6IFt0ZXN0LmlkXX19KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVl
Wyd0ZXN0TWFwJ10sCi0gICAgICAgICAgICB7dGVzdC5pZDogeyduYW1lJzogdGVzdC5uYW1lLCAn
YnJhbmNoSWRzJzogW2JyYW5jaC5pZF0sICdwbGF0Zm9ybUlkcyc6IFtwbGF0Zm9ybS5pZF19fSkK
LQotICAgIGRlZiB0ZXN0X3ZhbHVlX3NpbmdsZV9wbGF0Zm9ybShzZWxmKToKLSAgICAgICAgc29t
ZV9icmFuY2ggPSBCcmFuY2guY3JlYXRlX2lmX3Bvc3NpYmxlKCdzb21lLWJyYW5jaCcsICdTb21l
IEJyYW5jaCcpCi0gICAgICAgIHNvbWVfcGxhdGZvcm0gPSBQbGF0Zm9ybS5jcmVhdGVfaWZfcG9z
c2libGUoJ3NvbWUtcGxhdGZvcm0nLCAnU29tZSBQbGF0Zm9ybScpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoTWFuaWZlc3RKU09OR2VuZXJhdG9yKCkudmFsdWUoKSwgeydicmFuY2hNYXAnOiB7
fSwgJ3BsYXRmb3JtTWFwJzoge30sICd0ZXN0TWFwJzoge319KQotCi0gICAgICAgIHNvbWVfdGVz
dCA9IFRlc3QudXBkYXRlX29yX2luc2VydCgnc29tZS10ZXN0Jywgc29tZV9icmFuY2gsIHNvbWVf
cGxhdGZvcm0pCi0gICAgICAgIHNlbGYuX2Fzc2VydF9zaW5nbGVfdGVzdChNYW5pZmVzdEpTT05H
ZW5lcmF0b3IoKS52YWx1ZSgpLCBzb21lX2JyYW5jaCwgc29tZV9wbGF0Zm9ybSwgc29tZV90ZXN0
KQotCi0gICAgZGVmIHRlc3RfdmFsdWVfdHdvX3BsYXRmb3JtcyhzZWxmKToKLSAgICAgICAgc29t
ZV9icmFuY2ggPSBCcmFuY2guY3JlYXRlX2lmX3Bvc3NpYmxlKCdzb21lLWJyYW5jaCcsICdTb21l
IEJyYW5jaCcpCi0gICAgICAgIHNvbWVfcGxhdGZvcm0gPSBQbGF0Zm9ybS5jcmVhdGVfaWZfcG9z
c2libGUoJ3NvbWUtcGxhdGZvcm0nLCAnU29tZSBQbGF0Zm9ybScpCi0gICAgICAgIG90aGVyX3Bs
YXRmb3JtID0gUGxhdGZvcm0uY3JlYXRlX2lmX3Bvc3NpYmxlKCdvdGhlci1wbGF0Zm9ybScsICdP
dGhlciBQbGF0Zm9ybScpCi0gICAgICAgIHNvbWVfdGVzdCA9IFRlc3QudXBkYXRlX29yX2luc2Vy
dCgnc29tZS10ZXN0Jywgc29tZV9icmFuY2gsIHNvbWVfcGxhdGZvcm0pCi0KLSAgICAgICAgc2Vs
Zi5fYXNzZXJ0X3NpbmdsZV90ZXN0KE1hbmlmZXN0SlNPTkdlbmVyYXRvcigpLnZhbHVlKCksIHNv
bWVfYnJhbmNoLCBzb21lX3BsYXRmb3JtLCBzb21lX3Rlc3QpCi0KLSAgICAgICAgc29tZV90ZXN0
ID0gVGVzdC51cGRhdGVfb3JfaW5zZXJ0KCdzb21lLXRlc3QnLCBzb21lX2JyYW5jaCwgb3RoZXJf
cGxhdGZvcm0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxVbm9yZGVyZWRMaXN0KHNvbWVfdGVz
dC5wbGF0Zm9ybXMsIFtzb21lX3BsYXRmb3JtLmtleSgpLCBvdGhlcl9wbGF0Zm9ybS5rZXkoKV0p
Ci0KLSAgICAgICAgdmFsdWUgPSBNYW5pZmVzdEpTT05HZW5lcmF0b3IoKS52YWx1ZSgpCi0gICAg
ICAgIGV4cGVjdGVkX3BsYXRmb3JtX2lkcyA9IFtzb21lX3BsYXRmb3JtLmlkLCBvdGhlcl9wbGF0
Zm9ybS5pZF0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbFVub3JkZXJlZExpc3QodmFsdWUua2V5
cygpLCBbJ2JyYW5jaE1hcCcsICdwbGF0Zm9ybU1hcCcsICd0ZXN0TWFwJ10pCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxVbm9yZGVyZWRMaXN0KHZhbHVlWydicmFuY2hNYXAnXSwKLSAgICAgICAg
ICAgIHtzb21lX2JyYW5jaC5pZDogeyduYW1lJzogc29tZV9icmFuY2gubmFtZSwgJ3Rlc3RJZHMn
OiBbc29tZV90ZXN0LmlkXSwgJ3BsYXRmb3JtSWRzJzogZXhwZWN0ZWRfcGxhdGZvcm1faWRzfX0p
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVbJ3BsYXRmb3JtTWFwJ10sCi0gICAgICAg
ICAgICB7c29tZV9wbGF0Zm9ybS5pZDogeyduYW1lJzogc29tZV9wbGF0Zm9ybS5uYW1lLCAnYnJh
bmNoSWRzJzogW3NvbWVfYnJhbmNoLmlkXSwgJ3Rlc3RJZHMnOiBbc29tZV90ZXN0LmlkXX0sCi0g
ICAgICAgICAgICBvdGhlcl9wbGF0Zm9ybS5pZDogeyduYW1lJzogb3RoZXJfcGxhdGZvcm0ubmFt
ZSwgJ2JyYW5jaElkcyc6IFtzb21lX2JyYW5jaC5pZF0sICd0ZXN0SWRzJzogW3NvbWVfdGVzdC5p
ZF19fSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZVsndGVzdE1hcCddLAotICAgICAg
ICAgICAge3NvbWVfdGVzdC5pZDogeyduYW1lJzogc29tZV90ZXN0Lm5hbWUsICdicmFuY2hJZHMn
OiBbc29tZV9icmFuY2guaWRdLCAncGxhdGZvcm1JZHMnOiBleHBlY3RlZF9wbGF0Zm9ybV9pZHN9
fSkKLQotICAgIGRlZiB0ZXN0X3ZhbHVlX3R3b190ZXN0cyhzZWxmKToKLSAgICAgICAgc29tZV9i
cmFuY2ggPSBCcmFuY2guY3JlYXRlX2lmX3Bvc3NpYmxlKCdzb21lLWJyYW5jaCcsICdTb21lIEJy
YW5jaCcpCi0gICAgICAgIHNvbWVfcGxhdGZvcm0gPSBQbGF0Zm9ybS5jcmVhdGVfaWZfcG9zc2li
bGUoJ3NvbWUtcGxhdGZvcm0nLCAnU29tZSBQbGF0Zm9ybScpCi0gICAgICAgIHNvbWVfdGVzdCA9
IFRlc3QudXBkYXRlX29yX2luc2VydCgnc29tZS10ZXN0Jywgc29tZV9icmFuY2gsIHNvbWVfcGxh
dGZvcm0pCi0KLSAgICAgICAgc2VsZi5fYXNzZXJ0X3NpbmdsZV90ZXN0KE1hbmlmZXN0SlNPTkdl
bmVyYXRvcigpLnZhbHVlKCksIHNvbWVfYnJhbmNoLCBzb21lX3BsYXRmb3JtLCBzb21lX3Rlc3Qp
Ci0KLSAgICAgICAgb3RoZXJfdGVzdCA9IFRlc3QudXBkYXRlX29yX2luc2VydCgnb3RoZXItdGVz
dCcsIHNvbWVfYnJhbmNoLCBzb21lX3BsYXRmb3JtKQotCi0gICAgICAgIHZhbHVlID0gTWFuaWZl
c3RKU09OR2VuZXJhdG9yKCkudmFsdWUoKQotICAgICAgICBleHBlY3RlZF90ZXN0X2lkcyA9IFtz
b21lX3Rlc3QuaWQsIG90aGVyX3Rlc3QuaWRdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxVbm9y
ZGVyZWRMaXN0KHZhbHVlLmtleXMoKSwgWydicmFuY2hNYXAnLCAncGxhdGZvcm1NYXAnLCAndGVz
dE1hcCddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlWydicmFuY2hNYXAnXSwKLSAg
ICAgICAgICAgIHtzb21lX2JyYW5jaC5pZDogeyduYW1lJzogc29tZV9icmFuY2gubmFtZSwgJ3Rl
c3RJZHMnOiBleHBlY3RlZF90ZXN0X2lkcywgJ3BsYXRmb3JtSWRzJzogW3NvbWVfcGxhdGZvcm0u
aWRdfX0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVbJ3BsYXRmb3JtTWFwJ10sCi0g
ICAgICAgICAgICB7c29tZV9wbGF0Zm9ybS5pZDogeyduYW1lJzogc29tZV9wbGF0Zm9ybS5uYW1l
LCAnYnJhbmNoSWRzJzogW3NvbWVfYnJhbmNoLmlkXSwgJ3Rlc3RJZHMnOiBleHBlY3RlZF90ZXN0
X2lkc319KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlWyd0ZXN0TWFwJ10sCi0gICAg
ICAgICAgICB7c29tZV90ZXN0LmlkOiB7J25hbWUnOiBzb21lX3Rlc3QubmFtZSwgJ2JyYW5jaElk
cyc6IFtzb21lX2JyYW5jaC5pZF0sICdwbGF0Zm9ybUlkcyc6IFtzb21lX3BsYXRmb3JtLmlkXX0s
Ci0gICAgICAgICAgICBvdGhlcl90ZXN0LmlkOiB7J25hbWUnOiBvdGhlcl90ZXN0Lm5hbWUsICdi
cmFuY2hJZHMnOiBbc29tZV9icmFuY2guaWRdLCAncGxhdGZvcm1JZHMnOiBbc29tZV9wbGF0Zm9y
bS5pZF19fSkKLQotICAgIGRlZiB0ZXN0X3ZhbHVlX3dpdGhfaGlkZGVuX3BsYXRmb3JtX2FuZF90
ZXN0KHNlbGYpOgotICAgICAgICBzb21lX2JyYW5jaCA9IEJyYW5jaC5jcmVhdGVfaWZfcG9zc2li
bGUoJ3NvbWUtYnJhbmNoJywgJ1NvbWUgQnJhbmNoJykKLSAgICAgICAgc29tZV9wbGF0Zm9ybSA9
IFBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1wbGF0Zm9ybScsICdTb21lIFBsYXRm
b3JtJykKLSAgICAgICAgaGlkZGVuX3BsYXRmb3JtID0gUGxhdGZvcm0uY3JlYXRlX2lmX3Bvc3Np
YmxlKCdoaWRkZW4tcGxhdGZvcm0nLCAnSGlkZGVuIFBsYXRmb3JtJykKLSAgICAgICAgaGlkZGVu
X3BsYXRmb3JtLmhpZGRlbiA9IFRydWUKLSAgICAgICAgaGlkZGVuX3BsYXRmb3JtLnB1dCgpCi0K
LSAgICAgICAgVGVzdC51cGRhdGVfb3JfaW5zZXJ0KCdzb21lLXRlc3QnLCBzb21lX2JyYW5jaCwg
c29tZV9wbGF0Zm9ybSkKLSAgICAgICAgc29tZV90ZXN0ID0gVGVzdC51cGRhdGVfb3JfaW5zZXJ0
KCdzb21lLXRlc3QnLCBzb21lX2JyYW5jaCwgaGlkZGVuX3BsYXRmb3JtKQotCi0gICAgICAgIFRl
c3QudXBkYXRlX29yX2luc2VydCgnaGlkZGVuLXRlc3QnLCBzb21lX2JyYW5jaCwgc29tZV9wbGF0
Zm9ybSkKLSAgICAgICAgaGlkZGVuX3Rlc3QgPSBUZXN0LnVwZGF0ZV9vcl9pbnNlcnQoJ2hpZGRl
bi10ZXN0Jywgc29tZV9icmFuY2gsIGhpZGRlbl9wbGF0Zm9ybSkKLSAgICAgICAgaGlkZGVuX3Rl
c3QuaGlkZGVuID0gVHJ1ZQotICAgICAgICBoaWRkZW5fdGVzdC5wdXQoKQotCi0gICAgICAgIHZh
bHVlID0gTWFuaWZlc3RKU09OR2VuZXJhdG9yKCkudmFsdWUoKQotICAgICAgICBleHBlY3RlZF90
ZXN0X2lkcyA9IFtdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxVbm9yZGVyZWRMaXN0KHZhbHVl
LmtleXMoKSwgWydicmFuY2hNYXAnLCAncGxhdGZvcm1NYXAnLCAndGVzdE1hcCddKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlWydicmFuY2hNYXAnXSwKLSAgICAgICAgICAgIHtzb21l
X2JyYW5jaC5pZDogeyduYW1lJzogc29tZV9icmFuY2gubmFtZSwgJ3Rlc3RJZHMnOiBbc29tZV90
ZXN0LmlkXSwgJ3BsYXRmb3JtSWRzJzogW3NvbWVfcGxhdGZvcm0uaWRdfX0pCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwodmFsdWVbJ3BsYXRmb3JtTWFwJ10sCi0gICAgICAgICAgICB7c29tZV9w
bGF0Zm9ybS5pZDogeyduYW1lJzogc29tZV9wbGF0Zm9ybS5uYW1lLCAnYnJhbmNoSWRzJzogW3Nv
bWVfYnJhbmNoLmlkXSwgJ3Rlc3RJZHMnOiBbc29tZV90ZXN0LmlkXX19KQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHZhbHVlWyd0ZXN0TWFwJ10sCi0gICAgICAgICAgICB7c29tZV90ZXN0Lmlk
OiB7J25hbWUnOiBzb21lX3Rlc3QubmFtZSwgJ2JyYW5jaElkcyc6IFtzb21lX2JyYW5jaC5pZF0s
ICdwbGF0Zm9ybUlkcyc6IFtzb21lX3BsYXRmb3JtLmlkXX19KQotCi0KLWlmIF9fbmFtZV9fID09
ICdfX21haW5fXyc6Ci0gICAgdW5pdHRlc3QubWFpbigpCkluZGV4OiBXZWJzaXRlcy93ZWJraXQt
cGVyZi5hcHBzcG90LmNvbS9tYWluLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3dlYmtpdC1w
ZXJmLmFwcHNwb3QuY29tL21haW4ucHkJKHJldmlzaW9uIDE0MDI1OCkKKysrIFdlYnNpdGVzL3dl
YmtpdC1wZXJmLmFwcHNwb3QuY29tL21haW4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNjkgKzAs
MCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAyMDA3LCAyMDExIEdv
b2dsZSBJbmMuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lv
biAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2Vw
dCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29w
eSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vu
c2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBv
ciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBX
QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt
cGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVy
bmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0j
Ci0KLWltcG9ydCB3ZWJhcHAyCi1mcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0LndlYmFwcCBpbXBv
cnQgdXRpbAotCi1pbXBvcnQganNvbgotCi1mcm9tIGFkbWluX2hhbmRsZXJzIGltcG9ydCBBZG1p
bkRhc2hib2FyZEhhbmRsZXIKLWZyb20gYWRtaW5faGFuZGxlcnMgaW1wb3J0IENoYW5nZVZpc2li
aWxpdHlIYW5kbGVyCi1mcm9tIGFkbWluX2hhbmRsZXJzIGltcG9ydCBJc0FkbWluSGFuZGxlcgot
ZnJvbSBhZG1pbl9oYW5kbGVycyBpbXBvcnQgTWVyZ2VUZXN0c0hhbmRsZXIKLWZyb20gY29udHJv
bGxlciBpbXBvcnQgQ2FjaGVkRGFzaGJvYXJkSGFuZGxlcgotZnJvbSBjb250cm9sbGVyIGltcG9y
dCBDYWNoZWRNYW5pZmVzdEhhbmRsZXIKLWZyb20gY29udHJvbGxlciBpbXBvcnQgQ2FjaGVkUnVu
c0hhbmRsZXIKLWZyb20gY29udHJvbGxlciBpbXBvcnQgRGFzaGJvYXJkSW1hZ2VIYW5kbGVyCi1m
cm9tIGNvbnRyb2xsZXIgaW1wb3J0IERhc2hib2FyZFVwZGF0ZUhhbmRsZXIKLWZyb20gY29udHJv
bGxlciBpbXBvcnQgTWFuaWZlc3RVcGRhdGVIYW5kbGVyCi1mcm9tIGNvbnRyb2xsZXIgaW1wb3J0
IFJ1bnNDaGFydEhhbmRsZXIKLWZyb20gY29udHJvbGxlciBpbXBvcnQgUnVuc1VwZGF0ZUhhbmRs
ZXIKLWZyb20gY3JlYXRlX2hhbmRsZXIgaW1wb3J0IENyZWF0ZUhhbmRsZXIKLWZyb20gcmVwb3J0
X2hhbmRsZXIgaW1wb3J0IFJlcG9ydEhhbmRsZXIKLWZyb20gcmVwb3J0X2hhbmRsZXIgaW1wb3J0
IEFkbWluUmVwb3J0SGFuZGxlcgotZnJvbSByZXBvcnRfcHJvY2Vzc19oYW5kbGVyIGltcG9ydCBS
ZXBvcnRQcm9jZXNzSGFuZGxlcgotZnJvbSByZXBvcnRfbG9nc19oYW5kbGVyIGltcG9ydCBSZXBv
cnRMb2dzSGFuZGxlcgotCi1yb3V0ZXMgPSBbCi0gICAgKCcvYWRtaW4vcmVwb3J0Lz8nLCBBZG1p
blJlcG9ydEhhbmRsZXIpLAotICAgIChyJy9hZG1pbi9tZXJnZS10ZXN0cyg/Oi8oLiopKT8nLCBN
ZXJnZVRlc3RzSGFuZGxlciksCi0gICAgKCcvYWRtaW4vcmVwb3J0LWxvZ3MvPycsIFJlcG9ydExv
Z3NIYW5kbGVyKSwKLSAgICAoJy9hZG1pbi9jcmVhdGUvKC4qKScsIENyZWF0ZUhhbmRsZXIpLAot
ICAgICgnL2FkbWluL2NoYW5nZS12aXNpYmlsaXR5Lz8nLCBDaGFuZ2VWaXNpYmlsaXR5SGFuZGxl
ciksCi0gICAgKHInL2FkbWluLyhbQS1aYS16XC1dKiknLCBBZG1pbkRhc2hib2FyZEhhbmRsZXIp
LAotCi0gICAgKCcvYXBpL3VzZXIvaXMtYWRtaW4nLCBJc0FkbWluSGFuZGxlciksCi0gICAgKCcv
YXBpL3Rlc3QvPycsIENhY2hlZE1hbmlmZXN0SGFuZGxlciksCi0gICAgKCcvYXBpL3Rlc3QvdXBk
YXRlJywgTWFuaWZlc3RVcGRhdGVIYW5kbGVyKSwKLSAgICAoJy9hcGkvdGVzdC9yZXBvcnQvPycs
IFJlcG9ydEhhbmRsZXIpLAotICAgICgnL2FwaS90ZXN0L3JlcG9ydC9wcm9jZXNzJywgUmVwb3J0
UHJvY2Vzc0hhbmRsZXIpLAotICAgICgnL2FwaS90ZXN0L3J1bnMvPycsIENhY2hlZFJ1bnNIYW5k
bGVyKSwKLSAgICAoJy9hcGkvdGVzdC9ydW5zL3VwZGF0ZScsIFJ1bnNVcGRhdGVIYW5kbGVyKSwK
LSAgICAoJy9hcGkvdGVzdC9ydW5zL2NoYXJ0JywgUnVuc0NoYXJ0SGFuZGxlciksCi0gICAgKCcv
YXBpL3Rlc3QvZGFzaGJvYXJkLz8nLCBDYWNoZWREYXNoYm9hcmRIYW5kbGVyKSwKLSAgICAoJy9h
cGkvdGVzdC9kYXNoYm9hcmQvdXBkYXRlJywgRGFzaGJvYXJkVXBkYXRlSGFuZGxlciksCi0KLSAg
ICAoJy9pbWFnZXMvZGFzaGJvYXJkL2Zsb3QtKFxkKyktKFxkKyktKFxkKylfKFxkKykucG5nJywg
RGFzaGJvYXJkSW1hZ2VIYW5kbGVyKV0KLQotCi1kZWYgbWFpbigpOgotICAgIGFwcGxpY2F0aW9u
ID0gd2ViYXBwMi5XU0dJQXBwbGljYXRpb24ocm91dGVzLCBkZWJ1Zz1UcnVlKQotICAgIHV0aWwu
cnVuX3dzZ2lfYXBwKGFwcGxpY2F0aW9uKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6
Ci0gICAgbWFpbigpCkluZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9tb2Rl
bHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vbW9k
ZWxzLnB5CShyZXZpc2lvbiAxNDAyNTgpCisrKyBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90
LmNvbS9tb2RlbHMucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNTQwICswLDAgQEAKLSMhL3Vzci9i
aW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwot
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0j
IGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0j
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBoYXNobGliCi1pbXBvcnQg
anNvbgotaW1wb3J0IG1hdGgKLWltcG9ydCByZQotCi1mcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRl
dGltZQotZnJvbSBkYXRldGltZSBpbXBvcnQgdGltZWRlbHRhCi1mcm9tIGdvb2dsZS5hcHBlbmdp
bmUuZXh0IGltcG9ydCBkYgotZnJvbSBnb29nbGUuYXBwZW5naW5lLmFwaSBpbXBvcnQgbWVtY2Fj
aGUKLWZyb20gdGltZSBpbXBvcnQgbWt0aW1lCi0KLQotY2xhc3MgTnVtZXJpY0lkSG9sZGVyKGRi
Lk1vZGVsKToKLSAgICBvd25lciA9IGRiLlJlZmVyZW5jZVByb3BlcnR5KCkKLSAgICAjIER1bW15
IGNsYXNzIHdob3NlIHNvbGUgcHVycG9zZSBpcyB0byBnZW5lcmF0ZSBrZXkoKS5pZCgpCi0KLQot
ZGVmIGNyZWF0ZV9pbl90cmFuc2FjdGlvbl93aXRoX251bWVyaWNfaWRfaG9sZGVyKGNhbGxiYWNr
KToKLSAgICBpZF9ob2xkZXIgPSBOdW1lcmljSWRIb2xkZXIoKQotICAgIGlkX2hvbGRlci5wdXQo
KQotICAgIGlkX2hvbGRlciA9IE51bWVyaWNJZEhvbGRlci5nZXQoaWRfaG9sZGVyLmtleSgpKQot
ICAgIG93bmVyID0gTm9uZQotICAgIHRyeToKLSAgICAgICAgb3duZXIgPSBkYi5ydW5faW5fdHJh
bnNhY3Rpb24oY2FsbGJhY2ssIGlkX2hvbGRlci5rZXkoKS5pZCgpKQotICAgICAgICBpZiBvd25l
cjoKLSAgICAgICAgICAgIGlkX2hvbGRlci5vd25lciA9IG93bmVyCi0gICAgICAgICAgICBpZF9o
b2xkZXIucHV0KCkKLSAgICBmaW5hbGx5OgotICAgICAgICBpZiBub3Qgb3duZXI6Ci0gICAgICAg
ICAgICBpZF9ob2xkZXIuZGVsZXRlKCkKLSAgICByZXR1cm4gb3duZXIKLQotCi1kZWYgZGVsZXRl
X21vZGVsX3dpdGhfbnVtZXJpY19pZF9ob2xkZXIobW9kZWwpOgotICAgIGlkX2hvbGRlciA9IE51
bWVyaWNJZEhvbGRlci5nZXRfYnlfaWQobW9kZWwuaWQpCi0gICAgbW9kZWwuZGVsZXRlKCkKLSAg
ICBpZF9ob2xkZXIuZGVsZXRlKCkKLQotCi1kZWYgbW9kZWxfZnJvbV9udW1lcmljX2lkKGlkLCBl
eHBlY3RlZF9raW5kKToKLSAgICBpZF9ob2xkZXIgPSBOdW1lcmljSWRIb2xkZXIuZ2V0X2J5X2lk
KGlkKQotICAgIHJldHVybiBpZF9ob2xkZXIub3duZXIgaWYgaWRfaG9sZGVyIGFuZCBpZF9ob2xk
ZXIub3duZXIgYW5kIGlzaW5zdGFuY2UoaWRfaG9sZGVyLm93bmVyLCBleHBlY3RlZF9raW5kKSBl
bHNlIE5vbmUKLQotCi1kZWYgX2NyZWF0ZV9pZl9wb3NzaWJsZShtb2RlbCwga2V5LCBuYW1lKToK
LQotICAgIGRlZiBleGVjdXRlKGlkKToKLSAgICAgICAgaWYgbW9kZWwuZ2V0X2J5X2tleV9uYW1l
KGtleSk6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBicmFuY2ggPSBtb2RlbChp
ZD1pZCwgbmFtZT1uYW1lLCBrZXlfbmFtZT1rZXkpCi0gICAgICAgIGJyYW5jaC5wdXQoKQotICAg
ICAgICByZXR1cm4gYnJhbmNoCi0KLSAgICByZXR1cm4gY3JlYXRlX2luX3RyYW5zYWN0aW9uX3dp
dGhfbnVtZXJpY19pZF9ob2xkZXIoZXhlY3V0ZSkKLQotCi1jbGFzcyBCcmFuY2goZGIuTW9kZWwp
OgotICAgIGlkID0gZGIuSW50ZWdlclByb3BlcnR5KHJlcXVpcmVkPVRydWUpCi0gICAgbmFtZSA9
IGRiLlN0cmluZ1Byb3BlcnR5KHJlcXVpcmVkPVRydWUpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0g
ICAgZGVmIGNyZWF0ZV9pZl9wb3NzaWJsZShrZXksIG5hbWUpOgotICAgICAgICByZXR1cm4gX2Ny
ZWF0ZV9pZl9wb3NzaWJsZShCcmFuY2gsIGtleSwgbmFtZSkKLQotCi1jbGFzcyBQbGF0Zm9ybShk
Yi5Nb2RlbCk6Ci0gICAgaWQgPSBkYi5JbnRlZ2VyUHJvcGVydHkocmVxdWlyZWQ9VHJ1ZSkKLSAg
ICBuYW1lID0gZGIuU3RyaW5nUHJvcGVydHkocmVxdWlyZWQ9VHJ1ZSkKLSAgICBoaWRkZW4gPSBk
Yi5Cb29sZWFuUHJvcGVydHkoKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcmVhdGVf
aWZfcG9zc2libGUoa2V5LCBuYW1lKToKLSAgICAgICAgcmV0dXJuIF9jcmVhdGVfaWZfcG9zc2li
bGUoUGxhdGZvcm0sIGtleSwgbmFtZSkKLQotCi1jbGFzcyBCdWlsZGVyKGRiLk1vZGVsKToKLSAg
ICBuYW1lID0gZGIuU3RyaW5nUHJvcGVydHkocmVxdWlyZWQ9VHJ1ZSkKLSAgICBwYXNzd29yZCA9
IGRiLlN0cmluZ1Byb3BlcnR5KHJlcXVpcmVkPVRydWUpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0g
ICAgZGVmIGNyZWF0ZShuYW1lLCByYXdfcGFzc3dvcmQpOgotICAgICAgICByZXR1cm4gQnVpbGRl
cihuYW1lPW5hbWUsIHBhc3N3b3JkPUJ1aWxkZXIuX2hhc2hlZF9wYXNzd29yZChyYXdfcGFzc3dv
cmQpLCBrZXlfbmFtZT1uYW1lKS5wdXQoKQotCi0gICAgZGVmIHVwZGF0ZV9wYXNzd29yZChzZWxm
LCByYXdfcGFzc3dvcmQpOgotICAgICAgICBzZWxmLnBhc3N3b3JkID0gQnVpbGRlci5faGFzaGVk
X3Bhc3N3b3JkKHJhd19wYXNzd29yZCkKLSAgICAgICAgc2VsZi5wdXQoKQotCi0gICAgZGVmIGF1
dGhlbnRpY2F0ZShzZWxmLCByYXdfcGFzc3dvcmQpOgotICAgICAgICByZXR1cm4gc2VsZi5wYXNz
d29yZCA9PSBoYXNobGliLnNoYTI1NihyYXdfcGFzc3dvcmQpLmhleGRpZ2VzdCgpCi0KLSAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIF9oYXNoZWRfcGFzc3dvcmQocmF3X3Bhc3N3b3JkKToKLSAg
ICAgICAgcmV0dXJuIGhhc2hsaWIuc2hhMjU2KHJhd19wYXNzd29yZCkuaGV4ZGlnZXN0KCkKLQot
Ci1jbGFzcyBCdWlsZChkYi5Nb2RlbCk6Ci0gICAgYnJhbmNoID0gZGIuUmVmZXJlbmNlUHJvcGVy
dHkoQnJhbmNoLCByZXF1aXJlZD1UcnVlLCBjb2xsZWN0aW9uX25hbWU9J2J1aWxkX2JyYW5jaCcp
Ci0gICAgcGxhdGZvcm0gPSBkYi5SZWZlcmVuY2VQcm9wZXJ0eShQbGF0Zm9ybSwgcmVxdWlyZWQ9
VHJ1ZSwgY29sbGVjdGlvbl9uYW1lPSdidWlsZF9wbGF0Zm9ybScpCi0gICAgYnVpbGRlciA9IGRi
LlJlZmVyZW5jZVByb3BlcnR5KEJ1aWxkZXIsIHJlcXVpcmVkPVRydWUsIGNvbGxlY3Rpb25fbmFt
ZT0nYnVpbGRlcl9rZXknKQotICAgIGJ1aWxkTnVtYmVyID0gZGIuSW50ZWdlclByb3BlcnR5KHJl
cXVpcmVkPVRydWUpCi0gICAgcmV2aXNpb24gPSBkYi5JbnRlZ2VyUHJvcGVydHkocmVxdWlyZWQ9
VHJ1ZSkKLSAgICBjaHJvbWl1bVJldmlzaW9uID0gZGIuSW50ZWdlclByb3BlcnR5KCkKLSAgICB0
aW1lc3RhbXAgPSBkYi5EYXRlVGltZVByb3BlcnR5KHJlcXVpcmVkPVRydWUpCi0KLSAgICBAc3Rh
dGljbWV0aG9kCi0gICAgZGVmIGdldF9vcl9pbnNlcnRfZnJvbV9sb2cobG9nKToKLSAgICAgICAg
YnVpbGRlciA9IGxvZy5idWlsZGVyKCkKLSAgICAgICAga2V5X25hbWUgPSBidWlsZGVyLm5hbWUg
KyAnOicgKyBzdHIoaW50KG1rdGltZShsb2cudGltZXN0YW1wKCkudGltZXR1cGxlKCkpKSkKLQot
ICAgICAgICByZXR1cm4gQnVpbGQuZ2V0X29yX2luc2VydChrZXlfbmFtZSwgYnJhbmNoPWxvZy5i
cmFuY2goKSwgcGxhdGZvcm09bG9nLnBsYXRmb3JtKCksIGJ1aWxkZXI9YnVpbGRlciwKLSAgICAg
ICAgICAgIGJ1aWxkTnVtYmVyPWxvZy5idWlsZF9udW1iZXIoKSwgdGltZXN0YW1wPWxvZy50aW1l
c3RhbXAoKSwKLSAgICAgICAgICAgIHJldmlzaW9uPWxvZy53ZWJraXRfcmV2aXNpb24oKSwgY2hy
b21pdW1SZXZpc2lvbj1sb2cuY2hyb21pdW1fcmV2aXNpb24oKSkKLQotCi1jbGFzcyBUZXN0KGRi
Lk1vZGVsKToKLSAgICBpZCA9IGRiLkludGVnZXJQcm9wZXJ0eShyZXF1aXJlZD1UcnVlKQotICAg
IG5hbWUgPSBkYi5TdHJpbmdQcm9wZXJ0eShyZXF1aXJlZD1UcnVlKQotICAgICMgRklYTUU6IFN0
b3JpbmcgYnJhbmNoZXMgYW5kIHBsYXRmb3JtcyBzZXBhcmF0ZWx5IGlzIGZsYXdlZCBzaW5jZSBh
IHRlc3QgbWF5YmUgYXZhaWxhYmxlIG9uCi0gICAgIyBvbmUgcGxhdGZvcm0gYnV0IG9ubHkgb24g
c29tZSBicmFuY2ggYW5kIHZpY2UgdmVyc2EuCi0gICAgYnJhbmNoZXMgPSBkYi5MaXN0UHJvcGVy
dHkoZGIuS2V5KQotICAgIHBsYXRmb3JtcyA9IGRiLkxpc3RQcm9wZXJ0eShkYi5LZXkpCi0gICAg
dW5pdCA9IGRiLlN0cmluZ1Byb3BlcnR5KCkKLSAgICBoaWRkZW4gPSBkYi5Cb29sZWFuUHJvcGVy
dHkoKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiB1cGRhdGVfb3JfaW5zZXJ0KHRlc3Rf
bmFtZSwgYnJhbmNoLCBwbGF0Zm9ybSwgdW5pdD1Ob25lKToKLSAgICAgICAgZXhpc3RpbmdfdGVz
dCA9IFtOb25lXQotCi0gICAgICAgIGRlZiBleGVjdXRlKGlkKToKLSAgICAgICAgICAgIHRlc3Qg
PSBUZXN0LmdldF9ieV9rZXlfbmFtZSh0ZXN0X25hbWUpCi0gICAgICAgICAgICBpZiB0ZXN0Ogot
ICAgICAgICAgICAgICAgIGlmIGJyYW5jaC5rZXkoKSBub3QgaW4gdGVzdC5icmFuY2hlczoKLSAg
ICAgICAgICAgICAgICAgICAgdGVzdC5icmFuY2hlcy5hcHBlbmQoYnJhbmNoLmtleSgpKQotICAg
ICAgICAgICAgICAgIGlmIHBsYXRmb3JtLmtleSgpIG5vdCBpbiB0ZXN0LnBsYXRmb3JtczoKLSAg
ICAgICAgICAgICAgICAgICAgdGVzdC5wbGF0Zm9ybXMuYXBwZW5kKHBsYXRmb3JtLmtleSgpKQot
ICAgICAgICAgICAgICAgIHRlc3QudW5pdCA9IHVuaXQKLSAgICAgICAgICAgICAgICB0ZXN0LnB1
dCgpCi0gICAgICAgICAgICAgICAgZXhpc3RpbmdfdGVzdFswXSA9IHRlc3QKLSAgICAgICAgICAg
ICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgICAgICB0ZXN0ID0gVGVzdChpZD1pZCwgbmFtZT10
ZXN0X25hbWUsIGtleV9uYW1lPXRlc3RfbmFtZSwgdW5pdD11bml0LCBicmFuY2hlcz1bYnJhbmNo
LmtleSgpXSwgcGxhdGZvcm1zPVtwbGF0Zm9ybS5rZXkoKV0pCi0gICAgICAgICAgICB0ZXN0LnB1
dCgpCi0gICAgICAgICAgICByZXR1cm4gdGVzdAotCi0gICAgICAgIHJldHVybiBjcmVhdGVfaW5f
dHJhbnNhY3Rpb25fd2l0aF9udW1lcmljX2lkX2hvbGRlcihleGVjdXRlKSBvciBleGlzdGluZ190
ZXN0WzBdCi0KLSAgICBkZWYgbWVyZ2Uoc2VsZiwgb3RoZXIpOgotICAgICAgICBhc3NlcnQgc2Vs
Zi5rZXkoKSAhPSBvdGhlci5rZXkoKQotCi0gICAgICAgIG1lcmdlZF9yZXN1bHRzID0gVGVzdFJl
c3VsdC5hbGwoKQotICAgICAgICBtZXJnZWRfcmVzdWx0cy5maWx0ZXIoJ25hbWUgPScsIG90aGVy
Lm5hbWUpCi0KLSAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGJlIGRvaW5nIHRoaXMgY2hlY2sg
aW4gYSB0cmFuc2FjdGlvbiBidXQgb25seSBhbmNlc3RvciBxdWVyaWVzIGFyZSBhbGxvd2VkCi0g
ICAgICAgIGZvciByZXN1bHQgaW4gbWVyZ2VkX3Jlc3VsdHM6Ci0gICAgICAgICAgICBpZiBUZXN0
UmVzdWx0LmdldF9ieV9rZXlfbmFtZShUZXN0UmVzdWx0LmtleV9uYW1lKHJlc3VsdC5idWlsZCwg
c2VsZi5uYW1lKSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICBicmFu
Y2hlc19hbmRfcGxhdGZvcm1zX3RvX3VwZGF0ZSA9IHNldCgpCi0gICAgICAgIGZvciByZXN1bHQg
aW4gbWVyZ2VkX3Jlc3VsdHM6Ci0gICAgICAgICAgICBicmFuY2hlc19hbmRfcGxhdGZvcm1zX3Rv
X3VwZGF0ZS5hZGQoKHJlc3VsdC5idWlsZC5icmFuY2guaWQsIHJlc3VsdC5idWlsZC5wbGF0Zm9y
bS5pZCkpCi0gICAgICAgICAgICByZXN1bHQucmVwbGFjZV90b19jaGFuZ2VfdGVzdF9uYW1lKHNl
bGYubmFtZSkKLQotICAgICAgICBkZWxldGVfbW9kZWxfd2l0aF9udW1lcmljX2lkX2hvbGRlcihv
dGhlcikKLQotICAgICAgICByZXR1cm4gYnJhbmNoZXNfYW5kX3BsYXRmb3Jtc190b191cGRhdGUK
LQotCi1jbGFzcyBUZXN0UmVzdWx0KGRiLk1vZGVsKToKLSAgICBuYW1lID0gZGIuU3RyaW5nUHJv
cGVydHkocmVxdWlyZWQ9VHJ1ZSkKLSAgICBidWlsZCA9IGRiLlJlZmVyZW5jZVByb3BlcnR5KEJ1
aWxkLCByZXF1aXJlZD1UcnVlKQotICAgIHZhbHVlID0gZGIuRmxvYXRQcm9wZXJ0eShyZXF1aXJl
ZD1UcnVlKQotICAgIHZhbHVlTWVkaWFuID0gZGIuRmxvYXRQcm9wZXJ0eSgpCi0gICAgdmFsdWVT
dGRldiA9IGRiLkZsb2F0UHJvcGVydHkoKQotICAgIHZhbHVlTWluID0gZGIuRmxvYXRQcm9wZXJ0
eSgpCi0gICAgdmFsdWVNYXggPSBkYi5GbG9hdFByb3BlcnR5KCkKLSAgICB2YWx1ZXMgPSBkYi5M
aXN0UHJvcGVydHkoZmxvYXQpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGtleV9uYW1l
KGJ1aWxkLCB0ZXN0X25hbWUpOgotICAgICAgICByZXR1cm4gYnVpbGQua2V5KCkubmFtZSgpICsg
JzonICsgdGVzdF9uYW1lCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZ2V0X29yX2luc2Vy
dF9mcm9tX3BhcnNlZF9qc29uKGNscywgdGVzdF9uYW1lLCBidWlsZCwgcmVzdWx0KToKLSAgICAg
ICAga2V5X25hbWUgPSBjbHMua2V5X25hbWUoYnVpbGQsIHRlc3RfbmFtZSkKLQotICAgICAgICBk
ZWYgX2Zsb2F0X29yX25vbmUoZGljdGlvbmFyeSwga2V5KToKLSAgICAgICAgICAgIHZhbHVlID0g
ZGljdGlvbmFyeS5nZXQoa2V5KQotICAgICAgICAgICAgaWYgdmFsdWU6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZsb2F0KHZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAg
ICBpZiBub3QgaXNpbnN0YW5jZShyZXN1bHQsIGRpY3QpOgotICAgICAgICAgICAgcmV0dXJuIGNs
cy5nZXRfb3JfaW5zZXJ0KGtleV9uYW1lLCBuYW1lPXRlc3RfbmFtZSwgYnVpbGQ9YnVpbGQsIHZh
bHVlPWZsb2F0KHJlc3VsdCkpCi0KLSAgICAgICAgcmV0dXJuIGNscy5nZXRfb3JfaW5zZXJ0KGtl
eV9uYW1lLCBuYW1lPXRlc3RfbmFtZSwgYnVpbGQ9YnVpbGQsIHZhbHVlPWZsb2F0KHJlc3VsdFsn
YXZnJ10pLAotICAgICAgICAgICAgdmFsdWVNZWRpYW49X2Zsb2F0X29yX25vbmUocmVzdWx0LCAn
bWVkaWFuJyksIHZhbHVlU3RkZXY9X2Zsb2F0X29yX25vbmUocmVzdWx0LCAnc3RkZXYnKSwKLSAg
ICAgICAgICAgIHZhbHVlTWluPV9mbG9hdF9vcl9ub25lKHJlc3VsdCwgJ21pbicpLCB2YWx1ZU1h
eD1fZmxvYXRfb3Jfbm9uZShyZXN1bHQsICdtYXgnKSwKLSAgICAgICAgICAgIHZhbHVlcz1yZXN1
bHQuZ2V0KCd2YWx1ZXMnLCBbXSkpCi0KLSAgICBkZWYgcmVwbGFjZV90b19jaGFuZ2VfdGVzdF9u
YW1lKHNlbGYsIG5ld19uYW1lKToKLSAgICAgICAgY2xvbmUgPSBUZXN0UmVzdWx0KGtleV9uYW1l
PVRlc3RSZXN1bHQua2V5X25hbWUoc2VsZi5idWlsZCwgbmV3X25hbWUpLCBuYW1lPW5ld19uYW1l
LCBidWlsZD1zZWxmLmJ1aWxkLAotICAgICAgICAgICAgdmFsdWU9c2VsZi52YWx1ZSwgdmFsdWVN
ZWRpYW49c2VsZi52YWx1ZU1lZGlhbiwgdmFsdWVTdGRldj1zZWxmLnZhbHVlTWluLCB2YWx1ZU1p
bj1zZWxmLnZhbHVlTWluLCB2YWx1ZU1heD1zZWxmLnZhbHVlTWF4KQotICAgICAgICBjbG9uZS5w
dXQoKQotICAgICAgICBzZWxmLmRlbGV0ZSgpCi0gICAgICAgIHJldHVybiBjbG9uZQotCi0KLWNs
YXNzIFJlcG9ydExvZyhkYi5Nb2RlbCk6Ci0gICAgdGltZXN0YW1wID0gZGIuRGF0ZVRpbWVQcm9w
ZXJ0eShyZXF1aXJlZD1UcnVlKQotICAgIGhlYWRlcnMgPSBkYi5UZXh0UHJvcGVydHkoKQotICAg
IHBheWxvYWQgPSBkYi5UZXh0UHJvcGVydHkoKQotICAgIGNvbW1pdCA9IGRiLkJvb2xlYW5Qcm9w
ZXJ0eSgpCi0KLSAgICBkZWYgX3BhcnNlZF9wYXlsb2FkKHNlbGYpOgotICAgICAgICBpZiBzZWxm
Ll9fZGljdF9fLmdldCgnX3BhcnNlZCcpID09IE5vbmU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAg
ICAgICAgICAgICAgc2VsZi5fcGFyc2VkID0ganNvbi5sb2FkcyhzZWxmLnBheWxvYWQpCi0gICAg
ICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZWQg
PSBGYWxzZQotICAgICAgICByZXR1cm4gc2VsZi5fcGFyc2VkCi0KLSAgICBkZWYgZ2V0X3ZhbHVl
KHNlbGYsIGtleU5hbWUpOgotICAgICAgICBwYXJzZWQgPSBzZWxmLl9wYXJzZWRfcGF5bG9hZCgp
Ci0gICAgICAgIGlmIG5vdCBwYXJzZWQ6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAg
ICBpZiBpc2luc3RhbmNlKHBhcnNlZCwgbGlzdCk6Ci0gICAgICAgICAgICBwYXJzZWQgPSBwYXJz
ZWRbMF0KLSAgICAgICAgcmV0dXJuIHBhcnNlZC5nZXQoa2V5TmFtZSkKLQotICAgIGRlZiByZXN1
bHRzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRfdmFsdWUoJ3Jlc3VsdHMnKQotCi0g
ICAgZGVmIHJlc3VsdHNfYXJlX3dlbGxfZm9ybWVkKHNlbGYpOgotCi0gICAgICAgIGRlZiBfaXNf
ZmxvYXRfY29udmVydGlibGUodmFsdWUpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAg
ICAgIGZsb2F0KHZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgICAg
ICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAg
ICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0K
LSAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLl9wYXJzZWRfcGF5bG9hZCgpLCBsaXN0KSBhbmQg
bGVuKHNlbGYuX3BhcnNlZF9wYXlsb2FkKCkpICE9IDE6Ci0gICAgICAgICAgICByZXR1cm4gRmFs
c2UKLQotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLnJlc3VsdHMoKSwgZGljdCk6Ci0g
ICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBmb3IgdGVzdFJlc3VsdCBpbiBzZWxm
LnJlc3VsdHMoKS52YWx1ZXMoKToKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGVzdFJlc3Vs
dCwgZGljdCk6Ci0gICAgICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gdGVzdFJlc3VsdC5p
dGVyaXRlbXMoKToKLSAgICAgICAgICAgICAgICAgICAgaWYga2V5ID09ICJ2YWx1ZXMiOgotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIGl0ZW0gaW4gdmFsdWU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
bm90IF9pc19mbG9hdF9jb252ZXJ0aWJsZShpdGVtKToKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICAgICAgICAgIGVsaWYga2V5ICE9ICJ1
bml0IiBhbmQgbm90IF9pc19mbG9hdF9jb252ZXJ0aWJsZSh2YWx1ZSk6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgICAgICAgICBpZiAnYXZnJyBub3QgaW4g
dGVzdFJlc3VsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAg
ICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIG5vdCBfaXNfZmxvYXRfY29udmVydGlibGUo
dGVzdFJlc3VsdCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgcmV0
dXJuIFRydWUKLQotICAgIGRlZiBidWlsZGVyKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5f
bW9kZWxfYnlfa2V5X25hbWVfaW5fcGF5bG9hZChCdWlsZGVyLCAnYnVpbGRlci1uYW1lJykKLQot
ICAgIGRlZiBicmFuY2goc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9tb2RlbF9ieV9rZXlf
bmFtZV9pbl9wYXlsb2FkKEJyYW5jaCwgJ2JyYW5jaCcpCi0KLSAgICBkZWYgcGxhdGZvcm0oc2Vs
Zik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9tb2RlbF9ieV9rZXlfbmFtZV9pbl9wYXlsb2FkKFBs
YXRmb3JtLCAncGxhdGZvcm0nKQotCi0gICAgZGVmIGJ1aWxkX251bWJlcihzZWxmKToKLSAgICAg
ICAgcmV0dXJuIHNlbGYuX2ludGVnZXJfaW5fcGF5bG9hZCgnYnVpbGQtbnVtYmVyJykKLQotICAg
IGRlZiB3ZWJraXRfcmV2aXNpb24oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9pbnRlZ2Vy
X2luX3BheWxvYWQoJ3dlYmtpdC1yZXZpc2lvbicpCi0KLSAgICBkZWYgY2hyb21pdW1fcmV2aXNp
b24oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9pbnRlZ2VyX2luX3BheWxvYWQoJ2Nocm9t
aXVtLXJldmlzaW9uJykKLQotICAgIGRlZiBfbW9kZWxfYnlfa2V5X25hbWVfaW5fcGF5bG9hZChz
ZWxmLCBtb2RlbCwga2V5TmFtZSk6Ci0gICAgICAgIGtleSA9IHNlbGYuZ2V0X3ZhbHVlKGtleU5h
bWUpCi0gICAgICAgIGlmIG5vdCBrZXk6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAg
ICByZXR1cm4gbW9kZWwuZ2V0X2J5X2tleV9uYW1lKGtleSkKLQotICAgIGRlZiBfaW50ZWdlcl9p
bl9wYXlsb2FkKHNlbGYsIGtleU5hbWUpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1
cm4gaW50KHNlbGYuZ2V0X3ZhbHVlKGtleU5hbWUpKQotICAgICAgICBleGNlcHQgVHlwZUVycm9y
OgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0g
ICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgIyBGSVhNRTogV2UgYWxzbyBoYXZlIHRpbWVz
dGFtcCBhcyBhIG1lbWJlciB2YXJpYWJsZS4KLSAgICBkZWYgdGltZXN0YW1wKHNlbGYpOgotICAg
ICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChzZWxm
Ll9pbnRlZ2VyX2luX3BheWxvYWQoJ3RpbWVzdGFtcCcpKQotICAgICAgICBleGNlcHQgVHlwZUVy
cm9yOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6
Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0KLWNsYXNzIFBlcnNpc3RlbnRDYWNoZShkYi5N
b2RlbCk6Ci0gICAgdmFsdWUgPSBkYi5UZXh0UHJvcGVydHkocmVxdWlyZWQ9VHJ1ZSkKLQotICAg
IEBzdGF0aWNtZXRob2QKLSAgICBkZWYgc2V0X2NhY2hlKG5hbWUsIHZhbHVlKToKLSAgICAgICAg
bWVtY2FjaGUuc2V0KG5hbWUsIHZhbHVlKQotICAgICAgICBQZXJzaXN0ZW50Q2FjaGUoa2V5X25h
bWU9bmFtZSwgdmFsdWU9dmFsdWUpLnB1dCgpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVm
IGdldF9jYWNoZShuYW1lKToKLSAgICAgICAgdmFsdWUgPSBtZW1jYWNoZS5nZXQobmFtZSkKLSAg
ICAgICAgaWYgdmFsdWU6Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUKLSAgICAgICAgY2FjaGUg
PSBQZXJzaXN0ZW50Q2FjaGUuZ2V0X2J5X2tleV9uYW1lKG5hbWUpCi0gICAgICAgIGlmIG5vdCBj
YWNoZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIG1lbWNhY2hlLnNldChuYW1l
LCBjYWNoZS52YWx1ZSkKLSAgICAgICAgcmV0dXJuIGNhY2hlLnZhbHVlCi0KLQotY2xhc3MgUnVu
cyhkYi5Nb2RlbCk6Ci0gICAgYnJhbmNoID0gZGIuUmVmZXJlbmNlUHJvcGVydHkoQnJhbmNoLCBy
ZXF1aXJlZD1UcnVlLCBjb2xsZWN0aW9uX25hbWU9J3J1bnNfYnJhbmNoJykKLSAgICBwbGF0Zm9y
bSA9IGRiLlJlZmVyZW5jZVByb3BlcnR5KFBsYXRmb3JtLCByZXF1aXJlZD1UcnVlLCBjb2xsZWN0
aW9uX25hbWU9J3J1bnNfcGxhdGZvcm0nKQotICAgIHRlc3QgPSBkYi5SZWZlcmVuY2VQcm9wZXJ0
eShUZXN0LCByZXF1aXJlZD1UcnVlLCBjb2xsZWN0aW9uX25hbWU9J3J1bnNfdGVzdCcpCi0gICAg
anNvbl9ydW5zID0gZGIuVGV4dFByb3BlcnR5KCkKLSAgICBqc29uX2F2ZXJhZ2VzID0gZGIuVGV4
dFByb3BlcnR5KCkKLSAgICBqc29uX21pbiA9IGRiLkZsb2F0UHJvcGVydHkoKQotICAgIGpzb25f
bWF4ID0gZGIuRmxvYXRQcm9wZXJ0eSgpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9n
ZW5lcmF0ZV9ydW5zKGJyYW5jaCwgcGxhdGZvcm0sIHRlc3RfbmFtZSk6Ci0gICAgICAgIGJ1aWxk
cyA9IEJ1aWxkLmFsbCgpCi0gICAgICAgIGJ1aWxkcy5maWx0ZXIoJ2JyYW5jaCA9JywgYnJhbmNo
KQotICAgICAgICBidWlsZHMuZmlsdGVyKCdwbGF0Zm9ybSA9JywgcGxhdGZvcm0pCi0KLSAgICAg
ICAgZm9yIGJ1aWxkIGluIGJ1aWxkczoKLSAgICAgICAgICAgIHJlc3VsdHMgPSBUZXN0UmVzdWx0
LmFsbCgpCi0gICAgICAgICAgICByZXN1bHRzLmZpbHRlcignbmFtZSA9JywgdGVzdF9uYW1lKQot
ICAgICAgICAgICAgcmVzdWx0cy5maWx0ZXIoJ2J1aWxkID0nLCBidWlsZCkKLSAgICAgICAgICAg
IGZvciByZXN1bHQgaW4gcmVzdWx0czoKLSAgICAgICAgICAgICAgICB5aWVsZCBidWlsZCwgcmVz
dWx0Ci0gICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLQotICAgIEBzdGF0aWNtZXRob2QKLSAg
ICBkZWYgX2VudHJ5X2Zyb21fYnVpbGRfYW5kX3Jlc3VsdChidWlsZCwgcmVzdWx0KToKLSAgICAg
ICAgYnVpbGRlcl9pZCA9IGJ1aWxkLmJ1aWxkZXIua2V5KCkuaWQoKQotICAgICAgICB0aW1lc3Rh
bXAgPSBta3RpbWUoYnVpbGQudGltZXN0YW1wLnRpbWV0dXBsZSgpKQotICAgICAgICBzdGF0aXN0
aWNzID0gTm9uZQotICAgICAgICBzdXBwbGVtZW50YXJ5X3JldmlzaW9ucyA9IE5vbmUKLQotICAg
ICAgICBpZiByZXN1bHQudmFsdWVTdGRldiAhPSBOb25lIGFuZCByZXN1bHQudmFsdWVNaW4gIT0g
Tm9uZSBhbmQgcmVzdWx0LnZhbHVlTWF4ICE9IE5vbmU6Ci0gICAgICAgICAgICBzdGF0aXN0aWNz
ID0geydzdGRldic6IHJlc3VsdC52YWx1ZVN0ZGV2LCAnbWluJzogcmVzdWx0LnZhbHVlTWluLCAn
bWF4JzogcmVzdWx0LnZhbHVlTWF4fQotCi0gICAgICAgIGlmIGJ1aWxkLmNocm9taXVtUmV2aXNp
b24gIT0gTm9uZToKLSAgICAgICAgICAgIHN1cHBsZW1lbnRhcnlfcmV2aXNpb25zID0geydDaHJv
bWl1bSc6IGJ1aWxkLmNocm9taXVtUmV2aXNpb259Ci0KLSAgICAgICAgcmV0dXJuIFtyZXN1bHQu
a2V5KCkuaWQoKSwKLSAgICAgICAgICAgIFtidWlsZC5rZXkoKS5pZCgpLCBidWlsZC5idWlsZE51
bWJlciwgYnVpbGQucmV2aXNpb24sIHN1cHBsZW1lbnRhcnlfcmV2aXNpb25zXSwKLSAgICAgICAg
ICAgIHRpbWVzdGFtcCwgcmVzdWx0LnZhbHVlLCAwLCAgIyBydW5OdW1iZXIKLSAgICAgICAgICAg
IFtdLCAgIyBhbm5vdGF0aW9ucwotICAgICAgICAgICAgYnVpbGRlcl9pZCwgc3RhdGlzdGljc10K
LQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgX3RpbWVzdGFtcF9hbmRfdmFsdWVfZnJvbV9q
c29uX2VudHJ5KGpzb25fZW50cnkpOgotICAgICAgICByZXR1cm4ganNvbl9lbnRyeVsyXSwganNv
bl9lbnRyeVszXQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfa2V5X25hbWUoYnJhbmNo
X2lkLCBwbGF0Zm9ybV9pZCwgdGVzdF9pZCk6Ci0gICAgICAgIHJldHVybiAncnVuczolZCwlZCwl
ZCcgJSAodGVzdF9pZCwgYnJhbmNoX2lkLCBwbGF0Zm9ybV9pZCkKLQotICAgIEBjbGFzc21ldGhv
ZAotICAgIGRlZiB1cGRhdGVfb3JfaW5zZXJ0KGNscywgYnJhbmNoLCBwbGF0Zm9ybSwgdGVzdCk6
Ci0gICAgICAgIGtleV9uYW1lID0gY2xzLl9rZXlfbmFtZShicmFuY2guaWQsIHBsYXRmb3JtLmlk
LCB0ZXN0LmlkKQotICAgICAgICBydW5zID0gUnVucyhrZXlfbmFtZT1rZXlfbmFtZSwgYnJhbmNo
PWJyYW5jaCwgcGxhdGZvcm09cGxhdGZvcm0sIHRlc3Q9dGVzdCwganNvbl9ydW5zPScnLCBqc29u
X2F2ZXJhZ2VzPScnKQotCi0gICAgICAgIGZvciBidWlsZCwgcmVzdWx0IGluIGNscy5fZ2VuZXJh
dGVfcnVucyhicmFuY2gsIHBsYXRmb3JtLCB0ZXN0Lm5hbWUpOgotICAgICAgICAgICAgcnVucy51
cGRhdGVfaW5jcmVtZW50YWxseShidWlsZCwgcmVzdWx0LCBjaGVja19kdXBsaWNhdGVzX2FuZF9z
YXZlPUZhbHNlKQotCi0gICAgICAgIHJ1bnMucHV0KCkKLSAgICAgICAgbWVtY2FjaGUuc2V0KGtl
eV9uYW1lLCBydW5zLnRvX2pzb24oKSkKLSAgICAgICAgcmV0dXJuIHJ1bnMKLQotICAgIGRlZiB1
cGRhdGVfaW5jcmVtZW50YWxseShzZWxmLCBidWlsZCwgcmVzdWx0LCBjaGVja19kdXBsaWNhdGVz
X2FuZF9zYXZlPVRydWUpOgotICAgICAgICBuZXdfZW50cnkgPSBSdW5zLl9lbnRyeV9mcm9tX2J1
aWxkX2FuZF9yZXN1bHQoYnVpbGQsIHJlc3VsdCkKLQotICAgICAgICAjIENoZWNrIGZvciBkdXBs
aWNhdGUgZW50cmllcwotICAgICAgICBpZiBjaGVja19kdXBsaWNhdGVzX2FuZF9zYXZlOgotICAg
ICAgICAgICAgcmV2aXNpb25faXNfaW5fcnVucyA9IHN0cihidWlsZC5yZXZpc2lvbikgaW4ganNv
bi5sb2FkcygneycgKyBzZWxmLmpzb25fYXZlcmFnZXMgKyAnfScpCi0gICAgICAgICAgICBpZiBy
ZXZpc2lvbl9pc19pbl9ydW5zIGFuZCBuZXdfZW50cnlbMV0gaW4gW2VudHJ5WzFdIGZvciBlbnRy
eSBpbiBqc29uLmxvYWRzKCdbJyArIHNlbGYuanNvbl9ydW5zICsgJ10nKV06Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuCi0KLSAgICAgICAgaWYgc2VsZi5qc29uX3J1bnM6Ci0gICAgICAgICAgICBz
ZWxmLmpzb25fcnVucyArPSAnLCcKLQotICAgICAgICBpZiBzZWxmLmpzb25fYXZlcmFnZXM6Ci0g
ICAgICAgICAgICBzZWxmLmpzb25fYXZlcmFnZXMgKz0gJywnCi0KLSAgICAgICAgc2VsZi5qc29u
X3J1bnMgPSAoc2VsZi5qc29uX3J1bnMgKyBqc29uLmR1bXBzKG5ld19lbnRyeSkpLnJlcGxhY2Uo
JywgJywgJywnKQotICAgICAgICAjIEZJWE1FOiBDYWxjdWxhdGUgdGhlIGF2ZXJhZ2UuIEluIHBy
YWN0aWNlLCB3ZSB3b3VsZG4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgdmFsdWUgZm9yIGEgZ2l2ZW4g
cmV2aXNpb24uCi0gICAgICAgIHNlbGYuanNvbl9hdmVyYWdlcyA9IChzZWxmLmpzb25fYXZlcmFn
ZXMgKyAnIiVkIjolZicgJSAoYnVpbGQucmV2aXNpb24sIHJlc3VsdC52YWx1ZSkpLnJlcGxhY2Uo
JywgJywgJywnKQotICAgICAgICBzZWxmLmpzb25fbWluID0gbWluKHNlbGYuanNvbl9taW4sIHJl
c3VsdC52YWx1ZSkgaWYgc2VsZi5qc29uX21pbiAhPSBOb25lIGVsc2UgcmVzdWx0LnZhbHVlCi0g
ICAgICAgIHNlbGYuanNvbl9tYXggPSBtYXgoc2VsZi5qc29uX21heCwgcmVzdWx0LnZhbHVlKQot
Ci0gICAgICAgIGlmIGNoZWNrX2R1cGxpY2F0ZXNfYW5kX3NhdmU6Ci0gICAgICAgICAgICBzZWxm
LnB1dCgpCi0gICAgICAgICAgICBtZW1jYWNoZS5zZXQoc2VsZi5rZXkoKS5uYW1lKCksIHNlbGYu
dG9fanNvbigpKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBnZXRfYnlfb2JqZWN0cyhi
cmFuY2gsIHBsYXRmb3JtLCB0ZXN0KToKLSAgICAgICAgcmV0dXJuIFJ1bnMuZ2V0X2J5X2tleV9u
YW1lKFJ1bnMuX2tleV9uYW1lKGJyYW5jaC5pZCwgcGxhdGZvcm0uaWQsIHRlc3QuaWQpKQotCi0g
ICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGpzb25fYnlfaWRzKGNscywgYnJhbmNoX2lkLCBwbGF0
Zm9ybV9pZCwgdGVzdF9pZCk6Ci0gICAgICAgIGtleV9uYW1lID0gY2xzLl9rZXlfbmFtZShicmFu
Y2hfaWQsIHBsYXRmb3JtX2lkLCB0ZXN0X2lkKQotICAgICAgICBydW5zX2pzb24gPSBtZW1jYWNo
ZS5nZXQoa2V5X25hbWUpCi0gICAgICAgIGlmIG5vdCBydW5zX2pzb246Ci0gICAgICAgICAgICBy
dW5zID0gY2xzLmdldF9ieV9rZXlfbmFtZShrZXlfbmFtZSkKLSAgICAgICAgICAgIGlmIG5vdCBy
dW5zOgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICBydW5zX2pzb24g
PSBydW5zLnRvX2pzb24oKQotICAgICAgICAgICAgbWVtY2FjaGUuc2V0KGtleV9uYW1lLCBydW5z
X2pzb24pCi0gICAgICAgIHJldHVybiBydW5zX2pzb24KLQotICAgIGRlZiB0b19qc29uKHNlbGYp
OgotICAgICAgICAjIGRhdGVfcmFuZ2UgaXMgbmV2ZXIgdXNlZCBieSBjb21tb24uanMuCi0gICAg
ICAgIHJldHVybiAneyJ0ZXN0X3J1bnMiOiBbJXNdLCAiYXZlcmFnZXMiOiB7JXN9LCAibWluIjog
JXMsICJtYXgiOiAlcywgInVuaXQiOiAlcywgImRhdGVfcmFuZ2UiOiBudWxsLCAic3RhdCI6ICJv
ayJ9JyAlIChzZWxmLmpzb25fcnVucywKLSAgICAgICAgICAgIHNlbGYuanNvbl9hdmVyYWdlcywg
c3RyKHNlbGYuanNvbl9taW4pIGlmIHNlbGYuanNvbl9taW4gZWxzZSAnbnVsbCcsIHN0cihzZWxm
Lmpzb25fbWF4KSBpZiBzZWxmLmpzb25fbWF4IGVsc2UgJ251bGwnLAotICAgICAgICAgICAgJyIl
cyInICUgc2VsZi50ZXN0LnVuaXQgaWYgc2VsZi50ZXN0LnVuaXQgZWxzZSAnbnVsbCcpCi0KLSAg
ICBkZWYgY2hhcnRfcGFyYW1zKHNlbGYsIGRpc3BsYXlfZGF5cyk6Ci0gICAgICAgIGNoYXJ0X2Rh
dGFfeCA9IFtdCi0gICAgICAgIGNoYXJ0X2RhdGFfeSA9IFtdCi0gICAgICAgIHRpbWVzdGFtcF9m
cm9tX2VudHJ5ID0gbGFtYmRhIGVudHJ5OiBSdW5zLl90aW1lc3RhbXBfYW5kX3ZhbHVlX2Zyb21f
anNvbl9lbnRyeShlbnRyeSlbMF0KLSAgICAgICAgcnVucyA9IHNvcnRlZChqc29uLmxvYWRzKCdb
JyArIHNlbGYuanNvbl9ydW5zICsgJ10nKSwgbGFtYmRhIGEsIGI6IGludCh0aW1lc3RhbXBfZnJv
bV9lbnRyeShhKSAtIHRpbWVzdGFtcF9mcm9tX2VudHJ5KGIpKSkKLSAgICAgICAgaWYgbm90IHJ1
bnM6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgIGVuZF90aW1lc3RhbXAgPSB0
aW1lc3RhbXBfZnJvbV9lbnRyeShydW5zWy0xXSkKLSAgICAgICAgc3RhcnRfdGltZXN0YW1wID0g
ZW5kX3RpbWVzdGFtcCAtIGRpc3BsYXlfZGF5cyAqIDI0ICogMzYwMAotICAgICAgICBmb3IgZW50
cnkgaW4gcnVuczoKLSAgICAgICAgICAgIHRpbWVzdGFtcCwgdmFsdWUgPSBSdW5zLl90aW1lc3Rh
bXBfYW5kX3ZhbHVlX2Zyb21fanNvbl9lbnRyeShlbnRyeSkKLSAgICAgICAgICAgIGlmIHRpbWVz
dGFtcCA8IHN0YXJ0X3RpbWVzdGFtcCBvciB0aW1lc3RhbXAgPiBlbmRfdGltZXN0YW1wOgotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBjaGFydF9kYXRhX3guYXBwZW5kKHRp
bWVzdGFtcCkKLSAgICAgICAgICAgIGNoYXJ0X2RhdGFfeS5hcHBlbmQodmFsdWUpCi0KLSAgICAg
ICAgZGF0ZXMgPSBbZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChlbmRfdGltZXN0YW1wKSAtIHRpbWVk
ZWx0YShkaXNwbGF5X2RheXMgLyA3LjAgKiAoNyAtIGkpKSBmb3IgaSBpbiByYW5nZSgwLCA4KV0K
LQotICAgICAgICB5X21heCA9IG1heChjaGFydF9kYXRhX3kpICogMS4xCi0gICAgICAgIHlfYXhp
c19sYWJlbF9zdGVwID0gaW50KHlfbWF4IC8gNSArIDAuNSkgICMgVGhpcyB3b24ndCB3b3JrIGZv
ciBkZWNpbWFsIG51bWJlcnMKLQotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgJ2NodCc6
ICdseHknLCAgIyBTcGVjaWZ5IHdpdGggWCBhbmQgWSBjb29yZGluYXRlcwotICAgICAgICAgICAg
J2NoeHQnOiAneCx5JywgICMgRGlzcGxheSBib3RoIFggYW5kIFkgYXhpZXMKLSAgICAgICAgICAg
ICdjaHhsJzogJzA6fCcgKyAnfCcuam9pbihbZGF0ZS5zdHJmdGltZSgnJWIgJWQnKSBmb3IgZGF0
ZSBpbiBkYXRlc10pLCAgIyBYLWF4aXMgbGFiZWxzCi0gICAgICAgICAgICAnY2h4cic6ICcxLDAs
JWYsJWYnICUgKGludCh5X21heCArIDAuNSksIHlfYXhpc19sYWJlbF9zdGVwKSwgICMgWS1heGlz
IHJhbmdlOiBtaW49MCwgbWF4LCBzdGVwCi0gICAgICAgICAgICAnY2hkcyc6ICclZiwlZiwlZiwl
ZicgJSAoc3RhcnRfdGltZXN0YW1wLCBlbmRfdGltZXN0YW1wLCAwLCB5X21heCksICAjIFgsIFkg
ZGF0YSByYW5nZQotICAgICAgICAgICAgJ2NoeHMnOiAnMSw2NzY3NjcsMTEuMTY3LDAsbCw2NzY3
NjcnLCAgIyBZLWF4aXMgbGFiZWw6IDEsY29sb3IsZm9udC1zaXplLGNlbnRlcmQgb24gdGljayxh
eGlzIGxpbmUvbm8gdGlja3MsIHRpY2sgY29sb3IKLSAgICAgICAgICAgICdjaHMnOiAnMzYweDI0
MCcsICAjIEltYWdlIHNpemU6IDM2MHB4IGJ5IDI0MHB4Ci0gICAgICAgICAgICAnY2hjbyc6ICdm
ZjAwMDAnLCAgIyBQbG90IGxpbmUgY29sb3IKLSAgICAgICAgICAgICdjaGcnOiAnJWYsMjAsMCww
JyAlICgxMDAgLyAobGVuKGRhdGVzKSAtIDEpKSwgICMgWCwgWSBncmlkIGxpbmUgc3RlcCBzaXpl
cyAtIG1heCBpcyAxMDAuCi0gICAgICAgICAgICAnY2hscyc6ICczJywgICMgTGluZSB0aGlja25l
c3MKLSAgICAgICAgICAgICdjaGYnOiAnYmcscyxlZmY2ZmQnLCAgIyBUcmFuc3BhcmVudCBiYWNr
Z3JvdW5kCi0gICAgICAgICAgICAnY2hkJzogJ3Q6JyArICcsJy5qb2luKFtzdHIoeCkgZm9yIHgg
aW4gY2hhcnRfZGF0YV94XSkgKyAnfCcgKyAnLCcuam9pbihbc3RyKHkpIGZvciB5IGluIGNoYXJ0
X2RhdGFfeV0pLCAgIyBYLCBZIGRhdGEKLSAgICAgICAgfQotCi0KLWNsYXNzIERhc2hib2FyZElt
YWdlKGRiLk1vZGVsKToKLSAgICBpbWFnZSA9IGRiLkJsb2JQcm9wZXJ0eShyZXF1aXJlZD1UcnVl
KQotICAgIGNyZWF0ZWRBdCA9IGRiLkRhdGVUaW1lUHJvcGVydHkocmVxdWlyZWQ9VHJ1ZSwgYXV0
b19ub3c9VHJ1ZSkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3JlYXRlKGJyYW5jaF9p
ZCwgcGxhdGZvcm1faWQsIHRlc3RfaWQsIGRpc3BsYXlfZGF5cywgaW1hZ2UpOgotICAgICAgICBr
ZXlfbmFtZSA9IERhc2hib2FyZEltYWdlLmtleV9uYW1lKGJyYW5jaF9pZCwgcGxhdGZvcm1faWQs
IHRlc3RfaWQsIGRpc3BsYXlfZGF5cykKLSAgICAgICAgaW5zdGFuY2UgPSBEYXNoYm9hcmRJbWFn
ZShrZXlfbmFtZT1rZXlfbmFtZSwgaW1hZ2U9aW1hZ2UpCi0gICAgICAgIGluc3RhbmNlLnB1dCgp
Ci0gICAgICAgIG1lbWNhY2hlLnNldCgnZGFzaGJvYXJkLWltYWdlOicgKyBrZXlfbmFtZSwgaW1h
Z2UpCi0gICAgICAgIHJldHVybiBpbnN0YW5jZQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRl
ZiBnZXRfaW1hZ2UoYnJhbmNoX2lkLCBwbGF0Zm9ybV9pZCwgdGVzdF9pZCwgZGlzcGxheV9kYXlz
KToKLSAgICAgICAga2V5X25hbWUgPSBEYXNoYm9hcmRJbWFnZS5rZXlfbmFtZShicmFuY2hfaWQs
IHBsYXRmb3JtX2lkLCB0ZXN0X2lkLCBkaXNwbGF5X2RheXMpCi0gICAgICAgIGltYWdlID0gbWVt
Y2FjaGUuZ2V0KCdkYXNoYm9hcmQtaW1hZ2U6JyArIGtleV9uYW1lKQotICAgICAgICBpZiBub3Qg
aW1hZ2U6Ci0gICAgICAgICAgICBpbnN0YW5jZSA9IERhc2hib2FyZEltYWdlLmdldF9ieV9rZXlf
bmFtZShrZXlfbmFtZSkKLSAgICAgICAgICAgIGltYWdlID0gaW5zdGFuY2UuaW1hZ2UgaWYgaW5z
dGFuY2UgZWxzZSBOb25lCi0gICAgICAgICAgICBtZW1jYWNoZS5zZXQoJ2Rhc2hib2FyZC1pbWFn
ZTonICsga2V5X25hbWUsIGltYWdlKQotICAgICAgICByZXR1cm4gaW1hZ2UKLQotICAgIEBjbGFz
c21ldGhvZAotICAgIGRlZiBuZWVkc191cGRhdGUoY2xzLCBicmFuY2hfaWQsIHBsYXRmb3JtX2lk
LCB0ZXN0X2lkLCBkaXNwbGF5X2RheXMsIG5vdz1kYXRldGltZS5ub3coKSk6Ci0gICAgICAgIGlm
IGRpc3BsYXlfZGF5cyA8IDEwOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgaW1h
Z2UgPSBEYXNoYm9hcmRJbWFnZS5nZXRfYnlfa2V5X25hbWUoY2xzLmtleV9uYW1lKGJyYW5jaF9p
ZCwgcGxhdGZvcm1faWQsIHRlc3RfaWQsIGRpc3BsYXlfZGF5cykpCi0gICAgICAgIGR1cmF0aW9u
ID0gbWF0aC5zcXJ0KGRpc3BsYXlfZGF5cykgLyAxMAotICAgICAgICAjIGUuZy4gMTMgaG91cnMg
Zm9yIDMwIGRheXMsIDIzIGhvdXJzIGZvciA5MCBkYXlzLCBhbmQgNDYgaG91cnMgZm9yIDM2NSBk
YXlzCi0gICAgICAgIHJldHVybiBub3QgaW1hZ2Ugb3IgaW1hZ2UuY3JlYXRlZEF0IDwgbm93IC0g
dGltZWRlbHRhKGR1cmF0aW9uKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBrZXlfbmFt
ZShicmFuY2hfaWQsIHBsYXRmb3JtX2lkLCB0ZXN0X2lkLCBkaXNwbGF5X2RheXMpOgotICAgICAg
ICByZXR1cm4gJyVkOiVkOiVkOiVkJyAlIChicmFuY2hfaWQsIHBsYXRmb3JtX2lkLCB0ZXN0X2lk
LCBkaXNwbGF5X2RheXMpCkluZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9t
b2RlbHNfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBw
c3BvdC5jb20vbW9kZWxzX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAxNDAyNTgpCisrKyBXZWJzaXRl
cy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9tb2RlbHNfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTEsODgyICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLWltcG9ydCBqc29uCi1pbXBvcnQgbW9kZWxzCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJv
bSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKLWZyb20gZGF0ZXRpbWUgaW1wb3J0IHRpbWVkZWx0
YQotZnJvbSBnb29nbGUuYXBwZW5naW5lLmFwaSBpbXBvcnQgbWVtY2FjaGUKLWZyb20gZ29vZ2xl
LmFwcGVuZ2luZS5leHQgaW1wb3J0IHRlc3RiZWQKLWZyb20gdGltZSBpbXBvcnQgbWt0aW1lCi0K
LWZyb20gbW9kZWxzIGltcG9ydCBOdW1lcmljSWRIb2xkZXIKLWZyb20gbW9kZWxzIGltcG9ydCBC
cmFuY2gKLWZyb20gbW9kZWxzIGltcG9ydCBQbGF0Zm9ybQotZnJvbSBtb2RlbHMgaW1wb3J0IEJ1
aWxkZXIKLWZyb20gbW9kZWxzIGltcG9ydCBCdWlsZAotZnJvbSBtb2RlbHMgaW1wb3J0IFRlc3QK
LWZyb20gbW9kZWxzIGltcG9ydCBUZXN0UmVzdWx0Ci1mcm9tIG1vZGVscyBpbXBvcnQgUmVwb3J0
TG9nCi1mcm9tIG1vZGVscyBpbXBvcnQgUGVyc2lzdGVudENhY2hlCi1mcm9tIG1vZGVscyBpbXBv
cnQgUnVucwotZnJvbSBtb2RlbHMgaW1wb3J0IERhc2hib2FyZEltYWdlCi1mcm9tIG1vZGVscyBp
bXBvcnQgY3JlYXRlX2luX3RyYW5zYWN0aW9uX3dpdGhfbnVtZXJpY19pZF9ob2xkZXIKLWZyb20g
bW9kZWxzIGltcG9ydCBkZWxldGVfbW9kZWxfd2l0aF9udW1lcmljX2lkX2hvbGRlcgotZnJvbSBt
b2RlbHMgaW1wb3J0IG1vZGVsX2Zyb21fbnVtZXJpY19pZAotCi0KLWNsYXNzIERhdGFTdG9yZVRl
c3RzQmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAg
ICBzZWxmLnRlc3RiZWQgPSB0ZXN0YmVkLlRlc3RiZWQoKQotICAgICAgICBzZWxmLnRlc3RiZWQu
YWN0aXZhdGUoKQotICAgICAgICBzZWxmLnRlc3RiZWQuaW5pdF9kYXRhc3RvcmVfdjNfc3R1Yigp
Ci0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNlbGYudGVzdGJlZC5kZWFjdGl2
YXRlKCkKLQotICAgIGRlZiBhc3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9mKHNlbGYsIG1vZGVsKToK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obW9kZWwuYWxsKCkuZmV0Y2goNSkpLCAwKQot
Ci0gICAgZGVmIGFzc2VydE9ubHlJbnN0YW5jZShzZWxmLCBvbmx5X2luc3Rhc25jZSk6Ci0gICAg
ICAgIHNlbGYuYXNzZXJ0T25seUluc3RhbmNlcyhbb25seV9pbnN0YXNuY2VdKQotCi0gICAgZGVm
IGFzc2VydE9ubHlJbnN0YW5jZXMoc2VsZiwgZXhwZWN0ZWRfaW5zdGFuY2VzKToKLSAgICAgICAg
YWN0dWFsX2luc3RhbmNlcyA9IGV4cGVjdGVkX2luc3RhbmNlc1swXS5fX2NsYXNzX18uYWxsKCku
ZmV0Y2gobGVuKGV4cGVjdGVkX2luc3RhbmNlcykgKyAxKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsVW5vcmRlcmVkTW9kZWxMaXN0KGFjdHVhbF9pbnN0YW5jZXMsIGV4cGVjdGVkX2luc3RhbmNl
cykKLQotICAgIGRlZiBhc3NlcnRFcXVhbFVub3JkZXJlZE1vZGVsTGlzdChzZWxmLCBsaXN0MSwg
bGlzdDIpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsVW5vcmRlcmVkTGlzdChbaXRlbS5rZXko
KSBmb3IgaXRlbSBpbiBsaXN0MV0sIFtpdGVtLmtleSgpIGZvciBpdGVtIGluIGxpc3QxXSkKLQot
ICAgIGRlZiBhc3NlcnRFcXVhbFVub3JkZXJlZExpc3Qoc2VsZiwgbGlzdDEsIGxpc3QyKToKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobGlzdDEpLCBzZXQobGlzdDIpKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGxlbihsaXN0MSksIGxlbihsaXN0MikpCi0KLQotY2xhc3MgSGVscGVy
VGVzdHMoRGF0YVN0b3JlVGVzdHNCYXNlKToKLSAgICBkZWYgX2Fzc2VydF90aGVyZV9pc19leGFj
dGx5X29uZV9pZF9ob2xkZXJfYW5kX21hdGNoZXMoc2VsZiwgaWQpOgotICAgICAgICBpZF9ob2xk
ZXJzID0gTnVtZXJpY0lkSG9sZGVyLmFsbCgpLmZldGNoKDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwobGVuKGlkX2hvbGRlcnMpLCAxKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaWRfaG9s
ZGVyc1swXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZF9ob2xkZXJzWzBdLmtleSgpLmlk
KCksIGlkKQotCi0gICAgZGVmIHRlc3RfY3JlYXRlX2luX3RyYW5zYWN0aW9uX3dpdGhfbnVtZXJp
Y19pZF9ob2xkZXIoc2VsZik6Ci0KLSAgICAgICAgZGVmIGV4ZWN1dGUoaWQpOgotICAgICAgICAg
ICAgcmV0dXJuIEJyYW5jaChpZD1pZCwgbmFtZT0nc29tZSBicmFuY2gnLCBrZXlfbmFtZT0nc29t
ZS1icmFuY2gnKS5wdXQoKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0VGhlcmVJc05vSW5zdGFuY2VP
ZihCcmFuY2gpCi0gICAgICAgIHNlbGYuYXNzZXJ0VGhlcmVJc05vSW5zdGFuY2VPZihOdW1lcmlj
SWRIb2xkZXIpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNyZWF0ZV9pbl90cmFuc2FjdGlv
bl93aXRoX251bWVyaWNfaWRfaG9sZGVyKGV4ZWN1dGUpKQotCi0gICAgICAgIGJyYW5jaGVzID0g
QnJhbmNoLmFsbCgpLmZldGNoKDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJyYW5j
aGVzKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChicmFuY2hlc1swXS5uYW1lLCAnc29t
ZSBicmFuY2gnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJyYW5jaGVzWzBdLmtleSgpLm5h
bWUoKSwgJ3NvbWUtYnJhbmNoJykKLQotICAgICAgICBzZWxmLl9hc3NlcnRfdGhlcmVfaXNfZXhh
Y3RseV9vbmVfaWRfaG9sZGVyX2FuZF9tYXRjaGVzKGJyYW5jaGVzWzBdLmlkKQotCi0gICAgZGVm
IHRlc3RfZmFpbGluZ19pbl9jcmVhdGVfaW5fdHJhbnNhY3Rpb25fd2l0aF9udW1lcmljX2lkX2hv
bGRlcihzZWxmKToKLQotICAgICAgICBkZWYgZXhlY3V0ZShpZCk6Ci0gICAgICAgICAgICByZXR1
cm4gTm9uZQotCi0gICAgICAgIHNlbGYuYXNzZXJ0VGhlcmVJc05vSW5zdGFuY2VPZihCcmFuY2gp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0VGhlcmVJc05vSW5zdGFuY2VPZihOdW1lcmljSWRIb2xkZXIp
Ci0KLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGVfaW5fdHJhbnNhY3Rpb25fd2l0aF9u
dW1lcmljX2lkX2hvbGRlcihleGVjdXRlKSkKLQotICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNO
b0luc3RhbmNlT2YoQnJhbmNoKQotICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNOb0luc3RhbmNl
T2YoTnVtZXJpY0lkSG9sZGVyKQotCi0gICAgZGVmIHRlc3RfcmFpc2luZ19pbl9jcmVhdGVfaW5f
dHJhbnNhY3Rpb25fd2l0aF9udW1lcmljX2lkX2hvbGRlcihzZWxmKToKLQotICAgICAgICBkZWYg
ZXhlY3V0ZShpZCk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKLSAgICAgICAgICAgIHJl
dHVybiBOb25lCi0KLSAgICAgICAgc2VsZi5hc3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9mKEJyYW5j
aCkKLSAgICAgICAgc2VsZi5hc3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9mKE51bWVyaWNJZEhvbGRl
cikKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNyZWF0ZV9pbl90cmFu
c2FjdGlvbl93aXRoX251bWVyaWNfaWRfaG9sZGVyLCAoZXhlY3V0ZSkpCi0KLSAgICAgICAgc2Vs
Zi5hc3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9mKEJyYW5jaCkKLSAgICAgICAgc2VsZi5hc3NlcnRU
aGVyZUlzTm9JbnN0YW5jZU9mKE51bWVyaWNJZEhvbGRlcikKLQotICAgIGRlZiB0ZXN0X2RlbGV0
ZV9tb2RlbF93aXRoX251bWVyaWNfaWRfaG9sZGVyKHNlbGYpOgotCi0gICAgICAgIGRlZiBleGVj
dXRlKGlkKToKLSAgICAgICAgICAgIHJldHVybiBCcmFuY2goaWQ9aWQsIG5hbWU9J3NvbWUgYnJh
bmNoJywga2V5X25hbWU9J3NvbWUtYnJhbmNoJykucHV0KCkKLQotICAgICAgICBicmFuY2ggPSBC
cmFuY2guZ2V0KGNyZWF0ZV9pbl90cmFuc2FjdGlvbl93aXRoX251bWVyaWNfaWRfaG9sZGVyKGV4
ZWN1dGUpKQotICAgICAgICBzZWxmLmFzc2VydE9ubHlJbnN0YW5jZShicmFuY2gpCi0KLSAgICAg
ICAgZGVsZXRlX21vZGVsX3dpdGhfbnVtZXJpY19pZF9ob2xkZXIoYnJhbmNoKQotCi0gICAgICAg
IHNlbGYuYXNzZXJ0VGhlcmVJc05vSW5zdGFuY2VPZihCcmFuY2gpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0VGhlcmVJc05vSW5zdGFuY2VPZihOdW1lcmljSWRIb2xkZXIpCi0KLSAgICBkZWYgdGVzdF9t
b2RlbF9mcm9tX251bWVyaWNfaWQoc2VsZik6Ci0KLSAgICAgICAgZGVmIGV4ZWN1dGUoaWQpOgot
ICAgICAgICAgICAgcmV0dXJuIEJyYW5jaChpZD1pZCwgbmFtZT0nc29tZSBicmFuY2gnLCBrZXlf
bmFtZT0nc29tZS1icmFuY2gnKS5wdXQoKQotCi0gICAgICAgIGJyYW5jaCA9IEJyYW5jaC5nZXQo
Y3JlYXRlX2luX3RyYW5zYWN0aW9uX3dpdGhfbnVtZXJpY19pZF9ob2xkZXIoZXhlY3V0ZSkpCi0K
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RlbF9mcm9tX251bWVyaWNfaWQoYnJhbmNoLmlk
LCBCcmFuY2gpLmtleSgpLCBicmFuY2gua2V5KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
bW9kZWxfZnJvbV9udW1lcmljX2lkKGJyYW5jaC5pZCArIDEsIEJyYW5jaCksIE5vbmUpCi0gICAg
ICAgIGRlbGV0ZV9tb2RlbF93aXRoX251bWVyaWNfaWRfaG9sZGVyKGJyYW5jaCkKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChtb2RlbF9mcm9tX251bWVyaWNfaWQoYnJhbmNoLmlkLCBCcmFuY2gp
LCBOb25lKQotCi0KLWNsYXNzIEJyYW5jaFRlc3RzKERhdGFTdG9yZVRlc3RzQmFzZSk6Ci0gICAg
ZGVmIHRlc3RfY3JlYXRlX2lmX3Bvc3NpYmxlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRo
ZXJlSXNOb0luc3RhbmNlT2YoQnJhbmNoKQotCi0gICAgICAgIGJyYW5jaCA9IEJyYW5jaC5jcmVh
dGVfaWZfcG9zc2libGUoJ3NvbWUtYnJhbmNoJywgJ3NvbWUgYnJhbmNoJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGJyYW5jaCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJyYW5jaC5rZXko
KS5uYW1lKCksICdzb21lLWJyYW5jaCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShicmFuY2gu
bmFtZSwgJ3NvbWUgYnJhbmNoJykKLSAgICAgICAgc2VsZi5hc3NlcnRPbmx5SW5zdGFuY2UoYnJh
bmNoKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoQnJhbmNoLmNyZWF0ZV9pZl9wb3NzaWJs
ZSgnc29tZS1icmFuY2gnLCAnc29tZSBvdGhlciBicmFuY2gnKSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKGJyYW5jaC5uYW1lLCAnc29tZSBicmFuY2gnKQotICAgICAgICBzZWxmLmFzc2VydE9u
bHlJbnN0YW5jZShicmFuY2gpCi0KLQotY2xhc3MgUGxhdGZvcm1UZXN0cyhEYXRhU3RvcmVUZXN0
c0Jhc2UpOgotICAgIGRlZiB0ZXN0X2NyZWF0ZV9pZl9wb3NzaWJsZShzZWxmKToKLSAgICAgICAg
c2VsZi5hc3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9mKFBsYXRmb3JtKQotCi0gICAgICAgIHBsYXRm
b3JtID0gUGxhdGZvcm0uY3JlYXRlX2lmX3Bvc3NpYmxlKCdzb21lLXBsYXRmb3JtJywgJ3NvbWUg
cGxhdGZvcm0nKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocGxhdGZvcm0pCi0gICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShwbGF0Zm9ybS5rZXkoKS5uYW1lKCksICdzb21lLXBsYXRmb3JtJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHBsYXRmb3JtLm5hbWUsICdzb21lIHBsYXRmb3JtJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRPbmx5SW5zdGFuY2UocGxhdGZvcm0pCi0KLSAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShQbGF0Zm9ybS5jcmVhdGVfaWZfcG9zc2libGUoJ3NvbWUtcGxhdGZvcm0nLCAn
c29tZSBvdGhlciBwbGF0Zm9ybScpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocGxhdGZvcm0u
bmFtZSwgJ3NvbWUgcGxhdGZvcm0nKQotICAgICAgICBzZWxmLmFzc2VydE9ubHlJbnN0YW5jZShw
bGF0Zm9ybSkKLQotCi1jbGFzcyBCdWlsZGVyVGVzdHMoRGF0YVN0b3JlVGVzdHNCYXNlKToKLSAg
ICBkZWYgdGVzdF9jcmVhdGUoc2VsZik6Ci0gICAgICAgIGJ1aWxkZXJfa2V5ID0gQnVpbGRlci5j
cmVhdGUoJ3NvbWUgYnVpbGRlcicsICdzb21lIHBhc3N3b3JkJykKLSAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKGJ1aWxkZXJfa2V5KQotICAgICAgICBidWlsZGVyID0gQnVpbGRlci5nZXQoYnVpbGRl
cl9rZXkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVpbGRlci5rZXkoKS5uYW1lKCksICdz
b21lIGJ1aWxkZXInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1aWxkZXIubmFtZSwgJ3Nv
bWUgYnVpbGRlcicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVpbGRlci5wYXNzd29yZCwg
QnVpbGRlci5faGFzaGVkX3Bhc3N3b3JkKCdzb21lIHBhc3N3b3JkJykpCi0KLSAgICBkZWYgdGVz
dF91cGRhdGVfcGFzc3dvcmQoc2VsZik6Ci0gICAgICAgIGJ1aWxkZXIgPSBCdWlsZGVyLmdldChC
dWlsZGVyLmNyZWF0ZSgnc29tZSBidWlsZGVyJywgJ3NvbWUgcGFzc3dvcmQnKSkKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChidWlsZGVyLnBhc3N3b3JkLCBCdWlsZGVyLl9oYXNoZWRfcGFzc3dv
cmQoJ3NvbWUgcGFzc3dvcmQnKSkKLSAgICAgICAgYnVpbGRlci51cGRhdGVfcGFzc3dvcmQoJ290
aGVyIHBhc3N3b3JkJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWlsZGVyLnBhc3N3b3Jk
LCBCdWlsZGVyLl9oYXNoZWRfcGFzc3dvcmQoJ290aGVyIHBhc3N3b3JkJykpCi0KLSAgICAgICAg
IyBNYWtlIHN1cmUgaXQncyBzYXZlZAotICAgICAgICBidWlsZGVyID0gQnVpbGRlci5nZXQoYnVp
bGRlci5rZXkoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWlsZGVyLnBhc3N3b3JkLCBC
dWlsZGVyLl9oYXNoZWRfcGFzc3dvcmQoJ290aGVyIHBhc3N3b3JkJykpCi0KLSAgICBkZWYgdGVz
dF9oYXNoZWRfcGFzc3dvcmQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoQnVp
bGRlci5faGFzaGVkX3Bhc3N3b3JkKCdzb21lIHBhc3N3b3JkJyksICdzb21lIHBhc3N3b3JkJykK
LSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnc29tZSBwYXNzd29yZCcgaW4gQnVpbGRlci5faGFz
aGVkX3Bhc3N3b3JkKCdzb21lIHBhc3N3b3JkJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
bGVuKEJ1aWxkZXIuX2hhc2hlZF9wYXNzd29yZCgnc29tZSBwYXNzd29yZCcpKSwgNjQpCi0KLSAg
ICBkZWYgdGVzdF9hdXRoZW50aWNhdGUoc2VsZik6Ci0gICAgICAgIGJ1aWxkZXIgPSBCdWlsZGVy
LmdldChCdWlsZGVyLmNyZWF0ZSgnc29tZSBidWlsZGVyJywgJ3NvbWUgcGFzc3dvcmQnKSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKGJ1aWxkZXIuYXV0aGVudGljYXRlKCdzb21lIHBhc3N3b3Jk
JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYnVpbGRlci5hdXRoZW50aWNhdGUoJ2JhZCBw
YXNzd29yZCcpKQotCi0KLWRlZiBfY3JlYXRlX3NvbWVfYnVpbGRlcigpOgotICAgIGJyYW5jaCA9
IEJyYW5jaC5jcmVhdGVfaWZfcG9zc2libGUoJ3NvbWUtYnJhbmNoJywgJ1NvbWUgQnJhbmNoJykK
LSAgICBwbGF0Zm9ybSA9IFBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1wbGF0Zm9y
bScsICdTb21lIFBsYXRmb3JtJykKLSAgICBidWlsZGVyX2tleSA9IEJ1aWxkZXIuY3JlYXRlKCdz
b21lLWJ1aWxkZXInLCAnU29tZSBCdWlsZGVyJykKLSAgICByZXR1cm4gYnJhbmNoLCBwbGF0Zm9y
bSwgQnVpbGRlci5nZXQoYnVpbGRlcl9rZXkpCi0KLQotZGVmIF9jcmVhdGVfYnVpbGQoYnJhbmNo
LCBwbGF0Zm9ybSwgYnVpbGRlciwga2V5X25hbWU9J3NvbWUtYnVpbGQnKToKLSAgICBidWlsZF9r
ZXkgPSBCdWlsZChrZXlfbmFtZT1rZXlfbmFtZSwgYnJhbmNoPWJyYW5jaCwgcGxhdGZvcm09cGxh
dGZvcm0sIGJ1aWxkZXI9YnVpbGRlciwKLSAgICAgICAgYnVpbGROdW1iZXI9MSwgcmV2aXNpb249
MTAwLCB0aW1lc3RhbXA9ZGF0ZXRpbWUubm93KCkpLnB1dCgpCi0gICAgcmV0dXJuIEJ1aWxkLmdl
dChidWlsZF9rZXkpCi0KLQotY2xhc3MgQnVpbGRUZXN0cyhEYXRhU3RvcmVUZXN0c0Jhc2UpOgot
ICAgIGRlZiB0ZXN0X2dldF9vcl9pbnNlcnRfZnJvbV9sb2coc2VsZik6Ci0gICAgICAgIGJyYW5j
aCwgcGxhdGZvcm0sIGJ1aWxkZXIgPSBfY3JlYXRlX3NvbWVfYnVpbGRlcigpCi0KLSAgICAgICAg
dGltZXN0YW1wID0gZGF0ZXRpbWUubm93KCkucmVwbGFjZShtaWNyb3NlY29uZD0wKQotICAgICAg
ICBsb2cgPSBSZXBvcnRMb2codGltZXN0YW1wPXRpbWVzdGFtcCwgaGVhZGVycz0nc29tZSBoZWFk
ZXJzJywKLSAgICAgICAgICAgIHBheWxvYWQ9J3siYnJhbmNoIjogInNvbWUtYnJhbmNoIiwgInBs
YXRmb3JtIjogInNvbWUtcGxhdGZvcm0iLCAiYnVpbGRlci1uYW1lIjogInNvbWUtYnVpbGRlciIs
JyArCi0gICAgICAgICAgICAgICAgJyJidWlsZC1udW1iZXIiOiAxMjMsICJ3ZWJraXQtcmV2aXNp
b24iOiA0NTYsICJ0aW1lc3RhbXAiOiAlZH0nICUgaW50KG1rdGltZSh0aW1lc3RhbXAudGltZXR1
cGxlKCkpKSkKLQotICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNOb0luc3RhbmNlT2YoQnVpbGQp
Ci0KLSAgICAgICAgYnVpbGQgPSBCdWlsZC5nZXRfb3JfaW5zZXJ0X2Zyb21fbG9nKGxvZykKLSAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKGJ1aWxkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1
aWxkLmJyYW5jaC5rZXkoKSwgYnJhbmNoLmtleSgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGJ1aWxkLnBsYXRmb3JtLmtleSgpLCBwbGF0Zm9ybS5rZXkoKSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChidWlsZC5idWlsZGVyLmtleSgpLCBidWlsZGVyLmtleSgpKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGJ1aWxkLmJ1aWxkTnVtYmVyLCAxMjMpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoYnVpbGQucmV2aXNpb24sIDQ1NikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWls
ZC5jaHJvbWl1bVJldmlzaW9uLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1aWxk
LnRpbWVzdGFtcCwgdGltZXN0YW1wKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0T25seUluc3RhbmNl
KGJ1aWxkKQotCi0KLWNsYXNzIFRlc3RNb2RlbFRlc3RzKERhdGFTdG9yZVRlc3RzQmFzZSk6Ci0g
ICAgZGVmIHRlc3RfdXBkYXRlX29yX2luc2VydChzZWxmKToKLSAgICAgICAgYnJhbmNoID0gQnJh
bmNoLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1icmFuY2gnLCAnU29tZSBCcmFuY2gnKQotICAg
ICAgICBwbGF0Zm9ybSA9IFBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1wbGF0Zm9y
bScsICdTb21lIFBsYXRmb3JtJykKLQotICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNOb0luc3Rh
bmNlT2YoVGVzdCkKLQotICAgICAgICB0ZXN0ID0gVGVzdC51cGRhdGVfb3JfaW5zZXJ0KCdzb21l
LXRlc3QnLCBicmFuY2gsIHBsYXRmb3JtKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdCkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LmJyYW5jaGVzLCBbYnJhbmNoLmtleSgpXSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LnBsYXRmb3JtcywgW3BsYXRmb3JtLmtleSgp
XSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LnVuaXQsIE5vbmUpCi0gICAgICAgIHNl
bGYuYXNzZXJ0T25seUluc3RhbmNlKHRlc3QpCi0KLSAgICBkZWYgdGVzdF91cGRhdGVfb3JfaW5z
ZXJ0X3dpdGhfdW5pdChzZWxmKToKLSAgICAgICAgYnJhbmNoID0gQnJhbmNoLmNyZWF0ZV9pZl9w
b3NzaWJsZSgnc29tZS1icmFuY2gnLCAnU29tZSBCcmFuY2gnKQotICAgICAgICBwbGF0Zm9ybSA9
IFBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1wbGF0Zm9ybScsICdTb21lIFBsYXRm
b3JtJykKLSAgICAgICAgdGVzdCA9IFRlc3QudXBkYXRlX29yX2luc2VydCgnc29tZS10ZXN0Jywg
YnJhbmNoLCBwbGF0Zm9ybSwgJ3J1bnMvcycpCi0gICAgICAgIHNlbGYuYXNzZXJ0T25seUluc3Rh
bmNlKHRlc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxVbm9yZGVyZWRMaXN0KHRlc3QudW5p
dCwgJ3J1bnMvcycpCi0KLSAgICBkZWYgdGVzdF91cGRhdGVfb3JfaW5zZXJ0X3RvX3VwZGF0ZShz
ZWxmKToKLSAgICAgICAgYnJhbmNoID0gQnJhbmNoLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1i
cmFuY2gnLCAnU29tZSBCcmFuY2gnKQotICAgICAgICBwbGF0Zm9ybSA9IFBsYXRmb3JtLmNyZWF0
ZV9pZl9wb3NzaWJsZSgnc29tZS1wbGF0Zm9ybScsICdTb21lIFBsYXRmb3JtJykKLSAgICAgICAg
dGVzdCA9IFRlc3QudXBkYXRlX29yX2luc2VydCgnc29tZS10ZXN0JywgYnJhbmNoLCBwbGF0Zm9y
bSkKLSAgICAgICAgc2VsZi5hc3NlcnRPbmx5SW5zdGFuY2UodGVzdCkKLQotICAgICAgICBvdGhl
cl9icmFuY2ggPSBCcmFuY2guY3JlYXRlX2lmX3Bvc3NpYmxlKCdvdGhlci1icmFuY2gnLCAnT3Ro
ZXIgQnJhbmNoJykKLSAgICAgICAgb3RoZXJfcGxhdGZvcm0gPSBQbGF0Zm9ybS5jcmVhdGVfaWZf
cG9zc2libGUoJ290aGVyLXBsYXRmb3JtJywgJ090aGVyIFBsYXRmb3JtJykKLSAgICAgICAgdGVz
dCA9IFRlc3QudXBkYXRlX29yX2luc2VydCgnc29tZS10ZXN0Jywgb3RoZXJfYnJhbmNoLCBvdGhl
cl9wbGF0Zm9ybSwgJ21zJykKLSAgICAgICAgc2VsZi5hc3NlcnRPbmx5SW5zdGFuY2UodGVzdCkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbFVub3JkZXJlZExpc3QodGVzdC5icmFuY2hlcywgW2Jy
YW5jaC5rZXkoKSwgb3RoZXJfYnJhbmNoLmtleSgpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bFVub3JkZXJlZExpc3QodGVzdC5wbGF0Zm9ybXMsIFtwbGF0Zm9ybS5rZXkoKSwgb3RoZXJfcGxh
dGZvcm0ua2V5KCldKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsVW5vcmRlcmVkTGlzdCh0ZXN0
LnVuaXQsICdtcycpCi0KLSAgICBkZWYgdGVzdF9tZXJnZShzZWxmKToKLSAgICAgICAgYnJhbmNo
LCBwbGF0Zm9ybSwgYnVpbGRlciA9IF9jcmVhdGVfc29tZV9idWlsZGVyKCkKLSAgICAgICAgc29t
ZV9idWlsZCA9IF9jcmVhdGVfYnVpbGQoYnJhbmNoLCBwbGF0Zm9ybSwgYnVpbGRlcikKLSAgICAg
ICAgc29tZV9yZXN1bHQgPSBUZXN0UmVzdWx0LmdldF9vcl9pbnNlcnRfZnJvbV9wYXJzZWRfanNv
bignc29tZS10ZXN0Jywgc29tZV9idWlsZCwgNTApCi0gICAgICAgIHNvbWVfdGVzdCA9IFRlc3Qu
dXBkYXRlX29yX2luc2VydCgnc29tZS10ZXN0JywgYnJhbmNoLCBwbGF0Zm9ybSkKLQotICAgICAg
ICBvdGhlcl9idWlsZCA9IF9jcmVhdGVfYnVpbGQoYnJhbmNoLCBwbGF0Zm9ybSwgYnVpbGRlciwg
J290aGVyLWJ1aWxkJykKLSAgICAgICAgb3RoZXJfcmVzdWx0ID0gVGVzdFJlc3VsdC5nZXRfb3Jf
aW5zZXJ0X2Zyb21fcGFyc2VkX2pzb24oJ290aGVyLXRlc3QnLCBvdGhlcl9idWlsZCwgMzApCi0g
ICAgICAgIG90aGVyX3Rlc3QgPSBUZXN0LnVwZGF0ZV9vcl9pbnNlcnQoJ290aGVyLXRlc3QnLCBi
cmFuY2gsIHBsYXRmb3JtKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0T25seUluc3RhbmNlcyhbc29t
ZV9yZXN1bHQsIG90aGVyX3Jlc3VsdF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc29t
ZV9yZXN1bHQua2V5KCksIG90aGVyX3Jlc3VsdC5rZXkoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRP
bmx5SW5zdGFuY2VzKFtzb21lX3Rlc3QsIG90aGVyX3Rlc3RdKQotCi0gICAgICAgIHNlbGYuYXNz
ZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBzb21lX3Rlc3QubWVyZ2UsIChzb21lX3Rlc3QpKQot
ICAgICAgICBzZWxmLmFzc2VydE9ubHlJbnN0YW5jZXMoW3NvbWVfdGVzdCwgb3RoZXJfdGVzdF0p
Ci0KLSAgICAgICAgc29tZV90ZXN0Lm1lcmdlKG90aGVyX3Rlc3QpCi0gICAgICAgIHJlc3VsdHNf
Zm9yX3NvbWVfdGVzdCA9IFRlc3RSZXN1bHQuYWxsKCkKLSAgICAgICAgcmVzdWx0c19mb3Jfc29t
ZV90ZXN0LmZpbHRlcignbmFtZSA9JywgJ3NvbWUtdGVzdCcpCi0gICAgICAgIHJlc3VsdHNfZm9y
X3NvbWVfdGVzdCA9IHJlc3VsdHNfZm9yX3NvbWVfdGVzdC5mZXRjaCg1KQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGxlbihyZXN1bHRzX2Zvcl9zb21lX3Rlc3QpLCAyKQotCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwocmVzdWx0c19mb3Jfc29tZV90ZXN0WzBdLm5hbWUsICdzb21lLXRlc3Qn
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHNfZm9yX3NvbWVfdGVzdFsxXS5uYW1l
LCAnc29tZS10ZXN0JykKLQotICAgICAgICBpZiByZXN1bHRzX2Zvcl9zb21lX3Rlc3RbMF0udmFs
dWUgPT0gNTA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHNfZm9yX3NvbWVf
dGVzdFsxXS52YWx1ZSwgMzApCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHJlc3VsdHNfZm9yX3NvbWVfdGVzdFsxXS52YWx1ZSwgNTApCi0KLQotY2xhc3MgVGVz
dFJlc3VsdFRlc3RzKERhdGFTdG9yZVRlc3RzQmFzZSk6Ci0gICAgZGVmIHRlc3RfZ2V0X29yX2lu
c2VydF92YWx1ZShzZWxmKToKLSAgICAgICAgYnJhbmNoLCBwbGF0Zm9ybSwgYnVpbGRlciA9IF9j
cmVhdGVfc29tZV9idWlsZGVyKCkKLSAgICAgICAgYnVpbGQgPSBfY3JlYXRlX2J1aWxkKGJyYW5j
aCwgcGxhdGZvcm0sIGJ1aWxkZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VGhlcmVJc05vSW5zdGFu
Y2VPZihUZXN0UmVzdWx0KQotICAgICAgICByZXN1bHQgPSBUZXN0UmVzdWx0LmdldF9vcl9pbnNl
cnRfZnJvbV9wYXJzZWRfanNvbignc29tZS10ZXN0JywgYnVpbGQsIDUwKQotICAgICAgICBzZWxm
LmFzc2VydE9ubHlJbnN0YW5jZShyZXN1bHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVz
dWx0Lm5hbWUsICdzb21lLXRlc3QnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5i
dWlsZC5rZXkoKSwgYnVpbGQua2V5KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0
LnZhbHVlLCA1MC4wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC52YWx1ZU1lZGlh
biwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudmFsdWVTdGRldiwgTm9u
ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudmFsdWVNaW4sIE5vbmUpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnZhbHVlTWF4LCBOb25lKQotCi0gICAgZGVmIHRl
c3RfZ2V0X29yX2luc2VydF9zdGF0X3ZhbHVlKHNlbGYpOgotICAgICAgICBicmFuY2gsIHBsYXRm
b3JtLCBidWlsZGVyID0gX2NyZWF0ZV9zb21lX2J1aWxkZXIoKQotICAgICAgICBidWlsZCA9IF9j
cmVhdGVfYnVpbGQoYnJhbmNoLCBwbGF0Zm9ybSwgYnVpbGRlcikKLSAgICAgICAgc2VsZi5hc3Nl
cnRUaGVyZUlzTm9JbnN0YW5jZU9mKFRlc3RSZXN1bHQpCi0gICAgICAgIHJlc3VsdCA9IFRlc3RS
ZXN1bHQuZ2V0X29yX2luc2VydF9mcm9tX3BhcnNlZF9qc29uKCdzb21lLXRlc3QnLCBidWlsZCwK
LSAgICAgICAgICAgIHsiYXZnIjogNDAsICJtZWRpYW4iOiAiNDAuMSIsICJzdGRldiI6IDMuMjUs
ICJtaW4iOiAzMC41LCAibWF4IjogNDV9KQotICAgICAgICBzZWxmLmFzc2VydE9ubHlJbnN0YW5j
ZShyZXN1bHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm5hbWUsICdzb21lLXRl
c3QnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5idWlsZC5rZXkoKSwgYnVpbGQu
a2V5KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnZhbHVlLCA0MC4wKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC52YWx1ZU1lZGlhbiwgNDAuMSkKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudmFsdWVTdGRldiwgMy4yNSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChyZXN1bHQudmFsdWVNaW4sIDMwLjUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwocmVzdWx0LnZhbHVlTWF4LCA0NSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQu
dmFsdWVzLCBbXSkKLQotICAgIGRlZiB0ZXN0X2dldF9vcl9pbnNlcnRfc3RhdF92YWx1ZV93aXRo
X3ZhbHVlcyhzZWxmKToKLSAgICAgICAgYnJhbmNoLCBwbGF0Zm9ybSwgYnVpbGRlciA9IF9jcmVh
dGVfc29tZV9idWlsZGVyKCkKLSAgICAgICAgYnVpbGQgPSBfY3JlYXRlX2J1aWxkKGJyYW5jaCwg
cGxhdGZvcm0sIGJ1aWxkZXIpCi0gICAgICAgIHJlc3VsdCA9IFRlc3RSZXN1bHQuZ2V0X29yX2lu
c2VydF9mcm9tX3BhcnNlZF9qc29uKCdzb21lLXRlc3QnLCBidWlsZCwKLSAgICAgICAgICAgIHsi
YXZnIjogNDAsICJtZWRpYW4iOiAiNDAuMSIsICJzdGRldiI6IDMuMjUsICJtaW4iOiAzMC41LCAi
bWF4IjogNDUsICJ2YWx1ZXMiOiBbMS4wLCAyLjAsIDMuMF19KQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHJlc3VsdC52YWx1ZXMsIFsxLjAsIDIuMCwgMy4wXSkKLQotICAgIGRlZiB0ZXN0X3Jl
cGxhY2VfdG9fY2hhbmdlX3Rlc3RfbmFtZShzZWxmKToKLSAgICAgICAgYnJhbmNoLCBwbGF0Zm9y
bSwgYnVpbGRlciA9IF9jcmVhdGVfc29tZV9idWlsZGVyKCkKLSAgICAgICAgYnVpbGQgPSBfY3Jl
YXRlX2J1aWxkKGJyYW5jaCwgcGxhdGZvcm0sIGJ1aWxkZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0
VGhlcmVJc05vSW5zdGFuY2VPZihUZXN0UmVzdWx0KQotICAgICAgICByZXN1bHQgPSBUZXN0UmVz
dWx0LmdldF9vcl9pbnNlcnRfZnJvbV9wYXJzZWRfanNvbignc29tZS10ZXN0JywgYnVpbGQsIDUw
KQotICAgICAgICBzZWxmLmFzc2VydE9ubHlJbnN0YW5jZShyZXN1bHQpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwocmVzdWx0Lm5hbWUsICdzb21lLXRlc3QnKQotCi0gICAgICAgIG5ld19yZXN1
bHQgPSByZXN1bHQucmVwbGFjZV90b19jaGFuZ2VfdGVzdF9uYW1lKCdvdGhlci10ZXN0JykKLSAg
ICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQsIG5ld19yZXN1bHQpCi0gICAgICAgIHNl
bGYuYXNzZXJ0T25seUluc3RhbmNlKG5ld19yZXN1bHQpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChuZXdfcmVzdWx0Lm5hbWUsICdvdGhlci10ZXN0JykKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChuZXdfcmVzdWx0LmJ1aWxkLmtleSgpLCByZXN1bHQuYnVpbGQua2V5KCkpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwobmV3X3Jlc3VsdC52YWx1ZSwgcmVzdWx0LnZhbHVlKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKG5ld19yZXN1bHQudmFsdWVNZWRpYW4sIE5vbmUpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwobmV3X3Jlc3VsdC52YWx1ZVN0ZGV2LCBOb25lKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKG5ld19yZXN1bHQudmFsdWVNaW4sIE5vbmUpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwobmV3X3Jlc3VsdC52YWx1ZU1heCwgTm9uZSkKLQotICAgIGRlZiB0ZXN0X3Jl
cGxhY2VfdG9fY2hhbmdlX3Rlc3RfbmFtZV93aXRoX3N0YXRfdmFsdWUoc2VsZik6Ci0gICAgICAg
IGJyYW5jaCwgcGxhdGZvcm0sIGJ1aWxkZXIgPSBfY3JlYXRlX3NvbWVfYnVpbGRlcigpCi0gICAg
ICAgIGJ1aWxkID0gX2NyZWF0ZV9idWlsZChicmFuY2gsIHBsYXRmb3JtLCBidWlsZGVyKQotICAg
ICAgICBzZWxmLmFzc2VydFRoZXJlSXNOb0luc3RhbmNlT2YoVGVzdFJlc3VsdCkKLSAgICAgICAg
cmVzdWx0ID0gVGVzdFJlc3VsdC5nZXRfb3JfaW5zZXJ0X2Zyb21fcGFyc2VkX2pzb24oJ3NvbWUt
dGVzdCcsIGJ1aWxkLAotICAgICAgICAgICAgeyJhdmciOiA0MCwgIm1lZGlhbiI6ICI0MC4xIiwg
InN0ZGV2IjogMy4yNSwgIm1pbiI6IDMwLjUsICJtYXgiOiA0NX0pCi0gICAgICAgIHNlbGYuYXNz
ZXJ0T25seUluc3RhbmNlKHJlc3VsdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQu
bmFtZSwgJ3NvbWUtdGVzdCcpCi0KLSAgICAgICAgbmV3X3Jlc3VsdCA9IHJlc3VsdC5yZXBsYWNl
X3RvX2NoYW5nZV90ZXN0X25hbWUoJ290aGVyLXRlc3QnKQotICAgICAgICBzZWxmLmFzc2VydE5v
dEVxdWFsKHJlc3VsdCwgbmV3X3Jlc3VsdCkKLSAgICAgICAgc2VsZi5hc3NlcnRPbmx5SW5zdGFu
Y2UobmV3X3Jlc3VsdCkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19yZXN1bHQubmFt
ZSwgJ290aGVyLXRlc3QnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19yZXN1bHQuYnVp
bGQua2V5KCksIHJlc3VsdC5idWlsZC5rZXkoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChu
ZXdfcmVzdWx0LnZhbHVlLCByZXN1bHQudmFsdWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
cmVzdWx0LnZhbHVlLCA0MC4wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC52YWx1
ZU1lZGlhbiwgNDAuMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudmFsdWVTdGRl
diwgMy4yNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudmFsdWVNaW4sIDMwLjUp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnZhbHVlTWF4LCA0NSkKLQotICAgIGRl
ZiB0ZXN0X3JlcGxhY2VfdG9fY2hhbmdlX3Rlc3RfbmFtZV9vdmVycmlkZXNfY29uZmxpY3Rpbmdf
cmVzdWx0KHNlbGYpOgotICAgICAgICBicmFuY2gsIHBsYXRmb3JtLCBidWlsZGVyID0gX2NyZWF0
ZV9zb21lX2J1aWxkZXIoKQotICAgICAgICBidWlsZCA9IF9jcmVhdGVfYnVpbGQoYnJhbmNoLCBw
bGF0Zm9ybSwgYnVpbGRlcikKLSAgICAgICAgc2VsZi5hc3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9m
KFRlc3RSZXN1bHQpCi0gICAgICAgIHJlc3VsdCA9IFRlc3RSZXN1bHQuZ2V0X29yX2luc2VydF9m
cm9tX3BhcnNlZF9qc29uKCdzb21lLXRlc3QnLCBidWlsZCwgMjApCi0gICAgICAgIHNlbGYuYXNz
ZXJ0T25seUluc3RhbmNlKHJlc3VsdCkKLQotICAgICAgICBjb25mbGljdGluZ19yZXN1bHQgPSBU
ZXN0UmVzdWx0LmdldF9vcl9pbnNlcnRfZnJvbV9wYXJzZWRfanNvbignb3RoZXItdGVzdCcsIGJ1
aWxkLCAxMCkKLQotICAgICAgICBuZXdfcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2VfdG9fY2hhbmdl
X3Rlc3RfbmFtZSgnb3RoZXItdGVzdCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVz
dWx0LCBuZXdfcmVzdWx0KQotICAgICAgICBzZWxmLmFzc2VydE9ubHlJbnN0YW5jZShuZXdfcmVz
dWx0KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X3Jlc3VsdC5uYW1lLCAnb3RoZXIt
dGVzdCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdFJlc3VsdC5nZXQoY29uZmxpY3Rp
bmdfcmVzdWx0LmtleSgpKS52YWx1ZSwgMjApCi0KLQotY2xhc3MgUmVwb3J0TG9nVGVzdHMoRGF0
YVN0b3JlVGVzdHNCYXNlKToKLSAgICBkZWYgX2NyZWF0ZV9sb2dfd2l0aF9wYXlsb2FkKHNlbGYs
IHBheWxvYWQpOgotICAgICAgICByZXR1cm4gUmVwb3J0TG9nKHRpbWVzdGFtcD1kYXRldGltZS5u
b3coKSwgaGVhZGVycz0nc29tZSBoZWFkZXJzJywgcGF5bG9hZD1wYXlsb2FkKQotCi0gICAgZGVm
IHRlc3RfcGFyc2VkX3BheWxvYWQoc2VsZik6Ci0gICAgICAgIGxvZyA9IHNlbGYuX2NyZWF0ZV9s
b2dfd2l0aF9wYXlsb2FkKCcnKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdfcGFyc2VkJyBp
biBsb2cuX19kaWN0X18pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLl9wYXJzZWRfcGF5
bG9hZCgpLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2cuX3BhcnNlZCwgRmFs
c2UpCi0KLSAgICAgICAgbG9nID0gc2VsZi5fY3JlYXRlX2xvZ193aXRoX3BheWxvYWQoJ3sia2V5
IjogInZhbHVlIiwgImFub3RoZXIga2V5IjogMX0nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGxvZy5fcGFyc2VkX3BheWxvYWQoKSwgeyJrZXkiOiAidmFsdWUiLCAiYW5vdGhlciBrZXkiOiAx
fSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2cuX3BhcnNlZCwgeyJrZXkiOiAidmFsdWUi
LCAiYW5vdGhlciBrZXkiOiAxfSkKLQotICAgIGRlZiB0ZXN0X2dldF92YWx1ZShzZWxmKToKLSAg
ICAgICAgbG9nID0gc2VsZi5fY3JlYXRlX2xvZ193aXRoX3BheWxvYWQoJ3sic3RyaW5nIjogInZh
bHVlIiwgImludGVnZXIiOiAxLCAiZmxvYXQiOiAxLjF9JykKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChsb2cuZ2V0X3ZhbHVlKCdzdHJpbmcnKSwgJ3ZhbHVlJykKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChsb2cuZ2V0X3ZhbHVlKCdpbnRlZ2VyJyksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwobG9nLmdldF92YWx1ZSgnZmxvYXQnKSwgMS4xKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGxvZy5nZXRfdmFsdWUoJ2JhZCcpLCBOb25lKQotCi0gICAgZGVmIHRlc3RfcmVzdWx0cyhz
ZWxmKToKLSAgICAgICAgbG9nID0gc2VsZi5fY3JlYXRlX2xvZ193aXRoX3BheWxvYWQoJ3sicmVz
dWx0cyI6IDEyM30nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZy5yZXN1bHRzKCksIDEy
MykKLQotICAgICAgICBsb2cgPSBzZWxmLl9jcmVhdGVfbG9nX3dpdGhfcGF5bG9hZCgneyJrZXki
OiAidmFsdWUifScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLnJlc3VsdHMoKSwgTm9u
ZSkKLQotICAgIGRlZiB0ZXN0X3Jlc3VsdHNfYXJlX3dlbGxfZm9ybWVkKHNlbGYpOgotCi0gICAg
ICAgIGRlZiBhc3NlcnRfcmVzdWx0c19hcmVfd2VsbF9mb3JtZWQoanNvbiwgZXhwZWN0ZWQpOgot
ICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9jcmVhdGVfbG9nX3dpdGhfcGF5bG9h
ZChqc29uKS5yZXN1bHRzX2FyZV93ZWxsX2Zvcm1lZCgpLCBleHBlY3RlZCkKLQotICAgICAgICBh
c3NlcnRfcmVzdWx0c19hcmVfd2VsbF9mb3JtZWQoJ3sicmVzdWx0cyI6IDEyM30nLCBGYWxzZSkK
LSAgICAgICAgYXNzZXJ0X3Jlc3VsdHNfYXJlX3dlbGxfZm9ybWVkKCd7InJlc3VsdHMiOiB7InRl
c3QiOiAxMjN9fScsIFRydWUpCi0gICAgICAgIGFzc2VydF9yZXN1bHRzX2FyZV93ZWxsX2Zvcm1l
ZCgneyJyZXN1bHRzIjogeyJ0ZXN0IjogMTIzLCAib3RoZXItdGVzdCI6IDQ1Nn19JywgVHJ1ZSkK
LSAgICAgICAgYXNzZXJ0X3Jlc3VsdHNfYXJlX3dlbGxfZm9ybWVkKCd7InJlc3VsdHMiOiB7InRl
c3QiOiAxMjMsICJvdGhlci10ZXN0IjogNDU2LCAiYmFkLXRlc3QiOiAiaGkifX0nLCBGYWxzZSkK
LSAgICAgICAgYXNzZXJ0X3Jlc3VsdHNfYXJlX3dlbGxfZm9ybWVkKCd7InJlc3VsdHMiOiB7InRl
c3QiOiB7ImF2ZyI6IDQ1Nn19fScsIFRydWUpCi0gICAgICAgIGFzc2VydF9yZXN1bHRzX2FyZV93
ZWxsX2Zvcm1lZCgneyJyZXN1bHRzIjogeyJ0ZXN0IjogeyJhdmciOiA0NTYsICJtZWRpYW4iOiAi
aGVsbG8ifX19JywgRmFsc2UpCi0gICAgICAgIGFzc2VydF9yZXN1bHRzX2FyZV93ZWxsX2Zvcm1l
ZCgneyJyZXN1bHRzIjogeyJ0ZXN0IjogeyJhdmciOiA0NTYsICJtZWRpYW4iOiA3ODl9fX0nLCBU
cnVlKQotICAgICAgICBhc3NlcnRfcmVzdWx0c19hcmVfd2VsbF9mb3JtZWQoJ3sicmVzdWx0cyI6
IHsidGVzdCI6IHsiYXZnIjogNDU2LCAidW5pdCI6ICJieXRlcyJ9fX0nLCBUcnVlKQotICAgICAg
ICBhc3NlcnRfcmVzdWx0c19hcmVfd2VsbF9mb3JtZWQoJ3sicmVzdWx0cyI6IHsidGVzdCI6IHsi
YXZnIjogNDU2LCAidW5pdCI6ICJieXRlcyIsICJ2YWx1ZXMiOiBbMS4wLCAyLjAsIDMuMF19fX0n
LCBUcnVlKQotCi0gICAgICAgIGFzc2VydF9yZXN1bHRzX2FyZV93ZWxsX2Zvcm1lZCgnW10nLCBG
YWxzZSkKLSAgICAgICAgYXNzZXJ0X3Jlc3VsdHNfYXJlX3dlbGxfZm9ybWVkKCdbeyJyZXN1bHRz
IjogeyJ0ZXN0IjogMTIzfX1dJywgVHJ1ZSkKLSAgICAgICAgYXNzZXJ0X3Jlc3VsdHNfYXJlX3dl
bGxfZm9ybWVkKCdbeyJyZXN1bHRzIjogeyJ0ZXN0IjogMTIzfX0sIHsicmVzdWx0cyI6IHsidGVz
dCI6IDEyM319XScsIEZhbHNlKQotICAgICAgICBhc3NlcnRfcmVzdWx0c19hcmVfd2VsbF9mb3Jt
ZWQoJ1t7InJlc3VsdHMiOiB7InRlc3QiOiB7ImF2ZyI6IDQ1NiwgInVuaXQiOiAiYnl0ZXMiLCAi
dmFsdWVzIjogWzEuMCwgMi4wLCAzLjBdfX19XScsIFRydWUpCi0KLSAgICBkZWYgdGVzdF9idWls
ZGVyKHNlbGYpOgotICAgICAgICBsb2cgPSBzZWxmLl9jcmVhdGVfbG9nX3dpdGhfcGF5bG9hZCgn
eyJrZXkiOiAidmFsdWUifScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLmJ1aWxkZXIo
KSwgTm9uZSkKLQotICAgICAgICBidWlsZGVyX25hbWUgPSAiQ2hyb21pdW0gTWFjIFJlbGVhc2Ug
KFBlcmYpIgotICAgICAgICBsb2cgPSBzZWxmLl9jcmVhdGVfbG9nX3dpdGhfcGF5bG9hZCgneyJi
dWlsZGVyLW5hbWUiOiAiJXMifScgJSBidWlsZGVyX25hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwobG9nLmJ1aWxkZXIoKSwgTm9uZSkKLQotICAgICAgICBidWlsZGVyX2tleSA9IEJ1aWxk
ZXIuY3JlYXRlKGJ1aWxkZXJfbmFtZSwgJ3NvbWUgcGFzc3dvcmQnKQotICAgICAgICBsb2cgPSBz
ZWxmLl9jcmVhdGVfbG9nX3dpdGhfcGF5bG9hZCgneyJidWlsZGVyLW5hbWUiOiAiJXMifScgJSBi
dWlsZGVyX25hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLmJ1aWxkZXIoKS5rZXko
KSwgYnVpbGRlcl9rZXkpCi0KLSAgICBkZWYgdGVzdF9icmFuY2goc2VsZik6Ci0gICAgICAgIGxv
ZyA9IHNlbGYuX2NyZWF0ZV9sb2dfd2l0aF9wYXlsb2FkKCd7ImtleSI6ICJ2YWx1ZSJ9JykKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2cuYnJhbmNoKCksIE5vbmUpCi0KLSAgICAgICAgbG9n
ID0gc2VsZi5fY3JlYXRlX2xvZ193aXRoX3BheWxvYWQoJ3siYnJhbmNoIjogInNvbWUtYnJhbmNo
In0nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZy5icmFuY2goKSwgTm9uZSkKLQotICAg
ICAgICBicmFuY2ggPSBCcmFuY2guY3JlYXRlX2lmX3Bvc3NpYmxlKCJzb21lLWJyYW5jaCIsICJT
b21lIEJyYW5jaCIpCi0gICAgICAgIGxvZyA9IHNlbGYuX2NyZWF0ZV9sb2dfd2l0aF9wYXlsb2Fk
KCd7ImJyYW5jaCI6ICJzb21lLWJyYW5jaCJ9JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChs
b2cuYnJhbmNoKCkua2V5KCksIGJyYW5jaC5rZXkoKSkKLQotICAgIGRlZiB0ZXN0X3BsYXRmb3Jt
KHNlbGYpOgotICAgICAgICBsb2cgPSBzZWxmLl9jcmVhdGVfbG9nX3dpdGhfcGF5bG9hZCgneyJr
ZXkiOiAidmFsdWUifScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLnBsYXRmb3JtKCks
IE5vbmUpCi0KLSAgICAgICAgbG9nID0gc2VsZi5fY3JlYXRlX2xvZ193aXRoX3BheWxvYWQoJ3si
cGxhdGZvcm0iOiAic29tZS1wbGF0Zm9ybSJ9JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChs
b2cucGxhdGZvcm0oKSwgTm9uZSkKLQotICAgICAgICBwbGF0Zm9ybSA9IFBsYXRmb3JtLmNyZWF0
ZV9pZl9wb3NzaWJsZSgic29tZS1wbGF0Zm9ybSIsICJTb21lIFBsYXRmb3JtIikKLSAgICAgICAg
bG9nID0gc2VsZi5fY3JlYXRlX2xvZ193aXRoX3BheWxvYWQoJ3sicGxhdGZvcm0iOiAic29tZS1w
bGF0Zm9ybSJ9JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2cucGxhdGZvcm0oKS5rZXko
KSwgcGxhdGZvcm0ua2V5KCkpCi0KLSAgICBkZWYgdGVzdF9idWlsZF9udW1iZXIoc2VsZik6Ci0g
ICAgICAgIGxvZyA9IHNlbGYuX2NyZWF0ZV9sb2dfd2l0aF9wYXlsb2FkKCd7ImJ1aWxkLW51bWJl
ciI6IDEyM30nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZy5idWlsZF9udW1iZXIoKSwg
MTIzKQotCi0gICAgICAgIGxvZyA9IHNlbGYuX2NyZWF0ZV9sb2dfd2l0aF9wYXlsb2FkKCd7Imtl
eSI6ICJ2YWx1ZSJ9JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2cuYnVpbGRfbnVtYmVy
KCksIE5vbmUpCi0KLSAgICBkZWYgdGVzdF93ZWJraXRfcmV2aXNpb24oc2VsZik6Ci0gICAgICAg
IGxvZyA9IHNlbGYuX2NyZWF0ZV9sb2dfd2l0aF9wYXlsb2FkKCd7ImtleSI6ICJ2YWx1ZSJ9JykK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2cud2Via2l0X3JldmlzaW9uKCksIE5vbmUpCi0K
LSAgICAgICAgbG9nID0gc2VsZi5fY3JlYXRlX2xvZ193aXRoX3BheWxvYWQoJ3sid2Via2l0LXJl
dmlzaW9uIjogMTIzfScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLndlYmtpdF9yZXZp
c2lvbigpLCAxMjMpCi0KLSAgICBkZWYgdGVzdF9jaHJvbWl1bV9yZXZpc2lvbihzZWxmKToKLSAg
ICAgICAgbG9nID0gc2VsZi5fY3JlYXRlX2xvZ193aXRoX3BheWxvYWQoJ3siY2hyb21pdW0tcmV2
aXNpb24iOiAxMjN9JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2cuY2hyb21pdW1fcmV2
aXNpb24oKSwgMTIzKQotCi0gICAgICAgIGxvZyA9IHNlbGYuX2NyZWF0ZV9sb2dfd2l0aF9wYXls
b2FkKCd7ImtleSI6ICJ2YWx1ZSJ9JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2cuY2hy
b21pdW1fcmV2aXNpb24oKSwgTm9uZSkKLQotICAgIGRlZiB0ZXN0X3Jlc3VsdHNfaW5fYXJyYXko
c2VsZik6Ci0gICAgICAgIHBsYXRmb3JtID0gUGxhdGZvcm0uY3JlYXRlX2lmX3Bvc3NpYmxlKCJz
b21lLXBsYXRmb3JtIiwgIlNvbWUgUGxhdGZvcm0iKQotICAgICAgICBsb2cgPSBzZWxmLl9jcmVh
dGVfbG9nX3dpdGhfcGF5bG9hZCgnW3sicGxhdGZvcm0iOiAic29tZS1wbGF0Zm9ybSIsICJidWls
ZC1udW1iZXIiOiAxMjMsICJ3ZWJraXQtcmV2aXNpb24iOiA0NTZ9XScpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwobG9nLnBsYXRmb3JtKCkua2V5KCksIHBsYXRmb3JtLmtleSgpKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGxvZy5idWlsZF9udW1iZXIoKSwgMTIzKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGxvZy53ZWJraXRfcmV2aXNpb24oKSwgNDU2KQotCi0KLWNsYXNzIFBlcnNp
c3RlbnRDYWNoZVRlc3RzKERhdGFTdG9yZVRlc3RzQmFzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYp
OgotICAgICAgICBzdXBlcihQZXJzaXN0ZW50Q2FjaGVUZXN0cywgc2VsZikuc2V0VXAoKQotICAg
ICAgICBzZWxmLnRlc3RiZWQuaW5pdF9tZW1jYWNoZV9zdHViKCkKLQotICAgIGRlZiBfYXNzZXJ0
X3BlcnNpc3RlbnRfY2FjaGUoc2VsZiwgbmFtZSwgdmFsdWUpOgotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKFBlcnNpc3RlbnRDYWNoZS5nZXRfYnlfa2V5X25hbWUobmFtZSkudmFsdWUsIHZhbHVl
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWNhY2hlLmdldChuYW1lKSwgdmFsdWUpCi0K
LSAgICBkZWYgdGVzdF9zZXRfY2FjaGUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VGhlcmVJ
c05vSW5zdGFuY2VPZihQZXJzaXN0ZW50Q2FjaGUpCi0KLSAgICAgICAgUGVyc2lzdGVudENhY2hl
LnNldF9jYWNoZSgnc29tZS1jYWNoZScsICdzb21lIGRhdGEnKQotICAgICAgICBzZWxmLl9hc3Nl
cnRfcGVyc2lzdGVudF9jYWNoZSgnc29tZS1jYWNoZScsICdzb21lIGRhdGEnKQotCi0gICAgICAg
IFBlcnNpc3RlbnRDYWNoZS5zZXRfY2FjaGUoJ3NvbWUtY2FjaGUnLCAnc29tZSBvdGhlciBkYXRh
JykKLQotICAgICAgICBzZWxmLl9hc3NlcnRfcGVyc2lzdGVudF9jYWNoZSgnc29tZS1jYWNoZScs
ICdzb21lIG90aGVyIGRhdGEnKQotCi0gICAgZGVmIHRlc3RfZ2V0X2NhY2hlKHNlbGYpOgotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWNhY2hlLmdldCgnc29tZS1jYWNoZScpLCBOb25lKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBlcnNpc3RlbnRDYWNoZS5nZXRfY2FjaGUoJ3NvbWUt
Y2FjaGUnKSwgTm9uZSkKLQotICAgICAgICBQZXJzaXN0ZW50Q2FjaGUuc2V0X2NhY2hlKCdzb21l
LWNhY2hlJywgJ3NvbWUgZGF0YScpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1jYWNo
ZS5nZXQoJ3NvbWUtY2FjaGUnKSwgJ3NvbWUgZGF0YScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoUGVyc2lzdGVudENhY2hlLmdldF9jYWNoZSgnc29tZS1jYWNoZScpLCAnc29tZSBkYXRhJykK
LQotICAgICAgICBtZW1jYWNoZS5kZWxldGUoJ3NvbWUtY2FjaGUnKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKG1lbWNhY2hlLmdldCgnc29tZS1jYWNoZScpLCBOb25lKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKFBlcnNpc3RlbnRDYWNoZS5nZXRfY2FjaGUoJ3NvbWUtY2FjaGUnKSwgJ3Nv
bWUgZGF0YScpCi0KLQotY2xhc3MgUnVuc1Rlc3QoRGF0YVN0b3JlVGVzdHNCYXNlKToKLSAgICBk
ZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1cGVyKFJ1bnNUZXN0LCBzZWxmKS5zZXRVcCgpCi0g
ICAgICAgIHNlbGYudGVzdGJlZC5pbml0X21lbWNhY2hlX3N0dWIoKQotCi0gICAgZGVmIF9jcmVh
dGVfcmVzdWx0cyhzZWxmLCBicmFuY2gsIHBsYXRmb3JtLCBidWlsZGVyLCB0ZXN0X25hbWUsIHZh
bHVlcywgdGltZXN0YW1wcz1Ob25lLCBzdGFydGluZ19yZXZpc2lvbj0xMDApOgotICAgICAgICBi
dWlsZHMgPSBbXQotICAgICAgICByZXN1bHRzID0gW10KLSAgICAgICAgZm9yIGksIHZhbHVlIGlu
IGVudW1lcmF0ZSh2YWx1ZXMpOgotICAgICAgICAgICAgYnVpbGQgPSBCdWlsZChicmFuY2g9YnJh
bmNoLCBwbGF0Zm9ybT1wbGF0Zm9ybSwgYnVpbGRlcj1idWlsZGVyLAotICAgICAgICAgICAgICAg
IGJ1aWxkTnVtYmVyPWksIHJldmlzaW9uPXN0YXJ0aW5nX3JldmlzaW9uICsgaSwgdGltZXN0YW1w
PXRpbWVzdGFtcHNbaV0gaWYgdGltZXN0YW1wcyBlbHNlIGRhdGV0aW1lLm5vdygpKQotICAgICAg
ICAgICAgYnVpbGQucHV0KCkKLSAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RSZXN1bHQobmFtZT10
ZXN0X25hbWUsIGJ1aWxkPWJ1aWxkLCB2YWx1ZT12YWx1ZSkKLSAgICAgICAgICAgIHJlc3VsdC5w
dXQoKQotICAgICAgICAgICAgYnVpbGRzLmFwcGVuZChidWlsZCkKLSAgICAgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKHJlc3VsdCkKLSAgICAgICAgcmV0dXJuIGJ1aWxkcywgcmVzdWx0cwotCi0gICAg
ZGVmIHRlc3RfZ2VuZXJhdGVfcnVucyhzZWxmKToKLSAgICAgICAgc29tZV9icmFuY2ggPSBCcmFu
Y2guY3JlYXRlX2lmX3Bvc3NpYmxlKCdzb21lLWJyYW5jaCcsICdTb21lIEJyYW5jaCcpCi0gICAg
ICAgIHNvbWVfcGxhdGZvcm0gPSBQbGF0Zm9ybS5jcmVhdGVfaWZfcG9zc2libGUoJ3NvbWUtcGxh
dGZvcm0nLCAnU29tZSBQbGF0Zm9ybScpCi0gICAgICAgIHNvbWVfYnVpbGRlciA9IEJ1aWxkZXIu
Z2V0KEJ1aWxkZXIuY3JlYXRlKCdzb21lLWJ1aWxkZXInLCAnU29tZSBCdWlsZGVyJykpCi0gICAg
ICAgIHNvbWVfdGVzdCA9IFRlc3QudXBkYXRlX29yX2luc2VydCgnc29tZS10ZXN0Jywgc29tZV9i
cmFuY2gsIHNvbWVfcGxhdGZvcm0pCi0KLSAgICAgICAgYnVpbGRzLCByZXN1bHRzID0gc2VsZi5f
Y3JlYXRlX3Jlc3VsdHMoc29tZV9icmFuY2gsIHNvbWVfcGxhdGZvcm0sIHNvbWVfYnVpbGRlciwg
J3NvbWUtdGVzdCcsIFs1MC4wLCA1MS4wLCA1Mi4wLCA0OS4wLCA0OC4wXSkKLSAgICAgICAgbGFz
dF9pID0gMAotICAgICAgICBmb3IgaSwgKGJ1aWxkLCByZXN1bHQpIGluIGVudW1lcmF0ZShSdW5z
Ll9nZW5lcmF0ZV9ydW5zKHNvbWVfYnJhbmNoLCBzb21lX3BsYXRmb3JtLCBzb21lX3Rlc3QpKToK
LSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVpbGQuYnVpbGROdW1iZXIsIGkpCi0gICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1aWxkLnJldmlzaW9uLCAxMDAgKyBpKQotICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQubmFtZSwgJ3NvbWUtdGVzdCcpCi0gICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC52YWx1ZSwgcmVzdWx0c1tpXS52YWx1ZSkKLSAg
ICAgICAgICAgIGxhc3RfaSA9IGkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxhc3RfaSArIDEs
IGxlbihyZXN1bHRzKSkKLQotICAgIGRlZiB0ZXN0X3VwZGF0ZV9vcl9pbnNlcnQoc2VsZik6Ci0g
ICAgICAgIHNvbWVfYnJhbmNoID0gQnJhbmNoLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1icmFu
Y2gnLCAnU29tZSBCcmFuY2gnKQotICAgICAgICBzb21lX3BsYXRmb3JtID0gUGxhdGZvcm0uY3Jl
YXRlX2lmX3Bvc3NpYmxlKCdzb21lLXBsYXRmb3JtJywgJ1NvbWUgUGxhdGZvcm0nKQotICAgICAg
ICBzb21lX2J1aWxkZXIgPSBCdWlsZGVyLmdldChCdWlsZGVyLmNyZWF0ZSgnc29tZS1idWlsZGVy
JywgJ1NvbWUgQnVpbGRlcicpKQotICAgICAgICBzb21lX3Rlc3QgPSBUZXN0LnVwZGF0ZV9vcl9p
bnNlcnQoJ3NvbWUtdGVzdCcsIHNvbWVfYnJhbmNoLCBzb21lX3BsYXRmb3JtKQotICAgICAgICBz
ZWxmLmFzc2VydFRoZXJlSXNOb0luc3RhbmNlT2YoUnVucykKLQotICAgICAgICBydW5zID0gUnVu
cy51cGRhdGVfb3JfaW5zZXJ0KHNvbWVfYnJhbmNoLCBzb21lX3BsYXRmb3JtLCBzb21lX3Rlc3Qp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0T25seUluc3RhbmNlKHJ1bnMpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwocnVucy5qc29uX3J1bnMsICcnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1
bnMuanNvbl9hdmVyYWdlcywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVucy5qc29u
X21pbiwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5zLmpzb25fbWF4LCBOb25l
KQotICAgICAgICBvbGRfbWVtY2FjaGVfdmFsdWUgPSBtZW1jYWNoZS5nZXQoUnVucy5fa2V5X25h
bWUoc29tZV9icmFuY2guaWQsIHNvbWVfcGxhdGZvcm0uaWQsIHNvbWVfdGVzdC5pZCkpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShvbGRfbWVtY2FjaGVfdmFsdWUpCi0KLSAgICAgICAgcnVucy5k
ZWxldGUoKQotICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNOb0luc3RhbmNlT2YoUnVucykKLQot
ICAgICAgICBidWlsZHMsIHJlc3VsdHMgPSBzZWxmLl9jcmVhdGVfcmVzdWx0cyhzb21lX2JyYW5j
aCwgc29tZV9wbGF0Zm9ybSwgc29tZV9idWlsZGVyLCAnc29tZS10ZXN0JywgWzUwLjBdKQotICAg
ICAgICBydW5zID0gUnVucy51cGRhdGVfb3JfaW5zZXJ0KHNvbWVfYnJhbmNoLCBzb21lX3BsYXRm
b3JtLCBzb21lX3Rlc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0T25seUluc3RhbmNlKHJ1bnMpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydW5zLmpzb25fcnVucy5zdGFydHN3aXRoKCdbNSxbNCww
LDEwMCxudWxsXSwnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uLmxvYWRzKCd7JyAr
IHJ1bnMuanNvbl9hdmVyYWdlcyArICd9JyksIHsiMTAwIjogNTAuMH0pCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwocnVucy5qc29uX21pbiwgNTAuMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChydW5zLmpzb25fbWF4LCA1MC4wKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG1lbWNh
Y2hlLmdldChSdW5zLl9rZXlfbmFtZShzb21lX2JyYW5jaC5pZCwgc29tZV9wbGF0Zm9ybS5pZCwg
c29tZV90ZXN0LmlkKSksIG9sZF9tZW1jYWNoZV92YWx1ZSkKLQotICAgIGRlZiB0ZXN0X3VwZGF0
ZV9pbmNyZW1lbnRhbGx5KHNlbGYpOgotICAgICAgICBzb21lX2JyYW5jaCA9IEJyYW5jaC5jcmVh
dGVfaWZfcG9zc2libGUoJ3NvbWUtYnJhbmNoJywgJ1NvbWUgQnJhbmNoJykKLSAgICAgICAgc29t
ZV9wbGF0Zm9ybSA9IFBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1wbGF0Zm9ybScs
ICdTb21lIFBsYXRmb3JtJykKLSAgICAgICAgc29tZV9idWlsZGVyID0gQnVpbGRlci5nZXQoQnVp
bGRlci5jcmVhdGUoJ3NvbWUtYnVpbGRlcicsICdTb21lIEJ1aWxkZXInKSkKLSAgICAgICAgc29t
ZV90ZXN0ID0gVGVzdC51cGRhdGVfb3JfaW5zZXJ0KCdzb21lLXRlc3QnLCBzb21lX2JyYW5jaCwg
c29tZV9wbGF0Zm9ybSkKLSAgICAgICAgc2VsZi5hc3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9mKFJ1
bnMpCi0KLSAgICAgICAgdGltZXN0YW1wcyA9IFtkYXRldGltZS5ub3coKSwgZGF0ZXRpbWUubm93
KCldCi0gICAgICAgIGJ1aWxkcywgcmVzdWx0cyA9IHNlbGYuX2NyZWF0ZV9yZXN1bHRzKHNvbWVf
YnJhbmNoLCBzb21lX3BsYXRmb3JtLCBzb21lX2J1aWxkZXIsICdzb21lLXRlc3QnLCBbNTAuMCwg
NTIuMF0sIHRpbWVzdGFtcHMpCi0gICAgICAgIHJ1bnMgPSBSdW5zLnVwZGF0ZV9vcl9pbnNlcnQo
c29tZV9icmFuY2gsIHNvbWVfcGxhdGZvcm0sIHNvbWVfdGVzdCkKLSAgICAgICAgc2VsZi5hc3Nl
cnRPbmx5SW5zdGFuY2UocnVucykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uLmxvYWRz
KCdbJyArIHJ1bnMuanNvbl9ydW5zICsgJ10nKSwKLSAgICAgICAgICAgIFtbNSwgWzQsIDAsIDEw
MCwgTm9uZV0sIG1rdGltZSh0aW1lc3RhbXBzWzBdLnRpbWV0dXBsZSgpKSwgNTAuMCwgMCwgW10s
IE5vbmUsIE5vbmVdLAotICAgICAgICAgICAgWzcsIFs2LCAxLCAxMDEsIE5vbmVdLCBta3RpbWUo
dGltZXN0YW1wc1sxXS50aW1ldHVwbGUoKSksIDUyLjAsIDAsIFtdLCBOb25lLCBOb25lXV0pCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5sb2FkcygneycgKyBydW5zLmpzb25fYXZlcmFn
ZXMgKyAnfScpLCB7IjEwMCI6IDUwLjAsICIxMDEiOiA1Mi4wfSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChydW5zLmpzb25fbWluLCA1MC4wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1
bnMuanNvbl9tYXgsIDUyLjApCi0KLSAgICAgICAgdGltZXN0YW1wcy5hcHBlbmQoZGF0ZXRpbWUu
bm93KCkpCi0gICAgICAgIGJ1aWxkcywgcmVzdWx0cyA9IHNlbGYuX2NyZWF0ZV9yZXN1bHRzKHNv
bWVfYnJhbmNoLCBzb21lX3BsYXRmb3JtLCBzb21lX2J1aWxkZXIsICdzb21lLXRlc3QnLCBbNDgu
MF0sCi0gICAgICAgICAgICB0aW1lc3RhbXBzWzI6XSwgc3RhcnRpbmdfcmV2aXNpb249MTAyKQot
ICAgICAgICBydW5zLnVwZGF0ZV9pbmNyZW1lbnRhbGx5KGJ1aWxkc1swXSwgcmVzdWx0c1swXSkK
LQotICAgICAgICBzZWxmLmFzc2VydE9ubHlJbnN0YW5jZShydW5zKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGpzb24ubG9hZHMoJ1snICsgcnVucy5qc29uX3J1bnMgKyAnXScpLAotICAgICAg
ICAgICAgW1s1LCBbNCwgMCwgMTAwLCBOb25lXSwgbWt0aW1lKHRpbWVzdGFtcHNbMF0udGltZXR1
cGxlKCkpLCA1MC4wLCAwLCBbXSwgTm9uZSwgTm9uZV0sCi0gICAgICAgICAgICBbNywgWzYsIDEs
IDEwMSwgTm9uZV0sIG1rdGltZSh0aW1lc3RhbXBzWzFdLnRpbWV0dXBsZSgpKSwgNTIuMCwgMCwg
W10sIE5vbmUsIE5vbmVdLAotICAgICAgICAgICAgWzksIFs4LCAwLCAxMDIsIE5vbmVdLCBta3Rp
bWUodGltZXN0YW1wc1syXS50aW1ldHVwbGUoKSksIDQ4LjAsIDAsIFtdLCBOb25lLCBOb25lXV0p
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5sb2FkcygneycgKyBydW5zLmpzb25fYXZl
cmFnZXMgKyAnfScpLCB7IjEwMCI6IDUwLjAsICIxMDEiOiA1Mi4wLCAiMTAyIjogNDguMH0pCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVucy5qc29uX21pbiwgNDguMCkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChydW5zLmpzb25fbWF4LCA1Mi4wKQotCi0gICAgZGVmIHRlc3RfanNvbl9i
eV9pZHMoc2VsZik6Ci0gICAgICAgIHNvbWVfYnJhbmNoID0gQnJhbmNoLmNyZWF0ZV9pZl9wb3Nz
aWJsZSgnc29tZS1icmFuY2gnLCAnU29tZSBCcmFuY2gnKQotICAgICAgICBzb21lX3BsYXRmb3Jt
ID0gUGxhdGZvcm0uY3JlYXRlX2lmX3Bvc3NpYmxlKCdzb21lLXBsYXRmb3JtJywgJ1NvbWUgUGxh
dGZvcm0nKQotICAgICAgICBzb21lX2J1aWxkZXIgPSBCdWlsZGVyLmdldChCdWlsZGVyLmNyZWF0
ZSgnc29tZS1idWlsZGVyJywgJ1NvbWUgQnVpbGRlcicpKQotICAgICAgICBzb21lX3Rlc3QgPSBU
ZXN0LnVwZGF0ZV9vcl9pbnNlcnQoJ3NvbWUtdGVzdCcsIHNvbWVfYnJhbmNoLCBzb21lX3BsYXRm
b3JtKQotCi0gICAgICAgIHNlbGYuX2NyZWF0ZV9yZXN1bHRzKHNvbWVfYnJhbmNoLCBzb21lX3Bs
YXRmb3JtLCBzb21lX2J1aWxkZXIsICdzb21lLXRlc3QnLCBbNTAuMF0pCi0gICAgICAgIHJ1bnMg
PSBSdW5zLnVwZGF0ZV9vcl9pbnNlcnQoc29tZV9icmFuY2gsIHNvbWVfcGxhdGZvcm0sIHNvbWVf
dGVzdCkKLSAgICAgICAgcnVuc19qc29uID0gcnVucy50b19qc29uKCkKLQotICAgICAgICBrZXlf
bmFtZSA9IFJ1bnMuX2tleV9uYW1lKHNvbWVfYnJhbmNoLmlkLCBzb21lX3BsYXRmb3JtLmlkLCBz
b21lX3Rlc3QuaWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUnVucy5qc29uX2J5X2lkcyhz
b21lX2JyYW5jaC5pZCwgc29tZV9wbGF0Zm9ybS5pZCwgc29tZV90ZXN0LmlkKSwgcnVuc19qc29u
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWNhY2hlLmdldChrZXlfbmFtZSksIHJ1bnNf
anNvbikKLQotICAgICAgICBtZW1jYWNoZS5zZXQoa2V5X25hbWUsICdibGFoJykKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChSdW5zLmpzb25fYnlfaWRzKHNvbWVfYnJhbmNoLmlkLCBzb21lX3Bs
YXRmb3JtLmlkLCBzb21lX3Rlc3QuaWQpLCAnYmxhaCcpCi0KLSAgICAgICAgbWVtY2FjaGUuZGVs
ZXRlKGtleV9uYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFJ1bnMuanNvbl9ieV9pZHMo
c29tZV9icmFuY2guaWQsIHNvbWVfcGxhdGZvcm0uaWQsIHNvbWVfdGVzdC5pZCksIHJ1bnNfanNv
bikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1jYWNoZS5nZXQoa2V5X25hbWUpLCBydW5z
X2pzb24pCi0KLSAgICBkZWYgdGVzdF90b19qc29uX3dpdGhvdXRfcmVzdWx0cyhzZWxmKToKLSAg
ICAgICAgc29tZV9icmFuY2ggPSBCcmFuY2guY3JlYXRlX2lmX3Bvc3NpYmxlKCdzb21lLWJyYW5j
aCcsICdTb21lIEJyYW5jaCcpCi0gICAgICAgIHNvbWVfcGxhdGZvcm0gPSBQbGF0Zm9ybS5jcmVh
dGVfaWZfcG9zc2libGUoJ3NvbWUtcGxhdGZvcm0nLCAnU29tZSBQbGF0Zm9ybScpCi0gICAgICAg
IHNvbWVfdGVzdCA9IFRlc3QudXBkYXRlX29yX2luc2VydCgnc29tZS10ZXN0Jywgc29tZV9icmFu
Y2gsIHNvbWVfcGxhdGZvcm0pCi0gICAgICAgIHNlbGYuYXNzZXJ0T25seUluc3RhbmNlKHNvbWVf
dGVzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9mKFRlc3RSZXN1bHQp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5sb2FkcyhSdW5zLnVwZGF0ZV9vcl9pbnNl
cnQoc29tZV9icmFuY2gsIHNvbWVfcGxhdGZvcm0sIHNvbWVfdGVzdCkudG9fanNvbigpKSwgewot
ICAgICAgICAgICAgJ3Rlc3RfcnVucyc6IFtdLAotICAgICAgICAgICAgJ2F2ZXJhZ2VzJzoge30s
Ci0gICAgICAgICAgICAnbWluJzogTm9uZSwKLSAgICAgICAgICAgICdtYXgnOiBOb25lLAotICAg
ICAgICAgICAgJ3VuaXQnOiBOb25lLAotICAgICAgICAgICAgJ2RhdGVfcmFuZ2UnOiBOb25lLAot
ICAgICAgICAgICAgJ3N0YXQnOiAnb2snfSkKLQotICAgIGRlZiB0ZXN0X3RvX2pzb25fd2l0aF9y
ZXN1bHRzKHNlbGYpOgotICAgICAgICBzb21lX2JyYW5jaCA9IEJyYW5jaC5jcmVhdGVfaWZfcG9z
c2libGUoJ3NvbWUtYnJhbmNoJywgJ1NvbWUgQnJhbmNoJykKLSAgICAgICAgc29tZV9wbGF0Zm9y
bSA9IFBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1wbGF0Zm9ybScsICdTb21lIFBs
YXRmb3JtJykKLSAgICAgICAgc29tZV9idWlsZGVyID0gQnVpbGRlci5nZXQoQnVpbGRlci5jcmVh
dGUoJ3NvbWUtYnVpbGRlcicsICdTb21lIEJ1aWxkZXInKSkKLSAgICAgICAgc29tZV90ZXN0ID0g
VGVzdC51cGRhdGVfb3JfaW5zZXJ0KCdzb21lLXRlc3QnLCBzb21lX2JyYW5jaCwgc29tZV9wbGF0
Zm9ybSkKLSAgICAgICAgYnVpbGRzLCByZXN1bHRzID0gc2VsZi5fY3JlYXRlX3Jlc3VsdHMoc29t
ZV9icmFuY2gsIHNvbWVfcGxhdGZvcm0sIHNvbWVfYnVpbGRlciwgJ3NvbWUtdGVzdCcsIFs1MC4w
LCA1MS4wLCA1Mi4wLCA0OS4wLCA0OC4wXSkKLQotICAgICAgICB2YWx1ZSA9IGpzb24ubG9hZHMo
UnVucy51cGRhdGVfb3JfaW5zZXJ0KHNvbWVfYnJhbmNoLCBzb21lX3BsYXRmb3JtLCBzb21lX3Rl
c3QpLnRvX2pzb24oKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbFVub3JkZXJlZExpc3QodmFs
dWUua2V5cygpLCBbJ3Rlc3RfcnVucycsICdhdmVyYWdlcycsICdtaW4nLCAnbWF4JywgJ3VuaXQn
LCAnZGF0ZV9yYW5nZScsICdzdGF0J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVb
J3N0YXQnXSwgJ29rJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZVsnbWluJ10sIDQ4
LjApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVbJ21heCddLCA1Mi4wKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlWyd1bml0J10sIE5vbmUpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwodmFsdWVbJ2RhdGVfcmFuZ2UnXSwgTm9uZSkgICMgZGF0ZV9yYW5nZSBpcyBuZXZl
ciBnaXZlbgotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHZhbHVlWyd0ZXN0X3J1bnMn
XSksIGxlbihyZXN1bHRzKSkKLSAgICAgICAgZm9yIGksIHJ1biBpbiBlbnVtZXJhdGUodmFsdWVb
J3Rlc3RfcnVucyddKToKLSAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV0KLSAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVuWzBdLCByZXN1bHQua2V5KCkuaWQoKSkKLSAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVuWzFdWzFdLCBpKSAgIyBCdWlsZCBudW1iZXIKLSAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVuWzFdWzJdLCAxMDAgKyBpKSAgIyBSZXZpc2lvbgot
ICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5bMV1bM10sIE5vbmUpICAjIFN1cHBsZW1l
bnRhcnkgcmV2aXNpb24KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVuWzNdLCByZXN1
bHQudmFsdWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bls2XSwgc29tZV9idWls
ZGVyLmtleSgpLmlkKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bls3XSwgTm9u
ZSkgICMgU3RhdGlzdGljcwotCi0gICAgZGVmIHRlc3RfdG9fanNvbl93aXRoX3VuaXQoc2VsZik6
Ci0gICAgICAgIHNvbWVfYnJhbmNoID0gQnJhbmNoLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1i
cmFuY2gnLCAnU29tZSBCcmFuY2gnKQotICAgICAgICBzb21lX3BsYXRmb3JtID0gUGxhdGZvcm0u
Y3JlYXRlX2lmX3Bvc3NpYmxlKCdzb21lLXBsYXRmb3JtJywgJ1NvbWUgUGxhdGZvcm0nKQotICAg
ICAgICBzb21lX2J1aWxkZXIgPSBCdWlsZGVyLmdldChCdWlsZGVyLmNyZWF0ZSgnc29tZS1idWls
ZGVyJywgJ1NvbWUgQnVpbGRlcicpKQotICAgICAgICBzb21lX3Rlc3QgPSBUZXN0LnVwZGF0ZV9v
cl9pbnNlcnQoJ3NvbWUtdGVzdCcsIHNvbWVfYnJhbmNoLCBzb21lX3BsYXRmb3JtLCAncnVucy9z
JykKLSAgICAgICAgYnVpbGRzLCByZXN1bHRzID0gc2VsZi5fY3JlYXRlX3Jlc3VsdHMoc29tZV9i
cmFuY2gsIHNvbWVfcGxhdGZvcm0sIHNvbWVfYnVpbGRlciwgJ3NvbWUtdGVzdCcsIFs1MC4wLCA1
MS4wLCA1Mi4wLCA0OS4wLCA0OC4wXSkKLQotICAgICAgICB2YWx1ZSA9IGpzb24ubG9hZHMoUnVu
cy51cGRhdGVfb3JfaW5zZXJ0KHNvbWVfYnJhbmNoLCBzb21lX3BsYXRmb3JtLCBzb21lX3Rlc3Qp
LnRvX2pzb24oKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZVsndW5pdCddLCAncnVu
cy9zJykKLQotICAgIGRlZiBfYXNzZXJ0X2VudHJ5KHNlbGYsIGVudHJ5LCBidWlsZCwgcmVzdWx0
LCB2YWx1ZSwgc3RhdGlzdGljcz1Ob25lLCBzdXBwbGVtZW50YXJ5X3JldmlzaW9ucz1Ob25lKToK
LSAgICAgICAgZW50cnkgPSBlbnRyeVs6XQotICAgICAgICBlbnRyeVsyXSA9IE5vbmUgICMgdGlt
ZXN0YW1wCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cnksIFtyZXN1bHQua2V5KCkuaWQo
KSwgW2J1aWxkLmtleSgpLmlkKCksIGJ1aWxkLmJ1aWxkTnVtYmVyLCBidWlsZC5yZXZpc2lvbiwg
c3VwcGxlbWVudGFyeV9yZXZpc2lvbnNdLAotICAgICAgICAgICAgTm9uZSwgICMgdGltZXN0YW1w
Ci0gICAgICAgICAgICB2YWx1ZSwgMCwgICMgcnVuTnVtYmVyCi0gICAgICAgICAgICBbXSwgICMg
YW5ub3RhdGlvbnMKLSAgICAgICAgICAgIGJ1aWxkLmJ1aWxkZXIua2V5KCkuaWQoKSwgc3RhdGlz
dGljc10pCi0KLSAgICBkZWYgdGVzdF9ydW5fZnJvbV9idWlsZF9hbmRfcmVzdWx0KHNlbGYpOgot
ICAgICAgICBicmFuY2ggPSBCcmFuY2guY3JlYXRlX2lmX3Bvc3NpYmxlKCdzb21lLWJyYW5jaCcs
ICdTb21lIEJyYW5jaCcpCi0gICAgICAgIHBsYXRmb3JtID0gUGxhdGZvcm0uY3JlYXRlX2lmX3Bv
c3NpYmxlKCdzb21lLXBsYXRmb3JtJywgJ1NvbWUgUGxhdGZvcm0nKQotICAgICAgICBidWlsZGVy
ID0gQnVpbGRlci5nZXQoQnVpbGRlci5jcmVhdGUoJ3NvbWUtYnVpbGRlcicsICdTb21lIEJ1aWxk
ZXInKSkKLSAgICAgICAgdGVzdF9uYW1lID0gJyBzb21lLXRlc3QnCi0KLSAgICAgICAgZGVmIGNy
ZWF0ZV9idWlsZChidWlsZF9udW1iZXIsIHJldmlzaW9uKToKLSAgICAgICAgICAgIHRpbWVzdGFt
cCA9IGRhdGV0aW1lLm5vdygpLnJlcGxhY2UobWljcm9zZWNvbmQ9MCkKLSAgICAgICAgICAgIGJ1
aWxkID0gQnVpbGQoYnJhbmNoPWJyYW5jaCwgcGxhdGZvcm09cGxhdGZvcm0sIGJ1aWxkZXI9YnVp
bGRlciwgYnVpbGROdW1iZXI9YnVpbGRfbnVtYmVyLAotICAgICAgICAgICAgICAgIHJldmlzaW9u
PXJldmlzaW9uLCB0aW1lc3RhbXA9dGltZXN0YW1wKQotICAgICAgICAgICAgYnVpbGQucHV0KCkK
LSAgICAgICAgICAgIHJldHVybiBidWlsZAotCi0gICAgICAgIGJ1aWxkID0gY3JlYXRlX2J1aWxk
KDEsIDEwMSkKLSAgICAgICAgcmVzdWx0ID0gVGVzdFJlc3VsdChuYW1lPXRlc3RfbmFtZSwgdmFs
dWU9MTIzLjAsIGJ1aWxkPWJ1aWxkKQotICAgICAgICByZXN1bHQucHV0KCkKLSAgICAgICAgc2Vs
Zi5fYXNzZXJ0X2VudHJ5KFJ1bnMuX2VudHJ5X2Zyb21fYnVpbGRfYW5kX3Jlc3VsdChidWlsZCwg
cmVzdWx0KSwgYnVpbGQsIHJlc3VsdCwgMTIzLjApCi0KLSAgICAgICAgYnVpbGQgPSBjcmVhdGVf
YnVpbGQoMiwgMTAyKQotICAgICAgICByZXN1bHQgPSBUZXN0UmVzdWx0KG5hbWU9dGVzdF9uYW1l
LCB2YWx1ZT00NTYuMCwgdmFsdWVNZWRpYW49Nzg5LjAsIGJ1aWxkPWJ1aWxkKQotICAgICAgICBy
ZXN1bHQucHV0KCkKLSAgICAgICAgc2VsZi5fYXNzZXJ0X2VudHJ5KFJ1bnMuX2VudHJ5X2Zyb21f
YnVpbGRfYW5kX3Jlc3VsdChidWlsZCwgcmVzdWx0KSwgYnVpbGQsIHJlc3VsdCwgNDU2LjApCi0K
LSAgICAgICAgcmVzdWx0LnZhbHVlU3RkZXYgPSA3LjAKLSAgICAgICAgcmVzdWx0LnB1dCgpCi0g
ICAgICAgIHNlbGYuX2Fzc2VydF9lbnRyeShSdW5zLl9lbnRyeV9mcm9tX2J1aWxkX2FuZF9yZXN1
bHQoYnVpbGQsIHJlc3VsdCksIGJ1aWxkLCByZXN1bHQsIDQ1Ni4wKQotCi0gICAgICAgIHJlc3Vs
dC52YWx1ZVN0ZGV2ID0gTm9uZQotICAgICAgICByZXN1bHQudmFsdWVNaW4gPSAxMjMuMAotICAg
ICAgICByZXN1bHQudmFsdWVNYXggPSA3ODkuMAotICAgICAgICByZXN1bHQucHV0KCkKLSAgICAg
ICAgc2VsZi5fYXNzZXJ0X2VudHJ5KFJ1bnMuX2VudHJ5X2Zyb21fYnVpbGRfYW5kX3Jlc3VsdChi
dWlsZCwgcmVzdWx0KSwgYnVpbGQsIHJlc3VsdCwgNDU2LjApCi0KLSAgICAgICAgcmVzdWx0LnZh
bHVlU3RkZXYgPSA4LjAKLSAgICAgICAgcmVzdWx0LnZhbHVlTWluID0gMTIzLjAKLSAgICAgICAg
cmVzdWx0LnZhbHVlTWF4ID0gNzg5LjAKLSAgICAgICAgcmVzdWx0LnB1dCgpCi0gICAgICAgIHNl
bGYuX2Fzc2VydF9lbnRyeShSdW5zLl9lbnRyeV9mcm9tX2J1aWxkX2FuZF9yZXN1bHQoYnVpbGQs
IHJlc3VsdCksIGJ1aWxkLCByZXN1bHQsIDQ1Ni4wLAotICAgICAgICAgICAgc3RhdGlzdGljcz17
J3N0ZGV2JzogOC4wLCAnbWluJzogMTIzLjAsICdtYXgnOiA3ODkuMH0pCi0KLSAgICAgICAgcmVz
dWx0LnZhbHVlTWVkaWFuID0gMzQ1LjAgICMgTWVkaWFuIGlzIG5ldmVyIHVzZWQgYnkgdGhlIGZy
b250ZW5kLgotICAgICAgICByZXN1bHQudmFsdWVTdGRldiA9IDguMAotICAgICAgICByZXN1bHQu
dmFsdWVNaW4gPSAxMjMuMAotICAgICAgICByZXN1bHQudmFsdWVNYXggPSA3ODkuMAotICAgICAg
ICByZXN1bHQucHV0KCkKLSAgICAgICAgc2VsZi5fYXNzZXJ0X2VudHJ5KFJ1bnMuX2VudHJ5X2Zy
b21fYnVpbGRfYW5kX3Jlc3VsdChidWlsZCwgcmVzdWx0KSwgYnVpbGQsIHJlc3VsdCwgNDU2LjAs
Ci0gICAgICAgICAgICBzdGF0aXN0aWNzPXsnc3RkZXYnOiA4LjAsICdtaW4nOiAxMjMuMCwgJ21h
eCc6IDc4OS4wfSkKLQotICAgIGRlZiB0ZXN0X2NoYXJ0X3BhcmFtc193aXRoX3ZhbHVlKHNlbGYp
OgotICAgICAgICBzb21lX2JyYW5jaCA9IEJyYW5jaC5jcmVhdGVfaWZfcG9zc2libGUoJ3NvbWUt
YnJhbmNoJywgJ1NvbWUgQnJhbmNoJykKLSAgICAgICAgc29tZV9wbGF0Zm9ybSA9IFBsYXRmb3Jt
LmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1wbGF0Zm9ybScsICdTb21lIFBsYXRmb3JtJykKLSAg
ICAgICAgc29tZV9idWlsZGVyID0gQnVpbGRlci5nZXQoQnVpbGRlci5jcmVhdGUoJ3NvbWUtYnVp
bGRlcicsICdTb21lIEJ1aWxkZXInKSkKLSAgICAgICAgc29tZV90ZXN0ID0gVGVzdC51cGRhdGVf
b3JfaW5zZXJ0KCdzb21lLXRlc3QnLCBzb21lX2JyYW5jaCwgc29tZV9wbGF0Zm9ybSkKLQotICAg
ICAgICBzdGFydF90aW1lID0gZGF0ZXRpbWUoMjAxMSwgMiwgMjEsIDEyLCAwLCAwKQotICAgICAg
ICBlbmRfdGltZSA9IGRhdGV0aW1lKDIwMTEsIDIsIDI4LCAxMiwgMCwgMCkKLSAgICAgICAgcmVz
dWx0cyA9IHNlbGYuX2NyZWF0ZV9yZXN1bHRzKHNvbWVfYnJhbmNoLCBzb21lX3BsYXRmb3JtLCBz
b21lX2J1aWxkZXIsICdzb21lLXRlc3QnLAotICAgICAgICAgICAgWzUwLjAsIDUxLjAsIDUyLjAs
IDQ5LjAsIDQ4LjAsIDUxLjksIDUwLjcsIDUxLjFdLAotICAgICAgICAgICAgW3N0YXJ0X3RpbWUg
KyB0aW1lZGVsdGEoZGF5KSBmb3IgZGF5IGluIHJhbmdlKDAsIDgpXSkKLQotICAgICAgICAjIFVz
ZSBpbnQgZGVzcGl0ZSBvZiBpdHMgaW1wcmVjaXNlbmVzcyBzaW5jZSB0ZXN0cyBtYXkgZmFpbCBk
dWUgdG8gcm91bmRpbmcgZXJyb3JzIG90aGVyd2lzZS4KLSAgICAgICAgZGVmIHNwbGl0X2FzX2lu
dChzdHJpbmcpOgotICAgICAgICAgICAgcmV0dXJuIFtpbnQoZmxvYXQodmFsdWUpKSBmb3IgdmFs
dWUgaW4gc3RyaW5nLnNwbGl0KCcsJyldCi0KLSAgICAgICAgcGFyYW1zID0gUnVucy51cGRhdGVf
b3JfaW5zZXJ0KHNvbWVfYnJhbmNoLCBzb21lX3BsYXRmb3JtLCBzb21lX3Rlc3QpLmNoYXJ0X3Bh
cmFtcyg3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtc1snY2h4bCddLCAnMDp8RmVi
IDIxfEZlYiAyMnxGZWIgMjN8RmViIDI0fEZlYiAyNXxGZWIgMjZ8RmViIDI3fEZlYiAyOCcpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRfYXNfaW50KHBhcmFtc1snY2h4ciddKSwgWzEs
IDAsIDU3LCBpbnQoNTIgKiAxLjEgLyA1ICsgMC41KV0pCi0gICAgICAgIHhfbWluLCB4X21heCwg
eV9taW4sIHlfbWF4ID0gc3BsaXRfYXNfaW50KHBhcmFtc1snY2hkcyddKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGRhdGV0aW1lLmZyb210aW1lc3RhbXAoeF9taW4pLCBzdGFydF90aW1lKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGV0aW1lLmZyb210aW1lc3RhbXAoeF9tYXgpLCBl
bmRfdGltZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5X21pbiwgMCkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCh5X21heCwgaW50KDUyICogMS4xKSkKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzcGxpdF9hc19pbnQocGFyYW1zWydjaGcnXSksIFtpbnQoMTAwIC8gNyksIDIwLCAwLCAw
XSkKLQotICAgICAgICBwYXJhbXMgPSBSdW5zLnVwZGF0ZV9vcl9pbnNlcnQoc29tZV9icmFuY2gs
IHNvbWVfcGxhdGZvcm0sIHNvbWVfdGVzdCkuY2hhcnRfcGFyYW1zKDE0KQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHBhcmFtc1snY2h4bCddLCAnMDp8RmViIDE0fEZlYiAxNnxGZWIgMTh8RmVi
IDIwfEZlYiAyMnxGZWIgMjR8RmViIDI2fEZlYiAyOCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc3BsaXRfYXNfaW50KHBhcmFtc1snY2h4ciddKSwgWzEsIDAsIDU3LCBpbnQoNTIgKiAxLjEg
LyA1ICsgMC41KV0pCi0gICAgICAgIHhfbWluLCB4X21heCwgeV9taW4sIHlfbWF4ID0gc3BsaXRf
YXNfaW50KHBhcmFtc1snY2hkcyddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGV0aW1l
LmZyb210aW1lc3RhbXAoeF9taW4pLCBkYXRldGltZSgyMDExLCAyLCAxNCwgMTIsIDAsIDApKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGV0aW1lLmZyb210aW1lc3RhbXAoeF9tYXgpLCBl
bmRfdGltZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5X21pbiwgMCkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCh5X21heCwgaW50KDUyICogMS4xKSkKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzcGxpdF9hc19pbnQocGFyYW1zWydjaGcnXSksIFtpbnQoMTAwIC8gNyksIDIwLCAwLCAw
XSkKLQotCi1jbGFzcyBEYXNoYm9hcmRJbWFnZVRlc3RzKERhdGFTdG9yZVRlc3RzQmFzZSk6Ci0g
ICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzdXBlcihEYXNoYm9hcmRJbWFnZVRlc3RzLCBz
ZWxmKS5zZXRVcCgpCi0gICAgICAgIHNlbGYudGVzdGJlZC5pbml0X21lbWNhY2hlX3N0dWIoKQot
Ci0gICAgZGVmIHRlc3RfY3JlYXRlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1l
bWNhY2hlLmdldCgnZGFzaGJvYXJkLWltYWdlOjE6MjozOjcnKSwgTm9uZSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9mKERhc2hib2FyZEltYWdlKQotICAgICAgICBpbWFn
ZSA9IERhc2hib2FyZEltYWdlLmNyZWF0ZSgxLCAyLCAzLCA3LCAnYmxhaCcpCi0gICAgICAgIHNl
bGYuYXNzZXJ0T25seUluc3RhbmNlKGltYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1l
bWNhY2hlLmdldCgnZGFzaGJvYXJkLWltYWdlOjE6MjozOjcnKSwgJ2JsYWgnKQotCi0gICAgZGVm
IHRlc3RfZ2V0KHNlbGYpOgotICAgICAgICBpbWFnZSA9IERhc2hib2FyZEltYWdlLmNyZWF0ZSgx
LCAyLCAzLCA3LCAnYmxhaCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtY2FjaGUuZ2V0
KCdkYXNoYm9hcmQtaW1hZ2U6MToyOjM6NycpLCAnYmxhaCcpCi0gICAgICAgIG1lbWNhY2hlLnNl
dCgnZGFzaGJvYXJkLWltYWdlOjE6MjozOjcnLCAnbmV3IHZhbHVlJykKLQotICAgICAgICAjIENo
ZWNrIHR3aWNlIHRvIG1ha2Ugc3VyZSB0aGUgZmlyc3QgY2FsbCBkb2Vzbid0IGNsZWFyIG1lbWNh
Y2hlCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGFzaGJvYXJkSW1hZ2UuZ2V0X2ltYWdlKDEs
IDIsIDMsIDcpLCAnbmV3IHZhbHVlJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEYXNoYm9h
cmRJbWFnZS5nZXRfaW1hZ2UoMSwgMiwgMywgNyksICduZXcgdmFsdWUnKQotCi0gICAgICAgIG1l
bWNhY2hlLmRlbGV0ZSgnZGFzaGJvYXJkLWltYWdlOjE6MjozOjcnKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKG1lbWNhY2hlLmdldCgnZGFzaGJvYXJkLWltYWdlOjE6MjozOjcnKSwgTm9uZSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEYXNoYm9hcmRJbWFnZS5nZXRfaW1hZ2UoMSwgMiwg
MywgNyksICdibGFoJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1jYWNoZS5nZXQoJ2Rh
c2hib2FyZC1pbWFnZToxOjI6Mzo3JyksICdibGFoJykKLQotICAgIGRlZiB0ZXN0X25lZWRzX3Vw
ZGF0ZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKERhc2hib2FyZEltYWdlLm5lZWRz
X3VwZGF0ZSgxLCAyLCAzLCA3KSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKERhc2hib2FyZElt
YWdlLm5lZWRzX3VwZGF0ZSgxLCAyLCAzLCAzMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShE
YXNoYm9hcmRJbWFnZS5uZWVkc191cGRhdGUoMSwgMiwgMywgNjApKQotICAgICAgICBzZWxmLmFz
c2VydFRydWUoRGFzaGJvYXJkSW1hZ2UubmVlZHNfdXBkYXRlKDEsIDIsIDMsIDM2NSkpCi0KLSAg
ICAgICAgaW1hZ2UgPSBEYXNoYm9hcmRJbWFnZShrZXlfbmFtZT1EYXNoYm9hcmRJbWFnZS5rZXlf
bmFtZSgxLCAyLCAzLCA3KSwgaW1hZ2U9J2JsYWgnKQotICAgICAgICBpbWFnZS5wdXQoKQotICAg
ICAgICBzZWxmLmFzc2VydE9ubHlJbnN0YW5jZShpbWFnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKERhc2hib2FyZEltYWdlLm5lZWRzX3VwZGF0ZSgxLCAyLCAzLCA3KSkKLQotICAgICAgICBE
YXNoYm9hcmRJbWFnZShrZXlfbmFtZT1EYXNoYm9hcmRJbWFnZS5rZXlfbmFtZSgxLCAyLCAzLCAz
MCksIGltYWdlPSdibGFoJykucHV0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShEYXNoYm9h
cmRJbWFnZS5uZWVkc191cGRhdGUoMSwgMiwgMywgMzAsIGRhdGV0aW1lLm5vdygpICsgdGltZWRl
bHRhKDAsIDEwKSkpCi0KLSAgICAgICAgRGFzaGJvYXJkSW1hZ2Uoa2V5X25hbWU9RGFzaGJvYXJk
SW1hZ2Uua2V5X25hbWUoMSwgMiwgNCwgMzApLCBpbWFnZT0nYmxhaCcpLnB1dCgpCi0gICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShEYXNoYm9hcmRJbWFnZS5uZWVkc191cGRhdGUoMSwgMiwgNCwgMzAs
IGRhdGV0aW1lLm5vdygpICsgdGltZWRlbHRhKDEpKSkKLQotICAgICAgICBEYXNoYm9hcmRJbWFn
ZShrZXlfbmFtZT1EYXNoYm9hcmRJbWFnZS5rZXlfbmFtZSgxLCAyLCAzLCA5MCksIGltYWdlPSdi
bGFoJykucHV0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShEYXNoYm9hcmRJbWFnZS5uZWVk
c191cGRhdGUoMSwgMiwgMywgOTAsIGRhdGV0aW1lLm5vdygpICsgdGltZWRlbHRhKDAsIDIwKSkp
Ci0KLSAgICAgICAgRGFzaGJvYXJkSW1hZ2Uoa2V5X25hbWU9RGFzaGJvYXJkSW1hZ2Uua2V5X25h
bWUoMSwgMiwgNCwgOTApLCBpbWFnZT0nYmxhaCcpLnB1dCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShEYXNoYm9hcmRJbWFnZS5uZWVkc191cGRhdGUoMSwgMiwgNCwgOTAsIGRhdGV0aW1lLm5v
dygpICsgdGltZWRlbHRhKDEpKSkKLQotICAgICAgICBEYXNoYm9hcmRJbWFnZShrZXlfbmFtZT1E
YXNoYm9hcmRJbWFnZS5rZXlfbmFtZSgxLCAyLCAzLCAzNjUpLCBpbWFnZT0nYmxhaCcpLnB1dCgp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRGFzaGJvYXJkSW1hZ2UubmVlZHNfdXBkYXRlKDEs
IDIsIDMsIDM2NSwgZGF0ZXRpbWUubm93KCkgKyB0aW1lZGVsdGEoMSkpKQotCi0gICAgICAgIERh
c2hib2FyZEltYWdlKGtleV9uYW1lPURhc2hib2FyZEltYWdlLmtleV9uYW1lKDEsIDIsIDQsIDM2
NSksIGltYWdlPSdibGFoJykucHV0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKERhc2hib2Fy
ZEltYWdlLm5lZWRzX3VwZGF0ZSgxLCAyLCA0LCAzNjUsIGRhdGV0aW1lLm5vdygpICsgdGltZWRl
bHRhKDEwKSkpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB1bml0dGVzdC5t
YWluKCkKSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3JlcG9ydF9oYW5k
bGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3Jl
cG9ydF9oYW5kbGVyLnB5CShyZXZpc2lvbiAxNDAyNTgpCisrKyBXZWJzaXRlcy93ZWJraXQtcGVy
Zi5hcHBzcG90LmNvbS9yZXBvcnRfaGFuZGxlci5weQkod29ya2luZyBjb3B5KQpAQCAtMSw5NSAr
MCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMK
LSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQg
d2ViYXBwMgotZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgZGIKLQotaW1wb3J0IGpz
b24KLWltcG9ydCByZQotZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKLQotZnJvbSBtb2Rl
bHMgaW1wb3J0IFJlcG9ydExvZwotZnJvbSBjb250cm9sbGVyIGltcG9ydCBzY2hlZHVsZV9yZXBv
cnRfcHJvY2VzcwotCi0KLWNsYXNzIFJlcG9ydEhhbmRsZXIod2ViYXBwMi5SZXF1ZXN0SGFuZGxl
cik6Ci0gICAgZGVmIHBvc3Qoc2VsZik6Ci0gICAgICAgIHNlbGYucmVzcG9uc2UuaGVhZGVyc1sn
Q29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCcKLQotICAgICAgICBo
ZWFkZXJzID0gIlxuIi5qb2luKFtrZXkgKyAnOiAnICsgdmFsdWUgZm9yIGtleSwgdmFsdWUgaW4g
c2VsZi5yZXF1ZXN0LmhlYWRlcnMuaXRlbXMoKV0pCi0KLSAgICAgICAgIyBEbyBhcyBiZXN0IGFz
IHdlIGNhbiB0byByZW1vdmUgdGhlIHBhc3N3b3JkCi0gICAgICAgIHJlcXVlc3RfYm9keV93aXRo
b3V0X3Bhc3N3b3JkID0gcmUuc3ViKHInLFxzKiJwYXNzd29yZCJccyo6XHMqIi4rPyInLCAnJywg
c2VsZi5yZXF1ZXN0LmJvZHkpCi0gICAgICAgIGxvZyA9IFJlcG9ydExvZyh0aW1lc3RhbXA9ZGF0
ZXRpbWUubm93KCksIGhlYWRlcnM9aGVhZGVycywgcGF5bG9hZD1yZXF1ZXN0X2JvZHlfd2l0aG91
dF9wYXNzd29yZCkKLSAgICAgICAgbG9nLnB1dCgpCi0KLSAgICAgICAgc2VsZi5fZW5jb3VudGVy
ZWRfZXJyb3IgPSBGYWxzZQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHBhcnNlZFBheWxv
YWQgPSBqc29uLmxvYWRzKHNlbGYucmVxdWVzdC5ib2R5KQotICAgICAgICAgICAgaWYgaXNpbnN0
YW5jZShwYXJzZWRQYXlsb2FkLCBsaXN0KToKLSAgICAgICAgICAgICAgICBwYXJzZWRQYXlsb2Fk
ID0gcGFyc2VkUGF5bG9hZFswXQotICAgICAgICAgICAgcGFzc3dvcmQgPSBwYXJzZWRQYXlsb2Fk
LmdldCgncGFzc3dvcmQnLCAnJykKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX291dHB1dCgnRmFpbGVkIHRvIHBhcnNlIHRoZSBwYXlsb2FkIGFzIGEganNvbi4gUmVw
b3J0IGtleTogJWQnICUgbG9nLmtleSgpLmlkKCkpCi0KLSAgICAgICAgYnVpbGRlciA9IGxvZy5i
dWlsZGVyKCkKLSAgICAgICAgYnVpbGRlciAhPSBOb25lIG9yIHNlbGYuX291dHB1dCgnTm8gYnVp
bGRlciBuYW1lZCAiJXMiJyAlIGxvZy5nZXRfdmFsdWUoJ2J1aWxkZXItbmFtZScpKQotICAgICAg
ICBsb2cuYnJhbmNoKCkgIT0gTm9uZSBvciBzZWxmLl9vdXRwdXQoJ05vIGJyYW5jaCBuYW1lZCAi
JXMiJyAlIGxvZy5nZXRfdmFsdWUoJ2JyYW5jaCcpKQotICAgICAgICBsb2cucGxhdGZvcm0oKSAh
PSBOb25lIG9yIHNlbGYuX291dHB1dCgnTm8gcGxhdGZvcm0gbmFtZWQgIiVzIicgJSBsb2cuZ2V0
X3ZhbHVlKCdwbGF0Zm9ybScpKQotICAgICAgICBsb2cuYnVpbGRfbnVtYmVyKCkgIT0gTm9uZSBv
ciBzZWxmLl9vdXRwdXQoJ0ludmFsaWQgYnVpbGQgbnVtYmVyICIlcyInICUgbG9nLmdldF92YWx1
ZSgnYnVpbGQtbnVtYmVyJykpCi0gICAgICAgIGxvZy50aW1lc3RhbXAoKSAhPSBOb25lIG9yIHNl
bGYuX291dHB1dCgnSW52YWxpZCB0aW1lc3RhbXAgIiVzIicgJSBsb2cuZ2V0X3ZhbHVlKCd0aW1l
c3RhbXAnKSkKLSAgICAgICAgbG9nLndlYmtpdF9yZXZpc2lvbigpICE9IE5vbmUgb3Igc2VsZi5f
b3V0cHV0KCdJbnZhbGlkIHdlYmtpdCByZXZpc2lvbiAiJXMiJyAlIGxvZy5nZXRfdmFsdWUoJ3dl
YmtpdC1yZXZpc2lvbicpKQotCi0gICAgICAgIGZhaWxlZCA9IEZhbHNlCi0gICAgICAgIGlmIGJ1
aWxkZXIgYW5kIG5vdCAoc2VsZi5ieXBhc3NfYXV0aGVudGljYXRpb24oKSBvciBidWlsZGVyLmF1
dGhlbnRpY2F0ZShwYXNzd29yZCkpOgotICAgICAgICAgICAgc2VsZi5fb3V0cHV0KCdBdXRoZW50
aWNhdGlvbiBmYWlsZWQnKQotCi0gICAgICAgIGlmIG5vdCBsb2cucmVzdWx0c19hcmVfd2VsbF9m
b3JtZWQoKToKLSAgICAgICAgICAgIHNlbGYuX291dHB1dCgiVGhlIHBheWxvYWQgZG9lc24ndCBj
b250YWluIHJlc3VsdHMgb3IgcmVzdWx0cyBhcmUgbWFsZm9ybWVkIikKLQotICAgICAgICBpZiBz
ZWxmLl9lbmNvdW50ZXJlZF9lcnJvcjoKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGxv
Zy5jb21taXQgPSBUcnVlCi0gICAgICAgIGxvZy5wdXQoKQotICAgICAgICBzY2hlZHVsZV9yZXBv
cnRfcHJvY2Vzcyhsb2cpCi0gICAgICAgIHNlbGYuX291dHB1dCgiT0siKQotCi0gICAgZGVmIF9v
dXRwdXQoc2VsZiwgbWVzc2FnZSk6Ci0gICAgICAgIHNlbGYuX2VuY291bnRlcmVkX2Vycm9yID0g
VHJ1ZQotICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZShtZXNzYWdlICsgJ1xuJykKLQot
ICAgIGRlZiBieXBhc3NfYXV0aGVudGljYXRpb24oc2VsZik6Ci0gICAgICAgIHJldHVybiBGYWxz
ZQotCi0KLWNsYXNzIEFkbWluUmVwb3J0SGFuZGxlcihSZXBvcnRIYW5kbGVyKToKLSAgICBkZWYg
YnlwYXNzX2F1dGhlbnRpY2F0aW9uKHNlbGYpOgotICAgICAgICByZXR1cm4gVHJ1ZQpJbmRleDog
V2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcmVwb3J0X2xvZ3MuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9yZXBvcnRfbG9ncy5odG1s
CShyZXZpc2lvbiAxNDAyNTgpCisrKyBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9y
ZXBvcnRfbG9ncy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLTwhRE9DVFlQ
RSBodG1sPgotPGh0bWw+Ci08Ym9keT4KLTxwcmU+e3sgc3RhdHVzIH19PC9wcmU+Ci08aDE+UmVw
b3J0IGxvZ3M8L2gxPgotCi08c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KLQotdGFibGUg
eyB3aWR0aDogMTAwJTsgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsgYm9yZGVyLWNvbGxhcHNlOiBj
b2xsYXBzZTsgfQotdGQgeyBib3JkZXI6IHNvbGlkIDFweCAjY2NjOyBwYWRkaW5nOiA1cHg7IH0K
LS5jb250cm9sIGNvZGUgeyBkaXNwbGF5OiBub25lOyB9Ci1jb2RlIHsgd2hpdGUtc3BhY2U6IHBy
ZS13cmFwOyB9Ci1mb3JtIHsgZGlzcGxheTogaW5saW5lOyB9Ci0KLTwvc3R5bGU+Ci08c2NyaXB0
PgotCi0kID0gZnVuY3Rpb24gKGlkKSB7IHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChp
ZCk7IH0KLQotZnVuY3Rpb24gc2hvdyhpZCkgewotICAgIHZhciByb3cgPSAkKCdyb3dfJyArIGlk
KTsKLSAgICB2YXIgY29kZSA9IHJvdy5xdWVyeVNlbGVjdG9yKCdjb2RlJyk7Ci0gICAgaWYgKCFj
b2RlKQotICAgICAgICByZXR1cm47Ci0gICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ3RyJyk7Ci0gICAgbmV3Um93LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ3RkJykpOwotICAgIG5ld1Jvdy5maXJzdENoaWxkLmFwcGVuZENoaWxkKGNvZGUpOwotICAg
IG5ld1Jvdy5maXJzdENoaWxkLmNvbFNwYW4gPSA4OwotICAgIHJvdy5wYXJlbnROb2RlLmluc2Vy
dEJlZm9yZShuZXdSb3csIHJvdy5uZXh0U2libGluZyk7Ci0gICAgdHJ5IHsKLSAgICAgICAgY29k
ZS50ZXh0Q29udGVudCA9IEpTT04uc3RyaW5naWZ5KEpTT04ucGFyc2UoY29kZS50ZXh0Q29udGVu
dCksIG51bGwsIDIpOwotICAgIH0gY2F0Y2ggKGUpIHsgfQotfQotCi1mdW5jdGlvbiBzdWJtaXQo
Zm9ybSwgZXZlbnQpIHsKLSAgICBpZiAoIWNvbmZpcm0oJ0FyZSB5b3Ugc3VyZT8nKSkKLSAgICAg
ICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLX0KLQotPC9zY3JpcHQ+Ci08dGFibGU+Ci08dGhl
YWQ+Ci08dHI+Ci0gICAgPHRkPklkPC90ZD4KLSAgICA8dGQ+QnJhbmNoPC90ZD4KLSAgICA8dGQ+
UGxhdGZvcm08L3RkPgotICAgIDx0ZD5CdWlsZGVyPC90ZD4KLSAgICA8dGQ+QnVpbGQ8L3RkPgot
ICAgIDx0ZD5XZWJLaXQgcmV2aXNpb248L3RkPgotICAgIDx0ZD5DaHJvbWl1bSByZXZpc2lvbjwv
dGQ+Ci0gICAgPHRkIGNsYXNzPSJjb250cm9sIj5QYXlsb2FkPC90ZD4KLTwvdHI+Ci08L3RoZWFk
PgotPHRib2R5PgoteyUgZm9yIGxvZyBpbiBsb2dzICV9Ci08dHIgaWQ9InJvd197eyBsb2cua2V5
LmlkIH19Ij4KLSAgICA8dGQ+e3sgbG9nLmtleS5pZCB9fTwvdGQ+Ci0gICAgPHRkPnt7IGxvZy5i
cmFuY2gubmFtZSB9fTwvdGQ+Ci0gICAgPHRkPnt7IGxvZy5wbGF0Zm9ybS5uYW1lIH19PC90ZD4K
LSAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2J1aWxkLndlYmtpdC5vcmcvYnVpbGRlcnMve3sgbG9n
LmJ1aWxkZXIubmFtZSB9fS8iPnt7IGxvZy5idWlsZGVyLm5hbWUgfX08L2E+PC90ZD4KLSAgICA8
dGQ+PGEgaHJlZj0iaHR0cDovL2J1aWxkLndlYmtpdC5vcmcvYnVpbGRlcnMve3sgbG9nLmJ1aWxk
ZXIubmFtZSB9fS9idWlsZHMve3sgbG9nLmJ1aWxkX251bWJlciB9fSI+e3sgbG9nLmJ1aWxkX251
bWJlciB9fTwvYT48L3RkPgotICAgIDx0ZD48YSBocmVmPSJodHRwOi8vdHJhYy53ZWJraXQub3Jn
L2NoYW5nZXNldC97eyBsb2cud2Via2l0X3JldmlzaW9uIH19Ij57eyBsb2cud2Via2l0X3Jldmlz
aW9uIH19PC9hPjwvdGQ+Ci0gICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9zcmMuY2hyb21pdW0ub3Jn
L3ZpZXd2Yy9jaHJvbWU/dmlldz1yZXYmYW1wO3JldmlzaW9uPXt7IGxvZy5jaHJvbWl1bV9yZXZp
c2lvbiB9fSI+e3sgbG9nLmNocm9taXVtX3JldmlzaW9uIH19PC9hPjwvdGQ+Ci0gICAgPHRkIGNs
YXNzPSJjb250cm9sIj48YnV0dG9uIG9uY2xpY2s9InNob3coe3sgbG9nLmtleS5pZCB9fSkiPlNo
b3c8L2J1dHRvbj4KLSAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ii9hZG1pbi9y
ZXBvcnQtbG9ncyIgb25zdWJtaXQ9InN1Ym1pdCh0aGlzLCBldmVudCkiPgotICAgICAgICA8aW5w
dXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJpZCIgdmFsdWU9Int7IGxvZy5rZXkuaWQgfX0iPgotICAg
ICAgICA8YnV0dG9uIG5hbWU9ImNvbW1pdCIgdmFsdWU9InRydWUiPkNvbW1pdDwvYnV0dG9uPgot
ICAgICAgICA8YnV0dG9uIG5hbWU9ImRlbGV0ZSIgdmFsdWU9InRydWUiPkRlbGV0ZTwvYnV0dG9u
PjwvZm9ybT4KLSAgICAgICAgPGNvZGU+e3sgbG9nLnBheWxvYWQgfX08L2NvZGU+PC90ZD4KLTwv
dHI+Ci17JSBlbmRmb3IgJX0KLTwvdGJvZHk+Ci08L3RhYmxlPgotCi08L2JvZHk+Ci08L2h0bWw+
CkluZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9yZXBvcnRfbG9nc19oYW5k
bGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3Jl
cG9ydF9sb2dzX2hhbmRsZXIucHkJKHJldmlzaW9uIDE0MDI1OCkKKysrIFdlYnNpdGVzL3dlYmtp
dC1wZXJmLmFwcHNwb3QuY29tL3JlcG9ydF9sb2dzX2hhbmRsZXIucHkJKHdvcmtpbmcgY29weSkK
QEAgLTEsNjggKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotaW1wb3J0IHdlYmFwcDIKLWZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQud2ViYXBwIGltcG9y
dCB0ZW1wbGF0ZQotCi1pbXBvcnQgb3MKLQotZnJvbSBjb250cm9sbGVyIGltcG9ydCBzY2hlZHVs
ZV9yZXBvcnRfcHJvY2VzcwotZnJvbSBtb2RlbHMgaW1wb3J0IFJlcG9ydExvZwotCi0KLWNsYXNz
IFJlcG9ydExvZ3NIYW5kbGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRsZXIpOgotICAgIGRlZiBnZXQo
c2VsZik6Ci0gICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKHRlbXBsYXRlLnJlbmRlcign
cmVwb3J0X2xvZ3MuaHRtbCcsIHsnbG9ncyc6IFJlcG9ydExvZy5hbGwoKX0pKQotCi0gICAgZGVm
IHBvc3Qoc2VsZik6Ci0gICAgICAgIGNvbW1pdCA9IGJvb2woc2VsZi5yZXF1ZXN0LmdldCgnY29t
bWl0JykpCi0gICAgICAgIGRlbGV0ZSA9IGJvb2woc2VsZi5yZXF1ZXN0LmdldCgnZGVsZXRlJykp
Ci0gICAgICAgIGlmIGNvbW1pdCA9PSBkZWxldGU6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5f
ZXJyb3IoJ0ludmFsaWQgcmVxdWVzdCcpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9n
ID0gUmVwb3J0TG9nLmdldF9ieV9pZChpbnQoc2VsZi5yZXF1ZXN0LmdldCgnaWQnLCAwKSkpCi0g
ICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9lcnJvcignSW52YWxpZCBs
b2cgaWQgIiVzIicgJSBzZWxmLnJlcXVlc3QuZ2V0KCdpZCcsICcnKSkKLQotICAgICAgICBpZiBu
b3QgbG9nOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Vycm9yKCdObyBsb2cgZm91bmQgZm9y
ICIlcyInICUgc2VsZi5yZXF1ZXN0LmdldCgnaWQnLCAnJykpCi0KLSAgICAgICAgaWYgY29tbWl0
OgotICAgICAgICAgICAgbG9nLmNvbW1pdCA9IFRydWUKLSAgICAgICAgICAgIGxvZy5wdXQoKQot
ICAgICAgICAgICAgc2NoZWR1bGVfcmVwb3J0X3Byb2Nlc3MobG9nKQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgbG9nLmRlbGV0ZSgpCi0KLSAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3Jp
dGUodGVtcGxhdGUucmVuZGVyKCdyZXBvcnRfbG9ncy5odG1sJywgeydsb2dzJzogUmVwb3J0TG9n
LmFsbCgpLCAnc3RhdHVzJzogJ09LJ30pKQotCi0gICAgZGVmIF9lcnJvcihzZWxmLCBtZXNzYWdl
KToKLSAgICAgICAgc2VsZi5yZXNwb25zZS5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0
L3BsYWluOyBjaGFyc2V0PXV0Zi04JwotICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSht
ZXNzYWdlICsgJ1xuJykKSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3Jl
cG9ydF9wcm9jZXNzX2hhbmRsZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0LXBl
cmYuYXBwc3BvdC5jb20vcmVwb3J0X3Byb2Nlc3NfaGFuZGxlci5weQkocmV2aXNpb24gMTQwMjU4
KQorKysgV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcmVwb3J0X3Byb2Nlc3NfaGFu
ZGxlci5weQkod29ya2luZyBjb3B5KQpAQCAtMSw3OCArMCwwIEBACi0jIS91c3IvYmluL2VudiBw
eXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmli
dXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgd2ViYXBwMgotZnJvbSBnb29nbGUuYXBw
ZW5naW5lLmV4dCBpbXBvcnQgZGIKLQotaW1wb3J0IHRpbWUKLQotZnJvbSBjb250cm9sbGVyIGlt
cG9ydCBzY2hlZHVsZV9ydW5zX3VwZGF0ZQotZnJvbSBjb250cm9sbGVyIGltcG9ydCBzY2hlZHVs
ZV9kYXNoYm9hcmRfdXBkYXRlCi1mcm9tIGNvbnRyb2xsZXIgaW1wb3J0IHNjaGVkdWxlX21hbmlm
ZXN0X3VwZGF0ZQotZnJvbSBtb2RlbHMgaW1wb3J0IEJ1aWxkCi1mcm9tIG1vZGVscyBpbXBvcnQg
UmVwb3J0TG9nCi1mcm9tIG1vZGVscyBpbXBvcnQgUnVucwotZnJvbSBtb2RlbHMgaW1wb3J0IFRl
c3QKLWZyb20gbW9kZWxzIGltcG9ydCBUZXN0UmVzdWx0Ci0KLQotY2xhc3MgUmVwb3J0UHJvY2Vz
c0hhbmRsZXIod2ViYXBwMi5SZXF1ZXN0SGFuZGxlcik6Ci0gICAgZGVmIHBvc3Qoc2VsZik6Ci0g
ICAgICAgIHNlbGYucmVzcG9uc2UuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFp
bjsgY2hhcnNldD11dGYtOCcKLQotICAgICAgICBsb2dfaWQgPSBpbnQoc2VsZi5yZXF1ZXN0Lmdl
dCgnaWQnLCAwKSkKLQotICAgICAgICBsb2cgPSBSZXBvcnRMb2cuZ2V0X2J5X2lkKGxvZ19pZCkK
LSAgICAgICAgaWYgbm90IGxvZyBvciBub3QgbG9nLmNvbW1pdDoKLSAgICAgICAgICAgIHNlbGYu
cmVzcG9uc2Uub3V0LndyaXRlKCJOb3QgcHJvY2Vzc2VkIikKLSAgICAgICAgICAgIHJldHVybgot
Ci0gICAgICAgIGJyYW5jaCA9IGxvZy5icmFuY2goKQotICAgICAgICBwbGF0Zm9ybSA9IGxvZy5w
bGF0Zm9ybSgpCi0gICAgICAgIGJ1aWxkID0gQnVpbGQuZ2V0X29yX2luc2VydF9mcm9tX2xvZyhs
b2cpCi0KLSAgICAgICAgZm9yIHRlc3RfbmFtZSwgcmVzdWx0X3ZhbHVlIGluIGxvZy5yZXN1bHRz
KCkuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICB1bml0ID0gcmVzdWx0X3ZhbHVlLmdldCgndW5p
dCcpIGlmIGlzaW5zdGFuY2UocmVzdWx0X3ZhbHVlLCBkaWN0KSBlbHNlIE5vbmUKLSAgICAgICAg
ICAgIHRlc3QgPSBUZXN0LnVwZGF0ZV9vcl9pbnNlcnQodGVzdF9uYW1lLCBicmFuY2gsIHBsYXRm
b3JtLCB1bml0KQotICAgICAgICAgICAgcmVzdWx0ID0gVGVzdFJlc3VsdC5nZXRfb3JfaW5zZXJ0
X2Zyb21fcGFyc2VkX2pzb24odGVzdF9uYW1lLCBidWlsZCwgcmVzdWx0X3ZhbHVlKQotICAgICAg
ICAgICAgcnVucyA9IFJ1bnMuZ2V0X2J5X29iamVjdHMoYnJhbmNoLCBwbGF0Zm9ybSwgdGVzdCkK
LSAgICAgICAgICAgIHJlZ2VuZXJhdGVfcnVucyA9IFRydWUKLSAgICAgICAgICAgIGlmIHJ1bnM6
Ci0gICAgICAgICAgICAgICAgcnVucy51cGRhdGVfaW5jcmVtZW50YWxseShidWlsZCwgcmVzdWx0
KQotICAgICAgICAgICAgICAgIHJlZ2VuZXJhdGVfcnVucyA9IEZhbHNlCi0gICAgICAgICAgICBz
Y2hlZHVsZV9ydW5zX3VwZGF0ZSh0ZXN0LmlkLCBicmFuY2guaWQsIHBsYXRmb3JtLmlkLCByZWdl
bmVyYXRlX3J1bnMpCi0KLSAgICAgICAgbG9nID0gUmVwb3J0TG9nLmdldChsb2cua2V5KCkpCi0g
ICAgICAgIGxvZy5kZWxldGUoKQotCi0gICAgICAgICMgV2UgbmVlZCB0byB1cGRhdGUgZGFzaGJv
YXJkIGFuZCBtYW5pZmVzdCBiZWNhdXNlIHRoZXkgYXJlIGFmZmVjdGVkIGJ5IHRoZSBleGlzdGFu
Y2Ugb2YgdGVzdCByZXN1bHRzCi0gICAgICAgIHNjaGVkdWxlX2Rhc2hib2FyZF91cGRhdGUoKQot
ICAgICAgICBzY2hlZHVsZV9tYW5pZmVzdF91cGRhdGUoKQotCi0gICAgICAgIHNlbGYucmVzcG9u
c2Uub3V0LndyaXRlKCdPSycpCkluZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNv
bS9jc3MvYWRtaW4uY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNw
b3QuY29tL2Nzcy9hZG1pbi5jc3MJKHJldmlzaW9uIDE0MDI1OCkKKysrIFdlYnNpdGVzL3dlYmtp
dC1wZXJmLmFwcHNwb3QuY29tL2Nzcy9hZG1pbi5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQ2
ICswLDAgQEAKLWh0bWwgewotICAgIHBhZGRpbmc6IDBweDsKLSAgICBtYXJnaW46IDBweDsKLSAg
ICBvdmVyZmxvdzogYXV0bzsKLX0KLQotI3N1bW1hcnksICNtYW51YWwtc3VibWlzc2lvbiB7Ci0g
ICAgZm9udC1zaXplOiAxNHB4OwotICAgIGxpbmUtaGVpZ2h0OiAzNnB4OwotfQotCi0jc3VtbWFy
eSB7Ci0gICAgbWFyZ2luLXRvcDogNDlweDsKLSAgICBkaXNwbGF5OiB0YWJsZTsKLSAgICBib3Jk
ZXItY29sbGFwc2U6IGNvbGxhcHNlOwotfQotCi1zZWN0aW9uIHsKLSAgICBkaXNwbGF5OiB0YWJs
ZS1jZWxsOwotICAgIGJhY2tncm91bmQ6IHdoaXRlOwotICAgIGJvcmRlcjogMXB4IHNvbGlkIGxp
Z2h0Z3JleTsKLSAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwotICAgIG1pbi1oZWlnaHQ6
IDMwMHB4OwotfQotCi1oMiB7Ci0gICAgY2xlYXI6IGJvdGg7Ci0gICAgYmFja2dyb3VuZDogLW1v
ei1saW5lYXItZ3JhZGllbnQoLTkwZGVnLCAjZjhmOGY4LCAjZTdlN2U3KTsKLSAgICBiYWNrZ3Jv
dW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9t
KCNmOGY4ZjgpLCB0bygjZTdlN2U3KSk7Ci0gICAgcGFkZGluZzogMCAxMHB4OwotICAgIGJvcmRl
ci1ib3R0b206IHNvbGlkIDFweCBsaWdodGdyZXk7Ci19Ci0KLWRsIHsKLSAgICBwYWRkaW5nOiAw
IDEwcHg7Ci19Ci0KLXNlY3Rpb24gPiB1bCB7Ci19Ci0KLXNlY3Rpb24gPiB1bCA+IGxpIHsKLSAg
ICB3aWR0aDogMTAwJTsKLSAgICBkaXNwbGF5OiB0YWJsZTsKLX0KLQotc2VjdGlvbiA+IHAgewot
ICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCBsaWdodGdyZXk7Ci0gICAgbWFyZ2luOiAwcHg7Ci0g
ICAgcGFkZGluZzogMCAxMHB4OwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLX0KLQotc2VjdGlv
biA+IHVsID4gbGkgPiBoMyB7Ci0gICAgZm9udC1zaXplOiAxZW07Ci0gICAgZm9udC13ZWlnaHQ6
IG5vcm1hbDsKLSAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOwotICAgIHBhZGRpbmc6IDEwcHg7Ci19
Ci0KLXNlY3Rpb24gLmhpZGRlbiB7Ci0gICAgY29sb3I6ICNjY2M7Ci19Ci0KLXNlY3Rpb24gLmhp
ZGUgewotICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7Ci0gICAgcGFkZGluZzogMCAxMHB4OwotICAg
IHdpZHRoOiAxNnB4OwotICAgIGhlaWdodDogMTZweDsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1
cmwoJ3Zpc2libGUucG5nJyk7Ci0gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKLSAg
ICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOwotfQotCi1zZWN0aW9uIC5oaWRl
OmhvdmVyIHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ3Zpc2libGUtaG92ZXIucG5nJyk7
Ci19Ci0KLXNlY3Rpb24gLmhpZGRlbiAuaGlkZSB7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogdXJs
KCdoaWRkZW4ucG5nJyk7Ci19Ci0KLXNlY3Rpb24gLmhpZGRlbiAuaGlkZTpob3ZlciB7Ci0gICAg
YmFja2dyb3VuZC1pbWFnZTogdXJsKCdoaWRkZW4taG92ZXIucG5nJyk7Ci19Ci0KLWR0LCBkZCB7
Ci0gICAgZGlzcGxheTogdGFibGUtY2VsbDsKLX0KLQotZHQgewotICAgIHRleHQtYWxpZ246IHJp
Z2h0OwotICAgIGNsZWFyOiBib3RoOwotfQotCi1kdDphZnRlciB7Ci0gICAgY29udGVudDogIiA6
ICI7Ci19Ci0KLWRkIHsKLSAgICB0ZXh0LWluZGVudDogMC41ZXg7Ci19Ci0KLS5jb3VudHMgZHQg
ewotICAgIHdpZHRoOiAxMDBweDsKLX0KLQotLmNvdW50cyBkZCB7Ci0gICAgd2lkdGg6IDUwcHg7
Ci19Ci0KLWxpLmZvcm0gewotICAgIHBhZGRpbmc6IDA7Ci0gICAgYm9yZGVyLXRvcDogc29saWQg
MXB4IGxpZ2h0Z3JleTsKLX0KLQotZm9ybSB7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci0gICAg
cGFkZGluZzogMTBweDsKLX0KLQotaW5wdXQgewotICAgIHdpZHRoOiAxMDAlOwotICAgIGZvbnQt
c2l6ZTogMTRweDsKLSAgICBib3JkZXI6IHNvbGlkIDFweCBsaWdodGdyZXk7Ci19Ci0KLWZvcm0g
ZHQgewotICAgIHdpZHRoOiA3MHB4OwotfQotCi1mb3JtIGRkIHsKLSAgICB3aWR0aDogMTUwcHg7
Ci19Ci0KLSNtYW51YWwtc3VibWlzc2lvbiBmb3JtIHsKLSAgICBwYWRkaW5nOiAwOwotfQotI21h
bnVhbC1zdWJtaXNzaW9uIHRleHRhcmVhIHsKLSAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwot
ICAgIGZvbnQtc2l6ZTogMTRweDsKLSAgICBib3JkZXI6IG5vbmU7Ci19Ci0KLSNmb290ZXIgewot
ICAgIG1hcmdpbjogMTBweDsKLX0KSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3Qu
Y29tL2Nzcy90aXRsZS5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQg
YXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVh
bQpJbmRleDogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vanMvYWRtaW4uanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vanMvYWRtaW4uanMJ
KHJldmlzaW9uIDE0MDI1OCkKKysrIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2pz
L2FkbWluLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyMCArMCwwIEBACi1mdW5jdGlvbiBzdWJt
aXRYSFIobWV0aG9kLCBhY3Rpb24sIHBheWxvYWQsIGNhbGxiYWNrKSB7Ci0gICAgdmFyIHhociA9
IG5ldyBYTUxIdHRwUmVxdWVzdDsKLSAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rp
b24gKCkgewotICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgIT0gNCkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgaWYgKHhoci5zdGF0dXMgIT0gMjAwKQotICAgICAgICAgICAgZXJyb3Io
J0hUVFAgc3RhdHVzOiAnICsgeGhyLnN0YXR1cyk7Ci0gICAgICAgIGVsc2UgaWYgKHhoci5yZXNw
b25zZVRleHQgIT0gJ09LJykKLSAgICAgICAgICAgIGVycm9yKHhoci5yZXNwb25zZVRleHQpOwot
ICAgICAgICBpZiAoY2FsbGJhY2spCi0gICAgICAgICAgICBjYWxsYmFjaygpCi0gICAgfQotICAg
IHhoci5vcGVuKG1ldGhvZCwgYWN0aW9uLCB0cnVlKTsKLSAgICB4aHIuc2VuZChwYXlsb2FkKTsK
LX0KLQotZnVuY3Rpb24gcmVtb3ZlTm9uRm9ybUxpc3RJdGVtcyhsaXN0KSB7Ci0gICAgbGlzdC5j
aGlsZHJlbigpLmVhY2goZnVuY3Rpb24gKCkgewotICAgICAgICBpZiAoJC5pbkFycmF5KCdmb3Jt
JywgdGhpcy5jbGFzc0xpc3QpKQotICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmUoKTsKLSAgICB9
KTsKLX0KLQotZnVuY3Rpb24gY3JlYXRlS2V5TmFtZVJlbG9hZGVyKG5hbWUsIHZpc2liaWxpdHlB
Y3Rpb24sIGNhbGxiYWNrKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgJC5n
ZXRKU09OKG5hbWUsIGZ1bmN0aW9uIChlbnRyaWVzKSB7Ci0gICAgICAgICAgICB2YXIgbGlzdCA9
ICQoJyMnICsgbmFtZSArICcgdWwnKTsKLSAgICAgICAgICAgIGVudHJpZXMgPSBzb3J0UHJvcGVy
dGllcyhlbnRyaWVzKTsKLQotICAgICAgICAgICAgJC5lYWNoKGVudHJpZXMsIGZ1bmN0aW9uIChr
ZXksIHZhbHVlcykgewotICAgICAgICAgICAgICAgIHZhciBsYWJlbCA9IGtleSA9PSB2YWx1ZXNb
J25hbWUnXSA/IGtleSA6IGtleSArICcgOiAnICsgdmFsdWVzWyduYW1lJ107Ci0gICAgICAgICAg
ICAgICAgbGlzdC5hcHBlbmQoJzxsaT48aDMgaWQ9IicgKyBrZXkgKyAnIj4nICsgbGFiZWwgKyAn
PC9oMz48L2xpPicpOwotICAgICAgICAgICAgICAgIHZhciBpdGVtID0gbGlzdFswXS5sYXN0Q2hp
bGQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAodmFsdWVzWydoaWRkZW4nXSkKLSAgICAgICAgICAg
ICAgICAgICAgaXRlbS5jbGFzc05hbWUgPSAnaGlkZGVuJzsKLQotICAgICAgICAgICAgICAgIGlm
ICh2aXNpYmlsaXR5QWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICQoaXRlbSkuYXBwZW5k
KCcgPGEgY2xhc3M9ImhpZGUiPjwvYT4nKTsKLSAgICAgICAgICAgICAgICAgICAgJChpdGVtLmxh
c3RDaGlsZCkuY2xpY2soZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGpzb24gPSB7J2hpZGUnOiAhdGhpcy5wYXJlbnROb2RlLmNsYXNzTGlzdC5jb250YWlucygnaGlk
ZGVuJyl9Ci0gICAgICAgICAgICAgICAgICAgICAgICBqc29uW3Zpc2liaWxpdHlBY3Rpb25dID0g
dGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQuaWQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IHN1Ym1pdFhIUignUE9TVCcsICdjaGFuZ2UtdmlzaWJpbGl0eScsIEpTT04uc3RyaW5naWZ5KGpz
b24pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QuZmluZCgnZm9ybScpLnRyaWdnZXIo
J3JlbG9hZCcpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spCi0gICAgICAgICAgICAgICAgICAgIGNhbGxi
YWNrLmNhbGwoaXRlbSwgdmFsdWVzWydoaWRkZW4nXSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIGxpc3QuYXBwZW5kKCQoJyMnICsgbmFtZSArICcgdWwgLmZvcm0nKSk7Ci0gICAgICAg
IH0pOwotICAgIH0KLX0KLQotJCgnI2JyYW5jaGVzIGZvcm0nKS5iaW5kKCdyZWxvYWQnLCBjcmVh
dGVLZXlOYW1lUmVsb2FkZXIoJ2JyYW5jaGVzJykpOwotJCgnI3BsYXRmb3JtcyBmb3JtJykuYmlu
ZCgncmVsb2FkJywgY3JlYXRlS2V5TmFtZVJlbG9hZGVyKCdwbGF0Zm9ybXMnLCAncGxhdGZvcm0n
KSk7Ci0KLSQoJyNidWlsZGVycyBmb3JtJykuYmluZCgncmVsb2FkJywgZnVuY3Rpb24gKCkgewot
ICAgICQuZ2V0SlNPTignYnVpbGRlcnMnLCBmdW5jdGlvbiAoYnVpbGRlcnMpIHsKLSAgICAgICAg
dmFyIGxpc3QgPSAkKCcjYnVpbGRlcnMgdWwnKTsKLSAgICAgICAgcmVtb3ZlTm9uRm9ybUxpc3RJ
dGVtcyhsaXN0KTsKLSAgICAgICAgYnVpbGRlcnMgPSBidWlsZGVycy5zb3J0KCk7Ci0gICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgYnVpbGRlcnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICBs
aXN0LmFwcGVuZCgnPGxpPjxoMz48YSBocmVmPSJodHRwOi8vYnVpbGQud2Via2l0Lm9yZy9idWls
ZGVycy8nICsgYnVpbGRlcnNbaV0gKyAnIj4nICsgYnVpbGRlcnNbaV0gKyAnPC9hPjwvaDM+PC9s
aT4nKTsKLSAgICAgICAgbGlzdC5hcHBlbmQoJCgnI2J1aWxkZXJzIHVsIC5mb3JtJykpOwotICAg
IH0pOwotfSk7Ci0KLXZhciB0ZXN0UmVsb2FkZXIgPSBjcmVhdGVLZXlOYW1lUmVsb2FkZXIoJ3Rl
c3RzJywgJ3Rlc3QnLCBmdW5jdGlvbiAoaGlkZGVuKSB7Ci0gICAgdmFyIHRlc3ROYW1lID0gdGhp
cy5maXJzdENoaWxkLmlkOwotICAgICQoJyN0ZXN0cyBzZWxlY3QnKS5hcHBlbmQoJzxvcHRpb24g
dmFsdWU9IicgKyB0ZXN0TmFtZSArICciPicgKyB0ZXN0TmFtZSArICc8L29wdGlvbj4nKTsKLQot
fSk7Ci0kKCcjdGVzdHMgZm9ybScpLmJpbmQoJ3JlbG9hZCcsIGZ1bmN0aW9uICgpIHsKLSAgICB2
YXIgc2VsZWN0ID0gJCgnI3Rlc3RzIHNlbGVjdCcpOwotICAgIHNlbGVjdC5jaGlsZHJlbigpLnJl
bW92ZSgpOwotICAgIHRlc3RSZWxvYWRlcigpOwotfSk7Ci0KLSQuYWpheFNldHVwKHsKLSAgICAn
ZXJyb3InOiBmdW5jdGlvbih4aHIsIGUsIG1lc3NhZ2UpIHsgY29uc29sZS5sb2coeGhyKTsgZXJy
b3IoJ0ZhaWxlZCB3aXRoIEhUVFAgc3RhdHVzOiAnICsgeGhyLnN0YXR1cywgZSk7IH0sCi0gICAg
Y2FjaGU6IHRydWUsCi19KTsKLQotJCgnZm9ybScpLnRyaWdnZXIoJ3JlbG9hZCcpOwotCi0kKCdm
b3JtJykuYmluZCgnc3VibWl0JywgZnVuY3Rpb24gKGV2ZW50KSB7Ci0gICAgZXZlbnQucHJldmVu
dERlZmF1bHQoKTsKLQotICAgIHZhciBwYXlsb2FkOwotICAgIGlmICh0aGlzLnBheWxvYWQpCi0g
ICAgICAgIHBheWxvYWQgPSB0aGlzLnBheWxvYWQudmFsdWU7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IHZhciBjb250ZW50cyA9IHt9OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxl
bWVudHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICBjb250ZW50c1t0aGlzLmVsZW1lbnRzW2ld
Lm5hbWVdID0gdGhpcy5lbGVtZW50c1tpXS52YWx1ZTsKLSAgICAgICAgcGF5bG9hZCA9IEpTT04u
c3RyaW5naWZ5KGNvbnRlbnRzKTsKLSAgICB9Ci0KLSAgICBzdWJtaXRYSFIodGhpcy5tZXRob2Qs
IHRoaXMuYWN0aW9uLCBwYXlsb2FkLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICQodGhpcykudHJp
Z2dlcigncmVsb2FkJyk7Ci0gICAgfSkKLX0pOwotCi0kKCcjbWFudWFsLXN1Ym1pc3Npb24gdGV4
dGFyZWEnKS52YWwoSlNPTi5zdHJpbmdpZnkoewotICAgICdicmFuY2gnOiAnd2Via2l0LXRydW5r
JywKLSAgICAncGxhdGZvcm0nOiAnY2hyb21pdW0tbWFjJywKLSAgICAnYnVpbGRlci1uYW1lJzog
J0Nocm9taXVtIE1hYyBSZWxlYXNlIChQZXJmKScsCi0gICAgJ2J1aWxkLW51bWJlcic6ICcxMjMn
LAotICAgICd0aW1lc3RhbXAnOiBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCksCi0gICAgJ3dl
YmtpdC1yZXZpc2lvbic6IDEwNDg1NiwKLSAgICAnY2hyb21pdW0tcmV2aXNpb24nOiAxMjMwNTks
Ci0gICAgJ3Jlc3VsdHMnOgotICAgICAgICB7Ci0gICAgICAgICAgICAnd2Via2l0X3N0eWxlX3Rl
c3QnOiB7J2F2Zyc6IDEwMCwgJ21lZGlhbic6IDEwMiwgJ3N0ZGV2JzogNSwgJ21pbic6IDkwLCAn
bWF4JzogMTEwfSwKLSAgICAgICAgICAgICdzb21lX3Rlc3QnOiA1NCwKLSAgICAgICAgfSwKLX0s
IG51bGwsICcgICcpKTsKSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2pz
L2NvbmZpZy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNv
bS9qcy9jb25maWcuanMJKHJldmlzaW9uIDE0MDI1OCkKKysrIFdlYnNpdGVzL3dlYmtpdC1wZXJm
LmFwcHNwb3QuY29tL2pzL2NvbmZpZy5qcwkod29ya2luZyBjb3B5KQpAQCAtMSwxMjEgKzAsMCBA
QAotLyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRo
ZSBNb3ppbGxhIFB1YmxpYwotICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1Q
TCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBmaWxlLAotICogWW91IGNhbiBvYnRhaW4g
b25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KLQotdmFyIFVTRV9HRU5FUkFU
RURfSU1BR0VTX0lOX0RBU0hCT0FSRCA9IHRydWU7Ci12YXIgTUFYX0dSQVBIUyA9IDY7Ci12YXIg
TUFYX0NTRVRTID0gMTAwOwotdmFyIERBWSA9IDg2NDAwMDAwOwotCi12YXIgQ09MT1JTID0gWycj
ZTc0NTRjJywgJyM2ZGJhNGInLCAnIzQ5ODZjZicsICcjZjU5ODNkJywgJyM4ODRlOWYnLCAnI2Jm
NWM0MSddOwotCi0vLyBzZXJ2ZXIgZm9yIEpTT04gcGVyZm9ybWFuY2UgZGF0YQotdmFyIFNFUlZF
UiA9IGxvY2F0aW9uLnByb3RvY29sLmluZGV4T2YoJ2h0dHAnKSA9PSAwID8gbG9jYXRpb24ucHJv
dG9jb2wgKyAnLy8nICsgbG9jYXRpb24uaG9zdCA6ICdodHRwOi8vd2Via2l0LXBlcmYuYXBwc3Bv
dC5jb20nOwotCi0vLyBzZXJ2ZXIgZm9yIHN0YXRpYyBkYXNoYm9hcmQgaW1hZ2VzCi12YXIgSU1B
R0VfU0VSVkVSID0gU0VSVkVSOwotCi1pZiAoJC5jb2xvcikgewotICAgIHZhciBMSUdIVF9DT0xP
UlMgPSAkLm1hcChDT0xPUlMsIGZ1bmN0aW9uKGNvbG9yKSB7Ci0gICAgICAgIHJldHVybiAkLmNv
bG9yLnBhcnNlKGNvbG9yKS5hZGQoJ2EnLCAtLjUpLnRvU3RyaW5nKCk7Ci0gICAgfSk7Ci19Ci0K
LXZhciBQTE9UX09QVElPTlMgPSB7Ci0gICAgeGF4aXM6IHsgbW9kZTogJ3RpbWUnIH0sCi0gICAg
Y3Jvc3NoYWlyOiB7IG1vZGU6ICd5JyB9LAotICAgIHNlbGVjdGlvbjogeyBtb2RlOiAneHknLCBj
b2xvcjogJyM5N2M2ZTUnIH0sCi0gICAgc2VyaWVzOiB7IHNoYWRvd1NpemU6IDAgfSwKLSAgICBs
aW5lczogeyBzaG93OiBmYWxzZSB9LAotICAgIHBvaW50czogeyBzaG93OiB0cnVlIH0sCi0gICAg
Z3JpZDogewotICAgICAgICBjb2xvcjogJyNjZGQ2ZGYnLAotICAgICAgICBib3JkZXJXaWR0aDog
MiwKLSAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZicsCi0gICAgICAgIGhvdmVyYWJsZTog
dHJ1ZSwKLSAgICAgICAgY2xpY2thYmxlOiB0cnVlLAotICAgICAgICBhdXRvSGlnaGxpZ2h0OiBm
YWxzZQotICAgIH0KLX07Ci0KLXZhciBPVkVSVklFV19PUFRJT05TID0gewotICAgIHhheGlzOiB7
IG1vZGU6ICd0aW1lJyB9LAotICAgIHNlbGVjdGlvbjogeyBtb2RlOiAneHknLCBjb2xvcjogJyM5
N2M2ZTUnIH0sCi0gICAgc2VyaWVzOiB7Ci0gICAgICAgIGxpbmVzOiB7IHNob3c6IHRydWUsIGxp
bmVXaWR0aDogMSB9LAotICAgICAgICBzaGFkb3dTaXplOiAwCi0gICAgfSwKLSAgICBncmlkOiB7
Ci0gICAgICAgIGNvbG9yOiAnI2NkZDZkZicsCi0gICAgICAgIGJvcmRlcldpZHRoOiAyLAotICAg
ICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJywKLSAgICAgICAgdGlja0NvbG9yOiAncmdiYSgw
LDAsMCwwKScKLSAgICB9Ci19OwotCi12YXIgUkVQT1NJVE9SSUVTID0gWydXZWJLaXQnLCAnQ2hy
b21pdW0nXTsKLXZhciBERUZBVUxUX1JFUE9TSVRPUlkgPSAnV2ViS2l0JzsKLQotZnVuY3Rpb24g
dXJsRm9yQ2hhbmdlc2V0KGJyYW5jaCwgY2hhbmdlc2V0LCByZXBvc2l0b3J5KQotewotICAgIGlm
IChyZXBvc2l0b3J5ID09ICdDaHJvbWl1bScpCi0gICAgICAgIHJldHVybiAnaHR0cDovL3NyYy5j
aHJvbWl1bS5vcmcvdmlld3ZjL2Nocm9tZT92aWV3PXJldiZyZXZpc2lvbj0nICsKLSAgICAgICAg
ICAgICAgIGNoYW5nZXNldDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAnaHR0cDovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvJyArIGNoYW5nZXNldDsKLX0KLQotZnVuY3Rpb24gdXJsRm9y
Q2hhbmdlc2V0TGlzdChicmFuY2gsIGNoYW5nZXNldExpc3QsIHJlcG9zaXRvcnkpCi17Ci0gICAg
dmFyIG1pbiA9IE1hdGgubWluLmFwcGx5KE1hdGgsIGNoYW5nZXNldExpc3QpOwotICAgIHZhciBt
YXggPSBNYXRoLm1heC5hcHBseShNYXRoLCBjaGFuZ2VzZXRMaXN0KTsKLSAgICBpZiAocmVwb3Np
dG9yeSA9PSAnQ2hyb21pdW0nKQotICAgICAgICByZXR1cm4gJ2h0dHA6Ly9idWlsZC5jaHJvbWl1
bS5vcmcvZi9jaHJvbWl1bS9wZXJmL2Rhc2hib2FyZC91aS8nICsKLSAgICAgICAgICAgICAgICdj
aGFuZ2Vsb2cuaHRtbD91cmw9L3RydW5rL3NyYyZtb2RlPWh0bWwmcmFuZ2U9JyArIG1pbiArICc6
JyArCi0gICAgICAgICAgICAgICBtYXg7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gJ2h0dHA6
Ly90cmFjLndlYmtpdC5vcmcvbG9nLz9yZXY9JyArIG1heCArICcmc3RvcF9yZXY9JyArIG1pbiAr
Ci0gICAgICAgICAgICAgICAnJnZlcmJvc2U9b24nOwotfQotCi1mdW5jdGlvbiBzb3J0UHJvcGVy
dGllcyhvYmplY3QpIHsKLSAgICB2YXIgdGVzdHMgPSBPYmplY3Qua2V5cyhvYmplY3QpLnNvcnQo
KTsKLSAgICB2YXIgc29ydGVkT2JqZWN0ID0ge307Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
ZXN0cy5sZW5ndGg7IGkrKykKLSAgICAgICAgc29ydGVkT2JqZWN0W3Rlc3RzW2ldXSA9IG9iamVj
dFt0ZXN0c1tpXV07Ci0gICAgcmV0dXJuIHNvcnRlZE9iamVjdDsKLX0KLQotLy8gRklYTUUgbW92
ZSB0aGlzIGJhY2sgdG8gZGFzaGJvYXJkLmpzIG9uY2UgdGhlIGJ1ZyA3MTg5MjUgaXMgZml4ZWQK
LWZ1bmN0aW9uIGZldGNoRGFzaGJvYXJkTWFuaWZlc3QoY2FsbGJhY2spCi17Ci0gICAgJC5hamF4
U2V0dXAoewotICAgICAgICAnZXJyb3InOiBmdW5jdGlvbih4aHIsIGUsIG1lc3NhZ2UpIHsKLSAg
ICAgICAgICAgIGVycm9yKCdDb3VsZCBub3QgZG93bmxvYWQgZGFzaGJvYXJkIGRhdGEgZnJvbSBz
ZXJ2ZXInLCBlKTsKLSAgICAgICAgfSwKLSAgICAgICAgY2FjaGU6IHRydWUsCi0gICAgfSk7Ci0K
LSAgICAkLmdldEpTT04oU0VSVkVSICsgJy9hcGkvdGVzdC9kYXNoYm9hcmQnLCBmdW5jdGlvbiAo
ZGFzaGJvYXJkTWFuaWZlc3QpIHsKLSAgICAgICAgZGFzaGJvYXJkTWFuaWZlc3RbJ3Rlc3RUb0lk
J10gPSBzb3J0UHJvcGVydGllcyhkYXNoYm9hcmRNYW5pZmVzdFsndGVzdFRvSWQnXSk7Ci0gICAg
ICAgIGNhbGxiYWNrKGRhc2hib2FyZE1hbmlmZXN0KTsKLSAgICB9KTsKLX0KLQotKGZ1bmN0aW9u
KCkgewotICAgICQuYWpheFNldHVwKHsKLSAgICAgICAgJ2Vycm9yJzogZnVuY3Rpb24oeGhyLCBl
LCBtZXNzYWdlKSB7Ci0gICAgICAgICAgICBlcnJvcignQ291bGQgbm90IGRldGVybWluZSB0aGUg
dGhlIGxvZ2luIHN0YXR1cycsIGUpOwotICAgICAgICB9LAotICAgICAgICBjYWNoZTogdHJ1ZSwK
LSAgICB9KTsKLQotICAgICQuZ2V0SlNPTignL2FwaS91c2VyL2lzLWFkbWluJywgZnVuY3Rpb24g
KGlzQWRtaW4pIHsKLSAgICAgICAgaWYgKGlzQWRtaW4pIHsKLSAgICAgICAgICAgICQoJyNoZWFk
ZXIgbmF2JykuYXBwZW5kKCc8YSBocmVmPSIvYWRtaW4vIj5BZG1pbjwvYT4nKTsKLSAgICAgICAg
ICAgIGlmICghJCgnI2hlYWRlciBuYXYgLnNlbGVjdGVkJykubGVuZ3RoKSB7Ci0gICAgICAgICAg
ICAgICAgJCgnI2hlYWRlciBuYXYgYScpLmxhc3QoKS5hZGRDbGFzcygnc2VsZWN0ZWQnKQotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSkKLX0pKCk7Cg==
</data>
<flag name="review"
          id="202095"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>