<?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>131318</bug_id>
          
          <creation_ts>2014-04-07 15:42:58 -0700</creation_ts>
          <short_desc>Web Replay: memoize fallback time values for document.lastModified</short_desc>
          <delta_ts>2014-04-16 17:57:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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>
          <dependson>129391</dependson>
    
    <dependson>130728</dependson>
    
    <dependson>131324</dependson>
    
    <dependson>131667</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Burg">burg</reporter>
          <assigned_to name="Brian Burg">burg</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>joepeck</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kling</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>998260</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-07 15:42:58 -0700</bug_when>
    <thetext>If we can&apos;t understand or find the Last-Modified header, then document.lastModified is derived from currentTimeMS(), which is obviously nondeterministic.

It&apos;s better to handle this inside Document::lastModified rather than using MemoizedDOMResult, because only the fallback case is nondeterministic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998293</commentid>
    <comment_count>1</comment_count>
      <attachid>228772</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-07 16:56:38 -0700</bug_when>
    <thetext>Created attachment 228772
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998294</commentid>
    <comment_count>2</comment_count>
      <attachid>228772</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-07 16:57:03 -0700</bug_when>
    <thetext>Comment on attachment 228772
the patch

wrong patch, i hate you webkit-patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998298</commentid>
    <comment_count>3</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-07 17:01:16 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 228772 [details])
&gt; wrong patch, i hate you webkit-patch

Reported: https://bugs.webkit.org/show_bug.cgi?id=131327</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998299</commentid>
    <comment_count>4</comment_count>
      <attachid>228774</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-07 17:01:55 -0700</bug_when>
    <thetext>Created attachment 228774
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998302</commentid>
    <comment_count>5</comment_count>
      <attachid>228775</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-07 17:02:54 -0700</bug_when>
    <thetext>Created attachment 228775
OK, this is actually it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998305</commentid>
    <comment_count>6</comment_count>
      <attachid>228775</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-07 17:06:26 -0700</bug_when>
    <thetext>Comment on attachment 228775
OK, this is actually it

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

&gt; Source/WebCore/ChangeLog:15
&gt; +        Test: http/tests/inspector/replay/document-last-modified-fallback-value.html

This test will not actually work until 130728 and 129391 are fixed. Until then, the resource could have cached values of Last-Modified and be flaky. I didn&apos;t mark anything skip because LayoutTests/inspector/ is completely skipped due to 129642.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998373</commentid>
    <comment_count>7</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-07 19:08:59 -0700</bug_when>
    <thetext>BTW: this API is being addressed now, because it is used by the google analytics urchin. So, basically every page hits it once, then makes a network request with a URL based on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998378</commentid>
    <comment_count>8</comment_count>
      <attachid>228775</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-04-07 19:14:22 -0700</bug_when>
    <thetext>Comment on attachment 228775
OK, this is actually it

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

r=me

&gt; LayoutTests/http/tests/inspector/replay/document-last-modified-fallback-value.html:4
&gt; +&lt;script type=&quot;text/javascript&quot; src=&quot;./replay-test.js&quot;&gt;&lt;/script&gt;

Is the &quot;./&quot; really needed here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000576</commentid>
    <comment_count>9</comment_count>
      <attachid>228775</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-14 12:45:51 -0700</bug_when>
    <thetext>Comment on attachment 228775
OK, this is actually it

Clearing flags on attachment: 228775

Committed r167261: &lt;http://trac.webkit.org/changeset/167261&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000577</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-14 12:45:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000769</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-14 23:20:47 -0700</bug_when>
    <thetext>This test was landed without an expected result. But more importantly, it appears that this change broke a lot of tests:

http/tests/loading/unfinished-main-resource-back-to-cached-page-callbacks.html
http/tests/loading/unfinished-load-back-to-cached-page-callbacks.html
http/tests/misc/isindex-with-no-form.html
http/tests/navigation/javascriptlink-frames.html
http/tests/navigation/document-location-click.html
http/tests/navigation/javascriptlink-goback.html
http/tests/navigation/javascriptlink-basic.html
http/tests/navigation/document-location-click-timeout.html
http/tests/navigation/document-location-mouseover.html

Please see &lt;http://build.webkit.org/results/Apple%20MountainLion%20Release%20WK2%20(Tests)/r167261%20(17688)/results.html&gt; for results.

Will roll out. Unfortunately, bots were not being looked at today, and thus didn&apos;t work well, so I have to go by data from a single tester. Apologies in advance if this was not the culprit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000771</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-14 23:21:52 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 131667</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000773</commentid>
    <comment_count>13</comment_count>
      <attachid>228775</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-14 23:22:08 -0700</bug_when>
    <thetext>Comment on attachment 228775
OK, this is actually it

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

&gt;&gt; Source/WebCore/ChangeLog:15
&gt;&gt; +        Test: http/tests/inspector/replay/document-last-modified-fallback-value.html
&gt; 
&gt; This test will not actually work until 130728 and 129391 are fixed. Until then, the resource could have cached values of Last-Modified and be flaky. I didn&apos;t mark anything skip because LayoutTests/inspector/ is completely skipped due to 129642.

Looks like this is not the case, because bots were running this test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000779</commentid>
    <comment_count>14</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-14 23:31:03 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; This test was landed without an expected result. But more importantly, it appears that this change broke a lot of tests:
&gt; 
&gt; http/tests/loading/unfinished-main-resource-back-to-cached-page-callbacks.html
&gt; http/tests/loading/unfinished-load-back-to-cached-page-callbacks.html
&gt; http/tests/misc/isindex-with-no-form.html
&gt; http/tests/navigation/javascriptlink-frames.html
&gt; http/tests/navigation/document-location-click.html
&gt; http/tests/navigation/javascriptlink-goback.html
&gt; http/tests/navigation/javascriptlink-basic.html
&gt; http/tests/navigation/document-location-click-timeout.html
&gt; http/tests/navigation/document-location-mouseover.html
&gt; 
&gt; Please see &lt;http://build.webkit.org/results/Apple%20MountainLion%20Release%20WK2%20(Tests)/r167261%20(17688)/results.html&gt; for results.
&gt; 
&gt; Will roll out. Unfortunately, bots were not being looked at today, and thus didn&apos;t work well, so I have to go by data from a single tester. Apologies in advance if this was not the culprit.

Ugh, my IRC client apparently stopped working after dinner or I would have looked into it. I&apos;ll look at this tomorrow on a ML debug build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001037</commentid>
    <comment_count>15</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-15 16:40:14 -0700</bug_when>
    <thetext>After some fiddling and test runs, my hypothesis at the moment is that the new test was running even though it shouldn&apos;t have. If it encountered an error and failed to clean up/restore non-replay settings (say, leaving page cache turned off), this may mess up later tests on the same process. 

(It&apos;s disturbing to me that I cannot confidently say that the test harness  resets obvious settings like that.)


When I explicitly skip the test in TestExpectations, I can no longer reproduce the problem on my WK2-ML-debug build.

So, can this be re-landed with updated test expectations? I don&apos;t think it&apos;s a productive use of time to try and enable this test right now, since it clearly depends on other replay support that hasn&apos;t landed yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001038</commentid>
    <comment_count>16</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-15 16:55:55 -0700</bug_when>
    <thetext>&gt; So, can this be re-landed with updated test expectations?

Seems worth trying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001050</commentid>
    <comment_count>17</comment_count>
      <attachid>229419</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-15 17:24:31 -0700</bug_when>
    <thetext>Created attachment 229419
patch with updated TestExpectations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001437</commentid>
    <comment_count>18</comment_count>
      <attachid>229419</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-16 17:57:05 -0700</bug_when>
    <thetext>Comment on attachment 229419
patch with updated TestExpectations

Clearing flags on attachment: 229419

Committed r167406: &lt;http://trac.webkit.org/changeset/167406&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001438</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-16 17:57:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228772</attachid>
            <date>2014-04-07 16:56:38 -0700</date>
            <delta_ts>2014-04-07 17:01:52 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>bug-131318-20140407165617.patch</filename>
            <type>text/plain</type>
            <size>50800</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY2ODg4CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDI3YzdjNWIwMGVjOWJhMzE4NTAy
NjczOTQ2MjMzN2E5NDE5MDQ0Yy4uZGI3MzU1MjdmMTQ1YzQwYTk5ZmU5OGFhYWQ1Zjk0OWQxZTk3
ZDE2MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE0LTA0LTA3ICBCcmlhbiBKLiBCdXJnICA8
YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiB0ZXN0IGhl
bHBlciBmaWxlcyBzaG91bGQgYmUgdW5kZXIgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0
b3IvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzEz
MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWFy
cmFuZ2UgaGVscGVyIGZpbGVzIHVzZWQgYnkgZnVsbCBpbnNwZWN0b3IgdGVzdHMuIEluIHRoZWly
IHByZXZpb3VzIHBsYWNlbWVudCwKKyAgICAgICAgdGhleSB3ZXJlIG91dHNpZGUgdGhlIGh0dHAg
c2VydmVyIHJvb3QgYW5kIGNvdWxkbid0IGJlIGxvYWRlZCBmcm9tIGh0dHAgdGVzdHMuCisKKyAg
ICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9kZWJ1Z2dlci10ZXN0LmpzOiBS
ZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2RlYnVnZ2VyLXRlc3Qu
anMuCisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvZG9tL3NoYXBlcy10ZXN0LmpzOiBS
ZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9zaGFwZXMtdGVzdC5qcy4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qczogUmVuYW1lZCBm
cm9tIExheW91dFRlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcy4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL2luc3BlY3Rvci9yZXBsYXkvcmVwbGF5LXRlc3QuanM6IFJlbmFtZWQgZnJvbSBM
YXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwbGF5L3JlcGxheS10ZXN0LmpzLgorICAgICAgICAqIGlu
c3BlY3Rvci9kZWJ1Z2dlci9wcm9iZS1tYW5hZ2VyLWFkZC1yZW1vdmUtYWN0aW9ucy5odG1sOgor
ICAgICAgICAqIGluc3BlY3Rvci9kb20vY29udGVudC1mbG93LWNvbnRlbnQtbm9kZXMuaHRtbDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvZG9tL2NvbnRlbnQtZmxvdy1jb250ZW50LXJlbW92YWwuaHRt
bDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZG9tL2NvbnRlbnQtZmxvdy1saXN0Lmh0bWw6CisgICAg
ICAgICogaW5zcGVjdG9yL2RvbS9jb250ZW50LW5vZGUtcmVnaW9uLWluZm8uaHRtbDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZG9tL2hpZ2hsaWdodC1zaGFwZS1vdXRzaWRlLW1hcmdpbi5odG1sOgor
ICAgICAgICAqIGluc3BlY3Rvci9kb20vaGlnaGxpZ2h0LXNoYXBlLW91dHNpZGUuaHRtbDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvcGFnZS9tYWluLWZyYW1lLXJlc291cmNlLmh0bWw6CisgICAgICAg
ICogaW5zcGVjdG9yL3JlcGxheS9qYXZhc2NyaXB0LWRhdGUtbm93Lmh0bWw6CisgICAgICAgICog
aW5zcGVjdG9yL3JlcGxheS9qYXZhc2NyaXB0LXJhbmRvbS1zZWVkLmh0bWw6CisgICAgICAgICog
aW5zcGVjdG9yL3Rlc3QtaGFybmVzcy10cml2aWFsbHktd29ya3MuaHRtbDoKKwogMjAxNC0wMy0z
MCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgc2xvdyBK
U1JlZ3Jlc3MgdGVzdHMgb3V0IG9mIHRoZSB3YXkgc28gdGhhdCB0aGV5IGRvbid0IHNob3cgdXAg
aW4gcnVuLWpzYy1iZW5jaG1hcmtzIHJ1bnMgYW5kIGFsc28gc2tpcCB0ZXN0cyB0aGF0IGFyZSBl
eHRyZW1lbHkgbG9uZy1ydW5uaW5nCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2luc3BlY3Rvci9kZWJ1Z2dlci9kZWJ1Z2dlci10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvZGVidWdnZXItdGVzdC5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMTAy
NTU4NzBhMTk1NjFkNzk2ZWY4OGYyZDg1OTYwMDkwMzRlMjRhCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvZGVidWdnZXItdGVzdC5q
cwpAQCAtMCwwICsxLDExNSBAQAorSW5zcGVjdG9yVGVzdFByb3h5LnJlZ2lzdGVySW5pdGlhbGl6
ZXIoZnVuY3Rpb24oKSB7CisKK0luc3BlY3RvclRlc3Quc3RhcnRUcmFjaW5nQnJlYWtwb2ludHMg
PSBmdW5jdGlvbigpCit7CisgICAgaWYgKCFXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2
ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5CcmVha3BvaW50
QWRkZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJCcmVh
a3BvaW50IHdhcyBhZGRlZC4iKTsKKyAgICB9KTsKKworICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dl
ck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2
ZW50LkJyZWFrcG9pbnRSZW1vdmVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICBJbnNwZWN0
b3JUZXN0LmxvZygiQnJlYWtwb2ludCB3YXMgcmVtb3ZlZC4iKTsKKyAgICB9KTsKKworICAgIFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnQuRXZlbnQuRGlzYWJsZWRTdGF0ZURpZENoYW5nZSwgZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC50YXJnZXQ7CisgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KGJyZWFrcG9pbnQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCwgIlVuZXhw
ZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkJyZWFr
cG9pbnQgZGlzYWJsZWQgc3RhdGUgY2hhbmdlZDogIiArIGJyZWFrcG9pbnQuZGlzYWJsZWQpOwor
ICAgIH0pOworCisgICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5SZXNvbHZlZFN0YXRlRGlkQ2hhbmdlLCBmdW5j
dGlvbihldmVudCkgeworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LnRhcmdldDsKKyAg
ICAgICAgY29uc29sZS5hc3NlcnQoYnJlYWtwb2ludCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5C
cmVha3BvaW50LCAiVW5leHBlY3RlZCBvYmplY3QgdHlwZSEiKTsKKworICAgICAgICBJbnNwZWN0
b3JUZXN0LmxvZygiQnJlYWtwb2ludCByZXNvbHZlZCBzdGF0ZSBjaGFuZ2VkOiAiICsgYnJlYWtw
b2ludC5yZXNvbHZlZCk7CisgICAgfSk7CisKKyAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5h
ZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50LkF1dG9Db250aW51
ZURpZENoYW5nZSwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBl
dmVudC50YXJnZXQ7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGJyZWFrcG9pbnQgaW5zdGFuY2Vv
ZiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCwgIlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisK
KyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkJyZWFrcG9pbnQgYXV0b2NvbnRpbnVlIHN0YXRl
IGNoYW5nZWQ6ICIgKyBicmVha3BvaW50LmF1dG9Db250aW51ZSk7CisgICAgfSk7CisKKyAgICBX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50LkV2ZW50LkNvbmRpdGlvbkRpZENoYW5nZSwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAg
ICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC50YXJnZXQ7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KGJyZWFrcG9pbnQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCwgIlVuZXhwZWN0
ZWQgb2JqZWN0IHR5cGUhIik7CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkJyZWFrcG9p
bnQgY29uZGl0aW9uIGNoYW5nZWQ6ICIgKyBicmVha3BvaW50LmNvbmRpdGlvbik7CisgICAgfSk7
CisKKyAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50LkV2ZW50LkFjdGlvbnNEaWRDaGFuZ2UsIGZ1bmN0aW9uKGV2ZW50KSB7
CisgICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQudGFyZ2V0OworICAgICAgICBjb25zb2xl
LmFzc2VydChicmVha3BvaW50IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQsICJV
bmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOworCisgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJC
cmVha3BvaW50IGFjdGlvbnMgY2hhbmdlZC4gTmV3IGNvdW50OiAiICsgYnJlYWtwb2ludC5hY3Rp
b25zLmxlbmd0aCk7CisgICAgfSk7Cit9CisKK0luc3BlY3RvclRlc3Quc3RhcnRUcmFjaW5nUHJv
YmVzID0gZnVuY3Rpb24oKQoreworICAgIGlmICghV2ViSW5zcGVjdG9yLnByb2JlTWFuYWdlcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgV2ViSW5zcGVjdG9yLnByb2JlTWFuYWdlci5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5Qcm9iZU1hbmFnZXIuRXZlbnQuUHJvYmVTZXRBZGRlZCwg
ZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIHByb2JlU2V0ID0gZXZlbnQuZGF0YS5wcm9i
ZVNldDsKKyAgICAgICAgY29uc29sZS5hc3NlcnQocHJvYmVTZXQgaW5zdGFuY2VvZiBXZWJJbnNw
ZWN0b3IuUHJvYmVTZXQsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOworCisgICAgICAgIElu
c3BlY3RvclRlc3QubG9nKCJQcm9iZSBzZXQgd2FzIGFkZGVkLiBOZXcgY291bnQ6ICIgKyBXZWJJ
bnNwZWN0b3IucHJvYmVNYW5hZ2VyLnByb2JlU2V0cy5sZW5ndGgpOworICAgIH0pOworCisgICAg
V2ViSW5zcGVjdG9yLnByb2JlTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Q
cm9iZU1hbmFnZXIuRXZlbnQuUHJvYmVTZXRSZW1vdmVkLCBmdW5jdGlvbihldmVudCkgeworICAg
ICAgICB2YXIgcHJvYmVTZXQgPSBldmVudC5kYXRhLnByb2JlU2V0OworICAgICAgICBjb25zb2xl
LmFzc2VydChwcm9iZVNldCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Qcm9iZVNldCwgIlVuZXhw
ZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlByb2Jl
IHNldCB3YXMgcmVtb3ZlZC4gTmV3IGNvdW50OiAiICsgV2ViSW5zcGVjdG9yLnByb2JlTWFuYWdl
ci5wcm9iZVNldHMubGVuZ3RoKTsKKyAgICB9KTsKKworICAgIFdlYkluc3BlY3Rvci5Qcm9iZS5h
ZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Qcm9iZS5FdmVudC5FeHByZXNzaW9uQ2hhbmdl
ZCwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIHByb2JlID0gZXZlbnQudGFyZ2V0Owor
ICAgICAgICBjb25zb2xlLmFzc2VydChwcm9iZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Qcm9i
ZSwgIlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5s
b2coIlByb2JlIHdpdGggaWRlbnRpZmllciAiICsgcHJvYmUuaWQgKyAiIGNoYW5nZWQgZXhwcmVz
c2lvbjogIiArIHByb2JlLmV4cHJlc3Npb24pOworICAgIH0pOworCisgICAgV2ViSW5zcGVjdG9y
LlByb2JlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlByb2JlLkV2ZW50LlNhbXBsZUFk
ZGVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIgcHJvYmUgPSBldmVudC50YXJnZXQ7
CisgICAgICAgIHZhciBzYW1wbGUgPSBldmVudC5kYXRhOworICAgICAgICBjb25zb2xlLmFzc2Vy
dChwcm9iZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Qcm9iZSwgIlVuZXhwZWN0ZWQgb2JqZWN0
IHR5cGUhIik7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHNhbXBsZSBpbnN0YW5jZW9mIFdlYklu
c3BlY3Rvci5Qcm9iZVNhbXBsZSwgIlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisKKyAgICAg
ICAgSW5zcGVjdG9yVGVzdC5sb2coIlByb2JlIHdpdGggaWRlbnRpZmllciAiICsgcHJvYmUuaWQg
KyAiIGFkZGVkIHNhbXBsZTogIiArIHNhbXBsZSk7CisgICAgfSk7CisKKyAgICBXZWJJbnNwZWN0
b3IuUHJvYmUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUHJvYmUuRXZlbnQuU2FtcGxl
c0NsZWFyZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBwcm9iZSA9IGV2ZW50LnRh
cmdldDsKKyAgICAgICAgY29uc29sZS5hc3NlcnQocHJvYmUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0
b3IuUHJvYmUsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOworCisgICAgICAgIEluc3BlY3Rv
clRlc3QubG9nKCJQcm9iZSB3aXRoIGlkZW50aWZpZXIgIiArIHByb2JlLmlkICsgIiBjbGVhcmVk
IGFsbCBzYW1wbGVzLiIpOworICAgIH0pOworCisgICAgV2ViSW5zcGVjdG9yLlByb2JlU2V0LmFk
ZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlByb2JlU2V0LkV2ZW50LlByb2JlQWRkZWQsIGZ1
bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBwcm9iZSA9IGV2ZW50LmRhdGE7CisgICAgICAg
IHZhciBwcm9iZVNldCA9IGV2ZW50LnRhcmdldDsKKyAgICAgICAgY29uc29sZS5hc3NlcnQocHJv
YmUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUHJvYmUsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBl
ISIpOworICAgICAgICBjb25zb2xlLmFzc2VydChwcm9iZVNldCBpbnN0YW5jZW9mIFdlYkluc3Bl
Y3Rvci5Qcm9iZVNldCwgIlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisKKyAgICAgICAgSW5z
cGVjdG9yVGVzdC5sb2coIlByb2JlIHdpdGggaWRlbnRpZmllciAiICsgcHJvYmUuaWQgKyAiIHdh
cyBhZGRlZCB0byBwcm9iZSBzZXQuIik7CisgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJQcm9i
ZSBzZXQncyBwcm9iZSBjb3VudDogIiArIHByb2JlU2V0LnByb2Jlcy5sZW5ndGgpOworICAgIH0p
OworCisgICAgV2ViSW5zcGVjdG9yLlByb2JlU2V0LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLlByb2JlU2V0LkV2ZW50LlByb2JlUmVtb3ZlZCwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAg
ICAgdmFyIHByb2JlID0gZXZlbnQuZGF0YTsKKyAgICAgICAgdmFyIHByb2JlU2V0ID0gZXZlbnQu
dGFyZ2V0OworICAgICAgICBjb25zb2xlLmFzc2VydChwcm9iZSBpbnN0YW5jZW9mIFdlYkluc3Bl
Y3Rvci5Qcm9iZSwgIlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KHByb2JlU2V0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlByb2JlU2V0LCAiVW5leHBl
Y3RlZCBvYmplY3QgdHlwZSEiKTsKKworICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUHJvYmUg
d2l0aCBpZGVudGlmaWVyICIgKyBwcm9iZS5pZCArICIgd2FzIHJlbW92ZWQgZnJvbSBwcm9iZSBz
ZXQuIik7CisgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJQcm9iZSBzZXQncyBwcm9iZSBjb3Vu
dDogIiArIHByb2JlU2V0LnByb2Jlcy5sZW5ndGgpOworICAgIH0pOworfQorCit9KTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RvbS9zaGFwZXMtdGVzdC5q
cyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RvbS9zaGFwZXMtdGVzdC5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yM2M1Njk1NjQwYjBmYmZmNmRiZGNlYTA2NjcxZjUzYmZmN2NhNTk2Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZG9tL3NoYXBl
cy10ZXN0LmpzCkBAIC0wLDAgKzEsOTEgQEAKK0luc3BlY3RvclRlc3RQcm94eS5yZWdpc3Rlcklu
aXRpYWxpemVyKGZ1bmN0aW9uKCkgeworCitJbnNwZWN0b3JUZXN0LlNoYXBlcyA9IHsKKyAgICBn
ZXRTaGFwZU91dHNpZGVJbmZvRm9yU2VsZWN0b3I6IGZ1bmN0aW9uKHNlbGVjdG9yLCBjYWxsYmFj
aykKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5kb21UcmVlTWFuYWdlci5yZXF1ZXN0RG9j
dW1lbnQocmVxdWVzdERvY3VtZW50Q2FsbGJhY2spOworCisgICAgICAgIGZ1bmN0aW9uIHJlcXVl
c3REb2N1bWVudENhbGxiYWNrKG5vZGUpIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNz
ZXJ0KG5vZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuRE9NTm9kZSwgIlVuZXhwZWN0ZWQgYXJn
dW1lbnQgdG8gcmVxdWVzdERvY3VtZW50IGNhbGxiYWNrLiIpCisgICAgICAgICAgICBET01BZ2Vu
dC5xdWVyeVNlbGVjdG9yLmludm9rZSh7bm9kZUlkOiBub2RlLmlkLCBzZWxlY3Rvcjogc2VsZWN0
b3J9LCBxdWVyeVNlbGVjdG9yQ2FsbGJhY2spOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rp
b24gcXVlcnlTZWxlY3RvckNhbGxiYWNrKGVycm9yLCBub2RlSWQpIHsKKyAgICAgICAgICAgIElu
c3BlY3RvclRlc3QuYXNzZXJ0KCFlcnJvciwgIkVycm9yIGluIGNhbGxiYWNrIGZvciBET01BZ2Vu
dC5xdWVyeVNlbGVjdG9yIik7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2Rl
SWQsICJJbnZhbGlkIGFyZ3VtZW50IHRvIGNhbGxiYWNrIGZvciBET01BZ2VudC5xdWVyeVNlbGVj
dG9yIik7CisKKyAgICAgICAgICAgIHZhciBoaWdobGlnaHRDb25maWcgPSB7CisgICAgICAgICAg
ICAgICAgc2hvd0luZm86IHRydWUsCisgICAgICAgICAgICAgICAgY29udGVudENvbG9yOiB7cjog
MjU1LCBnOiAyNTUsIGI6IDI1NX0sCisgICAgICAgICAgICAgICAgcGFkZGluZ0NvbG9yOiB7cjog
MjU1LCBnOiAyNTUsIGI6IDI1NX0sCisgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IHtyOiAy
NTUsIGc6IDI1NSwgYjogMjU1fSwKKyAgICAgICAgICAgICAgICBtYXJnaW5Db2xvcjoge3I6IDI1
NSwgZzogMjU1LCBiOiAyNTV9LAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIERPTUFnZW50
LmhpZ2hsaWdodE5vZGUuaW52b2tlKHtub2RlSWQ6IG5vZGVJZCwgaGlnaGxpZ2h0Q29uZmlnOiBo
aWdobGlnaHRDb25maWd9LCBoaWdobGlnaHROb2RlQ2FsbGJhY2spOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gaGlnaGxpZ2h0Tm9kZUNhbGxiYWNrKGVycm9yKSB7CisgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmFzc2VydCghZXJyb3IsICJFcnJvciBpbiBjYWxsYmFjayBmb3IgRE9N
QWdlbnQuaGlnaGxpZ2h0Tm9kZSIpOworCisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1
YXRlSW5QYWdlKCJ3aW5kb3cuaW50ZXJuYWxzLmluc3BlY3RvckhpZ2hsaWdodE9iamVjdCgpIiwg
cmVjZWl2ZWRIaWdobGlnaHRPYmplY3QpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24g
cmVjZWl2ZWRIaWdobGlnaHRPYmplY3QoZXJyb3IsIHBheWxvYWQsIHdhc1Rocm93bikgeworICAg
ICAgICAgICAgY29uc29sZS5hc3NlcnQoIWVycm9yLCAiV2hlbiBldmFsdWF0aW5nIGNvZGUsIHJl
Y2VpdmVkIHVuZXhwZWN0ZWQgZXJyb3I6IiArIGVycm9yKTsKKyAgICAgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KCFlcnJvciwgIldoZW4gZXZhbHVhdGluZyBjb2RlLCBhbiBleGNlcHRpb24gd2FzIHRo
cm93bjoiICsgd2FzVGhyb3duKTsKKworICAgICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNl
KHBheWxvYWQudmFsdWUpOworICAgICAgICAgICAgY2FsbGJhY2soZGF0YS5lbGVtZW50SW5mby5z
aGFwZU91dHNpZGVJbmZvKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBhc3NlcnRQYXRoc0Fy
ZVJvdWdobHlFcXVhbDogZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkKKyAgICB7
CisgICAgICAgIGZ1bmN0aW9uIGNvb3JkaW5hdGVzQXJlUm91Z2hseUVxdWFsKGEsIGIpIHsKKyAg
ICAgICAgICAgIC8vIFNvbWUgcGxhdGZvcm1zIG1heSBvbmx5IHN0b3JlIGludGVnZXIgcGF0aCBw
b2ludHMsIHNvIHRoZSBwb3RlbnRpYWwKKyAgICAgICAgICAgIC8vIGRpZmZlcmVuY2VzIGJldHdl
ZW4gY29ycmVjdCBwYXRocyBjYW4gYmUgcm91Z2hseSBoYWxmIGEgdW5pdC4KKyAgICAgICAgICAg
IHJldHVybiB0eXBlb2YgYSA9PT0gIm51bWJlciIgJiYgdHlwZW9mIGIgPT09ICJudW1iZXIiICYm
IE1hdGguYWJzKGEgLSBiKSA8IDAuNTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHBh
dGhzQXJlUm91Z2hseUVxdWFsKGFjdHVhbFBhdGgsIGV4cGVjdGVkUGF0aCkgeworICAgICAgICAg
ICAgdmFyIGV4cGVjdGVkU3VicGF0aFN0YXJ0ID0gMCwgZWksIGFpOworICAgICAgICAgICAgZm9y
ICh2YXIgZWkgPSAwLCBhaSA9IDA7IGFpIDwgYWN0dWFsUGF0aC5sZW5ndGggJiYgZWkgPCBleHBl
Y3RlZFBhdGgubGVuZ3RoOyBhaSsrLCBlaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGV4cGVj
dGVkUGF0aFtlaV0gPT09ICdNJykKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRTdWJwYXRo
U3RhcnQgPSBlaTsKKworICAgICAgICAgICAgICAgIGlmIChhY3R1YWxQYXRoW2FpXSA9PT0gZXhw
ZWN0ZWRQYXRoW2VpXQorICAgICAgICAgICAgICAgICAgICB8fCBjb29yZGluYXRlc0FyZVJvdWdo
bHlFcXVhbChhY3R1YWxQYXRoW2FpXSwgZXhwZWN0ZWRQYXRoW2VpXSkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgLy8gRXh0cmFwb2xhdGUgdGhlIG1p
c3NpbmcgbGluZSB0byBjb21tYW5kIGlmIGl0IGlzIG1pc3NpbmcgZnJvbSBhY3R1YWwuCisgICAg
ICAgICAgICAgICAgLy8gVGhlIGNob2ljZSB0byBjbG9zZSB0aGUgcGF0aCB3aXRoIGFuIGV4cGxp
Y2l0IGxpbmUgdG8gY29tbWFuZCBpcworICAgICAgICAgICAgICAgIC8vIHBsYXRmb3JtIGRlcGVu
ZGVudC4KKyAgICAgICAgICAgICAgICBpZiAoYWN0dWFsUGF0aFthaV0gPT09ICdaJworICAgICAg
ICAgICAgICAgICAgICAmJiBleHBlY3RlZFBhdGhbZWldID09PSAnTCcKKyAgICAgICAgICAgICAg
ICAgICAgJiYgY29vcmRpbmF0ZXNBcmVSb3VnaGx5RXF1YWwoZXhwZWN0ZWRQYXRoW2V4cGVjdGVk
U3VicGF0aFN0YXJ0ICsgMV0sIGV4cGVjdGVkUGF0aFtlaSArIDFdKQorICAgICAgICAgICAgICAg
ICAgICAmJiBjb29yZGluYXRlc0FyZVJvdWdobHlFcXVhbChleHBlY3RlZFBhdGhbZXhwZWN0ZWRT
dWJwYXRoU3RhcnQgKyAyXSwgZXhwZWN0ZWRQYXRoW2VpICsgMl0pKSB7CisgICAgICAgICAgICAg
ICAgICAgIGVpICs9IDI7CisgICAgICAgICAgICAgICAgICAgIGFpLS07CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG1ha2VTdHJpbmdGb3JQYXRoKHBhdGgpIHsKKyAgICAg
ICAgICAgIHJldHVybiBwYXRoLm1hcChmdW5jdGlvbihpdGVtKSB7CisgICAgICAgICAgICAgICAg
aWYgKHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICtpdGVtLnRvRml4ZWQoMik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07CisgICAgICAg
ICAgICB9KS5qb2luKCcgJyk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgZXhwZWN0ZWRQYXRo
U3RyaW5nID0gbWFrZVN0cmluZ0ZvclBhdGgoZXhwZWN0ZWQpOworICAgICAgICB2YXIgYWN0dWFs
UGF0aFN0cmluZyA9IG1ha2VTdHJpbmdGb3JQYXRoKGFjdHVhbCk7CisgICAgICAgIHZhciBhc3Nl
cnRpb25NZXNzYWdlID0gbWVzc2FnZSArICIgXG5FWFBFQ1RFRDogIiArIGV4cGVjdGVkUGF0aFN0
cmluZyArICJcbiAgQUNUVUFMOiAiICsgYWN0dWFsUGF0aFN0cmluZzsKKyAgICAgICAgSW5zcGVj
dG9yVGVzdC5hc3NlcnQocGF0aHNBcmVSb3VnaGx5RXF1YWwoYWN0dWFsLCBleHBlY3RlZCksIGFz
c2VydGlvbk1lc3NhZ2UpOworICAgIH0KK30KKworfSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjMjk5ZWJj
OWMxN2YzZGY4OGFlZWZkM2ZkYTNhMDE5Y2JmZDg4M2EKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcwpAQCAtMCwwICsx
LDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyAqIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gVGhpcyBuYW1lc3BhY2Ug
aXMgaW5qZWN0ZWQgaW50byBldmVyeSB0ZXN0IHBhZ2UuIEl0cyBmdW5jdGlvbnMgYXJlIGludm9r
ZWQgYnkKKy8vIEluc3BlY3RvclRlc3QgbWV0aG9kcyBvbiB0aGUgaW5zcGVjdG9yIHBhZ2Ugdmlh
IFJ1bnRpbWVBZ2VudC5ldmFsdWF0ZSgpIGNhbGxzLgorSW5zcGVjdG9yVGVzdFByb3h5ID0ge307
CitJbnNwZWN0b3JUZXN0UHJveHkuX2luaXRpYWxpemVycyA9IFtdOworCisvLyBIZWxwZXIgc2Ny
aXB0cyBsaWtlIGBkZWJ1Z2dlci10ZXN0LmpzYCBtdXN0IHJlZ2lzdGVyIHRoZWlyIGluaXRpYWxp
emF0aW9uCisvLyBmdW5jdGlvbiB3aXRoIHRoaXMgbWV0aG9kIHNvIGl0IHdpbGwgYmUgbWFyc2hh
bGxlZCB0byB0aGUgaW5zcGVjdG9yIHBhZ2UuCitJbnNwZWN0b3JUZXN0UHJveHkucmVnaXN0ZXJJ
bml0aWFsaXplciA9IGZ1bmN0aW9uKGluaXRpYWxpemVyKQoreworICAgIGlmICh0eXBlb2YgaW5p
dGlhbGl6ZXIgPT09ICJmdW5jdGlvbiIpCisgICAgICAgIHRoaXMuX2luaXRpYWxpemVycy5wdXNo
KGluaXRpYWxpemVyLnRvU3RyaW5nKCkpOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZCBieSB0aGUgdGVzdCBkb2N1bWVudCdzIGJvZHkgb25sb2FkIGhhbmRsZXIuCisKKy8vIEl0IGlu
aXRpYWxpemVzIHRoZSBpbnNwZWN0b3IgYW5kIGxvYWRzIGFueSBgKi10ZXN0LmpzYCBoZWxwZXIg
c2NyaXB0cworLy8gaW50byB0aGUgaW5zcGVjdG9yIHBhZ2UgY29udGV4dC4KK2Z1bmN0aW9uIHJ1
blRlc3QoKQoreworICAgIC8vIERvbid0IHRyeSB0byB1c2UgdGVzdFJ1bm5lciBpZiBydW5uaW5n
IHRocm91Z2ggdGhlIGJyb3dzZXIuCisgICAgaWYgKCF3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gU2V0IHVwIHRoZSB0ZXN0IHBhZ2UgYmVmb3JlIHRoZSBsb2Fk
IGV2ZW50IGZpcmVzLgorICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRlc3RSdW5u
ZXIud2FpdFVudGlsRG9uZSgpOworCisgICAgd2luZG93LmludGVybmFscy5zZXRJbnNwZWN0b3JJ
c1VuZGVyVGVzdCh0cnVlKTsKKyAgICB0ZXN0UnVubmVyLnNob3dXZWJJbnNwZWN0b3IoKTsKKwor
ICAgIGZ1bmN0aW9uIHJ1bkluaXRpYWxpemF0aW9uTWV0aG9kc0luRnJvbnRlbmQoaW5pdGlhbGl6
ZXJzQXJyYXkpCisgICAgeworICAgICAgICBJbnNwZWN0b3JUZXN0LnRlc3RQYWdlRGlkTG9hZCgp
OworCisgICAgICAgIC8vIElmIHRoZSB0ZXN0IHBhZ2UgcmVsb2FkZWQgYnV0IHdlIHN0YXJ0ZWQg
cnVubmluZyB0aGUgdGVzdCBpbiBhIHByZXZpb3VzCisgICAgICAgIC8vIG5hdmlnYXRpb24sIHRo
ZW4gZG9uJ3QgaW5pdGlhbGl6ZSB0aGUgaW5zcGVjdG9yIGZyb250ZW5kIGFnYWluLgorICAgICAg
ICBpZiAoSW5zcGVjdG9yVGVzdC5kaWRJbmplY3RUZXN0Q29kZSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBmb3IgKHZhciBpbml0aWFsaXplciBvZiBpbml0aWFsaXplcnNBcnJheSkg
eworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpbml0aWFsaXplcigpOworICAg
ICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkV4
Y2VwdGlvbiBpbiB0ZXN0IGluaXRpYWxpemF0aW9uOiAiICsgZSwgZS5zdGFjayB8fCAiKG5vIHN0
YWNrIHRyYWNlKSIpOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5U
ZXN0TWV0aG9kSW5Gcm9udGVuZCh0ZXN0RnVuY3Rpb24pCisgICAgeworICAgICAgICBpZiAoSW5z
cGVjdG9yVGVzdC5kaWRJbmplY3RUZXN0Q29kZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBJbnNwZWN0b3JUZXN0LmRpZEluamVjdFRlc3RDb2RlID0gdHJ1ZTsKKworICAgICAgICB0
cnkgeworICAgICAgICAgICAgdGVzdEZ1bmN0aW9uKCk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkV4Y2VwdGlvbiBkdXJpbmcgdGVzdCBleGVjdXRp
b246ICIgKyBlLCBlLnN0YWNrIHx8ICIobm8gc3RhY2sgdHJhY2UpIik7CisgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdmFy
IGNvZGVTdHJpbmdUb0V2YWx1YXRlID0gIigiICsgcnVuSW5pdGlhbGl6YXRpb25NZXRob2RzSW5G
cm9udGVuZC50b1N0cmluZygpICsgIikoWyIgKyBJbnNwZWN0b3JUZXN0UHJveHkuX2luaXRpYWxp
emVycyArICJdKTsiOworICAgIHRlc3RSdW5uZXIuZXZhbHVhdGVJbldlYkluc3BlY3Rvcihjb2Rl
U3RyaW5nVG9FdmFsdWF0ZSk7CisKKyAgICAvLyBgdGVzdGAgcmVmZXJzIHRvIGEgZnVuY3Rpb24g
ZGVmaW5lZCBpbiBnbG9iYWwgc2NvcGUgaW4gdGhlIHRlc3QgSFRNTCBwYWdlLgorICAgIGNvZGVT
dHJpbmdUb0V2YWx1YXRlID0gIigiICsgcnVuVGVzdE1ldGhvZEluRnJvbnRlbmQudG9TdHJpbmco
KSArICIpKCIgKyB0ZXN0LnRvU3RyaW5nKCkgKyAiKTsiOworICAgIHRlc3RSdW5uZXIuZXZhbHVh
dGVJbldlYkluc3BlY3Rvcihjb2RlU3RyaW5nVG9FdmFsdWF0ZSk7Cit9CisKK0luc3BlY3RvclRl
c3RQcm94eS5jb21wbGV0ZVRlc3QgPSBmdW5jdGlvbigpCit7CisgICAgLy8gRG9uJ3QgdHJ5IHRv
IHVzZSB0ZXN0UnVubmVyIGlmIHJ1bm5pbmcgdGhyb3VnaCB0aGUgYnJvd3Nlci4KKyAgICBpZiAo
IXdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDbG9zZSBpbnNw
ZWN0b3IgYXN5bmNocm91c2x5IGluIGNhc2Ugd2Ugd2FudCB0byB0ZXN0IHRlYXItZG93biBiZWhh
dmlvci4KKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0UnVubmVyLmNs
b3NlV2ViSW5zcGVjdG9yKCk7CisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfSwgMCk7CisgICAgfSwg
MCk7Cit9CisKKy8vIExvZ3MgbWVzc2FnZSB0byB1bmJ1ZmZlcmVkIHByb2Nlc3Mgc3Rkb3V0LCBh
dm9pZGluZyB0aW1lb3V0cy4KKy8vIG9ubHkgYmUgdXNlZCB0byBkZWJ1ZyB0ZXN0cyBhbmQgbm90
IHRvIHByb2R1Y2Ugbm9ybWFsIHRlc3Qgb3V0cHV0LgorSW5zcGVjdG9yVGVzdFByb3h5LmRlYnVn
TG9nID0gZnVuY3Rpb24obWVzc2FnZSkKK3sKKyAgICB3aW5kb3cuYWxlcnQobWVzc2FnZSk7Cit9
CisKKy8vIEFkZCBhbmQgY2xlYXIgdGVzdCBvdXRwdXQgZnJvbSB0aGUgcmVzdWx0cyB3aW5kb3cu
CitJbnNwZWN0b3JUZXN0UHJveHkuYWRkUmVzdWx0ID0gZnVuY3Rpb24odGV4dCkKK3sKKyAgICAv
LyBGb3IgZWFybHkgZXJyb3JzIHRyaWdnZXJlZCB3aGVuIGxvYWRpbmcgdGhlIHRlc3QgcGFnZSwg
d3JpdGUgdG8gc3RkZXJyLgorICAgIGlmICghZG9jdW1lbnQuYm9keSkgeworICAgICAgICB0aGlz
LmRlYnVnTG9nKHRleHQpOworICAgICAgICB0aGlzLmNvbXBsZXRlVGVzdCgpOworICAgIH0KKwor
ICAgIGlmICghdGhpcy5fcmVzdWx0RWxlbWVudCkgeworICAgICAgICB0aGlzLl9yZXN1bHRFbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicHJlIik7CisgICAgICAgIHRoaXMuX3Jlc3Vs
dEVsZW1lbnQuaWQgPSAib3V0cHV0IjsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGls
ZCh0aGlzLl9yZXN1bHRFbGVtZW50KTsKKyAgICB9CisgICAgdGhpcy5fcmVzdWx0RWxlbWVudC5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7CisgICAgdGhpcy5fcmVz
dWx0RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKK30K
KworSW5zcGVjdG9yVGVzdFByb3h5LmNsZWFyUmVzdWx0cyA9IGZ1bmN0aW9uKCkKK3sKKyAgICBp
ZiAodGhpcy5fcmVzdWx0RWxlbWVudCkgeworICAgICAgICB0aGlzLl9yZXN1bHRFbGVtZW50LnBh
cmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fcmVzdWx0RWxlbWVudCk7CisgICAgICAgIGRlbGV0
ZSB0aGlzLl9yZXN1bHRFbGVtZW50OworICAgIH0KK30KKworSW5zcGVjdG9yVGVzdFByb3h5LnJl
cG9ydFVuY2F1Z2h0RXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2FnZSwgdXJsLCBsaW5lTnVtYmVy
KQoreworICAgIHZhciByZXN1bHQgPSAiVW5jYXVnaHQgZXhjZXB0aW9uIGluIHRlc3QgcGFnZTog
IiArIG1lc3NhZ2UgKyAiIFsiICsgdXJsICsgIjoiICsgbGluZU51bWJlciArICJdIjsKKyAgICBJ
bnNwZWN0b3JUZXN0UHJveHkuYWRkUmVzdWx0KHJlc3VsdCk7CisgICAgSW5zcGVjdG9yVGVzdFBy
b3h5LmNvbXBsZXRlVGVzdCgpOworfQorCisvLyBDYXRjaCBzeW50YXggZXJyb3JzLCB0eXBlIGVy
cm9ycywgYW5kIG90aGVyIGV4Y2VwdGlvbnMuIFJ1biB0aGlzIGJlZm9yZSBsb2FkaW5nIG90aGVy
IGZpbGVzLgord2luZG93Lm9uZXJyb3IgPSBJbnNwZWN0b3JUZXN0UHJveHkucmVwb3J0VW5jYXVn
aHRFeGNlcHRpb247CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rv
ci9yZXBsYXkvcmVwbGF5LXRlc3QuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rv
ci9yZXBsYXkvcmVwbGF5LXRlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTVjZGZjM2RlOWI0YWUwMjQ4OTMz
YzcwYjUxNDgyYzA3MTBkYmRkMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvaW5zcGVjdG9yL3JlcGxheS9yZXBsYXktdGVzdC5qcwpAQCAtMCwwICsxLDc5IEBACitJ
bnNwZWN0b3JUZXN0UHJveHkucmVnaXN0ZXJJbml0aWFsaXplcihmdW5jdGlvbigpIHsKKworSW5z
cGVjdG9yVGVzdC5SZXBsYXkgPSB7fTsKKworSW5zcGVjdG9yVGVzdC5SZXBsYXkucnVuU2luZ2xl
U2VnbWVudFJlZlRlc3QgPSBmdW5jdGlvbihzdGF0ZUNvbXBhcmF0b3IpCit7CisgICAgdmFyIHN0
YXRlRHVyaW5nQ2FwdHVyaW5nID0gbnVsbDsKKyAgICB2YXIgc3RhdGVEdXJpbmdSZXBsYXlpbmcg
PSBudWxsOworCisgICAgdmFyIGlnbm9yZUNhY2hlT25SZWxvYWQgPSB0cnVlOworICAgIEluc3Bl
Y3RvclRlc3QucmVsb2FkUGFnZShpZ25vcmVDYWNoZU9uUmVsb2FkKQorICAgIC50aGVuKGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gd2FpdEZvck1haW5S
ZXNvdXJjZUJlZm9yZVN0YXJ0aW5nKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5ldmVudERpc3BhdGNoZXIuYWRkRXZlbnRMaXN0ZW5lcihJbnNwZWN0b3JUZXN0
LkV2ZW50RGlzcGF0Y2hlci5FdmVudC5UZXN0UGFnZURpZExvYWQsIHJlc29sdmUpOworICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIldhaXRpbmcgZm9yIHRlc3QgcGFnZSB0byBmaW5pc2gg
aXRzIGluaXRpYWwgbG9hZC4uLiIpOworICAgICAgICB9KTsKKyAgICB9KQorICAgIC50aGVuKGZ1
bmN0aW9uKCkgeworICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiVGVzdCBwYWdlIGluaXRpYWwg
bG9hZCBkb25lLiIpOworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gc3RhcnRD
YXB0dXJpbmcocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0Lmxv
ZygiV2FpdGluZyBmb3IgY2FwdHVyaW5nIHRvIHN0YXJ0Li4uIik7CisgICAgICAgICAgICBXZWJJ
bnNwZWN0b3IucmVwbGF5TWFuYWdlci5zdGFydENhcHR1cmluZygpOworICAgICAgICAgICAgV2Vi
SW5zcGVjdG9yLnJlcGxheU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVw
bGF5TWFuYWdlci5FdmVudC5DYXB0dXJlU3RhcnRlZCwgcmVzb2x2ZSk7CisgICAgICAgIH0pOwor
ICAgIH0pCisgICAgLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIEluc3BlY3RvclRlc3QubG9n
KCJDYXB0dXJpbmcgaGFzIHN0YXJ0ZWQuIik7CisgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShm
dW5jdGlvbiB3YWl0VG9DYXB0dXJlSW5pdGlhbE5hdmlnYXRpb24ocmVzb2x2ZSwgcmVqZWN0KSB7
CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiV2FpdGluZyB0byBjYXB0dXJlIGluaXRp
YWwgbmF2aWdhdGlvbi4uLiIpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5ldmVudERpc3Bh
dGNoZXIuYWRkRXZlbnRMaXN0ZW5lcihJbnNwZWN0b3JUZXN0LkV2ZW50RGlzcGF0Y2hlci5FdmVu
dC5UZXN0UGFnZURpZExvYWQsIHJlc29sdmUpOworICAgICAgICB9KTsKKyAgICB9KQorICAgIC50
aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiSW5pdGlhbCBuYXZp
Z2F0aW9uIGNhcHR1cmVkLiBEdW1waW5nIHN0YXRlLi4uLiIpOworICAgICAgICByZXR1cm4gUnVu
dGltZUFnZW50LmV2YWx1YXRlLnByb21pc2UoImR1bXBOb25kZXRlcm1pbmlzdGljU3RhdGUoKSIp
OworICAgIH0pCisgICAgLnRoZW4oZnVuY3Rpb24ocGF5bG9hZCkgeworICAgICAgICBzdGF0ZUR1
cmluZ0NhcHR1cmluZyA9IHBheWxvYWQudmFsdWU7CisgICAgICAgIHJldHVybiBuZXcgUHJvbWlz
ZShmdW5jdGlvbiBzdG9wQ2FwdHVyaW5nKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLnJlcGxheU1hbmFnZXIuc3RvcENhcHR1cmluZygpOworICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLnJlcGxheU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
UmVwbGF5TWFuYWdlci5FdmVudC5DYXB0dXJlU3RvcHBlZCwgcmVzb2x2ZSk7CisgICAgICAgIH0p
OworICAgIH0pCisgICAgLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIEluc3BlY3RvclRlc3Qu
bG9nKCJDYXB0dXJlIHN0b3BwZWQsIG5vdyBzdGFydGluZyByZXBsYXkgdG8gY29tcGxldGlvbi4u
LiIpCisgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBzdGFydFBsYXliYWNrKHJl
c29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnJlcGxheU1hbmFnZXIu
cmVwbGF5VG9Db21wbGV0aW9uKCk7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IucmVwbGF5TWFu
YWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLkV2ZW50LlBs
YXliYWNrU3RhcnRlZCwgcmVzb2x2ZSk7CisgICAgICAgIH0pOworICAgIH0pCisgICAgLnRoZW4o
ZnVuY3Rpb24oKSB7CisgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJQbGF5YmFjayBoYXMgc3Rh
cnRlZC4iKTsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHdhaXRGb3JNYWlu
UmVzb3VyY2VXaGVuUmVwbGF5aW5nKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5sb2coIldhaXRpbmcgdG8gcmVwbGF5IGluaXRpYWwgbmF2aWdhdGlvbi4uLiIp
OworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5ldmVudERpc3BhdGNoZXIuYWRkRXZlbnRMaXN0
ZW5lcihJbnNwZWN0b3JUZXN0LkV2ZW50RGlzcGF0Y2hlci5FdmVudC5UZXN0UGFnZURpZExvYWQs
IHJlc29sdmUpOworICAgICAgICB9KTsKKyAgICB9KQorICAgIC50aGVuKGZ1bmN0aW9uKCkgewor
ICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiSW5pdGlhbCBuYXZpZ2F0aW9uIHJlcGxheWVkLiBE
dW1waW5nIHN0YXRlLi4uIik7CisgICAgICAgIHJldHVybiBSdW50aW1lQWdlbnQuZXZhbHVhdGUu
cHJvbWlzZSgiZHVtcE5vbmRldGVybWluaXN0aWNTdGF0ZSgpIik7CisgICAgfSkKKyAgICAudGhl
bihmdW5jdGlvbihwYXlsb2FkKSB7CisgICAgICAgIHN0YXRlRHVyaW5nUmVwbGF5aW5nID0gcGF5
bG9hZC52YWx1ZTsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHdhaXRGb3JS
ZXBsYXlpbmdUb0ZpbmlzaChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5yZXBsYXlNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlJlcGxheU1h
bmFnZXIuRXZlbnQuUGxheWJhY2tGaW5pc2hlZCwgcmVzb2x2ZSk7CisgICAgICAgIH0pOworICAg
IH0pCisgICAgLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzdGF0ZXNFcXVhbCA9IHN0
YXRlRHVyaW5nQ2FwdHVyaW5nID09PSBzdGF0ZUR1cmluZ1JlcGxheWluZzsKKyAgICAgICAgSW5z
cGVjdG9yVGVzdC5leHBlY3RUaGF0KHN0YXRlc0VxdWFsLCAiTm9uZGV0ZXJtaW5pc3RpYyBzdGF0
ZSBzaG91bGQgbm90IGRpZmZlciBkdXJpbmcgY2FwdHVyZSBhbmQgcmVwbGF5LiIpOworICAgICAg
ICBpZiAoIXN0YXRlc0VxdWFsKSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiU3Rh
dGUgZHVyaW5nIGNhcHR1cmluZzogIiArIHN0YXRlRHVyaW5nQ2FwdHVyaW5nKTsKKyAgICAgICAg
ICAgIEluc3BlY3RvclRlc3QubG9nKCJTdGF0ZSBkdXJpbmcgcmVwbGF5aW5nOiAiICsgc3RhdGVE
dXJpbmdSZXBsYXlpbmcpOworICAgICAgICB9CisgICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxl
dGVUZXN0KCk7CisgICAgfSk7Cit9OworCit9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvZGVidWdnZXItdGVz
dC5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9kZWJ1Z2dlci10ZXN0LmpzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTAyNTU4NzBhMTk1NjFkNzk2ZWY4OGYyZDg1
OTYwMDkwMzRlMjRhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9kZWJ1Z2dlci10ZXN0LmpzCisrKyAv
ZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLUluc3BlY3RvclRlc3RQcm94eS5yZWdpc3Rlcklu
aXRpYWxpemVyKGZ1bmN0aW9uKCkgewotCi1JbnNwZWN0b3JUZXN0LnN0YXJ0VHJhY2luZ0JyZWFr
cG9pbnRzID0gZnVuY3Rpb24oKQotewotICAgIGlmICghV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFu
YWdlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdl
ci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQnJl
YWtwb2ludEFkZGVkLCBmdW5jdGlvbihldmVudCkgewotICAgICAgICBJbnNwZWN0b3JUZXN0Lmxv
ZygiQnJlYWtwb2ludCB3YXMgYWRkZWQuIik7Ci0gICAgfSk7Ci0KLSAgICBXZWJJbnNwZWN0b3Iu
ZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFu
YWdlci5FdmVudC5CcmVha3BvaW50UmVtb3ZlZCwgZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAg
SW5zcGVjdG9yVGVzdC5sb2coIkJyZWFrcG9pbnQgd2FzIHJlbW92ZWQuIik7Ci0gICAgfSk7Ci0K
LSAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50LkV2ZW50LkRpc2FibGVkU3RhdGVEaWRDaGFuZ2UsIGZ1bmN0aW9uKGV2ZW50
KSB7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQudGFyZ2V0OwotICAgICAgICBjb25z
b2xlLmFzc2VydChicmVha3BvaW50IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQs
ICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOwotCi0gICAgICAgIEluc3BlY3RvclRlc3QubG9n
KCJCcmVha3BvaW50IGRpc2FibGVkIHN0YXRlIGNoYW5nZWQ6ICIgKyBicmVha3BvaW50LmRpc2Fi
bGVkKTsKLSAgICB9KTsKLQotICAgIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuRXZlbnQuUmVzb2x2ZWRTdGF0ZURpZENoYW5n
ZSwgZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC50YXJn
ZXQ7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KGJyZWFrcG9pbnQgaW5zdGFuY2VvZiBXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludCwgIlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7Ci0KLSAgICAgICAg
SW5zcGVjdG9yVGVzdC5sb2coIkJyZWFrcG9pbnQgcmVzb2x2ZWQgc3RhdGUgY2hhbmdlZDogIiAr
IGJyZWFrcG9pbnQucmVzb2x2ZWQpOwotICAgIH0pOwotCi0gICAgV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5BdXRv
Q29udGludWVEaWRDaGFuZ2UsIGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgIHZhciBicmVha3Bv
aW50ID0gZXZlbnQudGFyZ2V0OwotICAgICAgICBjb25zb2xlLmFzc2VydChicmVha3BvaW50IGlu
c3RhbmNlb2YgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBl
ISIpOwotCi0gICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJCcmVha3BvaW50IGF1dG9jb250aW51
ZSBzdGF0ZSBjaGFuZ2VkOiAiICsgYnJlYWtwb2ludC5hdXRvQ29udGludWUpOwotICAgIH0pOwot
Ci0gICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludC5FdmVudC5Db25kaXRpb25EaWRDaGFuZ2UsIGZ1bmN0aW9uKGV2ZW50KSB7
Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQudGFyZ2V0OwotICAgICAgICBjb25zb2xl
LmFzc2VydChicmVha3BvaW50IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQsICJV
bmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOwotCi0gICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJC
cmVha3BvaW50IGNvbmRpdGlvbiBjaGFuZ2VkOiAiICsgYnJlYWtwb2ludC5jb25kaXRpb24pOwot
ICAgIH0pOwotCi0gICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5BY3Rpb25zRGlkQ2hhbmdlLCBmdW5jdGlvbihl
dmVudCkgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LnRhcmdldDsKLSAgICAgICAg
Y29uc29sZS5hc3NlcnQoYnJlYWtwb2ludCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50LCAiVW5leHBlY3RlZCBvYmplY3QgdHlwZSEiKTsKLQotICAgICAgICBJbnNwZWN0b3JUZXN0
LmxvZygiQnJlYWtwb2ludCBhY3Rpb25zIGNoYW5nZWQuIE5ldyBjb3VudDogIiArIGJyZWFrcG9p
bnQuYWN0aW9ucy5sZW5ndGgpOwotICAgIH0pOwotfQotCi1JbnNwZWN0b3JUZXN0LnN0YXJ0VHJh
Y2luZ1Byb2JlcyA9IGZ1bmN0aW9uKCkKLXsKLSAgICBpZiAoIVdlYkluc3BlY3Rvci5wcm9iZU1h
bmFnZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkluc3BlY3Rvci5wcm9iZU1hbmFnZXIu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUHJvYmVNYW5hZ2VyLkV2ZW50LlByb2JlU2V0
QWRkZWQsIGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgIHZhciBwcm9iZVNldCA9IGV2ZW50LmRh
dGEucHJvYmVTZXQ7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHByb2JlU2V0IGluc3RhbmNlb2Yg
V2ViSW5zcGVjdG9yLlByb2JlU2V0LCAiVW5leHBlY3RlZCBvYmplY3QgdHlwZSEiKTsKLQotICAg
ICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUHJvYmUgc2V0IHdhcyBhZGRlZC4gTmV3IGNvdW50OiAi
ICsgV2ViSW5zcGVjdG9yLnByb2JlTWFuYWdlci5wcm9iZVNldHMubGVuZ3RoKTsKLSAgICB9KTsK
LQotICAgIFdlYkluc3BlY3Rvci5wcm9iZU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNw
ZWN0b3IuUHJvYmVNYW5hZ2VyLkV2ZW50LlByb2JlU2V0UmVtb3ZlZCwgZnVuY3Rpb24oZXZlbnQp
IHsKLSAgICAgICAgdmFyIHByb2JlU2V0ID0gZXZlbnQuZGF0YS5wcm9iZVNldDsKLSAgICAgICAg
Y29uc29sZS5hc3NlcnQocHJvYmVTZXQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUHJvYmVTZXQs
ICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOwotCi0gICAgICAgIEluc3BlY3RvclRlc3QubG9n
KCJQcm9iZSBzZXQgd2FzIHJlbW92ZWQuIE5ldyBjb3VudDogIiArIFdlYkluc3BlY3Rvci5wcm9i
ZU1hbmFnZXIucHJvYmVTZXRzLmxlbmd0aCk7Ci0gICAgfSk7Ci0KLSAgICBXZWJJbnNwZWN0b3Iu
UHJvYmUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUHJvYmUuRXZlbnQuRXhwcmVzc2lv
bkNoYW5nZWQsIGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgIHZhciBwcm9iZSA9IGV2ZW50LnRh
cmdldDsKLSAgICAgICAgY29uc29sZS5hc3NlcnQocHJvYmUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0
b3IuUHJvYmUsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOwotCi0gICAgICAgIEluc3BlY3Rv
clRlc3QubG9nKCJQcm9iZSB3aXRoIGlkZW50aWZpZXIgIiArIHByb2JlLmlkICsgIiBjaGFuZ2Vk
IGV4cHJlc3Npb246ICIgKyBwcm9iZS5leHByZXNzaW9uKTsKLSAgICB9KTsKLQotICAgIFdlYklu
c3BlY3Rvci5Qcm9iZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Qcm9iZS5FdmVudC5T
YW1wbGVBZGRlZCwgZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAgdmFyIHByb2JlID0gZXZlbnQu
dGFyZ2V0OwotICAgICAgICB2YXIgc2FtcGxlID0gZXZlbnQuZGF0YTsKLSAgICAgICAgY29uc29s
ZS5hc3NlcnQocHJvYmUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUHJvYmUsICJVbmV4cGVjdGVk
IG9iamVjdCB0eXBlISIpOwotICAgICAgICBjb25zb2xlLmFzc2VydChzYW1wbGUgaW5zdGFuY2Vv
ZiBXZWJJbnNwZWN0b3IuUHJvYmVTYW1wbGUsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOwot
Ci0gICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJQcm9iZSB3aXRoIGlkZW50aWZpZXIgIiArIHBy
b2JlLmlkICsgIiBhZGRlZCBzYW1wbGU6ICIgKyBzYW1wbGUpOwotICAgIH0pOwotCi0gICAgV2Vi
SW5zcGVjdG9yLlByb2JlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlByb2JlLkV2ZW50
LlNhbXBsZXNDbGVhcmVkLCBmdW5jdGlvbihldmVudCkgewotICAgICAgICB2YXIgcHJvYmUgPSBl
dmVudC50YXJnZXQ7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHByb2JlIGluc3RhbmNlb2YgV2Vi
SW5zcGVjdG9yLlByb2JlLCAiVW5leHBlY3RlZCBvYmplY3QgdHlwZSEiKTsKLQotICAgICAgICBJ
bnNwZWN0b3JUZXN0LmxvZygiUHJvYmUgd2l0aCBpZGVudGlmaWVyICIgKyBwcm9iZS5pZCArICIg
Y2xlYXJlZCBhbGwgc2FtcGxlcy4iKTsKLSAgICB9KTsKLQotICAgIFdlYkluc3BlY3Rvci5Qcm9i
ZVNldC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Qcm9iZVNldC5FdmVudC5Qcm9iZUFk
ZGVkLCBmdW5jdGlvbihldmVudCkgewotICAgICAgICB2YXIgcHJvYmUgPSBldmVudC5kYXRhOwot
ICAgICAgICB2YXIgcHJvYmVTZXQgPSBldmVudC50YXJnZXQ7Ci0gICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KHByb2JlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlByb2JlLCAiVW5leHBlY3RlZCBvYmpl
Y3QgdHlwZSEiKTsKLSAgICAgICAgY29uc29sZS5hc3NlcnQocHJvYmVTZXQgaW5zdGFuY2VvZiBX
ZWJJbnNwZWN0b3IuUHJvYmVTZXQsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOwotCi0gICAg
ICAgIEluc3BlY3RvclRlc3QubG9nKCJQcm9iZSB3aXRoIGlkZW50aWZpZXIgIiArIHByb2JlLmlk
ICsgIiB3YXMgYWRkZWQgdG8gcHJvYmUgc2V0LiIpOwotICAgICAgICBJbnNwZWN0b3JUZXN0Lmxv
ZygiUHJvYmUgc2V0J3MgcHJvYmUgY291bnQ6ICIgKyBwcm9iZVNldC5wcm9iZXMubGVuZ3RoKTsK
LSAgICB9KTsKLQotICAgIFdlYkluc3BlY3Rvci5Qcm9iZVNldC5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5Qcm9iZVNldC5FdmVudC5Qcm9iZVJlbW92ZWQsIGZ1bmN0aW9uKGV2ZW50KSB7
Ci0gICAgICAgIHZhciBwcm9iZSA9IGV2ZW50LmRhdGE7Ci0gICAgICAgIHZhciBwcm9iZVNldCA9
IGV2ZW50LnRhcmdldDsKLSAgICAgICAgY29uc29sZS5hc3NlcnQocHJvYmUgaW5zdGFuY2VvZiBX
ZWJJbnNwZWN0b3IuUHJvYmUsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOwotICAgICAgICBj
b25zb2xlLmFzc2VydChwcm9iZVNldCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Qcm9iZVNldCwg
IlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7Ci0KLSAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2co
IlByb2JlIHdpdGggaWRlbnRpZmllciAiICsgcHJvYmUuaWQgKyAiIHdhcyByZW1vdmVkIGZyb20g
cHJvYmUgc2V0LiIpOwotICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUHJvYmUgc2V0J3MgcHJv
YmUgY291bnQ6ICIgKyBwcm9iZVNldC5wcm9iZXMubGVuZ3RoKTsKLSAgICB9KTsKLX0KLQotfSk7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvcHJvYmUtbWFuYWdl
ci1hZGQtcmVtb3ZlLWFjdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dl
ci9wcm9iZS1tYW5hZ2VyLWFkZC1yZW1vdmUtYWN0aW9ucy5odG1sCmluZGV4IGY2Mzg5YTk4MDU4
N2Q2ODY2OGU4YjlhZTFhMjM3MWQ5MGFhNzYyMTcuLjVjYjA1NzVmMDY5M2EwMjdhYzAzNDE1ZjA5
NDdjYzQyMGRjMTU3YzEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dl
ci9wcm9iZS1tYW5hZ2VyLWFkZC1yZW1vdmUtYWN0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9kZWJ1Z2dlci9wcm9iZS1tYW5hZ2VyLWFkZC1yZW1vdmUtYWN0aW9ucy5odG1s
CkBAIC0xLDggKzEsOCBAQAogPCFkb2N0eXBlIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgotPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vaW5zcGVjdG9yLXRlc3QuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9kZWJ1Z2dlci10ZXN0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4u
L2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9y
L2RlYnVnZ2VyL2RlYnVnZ2VyLXRlc3QuanMiPjwvc2NyaXB0PgogPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iLi9yZXNvdXJjZXMvYnJlYWtwb2ludC5qcyI+PC9zY3JpcHQ+CiA8
c2NyaXB0PgogZnVuY3Rpb24gdGVzdCgpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvZG9tL2NvbnRlbnQtZmxvdy1jb250ZW50LW5vZGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvZG9tL2NvbnRlbnQtZmxvdy1jb250ZW50LW5vZGVzLmh0bWwKaW5kZXggZmMyMTM2MGNm
NjFmNzQyZGU1MjliM2UxNTZkMWE4OGU0OTU0Mjg0NS4uYWJjMjdjZDliNDRkY2Q0NjJmMDhkNjQw
YmU0NTRmNzc0YjE5NDRmNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9j
b250ZW50LWZsb3ctY29udGVudC1ub2Rlcy5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9kb20vY29udGVudC1mbG93LWNvbnRlbnQtbm9kZXMuaHRtbApAQCAtMTEsNyArMTEsNyBAQAog
ICAgIC13ZWJraXQtZmxvdy1pbnRvOiBub25lOwogfQogPC9zdHlsZT4KLTxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVj
dG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+CiBmdW5jdGlvbiBjaGFu
Z2VGbG93Q29udGVudCgpCiB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9t
L2NvbnRlbnQtZmxvdy1jb250ZW50LXJlbW92YWwuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9kb20vY29udGVudC1mbG93LWNvbnRlbnQtcmVtb3ZhbC5odG1sCmluZGV4IDg0Y2UxMzAyYjhh
Yjc5MWRlZDUxYjhmMTE4ODk5ZWU0NWQyYmY1ZTEuLjE1ZWNiNWJhOWZkNjM0M2Q0ZGE0NTc1Njgz
ODlmOTY1ZTRlNTY4MjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kb20vY29u
dGVudC1mbG93LWNvbnRlbnQtcmVtb3ZhbC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9kb20vY29udGVudC1mbG93LWNvbnRlbnQtcmVtb3ZhbC5odG1sCkBAIC03LDcgKzcsNyBAQAog
ICAgIC13ZWJraXQtZmxvdy1pbnRvOiBmbG93OwogfQogPC9zdHlsZT4KLTxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVj
dG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+CiBmdW5jdGlvbiBjaGFu
Z2VGbG93Q29udGVudCgpCiB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9t
L2NvbnRlbnQtZmxvdy1saXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9tL2NvbnRl
bnQtZmxvdy1saXN0Lmh0bWwKaW5kZXggN2I2ODdmODhjMGMxMDc1NmE1YzBiNjRiNDA3ZTdkY2Y3
ZWZlZTc3NC4uMzZmZTkyZTNmNzU4YTdhZTg3ZDhhOWFiYzJlZjRjNTA1OTdhNTAwNSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9jb250ZW50LWZsb3ctbGlzdC5odG1sCisr
KyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kb20vY29udGVudC1mbG93LWxpc3QuaHRtbApAQCAt
Nyw3ICs3LDcgQEAKICAgICAtd2Via2l0LWZsb3ctaW50bzogZmxvdzE7CiB9CiA8L3N0eWxlPgot
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vaW5zcGVjdG9yLXRlc3QuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vaHR0
cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4K
IGZ1bmN0aW9uIHJlbW92ZUZsb3coKQogewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2RvbS9jb250ZW50LW5vZGUtcmVnaW9uLWluZm8uaHRtbCBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9kb20vY29udGVudC1ub2RlLXJlZ2lvbi1pbmZvLmh0bWwKaW5kZXggMDc5NGEyZWMyZGJj
OTNkYzA1YzgyZTUyZjJmYzVlN2U2NjVjYzU5OS4uN2IwZDUyNWQwNTk5NzU2NDk0YWJhMTAwNDRm
ODc3YjYyZWQ4NWI5MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9jb250
ZW50LW5vZGUtcmVnaW9uLWluZm8uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9t
L2NvbnRlbnQtbm9kZS1yZWdpb24taW5mby5odG1sCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgaGVp
Z2h0OiAxMDBweDsKIH0KIDwvc3R5bGU+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSIuLi9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVz
dC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgogZnVuY3Rpb24gdGVzdCgpCiB7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9tL2hpZ2hsaWdodC1zaGFwZS1vdXRzaWRlLW1hcmdp
bi5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9oaWdobGlnaHQtc2hhcGUtb3V0c2lk
ZS1tYXJnaW4uaHRtbAppbmRleCA0OGI0ZGRiNzg0NTMwMzMyMzE0NmE1MjVjZWE1NzYwNGU2YmE0
Y2NkLi5kNWE1Y2VhNTc1ZGUwZjljNmRmNzY1YTVlMDI2OTkwZDgwNmM5Mjk5IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9tL2hpZ2hsaWdodC1zaGFwZS1vdXRzaWRlLW1hcmdp
bi5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kb20vaGlnaGxpZ2h0LXNoYXBlLW91
dHNpZGUtbWFyZ2luLmh0bWwKQEAgLTI0LDggKzI0LDggQEAgYm9keSB7CiAgICAgLXdlYmtpdC1z
aGFwZS1tYXJnaW46IDFweDsKIH0KIDwvc3R5bGU+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSIuLi9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSIuL3NoYXBlcy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9y
L2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RvbS9zaGFwZXMtdGVzdC5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0PgogZnVuY3Rpb24gdGVzdCgpIHsKICAgICB2YXIgdGVzdGNhc2Vz
ID0gWwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9oaWdobGlnaHQtc2hh
cGUtb3V0c2lkZS5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9oaWdobGlnaHQtc2hh
cGUtb3V0c2lkZS5odG1sCmluZGV4IGYxZjEwYzBkYzNkMjkwOTA4N2VlNDMzZTljZjgyNTI3MWFl
YzJmYWMuLmRlODE2NjlhYTZiZDE1Nzg2MWY1MjI5MjI2YmExZDkwY2VmOWU3MTMgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kb20vaGlnaGxpZ2h0LXNoYXBlLW91dHNpZGUuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9tL2hpZ2hsaWdodC1zaGFwZS1vdXRzaWRl
Lmh0bWwKQEAgLTUyLDggKzUyLDggQEAgYm9keSB7CiAgICAtd2Via2l0LXNoYXBlLW91dHNpZGU6
IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFHUUFB
QUJrQ0FNQUFBQkhQR1ZtQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlX
UjVjY2xsUEFBQUFBWlFURlJGQUFELy8vLy9lOXlaTEFBQUFBSjBVazVUL3dEbHR6QktBQUFBU1Vs
RVFWUjQydXpZc1EwQU1BZ0VzV2YvcFRNREJVUkl2Z1hjWDJxaFFDQVFDQVFDZ1VBK0kya0hnVUFn
RUFnRUFvRkFJQkFJQkFLQlFPWVJveE1DZ1VBZ0VBamtIUElFR0FBMmloMU5WbmFER2dBQUFBQkpS
VTVFcmtKZ2dnPT0iKTsKIH0KIDwvc3R5bGU+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSIuLi9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSIuL3NoYXBlcy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2lu
c3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RvbS9zaGFwZXMtdGVzdC5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0PgogZnVuY3Rpb24gdGVzdCgpIHsKICAgICB2YXIgdGVzdGNhc2VzID0g
WwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9zaGFwZXMtdGVzdC5qcyBi
L0xheW91dFRlc3RzL2luc3BlY3Rvci9kb20vc2hhcGVzLXRlc3QuanMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDIzYzU2OTU2NDBiMGZiZmY2ZGJkY2VhMDY2NzFmNTNiZmY3Y2E1OTYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2RvbS9zaGFwZXMtdGVzdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDkxICsw
LDAgQEAKLUluc3BlY3RvclRlc3RQcm94eS5yZWdpc3RlckluaXRpYWxpemVyKGZ1bmN0aW9uKCkg
ewotCi1JbnNwZWN0b3JUZXN0LlNoYXBlcyA9IHsKLSAgICBnZXRTaGFwZU91dHNpZGVJbmZvRm9y
U2VsZWN0b3I6IGZ1bmN0aW9uKHNlbGVjdG9yLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIFdl
Ykluc3BlY3Rvci5kb21UcmVlTWFuYWdlci5yZXF1ZXN0RG9jdW1lbnQocmVxdWVzdERvY3VtZW50
Q2FsbGJhY2spOwotCi0gICAgICAgIGZ1bmN0aW9uIHJlcXVlc3REb2N1bWVudENhbGxiYWNrKG5v
ZGUpIHsKLSAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUgaW5zdGFuY2VvZiBX
ZWJJbnNwZWN0b3IuRE9NTm9kZSwgIlVuZXhwZWN0ZWQgYXJndW1lbnQgdG8gcmVxdWVzdERvY3Vt
ZW50IGNhbGxiYWNrLiIpCi0gICAgICAgICAgICBET01BZ2VudC5xdWVyeVNlbGVjdG9yLmludm9r
ZSh7bm9kZUlkOiBub2RlLmlkLCBzZWxlY3Rvcjogc2VsZWN0b3J9LCBxdWVyeVNlbGVjdG9yQ2Fs
bGJhY2spOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gcXVlcnlTZWxlY3RvckNhbGxi
YWNrKGVycm9yLCBub2RlSWQpIHsKLSAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KCFl
cnJvciwgIkVycm9yIGluIGNhbGxiYWNrIGZvciBET01BZ2VudC5xdWVyeVNlbGVjdG9yIik7Ci0g
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlSWQsICJJbnZhbGlkIGFyZ3VtZW50
IHRvIGNhbGxiYWNrIGZvciBET01BZ2VudC5xdWVyeVNlbGVjdG9yIik7Ci0KLSAgICAgICAgICAg
IHZhciBoaWdobGlnaHRDb25maWcgPSB7Ci0gICAgICAgICAgICAgICAgc2hvd0luZm86IHRydWUs
Ci0gICAgICAgICAgICAgICAgY29udGVudENvbG9yOiB7cjogMjU1LCBnOiAyNTUsIGI6IDI1NX0s
Ci0gICAgICAgICAgICAgICAgcGFkZGluZ0NvbG9yOiB7cjogMjU1LCBnOiAyNTUsIGI6IDI1NX0s
Ci0gICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IHtyOiAyNTUsIGc6IDI1NSwgYjogMjU1fSwK
LSAgICAgICAgICAgICAgICBtYXJnaW5Db2xvcjoge3I6IDI1NSwgZzogMjU1LCBiOiAyNTV9LAot
ICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIERPTUFnZW50LmhpZ2hsaWdodE5vZGUuaW52b2tl
KHtub2RlSWQ6IG5vZGVJZCwgaGlnaGxpZ2h0Q29uZmlnOiBoaWdobGlnaHRDb25maWd9LCBoaWdo
bGlnaHROb2RlQ2FsbGJhY2spOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gaGlnaGxp
Z2h0Tm9kZUNhbGxiYWNrKGVycm9yKSB7Ci0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2Vy
dCghZXJyb3IsICJFcnJvciBpbiBjYWxsYmFjayBmb3IgRE9NQWdlbnQuaGlnaGxpZ2h0Tm9kZSIp
OwotCi0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdlKCJ3aW5kb3cuaW50
ZXJuYWxzLmluc3BlY3RvckhpZ2hsaWdodE9iamVjdCgpIiwgcmVjZWl2ZWRIaWdobGlnaHRPYmpl
Y3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gcmVjZWl2ZWRIaWdobGlnaHRPYmpl
Y3QoZXJyb3IsIHBheWxvYWQsIHdhc1Rocm93bikgewotICAgICAgICAgICAgY29uc29sZS5hc3Nl
cnQoIWVycm9yLCAiV2hlbiBldmFsdWF0aW5nIGNvZGUsIHJlY2VpdmVkIHVuZXhwZWN0ZWQgZXJy
b3I6IiArIGVycm9yKTsKLSAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCFlcnJvciwgIldoZW4g
ZXZhbHVhdGluZyBjb2RlLCBhbiBleGNlcHRpb24gd2FzIHRocm93bjoiICsgd2FzVGhyb3duKTsK
LQotICAgICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKHBheWxvYWQudmFsdWUpOwotICAg
ICAgICAgICAgY2FsbGJhY2soZGF0YS5lbGVtZW50SW5mby5zaGFwZU91dHNpZGVJbmZvKTsKLSAg
ICAgICAgfQotICAgIH0sCi0KLSAgICBhc3NlcnRQYXRoc0FyZVJvdWdobHlFcXVhbDogZnVuY3Rp
b24oYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGNv
b3JkaW5hdGVzQXJlUm91Z2hseUVxdWFsKGEsIGIpIHsKLSAgICAgICAgICAgIC8vIFNvbWUgcGxh
dGZvcm1zIG1heSBvbmx5IHN0b3JlIGludGVnZXIgcGF0aCBwb2ludHMsIHNvIHRoZSBwb3RlbnRp
YWwKLSAgICAgICAgICAgIC8vIGRpZmZlcmVuY2VzIGJldHdlZW4gY29ycmVjdCBwYXRocyBjYW4g
YmUgcm91Z2hseSBoYWxmIGEgdW5pdC4KLSAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0g
Im51bWJlciIgJiYgdHlwZW9mIGIgPT09ICJudW1iZXIiICYmIE1hdGguYWJzKGEgLSBiKSA8IDAu
NTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHBhdGhzQXJlUm91Z2hseUVxdWFsKGFj
dHVhbFBhdGgsIGV4cGVjdGVkUGF0aCkgewotICAgICAgICAgICAgdmFyIGV4cGVjdGVkU3VicGF0
aFN0YXJ0ID0gMCwgZWksIGFpOwotICAgICAgICAgICAgZm9yICh2YXIgZWkgPSAwLCBhaSA9IDA7
IGFpIDwgYWN0dWFsUGF0aC5sZW5ndGggJiYgZWkgPCBleHBlY3RlZFBhdGgubGVuZ3RoOyBhaSsr
LCBlaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkUGF0aFtlaV0gPT09ICdNJykK
LSAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRTdWJwYXRoU3RhcnQgPSBlaTsKLQotICAgICAg
ICAgICAgICAgIGlmIChhY3R1YWxQYXRoW2FpXSA9PT0gZXhwZWN0ZWRQYXRoW2VpXQotICAgICAg
ICAgICAgICAgICAgICB8fCBjb29yZGluYXRlc0FyZVJvdWdobHlFcXVhbChhY3R1YWxQYXRoW2Fp
XSwgZXhwZWN0ZWRQYXRoW2VpXSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICAgICAgLy8gRXh0cmFwb2xhdGUgdGhlIG1pc3NpbmcgbGluZSB0byBjb21tYW5k
IGlmIGl0IGlzIG1pc3NpbmcgZnJvbSBhY3R1YWwuCi0gICAgICAgICAgICAgICAgLy8gVGhlIGNo
b2ljZSB0byBjbG9zZSB0aGUgcGF0aCB3aXRoIGFuIGV4cGxpY2l0IGxpbmUgdG8gY29tbWFuZCBp
cwotICAgICAgICAgICAgICAgIC8vIHBsYXRmb3JtIGRlcGVuZGVudC4KLSAgICAgICAgICAgICAg
ICBpZiAoYWN0dWFsUGF0aFthaV0gPT09ICdaJwotICAgICAgICAgICAgICAgICAgICAmJiBleHBl
Y3RlZFBhdGhbZWldID09PSAnTCcKLSAgICAgICAgICAgICAgICAgICAgJiYgY29vcmRpbmF0ZXNB
cmVSb3VnaGx5RXF1YWwoZXhwZWN0ZWRQYXRoW2V4cGVjdGVkU3VicGF0aFN0YXJ0ICsgMV0sIGV4
cGVjdGVkUGF0aFtlaSArIDFdKQotICAgICAgICAgICAgICAgICAgICAmJiBjb29yZGluYXRlc0Fy
ZVJvdWdobHlFcXVhbChleHBlY3RlZFBhdGhbZXhwZWN0ZWRTdWJwYXRoU3RhcnQgKyAyXSwgZXhw
ZWN0ZWRQYXRoW2VpICsgMl0pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVpICs9IDI7Ci0gICAg
ICAgICAgICAgICAgICAgIGFpLS07Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0
aW9uIG1ha2VTdHJpbmdGb3JQYXRoKHBhdGgpIHsKLSAgICAgICAgICAgIHJldHVybiBwYXRoLm1h
cChmdW5jdGlvbihpdGVtKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAn
bnVtYmVyJykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICtpdGVtLnRvRml4ZWQoMik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07Ci0gICAgICAgICAgICB9KS5qb2luKCcgJyk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2YXIgZXhwZWN0ZWRQYXRoU3RyaW5nID0gbWFrZVN0cmluZ0Zv
clBhdGgoZXhwZWN0ZWQpOwotICAgICAgICB2YXIgYWN0dWFsUGF0aFN0cmluZyA9IG1ha2VTdHJp
bmdGb3JQYXRoKGFjdHVhbCk7Ci0gICAgICAgIHZhciBhc3NlcnRpb25NZXNzYWdlID0gbWVzc2Fn
ZSArICIgXG5FWFBFQ1RFRDogIiArIGV4cGVjdGVkUGF0aFN0cmluZyArICJcbiAgQUNUVUFMOiAi
ICsgYWN0dWFsUGF0aFN0cmluZzsKLSAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQocGF0aHNB
cmVSb3VnaGx5RXF1YWwoYWN0dWFsLCBleHBlY3RlZCksIGFzc2VydGlvbk1lc3NhZ2UpOwotICAg
IH0KLX0KLQotfSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9y
LXRlc3QuanMgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMjk5ZWJjOWMxN2YzZGY4OGFlZWZkM2ZkYTNhMDE5
Y2JmZDg4M2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzCisrKyAvZGV2L251bGwKQEAg
LTEsMTU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTCi0g
KiBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQKLSAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQotICogUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIFRoaXMgbmFt
ZXNwYWNlIGlzIGluamVjdGVkIGludG8gZXZlcnkgdGVzdCBwYWdlLiBJdHMgZnVuY3Rpb25zIGFy
ZSBpbnZva2VkIGJ5Ci0vLyBJbnNwZWN0b3JUZXN0IG1ldGhvZHMgb24gdGhlIGluc3BlY3RvciBw
YWdlIHZpYSBSdW50aW1lQWdlbnQuZXZhbHVhdGUoKSBjYWxscy4KLUluc3BlY3RvclRlc3RQcm94
eSA9IHt9OwotSW5zcGVjdG9yVGVzdFByb3h5Ll9pbml0aWFsaXplcnMgPSBbXTsKLQotLy8gSGVs
cGVyIHNjcmlwdHMgbGlrZSBgZGVidWdnZXItdGVzdC5qc2AgbXVzdCByZWdpc3RlciB0aGVpciBp
bml0aWFsaXphdGlvbgotLy8gZnVuY3Rpb24gd2l0aCB0aGlzIG1ldGhvZCBzbyBpdCB3aWxsIGJl
IG1hcnNoYWxsZWQgdG8gdGhlIGluc3BlY3RvciBwYWdlLgotSW5zcGVjdG9yVGVzdFByb3h5LnJl
Z2lzdGVySW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihpbml0aWFsaXplcikKLXsKLSAgICBpZiAodHlw
ZW9mIGluaXRpYWxpemVyID09PSAiZnVuY3Rpb24iKQotICAgICAgICB0aGlzLl9pbml0aWFsaXpl
cnMucHVzaChpbml0aWFsaXplci50b1N0cmluZygpKTsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBp
cyBjYWxsZWQgYnkgdGhlIHRlc3QgZG9jdW1lbnQncyBib2R5IG9ubG9hZCBoYW5kbGVyLgotCi0v
LyBJdCBpbml0aWFsaXplcyB0aGUgaW5zcGVjdG9yIGFuZCBsb2FkcyBhbnkgYCotdGVzdC5qc2Ag
aGVscGVyIHNjcmlwdHMKLS8vIGludG8gdGhlIGluc3BlY3RvciBwYWdlIGNvbnRleHQuCi1mdW5j
dGlvbiBydW5UZXN0KCkKLXsKLSAgICAvLyBEb24ndCB0cnkgdG8gdXNlIHRlc3RSdW5uZXIgaWYg
cnVubmluZyB0aHJvdWdoIHRoZSBicm93c2VyLgotICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFNldCB1cCB0aGUgdGVzdCBwYWdlIGJlZm9yZSB0
aGUgbG9hZCBldmVudCBmaXJlcy4KLSAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKLSAgICB0
ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLQotICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0SW5z
cGVjdG9ySXNVbmRlclRlc3QodHJ1ZSk7Ci0gICAgdGVzdFJ1bm5lci5zaG93V2ViSW5zcGVjdG9y
KCk7Ci0KLSAgICBmdW5jdGlvbiBydW5Jbml0aWFsaXphdGlvbk1ldGhvZHNJbkZyb250ZW5kKGlu
aXRpYWxpemVyc0FycmF5KQotICAgIHsKLSAgICAgICAgSW5zcGVjdG9yVGVzdC50ZXN0UGFnZURp
ZExvYWQoKTsKLQotICAgICAgICAvLyBJZiB0aGUgdGVzdCBwYWdlIHJlbG9hZGVkIGJ1dCB3ZSBz
dGFydGVkIHJ1bm5pbmcgdGhlIHRlc3QgaW4gYSBwcmV2aW91cwotICAgICAgICAvLyBuYXZpZ2F0
aW9uLCB0aGVuIGRvbid0IGluaXRpYWxpemUgdGhlIGluc3BlY3RvciBmcm9udGVuZCBhZ2Fpbi4K
LSAgICAgICAgaWYgKEluc3BlY3RvclRlc3QuZGlkSW5qZWN0VGVzdENvZGUpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgZm9yICh2YXIgaW5pdGlhbGl6ZXIgb2YgaW5pdGlhbGl6ZXJz
QXJyYXkpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXIo
KTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVy
cm9yKCJFeGNlcHRpb24gaW4gdGVzdCBpbml0aWFsaXphdGlvbjogIiArIGUsIGUuc3RhY2sgfHwg
IihubyBzdGFjayB0cmFjZSkiKTsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBs
ZXRlVGVzdCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rp
b24gcnVuVGVzdE1ldGhvZEluRnJvbnRlbmQodGVzdEZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAg
aWYgKEluc3BlY3RvclRlc3QuZGlkSW5qZWN0VGVzdENvZGUpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgSW5zcGVjdG9yVGVzdC5kaWRJbmplY3RUZXN0Q29kZSA9IHRydWU7Ci0KLSAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHRlc3RGdW5jdGlvbigpOwotICAgICAgICB9IGNhdGNo
IChlKSB7Ci0gICAgICAgICAgICBjb25zb2xlLmVycm9yKCJFeGNlcHRpb24gZHVyaW5nIHRlc3Qg
ZXhlY3V0aW9uOiAiICsgZSwgZS5zdGFjayB8fCAiKG5vIHN0YWNrIHRyYWNlKSIpOwotICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHZhciBjb2RlU3RyaW5nVG9FdmFsdWF0ZSA9ICIoIiArIHJ1bkluaXRpYWxpemF0aW9uTWV0
aG9kc0luRnJvbnRlbmQudG9TdHJpbmcoKSArICIpKFsiICsgSW5zcGVjdG9yVGVzdFByb3h5Ll9p
bml0aWFsaXplcnMgKyAiXSk7IjsKLSAgICB0ZXN0UnVubmVyLmV2YWx1YXRlSW5XZWJJbnNwZWN0
b3IoY29kZVN0cmluZ1RvRXZhbHVhdGUpOwotCi0gICAgLy8gYHRlc3RgIHJlZmVycyB0byBhIGZ1
bmN0aW9uIGRlZmluZWQgaW4gZ2xvYmFsIHNjb3BlIGluIHRoZSB0ZXN0IEhUTUwgcGFnZS4KLSAg
ICBjb2RlU3RyaW5nVG9FdmFsdWF0ZSA9ICIoIiArIHJ1blRlc3RNZXRob2RJbkZyb250ZW5kLnRv
U3RyaW5nKCkgKyAiKSgiICsgdGVzdC50b1N0cmluZygpICsgIik7IjsKLSAgICB0ZXN0UnVubmVy
LmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoY29kZVN0cmluZ1RvRXZhbHVhdGUpOwotfQotCi1JbnNw
ZWN0b3JUZXN0UHJveHkuY29tcGxldGVUZXN0ID0gZnVuY3Rpb24oKQotewotICAgIC8vIERvbid0
IHRyeSB0byB1c2UgdGVzdFJ1bm5lciBpZiBydW5uaW5nIHRocm91Z2ggdGhlIGJyb3dzZXIuCi0g
ICAgaWYgKCF3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ2xv
c2UgaW5zcGVjdG9yIGFzeW5jaHJvdXNseSBpbiBjYXNlIHdlIHdhbnQgdG8gdGVzdCB0ZWFyLWRv
d24gYmVoYXZpb3IuCi0gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgdGVzdFJ1
bm5lci5jbG9zZVdlYkluc3BlY3RvcigpOwotICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgICAgIH0sIDApOwot
ICAgIH0sIDApOwotfQotCi0vLyBMb2dzIG1lc3NhZ2UgdG8gdW5idWZmZXJlZCBwcm9jZXNzIHN0
ZG91dCwgYXZvaWRpbmcgdGltZW91dHMuCi0vLyBvbmx5IGJlIHVzZWQgdG8gZGVidWcgdGVzdHMg
YW5kIG5vdCB0byBwcm9kdWNlIG5vcm1hbCB0ZXN0IG91dHB1dC4KLUluc3BlY3RvclRlc3RQcm94
eS5kZWJ1Z0xvZyA9IGZ1bmN0aW9uKG1lc3NhZ2UpCi17Ci0gICAgd2luZG93LmFsZXJ0KG1lc3Nh
Z2UpOwotfQotCi0vLyBBZGQgYW5kIGNsZWFyIHRlc3Qgb3V0cHV0IGZyb20gdGhlIHJlc3VsdHMg
d2luZG93LgotSW5zcGVjdG9yVGVzdFByb3h5LmFkZFJlc3VsdCA9IGZ1bmN0aW9uKHRleHQpCi17
Ci0gICAgLy8gRm9yIGVhcmx5IGVycm9ycyB0cmlnZ2VyZWQgd2hlbiBsb2FkaW5nIHRoZSB0ZXN0
IHBhZ2UsIHdyaXRlIHRvIHN0ZGVyci4KLSAgICBpZiAoIWRvY3VtZW50LmJvZHkpIHsKLSAgICAg
ICAgdGhpcy5kZWJ1Z0xvZyh0ZXh0KTsKLSAgICAgICAgdGhpcy5jb21wbGV0ZVRlc3QoKTsKLSAg
ICB9Ci0KLSAgICBpZiAoIXRoaXMuX3Jlc3VsdEVsZW1lbnQpIHsKLSAgICAgICAgdGhpcy5fcmVz
dWx0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInByZSIpOwotICAgICAgICB0aGlz
Ll9yZXN1bHRFbGVtZW50LmlkID0gIm91dHB1dCI7Ci0gICAgICAgIGRvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQodGhpcy5fcmVzdWx0RWxlbWVudCk7Ci0gICAgfQotICAgIHRoaXMuX3Jlc3VsdEVs
ZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpOwotICAgIHRo
aXMuX3Jlc3VsdEVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIi
KSk7Ci19Ci0KLUluc3BlY3RvclRlc3RQcm94eS5jbGVhclJlc3VsdHMgPSBmdW5jdGlvbigpCi17
Ci0gICAgaWYgKHRoaXMuX3Jlc3VsdEVsZW1lbnQpIHsKLSAgICAgICAgdGhpcy5fcmVzdWx0RWxl
bWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX3Jlc3VsdEVsZW1lbnQpOwotICAgICAg
ICBkZWxldGUgdGhpcy5fcmVzdWx0RWxlbWVudDsKLSAgICB9Ci19Ci0KLUluc3BlY3RvclRlc3RQ
cm94eS5yZXBvcnRVbmNhdWdodEV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHVybCwgbGlu
ZU51bWJlcikKLXsKLSAgICB2YXIgcmVzdWx0ID0gIlVuY2F1Z2h0IGV4Y2VwdGlvbiBpbiB0ZXN0
IHBhZ2U6ICIgKyBtZXNzYWdlICsgIiBbIiArIHVybCArICI6IiArIGxpbmVOdW1iZXIgKyAiXSI7
Ci0gICAgSW5zcGVjdG9yVGVzdFByb3h5LmFkZFJlc3VsdChyZXN1bHQpOwotICAgIEluc3BlY3Rv
clRlc3RQcm94eS5jb21wbGV0ZVRlc3QoKTsKLX0KLQotLy8gQ2F0Y2ggc3ludGF4IGVycm9ycywg
dHlwZSBlcnJvcnMsIGFuZCBvdGhlciBleGNlcHRpb25zLiBSdW4gdGhpcyBiZWZvcmUgbG9hZGlu
ZyBvdGhlciBmaWxlcy4KLXdpbmRvdy5vbmVycm9yID0gSW5zcGVjdG9yVGVzdFByb3h5LnJlcG9y
dFVuY2F1Z2h0RXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Bh
Z2UvbWFpbi1mcmFtZS1yZXNvdXJjZS5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3BhZ2Uv
bWFpbi1mcmFtZS1yZXNvdXJjZS5odG1sCmluZGV4IDk4MWUzYjAzN2VhMDY2NGY3NDgyMDM3YmY3
YzNjN2EzZTAzMDRmNWUuLmJiNTM2MDZiYmM0NGNiNGFmZWU1OThhM2Y0YzY2ZDQ4NDY1MDQyMWYg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wYWdlL21haW4tZnJhbWUtcmVzb3Vy
Y2UuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcGFnZS9tYWluLWZyYW1lLXJlc291
cmNlLmh0bWwKQEAgLTEsNyArMSw3IEBACiA8IWRvY3R5cGUgaHRtbD4KIDxodG1sPgogPGhlYWQ+
Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9pbnNwZWN0b3ItdGVzdC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9o
dHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
PgogZnVuY3Rpb24gdGVzdCgpCiB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
cmVwbGF5L2phdmFzY3JpcHQtZGF0ZS1ub3cuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9y
ZXBsYXkvamF2YXNjcmlwdC1kYXRlLW5vdy5odG1sCmluZGV4IGQzMjkwZTllZmU5MzAyODAxODMw
ODFkZmIyMGNlZThlMTE0OTdlYWYuLjY4ZDQ2MjA3NWUxYTg1ZTQ5OGFjNmY0MmZkMzA5ZTkxMmNl
ODc2OTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBsYXkvamF2YXNjcmlw
dC1kYXRlLW5vdy5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBsYXkvamF2YXNj
cmlwdC1kYXRlLW5vdy5odG1sCkBAIC0xLDcgKzEsNyBAQAogPGh0bWw+CiA8aGVhZD4KLTxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2luc3BlY3Rvci10ZXN0LmpzIj48L3Nj
cmlwdD4KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4vcmVwbGF5LXRlc3Qu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4v
aHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3Iv
cmVwbGF5L3JlcGxheS10ZXN0LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+CiAKIHdpbmRvdy5fdGlt
ZXMgPSBbRGF0ZS5ub3coKSwgbmV3IERhdGUoKS50b1N0cmluZygpXTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9yZXBsYXkvamF2YXNjcmlwdC1yYW5kb20tc2VlZC5odG1sIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcGxheS9qYXZhc2NyaXB0LXJhbmRvbS1zZWVkLmh0bWwK
aW5kZXggMjIxMWYyMDY4Y2VmOGZkNDkxZmFkMWE2NmQ1YzI1MjRlMjJlYzA1OC4uNjNlYzRkZTk0
NWY3YzBlYWI2ZTNjOGQ3YjY2Zjk1MDQ1M2JkNDVmNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL3JlcGxheS9qYXZhc2NyaXB0LXJhbmRvbS1zZWVkLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3JlcGxheS9qYXZhc2NyaXB0LXJhbmRvbS1zZWVkLmh0bWwKQEAgLTEs
NyArMSw3IEBACiA8aHRtbD4KIDxoZWFkPgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
IHNyYz0iLi4vaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgotPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iLi9yZXBsYXktdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNw
ZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXBsYXkvcmVwbGF5LXRlc3QuanMiPjwv
c2NyaXB0PgogPHNjcmlwdD4KIAogd2luZG93Ll9yYW5kb21OdW1iZXIgPSBNYXRoLnJhbmRvbSgp
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcGxheS9yZXBsYXktdGVzdC5q
cyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBsYXkvcmVwbGF5LXRlc3QuanMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1Y2RmYzNkZTliNGFlMDI0ODkzM2M3MGI1MTQ4MmMwNzEw
ZGJkZDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3JlcGxheS9yZXBsYXktdGVzdC5qcworKysgL2Rldi9udWxsCkBA
IC0xLDc5ICswLDAgQEAKLUluc3BlY3RvclRlc3RQcm94eS5yZWdpc3RlckluaXRpYWxpemVyKGZ1
bmN0aW9uKCkgewotCi1JbnNwZWN0b3JUZXN0LlJlcGxheSA9IHt9OwotCi1JbnNwZWN0b3JUZXN0
LlJlcGxheS5ydW5TaW5nbGVTZWdtZW50UmVmVGVzdCA9IGZ1bmN0aW9uKHN0YXRlQ29tcGFyYXRv
cikKLXsKLSAgICB2YXIgc3RhdGVEdXJpbmdDYXB0dXJpbmcgPSBudWxsOwotICAgIHZhciBzdGF0
ZUR1cmluZ1JlcGxheWluZyA9IG51bGw7Ci0KLSAgICB2YXIgaWdub3JlQ2FjaGVPblJlbG9hZCA9
IHRydWU7Ci0gICAgSW5zcGVjdG9yVGVzdC5yZWxvYWRQYWdlKGlnbm9yZUNhY2hlT25SZWxvYWQp
Ci0gICAgLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5j
dGlvbiB3YWl0Rm9yTWFpblJlc291cmNlQmVmb3JlU3RhcnRpbmcocmVzb2x2ZSwgcmVqZWN0KSB7
Ci0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2ZW50RGlzcGF0Y2hlci5hZGRFdmVudExpc3Rl
bmVyKEluc3BlY3RvclRlc3QuRXZlbnREaXNwYXRjaGVyLkV2ZW50LlRlc3RQYWdlRGlkTG9hZCwg
cmVzb2x2ZSk7Ci0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiV2FpdGluZyBmb3IgdGVz
dCBwYWdlIHRvIGZpbmlzaCBpdHMgaW5pdGlhbCBsb2FkLi4uIik7Ci0gICAgICAgIH0pOwotICAg
IH0pCi0gICAgLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJU
ZXN0IHBhZ2UgaW5pdGlhbCBsb2FkIGRvbmUuIik7Ci0gICAgICAgIHJldHVybiBuZXcgUHJvbWlz
ZShmdW5jdGlvbiBzdGFydENhcHR1cmluZyhyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgICAgICAg
IEluc3BlY3RvclRlc3QubG9nKCJXYWl0aW5nIGZvciBjYXB0dXJpbmcgdG8gc3RhcnQuLi4iKTsK
LSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5yZXBsYXlNYW5hZ2VyLnN0YXJ0Q2FwdHVyaW5nKCk7
Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IucmVwbGF5TWFuYWdlci5hZGRFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLkV2ZW50LkNhcHR1cmVTdGFydGVkLCByZXNvbHZl
KTsKLSAgICAgICAgfSk7Ci0gICAgfSkKLSAgICAudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAg
SW5zcGVjdG9yVGVzdC5sb2coIkNhcHR1cmluZyBoYXMgc3RhcnRlZC4iKTsKLSAgICAgICAgcmV0
dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHdhaXRUb0NhcHR1cmVJbml0aWFsTmF2aWdhdGlvbihy
ZXNvbHZlLCByZWplY3QpIHsKLSAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJXYWl0aW5n
IHRvIGNhcHR1cmUgaW5pdGlhbCBuYXZpZ2F0aW9uLi4uIik7Ci0gICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LmV2ZW50RGlzcGF0Y2hlci5hZGRFdmVudExpc3RlbmVyKEluc3BlY3RvclRlc3QuRXZl
bnREaXNwYXRjaGVyLkV2ZW50LlRlc3RQYWdlRGlkTG9hZCwgcmVzb2x2ZSk7Ci0gICAgICAgIH0p
OwotICAgIH0pCi0gICAgLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIEluc3BlY3RvclRlc3Qu
bG9nKCJJbml0aWFsIG5hdmlnYXRpb24gY2FwdHVyZWQuIER1bXBpbmcgc3RhdGUuLi4uIik7Ci0g
ICAgICAgIHJldHVybiBSdW50aW1lQWdlbnQuZXZhbHVhdGUucHJvbWlzZSgiZHVtcE5vbmRldGVy
bWluaXN0aWNTdGF0ZSgpIik7Ci0gICAgfSkKLSAgICAudGhlbihmdW5jdGlvbihwYXlsb2FkKSB7
Ci0gICAgICAgIHN0YXRlRHVyaW5nQ2FwdHVyaW5nID0gcGF5bG9hZC52YWx1ZTsKLSAgICAgICAg
cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHN0b3BDYXB0dXJpbmcocmVzb2x2ZSwgcmVqZWN0
KSB7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IucmVwbGF5TWFuYWdlci5zdG9wQ2FwdHVyaW5n
KCk7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IucmVwbGF5TWFuYWdlci5hZGRFdmVudExpc3Rl
bmVyKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLkV2ZW50LkNhcHR1cmVTdG9wcGVkLCByZXNv
bHZlKTsKLSAgICAgICAgfSk7Ci0gICAgfSkKLSAgICAudGhlbihmdW5jdGlvbigpIHsKLSAgICAg
ICAgSW5zcGVjdG9yVGVzdC5sb2coIkNhcHR1cmUgc3RvcHBlZCwgbm93IHN0YXJ0aW5nIHJlcGxh
eSB0byBjb21wbGV0aW9uLi4uIikKLSAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9u
IHN0YXJ0UGxheWJhY2socmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0
b3IucmVwbGF5TWFuYWdlci5yZXBsYXlUb0NvbXBsZXRpb24oKTsKLSAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5yZXBsYXlNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlJlcGxh
eU1hbmFnZXIuRXZlbnQuUGxheWJhY2tTdGFydGVkLCByZXNvbHZlKTsKLSAgICAgICAgfSk7Ci0g
ICAgfSkKLSAgICAudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2co
IlBsYXliYWNrIGhhcyBzdGFydGVkLiIpOwotICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVu
Y3Rpb24gd2FpdEZvck1haW5SZXNvdXJjZVdoZW5SZXBsYXlpbmcocmVzb2x2ZSwgcmVqZWN0KSB7
Ci0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiV2FpdGluZyB0byByZXBsYXkgaW5pdGlh
bCBuYXZpZ2F0aW9uLi4uIik7Ci0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2ZW50RGlzcGF0
Y2hlci5hZGRFdmVudExpc3RlbmVyKEluc3BlY3RvclRlc3QuRXZlbnREaXNwYXRjaGVyLkV2ZW50
LlRlc3RQYWdlRGlkTG9hZCwgcmVzb2x2ZSk7Ci0gICAgICAgIH0pOwotICAgIH0pCi0gICAgLnRo
ZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJJbml0aWFsIG5hdmln
YXRpb24gcmVwbGF5ZWQuIER1bXBpbmcgc3RhdGUuLi4iKTsKLSAgICAgICAgcmV0dXJuIFJ1bnRp
bWVBZ2VudC5ldmFsdWF0ZS5wcm9taXNlKCJkdW1wTm9uZGV0ZXJtaW5pc3RpY1N0YXRlKCkiKTsK
LSAgICB9KQotICAgIC50aGVuKGZ1bmN0aW9uKHBheWxvYWQpIHsKLSAgICAgICAgc3RhdGVEdXJp
bmdSZXBsYXlpbmcgPSBwYXlsb2FkLnZhbHVlOwotICAgICAgICByZXR1cm4gbmV3IFByb21pc2Uo
ZnVuY3Rpb24gd2FpdEZvclJlcGxheWluZ1RvRmluaXNoKHJlc29sdmUsIHJlamVjdCkgewotICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLnJlcGxheU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuUmVwbGF5TWFuYWdlci5FdmVudC5QbGF5YmFja0ZpbmlzaGVkLCByZXNvbHZlKTsK
LSAgICAgICAgfSk7Ci0gICAgfSkKLSAgICAudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgdmFy
IHN0YXRlc0VxdWFsID0gc3RhdGVEdXJpbmdDYXB0dXJpbmcgPT09IHN0YXRlRHVyaW5nUmVwbGF5
aW5nOwotICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQoc3RhdGVzRXF1YWwsICJOb25k
ZXRlcm1pbmlzdGljIHN0YXRlIHNob3VsZCBub3QgZGlmZmVyIGR1cmluZyBjYXB0dXJlIGFuZCBy
ZXBsYXkuIik7Ci0gICAgICAgIGlmICghc3RhdGVzRXF1YWwpIHsKLSAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QubG9nKCJTdGF0ZSBkdXJpbmcgY2FwdHVyaW5nOiAiICsgc3RhdGVEdXJpbmdDYXB0
dXJpbmcpOwotICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlN0YXRlIGR1cmluZyByZXBs
YXlpbmc6ICIgKyBzdGF0ZUR1cmluZ1JlcGxheWluZyk7Ci0gICAgICAgIH0KLSAgICAgICAgSW5z
cGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKLSAgICB9KTsKLX07Ci0KLX0pOwpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci90ZXN0
LWhhcm5lc3MtdHJpdmlhbGx5LXdvcmtzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvdGVz
dC1oYXJuZXNzLXRyaXZpYWxseS13b3Jrcy5odG1sCmluZGV4IGMwOGFlMWFhYjcxMTE0NGMxNGFj
MjZmYWNiY2IzNzAwODI4NmYxMTAuLmIwODFhNzRkMmRjYzgwNGMyZjk5YTI4YjM5NDFiNmQ0Yjg1
ZDQzOGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci90ZXN0LWhhcm5lc3MtdHJp
dmlhbGx5LXdvcmtzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Rlc3QtaGFybmVz
cy10cml2aWFsbHktd29ya3MuaHRtbApAQCAtMSw2ICsxLDYgQEAKIDxodG1sPgogPGhlYWQ+Ci08
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJpbnNwZWN0b3ItdGVzdC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9odHRwL3Rlc3Rz
L2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgogZnVuY3Rp
b24gdGVzdCgpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228774</attachid>
            <date>2014-04-07 17:01:55 -0700</date>
            <delta_ts>2014-04-07 17:02:51 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>bug-131318-20140407170134.patch</filename>
            <type>text/plain</type>
            <size>50800</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY2ODg4CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDI3YzdjNWIwMGVjOWJhMzE4NTAy
NjczOTQ2MjMzN2E5NDE5MDQ0Yy4uZGI3MzU1MjdmMTQ1YzQwYTk5ZmU5OGFhYWQ1Zjk0OWQxZTk3
ZDE2MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE0LTA0LTA3ICBCcmlhbiBKLiBCdXJnICA8
YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiB0ZXN0IGhl
bHBlciBmaWxlcyBzaG91bGQgYmUgdW5kZXIgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0
b3IvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzEz
MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWFy
cmFuZ2UgaGVscGVyIGZpbGVzIHVzZWQgYnkgZnVsbCBpbnNwZWN0b3IgdGVzdHMuIEluIHRoZWly
IHByZXZpb3VzIHBsYWNlbWVudCwKKyAgICAgICAgdGhleSB3ZXJlIG91dHNpZGUgdGhlIGh0dHAg
c2VydmVyIHJvb3QgYW5kIGNvdWxkbid0IGJlIGxvYWRlZCBmcm9tIGh0dHAgdGVzdHMuCisKKyAg
ICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9kZWJ1Z2dlci10ZXN0LmpzOiBS
ZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2RlYnVnZ2VyLXRlc3Qu
anMuCisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvZG9tL3NoYXBlcy10ZXN0LmpzOiBS
ZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9zaGFwZXMtdGVzdC5qcy4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qczogUmVuYW1lZCBm
cm9tIExheW91dFRlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcy4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL2luc3BlY3Rvci9yZXBsYXkvcmVwbGF5LXRlc3QuanM6IFJlbmFtZWQgZnJvbSBM
YXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwbGF5L3JlcGxheS10ZXN0LmpzLgorICAgICAgICAqIGlu
c3BlY3Rvci9kZWJ1Z2dlci9wcm9iZS1tYW5hZ2VyLWFkZC1yZW1vdmUtYWN0aW9ucy5odG1sOgor
ICAgICAgICAqIGluc3BlY3Rvci9kb20vY29udGVudC1mbG93LWNvbnRlbnQtbm9kZXMuaHRtbDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvZG9tL2NvbnRlbnQtZmxvdy1jb250ZW50LXJlbW92YWwuaHRt
bDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZG9tL2NvbnRlbnQtZmxvdy1saXN0Lmh0bWw6CisgICAg
ICAgICogaW5zcGVjdG9yL2RvbS9jb250ZW50LW5vZGUtcmVnaW9uLWluZm8uaHRtbDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZG9tL2hpZ2hsaWdodC1zaGFwZS1vdXRzaWRlLW1hcmdpbi5odG1sOgor
ICAgICAgICAqIGluc3BlY3Rvci9kb20vaGlnaGxpZ2h0LXNoYXBlLW91dHNpZGUuaHRtbDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvcGFnZS9tYWluLWZyYW1lLXJlc291cmNlLmh0bWw6CisgICAgICAg
ICogaW5zcGVjdG9yL3JlcGxheS9qYXZhc2NyaXB0LWRhdGUtbm93Lmh0bWw6CisgICAgICAgICog
aW5zcGVjdG9yL3JlcGxheS9qYXZhc2NyaXB0LXJhbmRvbS1zZWVkLmh0bWw6CisgICAgICAgICog
aW5zcGVjdG9yL3Rlc3QtaGFybmVzcy10cml2aWFsbHktd29ya3MuaHRtbDoKKwogMjAxNC0wMy0z
MCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgc2xvdyBK
U1JlZ3Jlc3MgdGVzdHMgb3V0IG9mIHRoZSB3YXkgc28gdGhhdCB0aGV5IGRvbid0IHNob3cgdXAg
aW4gcnVuLWpzYy1iZW5jaG1hcmtzIHJ1bnMgYW5kIGFsc28gc2tpcCB0ZXN0cyB0aGF0IGFyZSBl
eHRyZW1lbHkgbG9uZy1ydW5uaW5nCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2luc3BlY3Rvci9kZWJ1Z2dlci9kZWJ1Z2dlci10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvZGVidWdnZXItdGVzdC5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMTAy
NTU4NzBhMTk1NjFkNzk2ZWY4OGYyZDg1OTYwMDkwMzRlMjRhCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvZGVidWdnZXItdGVzdC5q
cwpAQCAtMCwwICsxLDExNSBAQAorSW5zcGVjdG9yVGVzdFByb3h5LnJlZ2lzdGVySW5pdGlhbGl6
ZXIoZnVuY3Rpb24oKSB7CisKK0luc3BlY3RvclRlc3Quc3RhcnRUcmFjaW5nQnJlYWtwb2ludHMg
PSBmdW5jdGlvbigpCit7CisgICAgaWYgKCFXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2
ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5CcmVha3BvaW50
QWRkZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJCcmVh
a3BvaW50IHdhcyBhZGRlZC4iKTsKKyAgICB9KTsKKworICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dl
ck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2
ZW50LkJyZWFrcG9pbnRSZW1vdmVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICBJbnNwZWN0
b3JUZXN0LmxvZygiQnJlYWtwb2ludCB3YXMgcmVtb3ZlZC4iKTsKKyAgICB9KTsKKworICAgIFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnQuRXZlbnQuRGlzYWJsZWRTdGF0ZURpZENoYW5nZSwgZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC50YXJnZXQ7CisgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KGJyZWFrcG9pbnQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCwgIlVuZXhw
ZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkJyZWFr
cG9pbnQgZGlzYWJsZWQgc3RhdGUgY2hhbmdlZDogIiArIGJyZWFrcG9pbnQuZGlzYWJsZWQpOwor
ICAgIH0pOworCisgICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5SZXNvbHZlZFN0YXRlRGlkQ2hhbmdlLCBmdW5j
dGlvbihldmVudCkgeworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LnRhcmdldDsKKyAg
ICAgICAgY29uc29sZS5hc3NlcnQoYnJlYWtwb2ludCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5C
cmVha3BvaW50LCAiVW5leHBlY3RlZCBvYmplY3QgdHlwZSEiKTsKKworICAgICAgICBJbnNwZWN0
b3JUZXN0LmxvZygiQnJlYWtwb2ludCByZXNvbHZlZCBzdGF0ZSBjaGFuZ2VkOiAiICsgYnJlYWtw
b2ludC5yZXNvbHZlZCk7CisgICAgfSk7CisKKyAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5h
ZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50LkF1dG9Db250aW51
ZURpZENoYW5nZSwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBl
dmVudC50YXJnZXQ7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGJyZWFrcG9pbnQgaW5zdGFuY2Vv
ZiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCwgIlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisK
KyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkJyZWFrcG9pbnQgYXV0b2NvbnRpbnVlIHN0YXRl
IGNoYW5nZWQ6ICIgKyBicmVha3BvaW50LmF1dG9Db250aW51ZSk7CisgICAgfSk7CisKKyAgICBX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50LkV2ZW50LkNvbmRpdGlvbkRpZENoYW5nZSwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAg
ICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC50YXJnZXQ7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KGJyZWFrcG9pbnQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCwgIlVuZXhwZWN0
ZWQgb2JqZWN0IHR5cGUhIik7CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkJyZWFrcG9p
bnQgY29uZGl0aW9uIGNoYW5nZWQ6ICIgKyBicmVha3BvaW50LmNvbmRpdGlvbik7CisgICAgfSk7
CisKKyAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50LkV2ZW50LkFjdGlvbnNEaWRDaGFuZ2UsIGZ1bmN0aW9uKGV2ZW50KSB7
CisgICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQudGFyZ2V0OworICAgICAgICBjb25zb2xl
LmFzc2VydChicmVha3BvaW50IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQsICJV
bmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOworCisgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJC
cmVha3BvaW50IGFjdGlvbnMgY2hhbmdlZC4gTmV3IGNvdW50OiAiICsgYnJlYWtwb2ludC5hY3Rp
b25zLmxlbmd0aCk7CisgICAgfSk7Cit9CisKK0luc3BlY3RvclRlc3Quc3RhcnRUcmFjaW5nUHJv
YmVzID0gZnVuY3Rpb24oKQoreworICAgIGlmICghV2ViSW5zcGVjdG9yLnByb2JlTWFuYWdlcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgV2ViSW5zcGVjdG9yLnByb2JlTWFuYWdlci5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5Qcm9iZU1hbmFnZXIuRXZlbnQuUHJvYmVTZXRBZGRlZCwg
ZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIHByb2JlU2V0ID0gZXZlbnQuZGF0YS5wcm9i
ZVNldDsKKyAgICAgICAgY29uc29sZS5hc3NlcnQocHJvYmVTZXQgaW5zdGFuY2VvZiBXZWJJbnNw
ZWN0b3IuUHJvYmVTZXQsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOworCisgICAgICAgIElu
c3BlY3RvclRlc3QubG9nKCJQcm9iZSBzZXQgd2FzIGFkZGVkLiBOZXcgY291bnQ6ICIgKyBXZWJJ
bnNwZWN0b3IucHJvYmVNYW5hZ2VyLnByb2JlU2V0cy5sZW5ndGgpOworICAgIH0pOworCisgICAg
V2ViSW5zcGVjdG9yLnByb2JlTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Q
cm9iZU1hbmFnZXIuRXZlbnQuUHJvYmVTZXRSZW1vdmVkLCBmdW5jdGlvbihldmVudCkgeworICAg
ICAgICB2YXIgcHJvYmVTZXQgPSBldmVudC5kYXRhLnByb2JlU2V0OworICAgICAgICBjb25zb2xl
LmFzc2VydChwcm9iZVNldCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Qcm9iZVNldCwgIlVuZXhw
ZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlByb2Jl
IHNldCB3YXMgcmVtb3ZlZC4gTmV3IGNvdW50OiAiICsgV2ViSW5zcGVjdG9yLnByb2JlTWFuYWdl
ci5wcm9iZVNldHMubGVuZ3RoKTsKKyAgICB9KTsKKworICAgIFdlYkluc3BlY3Rvci5Qcm9iZS5h
ZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Qcm9iZS5FdmVudC5FeHByZXNzaW9uQ2hhbmdl
ZCwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIHByb2JlID0gZXZlbnQudGFyZ2V0Owor
ICAgICAgICBjb25zb2xlLmFzc2VydChwcm9iZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Qcm9i
ZSwgIlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5s
b2coIlByb2JlIHdpdGggaWRlbnRpZmllciAiICsgcHJvYmUuaWQgKyAiIGNoYW5nZWQgZXhwcmVz
c2lvbjogIiArIHByb2JlLmV4cHJlc3Npb24pOworICAgIH0pOworCisgICAgV2ViSW5zcGVjdG9y
LlByb2JlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlByb2JlLkV2ZW50LlNhbXBsZUFk
ZGVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIgcHJvYmUgPSBldmVudC50YXJnZXQ7
CisgICAgICAgIHZhciBzYW1wbGUgPSBldmVudC5kYXRhOworICAgICAgICBjb25zb2xlLmFzc2Vy
dChwcm9iZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Qcm9iZSwgIlVuZXhwZWN0ZWQgb2JqZWN0
IHR5cGUhIik7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHNhbXBsZSBpbnN0YW5jZW9mIFdlYklu
c3BlY3Rvci5Qcm9iZVNhbXBsZSwgIlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisKKyAgICAg
ICAgSW5zcGVjdG9yVGVzdC5sb2coIlByb2JlIHdpdGggaWRlbnRpZmllciAiICsgcHJvYmUuaWQg
KyAiIGFkZGVkIHNhbXBsZTogIiArIHNhbXBsZSk7CisgICAgfSk7CisKKyAgICBXZWJJbnNwZWN0
b3IuUHJvYmUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUHJvYmUuRXZlbnQuU2FtcGxl
c0NsZWFyZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBwcm9iZSA9IGV2ZW50LnRh
cmdldDsKKyAgICAgICAgY29uc29sZS5hc3NlcnQocHJvYmUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0
b3IuUHJvYmUsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOworCisgICAgICAgIEluc3BlY3Rv
clRlc3QubG9nKCJQcm9iZSB3aXRoIGlkZW50aWZpZXIgIiArIHByb2JlLmlkICsgIiBjbGVhcmVk
IGFsbCBzYW1wbGVzLiIpOworICAgIH0pOworCisgICAgV2ViSW5zcGVjdG9yLlByb2JlU2V0LmFk
ZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlByb2JlU2V0LkV2ZW50LlByb2JlQWRkZWQsIGZ1
bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBwcm9iZSA9IGV2ZW50LmRhdGE7CisgICAgICAg
IHZhciBwcm9iZVNldCA9IGV2ZW50LnRhcmdldDsKKyAgICAgICAgY29uc29sZS5hc3NlcnQocHJv
YmUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUHJvYmUsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBl
ISIpOworICAgICAgICBjb25zb2xlLmFzc2VydChwcm9iZVNldCBpbnN0YW5jZW9mIFdlYkluc3Bl
Y3Rvci5Qcm9iZVNldCwgIlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisKKyAgICAgICAgSW5z
cGVjdG9yVGVzdC5sb2coIlByb2JlIHdpdGggaWRlbnRpZmllciAiICsgcHJvYmUuaWQgKyAiIHdh
cyBhZGRlZCB0byBwcm9iZSBzZXQuIik7CisgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJQcm9i
ZSBzZXQncyBwcm9iZSBjb3VudDogIiArIHByb2JlU2V0LnByb2Jlcy5sZW5ndGgpOworICAgIH0p
OworCisgICAgV2ViSW5zcGVjdG9yLlByb2JlU2V0LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLlByb2JlU2V0LkV2ZW50LlByb2JlUmVtb3ZlZCwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAg
ICAgdmFyIHByb2JlID0gZXZlbnQuZGF0YTsKKyAgICAgICAgdmFyIHByb2JlU2V0ID0gZXZlbnQu
dGFyZ2V0OworICAgICAgICBjb25zb2xlLmFzc2VydChwcm9iZSBpbnN0YW5jZW9mIFdlYkluc3Bl
Y3Rvci5Qcm9iZSwgIlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KHByb2JlU2V0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlByb2JlU2V0LCAiVW5leHBl
Y3RlZCBvYmplY3QgdHlwZSEiKTsKKworICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUHJvYmUg
d2l0aCBpZGVudGlmaWVyICIgKyBwcm9iZS5pZCArICIgd2FzIHJlbW92ZWQgZnJvbSBwcm9iZSBz
ZXQuIik7CisgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJQcm9iZSBzZXQncyBwcm9iZSBjb3Vu
dDogIiArIHByb2JlU2V0LnByb2Jlcy5sZW5ndGgpOworICAgIH0pOworfQorCit9KTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RvbS9zaGFwZXMtdGVzdC5q
cyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RvbS9zaGFwZXMtdGVzdC5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yM2M1Njk1NjQwYjBmYmZmNmRiZGNlYTA2NjcxZjUzYmZmN2NhNTk2Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZG9tL3NoYXBl
cy10ZXN0LmpzCkBAIC0wLDAgKzEsOTEgQEAKK0luc3BlY3RvclRlc3RQcm94eS5yZWdpc3Rlcklu
aXRpYWxpemVyKGZ1bmN0aW9uKCkgeworCitJbnNwZWN0b3JUZXN0LlNoYXBlcyA9IHsKKyAgICBn
ZXRTaGFwZU91dHNpZGVJbmZvRm9yU2VsZWN0b3I6IGZ1bmN0aW9uKHNlbGVjdG9yLCBjYWxsYmFj
aykKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5kb21UcmVlTWFuYWdlci5yZXF1ZXN0RG9j
dW1lbnQocmVxdWVzdERvY3VtZW50Q2FsbGJhY2spOworCisgICAgICAgIGZ1bmN0aW9uIHJlcXVl
c3REb2N1bWVudENhbGxiYWNrKG5vZGUpIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNz
ZXJ0KG5vZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuRE9NTm9kZSwgIlVuZXhwZWN0ZWQgYXJn
dW1lbnQgdG8gcmVxdWVzdERvY3VtZW50IGNhbGxiYWNrLiIpCisgICAgICAgICAgICBET01BZ2Vu
dC5xdWVyeVNlbGVjdG9yLmludm9rZSh7bm9kZUlkOiBub2RlLmlkLCBzZWxlY3Rvcjogc2VsZWN0
b3J9LCBxdWVyeVNlbGVjdG9yQ2FsbGJhY2spOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rp
b24gcXVlcnlTZWxlY3RvckNhbGxiYWNrKGVycm9yLCBub2RlSWQpIHsKKyAgICAgICAgICAgIElu
c3BlY3RvclRlc3QuYXNzZXJ0KCFlcnJvciwgIkVycm9yIGluIGNhbGxiYWNrIGZvciBET01BZ2Vu
dC5xdWVyeVNlbGVjdG9yIik7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2Rl
SWQsICJJbnZhbGlkIGFyZ3VtZW50IHRvIGNhbGxiYWNrIGZvciBET01BZ2VudC5xdWVyeVNlbGVj
dG9yIik7CisKKyAgICAgICAgICAgIHZhciBoaWdobGlnaHRDb25maWcgPSB7CisgICAgICAgICAg
ICAgICAgc2hvd0luZm86IHRydWUsCisgICAgICAgICAgICAgICAgY29udGVudENvbG9yOiB7cjog
MjU1LCBnOiAyNTUsIGI6IDI1NX0sCisgICAgICAgICAgICAgICAgcGFkZGluZ0NvbG9yOiB7cjog
MjU1LCBnOiAyNTUsIGI6IDI1NX0sCisgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IHtyOiAy
NTUsIGc6IDI1NSwgYjogMjU1fSwKKyAgICAgICAgICAgICAgICBtYXJnaW5Db2xvcjoge3I6IDI1
NSwgZzogMjU1LCBiOiAyNTV9LAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIERPTUFnZW50
LmhpZ2hsaWdodE5vZGUuaW52b2tlKHtub2RlSWQ6IG5vZGVJZCwgaGlnaGxpZ2h0Q29uZmlnOiBo
aWdobGlnaHRDb25maWd9LCBoaWdobGlnaHROb2RlQ2FsbGJhY2spOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gaGlnaGxpZ2h0Tm9kZUNhbGxiYWNrKGVycm9yKSB7CisgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmFzc2VydCghZXJyb3IsICJFcnJvciBpbiBjYWxsYmFjayBmb3IgRE9N
QWdlbnQuaGlnaGxpZ2h0Tm9kZSIpOworCisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1
YXRlSW5QYWdlKCJ3aW5kb3cuaW50ZXJuYWxzLmluc3BlY3RvckhpZ2hsaWdodE9iamVjdCgpIiwg
cmVjZWl2ZWRIaWdobGlnaHRPYmplY3QpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24g
cmVjZWl2ZWRIaWdobGlnaHRPYmplY3QoZXJyb3IsIHBheWxvYWQsIHdhc1Rocm93bikgeworICAg
ICAgICAgICAgY29uc29sZS5hc3NlcnQoIWVycm9yLCAiV2hlbiBldmFsdWF0aW5nIGNvZGUsIHJl
Y2VpdmVkIHVuZXhwZWN0ZWQgZXJyb3I6IiArIGVycm9yKTsKKyAgICAgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KCFlcnJvciwgIldoZW4gZXZhbHVhdGluZyBjb2RlLCBhbiBleGNlcHRpb24gd2FzIHRo
cm93bjoiICsgd2FzVGhyb3duKTsKKworICAgICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNl
KHBheWxvYWQudmFsdWUpOworICAgICAgICAgICAgY2FsbGJhY2soZGF0YS5lbGVtZW50SW5mby5z
aGFwZU91dHNpZGVJbmZvKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBhc3NlcnRQYXRoc0Fy
ZVJvdWdobHlFcXVhbDogZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkKKyAgICB7
CisgICAgICAgIGZ1bmN0aW9uIGNvb3JkaW5hdGVzQXJlUm91Z2hseUVxdWFsKGEsIGIpIHsKKyAg
ICAgICAgICAgIC8vIFNvbWUgcGxhdGZvcm1zIG1heSBvbmx5IHN0b3JlIGludGVnZXIgcGF0aCBw
b2ludHMsIHNvIHRoZSBwb3RlbnRpYWwKKyAgICAgICAgICAgIC8vIGRpZmZlcmVuY2VzIGJldHdl
ZW4gY29ycmVjdCBwYXRocyBjYW4gYmUgcm91Z2hseSBoYWxmIGEgdW5pdC4KKyAgICAgICAgICAg
IHJldHVybiB0eXBlb2YgYSA9PT0gIm51bWJlciIgJiYgdHlwZW9mIGIgPT09ICJudW1iZXIiICYm
IE1hdGguYWJzKGEgLSBiKSA8IDAuNTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHBh
dGhzQXJlUm91Z2hseUVxdWFsKGFjdHVhbFBhdGgsIGV4cGVjdGVkUGF0aCkgeworICAgICAgICAg
ICAgdmFyIGV4cGVjdGVkU3VicGF0aFN0YXJ0ID0gMCwgZWksIGFpOworICAgICAgICAgICAgZm9y
ICh2YXIgZWkgPSAwLCBhaSA9IDA7IGFpIDwgYWN0dWFsUGF0aC5sZW5ndGggJiYgZWkgPCBleHBl
Y3RlZFBhdGgubGVuZ3RoOyBhaSsrLCBlaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGV4cGVj
dGVkUGF0aFtlaV0gPT09ICdNJykKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRTdWJwYXRo
U3RhcnQgPSBlaTsKKworICAgICAgICAgICAgICAgIGlmIChhY3R1YWxQYXRoW2FpXSA9PT0gZXhw
ZWN0ZWRQYXRoW2VpXQorICAgICAgICAgICAgICAgICAgICB8fCBjb29yZGluYXRlc0FyZVJvdWdo
bHlFcXVhbChhY3R1YWxQYXRoW2FpXSwgZXhwZWN0ZWRQYXRoW2VpXSkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgLy8gRXh0cmFwb2xhdGUgdGhlIG1p
c3NpbmcgbGluZSB0byBjb21tYW5kIGlmIGl0IGlzIG1pc3NpbmcgZnJvbSBhY3R1YWwuCisgICAg
ICAgICAgICAgICAgLy8gVGhlIGNob2ljZSB0byBjbG9zZSB0aGUgcGF0aCB3aXRoIGFuIGV4cGxp
Y2l0IGxpbmUgdG8gY29tbWFuZCBpcworICAgICAgICAgICAgICAgIC8vIHBsYXRmb3JtIGRlcGVu
ZGVudC4KKyAgICAgICAgICAgICAgICBpZiAoYWN0dWFsUGF0aFthaV0gPT09ICdaJworICAgICAg
ICAgICAgICAgICAgICAmJiBleHBlY3RlZFBhdGhbZWldID09PSAnTCcKKyAgICAgICAgICAgICAg
ICAgICAgJiYgY29vcmRpbmF0ZXNBcmVSb3VnaGx5RXF1YWwoZXhwZWN0ZWRQYXRoW2V4cGVjdGVk
U3VicGF0aFN0YXJ0ICsgMV0sIGV4cGVjdGVkUGF0aFtlaSArIDFdKQorICAgICAgICAgICAgICAg
ICAgICAmJiBjb29yZGluYXRlc0FyZVJvdWdobHlFcXVhbChleHBlY3RlZFBhdGhbZXhwZWN0ZWRT
dWJwYXRoU3RhcnQgKyAyXSwgZXhwZWN0ZWRQYXRoW2VpICsgMl0pKSB7CisgICAgICAgICAgICAg
ICAgICAgIGVpICs9IDI7CisgICAgICAgICAgICAgICAgICAgIGFpLS07CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG1ha2VTdHJpbmdGb3JQYXRoKHBhdGgpIHsKKyAgICAg
ICAgICAgIHJldHVybiBwYXRoLm1hcChmdW5jdGlvbihpdGVtKSB7CisgICAgICAgICAgICAgICAg
aWYgKHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICtpdGVtLnRvRml4ZWQoMik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07CisgICAgICAg
ICAgICB9KS5qb2luKCcgJyk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgZXhwZWN0ZWRQYXRo
U3RyaW5nID0gbWFrZVN0cmluZ0ZvclBhdGgoZXhwZWN0ZWQpOworICAgICAgICB2YXIgYWN0dWFs
UGF0aFN0cmluZyA9IG1ha2VTdHJpbmdGb3JQYXRoKGFjdHVhbCk7CisgICAgICAgIHZhciBhc3Nl
cnRpb25NZXNzYWdlID0gbWVzc2FnZSArICIgXG5FWFBFQ1RFRDogIiArIGV4cGVjdGVkUGF0aFN0
cmluZyArICJcbiAgQUNUVUFMOiAiICsgYWN0dWFsUGF0aFN0cmluZzsKKyAgICAgICAgSW5zcGVj
dG9yVGVzdC5hc3NlcnQocGF0aHNBcmVSb3VnaGx5RXF1YWwoYWN0dWFsLCBleHBlY3RlZCksIGFz
c2VydGlvbk1lc3NhZ2UpOworICAgIH0KK30KKworfSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjMjk5ZWJj
OWMxN2YzZGY4OGFlZWZkM2ZkYTNhMDE5Y2JmZDg4M2EKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcwpAQCAtMCwwICsx
LDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyAqIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gVGhpcyBuYW1lc3BhY2Ug
aXMgaW5qZWN0ZWQgaW50byBldmVyeSB0ZXN0IHBhZ2UuIEl0cyBmdW5jdGlvbnMgYXJlIGludm9r
ZWQgYnkKKy8vIEluc3BlY3RvclRlc3QgbWV0aG9kcyBvbiB0aGUgaW5zcGVjdG9yIHBhZ2Ugdmlh
IFJ1bnRpbWVBZ2VudC5ldmFsdWF0ZSgpIGNhbGxzLgorSW5zcGVjdG9yVGVzdFByb3h5ID0ge307
CitJbnNwZWN0b3JUZXN0UHJveHkuX2luaXRpYWxpemVycyA9IFtdOworCisvLyBIZWxwZXIgc2Ny
aXB0cyBsaWtlIGBkZWJ1Z2dlci10ZXN0LmpzYCBtdXN0IHJlZ2lzdGVyIHRoZWlyIGluaXRpYWxp
emF0aW9uCisvLyBmdW5jdGlvbiB3aXRoIHRoaXMgbWV0aG9kIHNvIGl0IHdpbGwgYmUgbWFyc2hh
bGxlZCB0byB0aGUgaW5zcGVjdG9yIHBhZ2UuCitJbnNwZWN0b3JUZXN0UHJveHkucmVnaXN0ZXJJ
bml0aWFsaXplciA9IGZ1bmN0aW9uKGluaXRpYWxpemVyKQoreworICAgIGlmICh0eXBlb2YgaW5p
dGlhbGl6ZXIgPT09ICJmdW5jdGlvbiIpCisgICAgICAgIHRoaXMuX2luaXRpYWxpemVycy5wdXNo
KGluaXRpYWxpemVyLnRvU3RyaW5nKCkpOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZCBieSB0aGUgdGVzdCBkb2N1bWVudCdzIGJvZHkgb25sb2FkIGhhbmRsZXIuCisKKy8vIEl0IGlu
aXRpYWxpemVzIHRoZSBpbnNwZWN0b3IgYW5kIGxvYWRzIGFueSBgKi10ZXN0LmpzYCBoZWxwZXIg
c2NyaXB0cworLy8gaW50byB0aGUgaW5zcGVjdG9yIHBhZ2UgY29udGV4dC4KK2Z1bmN0aW9uIHJ1
blRlc3QoKQoreworICAgIC8vIERvbid0IHRyeSB0byB1c2UgdGVzdFJ1bm5lciBpZiBydW5uaW5n
IHRocm91Z2ggdGhlIGJyb3dzZXIuCisgICAgaWYgKCF3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gU2V0IHVwIHRoZSB0ZXN0IHBhZ2UgYmVmb3JlIHRoZSBsb2Fk
IGV2ZW50IGZpcmVzLgorICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRlc3RSdW5u
ZXIud2FpdFVudGlsRG9uZSgpOworCisgICAgd2luZG93LmludGVybmFscy5zZXRJbnNwZWN0b3JJ
c1VuZGVyVGVzdCh0cnVlKTsKKyAgICB0ZXN0UnVubmVyLnNob3dXZWJJbnNwZWN0b3IoKTsKKwor
ICAgIGZ1bmN0aW9uIHJ1bkluaXRpYWxpemF0aW9uTWV0aG9kc0luRnJvbnRlbmQoaW5pdGlhbGl6
ZXJzQXJyYXkpCisgICAgeworICAgICAgICBJbnNwZWN0b3JUZXN0LnRlc3RQYWdlRGlkTG9hZCgp
OworCisgICAgICAgIC8vIElmIHRoZSB0ZXN0IHBhZ2UgcmVsb2FkZWQgYnV0IHdlIHN0YXJ0ZWQg
cnVubmluZyB0aGUgdGVzdCBpbiBhIHByZXZpb3VzCisgICAgICAgIC8vIG5hdmlnYXRpb24sIHRo
ZW4gZG9uJ3QgaW5pdGlhbGl6ZSB0aGUgaW5zcGVjdG9yIGZyb250ZW5kIGFnYWluLgorICAgICAg
ICBpZiAoSW5zcGVjdG9yVGVzdC5kaWRJbmplY3RUZXN0Q29kZSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBmb3IgKHZhciBpbml0aWFsaXplciBvZiBpbml0aWFsaXplcnNBcnJheSkg
eworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpbml0aWFsaXplcigpOworICAg
ICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkV4
Y2VwdGlvbiBpbiB0ZXN0IGluaXRpYWxpemF0aW9uOiAiICsgZSwgZS5zdGFjayB8fCAiKG5vIHN0
YWNrIHRyYWNlKSIpOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5U
ZXN0TWV0aG9kSW5Gcm9udGVuZCh0ZXN0RnVuY3Rpb24pCisgICAgeworICAgICAgICBpZiAoSW5z
cGVjdG9yVGVzdC5kaWRJbmplY3RUZXN0Q29kZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBJbnNwZWN0b3JUZXN0LmRpZEluamVjdFRlc3RDb2RlID0gdHJ1ZTsKKworICAgICAgICB0
cnkgeworICAgICAgICAgICAgdGVzdEZ1bmN0aW9uKCk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkV4Y2VwdGlvbiBkdXJpbmcgdGVzdCBleGVjdXRp
b246ICIgKyBlLCBlLnN0YWNrIHx8ICIobm8gc3RhY2sgdHJhY2UpIik7CisgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdmFy
IGNvZGVTdHJpbmdUb0V2YWx1YXRlID0gIigiICsgcnVuSW5pdGlhbGl6YXRpb25NZXRob2RzSW5G
cm9udGVuZC50b1N0cmluZygpICsgIikoWyIgKyBJbnNwZWN0b3JUZXN0UHJveHkuX2luaXRpYWxp
emVycyArICJdKTsiOworICAgIHRlc3RSdW5uZXIuZXZhbHVhdGVJbldlYkluc3BlY3Rvcihjb2Rl
U3RyaW5nVG9FdmFsdWF0ZSk7CisKKyAgICAvLyBgdGVzdGAgcmVmZXJzIHRvIGEgZnVuY3Rpb24g
ZGVmaW5lZCBpbiBnbG9iYWwgc2NvcGUgaW4gdGhlIHRlc3QgSFRNTCBwYWdlLgorICAgIGNvZGVT
dHJpbmdUb0V2YWx1YXRlID0gIigiICsgcnVuVGVzdE1ldGhvZEluRnJvbnRlbmQudG9TdHJpbmco
KSArICIpKCIgKyB0ZXN0LnRvU3RyaW5nKCkgKyAiKTsiOworICAgIHRlc3RSdW5uZXIuZXZhbHVh
dGVJbldlYkluc3BlY3Rvcihjb2RlU3RyaW5nVG9FdmFsdWF0ZSk7Cit9CisKK0luc3BlY3RvclRl
c3RQcm94eS5jb21wbGV0ZVRlc3QgPSBmdW5jdGlvbigpCit7CisgICAgLy8gRG9uJ3QgdHJ5IHRv
IHVzZSB0ZXN0UnVubmVyIGlmIHJ1bm5pbmcgdGhyb3VnaCB0aGUgYnJvd3Nlci4KKyAgICBpZiAo
IXdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDbG9zZSBpbnNw
ZWN0b3IgYXN5bmNocm91c2x5IGluIGNhc2Ugd2Ugd2FudCB0byB0ZXN0IHRlYXItZG93biBiZWhh
dmlvci4KKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0UnVubmVyLmNs
b3NlV2ViSW5zcGVjdG9yKCk7CisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfSwgMCk7CisgICAgfSwg
MCk7Cit9CisKKy8vIExvZ3MgbWVzc2FnZSB0byB1bmJ1ZmZlcmVkIHByb2Nlc3Mgc3Rkb3V0LCBh
dm9pZGluZyB0aW1lb3V0cy4KKy8vIG9ubHkgYmUgdXNlZCB0byBkZWJ1ZyB0ZXN0cyBhbmQgbm90
IHRvIHByb2R1Y2Ugbm9ybWFsIHRlc3Qgb3V0cHV0LgorSW5zcGVjdG9yVGVzdFByb3h5LmRlYnVn
TG9nID0gZnVuY3Rpb24obWVzc2FnZSkKK3sKKyAgICB3aW5kb3cuYWxlcnQobWVzc2FnZSk7Cit9
CisKKy8vIEFkZCBhbmQgY2xlYXIgdGVzdCBvdXRwdXQgZnJvbSB0aGUgcmVzdWx0cyB3aW5kb3cu
CitJbnNwZWN0b3JUZXN0UHJveHkuYWRkUmVzdWx0ID0gZnVuY3Rpb24odGV4dCkKK3sKKyAgICAv
LyBGb3IgZWFybHkgZXJyb3JzIHRyaWdnZXJlZCB3aGVuIGxvYWRpbmcgdGhlIHRlc3QgcGFnZSwg
d3JpdGUgdG8gc3RkZXJyLgorICAgIGlmICghZG9jdW1lbnQuYm9keSkgeworICAgICAgICB0aGlz
LmRlYnVnTG9nKHRleHQpOworICAgICAgICB0aGlzLmNvbXBsZXRlVGVzdCgpOworICAgIH0KKwor
ICAgIGlmICghdGhpcy5fcmVzdWx0RWxlbWVudCkgeworICAgICAgICB0aGlzLl9yZXN1bHRFbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicHJlIik7CisgICAgICAgIHRoaXMuX3Jlc3Vs
dEVsZW1lbnQuaWQgPSAib3V0cHV0IjsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGls
ZCh0aGlzLl9yZXN1bHRFbGVtZW50KTsKKyAgICB9CisgICAgdGhpcy5fcmVzdWx0RWxlbWVudC5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7CisgICAgdGhpcy5fcmVz
dWx0RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKK30K
KworSW5zcGVjdG9yVGVzdFByb3h5LmNsZWFyUmVzdWx0cyA9IGZ1bmN0aW9uKCkKK3sKKyAgICBp
ZiAodGhpcy5fcmVzdWx0RWxlbWVudCkgeworICAgICAgICB0aGlzLl9yZXN1bHRFbGVtZW50LnBh
cmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fcmVzdWx0RWxlbWVudCk7CisgICAgICAgIGRlbGV0
ZSB0aGlzLl9yZXN1bHRFbGVtZW50OworICAgIH0KK30KKworSW5zcGVjdG9yVGVzdFByb3h5LnJl
cG9ydFVuY2F1Z2h0RXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2FnZSwgdXJsLCBsaW5lTnVtYmVy
KQoreworICAgIHZhciByZXN1bHQgPSAiVW5jYXVnaHQgZXhjZXB0aW9uIGluIHRlc3QgcGFnZTog
IiArIG1lc3NhZ2UgKyAiIFsiICsgdXJsICsgIjoiICsgbGluZU51bWJlciArICJdIjsKKyAgICBJ
bnNwZWN0b3JUZXN0UHJveHkuYWRkUmVzdWx0KHJlc3VsdCk7CisgICAgSW5zcGVjdG9yVGVzdFBy
b3h5LmNvbXBsZXRlVGVzdCgpOworfQorCisvLyBDYXRjaCBzeW50YXggZXJyb3JzLCB0eXBlIGVy
cm9ycywgYW5kIG90aGVyIGV4Y2VwdGlvbnMuIFJ1biB0aGlzIGJlZm9yZSBsb2FkaW5nIG90aGVy
IGZpbGVzLgord2luZG93Lm9uZXJyb3IgPSBJbnNwZWN0b3JUZXN0UHJveHkucmVwb3J0VW5jYXVn
aHRFeGNlcHRpb247CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rv
ci9yZXBsYXkvcmVwbGF5LXRlc3QuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rv
ci9yZXBsYXkvcmVwbGF5LXRlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTVjZGZjM2RlOWI0YWUwMjQ4OTMz
YzcwYjUxNDgyYzA3MTBkYmRkMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvaW5zcGVjdG9yL3JlcGxheS9yZXBsYXktdGVzdC5qcwpAQCAtMCwwICsxLDc5IEBACitJ
bnNwZWN0b3JUZXN0UHJveHkucmVnaXN0ZXJJbml0aWFsaXplcihmdW5jdGlvbigpIHsKKworSW5z
cGVjdG9yVGVzdC5SZXBsYXkgPSB7fTsKKworSW5zcGVjdG9yVGVzdC5SZXBsYXkucnVuU2luZ2xl
U2VnbWVudFJlZlRlc3QgPSBmdW5jdGlvbihzdGF0ZUNvbXBhcmF0b3IpCit7CisgICAgdmFyIHN0
YXRlRHVyaW5nQ2FwdHVyaW5nID0gbnVsbDsKKyAgICB2YXIgc3RhdGVEdXJpbmdSZXBsYXlpbmcg
PSBudWxsOworCisgICAgdmFyIGlnbm9yZUNhY2hlT25SZWxvYWQgPSB0cnVlOworICAgIEluc3Bl
Y3RvclRlc3QucmVsb2FkUGFnZShpZ25vcmVDYWNoZU9uUmVsb2FkKQorICAgIC50aGVuKGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gd2FpdEZvck1haW5S
ZXNvdXJjZUJlZm9yZVN0YXJ0aW5nKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5ldmVudERpc3BhdGNoZXIuYWRkRXZlbnRMaXN0ZW5lcihJbnNwZWN0b3JUZXN0
LkV2ZW50RGlzcGF0Y2hlci5FdmVudC5UZXN0UGFnZURpZExvYWQsIHJlc29sdmUpOworICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIldhaXRpbmcgZm9yIHRlc3QgcGFnZSB0byBmaW5pc2gg
aXRzIGluaXRpYWwgbG9hZC4uLiIpOworICAgICAgICB9KTsKKyAgICB9KQorICAgIC50aGVuKGZ1
bmN0aW9uKCkgeworICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiVGVzdCBwYWdlIGluaXRpYWwg
bG9hZCBkb25lLiIpOworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gc3RhcnRD
YXB0dXJpbmcocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0Lmxv
ZygiV2FpdGluZyBmb3IgY2FwdHVyaW5nIHRvIHN0YXJ0Li4uIik7CisgICAgICAgICAgICBXZWJJ
bnNwZWN0b3IucmVwbGF5TWFuYWdlci5zdGFydENhcHR1cmluZygpOworICAgICAgICAgICAgV2Vi
SW5zcGVjdG9yLnJlcGxheU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVw
bGF5TWFuYWdlci5FdmVudC5DYXB0dXJlU3RhcnRlZCwgcmVzb2x2ZSk7CisgICAgICAgIH0pOwor
ICAgIH0pCisgICAgLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIEluc3BlY3RvclRlc3QubG9n
KCJDYXB0dXJpbmcgaGFzIHN0YXJ0ZWQuIik7CisgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShm
dW5jdGlvbiB3YWl0VG9DYXB0dXJlSW5pdGlhbE5hdmlnYXRpb24ocmVzb2x2ZSwgcmVqZWN0KSB7
CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiV2FpdGluZyB0byBjYXB0dXJlIGluaXRp
YWwgbmF2aWdhdGlvbi4uLiIpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5ldmVudERpc3Bh
dGNoZXIuYWRkRXZlbnRMaXN0ZW5lcihJbnNwZWN0b3JUZXN0LkV2ZW50RGlzcGF0Y2hlci5FdmVu
dC5UZXN0UGFnZURpZExvYWQsIHJlc29sdmUpOworICAgICAgICB9KTsKKyAgICB9KQorICAgIC50
aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiSW5pdGlhbCBuYXZp
Z2F0aW9uIGNhcHR1cmVkLiBEdW1waW5nIHN0YXRlLi4uLiIpOworICAgICAgICByZXR1cm4gUnVu
dGltZUFnZW50LmV2YWx1YXRlLnByb21pc2UoImR1bXBOb25kZXRlcm1pbmlzdGljU3RhdGUoKSIp
OworICAgIH0pCisgICAgLnRoZW4oZnVuY3Rpb24ocGF5bG9hZCkgeworICAgICAgICBzdGF0ZUR1
cmluZ0NhcHR1cmluZyA9IHBheWxvYWQudmFsdWU7CisgICAgICAgIHJldHVybiBuZXcgUHJvbWlz
ZShmdW5jdGlvbiBzdG9wQ2FwdHVyaW5nKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLnJlcGxheU1hbmFnZXIuc3RvcENhcHR1cmluZygpOworICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLnJlcGxheU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
UmVwbGF5TWFuYWdlci5FdmVudC5DYXB0dXJlU3RvcHBlZCwgcmVzb2x2ZSk7CisgICAgICAgIH0p
OworICAgIH0pCisgICAgLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIEluc3BlY3RvclRlc3Qu
bG9nKCJDYXB0dXJlIHN0b3BwZWQsIG5vdyBzdGFydGluZyByZXBsYXkgdG8gY29tcGxldGlvbi4u
LiIpCisgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBzdGFydFBsYXliYWNrKHJl
c29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnJlcGxheU1hbmFnZXIu
cmVwbGF5VG9Db21wbGV0aW9uKCk7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IucmVwbGF5TWFu
YWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLkV2ZW50LlBs
YXliYWNrU3RhcnRlZCwgcmVzb2x2ZSk7CisgICAgICAgIH0pOworICAgIH0pCisgICAgLnRoZW4o
ZnVuY3Rpb24oKSB7CisgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJQbGF5YmFjayBoYXMgc3Rh
cnRlZC4iKTsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHdhaXRGb3JNYWlu
UmVzb3VyY2VXaGVuUmVwbGF5aW5nKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5sb2coIldhaXRpbmcgdG8gcmVwbGF5IGluaXRpYWwgbmF2aWdhdGlvbi4uLiIp
OworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5ldmVudERpc3BhdGNoZXIuYWRkRXZlbnRMaXN0
ZW5lcihJbnNwZWN0b3JUZXN0LkV2ZW50RGlzcGF0Y2hlci5FdmVudC5UZXN0UGFnZURpZExvYWQs
IHJlc29sdmUpOworICAgICAgICB9KTsKKyAgICB9KQorICAgIC50aGVuKGZ1bmN0aW9uKCkgewor
ICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiSW5pdGlhbCBuYXZpZ2F0aW9uIHJlcGxheWVkLiBE
dW1waW5nIHN0YXRlLi4uIik7CisgICAgICAgIHJldHVybiBSdW50aW1lQWdlbnQuZXZhbHVhdGUu
cHJvbWlzZSgiZHVtcE5vbmRldGVybWluaXN0aWNTdGF0ZSgpIik7CisgICAgfSkKKyAgICAudGhl
bihmdW5jdGlvbihwYXlsb2FkKSB7CisgICAgICAgIHN0YXRlRHVyaW5nUmVwbGF5aW5nID0gcGF5
bG9hZC52YWx1ZTsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHdhaXRGb3JS
ZXBsYXlpbmdUb0ZpbmlzaChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5yZXBsYXlNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlJlcGxheU1h
bmFnZXIuRXZlbnQuUGxheWJhY2tGaW5pc2hlZCwgcmVzb2x2ZSk7CisgICAgICAgIH0pOworICAg
IH0pCisgICAgLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzdGF0ZXNFcXVhbCA9IHN0
YXRlRHVyaW5nQ2FwdHVyaW5nID09PSBzdGF0ZUR1cmluZ1JlcGxheWluZzsKKyAgICAgICAgSW5z
cGVjdG9yVGVzdC5leHBlY3RUaGF0KHN0YXRlc0VxdWFsLCAiTm9uZGV0ZXJtaW5pc3RpYyBzdGF0
ZSBzaG91bGQgbm90IGRpZmZlciBkdXJpbmcgY2FwdHVyZSBhbmQgcmVwbGF5LiIpOworICAgICAg
ICBpZiAoIXN0YXRlc0VxdWFsKSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiU3Rh
dGUgZHVyaW5nIGNhcHR1cmluZzogIiArIHN0YXRlRHVyaW5nQ2FwdHVyaW5nKTsKKyAgICAgICAg
ICAgIEluc3BlY3RvclRlc3QubG9nKCJTdGF0ZSBkdXJpbmcgcmVwbGF5aW5nOiAiICsgc3RhdGVE
dXJpbmdSZXBsYXlpbmcpOworICAgICAgICB9CisgICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxl
dGVUZXN0KCk7CisgICAgfSk7Cit9OworCit9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvZGVidWdnZXItdGVz
dC5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9kZWJ1Z2dlci10ZXN0LmpzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTAyNTU4NzBhMTk1NjFkNzk2ZWY4OGYyZDg1
OTYwMDkwMzRlMjRhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9kZWJ1Z2dlci10ZXN0LmpzCisrKyAv
ZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLUluc3BlY3RvclRlc3RQcm94eS5yZWdpc3Rlcklu
aXRpYWxpemVyKGZ1bmN0aW9uKCkgewotCi1JbnNwZWN0b3JUZXN0LnN0YXJ0VHJhY2luZ0JyZWFr
cG9pbnRzID0gZnVuY3Rpb24oKQotewotICAgIGlmICghV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFu
YWdlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdl
ci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQnJl
YWtwb2ludEFkZGVkLCBmdW5jdGlvbihldmVudCkgewotICAgICAgICBJbnNwZWN0b3JUZXN0Lmxv
ZygiQnJlYWtwb2ludCB3YXMgYWRkZWQuIik7Ci0gICAgfSk7Ci0KLSAgICBXZWJJbnNwZWN0b3Iu
ZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFu
YWdlci5FdmVudC5CcmVha3BvaW50UmVtb3ZlZCwgZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAg
SW5zcGVjdG9yVGVzdC5sb2coIkJyZWFrcG9pbnQgd2FzIHJlbW92ZWQuIik7Ci0gICAgfSk7Ci0K
LSAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50LkV2ZW50LkRpc2FibGVkU3RhdGVEaWRDaGFuZ2UsIGZ1bmN0aW9uKGV2ZW50
KSB7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQudGFyZ2V0OwotICAgICAgICBjb25z
b2xlLmFzc2VydChicmVha3BvaW50IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQs
ICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOwotCi0gICAgICAgIEluc3BlY3RvclRlc3QubG9n
KCJCcmVha3BvaW50IGRpc2FibGVkIHN0YXRlIGNoYW5nZWQ6ICIgKyBicmVha3BvaW50LmRpc2Fi
bGVkKTsKLSAgICB9KTsKLQotICAgIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuRXZlbnQuUmVzb2x2ZWRTdGF0ZURpZENoYW5n
ZSwgZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC50YXJn
ZXQ7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KGJyZWFrcG9pbnQgaW5zdGFuY2VvZiBXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludCwgIlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7Ci0KLSAgICAgICAg
SW5zcGVjdG9yVGVzdC5sb2coIkJyZWFrcG9pbnQgcmVzb2x2ZWQgc3RhdGUgY2hhbmdlZDogIiAr
IGJyZWFrcG9pbnQucmVzb2x2ZWQpOwotICAgIH0pOwotCi0gICAgV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5BdXRv
Q29udGludWVEaWRDaGFuZ2UsIGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgIHZhciBicmVha3Bv
aW50ID0gZXZlbnQudGFyZ2V0OwotICAgICAgICBjb25zb2xlLmFzc2VydChicmVha3BvaW50IGlu
c3RhbmNlb2YgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBl
ISIpOwotCi0gICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJCcmVha3BvaW50IGF1dG9jb250aW51
ZSBzdGF0ZSBjaGFuZ2VkOiAiICsgYnJlYWtwb2ludC5hdXRvQ29udGludWUpOwotICAgIH0pOwot
Ci0gICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludC5FdmVudC5Db25kaXRpb25EaWRDaGFuZ2UsIGZ1bmN0aW9uKGV2ZW50KSB7
Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQudGFyZ2V0OwotICAgICAgICBjb25zb2xl
LmFzc2VydChicmVha3BvaW50IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQsICJV
bmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOwotCi0gICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJC
cmVha3BvaW50IGNvbmRpdGlvbiBjaGFuZ2VkOiAiICsgYnJlYWtwb2ludC5jb25kaXRpb24pOwot
ICAgIH0pOwotCi0gICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5BY3Rpb25zRGlkQ2hhbmdlLCBmdW5jdGlvbihl
dmVudCkgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LnRhcmdldDsKLSAgICAgICAg
Y29uc29sZS5hc3NlcnQoYnJlYWtwb2ludCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50LCAiVW5leHBlY3RlZCBvYmplY3QgdHlwZSEiKTsKLQotICAgICAgICBJbnNwZWN0b3JUZXN0
LmxvZygiQnJlYWtwb2ludCBhY3Rpb25zIGNoYW5nZWQuIE5ldyBjb3VudDogIiArIGJyZWFrcG9p
bnQuYWN0aW9ucy5sZW5ndGgpOwotICAgIH0pOwotfQotCi1JbnNwZWN0b3JUZXN0LnN0YXJ0VHJh
Y2luZ1Byb2JlcyA9IGZ1bmN0aW9uKCkKLXsKLSAgICBpZiAoIVdlYkluc3BlY3Rvci5wcm9iZU1h
bmFnZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkluc3BlY3Rvci5wcm9iZU1hbmFnZXIu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUHJvYmVNYW5hZ2VyLkV2ZW50LlByb2JlU2V0
QWRkZWQsIGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgIHZhciBwcm9iZVNldCA9IGV2ZW50LmRh
dGEucHJvYmVTZXQ7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHByb2JlU2V0IGluc3RhbmNlb2Yg
V2ViSW5zcGVjdG9yLlByb2JlU2V0LCAiVW5leHBlY3RlZCBvYmplY3QgdHlwZSEiKTsKLQotICAg
ICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUHJvYmUgc2V0IHdhcyBhZGRlZC4gTmV3IGNvdW50OiAi
ICsgV2ViSW5zcGVjdG9yLnByb2JlTWFuYWdlci5wcm9iZVNldHMubGVuZ3RoKTsKLSAgICB9KTsK
LQotICAgIFdlYkluc3BlY3Rvci5wcm9iZU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNw
ZWN0b3IuUHJvYmVNYW5hZ2VyLkV2ZW50LlByb2JlU2V0UmVtb3ZlZCwgZnVuY3Rpb24oZXZlbnQp
IHsKLSAgICAgICAgdmFyIHByb2JlU2V0ID0gZXZlbnQuZGF0YS5wcm9iZVNldDsKLSAgICAgICAg
Y29uc29sZS5hc3NlcnQocHJvYmVTZXQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUHJvYmVTZXQs
ICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOwotCi0gICAgICAgIEluc3BlY3RvclRlc3QubG9n
KCJQcm9iZSBzZXQgd2FzIHJlbW92ZWQuIE5ldyBjb3VudDogIiArIFdlYkluc3BlY3Rvci5wcm9i
ZU1hbmFnZXIucHJvYmVTZXRzLmxlbmd0aCk7Ci0gICAgfSk7Ci0KLSAgICBXZWJJbnNwZWN0b3Iu
UHJvYmUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUHJvYmUuRXZlbnQuRXhwcmVzc2lv
bkNoYW5nZWQsIGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgIHZhciBwcm9iZSA9IGV2ZW50LnRh
cmdldDsKLSAgICAgICAgY29uc29sZS5hc3NlcnQocHJvYmUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0
b3IuUHJvYmUsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOwotCi0gICAgICAgIEluc3BlY3Rv
clRlc3QubG9nKCJQcm9iZSB3aXRoIGlkZW50aWZpZXIgIiArIHByb2JlLmlkICsgIiBjaGFuZ2Vk
IGV4cHJlc3Npb246ICIgKyBwcm9iZS5leHByZXNzaW9uKTsKLSAgICB9KTsKLQotICAgIFdlYklu
c3BlY3Rvci5Qcm9iZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Qcm9iZS5FdmVudC5T
YW1wbGVBZGRlZCwgZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAgdmFyIHByb2JlID0gZXZlbnQu
dGFyZ2V0OwotICAgICAgICB2YXIgc2FtcGxlID0gZXZlbnQuZGF0YTsKLSAgICAgICAgY29uc29s
ZS5hc3NlcnQocHJvYmUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUHJvYmUsICJVbmV4cGVjdGVk
IG9iamVjdCB0eXBlISIpOwotICAgICAgICBjb25zb2xlLmFzc2VydChzYW1wbGUgaW5zdGFuY2Vv
ZiBXZWJJbnNwZWN0b3IuUHJvYmVTYW1wbGUsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOwot
Ci0gICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJQcm9iZSB3aXRoIGlkZW50aWZpZXIgIiArIHBy
b2JlLmlkICsgIiBhZGRlZCBzYW1wbGU6ICIgKyBzYW1wbGUpOwotICAgIH0pOwotCi0gICAgV2Vi
SW5zcGVjdG9yLlByb2JlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlByb2JlLkV2ZW50
LlNhbXBsZXNDbGVhcmVkLCBmdW5jdGlvbihldmVudCkgewotICAgICAgICB2YXIgcHJvYmUgPSBl
dmVudC50YXJnZXQ7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHByb2JlIGluc3RhbmNlb2YgV2Vi
SW5zcGVjdG9yLlByb2JlLCAiVW5leHBlY3RlZCBvYmplY3QgdHlwZSEiKTsKLQotICAgICAgICBJ
bnNwZWN0b3JUZXN0LmxvZygiUHJvYmUgd2l0aCBpZGVudGlmaWVyICIgKyBwcm9iZS5pZCArICIg
Y2xlYXJlZCBhbGwgc2FtcGxlcy4iKTsKLSAgICB9KTsKLQotICAgIFdlYkluc3BlY3Rvci5Qcm9i
ZVNldC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Qcm9iZVNldC5FdmVudC5Qcm9iZUFk
ZGVkLCBmdW5jdGlvbihldmVudCkgewotICAgICAgICB2YXIgcHJvYmUgPSBldmVudC5kYXRhOwot
ICAgICAgICB2YXIgcHJvYmVTZXQgPSBldmVudC50YXJnZXQ7Ci0gICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KHByb2JlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlByb2JlLCAiVW5leHBlY3RlZCBvYmpl
Y3QgdHlwZSEiKTsKLSAgICAgICAgY29uc29sZS5hc3NlcnQocHJvYmVTZXQgaW5zdGFuY2VvZiBX
ZWJJbnNwZWN0b3IuUHJvYmVTZXQsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOwotCi0gICAg
ICAgIEluc3BlY3RvclRlc3QubG9nKCJQcm9iZSB3aXRoIGlkZW50aWZpZXIgIiArIHByb2JlLmlk
ICsgIiB3YXMgYWRkZWQgdG8gcHJvYmUgc2V0LiIpOwotICAgICAgICBJbnNwZWN0b3JUZXN0Lmxv
ZygiUHJvYmUgc2V0J3MgcHJvYmUgY291bnQ6ICIgKyBwcm9iZVNldC5wcm9iZXMubGVuZ3RoKTsK
LSAgICB9KTsKLQotICAgIFdlYkluc3BlY3Rvci5Qcm9iZVNldC5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5Qcm9iZVNldC5FdmVudC5Qcm9iZVJlbW92ZWQsIGZ1bmN0aW9uKGV2ZW50KSB7
Ci0gICAgICAgIHZhciBwcm9iZSA9IGV2ZW50LmRhdGE7Ci0gICAgICAgIHZhciBwcm9iZVNldCA9
IGV2ZW50LnRhcmdldDsKLSAgICAgICAgY29uc29sZS5hc3NlcnQocHJvYmUgaW5zdGFuY2VvZiBX
ZWJJbnNwZWN0b3IuUHJvYmUsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOwotICAgICAgICBj
b25zb2xlLmFzc2VydChwcm9iZVNldCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Qcm9iZVNldCwg
IlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7Ci0KLSAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2co
IlByb2JlIHdpdGggaWRlbnRpZmllciAiICsgcHJvYmUuaWQgKyAiIHdhcyByZW1vdmVkIGZyb20g
cHJvYmUgc2V0LiIpOwotICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUHJvYmUgc2V0J3MgcHJv
YmUgY291bnQ6ICIgKyBwcm9iZVNldC5wcm9iZXMubGVuZ3RoKTsKLSAgICB9KTsKLX0KLQotfSk7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvcHJvYmUtbWFuYWdl
ci1hZGQtcmVtb3ZlLWFjdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dl
ci9wcm9iZS1tYW5hZ2VyLWFkZC1yZW1vdmUtYWN0aW9ucy5odG1sCmluZGV4IGY2Mzg5YTk4MDU4
N2Q2ODY2OGU4YjlhZTFhMjM3MWQ5MGFhNzYyMTcuLjVjYjA1NzVmMDY5M2EwMjdhYzAzNDE1ZjA5
NDdjYzQyMGRjMTU3YzEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dl
ci9wcm9iZS1tYW5hZ2VyLWFkZC1yZW1vdmUtYWN0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9kZWJ1Z2dlci9wcm9iZS1tYW5hZ2VyLWFkZC1yZW1vdmUtYWN0aW9ucy5odG1s
CkBAIC0xLDggKzEsOCBAQAogPCFkb2N0eXBlIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgotPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vaW5zcGVjdG9yLXRlc3QuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9kZWJ1Z2dlci10ZXN0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4u
L2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9y
L2RlYnVnZ2VyL2RlYnVnZ2VyLXRlc3QuanMiPjwvc2NyaXB0PgogPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iLi9yZXNvdXJjZXMvYnJlYWtwb2ludC5qcyI+PC9zY3JpcHQ+CiA8
c2NyaXB0PgogZnVuY3Rpb24gdGVzdCgpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvZG9tL2NvbnRlbnQtZmxvdy1jb250ZW50LW5vZGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvZG9tL2NvbnRlbnQtZmxvdy1jb250ZW50LW5vZGVzLmh0bWwKaW5kZXggZmMyMTM2MGNm
NjFmNzQyZGU1MjliM2UxNTZkMWE4OGU0OTU0Mjg0NS4uYWJjMjdjZDliNDRkY2Q0NjJmMDhkNjQw
YmU0NTRmNzc0YjE5NDRmNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9j
b250ZW50LWZsb3ctY29udGVudC1ub2Rlcy5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9kb20vY29udGVudC1mbG93LWNvbnRlbnQtbm9kZXMuaHRtbApAQCAtMTEsNyArMTEsNyBAQAog
ICAgIC13ZWJraXQtZmxvdy1pbnRvOiBub25lOwogfQogPC9zdHlsZT4KLTxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVj
dG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+CiBmdW5jdGlvbiBjaGFu
Z2VGbG93Q29udGVudCgpCiB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9t
L2NvbnRlbnQtZmxvdy1jb250ZW50LXJlbW92YWwuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9kb20vY29udGVudC1mbG93LWNvbnRlbnQtcmVtb3ZhbC5odG1sCmluZGV4IDg0Y2UxMzAyYjhh
Yjc5MWRlZDUxYjhmMTE4ODk5ZWU0NWQyYmY1ZTEuLjE1ZWNiNWJhOWZkNjM0M2Q0ZGE0NTc1Njgz
ODlmOTY1ZTRlNTY4MjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kb20vY29u
dGVudC1mbG93LWNvbnRlbnQtcmVtb3ZhbC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9kb20vY29udGVudC1mbG93LWNvbnRlbnQtcmVtb3ZhbC5odG1sCkBAIC03LDcgKzcsNyBAQAog
ICAgIC13ZWJraXQtZmxvdy1pbnRvOiBmbG93OwogfQogPC9zdHlsZT4KLTxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVj
dG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+CiBmdW5jdGlvbiBjaGFu
Z2VGbG93Q29udGVudCgpCiB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9t
L2NvbnRlbnQtZmxvdy1saXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9tL2NvbnRl
bnQtZmxvdy1saXN0Lmh0bWwKaW5kZXggN2I2ODdmODhjMGMxMDc1NmE1YzBiNjRiNDA3ZTdkY2Y3
ZWZlZTc3NC4uMzZmZTkyZTNmNzU4YTdhZTg3ZDhhOWFiYzJlZjRjNTA1OTdhNTAwNSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9jb250ZW50LWZsb3ctbGlzdC5odG1sCisr
KyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kb20vY29udGVudC1mbG93LWxpc3QuaHRtbApAQCAt
Nyw3ICs3LDcgQEAKICAgICAtd2Via2l0LWZsb3ctaW50bzogZmxvdzE7CiB9CiA8L3N0eWxlPgot
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vaW5zcGVjdG9yLXRlc3QuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vaHR0
cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4K
IGZ1bmN0aW9uIHJlbW92ZUZsb3coKQogewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2RvbS9jb250ZW50LW5vZGUtcmVnaW9uLWluZm8uaHRtbCBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9kb20vY29udGVudC1ub2RlLXJlZ2lvbi1pbmZvLmh0bWwKaW5kZXggMDc5NGEyZWMyZGJj
OTNkYzA1YzgyZTUyZjJmYzVlN2U2NjVjYzU5OS4uN2IwZDUyNWQwNTk5NzU2NDk0YWJhMTAwNDRm
ODc3YjYyZWQ4NWI5MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9jb250
ZW50LW5vZGUtcmVnaW9uLWluZm8uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9t
L2NvbnRlbnQtbm9kZS1yZWdpb24taW5mby5odG1sCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgaGVp
Z2h0OiAxMDBweDsKIH0KIDwvc3R5bGU+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSIuLi9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVz
dC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgogZnVuY3Rpb24gdGVzdCgpCiB7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9tL2hpZ2hsaWdodC1zaGFwZS1vdXRzaWRlLW1hcmdp
bi5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9oaWdobGlnaHQtc2hhcGUtb3V0c2lk
ZS1tYXJnaW4uaHRtbAppbmRleCA0OGI0ZGRiNzg0NTMwMzMyMzE0NmE1MjVjZWE1NzYwNGU2YmE0
Y2NkLi5kNWE1Y2VhNTc1ZGUwZjljNmRmNzY1YTVlMDI2OTkwZDgwNmM5Mjk5IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9tL2hpZ2hsaWdodC1zaGFwZS1vdXRzaWRlLW1hcmdp
bi5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kb20vaGlnaGxpZ2h0LXNoYXBlLW91
dHNpZGUtbWFyZ2luLmh0bWwKQEAgLTI0LDggKzI0LDggQEAgYm9keSB7CiAgICAgLXdlYmtpdC1z
aGFwZS1tYXJnaW46IDFweDsKIH0KIDwvc3R5bGU+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSIuLi9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSIuL3NoYXBlcy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9y
L2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RvbS9zaGFwZXMtdGVzdC5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0PgogZnVuY3Rpb24gdGVzdCgpIHsKICAgICB2YXIgdGVzdGNhc2Vz
ID0gWwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9oaWdobGlnaHQtc2hh
cGUtb3V0c2lkZS5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9oaWdobGlnaHQtc2hh
cGUtb3V0c2lkZS5odG1sCmluZGV4IGYxZjEwYzBkYzNkMjkwOTA4N2VlNDMzZTljZjgyNTI3MWFl
YzJmYWMuLmRlODE2NjlhYTZiZDE1Nzg2MWY1MjI5MjI2YmExZDkwY2VmOWU3MTMgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kb20vaGlnaGxpZ2h0LXNoYXBlLW91dHNpZGUuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9tL2hpZ2hsaWdodC1zaGFwZS1vdXRzaWRl
Lmh0bWwKQEAgLTUyLDggKzUyLDggQEAgYm9keSB7CiAgICAtd2Via2l0LXNoYXBlLW91dHNpZGU6
IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFHUUFB
QUJrQ0FNQUFBQkhQR1ZtQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlX
UjVjY2xsUEFBQUFBWlFURlJGQUFELy8vLy9lOXlaTEFBQUFBSjBVazVUL3dEbHR6QktBQUFBU1Vs
RVFWUjQydXpZc1EwQU1BZ0VzV2YvcFRNREJVUkl2Z1hjWDJxaFFDQVFDQVFDZ1VBK0kya0hnVUFn
RUFnRUFvRkFJQkFJQkFLQlFPWVJveE1DZ1VBZ0VBamtIUElFR0FBMmloMU5WbmFER2dBQUFBQkpS
VTVFcmtKZ2dnPT0iKTsKIH0KIDwvc3R5bGU+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSIuLi9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSIuL3NoYXBlcy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2lu
c3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RvbS9zaGFwZXMtdGVzdC5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0PgogZnVuY3Rpb24gdGVzdCgpIHsKICAgICB2YXIgdGVzdGNhc2VzID0g
WwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9zaGFwZXMtdGVzdC5qcyBi
L0xheW91dFRlc3RzL2luc3BlY3Rvci9kb20vc2hhcGVzLXRlc3QuanMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDIzYzU2OTU2NDBiMGZiZmY2ZGJkY2VhMDY2NzFmNTNiZmY3Y2E1OTYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2RvbS9zaGFwZXMtdGVzdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDkxICsw
LDAgQEAKLUluc3BlY3RvclRlc3RQcm94eS5yZWdpc3RlckluaXRpYWxpemVyKGZ1bmN0aW9uKCkg
ewotCi1JbnNwZWN0b3JUZXN0LlNoYXBlcyA9IHsKLSAgICBnZXRTaGFwZU91dHNpZGVJbmZvRm9y
U2VsZWN0b3I6IGZ1bmN0aW9uKHNlbGVjdG9yLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIFdl
Ykluc3BlY3Rvci5kb21UcmVlTWFuYWdlci5yZXF1ZXN0RG9jdW1lbnQocmVxdWVzdERvY3VtZW50
Q2FsbGJhY2spOwotCi0gICAgICAgIGZ1bmN0aW9uIHJlcXVlc3REb2N1bWVudENhbGxiYWNrKG5v
ZGUpIHsKLSAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUgaW5zdGFuY2VvZiBX
ZWJJbnNwZWN0b3IuRE9NTm9kZSwgIlVuZXhwZWN0ZWQgYXJndW1lbnQgdG8gcmVxdWVzdERvY3Vt
ZW50IGNhbGxiYWNrLiIpCi0gICAgICAgICAgICBET01BZ2VudC5xdWVyeVNlbGVjdG9yLmludm9r
ZSh7bm9kZUlkOiBub2RlLmlkLCBzZWxlY3Rvcjogc2VsZWN0b3J9LCBxdWVyeVNlbGVjdG9yQ2Fs
bGJhY2spOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gcXVlcnlTZWxlY3RvckNhbGxi
YWNrKGVycm9yLCBub2RlSWQpIHsKLSAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KCFl
cnJvciwgIkVycm9yIGluIGNhbGxiYWNrIGZvciBET01BZ2VudC5xdWVyeVNlbGVjdG9yIik7Ci0g
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlSWQsICJJbnZhbGlkIGFyZ3VtZW50
IHRvIGNhbGxiYWNrIGZvciBET01BZ2VudC5xdWVyeVNlbGVjdG9yIik7Ci0KLSAgICAgICAgICAg
IHZhciBoaWdobGlnaHRDb25maWcgPSB7Ci0gICAgICAgICAgICAgICAgc2hvd0luZm86IHRydWUs
Ci0gICAgICAgICAgICAgICAgY29udGVudENvbG9yOiB7cjogMjU1LCBnOiAyNTUsIGI6IDI1NX0s
Ci0gICAgICAgICAgICAgICAgcGFkZGluZ0NvbG9yOiB7cjogMjU1LCBnOiAyNTUsIGI6IDI1NX0s
Ci0gICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IHtyOiAyNTUsIGc6IDI1NSwgYjogMjU1fSwK
LSAgICAgICAgICAgICAgICBtYXJnaW5Db2xvcjoge3I6IDI1NSwgZzogMjU1LCBiOiAyNTV9LAot
ICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIERPTUFnZW50LmhpZ2hsaWdodE5vZGUuaW52b2tl
KHtub2RlSWQ6IG5vZGVJZCwgaGlnaGxpZ2h0Q29uZmlnOiBoaWdobGlnaHRDb25maWd9LCBoaWdo
bGlnaHROb2RlQ2FsbGJhY2spOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gaGlnaGxp
Z2h0Tm9kZUNhbGxiYWNrKGVycm9yKSB7Ci0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2Vy
dCghZXJyb3IsICJFcnJvciBpbiBjYWxsYmFjayBmb3IgRE9NQWdlbnQuaGlnaGxpZ2h0Tm9kZSIp
OwotCi0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdlKCJ3aW5kb3cuaW50
ZXJuYWxzLmluc3BlY3RvckhpZ2hsaWdodE9iamVjdCgpIiwgcmVjZWl2ZWRIaWdobGlnaHRPYmpl
Y3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gcmVjZWl2ZWRIaWdobGlnaHRPYmpl
Y3QoZXJyb3IsIHBheWxvYWQsIHdhc1Rocm93bikgewotICAgICAgICAgICAgY29uc29sZS5hc3Nl
cnQoIWVycm9yLCAiV2hlbiBldmFsdWF0aW5nIGNvZGUsIHJlY2VpdmVkIHVuZXhwZWN0ZWQgZXJy
b3I6IiArIGVycm9yKTsKLSAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCFlcnJvciwgIldoZW4g
ZXZhbHVhdGluZyBjb2RlLCBhbiBleGNlcHRpb24gd2FzIHRocm93bjoiICsgd2FzVGhyb3duKTsK
LQotICAgICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKHBheWxvYWQudmFsdWUpOwotICAg
ICAgICAgICAgY2FsbGJhY2soZGF0YS5lbGVtZW50SW5mby5zaGFwZU91dHNpZGVJbmZvKTsKLSAg
ICAgICAgfQotICAgIH0sCi0KLSAgICBhc3NlcnRQYXRoc0FyZVJvdWdobHlFcXVhbDogZnVuY3Rp
b24oYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGNv
b3JkaW5hdGVzQXJlUm91Z2hseUVxdWFsKGEsIGIpIHsKLSAgICAgICAgICAgIC8vIFNvbWUgcGxh
dGZvcm1zIG1heSBvbmx5IHN0b3JlIGludGVnZXIgcGF0aCBwb2ludHMsIHNvIHRoZSBwb3RlbnRp
YWwKLSAgICAgICAgICAgIC8vIGRpZmZlcmVuY2VzIGJldHdlZW4gY29ycmVjdCBwYXRocyBjYW4g
YmUgcm91Z2hseSBoYWxmIGEgdW5pdC4KLSAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0g
Im51bWJlciIgJiYgdHlwZW9mIGIgPT09ICJudW1iZXIiICYmIE1hdGguYWJzKGEgLSBiKSA8IDAu
NTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHBhdGhzQXJlUm91Z2hseUVxdWFsKGFj
dHVhbFBhdGgsIGV4cGVjdGVkUGF0aCkgewotICAgICAgICAgICAgdmFyIGV4cGVjdGVkU3VicGF0
aFN0YXJ0ID0gMCwgZWksIGFpOwotICAgICAgICAgICAgZm9yICh2YXIgZWkgPSAwLCBhaSA9IDA7
IGFpIDwgYWN0dWFsUGF0aC5sZW5ndGggJiYgZWkgPCBleHBlY3RlZFBhdGgubGVuZ3RoOyBhaSsr
LCBlaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkUGF0aFtlaV0gPT09ICdNJykK
LSAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRTdWJwYXRoU3RhcnQgPSBlaTsKLQotICAgICAg
ICAgICAgICAgIGlmIChhY3R1YWxQYXRoW2FpXSA9PT0gZXhwZWN0ZWRQYXRoW2VpXQotICAgICAg
ICAgICAgICAgICAgICB8fCBjb29yZGluYXRlc0FyZVJvdWdobHlFcXVhbChhY3R1YWxQYXRoW2Fp
XSwgZXhwZWN0ZWRQYXRoW2VpXSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICAgICAgLy8gRXh0cmFwb2xhdGUgdGhlIG1pc3NpbmcgbGluZSB0byBjb21tYW5k
IGlmIGl0IGlzIG1pc3NpbmcgZnJvbSBhY3R1YWwuCi0gICAgICAgICAgICAgICAgLy8gVGhlIGNo
b2ljZSB0byBjbG9zZSB0aGUgcGF0aCB3aXRoIGFuIGV4cGxpY2l0IGxpbmUgdG8gY29tbWFuZCBp
cwotICAgICAgICAgICAgICAgIC8vIHBsYXRmb3JtIGRlcGVuZGVudC4KLSAgICAgICAgICAgICAg
ICBpZiAoYWN0dWFsUGF0aFthaV0gPT09ICdaJwotICAgICAgICAgICAgICAgICAgICAmJiBleHBl
Y3RlZFBhdGhbZWldID09PSAnTCcKLSAgICAgICAgICAgICAgICAgICAgJiYgY29vcmRpbmF0ZXNB
cmVSb3VnaGx5RXF1YWwoZXhwZWN0ZWRQYXRoW2V4cGVjdGVkU3VicGF0aFN0YXJ0ICsgMV0sIGV4
cGVjdGVkUGF0aFtlaSArIDFdKQotICAgICAgICAgICAgICAgICAgICAmJiBjb29yZGluYXRlc0Fy
ZVJvdWdobHlFcXVhbChleHBlY3RlZFBhdGhbZXhwZWN0ZWRTdWJwYXRoU3RhcnQgKyAyXSwgZXhw
ZWN0ZWRQYXRoW2VpICsgMl0pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVpICs9IDI7Ci0gICAg
ICAgICAgICAgICAgICAgIGFpLS07Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0
aW9uIG1ha2VTdHJpbmdGb3JQYXRoKHBhdGgpIHsKLSAgICAgICAgICAgIHJldHVybiBwYXRoLm1h
cChmdW5jdGlvbihpdGVtKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAn
bnVtYmVyJykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICtpdGVtLnRvRml4ZWQoMik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07Ci0gICAgICAgICAgICB9KS5qb2luKCcgJyk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2YXIgZXhwZWN0ZWRQYXRoU3RyaW5nID0gbWFrZVN0cmluZ0Zv
clBhdGgoZXhwZWN0ZWQpOwotICAgICAgICB2YXIgYWN0dWFsUGF0aFN0cmluZyA9IG1ha2VTdHJp
bmdGb3JQYXRoKGFjdHVhbCk7Ci0gICAgICAgIHZhciBhc3NlcnRpb25NZXNzYWdlID0gbWVzc2Fn
ZSArICIgXG5FWFBFQ1RFRDogIiArIGV4cGVjdGVkUGF0aFN0cmluZyArICJcbiAgQUNUVUFMOiAi
ICsgYWN0dWFsUGF0aFN0cmluZzsKLSAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQocGF0aHNB
cmVSb3VnaGx5RXF1YWwoYWN0dWFsLCBleHBlY3RlZCksIGFzc2VydGlvbk1lc3NhZ2UpOwotICAg
IH0KLX0KLQotfSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9y
LXRlc3QuanMgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMjk5ZWJjOWMxN2YzZGY4OGFlZWZkM2ZkYTNhMDE5
Y2JmZDg4M2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzCisrKyAvZGV2L251bGwKQEAg
LTEsMTU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTCi0g
KiBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQKLSAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQotICogUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIFRoaXMgbmFt
ZXNwYWNlIGlzIGluamVjdGVkIGludG8gZXZlcnkgdGVzdCBwYWdlLiBJdHMgZnVuY3Rpb25zIGFy
ZSBpbnZva2VkIGJ5Ci0vLyBJbnNwZWN0b3JUZXN0IG1ldGhvZHMgb24gdGhlIGluc3BlY3RvciBw
YWdlIHZpYSBSdW50aW1lQWdlbnQuZXZhbHVhdGUoKSBjYWxscy4KLUluc3BlY3RvclRlc3RQcm94
eSA9IHt9OwotSW5zcGVjdG9yVGVzdFByb3h5Ll9pbml0aWFsaXplcnMgPSBbXTsKLQotLy8gSGVs
cGVyIHNjcmlwdHMgbGlrZSBgZGVidWdnZXItdGVzdC5qc2AgbXVzdCByZWdpc3RlciB0aGVpciBp
bml0aWFsaXphdGlvbgotLy8gZnVuY3Rpb24gd2l0aCB0aGlzIG1ldGhvZCBzbyBpdCB3aWxsIGJl
IG1hcnNoYWxsZWQgdG8gdGhlIGluc3BlY3RvciBwYWdlLgotSW5zcGVjdG9yVGVzdFByb3h5LnJl
Z2lzdGVySW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihpbml0aWFsaXplcikKLXsKLSAgICBpZiAodHlw
ZW9mIGluaXRpYWxpemVyID09PSAiZnVuY3Rpb24iKQotICAgICAgICB0aGlzLl9pbml0aWFsaXpl
cnMucHVzaChpbml0aWFsaXplci50b1N0cmluZygpKTsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBp
cyBjYWxsZWQgYnkgdGhlIHRlc3QgZG9jdW1lbnQncyBib2R5IG9ubG9hZCBoYW5kbGVyLgotCi0v
LyBJdCBpbml0aWFsaXplcyB0aGUgaW5zcGVjdG9yIGFuZCBsb2FkcyBhbnkgYCotdGVzdC5qc2Ag
aGVscGVyIHNjcmlwdHMKLS8vIGludG8gdGhlIGluc3BlY3RvciBwYWdlIGNvbnRleHQuCi1mdW5j
dGlvbiBydW5UZXN0KCkKLXsKLSAgICAvLyBEb24ndCB0cnkgdG8gdXNlIHRlc3RSdW5uZXIgaWYg
cnVubmluZyB0aHJvdWdoIHRoZSBicm93c2VyLgotICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFNldCB1cCB0aGUgdGVzdCBwYWdlIGJlZm9yZSB0
aGUgbG9hZCBldmVudCBmaXJlcy4KLSAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKLSAgICB0
ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLQotICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0SW5z
cGVjdG9ySXNVbmRlclRlc3QodHJ1ZSk7Ci0gICAgdGVzdFJ1bm5lci5zaG93V2ViSW5zcGVjdG9y
KCk7Ci0KLSAgICBmdW5jdGlvbiBydW5Jbml0aWFsaXphdGlvbk1ldGhvZHNJbkZyb250ZW5kKGlu
aXRpYWxpemVyc0FycmF5KQotICAgIHsKLSAgICAgICAgSW5zcGVjdG9yVGVzdC50ZXN0UGFnZURp
ZExvYWQoKTsKLQotICAgICAgICAvLyBJZiB0aGUgdGVzdCBwYWdlIHJlbG9hZGVkIGJ1dCB3ZSBz
dGFydGVkIHJ1bm5pbmcgdGhlIHRlc3QgaW4gYSBwcmV2aW91cwotICAgICAgICAvLyBuYXZpZ2F0
aW9uLCB0aGVuIGRvbid0IGluaXRpYWxpemUgdGhlIGluc3BlY3RvciBmcm9udGVuZCBhZ2Fpbi4K
LSAgICAgICAgaWYgKEluc3BlY3RvclRlc3QuZGlkSW5qZWN0VGVzdENvZGUpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgZm9yICh2YXIgaW5pdGlhbGl6ZXIgb2YgaW5pdGlhbGl6ZXJz
QXJyYXkpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXIo
KTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVy
cm9yKCJFeGNlcHRpb24gaW4gdGVzdCBpbml0aWFsaXphdGlvbjogIiArIGUsIGUuc3RhY2sgfHwg
IihubyBzdGFjayB0cmFjZSkiKTsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBs
ZXRlVGVzdCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rp
b24gcnVuVGVzdE1ldGhvZEluRnJvbnRlbmQodGVzdEZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAg
aWYgKEluc3BlY3RvclRlc3QuZGlkSW5qZWN0VGVzdENvZGUpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgSW5zcGVjdG9yVGVzdC5kaWRJbmplY3RUZXN0Q29kZSA9IHRydWU7Ci0KLSAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHRlc3RGdW5jdGlvbigpOwotICAgICAgICB9IGNhdGNo
IChlKSB7Ci0gICAgICAgICAgICBjb25zb2xlLmVycm9yKCJFeGNlcHRpb24gZHVyaW5nIHRlc3Qg
ZXhlY3V0aW9uOiAiICsgZSwgZS5zdGFjayB8fCAiKG5vIHN0YWNrIHRyYWNlKSIpOwotICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHZhciBjb2RlU3RyaW5nVG9FdmFsdWF0ZSA9ICIoIiArIHJ1bkluaXRpYWxpemF0aW9uTWV0
aG9kc0luRnJvbnRlbmQudG9TdHJpbmcoKSArICIpKFsiICsgSW5zcGVjdG9yVGVzdFByb3h5Ll9p
bml0aWFsaXplcnMgKyAiXSk7IjsKLSAgICB0ZXN0UnVubmVyLmV2YWx1YXRlSW5XZWJJbnNwZWN0
b3IoY29kZVN0cmluZ1RvRXZhbHVhdGUpOwotCi0gICAgLy8gYHRlc3RgIHJlZmVycyB0byBhIGZ1
bmN0aW9uIGRlZmluZWQgaW4gZ2xvYmFsIHNjb3BlIGluIHRoZSB0ZXN0IEhUTUwgcGFnZS4KLSAg
ICBjb2RlU3RyaW5nVG9FdmFsdWF0ZSA9ICIoIiArIHJ1blRlc3RNZXRob2RJbkZyb250ZW5kLnRv
U3RyaW5nKCkgKyAiKSgiICsgdGVzdC50b1N0cmluZygpICsgIik7IjsKLSAgICB0ZXN0UnVubmVy
LmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoY29kZVN0cmluZ1RvRXZhbHVhdGUpOwotfQotCi1JbnNw
ZWN0b3JUZXN0UHJveHkuY29tcGxldGVUZXN0ID0gZnVuY3Rpb24oKQotewotICAgIC8vIERvbid0
IHRyeSB0byB1c2UgdGVzdFJ1bm5lciBpZiBydW5uaW5nIHRocm91Z2ggdGhlIGJyb3dzZXIuCi0g
ICAgaWYgKCF3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ2xv
c2UgaW5zcGVjdG9yIGFzeW5jaHJvdXNseSBpbiBjYXNlIHdlIHdhbnQgdG8gdGVzdCB0ZWFyLWRv
d24gYmVoYXZpb3IuCi0gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgdGVzdFJ1
bm5lci5jbG9zZVdlYkluc3BlY3RvcigpOwotICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgICAgIH0sIDApOwot
ICAgIH0sIDApOwotfQotCi0vLyBMb2dzIG1lc3NhZ2UgdG8gdW5idWZmZXJlZCBwcm9jZXNzIHN0
ZG91dCwgYXZvaWRpbmcgdGltZW91dHMuCi0vLyBvbmx5IGJlIHVzZWQgdG8gZGVidWcgdGVzdHMg
YW5kIG5vdCB0byBwcm9kdWNlIG5vcm1hbCB0ZXN0IG91dHB1dC4KLUluc3BlY3RvclRlc3RQcm94
eS5kZWJ1Z0xvZyA9IGZ1bmN0aW9uKG1lc3NhZ2UpCi17Ci0gICAgd2luZG93LmFsZXJ0KG1lc3Nh
Z2UpOwotfQotCi0vLyBBZGQgYW5kIGNsZWFyIHRlc3Qgb3V0cHV0IGZyb20gdGhlIHJlc3VsdHMg
d2luZG93LgotSW5zcGVjdG9yVGVzdFByb3h5LmFkZFJlc3VsdCA9IGZ1bmN0aW9uKHRleHQpCi17
Ci0gICAgLy8gRm9yIGVhcmx5IGVycm9ycyB0cmlnZ2VyZWQgd2hlbiBsb2FkaW5nIHRoZSB0ZXN0
IHBhZ2UsIHdyaXRlIHRvIHN0ZGVyci4KLSAgICBpZiAoIWRvY3VtZW50LmJvZHkpIHsKLSAgICAg
ICAgdGhpcy5kZWJ1Z0xvZyh0ZXh0KTsKLSAgICAgICAgdGhpcy5jb21wbGV0ZVRlc3QoKTsKLSAg
ICB9Ci0KLSAgICBpZiAoIXRoaXMuX3Jlc3VsdEVsZW1lbnQpIHsKLSAgICAgICAgdGhpcy5fcmVz
dWx0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInByZSIpOwotICAgICAgICB0aGlz
Ll9yZXN1bHRFbGVtZW50LmlkID0gIm91dHB1dCI7Ci0gICAgICAgIGRvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQodGhpcy5fcmVzdWx0RWxlbWVudCk7Ci0gICAgfQotICAgIHRoaXMuX3Jlc3VsdEVs
ZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpOwotICAgIHRo
aXMuX3Jlc3VsdEVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIi
KSk7Ci19Ci0KLUluc3BlY3RvclRlc3RQcm94eS5jbGVhclJlc3VsdHMgPSBmdW5jdGlvbigpCi17
Ci0gICAgaWYgKHRoaXMuX3Jlc3VsdEVsZW1lbnQpIHsKLSAgICAgICAgdGhpcy5fcmVzdWx0RWxl
bWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX3Jlc3VsdEVsZW1lbnQpOwotICAgICAg
ICBkZWxldGUgdGhpcy5fcmVzdWx0RWxlbWVudDsKLSAgICB9Ci19Ci0KLUluc3BlY3RvclRlc3RQ
cm94eS5yZXBvcnRVbmNhdWdodEV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHVybCwgbGlu
ZU51bWJlcikKLXsKLSAgICB2YXIgcmVzdWx0ID0gIlVuY2F1Z2h0IGV4Y2VwdGlvbiBpbiB0ZXN0
IHBhZ2U6ICIgKyBtZXNzYWdlICsgIiBbIiArIHVybCArICI6IiArIGxpbmVOdW1iZXIgKyAiXSI7
Ci0gICAgSW5zcGVjdG9yVGVzdFByb3h5LmFkZFJlc3VsdChyZXN1bHQpOwotICAgIEluc3BlY3Rv
clRlc3RQcm94eS5jb21wbGV0ZVRlc3QoKTsKLX0KLQotLy8gQ2F0Y2ggc3ludGF4IGVycm9ycywg
dHlwZSBlcnJvcnMsIGFuZCBvdGhlciBleGNlcHRpb25zLiBSdW4gdGhpcyBiZWZvcmUgbG9hZGlu
ZyBvdGhlciBmaWxlcy4KLXdpbmRvdy5vbmVycm9yID0gSW5zcGVjdG9yVGVzdFByb3h5LnJlcG9y
dFVuY2F1Z2h0RXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Bh
Z2UvbWFpbi1mcmFtZS1yZXNvdXJjZS5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3BhZ2Uv
bWFpbi1mcmFtZS1yZXNvdXJjZS5odG1sCmluZGV4IDk4MWUzYjAzN2VhMDY2NGY3NDgyMDM3YmY3
YzNjN2EzZTAzMDRmNWUuLmJiNTM2MDZiYmM0NGNiNGFmZWU1OThhM2Y0YzY2ZDQ4NDY1MDQyMWYg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wYWdlL21haW4tZnJhbWUtcmVzb3Vy
Y2UuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcGFnZS9tYWluLWZyYW1lLXJlc291
cmNlLmh0bWwKQEAgLTEsNyArMSw3IEBACiA8IWRvY3R5cGUgaHRtbD4KIDxodG1sPgogPGhlYWQ+
Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9pbnNwZWN0b3ItdGVzdC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9o
dHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
PgogZnVuY3Rpb24gdGVzdCgpCiB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
cmVwbGF5L2phdmFzY3JpcHQtZGF0ZS1ub3cuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9y
ZXBsYXkvamF2YXNjcmlwdC1kYXRlLW5vdy5odG1sCmluZGV4IGQzMjkwZTllZmU5MzAyODAxODMw
ODFkZmIyMGNlZThlMTE0OTdlYWYuLjY4ZDQ2MjA3NWUxYTg1ZTQ5OGFjNmY0MmZkMzA5ZTkxMmNl
ODc2OTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBsYXkvamF2YXNjcmlw
dC1kYXRlLW5vdy5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBsYXkvamF2YXNj
cmlwdC1kYXRlLW5vdy5odG1sCkBAIC0xLDcgKzEsNyBAQAogPGh0bWw+CiA8aGVhZD4KLTxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2luc3BlY3Rvci10ZXN0LmpzIj48L3Nj
cmlwdD4KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4vcmVwbGF5LXRlc3Qu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4v
aHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3Iv
cmVwbGF5L3JlcGxheS10ZXN0LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+CiAKIHdpbmRvdy5fdGlt
ZXMgPSBbRGF0ZS5ub3coKSwgbmV3IERhdGUoKS50b1N0cmluZygpXTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9yZXBsYXkvamF2YXNjcmlwdC1yYW5kb20tc2VlZC5odG1sIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcGxheS9qYXZhc2NyaXB0LXJhbmRvbS1zZWVkLmh0bWwK
aW5kZXggMjIxMWYyMDY4Y2VmOGZkNDkxZmFkMWE2NmQ1YzI1MjRlMjJlYzA1OC4uNjNlYzRkZTk0
NWY3YzBlYWI2ZTNjOGQ3YjY2Zjk1MDQ1M2JkNDVmNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL3JlcGxheS9qYXZhc2NyaXB0LXJhbmRvbS1zZWVkLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3JlcGxheS9qYXZhc2NyaXB0LXJhbmRvbS1zZWVkLmh0bWwKQEAgLTEs
NyArMSw3IEBACiA8aHRtbD4KIDxoZWFkPgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
IHNyYz0iLi4vaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgotPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iLi9yZXBsYXktdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNw
ZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXBsYXkvcmVwbGF5LXRlc3QuanMiPjwv
c2NyaXB0PgogPHNjcmlwdD4KIAogd2luZG93Ll9yYW5kb21OdW1iZXIgPSBNYXRoLnJhbmRvbSgp
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcGxheS9yZXBsYXktdGVzdC5q
cyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBsYXkvcmVwbGF5LXRlc3QuanMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1Y2RmYzNkZTliNGFlMDI0ODkzM2M3MGI1MTQ4MmMwNzEw
ZGJkZDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3JlcGxheS9yZXBsYXktdGVzdC5qcworKysgL2Rldi9udWxsCkBA
IC0xLDc5ICswLDAgQEAKLUluc3BlY3RvclRlc3RQcm94eS5yZWdpc3RlckluaXRpYWxpemVyKGZ1
bmN0aW9uKCkgewotCi1JbnNwZWN0b3JUZXN0LlJlcGxheSA9IHt9OwotCi1JbnNwZWN0b3JUZXN0
LlJlcGxheS5ydW5TaW5nbGVTZWdtZW50UmVmVGVzdCA9IGZ1bmN0aW9uKHN0YXRlQ29tcGFyYXRv
cikKLXsKLSAgICB2YXIgc3RhdGVEdXJpbmdDYXB0dXJpbmcgPSBudWxsOwotICAgIHZhciBzdGF0
ZUR1cmluZ1JlcGxheWluZyA9IG51bGw7Ci0KLSAgICB2YXIgaWdub3JlQ2FjaGVPblJlbG9hZCA9
IHRydWU7Ci0gICAgSW5zcGVjdG9yVGVzdC5yZWxvYWRQYWdlKGlnbm9yZUNhY2hlT25SZWxvYWQp
Ci0gICAgLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5j
dGlvbiB3YWl0Rm9yTWFpblJlc291cmNlQmVmb3JlU3RhcnRpbmcocmVzb2x2ZSwgcmVqZWN0KSB7
Ci0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2ZW50RGlzcGF0Y2hlci5hZGRFdmVudExpc3Rl
bmVyKEluc3BlY3RvclRlc3QuRXZlbnREaXNwYXRjaGVyLkV2ZW50LlRlc3RQYWdlRGlkTG9hZCwg
cmVzb2x2ZSk7Ci0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiV2FpdGluZyBmb3IgdGVz
dCBwYWdlIHRvIGZpbmlzaCBpdHMgaW5pdGlhbCBsb2FkLi4uIik7Ci0gICAgICAgIH0pOwotICAg
IH0pCi0gICAgLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJU
ZXN0IHBhZ2UgaW5pdGlhbCBsb2FkIGRvbmUuIik7Ci0gICAgICAgIHJldHVybiBuZXcgUHJvbWlz
ZShmdW5jdGlvbiBzdGFydENhcHR1cmluZyhyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgICAgICAg
IEluc3BlY3RvclRlc3QubG9nKCJXYWl0aW5nIGZvciBjYXB0dXJpbmcgdG8gc3RhcnQuLi4iKTsK
LSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5yZXBsYXlNYW5hZ2VyLnN0YXJ0Q2FwdHVyaW5nKCk7
Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IucmVwbGF5TWFuYWdlci5hZGRFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLkV2ZW50LkNhcHR1cmVTdGFydGVkLCByZXNvbHZl
KTsKLSAgICAgICAgfSk7Ci0gICAgfSkKLSAgICAudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAg
SW5zcGVjdG9yVGVzdC5sb2coIkNhcHR1cmluZyBoYXMgc3RhcnRlZC4iKTsKLSAgICAgICAgcmV0
dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHdhaXRUb0NhcHR1cmVJbml0aWFsTmF2aWdhdGlvbihy
ZXNvbHZlLCByZWplY3QpIHsKLSAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJXYWl0aW5n
IHRvIGNhcHR1cmUgaW5pdGlhbCBuYXZpZ2F0aW9uLi4uIik7Ci0gICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LmV2ZW50RGlzcGF0Y2hlci5hZGRFdmVudExpc3RlbmVyKEluc3BlY3RvclRlc3QuRXZl
bnREaXNwYXRjaGVyLkV2ZW50LlRlc3RQYWdlRGlkTG9hZCwgcmVzb2x2ZSk7Ci0gICAgICAgIH0p
OwotICAgIH0pCi0gICAgLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIEluc3BlY3RvclRlc3Qu
bG9nKCJJbml0aWFsIG5hdmlnYXRpb24gY2FwdHVyZWQuIER1bXBpbmcgc3RhdGUuLi4uIik7Ci0g
ICAgICAgIHJldHVybiBSdW50aW1lQWdlbnQuZXZhbHVhdGUucHJvbWlzZSgiZHVtcE5vbmRldGVy
bWluaXN0aWNTdGF0ZSgpIik7Ci0gICAgfSkKLSAgICAudGhlbihmdW5jdGlvbihwYXlsb2FkKSB7
Ci0gICAgICAgIHN0YXRlRHVyaW5nQ2FwdHVyaW5nID0gcGF5bG9hZC52YWx1ZTsKLSAgICAgICAg
cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHN0b3BDYXB0dXJpbmcocmVzb2x2ZSwgcmVqZWN0
KSB7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IucmVwbGF5TWFuYWdlci5zdG9wQ2FwdHVyaW5n
KCk7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IucmVwbGF5TWFuYWdlci5hZGRFdmVudExpc3Rl
bmVyKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLkV2ZW50LkNhcHR1cmVTdG9wcGVkLCByZXNv
bHZlKTsKLSAgICAgICAgfSk7Ci0gICAgfSkKLSAgICAudGhlbihmdW5jdGlvbigpIHsKLSAgICAg
ICAgSW5zcGVjdG9yVGVzdC5sb2coIkNhcHR1cmUgc3RvcHBlZCwgbm93IHN0YXJ0aW5nIHJlcGxh
eSB0byBjb21wbGV0aW9uLi4uIikKLSAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9u
IHN0YXJ0UGxheWJhY2socmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0
b3IucmVwbGF5TWFuYWdlci5yZXBsYXlUb0NvbXBsZXRpb24oKTsKLSAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5yZXBsYXlNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlJlcGxh
eU1hbmFnZXIuRXZlbnQuUGxheWJhY2tTdGFydGVkLCByZXNvbHZlKTsKLSAgICAgICAgfSk7Ci0g
ICAgfSkKLSAgICAudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2co
IlBsYXliYWNrIGhhcyBzdGFydGVkLiIpOwotICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVu
Y3Rpb24gd2FpdEZvck1haW5SZXNvdXJjZVdoZW5SZXBsYXlpbmcocmVzb2x2ZSwgcmVqZWN0KSB7
Ci0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiV2FpdGluZyB0byByZXBsYXkgaW5pdGlh
bCBuYXZpZ2F0aW9uLi4uIik7Ci0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2ZW50RGlzcGF0
Y2hlci5hZGRFdmVudExpc3RlbmVyKEluc3BlY3RvclRlc3QuRXZlbnREaXNwYXRjaGVyLkV2ZW50
LlRlc3RQYWdlRGlkTG9hZCwgcmVzb2x2ZSk7Ci0gICAgICAgIH0pOwotICAgIH0pCi0gICAgLnRo
ZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJJbml0aWFsIG5hdmln
YXRpb24gcmVwbGF5ZWQuIER1bXBpbmcgc3RhdGUuLi4iKTsKLSAgICAgICAgcmV0dXJuIFJ1bnRp
bWVBZ2VudC5ldmFsdWF0ZS5wcm9taXNlKCJkdW1wTm9uZGV0ZXJtaW5pc3RpY1N0YXRlKCkiKTsK
LSAgICB9KQotICAgIC50aGVuKGZ1bmN0aW9uKHBheWxvYWQpIHsKLSAgICAgICAgc3RhdGVEdXJp
bmdSZXBsYXlpbmcgPSBwYXlsb2FkLnZhbHVlOwotICAgICAgICByZXR1cm4gbmV3IFByb21pc2Uo
ZnVuY3Rpb24gd2FpdEZvclJlcGxheWluZ1RvRmluaXNoKHJlc29sdmUsIHJlamVjdCkgewotICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLnJlcGxheU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuUmVwbGF5TWFuYWdlci5FdmVudC5QbGF5YmFja0ZpbmlzaGVkLCByZXNvbHZlKTsK
LSAgICAgICAgfSk7Ci0gICAgfSkKLSAgICAudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgdmFy
IHN0YXRlc0VxdWFsID0gc3RhdGVEdXJpbmdDYXB0dXJpbmcgPT09IHN0YXRlRHVyaW5nUmVwbGF5
aW5nOwotICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQoc3RhdGVzRXF1YWwsICJOb25k
ZXRlcm1pbmlzdGljIHN0YXRlIHNob3VsZCBub3QgZGlmZmVyIGR1cmluZyBjYXB0dXJlIGFuZCBy
ZXBsYXkuIik7Ci0gICAgICAgIGlmICghc3RhdGVzRXF1YWwpIHsKLSAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QubG9nKCJTdGF0ZSBkdXJpbmcgY2FwdHVyaW5nOiAiICsgc3RhdGVEdXJpbmdDYXB0
dXJpbmcpOwotICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlN0YXRlIGR1cmluZyByZXBs
YXlpbmc6ICIgKyBzdGF0ZUR1cmluZ1JlcGxheWluZyk7Ci0gICAgICAgIH0KLSAgICAgICAgSW5z
cGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKLSAgICB9KTsKLX07Ci0KLX0pOwpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci90ZXN0
LWhhcm5lc3MtdHJpdmlhbGx5LXdvcmtzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvdGVz
dC1oYXJuZXNzLXRyaXZpYWxseS13b3Jrcy5odG1sCmluZGV4IGMwOGFlMWFhYjcxMTE0NGMxNGFj
MjZmYWNiY2IzNzAwODI4NmYxMTAuLmIwODFhNzRkMmRjYzgwNGMyZjk5YTI4YjM5NDFiNmQ0Yjg1
ZDQzOGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci90ZXN0LWhhcm5lc3MtdHJp
dmlhbGx5LXdvcmtzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Rlc3QtaGFybmVz
cy10cml2aWFsbHktd29ya3MuaHRtbApAQCAtMSw2ICsxLDYgQEAKIDxodG1sPgogPGhlYWQ+Ci08
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJpbnNwZWN0b3ItdGVzdC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9odHRwL3Rlc3Rz
L2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgogZnVuY3Rp
b24gdGVzdCgpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228775</attachid>
            <date>2014-04-07 17:02:54 -0700</date>
            <delta_ts>2014-04-15 17:24:26 -0700</delta_ts>
            <desc>OK, this is actually it</desc>
            <filename>bug-131318-20140407170233.patch</filename>
            <type>text/plain</type>
            <size>5506</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY2ODg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzEwMDBiNTFhOWViYmVk
ZDExNTE3ZjU5YjRkYTQxZmFjYWFkZTk4Mi4uNDI2Yjc2MWU3YWQ4NWYwYTgwMzMzNmY1NDhjNzEy
MThjNDNmZTdjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE0LTA0LTA3ICBCcmlh
biBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KKworICAgICAgICBXZWIgUmVwbGF5
OiBtZW1vaXplIGZhbGxiYWNrIHRpbWUgdmFsdWVzIGZvciBkb2N1bWVudC5sYXN0TW9kaWZpZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTMxOAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIGEgZG9j
dW1lbnQncyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYW4ndCBiZSBmb3VuZCBvciB1c2VkLCB0aGVu
IAorICAgICAgICBkb2N1bWVudC5sYXN0TW9kaWZpZWQgaXMgZGVyaXZlZCBmcm9tIHRoZSBjdXJy
ZW50IHN5c3RlbSB0aW1lIG9yCisgICAgICAgIGZyb20gZmlsZXN5c3RlbSBkYXRhLCB3aGljaCBp
cyBvYnZpb3VzbHkgbm9uZGV0ZXJtaW5pc3RpYy4KKworICAgICAgICBJdCdzIGJldHRlciB0byBo
YW5kbGUgdGhpcyBpbnNpZGUgRG9jdW1lbnQ6Omxhc3RNb2RpZmllZCByYXRoZXIgdGhhbiB1c2lu
ZworICAgICAgICBNZW1vaXplZERPTVJlc3VsdCwgYmVjYXVzZSBvbmx5IHRoZSBmYWxsYmFjayBj
YXNlIGlzIG5vbmRldGVybWluaXN0aWMuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9pbnNw
ZWN0b3IvcmVwbGF5L2RvY3VtZW50LWxhc3QtbW9kaWZpZWQtZmFsbGJhY2stdmFsdWUuaHRtbAor
CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpsYXN0TW9kaWZpZWQpOiBTYXZlIG9yIHJldXNlIG1lbW9pemVkIGZhbGxiYWNrIHZhbHVlLgor
ICAgICAgICAqIHJlcGxheS9XZWJJbnB1dHMuanNvbjogQWRkIGlucHV0IERvY3VtZW50TGFzdE1v
ZGlmaWVkRGF0ZS4KKwogMjAxNC0wNC0wNyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFw
cGxlLmNvbT4KIAogICAgICAgICBbaU9TIFdlYktpdDJdIE1ha2UgYmFjay1idWZmZXJzIHB1cmdl
YWJsZSB3aGVuIHBvc3NpYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBjOGVlOGJhMzI1
NjJkZjRmYzE5Y2U1MDM3MDNmOWM2NjQ1YzZjMzFlLi5lMjk3YzBlOTRhN2U4MDI5NTk4NGZmNDg5
NzJmYmE3YmE2MzhmNjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTIyMCw2ICsyMjAs
NyBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKKyNpbmNsdWRlICJXZWJSZXBs
YXlJbnB1dHMuaCIKICNpbmNsdWRlIDxyZXBsYXkvRW1wdHlJbnB1dEN1cnNvci5oPgogI2VuZGlm
CiAKQEAgLTM4OTEsOCArMzg5MiwyMCBAQCBTdHJpbmcgRG9jdW1lbnQ6Omxhc3RNb2RpZmllZCgp
IGNvbnN0CiAgICAgLy8gRklYTUU6IElmIHRoaXMgZG9jdW1lbnQgY2FtZSBmcm9tIHRoZSBmaWxl
IHN5c3RlbSwgdGhlIEhUTUw1CiAgICAgLy8gc3BlY2lmaWNpYXRpb24gdGVsbHMgdXMgdG8gcmVh
ZCB0aGUgbGFzdCBtb2RpZmljYXRpb24gZGF0ZSBmcm9tIHRoZSBmaWxlCiAgICAgLy8gc3lzdGVt
LgotICAgIGlmICghZm91bmREYXRlKQotICAgICAgICBkYXRlLnNldE1pbGxpc2Vjb25kc1NpbmNl
RXBvY2hGb3JEYXRlVGltZShjdXJyZW50VGltZU1TKCkpOworICAgIGlmICghZm91bmREYXRlKSB7
CisgICAgICAgIGRvdWJsZSBmYWxsYmFja0RhdGUgPSBjdXJyZW50VGltZU1TKCk7CisjaWYgRU5B
QkxFKFdFQl9SRVBMQVkpCisgICAgICAgIElucHV0Q3Vyc29yJiBjdXJzb3IgPSBpbnB1dEN1cnNv
cigpOworICAgICAgICBpZiAoY3Vyc29yLmlzQ2FwdHVyaW5nKCkpCisgICAgICAgICAgICBjdXJz
b3IuYXBwZW5kSW5wdXQ8RG9jdW1lbnRMYXN0TW9kaWZpZWREYXRlPihmYWxsYmFja0RhdGUpOwor
ICAgICAgICBlbHNlIGlmIChjdXJzb3IuaXNSZXBsYXlpbmcoKSkgeworICAgICAgICAgICAgaWYg
KERvY3VtZW50TGFzdE1vZGlmaWVkRGF0ZSogaW5wdXQgPSBjdXJzb3IuZmV0Y2hJbnB1dDxEb2N1
bWVudExhc3RNb2RpZmllZERhdGU+KCkpCisgICAgICAgICAgICAgICAgZmFsbGJhY2tEYXRlID0g
aW5wdXQtPmZhbGxiYWNrVmFsdWUoKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGRhdGUu
c2V0TWlsbGlzZWNvbmRzU2luY2VFcG9jaEZvckRhdGVUaW1lKGZhbGxiYWNrRGF0ZSk7CisgICAg
fQorCiAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlMDJkLyUwMmQvJTA0ZCAlMDJkOiUwMmQ6
JTAyZCIsIGRhdGUubW9udGgoKSArIDEsIGRhdGUubW9udGhEYXkoKSwgZGF0ZS5mdWxsWWVhcigp
LCBkYXRlLmhvdXIoKSwgZGF0ZS5taW51dGUoKSwgZGF0ZS5zZWNvbmQoKSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9XZWJJbnB1dHMuanNvbiBiL1NvdXJjZS9XZWJD
b3JlL3JlcGxheS9XZWJJbnB1dHMuanNvbgppbmRleCAzZTZhZWZiMTBmOGVmZDI5MzBmZGMzMmM4
ZTU2MDAyNDg1ZGYwOTJjLi43YTU5NTgxMDI4OWIwNGYzZDkyOTY3ZTdlYTdmZjZjMjhlZWFkOGNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvV2ViSW5wdXRzLmpzb24KKysrIGIv
U291cmNlL1dlYkNvcmUvcmVwbGF5L1dlYklucHV0cy5qc29uCkBAIC0xNjEsNiArMTYxLDE0IEBA
CiAgICAgICAgICAgICAibWVtYmVycyI6IFsgXQogICAgICAgICB9LAogICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJEb2N1bWVudExhc3RNb2RpZmllZERhdGUiLAorICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkEgZmFsbGJhY2sgdmFsdWUgdXNlZCBmb3IgdGhlIGRvY3VtZW50J3Mg
bGFzdCBtb2RpZmllZCBkYXRlIGlmIHRoZSBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYW4ndCBiZSBm
b3VuZCBvciB1c2VkLiIsCisgICAgICAgICAgICAicXVldWUiOiAiU0NSSVBUX01FTU9JWkVEIiwK
KyAgICAgICAgICAgICJtZW1iZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZmFs
bGJhY2tWYWx1ZSIsICJ0eXBlIjogImRvdWJsZSIgfQorICAgICAgICAgICAgXQorICAgICAgICB9
LAorICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJFbmRTZWdtZW50U2VudGluZWwiLAog
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgc2VudGluZWwgaW5wdXQgdG8gc2lnbmFsIHRo
ZSBlbmQgb2YgYSBzZWdtZW50LiIsCiAgICAgICAgICAgICAicXVldWUiOiAiRVZFTlRfTE9PUCIs
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggZGI3MzU1MjdmMTQ1YzQwYTk5ZmU5OGFhYWQ1Zjk0OWQxZTk3ZDE2My4uNzE1ZDE2
ZGU4YmI5Y2VlODM4ZTNiZmQwZDdmMmJjN2EzZTU5ZmE0ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE0IEBA
CiAyMDE0LTA0LTA3ICBCcmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KIAor
ICAgICAgICBXZWIgUmVwbGF5OiBtZW1vaXplIGZhbGxiYWNrIHRpbWUgdmFsdWVzIGZvciBkb2N1
bWVudC5sYXN0TW9kaWZpZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMTMxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVwbGF5L2RvY3VtZW50LWxhc3QtbW9k
aWZpZWQtZmFsbGJhY2stdmFsdWUuaHRtbDogQWRkZWQuCisKKzIwMTQtMDQtMDcgIEJyaWFuIEou
IEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgorCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IHRlc3QgaGVscGVyIGZpbGVzIHNob3VsZCBiZSB1bmRlciBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2luc3BlY3Rvci8KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzMTMyNAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rv
ci9yZXBsYXkvZG9jdW1lbnQtbGFzdC1tb2RpZmllZC1mYWxsYmFjay12YWx1ZS5odG1sIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVwbGF5L2RvY3VtZW50LWxhc3QtbW9kaWZp
ZWQtZmFsbGJhY2stdmFsdWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMTlmNzg2YTExYjNlNWQ5NzljMzcz
NTAxOTU5YWVhMzNjMzBlY2RhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9pbnNwZWN0b3IvcmVwbGF5L2RvY3VtZW50LWxhc3QtbW9kaWZpZWQtZmFsbGJhY2stdmFs
dWUuaHRtbApAQCAtMCwwICsxLDMzIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9yZXBsYXktdGVzdC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBhcHBlbmRGcmFtZVdpdGhMYXN0TW9kaWZpZWREYXRl
KHRleHQpIHsKKyAgICBkb2N1bWVudC53cml0ZSgnPGlmcmFtZSBzcmM9Ii4uL3Jlc291cmNlcy9s
YXN0LW1vZGlmaWVkLnBocD9kYXRlPScgKyBlc2NhcGUodGV4dCkgKyAnIj48L2lmcmFtZT4nKTsK
K30KKworYXBwZW5kRnJhbWVXaXRoTGFzdE1vZGlmaWVkRGF0ZSgnJyk7CisKK2Z1bmN0aW9uIGR1
bXBOb25kZXRlcm1pbmlzdGljU3RhdGUoKQoreworICAgIHJldHVybiBEYXRlLnBhcnNlKGZyYW1l
c1swXS5kb2N1bWVudC5ib2R5LnRleHRDb250ZW50KTsKK30KKworZnVuY3Rpb24gdGVzdCgpCit7
CisgICAgZnVuY3Rpb24gc3RhdGVzQXJlRXF1YWwoYSwgYikKKyAgICB7CisgICAgICAgIHJldHVy
biBhID09PSBiOworICAgIH0KKworICAgIEluc3BlY3RvclRlc3QuUmVwbGF5LnJ1blNpbmdsZVNl
Z21lbnRSZWZUZXN0KHN0YXRlc0FyZUVxdWFsKTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8cD5UZXN0cyB0aGF0IHdlIGNhbiBjYXB0dXJlIGFu
ZCByZXBsYXkgbm9uZGV0ZXJtaW5pc20gaW4gZmFsbGJhY2sgdmFsdWVzIGZvciBkb2N1bWVudC5s
YXN0TW9kaWZpZWQ8L3A+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229419</attachid>
            <date>2014-04-15 17:24:31 -0700</date>
            <delta_ts>2014-04-16 17:57:05 -0700</delta_ts>
            <desc>patch with updated TestExpectations</desc>
            <filename>bug-131318-20140415172410.patch</filename>
            <type>text/plain</type>
            <size>7402</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY3MzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTMzMmZhYzkzOGJjMGNk
YzdhZmZhMjAwMzIzMDE0MDVhN2MyMWJjMy4uNzg0YWQ2YmQxYTNjYWIxYTFiODZkMGEyMmIyNDU5
YTExYTk1ZDhjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE0LTA0LTE1ICBCcmlh
biBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KKworICAgICAgICBXZWIgUmVwbGF5
OiBtZW1vaXplIGZhbGxiYWNrIHRpbWUgdmFsdWVzIGZvciBkb2N1bWVudC5sYXN0TW9kaWZpZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTMxOAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIGEgZG9j
dW1lbnQncyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYW4ndCBiZSBmb3VuZCBvciB1c2VkLCB0aGVu
IAorICAgICAgICBkb2N1bWVudC5sYXN0TW9kaWZpZWQgaXMgZGVyaXZlZCBmcm9tIHRoZSBjdXJy
ZW50IHN5c3RlbSB0aW1lIG9yCisgICAgICAgIGZyb20gZmlsZXN5c3RlbSBkYXRhLCB3aGljaCBp
cyBvYnZpb3VzbHkgbm9uZGV0ZXJtaW5pc3RpYy4KKworICAgICAgICBJdCdzIGJldHRlciB0byBo
YW5kbGUgdGhpcyBpbnNpZGUgRG9jdW1lbnQ6Omxhc3RNb2RpZmllZCByYXRoZXIgdGhhbiB1c2lu
ZworICAgICAgICBNZW1vaXplZERPTVJlc3VsdCwgYmVjYXVzZSBvbmx5IHRoZSBmYWxsYmFjayBj
YXNlIGlzIG5vbmRldGVybWluaXN0aWMuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9pbnNw
ZWN0b3IvcmVwbGF5L2RvY3VtZW50LWxhc3QtbW9kaWZpZWQtZmFsbGJhY2stdmFsdWUuaHRtbAor
CisgICAgICAgIFRoZSB0ZXN0IGlzIHNraXBwZWQgZm9yIG5vdywgYXMgaXQgd2lsbCBiZSB2ZXJ5
IGZsYWt5IHdpdGhvdXQgdGhlCisgICAgICAgIGZ1bmN0aW9uYWxpdHkgaW50cm9kdWNlZCBieSBi
dWdzIDEzMDcyOCBhbmQgMTI5MzkxLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpsYXN0TW9kaWZpZWQpOiBTYXZlIG9yIHJldXNlIG1l
bW9pemVkIGZhbGxiYWNrIHZhbHVlLgorICAgICAgICAqIHJlcGxheS9XZWJJbnB1dHMuanNvbjog
QWRkIGlucHV0IERvY3VtZW50TGFzdE1vZGlmaWVkRGF0ZS4KKwogMjAxNC0wNC0xNSAgR3l1eW91
bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFJlbW92ZSB1bm5l
Y2Vzc2FyeSBudWxsIGNoZWNraW5nIGluIE5hdmlnYXRvckNvbnRlbnRVdGlscwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKaW5kZXggMjFjMjlkYWRlNWI3NjhlYmI5MjEyZjFjZTViM2JhODgwZDYwMzQy
Mi4uZWJiMjlhZDI0MjQ2ZTgyNjNiOWY1M2QyYmQxZmM1YjI5YzE0OTU2ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCkBAIC0yMjAsNiArMjIwLDcgQEAKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdF
Ql9SRVBMQVkpCisjaW5jbHVkZSAiV2ViUmVwbGF5SW5wdXRzLmgiCiAjaW5jbHVkZSA8cmVwbGF5
L0VtcHR5SW5wdXRDdXJzb3IuaD4KICNlbmRpZgogCkBAIC0zODkxLDggKzM4OTIsMjAgQEAgU3Ry
aW5nIERvY3VtZW50OjpsYXN0TW9kaWZpZWQoKSBjb25zdAogICAgIC8vIEZJWE1FOiBJZiB0aGlz
IGRvY3VtZW50IGNhbWUgZnJvbSB0aGUgZmlsZSBzeXN0ZW0sIHRoZSBIVE1MNQogICAgIC8vIHNw
ZWNpZmljaWF0aW9uIHRlbGxzIHVzIHRvIHJlYWQgdGhlIGxhc3QgbW9kaWZpY2F0aW9uIGRhdGUg
ZnJvbSB0aGUgZmlsZQogICAgIC8vIHN5c3RlbS4KLSAgICBpZiAoIWZvdW5kRGF0ZSkKLSAgICAg
ICAgZGF0ZS5zZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZVRpbWUoY3VycmVudFRpbWVN
UygpKTsKKyAgICBpZiAoIWZvdW5kRGF0ZSkgeworICAgICAgICBkb3VibGUgZmFsbGJhY2tEYXRl
ID0gY3VycmVudFRpbWVNUygpOworI2lmIEVOQUJMRShXRUJfUkVQTEFZKQorICAgICAgICBJbnB1
dEN1cnNvciYgY3Vyc29yID0gaW5wdXRDdXJzb3IoKTsKKyAgICAgICAgaWYgKGN1cnNvci5pc0Nh
cHR1cmluZygpKQorICAgICAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0PERvY3VtZW50TGFzdE1v
ZGlmaWVkRGF0ZT4oZmFsbGJhY2tEYXRlKTsKKyAgICAgICAgZWxzZSBpZiAoY3Vyc29yLmlzUmVw
bGF5aW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChEb2N1bWVudExhc3RNb2RpZmllZERhdGUqIGlu
cHV0ID0gY3Vyc29yLmZldGNoSW5wdXQ8RG9jdW1lbnRMYXN0TW9kaWZpZWREYXRlPigpKQorICAg
ICAgICAgICAgICAgIGZhbGxiYWNrRGF0ZSA9IGlucHV0LT5mYWxsYmFja1ZhbHVlKCk7CisgICAg
ICAgIH0KKyNlbmRpZgorICAgICAgICBkYXRlLnNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JE
YXRlVGltZShmYWxsYmFja0RhdGUpOworICAgIH0KKwogICAgIHJldHVybiBTdHJpbmc6OmZvcm1h
dCgiJTAyZC8lMDJkLyUwNGQgJTAyZDolMDJkOiUwMmQiLCBkYXRlLm1vbnRoKCkgKyAxLCBkYXRl
Lm1vbnRoRGF5KCksIGRhdGUuZnVsbFllYXIoKSwgZGF0ZS5ob3VyKCksIGRhdGUubWludXRlKCks
IGRhdGUuc2Vjb25kKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkv
V2ViSW5wdXRzLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvV2ViSW5wdXRzLmpzb24KaW5k
ZXggNTQyNjBjNjczMmIwZGM2ZDMwNzIxOTkzZmNmODA5YjEyYzFiZDEyMi4uZGE1YmUzZWQzZGYx
NGJhNzIyMGMyNTNkNTkyNTI5ODhiNjc1YzMxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVwbGF5L1dlYklucHV0cy5qc29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9XZWJJbnB1
dHMuanNvbgpAQCAtMTY1LDYgKzE2NSwxNCBAQAogICAgICAgICAgICAgIm1lbWJlcnMiOiBbIF0K
ICAgICAgICAgfSwKICAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiRG9jdW1lbnRMYXN0
TW9kaWZpZWREYXRlIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIGZhbGxiYWNrIHZh
bHVlIHVzZWQgZm9yIHRoZSBkb2N1bWVudCdzIGxhc3QgbW9kaWZpZWQgZGF0ZSBpZiB0aGUgTGFz
dC1Nb2RpZmllZCBoZWFkZXIgY2FuJ3QgYmUgZm91bmQgb3IgdXNlZC4iLAorICAgICAgICAgICAg
InF1ZXVlIjogIlNDUklQVF9NRU1PSVpFRCIsCisgICAgICAgICAgICAibWVtYmVycyI6IFsKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImZhbGxiYWNrVmFsdWUiLCAidHlwZSI6ICJkb3VibGUi
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgewogICAgICAgICAgICAgIm5h
bWUiOiAiRW5kU2VnbWVudFNlbnRpbmVsIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJB
IHNlbnRpbmVsIGlucHV0IHRvIHNpZ25hbCB0aGUgZW5kIG9mIGEgc2VnbWVudC4iLAogICAgICAg
ICAgICAgInF1ZXVlIjogIkVWRU5UX0xPT1AiLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDE3MTFiYmFjZDMxNjI4YTcwY2Zk
MDcxMzIxY2RiZWYxMDcxMDliNDQuLjcyMmE5MDVkY2FhYTMyNGUzNmM5YzhhMmMwN2JiYjI1MGMy
ODA3YmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNC0wNC0xNSAgQnJpYW4gSi4gQnVyZyAg
PGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisKKyAgICAgICAgV2ViIFJlcGxheTogbWVtb2l6ZSBm
YWxsYmFjayB0aW1lIHZhbHVlcyBmb3IgZG9jdW1lbnQubGFzdE1vZGlmaWVkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzEzMTgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYXJrIHRoZSBuZXcgdGVzdCBh
cyBza2lwcGVkIHVudGlsIGRlcGVuZGVudCBmdW5jdGlvbmFsaXR5IGlzIGxhbmRlZC4KKworICAg
ICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL3JlcGxheS9kb2N1bWVudC1sYXN0LW1vZGlmaWVk
LWZhbGxiYWNrLXZhbHVlLmh0bWw6IEFkZGVkLgorCiAyMDE0LTA0LTE1ICBBbGV4ZXkgUHJvc2t1
cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIGluc3BlY3Rvci9kb20vY29udGVudC1m
bG93LWxpc3QuaHRtbCBhbmQgaW5zcGVjdG9yL2RvbS9jb250ZW50LWZsb3ctY29udGVudC1yZW1v
dmFsLmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlv
dXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDFhZGY4NDA4YmJkY2QyODg2MDk3OGM0ZWJl
M2ZmYzJiM2I5YjczMTUuLmNlN2UxNGJmN2E0YTI0NDg0OWNiYjA1ZTE4Y2JkZDE1MjRkMGQ0ZmMg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVz
dHMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtOTksMyArOTksNiBAQCB3ZWJraXQub3JnL2IvNzQxNDQg
ZmFzdC9yZWdpb25zL3JlZ2lvbi1jb250ZW50LWZsb3duLWludG8tcmVnaW9uLmh0bWwgWyBTa2lw
IF0KICMgRmFpbHMgb3IgYXNzZXJ0cyBvbiBtb3N0IHJ1bnMuCiB3ZWJraXQub3JnL2IvMTMxNjc5
IGluc3BlY3Rvci9kb20vY29udGVudC1mbG93LWxpc3QuaHRtbCBbIFNraXAgXQogd2Via2l0Lm9y
Zy9iLzEzMTY3OSBpbnNwZWN0b3IvZG9tL2NvbnRlbnQtZmxvdy1jb250ZW50LXJlbW92YWwuaHRt
bCBbIFNraXAgXQorCisjIERvZXNuJ3Qgd29yayB5ZXQsIHJlbGllcyBvbiBuZXR3b3JrIHJlcGxh
eSBmdW5jdGlvbmFsaXR5ICh3ZWJraXQub3JnL2IvMTMwNzI4LCB3ZWJraXQub3JnL2IvMTI5Mzkx
KQord2Via2l0Lm9yZy9iLzEzMTMxOCBodHRwL3Rlc3RzL2luc3BlY3Rvci9yZXBsYXkvZG9jdW1l
bnQtbGFzdC1tb2RpZmllZC1mYWxsYmFjay12YWx1ZS5odG1sIFsgU2tpcCBdCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXBsYXkvZG9jdW1lbnQtbGFzdC1t
b2RpZmllZC1mYWxsYmFjay12YWx1ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2luc3BlY3Rvci9yZXBsYXkvZG9jdW1lbnQtbGFzdC1tb2RpZmllZC1mYWxsYmFjay12YWx1
ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzU3YTMzM2QzNTZhZmE1ODEzZDQxMGQ3Mzg3Y2Vh
ZTUzOWM4Yzk0YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL3JlcGxheS9kb2N1bWVudC1sYXN0LW1vZGlmaWVkLWZhbGxiYWNrLXZhbHVlLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDEzIEBACitUZXN0cyB0aGF0IHdlIGNhbiBjYXB0dXJlIGFuZCBy
ZXBsYXkgbm9uZGV0ZXJtaW5pc20gaW4gZmFsbGJhY2sgdmFsdWVzIGZvciBkb2N1bWVudC5sYXN0
TW9kaWZpZWQKKworV2FpdGluZyBmb3IgdGVzdCBwYWdlIHRvIGZpbmlzaCBpdHMgaW5pdGlhbCBs
b2FkLi4uCitUZXN0IHBhZ2UgaW5pdGlhbCBsb2FkIGRvbmUuCitXYWl0aW5nIGZvciBjYXB0dXJp
bmcgdG8gc3RhcnQuLi4KK0NhcHR1cmluZyBoYXMgc3RhcnRlZC4KK1dhaXRpbmcgdG8gY2FwdHVy
ZSBpbml0aWFsIG5hdmlnYXRpb24uLi4KK0luaXRpYWwgbmF2aWdhdGlvbiBjYXB0dXJlZC4gRHVt
cGluZyBzdGF0ZS4uLi4KK0NhcHR1cmUgc3RvcHBlZCwgbm93IHN0YXJ0aW5nIHJlcGxheSB0byBj
b21wbGV0aW9uLi4uCitQbGF5YmFjayBoYXMgc3RhcnRlZC4KK1dhaXRpbmcgdG8gcmVwbGF5IGlu
aXRpYWwgbmF2aWdhdGlvbi4uLgorSW5pdGlhbCBuYXZpZ2F0aW9uIHJlcGxheWVkLiBEdW1waW5n
IHN0YXRlLi4uCitQQVNTOiBOb25kZXRlcm1pbmlzdGljIHN0YXRlIHNob3VsZCBub3QgZGlmZmVy
IGR1cmluZyBjYXB0dXJlIGFuZCByZXBsYXkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2luc3BlY3Rvci9yZXBsYXkvZG9jdW1lbnQtbGFzdC1tb2RpZmllZC1mYWxsYmFjay12
YWx1ZS5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVwbGF5L2RvY3Vt
ZW50LWxhc3QtbW9kaWZpZWQtZmFsbGJhY2stdmFsdWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMTlmNzg2
YTExYjNlNWQ5NzljMzczNTAxOTU5YWVhMzNjMzBlY2RhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVwbGF5L2RvY3VtZW50LWxhc3QtbW9kaWZp
ZWQtZmFsbGJhY2stdmFsdWUuaHRtbApAQCAtMCwwICsxLDMzIEBACis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vaW5zcGVjdG9yLXRlc3QuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9yZXBsYXkt
dGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBhcHBlbmRGcmFtZVdpdGhM
YXN0TW9kaWZpZWREYXRlKHRleHQpIHsKKyAgICBkb2N1bWVudC53cml0ZSgnPGlmcmFtZSBzcmM9
Ii4uL3Jlc291cmNlcy9sYXN0LW1vZGlmaWVkLnBocD9kYXRlPScgKyBlc2NhcGUodGV4dCkgKyAn
Ij48L2lmcmFtZT4nKTsKK30KKworYXBwZW5kRnJhbWVXaXRoTGFzdE1vZGlmaWVkRGF0ZSgnJyk7
CisKK2Z1bmN0aW9uIGR1bXBOb25kZXRlcm1pbmlzdGljU3RhdGUoKQoreworICAgIHJldHVybiBE
YXRlLnBhcnNlKGZyYW1lc1swXS5kb2N1bWVudC5ib2R5LnRleHRDb250ZW50KTsKK30KKworZnVu
Y3Rpb24gdGVzdCgpCit7CisgICAgZnVuY3Rpb24gc3RhdGVzQXJlRXF1YWwoYSwgYikKKyAgICB7
CisgICAgICAgIHJldHVybiBhID09PSBiOworICAgIH0KKworICAgIEluc3BlY3RvclRlc3QuUmVw
bGF5LnJ1blNpbmdsZVNlZ21lbnRSZWZUZXN0KHN0YXRlc0FyZUVxdWFsKTsKK30KKworPC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8cD5UZXN0cyB0aGF0IHdl
IGNhbiBjYXB0dXJlIGFuZCByZXBsYXkgbm9uZGV0ZXJtaW5pc20gaW4gZmFsbGJhY2sgdmFsdWVz
IGZvciBkb2N1bWVudC5sYXN0TW9kaWZpZWQ8L3A+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>