<?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>212445</bug_id>
          
          <creation_ts>2020-05-27 16:57:20 -0700</creation_ts>
          <short_desc>Minimum user interaction time in ResourceLoadStatistics should handle the case of -1</short_desc>
          <delta_ts>2020-05-28 15:35:46 -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>WebKit Misc.</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kate Cheney">katherine_cheney</reporter>
          <assigned_to name="Kate Cheney">katherine_cheney</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1656680</commentid>
    <comment_count>0</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-05-27 16:57:20 -0700</bug_when>
    <thetext>Currently in the plist and database, -1 is used to indicate no user interaction. We should handle this in ResourceLoadStatistics when considering minimum user interaction time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656681</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-27 16:57:38 -0700</bug_when>
    <thetext>&lt;rdar://problem/63696470&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656685</commentid>
    <comment_count>2</comment_count>
      <attachid>400406</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-05-27 17:09:13 -0700</bug_when>
    <thetext>Created attachment 400406
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656986</commentid>
    <comment_count>3</comment_count>
      <attachid>400406</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-05-28 13:28:33 -0700</bug_when>
    <thetext>Comment on attachment 400406
Patch

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

&gt; Source/WebKit/ChangeLog:10
&gt; +               http/tests/resourceLoadStatistics/operating-dates-all-but-cookies-removed-statistics-with-no-user-interaction.html

Should we have a test for the case where cookies are removed, too?

This seems to be testing the 7-day non-cookie data removal, but what about the 30-day cookie removal?

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2542
&gt; +Optional&lt;WallTime&gt; ResourceLoadStatisticsDatabaseStore::mostRecentUserInteractionTime(DomainData&amp; statistic)

Could this be passed as a const DomainData&amp;?

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2572
&gt; +        if (mostRecentUserInteractionTime)

I think this could just be:

if (auto mostRecentInteractionTime = this-&gt;mostRecentInteractionTime(statistic))

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2596
&gt; +    if (!parameters().isRunningTest &amp;&amp; now - oldestUserInteraction &lt; parameters().minimumTimeBetweenDataRecordsRemoval)

How long has that been wrong! Yikes.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:971
&gt; +Optional&lt;WallTime&gt; ResourceLoadStatisticsMemoryStore::mostRecentUserInteractionTime(ResourceLoadStatistics&amp; statistic)

Seems like this could be &quot;const ResourceLoadStatistics&amp;&quot;

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:1021
&gt; +    if (!parameters().isRunningTest &amp;&amp; now - oldestUserInteraction &lt; parameters().minimumTimeBetweenDataRecordsRemoval)

:-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656987</commentid>
    <comment_count>4</comment_count>
      <attachid>400406</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2020-05-28 13:28:38 -0700</bug_when>
    <thetext>Comment on attachment 400406
Patch

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

Looks good! See comment on change log.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2544
&gt; +    if (statistic.mostRecentUserInteractionTime.secondsSinceEpoch().value() &lt;= 0)

Good that you include 0 here.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2596
&gt; +    if (!parameters().isRunningTest &amp;&amp; now - oldestUserInteraction &lt; parameters().minimumTimeBetweenDataRecordsRemoval)

😳

&gt; LayoutTests/ChangeLog:7
&gt; +        Reviewed by NOBODY (OOPS!).

Please add a comment on that the case of data deletion are already tested and that these new tests only need to check for the absence of deletion. Also add a comment on which test case(s) started failing once you corrected the issue, if any.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657022</commentid>
    <comment_count>5</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-05-28 14:41:38 -0700</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #3)
&gt; Comment on attachment 400406 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=400406&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/ChangeLog:10
&gt; &gt; +               http/tests/resourceLoadStatistics/operating-dates-all-but-cookies-removed-statistics-with-no-user-interaction.html
&gt; 
&gt; Should we have a test for the case where cookies are removed, too?
&gt; 
&gt; This seems to be testing the 7-day non-cookie data removal, but what about
&gt; the 30-day cookie removal?
&gt; 

Since the flawed logic only affects non-cookie website data, the 30 day all website data removal case is covered by operating-dates-all-website-data-removed.html and operating-dates-all-website-data-removed-database.html. Good thought though, I can explain this in the ChangeLog.  

&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2542
&gt; &gt; +Optional&lt;WallTime&gt; ResourceLoadStatisticsDatabaseStore::mostRecentUserInteractionTime(DomainData&amp; statistic)
&gt; 
&gt; Could this be passed as a const DomainData&amp;?
&gt; 

Yes, good catch. I&apos;ll change that.

&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2572
&gt; &gt; +        if (mostRecentUserInteractionTime)
&gt; 
&gt; I think this could just be:
&gt; 
&gt; if (auto mostRecentInteractionTime =
&gt; this-&gt;mostRecentInteractionTime(statistic))
&gt; 

Nice, will change. 

&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2596
&gt; &gt; +    if (!parameters().isRunningTest &amp;&amp; now - oldestUserInteraction &lt; parameters().minimumTimeBetweenDataRecordsRemoval)
&gt; 
&gt; How long has that been wrong! Yikes.

:( 
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:971
&gt; &gt; +Optional&lt;WallTime&gt; ResourceLoadStatisticsMemoryStore::mostRecentUserInteractionTime(ResourceLoadStatistics&amp; statistic)
&gt; 
&gt; Seems like this could be &quot;const ResourceLoadStatistics&amp;&quot;

Yes, good catch. I&apos;ll change that.

&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:1021
&gt; &gt; +    if (!parameters().isRunningTest &amp;&amp; now - oldestUserInteraction &lt; parameters().minimumTimeBetweenDataRecordsRemoval)
&gt; 
&gt; :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657024</commentid>
    <comment_count>6</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-05-28 14:42:36 -0700</bug_when>
    <thetext>(In reply to John Wilander from comment #4)
&gt; Comment on attachment 400406 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=400406&amp;action=review
&gt; 
&gt; Looks good! See comment on change log.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2544
&gt; &gt; +    if (statistic.mostRecentUserInteractionTime.secondsSinceEpoch().value() &lt;= 0)
&gt; 
&gt; Good that you include 0 here.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2596
&gt; &gt; +    if (!parameters().isRunningTest &amp;&amp; now - oldestUserInteraction &lt; parameters().minimumTimeBetweenDataRecordsRemoval)
&gt; 
&gt; 😳
&gt; 
&gt; &gt; LayoutTests/ChangeLog:7
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; 
&gt; Please add a comment on that the case of data deletion are already tested
&gt; and that these new tests only need to check for the absence of deletion.
&gt; Also add a comment on which test case(s) started failing once you corrected
&gt; the issue, if any.

Yes, doing this I realized these new tests can replace the old 7-day deletion tests because they cover that test case already. Patch-for-landing will remove the old ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657027</commentid>
    <comment_count>7</comment_count>
      <attachid>400508</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-05-28 14:48:09 -0700</bug_when>
    <thetext>Created attachment 400508
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657028</commentid>
    <comment_count>8</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-05-28 14:48:41 -0700</bug_when>
    <thetext>Thanks for the feedback Brent and John!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657035</commentid>
    <comment_count>9</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2020-05-28 15:05:14 -0700</bug_when>
    <thetext>(In reply to katherine_cheney from comment #6)
&gt; (In reply to John Wilander from comment #4)
&gt; &gt; Comment on attachment 400406 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=400406&amp;action=review
&gt; &gt; 
&gt; &gt; Looks good! See comment on change log.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2544
&gt; &gt; &gt; +    if (statistic.mostRecentUserInteractionTime.secondsSinceEpoch().value() &lt;= 0)
&gt; &gt; 
&gt; &gt; Good that you include 0 here.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2596
&gt; &gt; &gt; +    if (!parameters().isRunningTest &amp;&amp; now - oldestUserInteraction &lt; parameters().minimumTimeBetweenDataRecordsRemoval)
&gt; &gt; 
&gt; &gt; 😳
&gt; &gt; 
&gt; &gt; &gt; LayoutTests/ChangeLog:7
&gt; &gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; 
&gt; &gt; Please add a comment on that the case of data deletion are already tested
&gt; &gt; and that these new tests only need to check for the absence of deletion.
&gt; &gt; Also add a comment on which test case(s) started failing once you corrected
&gt; &gt; the issue, if any.
&gt; 
&gt; Yes, doing this I realized these new tests can replace the old 7-day
&gt; deletion tests because they cover that test case already. Patch-for-landing
&gt; will remove the old ones.

That was not what I meant. I thought the old tests check the case when data *should* be deleted. But maybe there are *also* previous tests that data was retained?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657037</commentid>
    <comment_count>10</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2020-05-28 15:06:14 -0700</bug_when>
    <thetext>(In reply to John Wilander from comment #9)
&gt; (In reply to katherine_cheney from comment #6)
&gt; &gt; (In reply to John Wilander from comment #4)
&gt; &gt; &gt; Comment on attachment 400406 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=400406&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; Looks good! See comment on change log.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2544
&gt; &gt; &gt; &gt; +    if (statistic.mostRecentUserInteractionTime.secondsSinceEpoch().value() &lt;= 0)
&gt; &gt; &gt; 
&gt; &gt; &gt; Good that you include 0 here.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2596
&gt; &gt; &gt; &gt; +    if (!parameters().isRunningTest &amp;&amp; now - oldestUserInteraction &lt; parameters().minimumTimeBetweenDataRecordsRemoval)
&gt; &gt; &gt; 
&gt; &gt; &gt; 😳
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; LayoutTests/ChangeLog:7
&gt; &gt; &gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; &gt; 
&gt; &gt; &gt; Please add a comment on that the case of data deletion are already tested
&gt; &gt; &gt; and that these new tests only need to check for the absence of deletion.
&gt; &gt; &gt; Also add a comment on which test case(s) started failing once you corrected
&gt; &gt; &gt; the issue, if any.
&gt; &gt; 
&gt; &gt; Yes, doing this I realized these new tests can replace the old 7-day
&gt; &gt; deletion tests because they cover that test case already. Patch-for-landing
&gt; &gt; will remove the old ones.
&gt; 
&gt; That was not what I meant. I thought the old tests check the case when data
&gt; *should* be deleted. But maybe there are *also* previous tests that data was
&gt; retained?

I think I see what you&apos;re saying. This is just about the non-cookie website data deletion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657039</commentid>
    <comment_count>11</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-05-28 15:07:50 -0700</bug_when>
    <thetext>(In reply to John Wilander from comment #10)
&gt; (In reply to John Wilander from comment #9)
&gt; &gt; (In reply to katherine_cheney from comment #6)
&gt; &gt; &gt; (In reply to John Wilander from comment #4)
&gt; &gt; &gt; &gt; Comment on attachment 400406 [details]
&gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; View in context:
&gt; &gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=400406&amp;action=review
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Looks good! See comment on change log.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2544
&gt; &gt; &gt; &gt; &gt; +    if (statistic.mostRecentUserInteractionTime.secondsSinceEpoch().value() &lt;= 0)
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Good that you include 0 here.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2596
&gt; &gt; &gt; &gt; &gt; +    if (!parameters().isRunningTest &amp;&amp; now - oldestUserInteraction &lt; parameters().minimumTimeBetweenDataRecordsRemoval)
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; 😳
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; LayoutTests/ChangeLog:7
&gt; &gt; &gt; &gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Please add a comment on that the case of data deletion are already tested
&gt; &gt; &gt; &gt; and that these new tests only need to check for the absence of deletion.
&gt; &gt; &gt; &gt; Also add a comment on which test case(s) started failing once you corrected
&gt; &gt; &gt; &gt; the issue, if any.
&gt; &gt; &gt; 
&gt; &gt; &gt; Yes, doing this I realized these new tests can replace the old 7-day
&gt; &gt; &gt; deletion tests because they cover that test case already. Patch-for-landing
&gt; &gt; &gt; will remove the old ones.
&gt; &gt; 
&gt; &gt; That was not what I meant. I thought the old tests check the case when data
&gt; &gt; *should* be deleted. But maybe there are *also* previous tests that data was
&gt; &gt; retained?
&gt; 
&gt; I think I see what you&apos;re saying. This is just about the non-cookie website
&gt; data deletion.

All tests check for proper data deletion for expired statistics. The new 7-day test checks for deletion when including a statistic with -1 as the mostRecentUserInteraction time and with parameters().isRunningTest disabled. This covered the other case, and it didn&apos;t make sense to keep the other 7-day data deletion test because it doesn&apos;t test actual behavior (because of the parameters().isRunningTest()).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657040</commentid>
    <comment_count>12</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-05-28 15:08:32 -0700</bug_when>
    <thetext>(In reply to katherine_cheney from comment #11)
&gt; (In reply to John Wilander from comment #10)
&gt; &gt; (In reply to John Wilander from comment #9)
&gt; &gt; &gt; (In reply to katherine_cheney from comment #6)
&gt; &gt; &gt; &gt; (In reply to John Wilander from comment #4)
&gt; &gt; &gt; &gt; &gt; Comment on attachment 400406 [details]
&gt; &gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; View in context:
&gt; &gt; &gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=400406&amp;action=review
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Looks good! See comment on change log.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2544
&gt; &gt; &gt; &gt; &gt; &gt; +    if (statistic.mostRecentUserInteractionTime.secondsSinceEpoch().value() &lt;= 0)
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Good that you include 0 here.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2596
&gt; &gt; &gt; &gt; &gt; &gt; +    if (!parameters().isRunningTest &amp;&amp; now - oldestUserInteraction &lt; parameters().minimumTimeBetweenDataRecordsRemoval)
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; 😳
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; LayoutTests/ChangeLog:7
&gt; &gt; &gt; &gt; &gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Please add a comment on that the case of data deletion are already tested
&gt; &gt; &gt; &gt; &gt; and that these new tests only need to check for the absence of deletion.
&gt; &gt; &gt; &gt; &gt; Also add a comment on which test case(s) started failing once you corrected
&gt; &gt; &gt; &gt; &gt; the issue, if any.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Yes, doing this I realized these new tests can replace the old 7-day
&gt; &gt; &gt; &gt; deletion tests because they cover that test case already. Patch-for-landing
&gt; &gt; &gt; &gt; will remove the old ones.
&gt; &gt; &gt; 
&gt; &gt; &gt; That was not what I meant. I thought the old tests check the case when data
&gt; &gt; &gt; *should* be deleted. But maybe there are *also* previous tests that data was
&gt; &gt; &gt; retained?
&gt; &gt; 
&gt; &gt; I think I see what you&apos;re saying. This is just about the non-cookie website
&gt; &gt; data deletion.
&gt; 
&gt; All tests check for proper data deletion for expired statistics. The new
&gt; 7-day test checks for deletion when including a statistic with -1 as the
&gt; mostRecentUserInteraction time and with parameters().isRunningTest disabled.
&gt; This covered the other case, and it didn&apos;t make sense to keep the other
&gt; 7-day data deletion test because it doesn&apos;t test actual behavior (because of
&gt; the parameters().isRunningTest()).

In fact, the other test was giving us a false-positive, which is probably worse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657054</commentid>
    <comment_count>13</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-05-28 15:35:45 -0700</bug_when>
    <thetext>Committed r262265: &lt;https://trac.webkit.org/changeset/262265&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 400508.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400406</attachid>
            <date>2020-05-27 17:09:13 -0700</date>
            <delta_ts>2020-05-28 14:48:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212445-20200527170913.patch</filename>
            <type>text/plain</type>
            <size>36271</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDc4NTVlZjdjMTBjZTYzMmNj
YWNkZjU2NmMyYjRlMzExOTcxZmY1YWMuLjhhZmEzOWMwMDc2MTMyNDU1NGM1ZWE5NDE2NDBiNjI4
ZDhjZDllNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMjAtMDUtMjcgIEthdGUgQ2hl
bmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgTWluaW11bSB1c2Vy
IGludGVyYWN0aW9uIHRpbWUgaW4gUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBzaG91bGQgaGFuZGxl
IHRoZSBjYXNlIG9mIC0xCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTI0NDUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYzNjk2NDcwPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBodHRwL3Rl
c3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvb3BlcmF0aW5nLWRhdGVzLWFsbC1idXQtY29va2ll
cy1yZW1vdmVkLXN0YXRpc3RpY3Mtd2l0aC1uby11c2VyLWludGVyYWN0aW9uLWRhdGFiYXNlLmh0
bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9vcGVy
YXRpbmctZGF0ZXMtYWxsLWJ1dC1jb29raWVzLXJlbW92ZWQtc3RhdGlzdGljcy13aXRoLW5vLXVz
ZXItaW50ZXJhY3Rpb24uaHRtbAorCisgICAgICAgIEFkZHMgYSBnZXR0ZXIgZm9yIG1vc3RSZWNl
bnRVc2VySW50ZXJhY3Rpb25UaW1lIHdoaWNoIHJldHVybnMgV1RGOjpudWxsb3B0IGlmIHRoZSAK
KyAgICAgICAgdGltZXN0YW1wIGlzIC0xLiBUaGVuIGRvZXMgbm90IGNvbnNpZGVyIHRoaXMgY2Fz
ZSBpbiBjYWxjdWxhdGluZyB0aGUKKyAgICAgICAgbWluaW11bSB0aW1lc3RhbXAuCisKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmdldE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlZ2lzdHJhYmxl
RG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yKToKKyAgICAgICAgRmxpcCBz
aWduIHRvIGJlIGxlc3MgdGhhbiwgc28gd2UgaG9sZCBvZmYgb24gZGVsZXRpbmcgZGF0YSBpZiB0
aGUKKyAgICAgICAgb2xkZXN0IGludGVyYWN0aW9uIHdhcyBsZXNzIHRoYW4gdGhlIG1pbmltdW0g
dGltZSBiZXR3ZWVuIHJlbW92YWwuIAorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpnZXRNb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVnaXN0cmFibGVEb21haW5zVG9EZWxl
dGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IpOgorICAgICAgICBGbGlwIHNpZ24gdG8gYmUgbGVz
cyB0aGFuLCBzbyB3ZSBob2xkIG9mZiBvbiBkZWxldGluZyBkYXRhIGlmIHRoZQorICAgICAgICBv
bGRlc3QgaW50ZXJhY3Rpb24gd2FzIGxlc3MgdGhhbiB0aGUgbWluaW11bSB0aW1lIGJldHdlZW4g
cmVtb3ZhbC4gCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oOgorCiAyMDIwLTA1LTI3ICBNaWNoYWVsIENhdGFu
emFybyAgPG1jYXRhbnphcm9AZ25vbWUub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI2MDMx
OCk6IFtXUEVdW0dUS10gVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBpbiBNZW1vcnlQcmVzc3Vy
ZU1vbml0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmUuY3BwCmluZGV4IGNmNThjNmMxNzM3MjY0NTY2M2RkY2M4MjMwNzEyNjJhOTUxN2M1
YTUuLjIxNTE1NzEwNGI3ZmE2MThkZDgxNmY0ZTdhNTI2ZWIyMWFjNTQxMzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcApAQCAt
MjUzOSw2ICsyNTM5LDE0IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0cmljdEZvcihEb21haW5ECiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCitPcHRpb25hbDxXYWxsVGltZT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6Om1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKERvbWFpbkRhdGEmIHN0YXRp
c3RpYykKK3sKKyAgICBpZiAoc3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1l
LnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSA8PSAwKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgcmV0dXJuIHN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9u
VGltZTsKK30KKwogUmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURh
dGFGb3IgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlZ2lzdHJhYmxlRG9t
YWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yKCkKIHsKICAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKQEAgLTI1NjAsNyArMjU2OCw5IEBAIFJlZ2lzdHJhYmxlRG9tYWlu
c1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzCiAgICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBkb21haW5zKSB7CiAgICAgICAgIGlm
IChzaG91bGRFeGVtcHRGcm9tV2Vic2l0ZURhdGFEZWxldGlvbihzdGF0aXN0aWMucmVnaXN0cmFi
bGVEb21haW4pKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG9sZGVzdFVzZXJJbnRl
cmFjdGlvbiA9IHN0ZDo6bWluKG9sZGVzdFVzZXJJbnRlcmFjdGlvbiwgc3RhdGlzdGljLm1vc3RS
ZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKTsKKyAgICAgICAgYXV0byBtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uVGltZSA9IHRoaXMtPm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKHN0YXRp
c3RpYyk7CisgICAgICAgIGlmIChtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSkKKyAgICAg
ICAgICAgIG9sZGVzdFVzZXJJbnRlcmFjdGlvbiA9IHN0ZDo6bWluKG9sZGVzdFVzZXJJbnRlcmFj
dGlvbiwgKm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKTsKICAgICAgICAgaWYgKHNob3Vs
ZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKHN0YXRpc3RpYywgc2hvdWxkQ2hlY2tGb3JHcmFuZGZh
dGhlcmluZykpIHsKICAgICAgICAgICAgIHRvRGVsZXRlT3JSZXN0cmljdEZvci5kb21haW5zVG9E
ZWxldGVBbGxDb29raWVzRm9yLmFwcGVuZChzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pOwog
ICAgICAgICAgICAgdG9EZWxldGVPclJlc3RyaWN0Rm9yLmRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNv
b2tpZVdlYnNpdGVEYXRhRm9yLmFwcGVuZChzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pOwpA
QCAtMjU4Myw3ICsyNTkzLDcgQEAgUmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0
V2Vic2l0ZURhdGFGb3IgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXMKICAgICB9CiAKICAg
ICAvLyBHaXZlIHRoZSB1c2VyIGVub3VnaCB0aW1lIHRvIGludGVyYWN0IHdpdGggd2Vic2l0ZXMg
dW50aWwgd2UgcmVtb3ZlIG5vbi1jb29raWUgd2Vic2l0ZSBkYXRhLgotICAgIGlmICghcGFyYW1l
dGVycygpLmlzUnVubmluZ1Rlc3QgJiYgbm93IC0gb2xkZXN0VXNlckludGVyYWN0aW9uID4gcGFy
YW1ldGVycygpLm1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCkKKyAgICBpZiAo
IXBhcmFtZXRlcnMoKS5pc1J1bm5pbmdUZXN0ICYmIG5vdyAtIG9sZGVzdFVzZXJJbnRlcmFjdGlv
biA8IHBhcmFtZXRlcnMoKS5taW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwpCiAg
ICAgICAgIHRvRGVsZXRlT3JSZXN0cmljdEZvci5kb21haW5zVG9EZWxldGVBbGxOb25Db29raWVX
ZWJzaXRlRGF0YUZvci5jbGVhcigpOwogCiAgICAgY2xlYXJHcmFuZGZhdGhlcmluZyhXVEZNb3Zl
KGRvbWFpbklEc1RvQ2xlYXJHcmFuZGZhdGhlcmluZykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaAppbmRleCBhMDQ3ZGY3NzYwMDgzOGZh
YTgwMzdmNzRhNmE4ODU4YzJkNjg4OGE0Li5jMDNlNDIyMjEzNzY1ZTVhN2RjMjZlYmUwN2Y5NDA3
MzdhMDhkZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNz
aWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmUuaApAQCAtMjQxLDYgKzI0MSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBjcmVh
dGVVbmlxdWVJbmRpY2VzKCk7CiAgICAgYm9vbCBjcmVhdGVTY2hlbWEoKTsKICAgICBTdHJpbmcg
ZW5zdXJlQW5kTWFrZURvbWFpbkxpc3QoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4m
KTsKKyAgICBPcHRpb25hbDxXYWxsVGltZT4gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUo
RG9tYWluRGF0YSYpOwogICAgIAogICAgIGNvbnN0IFN0cmluZyBtX3N0b3JhZ2VEaXJlY3RvcnlQ
YXRoOwogICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAKaW5k
ZXggNjBjYTUyNzA2NTI0OGYzNDNhOTQwYTA4YWQxMmFiMmMzMjI2Zjg2ZS4uMzM4YWM4YjdmMjFk
NTE5MmI5MzVhOTA3ZDA1M2IyMDE0NTI4YTg1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAKQEAgLTk2OCw2ICs5NjgsMTQgQEAgYm9v
bCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNob3VsZEVuZm9yY2VTYW1lU2l0
ZVN0cmljdEZvcihSZXNvdXJjZUwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK09wdGlvbmFsPFdh
bGxUaW1lPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Om1vc3RSZWNlbnRVc2Vy
SW50ZXJhY3Rpb25UaW1lKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpYykKK3sKKyAg
ICBpZiAoc3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLnNlY29uZHNTaW5j
ZUVwb2NoKCkudmFsdWUoKSA8PSAwKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisg
ICAgcmV0dXJuIHN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZTsKK30KKwog
UmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZU9y
UmVzdHJpY3RXZWJzaXRlRGF0YUZvcigpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CkBAIC05ODQsNyArOTkyLDkgQEAgUmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3Ry
aWN0V2Vic2l0ZURhdGFGb3IgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVMKICAgICBmb3Ig
KGF1dG8mIHN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7CiAg
ICAgICAgIGlmIChzaG91bGRFeGVtcHRGcm9tV2Vic2l0ZURhdGFEZWxldGlvbihzdGF0aXN0aWMu
cmVnaXN0cmFibGVEb21haW4pKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG9sZGVz
dFVzZXJJbnRlcmFjdGlvbiA9IHN0ZDo6bWluKG9sZGVzdFVzZXJJbnRlcmFjdGlvbiwgc3RhdGlz
dGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKTsKKyAgICAgICAgYXV0byBtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uVGltZSA9IHRoaXMtPm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25U
aW1lKHN0YXRpc3RpYyk7CisgICAgICAgIGlmIChtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGlt
ZSkKKyAgICAgICAgICAgIG9sZGVzdFVzZXJJbnRlcmFjdGlvbiA9IHN0ZDo6bWluKG9sZGVzdFVz
ZXJJbnRlcmFjdGlvbiwgKm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKTsKICAgICAgICAg
aWYgKHNob3VsZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKHN0YXRpc3RpYywgc2hvdWxkQ2hlY2tG
b3JHcmFuZGZhdGhlcmluZykpIHsKICAgICAgICAgICAgIHRvRGVsZXRlT3JSZXN0cmljdEZvci5k
b21haW5zVG9EZWxldGVBbGxDb29raWVzRm9yLmFwcGVuZChzdGF0aXN0aWMucmVnaXN0cmFibGVE
b21haW4pOwogICAgICAgICAgICAgdG9EZWxldGVPclJlc3RyaWN0Rm9yLmRvbWFpbnNUb0RlbGV0
ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yLmFwcGVuZChzdGF0aXN0aWMucmVnaXN0cmFibGVE
b21haW4pOwpAQCAtMTAwOCw3ICsxMDE4LDcgQEAgUmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVP
clJlc3RyaWN0V2Vic2l0ZURhdGFGb3IgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVMKICAg
ICB9CiAKICAgICAvLyBHaXZlIHRoZSB1c2VyIGVub3VnaCB0aW1lIHRvIGludGVyYWN0IHdpdGgg
d2Vic2l0ZXMgdW50aWwgd2UgcmVtb3ZlIG5vbi1jb29raWUgd2Vic2l0ZSBkYXRhLgotICAgIGlm
ICghcGFyYW1ldGVycygpLmlzUnVubmluZ1Rlc3QgJiYgbm93IC0gb2xkZXN0VXNlckludGVyYWN0
aW9uID4gcGFyYW1ldGVycygpLm1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCkK
KyAgICBpZiAoIXBhcmFtZXRlcnMoKS5pc1J1bm5pbmdUZXN0ICYmIG5vdyAtIG9sZGVzdFVzZXJJ
bnRlcmFjdGlvbiA8IHBhcmFtZXRlcnMoKS5taW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1Jl
bW92YWwpCiAgICAgICAgIHRvRGVsZXRlT3JSZXN0cmljdEZvci5kb21haW5zVG9EZWxldGVBbGxO
b25Db29raWVXZWJzaXRlRGF0YUZvci5jbGVhcigpOwogCiAgICAgcmV0dXJuIHRvRGVsZXRlT3JS
ZXN0cmljdEZvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmUuaAppbmRleCA3NzY1Y2NhYmUyNTU5NGQ4Y2JkMjEwN2NhMTg2MDdiNDYzZDlmMjRhLi5m
NDdlNTMwOGVlZTA0YjgwNmI0ODE5MzczYzg5NGM1YWYxMzYzMzJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oCkBAIC0xNDMsNiArMTQzLDcg
QEAgcHJpdmF0ZToKICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOwog
ICAgIFJlZ2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yIHJl
Z2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yKCkgb3ZlcnJp
ZGU7CiAgICAgYm9vbCBpc01lbW9yeVN0b3JlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIE9wdGlvbmFsPFdhbGxUaW1lPiBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZShS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CiAKICAgICBXZWFrUHRyPFJlc291cmNlTG9hZFN0YXRp
c3RpY3NQZXJzaXN0ZW50U3RvcmFnZT4gbV9wZXJzaXN0ZW50U3RvcmFnZTsKICAgICBIYXNoTWFw
PFJlZ2lzdHJhYmxlRG9tYWluLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBtX3Jlc291cmNlU3Rh
dGlzdGljc01hcDsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwppbmRleCBhNDM5ZjFkNmY4YzIzYjYzOGU3YTU3NTU4N2I5MDQ5ODMzMzYw
YWQwLi5iODRmNGIzYjQ1YWRhMWI2M2MzMTY4NDVjNDQxNWMwODkwM2VmN2EyIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTYgQEAKKzIwMjAtMDUtMjcgIEthdGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5leUBh
cHBsZS5jb20+CisKKyAgICAgICAgTWluaW11bSB1c2VyIGludGVyYWN0aW9uIHRpbWUgaW4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyBzaG91bGQgaGFuZGxlIHRoZSBjYXNlIG9mIC0xCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI0NDUKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzYzNjk2NDcwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL29w
ZXJhdGluZy1kYXRlcy1hbGwtYnV0LWNvb2tpZXMtcmVtb3ZlZC1zdGF0aXN0aWNzLXdpdGgtbm8t
dXNlci1pbnRlcmFjdGlvbi1kYXRhYmFzZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9vcGVyYXRpbmctZGF0ZXMtYWxsLWJ1
dC1jb29raWVzLXJlbW92ZWQtc3RhdGlzdGljcy13aXRoLW5vLXVzZXItaW50ZXJhY3Rpb24tZGF0
YWJhc2UuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzL29wZXJhdGluZy1kYXRlcy1hbGwtYnV0LWNvb2tpZXMtcmVtb3ZlZC1zdGF0aXN0aWNz
LXdpdGgtbm8tdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9vcGVyYXRpbmctZGF0ZXMtYWxsLWJ1
dC1jb29raWVzLXJlbW92ZWQtc3RhdGlzdGljcy13aXRoLW5vLXVzZXItaW50ZXJhY3Rpb24uaHRt
bDogQWRkZWQuCisKIDIwMjAtMDUtMjcgIExhdXJvIE1vdXJhICA8bG1vdXJhQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW1dQRV0gQXZvaWQgcG9zc2libGUgV1RSIGV2ZW50IHRpbWluZyBnb2luZyBi
YWNrIGluIHRpbWUgYW5kIGZpeCBjb252ZXJzaW9uIGZyb20gcyB0byBtcwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL29wZXJhdGluZy1k
YXRlcy1hbGwtYnV0LWNvb2tpZXMtcmVtb3ZlZC1zdGF0aXN0aWNzLXdpdGgtbm8tdXNlci1pbnRl
cmFjdGlvbi1kYXRhYmFzZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jl
c291cmNlTG9hZFN0YXRpc3RpY3Mvb3BlcmF0aW5nLWRhdGVzLWFsbC1idXQtY29va2llcy1yZW1v
dmVkLXN0YXRpc3RpY3Mtd2l0aC1uby11c2VyLWludGVyYWN0aW9uLWRhdGFiYXNlLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mNWE1ZWEyNDEwODVlNGI1MTFhODEwZjg5NmFjNGUzNDk5YTg0NzQw
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzL29wZXJhdGluZy1kYXRlcy1hbGwtYnV0LWNvb2tpZXMtcmVtb3ZlZC1zdGF0aXN0
aWNzLXdpdGgtbm8tdXNlci1pbnRlcmFjdGlvbi1kYXRhYmFzZS1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxNCBAQAorCitCZWZvcmUgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBDbGllbnQtc2lkZSBj
b29raWUgZXhpc3RzLgorQmVmb3JlIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogSHR0cE9ubHkgY29v
a2llIGV4aXN0cy4KK0JlZm9yZSBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IFJlZ3VsYXIgc2VydmVy
LXNpZGUgY29va2llIGV4aXN0cy4KK0JlZm9yZSBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IExvY2Fs
U3RvcmFnZSBlbnRyeSBkb2VzIGV4aXN0LgorQmVmb3JlIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzog
SURCIGVudHJ5IGRvZXMgZXhpc3QuCisKK0FmdGVyIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogSHR0
cE9ubHkgY29va2llIGV4aXN0cy4KK0FmdGVyIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogQ2xpZW50
LXNpZGUgY29va2llIGV4aXN0cy4KK0FmdGVyIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogUmVndWxh
ciBzZXJ2ZXItc2lkZSBjb29raWUgZXhpc3RzLgorQWZ0ZXIgc3RhdGlzdGljcyBwcm9jZXNzaW5n
OiBMb2NhbFN0b3JhZ2UgZW50cnkgZG9lcyBub3QgZXhpc3QuCitBZnRlciBzdGF0aXN0aWNzIHBy
b2Nlc3Npbmc6IElEQiBlbnRyeSBkb2VzIG5vdCBleGlzdC4KKworCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvb3BlcmF0aW5nLWRhdGVz
LWFsbC1idXQtY29va2llcy1yZW1vdmVkLXN0YXRpc3RpY3Mtd2l0aC1uby11c2VyLWludGVyYWN0
aW9uLWRhdGFiYXNlLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0
YXRpc3RpY3Mvb3BlcmF0aW5nLWRhdGVzLWFsbC1idXQtY29va2llcy1yZW1vdmVkLXN0YXRpc3Rp
Y3Mtd2l0aC1uby11c2VyLWludGVyYWN0aW9uLWRhdGFiYXNlLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Zi
ZThmODFhN2JhMzcxOTI2YzZiNmMyMmRhMTA2YTk0YmRlMjc5NgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9vcGVyYXRpbmct
ZGF0ZXMtYWxsLWJ1dC1jb29raWVzLXJlbW92ZWQtc3RhdGlzdGljcy13aXRoLW5vLXVzZXItaW50
ZXJhY3Rpb24tZGF0YWJhc2UuaHRtbApAQCAtMCwwICsxLDI1OCBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSIvY29va2llcy9yZXNvdXJjZXMvY29v
a2llLXV0aWxpdGllcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy91
dGlsLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ic2V0VGltZW91dCgncnVu
VGVzdCgpJywgMCkiPgorPGJyPgorPGRpdiBpZD0ib3V0cHV0Ij48L2Rpdj4KKzxicj4KKzxzY3Jp
cHQ+CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgdGVzdFJ1bm5lci5kdW1w
QXNUZXh0KCk7CisgICAgdGVzdFJ1bm5lci5zZXRVc2VJVFBEYXRhYmFzZSh0cnVlKTsKKworICAg
IGNvbnN0IGh0dHBPbmx5Q29va2llTmFtZSA9ICJodHRwLW9ubHktY29va2llIjsKKyAgICBjb25z
dCBzZXJ2ZXJTaWRlQ29va2llTmFtZSA9ICJzZXJ2ZXItc2lkZS1jb29raWUiOworICAgIGNvbnN0
IGNsaWVudFNpZGVDb29raWVOYW1lID0gImNsaWVudC1zaWRlLWNvb2tpZSI7CisKKyAgICBmdW5j
dGlvbiBzb3J0U3RyaW5nQXJyYXkoYSwgYikgeworICAgICAgICBhID0gYS50b0xvd2VyQ2FzZSgp
OworICAgICAgICBiID0gYi50b0xvd2VyQ2FzZSgpOworCisgICAgICAgIHJldHVybiBhID4gYiA/
IDEgOiBiID4gYSA/IC0xIDogMDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhZGRMaW5lYnJlYWtU
b091dHB1dCgpIHsKKyAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJiciIpOworICAgICAgICBvdXRwdXQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gYWRkT3V0cHV0KG1lc3NhZ2UpIHsKKyAgICAgICAgbGV0IGVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgZWxlbWVudC5pbm5lclRleHQg
PSBtZXNzYWdlOworICAgICAgICBvdXRwdXQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gY2hlY2tDb29raWVzKGlzQWZ0ZXJEZWxldGlvbikgeworICAgICAgICBs
ZXQgdW5zb3J0ZWRUZXN0UGFzc2VkTWVzc2FnZXMgPSBbXTsKKyAgICAgICAgbGV0IGNvb2tpZXMg
PSBpbnRlcm5hbHMuZ2V0Q29va2llcygpOworICAgICAgICBpZiAoIWNvb2tpZXMubGVuZ3RoICYm
IGlzQWZ0ZXJEZWxldGlvbikKKyAgICAgICAgICAgIGFkZE91dHB1dCgiRkFJTDogIiArICJObyBj
b29raWVzIGZvdW5kLiIpOworICAgICAgICBmb3IgKGxldCBjb29raWUgb2YgY29va2llcykgewor
ICAgICAgICAgICAgc3dpdGNoIChjb29raWUubmFtZSkgeworICAgICAgICAgICAgICAgIGNhc2Ug
aHR0cE9ubHlDb29raWVOYW1lOgorICAgICAgICAgICAgICAgICAgICB1bnNvcnRlZFRlc3RQYXNz
ZWRNZXNzYWdlcy5wdXNoKChpc0FmdGVyRGVsZXRpb24gPyAiQWZ0ZXIiIDogIkJlZm9yZSIpICsg
IiBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6ICIgKyAoaXNBZnRlckRlbGV0aW9uID8gIiAiIDogIiIp
ICsgIkh0dHBPbmx5IGNvb2tpZSBleGlzdHMuIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2Ugc2VydmVyU2lkZUNvb2tpZU5hbWU6CisgICAgICAgICAg
ICAgICAgICAgIHVuc29ydGVkVGVzdFBhc3NlZE1lc3NhZ2VzLnB1c2goKGlzQWZ0ZXJEZWxldGlv
biA/ICJBZnRlciIgOiAiQmVmb3JlIikgKyAiIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogUmVndWxh
ciBzZXJ2ZXItc2lkZSBjb29raWUgZXhpc3RzLiIpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIGNsaWVudFNpZGVDb29raWVOYW1lOgorICAgICAgICAg
ICAgICAgICAgICB1bnNvcnRlZFRlc3RQYXNzZWRNZXNzYWdlcy5wdXNoKChpc0FmdGVyRGVsZXRp
b24gPyAiQWZ0ZXIiIDogIkJlZm9yZSIpICsgIiBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IENsaWVu
dC1zaWRlIGNvb2tpZSBleGlzdHMuIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGxldCBzb3J0ZWRUZXN0UGFzc2VkTWVzc2Fn
ZXMgPSB1bnNvcnRlZFRlc3RQYXNzZWRNZXNzYWdlcy5zb3J0KHNvcnRTdHJpbmdBcnJheSk7Cisg
ICAgICAgIGZvciAobGV0IHRlc3RQYXNzZWRNZXNzYWdlIG9mIHNvcnRlZFRlc3RQYXNzZWRNZXNz
YWdlcykgeworICAgICAgICAgICAgYWRkT3V0cHV0KHRlc3RQYXNzZWRNZXNzYWdlKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGNvbnN0IGRiTmFtZSA9ICJUZXN0RGF0YWJhc2UiOworCisgICAg
ZnVuY3Rpb24gY3JlYXRlSURCRGF0YVN0b3JlKGNhbGxiYWNrKSB7CisgICAgICAgIGxldCByZXF1
ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGJOYW1lKTsKKyAgICAgICAgcmVxdWVzdC5vbmVycm9yID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBhZGRPdXRwdXQoIkNvdWxkbid0IGNyZWF0ZSBpbmRl
eGVkREIuIik7CisgICAgICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAgICAgIH07CisgICAgICAg
IHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAg
IGxldCBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgICAgICBsZXQgb2JqU3RvcmUg
PSBkYi5jcmVhdGVPYmplY3RTdG9yZSgidGVzdCIsIHthdXRvSW5jcmVtZW50OiB0cnVlfSk7Cisg
ICAgICAgICAgICBvYmpTdG9yZS5hZGQoInZhbHVlIik7CisgICAgICAgICAgICBjYWxsYmFjaygp
OworICAgICAgICB9CisgICAgfQorCisgICAgY29uc3QgbWF4SW50ZXJ2YWxzID0gMjA7CisKKyAg
ICBsZXQgaW50ZXJ2YWxDb3VudGVySURCOworICAgIGxldCBjaGVja0lEQkNhbGxiYWNrOworICAg
IGxldCBjaGVja0lEQkludGVydmFsSUQ7CisgICAgbGV0IHNlbWFwaG9yZUlEQkNoZWNrID0gZmFs
c2U7CisgICAgZnVuY3Rpb24gY2hlY2tJREJEYXRhU3RvcmVFeGlzdHMoaXNBZnRlckRlbGV0aW9u
LCBjYWxsYmFjaykgeworICAgICAgICBsZXQgcmVxdWVzdDsKKyAgICAgICAgaW50ZXJ2YWxDb3Vu
dGVySURCID0gMDsKKyAgICAgICAgY2hlY2tJREJDYWxsYmFjayA9IGNhbGxiYWNrOworICAgICAg
ICBpZiAoIWlzQWZ0ZXJEZWxldGlvbikgeworICAgICAgICAgICAgLy8gQ2hlY2sgdW50aWwgdGhl
cmUgaXMgYSBJREIuCisgICAgICAgICAgICBjaGVja0lEQkludGVydmFsSUQgPSBzZXRJbnRlcnZh
bChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2VtYXBob3JlSURCQ2hlY2spCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBzZW1hcGhvcmVJREJD
aGVjayA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBpZiAoKytpbnRlcnZhbENvdW50ZXJJREIg
Pj0gbWF4SW50ZXJ2YWxzKSB7CisgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2hl
Y2tJREJJbnRlcnZhbElEKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkT3V0cHV0KCJCZWZvcmUg
c3RhdGlzdGljcyBwcm9jZXNzaW5nOiBJREIgZW50cnkgZG9lcyBub3QgZXhpc3QuIik7CisgICAg
ICAgICAgICAgICAgICAgIHNlbWFwaG9yZUlEQkNoZWNrID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIGNoZWNrSURCQ2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGJOYW1lKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0lEQkludGVydmFsSUQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkT3V0cHV0KCJDb3VsZG4ndCBvcGVuIGluZGV4ZWREQi4iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9yZUlEQkNoZWNrID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSBuZXh0IGludGVydmFsIGNo
ZWNrIGFnYWluLgorICAgICAgICAgICAgICAgICAgICAgICAgc2VtYXBob3JlSURCQ2hlY2sgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgcmVxdWVz
dC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjbGVh
ckludGVydmFsKGNoZWNrSURCSW50ZXJ2YWxJRCk7CisgICAgICAgICAgICAgICAgICAgICAgICBh
ZGRPdXRwdXQoIkJlZm9yZSBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IElEQiBlbnRyeSBkb2VzIGV4
aXN0LiIpOworICAgICAgICAgICAgICAgICAgICAgICAgc2VtYXBob3JlSURCQ2hlY2sgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrSURCQ2FsbGJhY2soKTsKKyAgICAgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LCAyMDApOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQ2hlY2sgdW50aWwgdGhlcmUgaXMgbm8g
SURCLgorICAgICAgICAgICAgY2hlY2tJREJJbnRlcnZhbElEID0gc2V0SW50ZXJ2YWwoZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgICAgIGlmIChzZW1hcGhvcmVJREJDaGVjaykKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHNlbWFwaG9yZUlEQkNoZWNrID0g
dHJ1ZTsKKworICAgICAgICAgICAgICAgIGlmICgrK2ludGVydmFsQ291bnRlcklEQiA+PSBtYXhJ
bnRlcnZhbHMpIHsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0lEQklu
dGVydmFsSUQpOworICAgICAgICAgICAgICAgICAgICBhZGRPdXRwdXQoIkFmdGVyIHN0YXRpc3Rp
Y3MgcHJvY2Vzc2luZzogSURCIGVudHJ5IGRvZXMgZXhpc3QuIik7CisgICAgICAgICAgICAgICAg
ICAgIHNlbWFwaG9yZUlEQkNoZWNrID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGNoZWNr
SURCQ2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGJOYW1lKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgY2xlYXJJbnRlcnZhbChjaGVja0lEQkludGVydmFsSUQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkT3V0cHV0KCJDb3VsZG4ndCBvcGVuIGluZGV4ZWREQi4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbWFwaG9yZUlEQkNoZWNrID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0lEQkludGVydmFsSUQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkT3V0cHV0KCJBZnRlciBzdGF0aXN0aWNzIHByb2Nlc3Np
bmc6IElEQiBlbnRyeSBkb2VzIG5vdCBleGlzdC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNlbWFwaG9yZUlEQkNoZWNrID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5p
c2hUZXN0KCk7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIHJl
cXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gTGV0IHRoZSBuZXh0IGludGVydmFsIGNoZWNrIGFnYWluIGJlY2F1c2UgZGVsZXRpb24gbWln
aHQgYmUgZGVsYXllZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9yZUlEQkNoZWNr
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSwgMjAwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxldCBpbnRlcnZhbENv
dW50ZXJMb2NhbFN0b3JhZ2U7CisgICAgbGV0IGNoZWNrTG9jYWxTdG9yYWdlQ2FsbGJhY2s7Cisg
ICAgbGV0IGNoZWNrTG9jYWxTdG9yYWdlSW50ZXJ2YWxJRDsKKyAgICBjb25zdCBsb2NhbFN0b3Jh
Z2VOYW1lID0gInRlc3QiOworICAgIGNvbnN0IGxvY2FsU3RvcmFnZVZhbHVlID0gInZhbHVlIjsK
KyAgICBmdW5jdGlvbiBjaGVja0xvY2FsU3RvcmFnZUV4aXN0cyhpc0FmdGVyRGVsZXRpb24sIGNh
bGxiYWNrKSB7CisgICAgICAgIGludGVydmFsQ291bnRlckxvY2FsU3RvcmFnZSA9IDA7CisgICAg
ICAgIGNoZWNrTG9jYWxTdG9yYWdlQ2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICAgICAgaWYgKCFp
c0FmdGVyRGVsZXRpb24pIHsKKyAgICAgICAgICAgIC8vIENoZWNrIHVudGlsIHRoZXJlIGlzIExv
Y2FsU3RvcmFnZS4KKyAgICAgICAgICAgIGNoZWNrTG9jYWxTdG9yYWdlSW50ZXJ2YWxJRCA9IHNl
dEludGVydmFsKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICgrK2ludGVydmFsQ291
bnRlckxvY2FsU3RvcmFnZSA+PSBtYXhJbnRlcnZhbHMpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2xlYXJJbnRlcnZhbChjaGVja0xvY2FsU3RvcmFnZUludGVydmFsSUQpOworICAgICAgICAgICAg
ICAgICAgICBsZXQgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShsb2NhbFN0b3JhZ2VOYW1l
KTsKKyAgICAgICAgICAgICAgICAgICAgYWRkT3V0cHV0KCJCZWZvcmUgc3RhdGlzdGljcyBwcm9j
ZXNzaW5nOiBMb2NhbFN0b3JhZ2UgZW50cnkgIiArICh2YWx1ZSA9PT0gbG9jYWxTdG9yYWdlVmFs
dWUgPyAiZG9lcyIgOiAiZG9lcyBub3QiKSArICIgZXhpc3QuIik7CisgICAgICAgICAgICAgICAg
ICAgIGNoZWNrTG9jYWxTdG9yYWdlQ2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKHRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdlKG9yaWdpblVuZGVyVGVz
dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0xvY2FsU3RvcmFn
ZUludGVydmFsSUQpOworICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBsb2NhbFN0b3Jh
Z2UuZ2V0SXRlbShsb2NhbFN0b3JhZ2VOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkT3V0
cHV0KCJCZWZvcmUgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBMb2NhbFN0b3JhZ2UgZW50cnkgIiAr
ICh2YWx1ZSA9PT0gbG9jYWxTdG9yYWdlVmFsdWUgPyAiZG9lcyIgOiAiZG9lcyBub3QiKSArICIg
ZXhpc3QuIik7CisgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9jYWxTdG9yYWdlQ2FsbGJhY2so
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LCAxMDApOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gQ2hlY2sgdW50aWwgdGhlcmUgaXMgbm8gTG9jYWxTdG9yYWdl
LgorICAgICAgICAgICAgY2hlY2tMb2NhbFN0b3JhZ2VJbnRlcnZhbElEID0gc2V0SW50ZXJ2YWwo
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCsraW50ZXJ2YWxDb3VudGVyTG9jYWxT
dG9yYWdlID49IG1heEludGVydmFscykgeworICAgICAgICAgICAgICAgICAgICBjbGVhckludGVy
dmFsKGNoZWNrTG9jYWxTdG9yYWdlSW50ZXJ2YWxJRCk7CisgICAgICAgICAgICAgICAgICAgIGxl
dCB2YWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGxvY2FsU3RvcmFnZU5hbWUpOworICAgICAg
ICAgICAgICAgICAgICBhZGRPdXRwdXQoIkFmdGVyIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogTG9j
YWxTdG9yYWdlIGVudHJ5ICIgKyAodmFsdWUgPT09IGxvY2FsU3RvcmFnZVZhbHVlID8gImRvZXMi
IDogImRvZXMgbm90IikgKyAiIGV4aXN0LiIpOworICAgICAgICAgICAgICAgICAgICBjaGVja0xv
Y2FsU3RvcmFnZUNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGVzdFJ1
bm5lci5pc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2Uob3JpZ2luVW5kZXJUZXN0KSkgeworICAg
ICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGNoZWNrTG9jYWxTdG9yYWdlSW50ZXJ2YWxJ
RCk7CisgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVt
KGxvY2FsU3RvcmFnZU5hbWUpOworICAgICAgICAgICAgICAgICAgICBhZGRPdXRwdXQoIkFmdGVy
IHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogTG9jYWxTdG9yYWdlIGVudHJ5ICIgKyAodmFsdWUgPT09
IGxvY2FsU3RvcmFnZVZhbHVlID8gImRvZXMiIDogImRvZXMgbm90IikgKyAiIGV4aXN0LiIpOwor
ICAgICAgICAgICAgICAgICAgICBjaGVja0xvY2FsU3RvcmFnZUNhbGxiYWNrKCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSwgMTAwKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGFzeW5jIGZ1bmN0aW9uIHdyaXRlV2Vic2l0ZURhdGFBbmRDb250aW51ZSgpIHsKKyAgICAgICAg
Ly8gV3JpdGUgY29va2llcy4KKyAgICAgICAgYXdhaXQgZmV0Y2goIi9jb29raWVzL3Jlc291cmNl
cy9zZXQtaHR0cC1vbmx5LWNvb2tpZS5waHA/Y29va2llTmFtZT0iICsgaHR0cE9ubHlDb29raWVO
YW1lLCB7IGNyZWRlbnRpYWxzOiAic2FtZS1vcmlnaW4iIH0pOworICAgICAgICBhd2FpdCBmZXRj
aCgiL2Nvb2tpZXMvcmVzb3VyY2VzL3NldENvb2tpZXMuY2dpIiwgeyBoZWFkZXJzOiB7ICJTZXQt
Q29va2llIjogc2VydmVyU2lkZUNvb2tpZU5hbWUgKyAiPTE7IHBhdGg9LzsiIH0sIGNyZWRlbnRp
YWxzOiAic2FtZS1vcmlnaW4iIH0pOworICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjbGllbnRT
aWRlQ29va2llTmFtZSArICI9MSI7CisKKyAgICAgICAgY2hlY2tDb29raWVzKGZhbHNlKTsKKwor
ICAgICAgICAvLyBXcml0ZSBMb2NhbFN0b3JhZ2UKKyAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0
ZW0obG9jYWxTdG9yYWdlTmFtZSwgbG9jYWxTdG9yYWdlVmFsdWUpOworICAgICAgICBjaGVja0xv
Y2FsU3RvcmFnZUV4aXN0cyhmYWxzZSwgZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgIC8vIFdy
aXRlIEluZGV4ZWREQi4KKyAgICAgICAgICAgIGNyZWF0ZUlEQkRhdGFTdG9yZShmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICAgICAgY2hlY2tJREJEYXRhU3RvcmVFeGlzdHMoZmFsc2UsIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBhZGRMaW5lYnJlYWtUb091dHB1dCgpOworICAg
ICAgICAgICAgICAgICAgICBwcm9jZXNzV2Vic2l0ZURhdGFBbmRDb250aW51ZSgpOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHByb2Nlc3NXZWJzaXRlRGF0YUFuZENvbnRpbnVlKCkgeworICAgICAgICB0ZXN0
UnVubmVyLmluc3RhbGxTdGF0aXN0aWNzRGlkU2NhbkRhdGFSZWNvcmRzQ2FsbGJhY2soY2hlY2tX
ZWJzaXRlRGF0YUFuZENvbnRpbnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNzUHJv
Y2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNo
ZWNrV2Vic2l0ZURhdGFBbmRDb250aW51ZSgpIHsKKyAgICAgICAgY2hlY2tDb29raWVzKHRydWUp
OworICAgICAgICBjaGVja0xvY2FsU3RvcmFnZUV4aXN0cyh0cnVlLCBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBjaGVja0lEQkRhdGFTdG9yZUV4aXN0cyh0cnVlLCBmaW5pc2hUZXN0KTsKKyAg
ICAgICAgfSk7CisgICAgfQorCisgICAgY29uc3Qgb3JpZ2luVW5kZXJUZXN0ICA9ICJodHRwOi8v
MTI3LjAuMC4xOjgwMDAiOworICAgIGNvbnN0IG90aGVyT3JpZ2luID0gImh0dHA6Ly9sb2NhbGhv
c3Q6ODAwMCI7CisgICAgY29uc3QgdG9wRnJhbWVPcmlnaW4gPSAiaHR0cDovLzEyNy4wLjAuMjo4
MDAwIjsKKworICAgIGNvbnN0IHRpbWVTdGFtcCA9IE1hdGgucm91bmQoKG5ldyBEYXRlKCkpLmdl
dFRpbWUoKSAvIDEwMDApOworICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgICAgIGlm
ICh0ZXN0UnVubmVyLmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihvcmlnaW5VbmRl
clRlc3QpKQorICAgICAgICAgICAgYWRkT3V0cHV0KCJGQUlMOiAiICsgb3JpZ2luVW5kZXJUZXN0
ICsgIiBzdGlsbCBoYXMgdXNlciBpbnRlcmFjdGlvbiBhZnRlciBwcm9jZXNzaW5nLiIpOworICAg
ICAgICByZXNldENvb2tpZXMoKTsKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cisg
ICAgfQorCisgICAgLy8gRG8gbm90IHVzZSBzZXRFbmFibGVGZWF0dXJlIGhlcmUgYmVjYXVzZSB3
ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZWJzaXRlIGRhdGEgZGVsZXRpb24gaXMgbm90IHNraXBwZWQK
KyAgICAvLyBieSB0aGUgcHJlc2VuY2Ugb2YgcGFyYW1ldGVycygpLmlzUnVubmluZ1Rlc3QuCisg
ICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNz
TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKDM2MDApOworICAgICAgICAvLyBN
ZXJnZSBhIHN0YXRpc3RpYyB3aXRoIG5vIHVzZXIgaW50ZXJhY3Rpb24gdG8gY2hlY2sgdGhlIC0x
IGNhc2UuCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc01lcmdlU3RhdGlzdGljKG90
aGVyT3JpZ2luLCB0b3BGcmFtZU9yaWdpbiwgIiIsIHRpbWVTdGFtcCwgZmFsc2UsIC0xLCBmYWxz
ZSwgZmFsc2UsIGZhbHNlLCAwLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIu
c2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlKHRydWUsIGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgICAgICAvLyBpbnNlcnRTdGF0aXN0aWNzRXhwaXJlZFN0YXRp
c3RpYyhkb21haW4sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbiwgaXNTY2hlZHVsZWRGb3JBbGxCdXRD
b29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQpCisgICAgICAgICAgICAgICAgdGVzdFJ1bm5l
ci5zZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpYyhvcmlnaW5VbmRlclRlc3QsIHRydWUsIHRy
dWUsIGZhbHNlLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVXZWJzaXRl
RGF0YUFuZENvbnRpbnVlKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfSk7CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvb3BlcmF0
aW5nLWRhdGVzLWFsbC1idXQtY29va2llcy1yZW1vdmVkLXN0YXRpc3RpY3Mtd2l0aC1uby11c2Vy
LWludGVyYWN0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy9vcGVyYXRpbmctZGF0ZXMtYWxsLWJ1dC1jb29raWVzLXJlbW92ZWQt
c3RhdGlzdGljcy13aXRoLW5vLXVzZXItaW50ZXJhY3Rpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmY1YTVlYTI0MTA4NWU0YjUxMWE4MTBmODk2YWM0ZTM0OTlhODQ3NDAKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvb3Bl
cmF0aW5nLWRhdGVzLWFsbC1idXQtY29va2llcy1yZW1vdmVkLXN0YXRpc3RpY3Mtd2l0aC1uby11
c2VyLWludGVyYWN0aW9uLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE0IEBACisKK0JlZm9yZSBz
dGF0aXN0aWNzIHByb2Nlc3Npbmc6IENsaWVudC1zaWRlIGNvb2tpZSBleGlzdHMuCitCZWZvcmUg
c3RhdGlzdGljcyBwcm9jZXNzaW5nOiBIdHRwT25seSBjb29raWUgZXhpc3RzLgorQmVmb3JlIHN0
YXRpc3RpY3MgcHJvY2Vzc2luZzogUmVndWxhciBzZXJ2ZXItc2lkZSBjb29raWUgZXhpc3RzLgor
QmVmb3JlIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogTG9jYWxTdG9yYWdlIGVudHJ5IGRvZXMgZXhp
c3QuCitCZWZvcmUgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBJREIgZW50cnkgZG9lcyBleGlzdC4K
KworQWZ0ZXIgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBIdHRwT25seSBjb29raWUgZXhpc3RzLgor
QWZ0ZXIgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBDbGllbnQtc2lkZSBjb29raWUgZXhpc3RzLgor
QWZ0ZXIgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBSZWd1bGFyIHNlcnZlci1zaWRlIGNvb2tpZSBl
eGlzdHMuCitBZnRlciBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IExvY2FsU3RvcmFnZSBlbnRyeSBk
b2VzIG5vdCBleGlzdC4KK0FmdGVyIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogSURCIGVudHJ5IGRv
ZXMgbm90IGV4aXN0LgorCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVz
b3VyY2VMb2FkU3RhdGlzdGljcy9vcGVyYXRpbmctZGF0ZXMtYWxsLWJ1dC1jb29raWVzLXJlbW92
ZWQtc3RhdGlzdGljcy13aXRoLW5vLXVzZXItaW50ZXJhY3Rpb24uaHRtbCBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9vcGVyYXRpbmctZGF0ZXMtYWxsLWJ1
dC1jb29raWVzLXJlbW92ZWQtc3RhdGlzdGljcy13aXRoLW5vLXVzZXItaW50ZXJhY3Rpb24uaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hNTViMWFiNmFlZjhkOTQ0NGM0YzE0MmEwNjI2ZjVjMGUxMjFiMjUxCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzL29wZXJhdGluZy1kYXRlcy1hbGwtYnV0LWNvb2tpZXMtcmVtb3ZlZC1zdGF0aXN0aWNz
LXdpdGgtbm8tdXNlci1pbnRlcmFjdGlvbi5odG1sCkBAIC0wLDAgKzEsMjU4IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9Ii9jb29raWVzL3Jlc291
cmNlcy9jb29raWUtdXRpbGl0aWVzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL3V0aWwuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJzZXRUaW1l
b3V0KCdydW5UZXN0KCknLCAwKSI+Cis8YnI+Cis8ZGl2IGlkPSJvdXRwdXQiPjwvZGl2PgorPGJy
PgorPHNjcmlwdD4KKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB0ZXN0UnVu
bmVyLmR1bXBBc1RleHQoKTsKKworICAgIGNvbnN0IGh0dHBPbmx5Q29va2llTmFtZSA9ICJodHRw
LW9ubHktY29va2llIjsKKyAgICBjb25zdCBzZXJ2ZXJTaWRlQ29va2llTmFtZSA9ICJzZXJ2ZXIt
c2lkZS1jb29raWUiOworICAgIGNvbnN0IGNsaWVudFNpZGVDb29raWVOYW1lID0gImNsaWVudC1z
aWRlLWNvb2tpZSI7CisKKyAgICBmdW5jdGlvbiBzb3J0U3RyaW5nQXJyYXkoYSwgYikgeworICAg
ICAgICBhID0gYS50b0xvd2VyQ2FzZSgpOworICAgICAgICBiID0gYi50b0xvd2VyQ2FzZSgpOwor
CisgICAgICAgIHJldHVybiBhID4gYiA/IDEgOiBiID4gYSA/IC0xIDogMDsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBhZGRMaW5lYnJlYWtUb091dHB1dCgpIHsKKyAgICAgICAgbGV0IGVsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpOworICAgICAgICBvdXRwdXQuYXBwZW5kQ2hp
bGQoZWxlbWVudCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gYWRkT3V0cHV0KG1lc3NhZ2UpIHsK
KyAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAg
ICAgICAgZWxlbWVudC5pbm5lclRleHQgPSBtZXNzYWdlOworICAgICAgICBvdXRwdXQuYXBwZW5k
Q2hpbGQoZWxlbWVudCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tDb29raWVzKGlzQWZ0
ZXJEZWxldGlvbikgeworICAgICAgICBsZXQgdW5zb3J0ZWRUZXN0UGFzc2VkTWVzc2FnZXMgPSBb
XTsKKyAgICAgICAgbGV0IGNvb2tpZXMgPSBpbnRlcm5hbHMuZ2V0Q29va2llcygpOworICAgICAg
ICBpZiAoIWNvb2tpZXMubGVuZ3RoICYmIGlzQWZ0ZXJEZWxldGlvbikKKyAgICAgICAgICAgIGFk
ZE91dHB1dCgiRkFJTDogIiArICJObyBjb29raWVzIGZvdW5kLiIpOworICAgICAgICBmb3IgKGxl
dCBjb29raWUgb2YgY29va2llcykgeworICAgICAgICAgICAgc3dpdGNoIChjb29raWUubmFtZSkg
eworICAgICAgICAgICAgICAgIGNhc2UgaHR0cE9ubHlDb29raWVOYW1lOgorICAgICAgICAgICAg
ICAgICAgICB1bnNvcnRlZFRlc3RQYXNzZWRNZXNzYWdlcy5wdXNoKChpc0FmdGVyRGVsZXRpb24g
PyAiQWZ0ZXIiIDogIkJlZm9yZSIpICsgIiBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6ICIgKyAoaXNB
ZnRlckRlbGV0aW9uID8gIiAiIDogIiIpICsgIkh0dHBPbmx5IGNvb2tpZSBleGlzdHMuIik7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ugc2VydmVyU2lk
ZUNvb2tpZU5hbWU6CisgICAgICAgICAgICAgICAgICAgIHVuc29ydGVkVGVzdFBhc3NlZE1lc3Nh
Z2VzLnB1c2goKGlzQWZ0ZXJEZWxldGlvbiA/ICJBZnRlciIgOiAiQmVmb3JlIikgKyAiIHN0YXRp
c3RpY3MgcHJvY2Vzc2luZzogUmVndWxhciBzZXJ2ZXItc2lkZSBjb29raWUgZXhpc3RzLiIpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIGNsaWVudFNp
ZGVDb29raWVOYW1lOgorICAgICAgICAgICAgICAgICAgICB1bnNvcnRlZFRlc3RQYXNzZWRNZXNz
YWdlcy5wdXNoKChpc0FmdGVyRGVsZXRpb24gPyAiQWZ0ZXIiIDogIkJlZm9yZSIpICsgIiBzdGF0
aXN0aWNzIHByb2Nlc3Npbmc6IENsaWVudC1zaWRlIGNvb2tpZSBleGlzdHMuIik7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGxl
dCBzb3J0ZWRUZXN0UGFzc2VkTWVzc2FnZXMgPSB1bnNvcnRlZFRlc3RQYXNzZWRNZXNzYWdlcy5z
b3J0KHNvcnRTdHJpbmdBcnJheSk7CisgICAgICAgIGZvciAobGV0IHRlc3RQYXNzZWRNZXNzYWdl
IG9mIHNvcnRlZFRlc3RQYXNzZWRNZXNzYWdlcykgeworICAgICAgICAgICAgYWRkT3V0cHV0KHRl
c3RQYXNzZWRNZXNzYWdlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IGRiTmFtZSA9
ICJUZXN0RGF0YWJhc2UiOworCisgICAgZnVuY3Rpb24gY3JlYXRlSURCRGF0YVN0b3JlKGNhbGxi
YWNrKSB7CisgICAgICAgIGxldCByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGJOYW1lKTsKKyAg
ICAgICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBhZGRPdXRw
dXQoIkNvdWxkbid0IGNyZWF0ZSBpbmRleGVkREIuIik7CisgICAgICAgICAgICBmaW5pc2hUZXN0
KCk7CisgICAgICAgIH07CisgICAgICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rp
b24oZXZlbnQpIHsKKyAgICAgICAgICAgIGxldCBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7Cisg
ICAgICAgICAgICBsZXQgb2JqU3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgidGVzdCIsIHth
dXRvSW5jcmVtZW50OiB0cnVlfSk7CisgICAgICAgICAgICBvYmpTdG9yZS5hZGQoInZhbHVlIik7
CisgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICB9CisgICAgfQorCisgICAgY29uc3Qg
bWF4SW50ZXJ2YWxzID0gMjA7CisKKyAgICBsZXQgaW50ZXJ2YWxDb3VudGVySURCOworICAgIGxl
dCBjaGVja0lEQkNhbGxiYWNrOworICAgIGxldCBjaGVja0lEQkludGVydmFsSUQ7CisgICAgbGV0
IHNlbWFwaG9yZUlEQkNoZWNrID0gZmFsc2U7CisgICAgZnVuY3Rpb24gY2hlY2tJREJEYXRhU3Rv
cmVFeGlzdHMoaXNBZnRlckRlbGV0aW9uLCBjYWxsYmFjaykgeworICAgICAgICBsZXQgcmVxdWVz
dDsKKyAgICAgICAgaW50ZXJ2YWxDb3VudGVySURCID0gMDsKKyAgICAgICAgY2hlY2tJREJDYWxs
YmFjayA9IGNhbGxiYWNrOworICAgICAgICBpZiAoIWlzQWZ0ZXJEZWxldGlvbikgeworICAgICAg
ICAgICAgLy8gQ2hlY2sgdW50aWwgdGhlcmUgaXMgYSBJREIuCisgICAgICAgICAgICBjaGVja0lE
QkludGVydmFsSUQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoc2VtYXBob3JlSURCQ2hlY2spCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICBzZW1hcGhvcmVJREJDaGVjayA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBp
ZiAoKytpbnRlcnZhbENvdW50ZXJJREIgPj0gbWF4SW50ZXJ2YWxzKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tJREJJbnRlcnZhbElEKTsKKyAgICAgICAgICAgICAg
ICAgICAgYWRkT3V0cHV0KCJCZWZvcmUgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBJREIgZW50cnkg
ZG9lcyBub3QgZXhpc3QuIik7CisgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9yZUlEQkNoZWNr
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGNoZWNrSURCQ2FsbGJhY2soKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gaW5kZXhl
ZERCLm9wZW4oZGJOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5vbmVycm9yID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVj
a0lEQkludGVydmFsSUQpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkT3V0cHV0KCJDb3Vs
ZG4ndCBvcGVuIGluZGV4ZWREQi4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9y
ZUlEQkNoZWNrID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hUZXN0KCk7
CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qub251
cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
TGV0IHRoZSBuZXh0IGludGVydmFsIGNoZWNrIGFnYWluLgorICAgICAgICAgICAgICAgICAgICAg
ICAgc2VtYXBob3JlSURCQ2hlY2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGNoZWNrSURCSW50ZXJ2YWxJRCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhZGRPdXRwdXQoIkJlZm9yZSBzdGF0aXN0aWNzIHByb2Nl
c3Npbmc6IElEQiBlbnRyeSBkb2VzIGV4aXN0LiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
c2VtYXBob3JlSURCQ2hlY2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNr
SURCQ2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9LCAyMDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
Q2hlY2sgdW50aWwgdGhlcmUgaXMgbm8gSURCLgorICAgICAgICAgICAgY2hlY2tJREJJbnRlcnZh
bElEID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGlmIChzZW1h
cGhvcmVJREJDaGVjaykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIHNlbWFwaG9yZUlEQkNoZWNrID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGlmICgrK2lu
dGVydmFsQ291bnRlcklEQiA+PSBtYXhJbnRlcnZhbHMpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2xlYXJJbnRlcnZhbChjaGVja0lEQkludGVydmFsSUQpOworICAgICAgICAgICAgICAgICAgICBh
ZGRPdXRwdXQoIkFmdGVyIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogSURCIGVudHJ5IGRvZXMgZXhp
c3QuIik7CisgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9yZUlEQkNoZWNrID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgIGNoZWNrSURCQ2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGJO
YW1lKTsKKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0lEQkludGVydmFs
SUQpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkT3V0cHV0KCJDb3VsZG4ndCBvcGVuIGlu
ZGV4ZWREQi4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9yZUlEQkNoZWNrID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAgICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVk
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChj
aGVja0lEQkludGVydmFsSUQpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkT3V0cHV0KCJB
ZnRlciBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IElEQiBlbnRyeSBkb2VzIG5vdCBleGlzdC4iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9yZUlEQkNoZWNrID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSBuZXh0IGludGVydmFsIGNoZWNrIGFn
YWluIGJlY2F1c2UgZGVsZXRpb24gbWlnaHQgYmUgZGVsYXllZC4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbWFwaG9yZUlEQkNoZWNrID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgMjAwKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGxldCBpbnRlcnZhbENvdW50ZXJMb2NhbFN0b3JhZ2U7CisgICAgbGV0IGNoZWNr
TG9jYWxTdG9yYWdlQ2FsbGJhY2s7CisgICAgbGV0IGNoZWNrTG9jYWxTdG9yYWdlSW50ZXJ2YWxJ
RDsKKyAgICBjb25zdCBsb2NhbFN0b3JhZ2VOYW1lID0gInRlc3QiOworICAgIGNvbnN0IGxvY2Fs
U3RvcmFnZVZhbHVlID0gInZhbHVlIjsKKyAgICBmdW5jdGlvbiBjaGVja0xvY2FsU3RvcmFnZUV4
aXN0cyhpc0FmdGVyRGVsZXRpb24sIGNhbGxiYWNrKSB7CisgICAgICAgIGludGVydmFsQ291bnRl
ckxvY2FsU3RvcmFnZSA9IDA7CisgICAgICAgIGNoZWNrTG9jYWxTdG9yYWdlQ2FsbGJhY2sgPSBj
YWxsYmFjazsKKyAgICAgICAgaWYgKCFpc0FmdGVyRGVsZXRpb24pIHsKKyAgICAgICAgICAgIC8v
IENoZWNrIHVudGlsIHRoZXJlIGlzIExvY2FsU3RvcmFnZS4KKyAgICAgICAgICAgIGNoZWNrTG9j
YWxTdG9yYWdlSW50ZXJ2YWxJRCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIGlmICgrK2ludGVydmFsQ291bnRlckxvY2FsU3RvcmFnZSA+PSBtYXhJbnRlcnZhbHMp
IHsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0xvY2FsU3RvcmFnZUlu
dGVydmFsSUQpOworICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBsb2NhbFN0b3JhZ2Uu
Z2V0SXRlbShsb2NhbFN0b3JhZ2VOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkT3V0cHV0
KCJCZWZvcmUgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBMb2NhbFN0b3JhZ2UgZW50cnkgIiArICh2
YWx1ZSA9PT0gbG9jYWxTdG9yYWdlVmFsdWUgPyAiZG9lcyIgOiAiZG9lcyBub3QiKSArICIgZXhp
c3QuIik7CisgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9jYWxTdG9yYWdlQ2FsbGJhY2soKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzSGFzTG9j
YWxTdG9yYWdlKG9yaWdpblVuZGVyVGVzdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJJ
bnRlcnZhbChjaGVja0xvY2FsU3RvcmFnZUludGVydmFsSUQpOworICAgICAgICAgICAgICAgICAg
ICBsZXQgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShsb2NhbFN0b3JhZ2VOYW1lKTsKKyAg
ICAgICAgICAgICAgICAgICAgYWRkT3V0cHV0KCJCZWZvcmUgc3RhdGlzdGljcyBwcm9jZXNzaW5n
OiBMb2NhbFN0b3JhZ2UgZW50cnkgIiArICh2YWx1ZSA9PT0gbG9jYWxTdG9yYWdlVmFsdWUgPyAi
ZG9lcyIgOiAiZG9lcyBub3QiKSArICIgZXhpc3QuIik7CisgICAgICAgICAgICAgICAgICAgIGNo
ZWNrTG9jYWxTdG9yYWdlQ2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9LCAxMDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQ2hlY2sgdW50aWwg
dGhlcmUgaXMgbm8gTG9jYWxTdG9yYWdlLgorICAgICAgICAgICAgY2hlY2tMb2NhbFN0b3JhZ2VJ
bnRlcnZhbElEID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYg
KCsraW50ZXJ2YWxDb3VudGVyTG9jYWxTdG9yYWdlID49IG1heEludGVydmFscykgeworICAgICAg
ICAgICAgICAgICAgICBjbGVhckludGVydmFsKGNoZWNrTG9jYWxTdG9yYWdlSW50ZXJ2YWxJRCk7
CisgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGxv
Y2FsU3RvcmFnZU5hbWUpOworICAgICAgICAgICAgICAgICAgICBhZGRPdXRwdXQoIkFmdGVyIHN0
YXRpc3RpY3MgcHJvY2Vzc2luZzogTG9jYWxTdG9yYWdlIGVudHJ5ICIgKyAodmFsdWUgPT09IGxv
Y2FsU3RvcmFnZVZhbHVlID8gImRvZXMiIDogImRvZXMgbm90IikgKyAiIGV4aXN0LiIpOworICAg
ICAgICAgICAgICAgICAgICBjaGVja0xvY2FsU3RvcmFnZUNhbGxiYWNrKCk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2Uo
b3JpZ2luVW5kZXJUZXN0KSkgeworICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGNo
ZWNrTG9jYWxTdG9yYWdlSW50ZXJ2YWxJRCk7CisgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1
ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGxvY2FsU3RvcmFnZU5hbWUpOworICAgICAgICAgICAg
ICAgICAgICBhZGRPdXRwdXQoIkFmdGVyIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogTG9jYWxTdG9y
YWdlIGVudHJ5ICIgKyAodmFsdWUgPT09IGxvY2FsU3RvcmFnZVZhbHVlID8gImRvZXMiIDogImRv
ZXMgbm90IikgKyAiIGV4aXN0LiIpOworICAgICAgICAgICAgICAgICAgICBjaGVja0xvY2FsU3Rv
cmFnZUNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgMTAwKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlV2Vic2l0ZURhdGFB
bmRDb250aW51ZSgpIHsKKyAgICAgICAgLy8gV3JpdGUgY29va2llcy4KKyAgICAgICAgYXdhaXQg
ZmV0Y2goIi9jb29raWVzL3Jlc291cmNlcy9zZXQtaHR0cC1vbmx5LWNvb2tpZS5waHA/Y29va2ll
TmFtZT0iICsgaHR0cE9ubHlDb29raWVOYW1lLCB7IGNyZWRlbnRpYWxzOiAic2FtZS1vcmlnaW4i
IH0pOworICAgICAgICBhd2FpdCBmZXRjaCgiL2Nvb2tpZXMvcmVzb3VyY2VzL3NldENvb2tpZXMu
Y2dpIiwgeyBoZWFkZXJzOiB7ICJTZXQtQ29va2llIjogc2VydmVyU2lkZUNvb2tpZU5hbWUgKyAi
PTE7IHBhdGg9LzsiIH0sIGNyZWRlbnRpYWxzOiAic2FtZS1vcmlnaW4iIH0pOworICAgICAgICBk
b2N1bWVudC5jb29raWUgPSBjbGllbnRTaWRlQ29va2llTmFtZSArICI9MSI7CisKKyAgICAgICAg
Y2hlY2tDb29raWVzKGZhbHNlKTsKKworICAgICAgICAvLyBXcml0ZSBMb2NhbFN0b3JhZ2UKKyAg
ICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obG9jYWxTdG9yYWdlTmFtZSwgbG9jYWxTdG9yYWdl
VmFsdWUpOworICAgICAgICBjaGVja0xvY2FsU3RvcmFnZUV4aXN0cyhmYWxzZSwgZnVuY3Rpb24o
KSB7CisKKyAgICAgICAgICAgIC8vIFdyaXRlIEluZGV4ZWREQi4KKyAgICAgICAgICAgIGNyZWF0
ZUlEQkRhdGFTdG9yZShmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgY2hlY2tJREJEYXRh
U3RvcmVFeGlzdHMoZmFsc2UsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBhZGRM
aW5lYnJlYWtUb091dHB1dCgpOworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzV2Vic2l0ZURh
dGFBbmRDb250aW51ZSgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHByb2Nlc3NXZWJzaXRlRGF0YUFuZENv
bnRpbnVlKCkgeworICAgICAgICB0ZXN0UnVubmVyLmluc3RhbGxTdGF0aXN0aWNzRGlkU2NhbkRh
dGFSZWNvcmRzQ2FsbGJhY2soY2hlY2tXZWJzaXRlRGF0YUFuZENvbnRpbnVlKTsKKyAgICAgICAg
dGVzdFJ1bm5lci5zdGF0aXN0aWNzUHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrV2Vic2l0ZURhdGFBbmRDb250aW51ZSgpIHsKKyAg
ICAgICAgY2hlY2tDb29raWVzKHRydWUpOworICAgICAgICBjaGVja0xvY2FsU3RvcmFnZUV4aXN0
cyh0cnVlLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBjaGVja0lEQkRhdGFTdG9yZUV4aXN0
cyh0cnVlLCBmaW5pc2hUZXN0KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgY29uc3Qgb3Jp
Z2luVW5kZXJUZXN0ICA9ICJodHRwOi8vMTI3LjAuMC4xOjgwMDAiOworICAgIGNvbnN0IG90aGVy
T3JpZ2luID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIKKyAgICBjb25zdCB0b3BGcmFtZU9yaWdp
biA9ICJodHRwOi8vMTI3LjAuMC4yOjgwMDAiOworICAgIGNvbnN0IHRpbWVTdGFtcCA9IE1hdGgu
cm91bmQoKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAvIDEwMDApOworICAgIGZ1bmN0aW9uIGZpbmlz
aFRlc3QoKSB7CisgICAgICAgIGlmICh0ZXN0UnVubmVyLmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJ
bnRlcmFjdGlvbihvcmlnaW5VbmRlclRlc3QpKQorICAgICAgICAgICAgYWRkT3V0cHV0KCJGQUlM
OiAiICsgb3JpZ2luVW5kZXJUZXN0ICsgIiBzdGlsbCBoYXMgdXNlciBpbnRlcmFjdGlvbiBhZnRl
ciBwcm9jZXNzaW5nLiIpOworICAgICAgICByZXNldENvb2tpZXMoKTsKKyAgICAgICAgc2V0RW5h
YmxlRmVhdHVyZShmYWxzZSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8gRG8gbm90IHVzZSBzZXRF
bmFibGVGZWF0dXJlIGhlcmUgYmVjYXVzZSB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZWJzaXRlIGRh
dGEgZGVsZXRpb24gaXMgbm90IHNraXBwZWQKKyAgICAvLyBieSB0aGUgcHJlc2VuY2Ugb2YgcGFy
YW1ldGVycygpLmlzUnVubmluZ1Rlc3QuCisgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAg
ICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKDM2MDApOworICAgICAgICAvLyBNZXJnZSBhIHN0YXRpc3RpYyB3aXRoIG5vIHVzZXIg
aW50ZXJhY3Rpb24gdG8gY2hlY2sgdGhlIC0xIGNhc2UuCisgICAgICAgIHRlc3RSdW5uZXIuc2V0
U3RhdGlzdGljc01lcmdlU3RhdGlzdGljKG90aGVyT3JpZ2luLCB0b3BGcmFtZU9yaWdpbiwgIiIs
IHRpbWVTdGFtcCwgZmFsc2UsIC0xLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0ZpcnN0UGFydHlXZWJzaXRl
RGF0YVJlbW92YWxNb2RlKHRydWUsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAvLyBp
bnNlcnRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3RpYyhkb21haW4sIGhhc0hhZFVzZXJJbnRlcmFj
dGlvbiwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgaXNQcmV2YWxlbnQp
CisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzRXhwaXJlZFN0YXRpc3Rp
YyhvcmlnaW5VbmRlclRlc3QsIHRydWUsIHRydWUsIGZhbHNlLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICAgICAgd3JpdGVXZWJzaXRlRGF0YUFuZENvbnRpbnVlKCk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorPC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400508</attachid>
            <date>2020-05-28 14:48:09 -0700</date>
            <delta_ts>2020-05-28 15:35:45 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-212445-20200528144808.patch</filename>
            <type>text/plain</type>
            <size>61841</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDc4NTVlZjdjMTBjZTYzMmNj
YWNkZjU2NmMyYjRlMzExOTcxZmY1YWMuLjE0ODMzNDIyMDBhZmJlNzkwYWI0MTMwZmUyNWFiZDU4
NmJhOWViMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMjAtMDUtMjcgIEthdGUgQ2hl
bmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgTWluaW11bSB1c2Vy
IGludGVyYWN0aW9uIHRpbWUgaW4gUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBzaG91bGQgaGFuZGxl
IHRoZSBjYXNlIG9mIC0xCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTI0NDUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYzNjk2NDcwPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IEpvaG4gV2lsYW5kZXIuCisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVz
dHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9vcGVyYXRpbmctZGF0ZXMtYWxsLWJ1dC1jb29raWVz
LXJlbW92ZWQtc3RhdGlzdGljcy13aXRoLW5vLXVzZXItaW50ZXJhY3Rpb24tZGF0YWJhc2UuaHRt
bAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL29wZXJh
dGluZy1kYXRlcy1hbGwtYnV0LWNvb2tpZXMtcmVtb3ZlZC1zdGF0aXN0aWNzLXdpdGgtbm8tdXNl
ci1pbnRlcmFjdGlvbi5odG1sCisKKyAgICAgICAgQWRkcyBhIGdldHRlciBmb3IgbW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvblRpbWUgd2hpY2ggcmV0dXJucyBXVEY6Om51bGxvcHQgaWYgdGhlIAor
ICAgICAgICB0aW1lc3RhbXAgaXMgLTEuIFRoZW4gZG9lcyBub3QgY29uc2lkZXIgdGhpcyBjYXNl
IGluIGNhbGN1bGF0aW5nIHRoZQorICAgICAgICBtaW5pbXVtIHRpbWVzdGFtcC4KKworICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Z2V0TW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVnaXN0cmFibGVE
b21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IpOgorICAgICAgICBGbGlwIHNp
Z24gdG8gYmUgbGVzcyB0aGFuLCBzbyB3ZSBob2xkIG9mZiBvbiBkZWxldGluZyBkYXRhIGlmIHRo
ZQorICAgICAgICBvbGRlc3QgaW50ZXJhY3Rpb24gd2FzIGxlc3MgdGhhbiB0aGUgbWluaW11bSB0
aW1lIGJldHdlZW4gcmVtb3ZhbC4gCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmg6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OmdldE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0
ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvcik6CisgICAgICAgIEZsaXAgc2lnbiB0byBiZSBsZXNz
IHRoYW4sIHNvIHdlIGhvbGQgb2ZmIG9uIGRlbGV0aW5nIGRhdGEgaWYgdGhlCisgICAgICAgIG9s
ZGVzdCBpbnRlcmFjdGlvbiB3YXMgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIHRpbWUgYmV0d2VlbiBy
ZW1vdmFsLiAKKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmg6CisKIDIwMjAtMDUtMjcgIE1pY2hhZWwgQ2F0YW56
YXJvICA8bWNhdGFuemFyb0Bnbm9tZS5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjYwMzE4
KTogW1dQRV1bR1RLXSBVbmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGluIE1lbW9yeVByZXNzdXJl
TW9uaXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZS5jcHAKaW5kZXggY2Y1OGM2YzE3MzcyNjQ1NjYzZGRjYzgyMzA3MTI2MmE5NTE3YzVh
NS4uNGY5Mzc5NTBlZWQ1NzY4MTkwMjA4Y2JhMWQwNjkyZWEzMjg5YmU2YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCkBAIC0y
NTM5LDYgKzI1MzksMTQgQEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6c2hvdWxkRW5mb3JjZVNhbWVTaXRlU3RyaWN0Rm9yKERvbWFpbkQKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKK09wdGlvbmFsPFdhbGxUaW1lPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUoY29uc3QgRG9tYWluRGF0YSYg
c3RhdGlzdGljKQoreworICAgIGlmIChzdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
blRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpIDw9IDApCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gc3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25UaW1lOworfQorCiBSZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJz
aXRlRGF0YUZvciBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVnaXN0cmFi
bGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IoKQogewogICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMjU2MCw3ICsyNTY4LDggQEAgUmVnaXN0cmFibGVE
b21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXMKICAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IGRvbWFpbnMpIHsKICAgICAg
ICAgaWYgKHNob3VsZEV4ZW1wdEZyb21XZWJzaXRlRGF0YURlbGV0aW9uKHN0YXRpc3RpYy5yZWdp
c3RyYWJsZURvbWFpbikpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgb2xkZXN0VXNl
ckludGVyYWN0aW9uID0gc3RkOjptaW4ob2xkZXN0VXNlckludGVyYWN0aW9uLCBzdGF0aXN0aWMu
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpOworICAgICAgICBpZiAoYXV0byBtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uVGltZSA9IHRoaXMtPm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25U
aW1lKHN0YXRpc3RpYykpCisgICAgICAgICAgICBvbGRlc3RVc2VySW50ZXJhY3Rpb24gPSBzdGQ6
Om1pbihvbGRlc3RVc2VySW50ZXJhY3Rpb24sICptb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGlt
ZSk7CiAgICAgICAgIGlmIChzaG91bGRSZW1vdmVBbGxXZWJzaXRlRGF0YUZvcihzdGF0aXN0aWMs
IHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcpKSB7CiAgICAgICAgICAgICB0b0RlbGV0ZU9y
UmVzdHJpY3RGb3IuZG9tYWluc1RvRGVsZXRlQWxsQ29va2llc0Zvci5hcHBlbmQoc3RhdGlzdGlj
LnJlZ2lzdHJhYmxlRG9tYWluKTsKICAgICAgICAgICAgIHRvRGVsZXRlT3JSZXN0cmljdEZvci5k
b21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvci5hcHBlbmQoc3RhdGlzdGlj
LnJlZ2lzdHJhYmxlRG9tYWluKTsKQEAgLTI1ODMsNyArMjU5Miw3IEBAIFJlZ2lzdHJhYmxlRG9t
YWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzCiAgICAgfQogCiAgICAgLy8gR2l2ZSB0aGUgdXNlciBlbm91Z2ggdGltZSB0byBp
bnRlcmFjdCB3aXRoIHdlYnNpdGVzIHVudGlsIHdlIHJlbW92ZSBub24tY29va2llIHdlYnNpdGUg
ZGF0YS4KLSAgICBpZiAoIXBhcmFtZXRlcnMoKS5pc1J1bm5pbmdUZXN0ICYmIG5vdyAtIG9sZGVz
dFVzZXJJbnRlcmFjdGlvbiA+IHBhcmFtZXRlcnMoKS5taW5pbXVtVGltZUJldHdlZW5EYXRhUmVj
b3Jkc1JlbW92YWwpCisgICAgaWYgKCFwYXJhbWV0ZXJzKCkuaXNSdW5uaW5nVGVzdCAmJiBub3cg
LSBvbGRlc3RVc2VySW50ZXJhY3Rpb24gPCBwYXJhbWV0ZXJzKCkubWluaW11bVRpbWVCZXR3ZWVu
RGF0YVJlY29yZHNSZW1vdmFsKQogICAgICAgICB0b0RlbGV0ZU9yUmVzdHJpY3RGb3IuZG9tYWlu
c1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3IuY2xlYXIoKTsKIAogICAgIGNsZWFy
R3JhbmRmYXRoZXJpbmcoV1RGTW92ZShkb21haW5JRHNUb0NsZWFyR3JhbmRmYXRoZXJpbmcpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgK
aW5kZXggYTA0N2RmNzc2MDA4MzhmYWE4MDM3Zjc0YTZhODg1OGMyZDY4ODhhNC4uNDdjMTNkYmZl
ZTE2Zjk2ZWQzYjY5YTVjMTZmMDRhMTg2NjEyNjcxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgKQEAgLTI0MSw2ICsyNDEsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgY3JlYXRlVW5pcXVlSW5kaWNlcygpOwogICAgIGJvb2wgY3JlYXRl
U2NoZW1hKCk7CiAgICAgU3RyaW5nIGVuc3VyZUFuZE1ha2VEb21haW5MaXN0KGNvbnN0IEhhc2hT
ZXQ8UmVnaXN0cmFibGVEb21haW4+Jik7CisgICAgT3B0aW9uYWw8V2FsbFRpbWU+IG1vc3RSZWNl
bnRVc2VySW50ZXJhY3Rpb25UaW1lKGNvbnN0IERvbWFpbkRhdGEmKTsKICAgICAKICAgICBjb25z
dCBTdHJpbmcgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aDsKICAgICBtdXRhYmxlIFdlYkNvcmU6OlNR
TGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCmluZGV4IDYwY2E1MjcwNjUyNDhmMzQzYTk0MGEwOGFk
MTJhYjJjMzIyNmY4NmUuLmMzMTU3YTE5Yjg2MWY3ZGRhYTQwOGM2OTNhZjNkMmMyODg5YjY2NjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUu
Y3BwCkBAIC05NjgsNiArOTY4LDE0IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpzaG91bGRFbmZvcmNlU2FtZVNpdGVTdHJpY3RGb3IoUmVzb3VyY2VMCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCitPcHRpb25hbDxXYWxsVGltZT4gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjptb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZShjb25zdCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0aWMpCit7CisgICAgaWYgKHN0YXRpc3RpYy5tb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uVGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkgPD0gMCkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBzdGF0aXN0aWMubW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWU7Cit9CisKIFJlZ2lzdHJhYmxlRG9tYWluc1RvRGVs
ZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6cmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3Io
KQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtOTg0LDcgKzk5Miw4IEBA
IFJlZ2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTCiAgICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBtX3Jl
c291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkgewogICAgICAgICBpZiAoc2hvdWxkRXhlbXB0
RnJvbVdlYnNpdGVEYXRhRGVsZXRpb24oc3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBvbGRlc3RVc2VySW50ZXJhY3Rpb24gPSBzdGQ6
Om1pbihvbGRlc3RVc2VySW50ZXJhY3Rpb24sIHN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVy
YWN0aW9uVGltZSk7CisgICAgICAgIGlmIChhdXRvIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25U
aW1lID0gdGhpcy0+bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUoc3RhdGlzdGljKSkKKyAg
ICAgICAgICAgIG9sZGVzdFVzZXJJbnRlcmFjdGlvbiA9IHN0ZDo6bWluKG9sZGVzdFVzZXJJbnRl
cmFjdGlvbiwgKm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKTsKICAgICAgICAgaWYgKHNo
b3VsZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKHN0YXRpc3RpYywgc2hvdWxkQ2hlY2tGb3JHcmFu
ZGZhdGhlcmluZykpIHsKICAgICAgICAgICAgIHRvRGVsZXRlT3JSZXN0cmljdEZvci5kb21haW5z
VG9EZWxldGVBbGxDb29raWVzRm9yLmFwcGVuZChzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4p
OwogICAgICAgICAgICAgdG9EZWxldGVPclJlc3RyaWN0Rm9yLmRvbWFpbnNUb0RlbGV0ZUFsbE5v
bkNvb2tpZVdlYnNpdGVEYXRhRm9yLmFwcGVuZChzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4p
OwpAQCAtMTAwOCw3ICsxMDE3LDcgQEAgUmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3Ry
aWN0V2Vic2l0ZURhdGFGb3IgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVMKICAgICB9CiAK
ICAgICAvLyBHaXZlIHRoZSB1c2VyIGVub3VnaCB0aW1lIHRvIGludGVyYWN0IHdpdGggd2Vic2l0
ZXMgdW50aWwgd2UgcmVtb3ZlIG5vbi1jb29raWUgd2Vic2l0ZSBkYXRhLgotICAgIGlmICghcGFy
YW1ldGVycygpLmlzUnVubmluZ1Rlc3QgJiYgbm93IC0gb2xkZXN0VXNlckludGVyYWN0aW9uID4g
cGFyYW1ldGVycygpLm1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCkKKyAgICBp
ZiAoIXBhcmFtZXRlcnMoKS5pc1J1bm5pbmdUZXN0ICYmIG5vdyAtIG9sZGVzdFVzZXJJbnRlcmFj
dGlvbiA8IHBhcmFtZXRlcnMoKS5taW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwp
CiAgICAgICAgIHRvRGVsZXRlT3JSZXN0cmljdEZvci5kb21haW5zVG9EZWxldGVBbGxOb25Db29r
aWVXZWJzaXRlRGF0YUZvci5jbGVhcigpOwogCiAgICAgcmV0dXJuIHRvRGVsZXRlT3JSZXN0cmlj
dEZvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmll
ci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUu
aAppbmRleCA3NzY1Y2NhYmUyNTU5NGQ4Y2JkMjEwN2NhMTg2MDdiNDYzZDlmMjRhLi45ZjA5OTBh
ZTcyY2FlZTI2ZjIwYTA4OTM1Njk4NWQ5OGI2MmI4ZDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oCkBAIC0xNDMsNiArMTQzLDcgQEAgcHJp
dmF0ZToKICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JSZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOwogICAgIFJl
Z2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yIHJlZ2lzdHJh
YmxlRG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yKCkgb3ZlcnJpZGU7CiAg
ICAgYm9vbCBpc01lbW9yeVN0b3JlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IE9wdGlvbmFsPFdhbGxUaW1lPiBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZShjb25zdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CiAKICAgICBXZWFrUHRyPFJlc291cmNlTG9hZFN0YXRp
c3RpY3NQZXJzaXN0ZW50U3RvcmFnZT4gbV9wZXJzaXN0ZW50U3RvcmFnZTsKICAgICBIYXNoTWFw
PFJlZ2lzdHJhYmxlRG9tYWluLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBtX3Jlc291cmNlU3Rh
dGlzdGljc01hcDsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwppbmRleCBhNDM5ZjFkNmY4YzIzYjYzOGU3YTU3NTU4N2I5MDQ5ODMzMzYw
YWQwLi5mNjBkYTcyYzZmNWM2MjQ2YjQxNDVlYWYxYTQ5MTY3NzYyYTU1ZWFjIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzEgQEAKKzIwMjAtMDUtMjcgIEthdGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5leUBh
cHBsZS5jb20+CisKKyAgICAgICAgTWluaW11bSB1c2VyIGludGVyYWN0aW9uIHRpbWUgaW4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyBzaG91bGQgaGFuZGxlIHRoZSBjYXNlIG9mIC0xCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI0NDUKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzYzNjk2NDcwPgorCisgICAgICAgIFJldmlld2VkIGJ5IEpvaG4gV2ls
YW5kZXIuCisKKyAgICAgICAgMzAgZGF5IHdlYnNpdGUgZGF0YSBkZWxldGlvbiBpcyBjb3ZlcmVk
IGJ5IG9wZXJhdGluZy1kYXRlcy1hbGwtd2Vic2l0ZS1kYXRhLXJlbW92ZWQuaHRtbC4KKyAgICAg
ICAgVGhlc2UgbmV3IHRlc3QgY2FzZXMgY2hlY2sgdGhhdCBkZWxldGlvbiBvY2N1cnMgd2hlbiBp
bmNsdWRpbmcgc3RhdGlzdGljcyB3aXRoIG5vCisgICAgICAgIHVzZXIgaW50ZXJhY3Rpb24gKG1v
c3QgcmVjZW50IHVzZXIgaW50ZXJhY3Rpb24gdGltZSBvZiAtMSkgYW5kIHdpdGgKKyAgICAgICAg
dGhlIGNoZWNrIGZvciBJVFAgdGVzdGluZyB0dXJuZWQgb2ZmIHRvIHRlc3QgdXNpbmcgdGhlIGhv
dXIgbG9uZyB3YWl0CisgICAgICAgIHRvIGRlbGV0ZSBleHBpcmVkIGRhdGEuCisKKyAgICAgICAg
SXQgYWxzbyBkZWxldGVzCisgICAgICAgIGh0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy9vcGVyYXRpbmctZGF0ZXMtYWxsLWJ1dC1jb29raWVzLXJlbW92ZWQuaHRtbAorICAgICAgICBi
ZWNhdXNlIDcgZGF5IHdlYnNpdGUgZGF0YSBkZWxldGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBuZXcg
dGVzdCBjYXNlcy4KKworICAgICAgICAqIGh0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy9vcGVyYXRpbmctZGF0ZXMtYWxsLWJ1dC1jb29raWVzLXJlbW92ZWQtc3RhdGlzdGljcy13aXRo
LW5vLXVzZXItaW50ZXJhY3Rpb24tZGF0YWJhc2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvb3BlcmF0aW5nLWRhdGVzLWFs
bC1idXQtY29va2llcy1yZW1vdmVkLXN0YXRpc3RpY3Mtd2l0aC1uby11c2VyLWludGVyYWN0aW9u
LWRhdGFiYXNlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9vcGVyYXRpbmctZGF0ZXMtYWxsLWJ1dC1jb29raWVzLXJlbW92ZWQtc3RhdGlz
dGljcy13aXRoLW5vLXVzZXItaW50ZXJhY3Rpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvb3BlcmF0aW5nLWRhdGVzLWFs
bC1idXQtY29va2llcy1yZW1vdmVkLXN0YXRpc3RpY3Mtd2l0aC1uby11c2VyLWludGVyYWN0aW9u
Lmh0bWw6IEFkZGVkLgorCisgICAgICAgICogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzL29wZXJhdGluZy1kYXRlcy1hbGwtYnV0LWNvb2tpZXMtcmVtb3ZlZC1k
YXRhYmFzZS1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL29wZXJhdGluZy1kYXRlcy1hbGwtYnV0LWNv
b2tpZXMtcmVtb3ZlZC1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL29wZXJhdGluZy1kYXRlcy1hbGwt
YnV0LWNvb2tpZXMtcmVtb3ZlZC5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9vcGVyYXRpbmctZGF0ZXMtYWxsLWJ1
dC1jb29raWVzLXJlbW92ZWQtZGF0YWJhc2UuaHRtbDogUmVtb3ZlZC4KKwogMjAyMC0wNS0yNyAg
TGF1cm8gTW91cmEgIDxsbW91cmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV1BFXSBBdm9pZCBw
b3NzaWJsZSBXVFIgZXZlbnQgdGltaW5nIGdvaW5nIGJhY2sgaW4gdGltZSBhbmQgZml4IGNvbnZl
cnNpb24gZnJvbSBzIHRvIG1zCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jl
c291cmNlTG9hZFN0YXRpc3RpY3Mvb3BlcmF0aW5nLWRhdGVzLWFsbC1idXQtY29va2llcy1yZW1v
dmVkLWRhdGFiYXNlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy9vcGVyYXRpbmctZGF0ZXMtYWxsLWJ1dC1jb29raWVzLXJlbW92ZWQt
ZGF0YWJhc2UtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWE1
ZWEyNDEwODVlNGI1MTFhODEwZjg5NmFjNGUzNDk5YTg0NzQwLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy9vcGVyYXRpbmctZGF0ZXMtYWxsLWJ1dC1jb29raWVzLXJlbW92ZWQt
ZGF0YWJhc2UtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotCi1C
ZWZvcmUgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBDbGllbnQtc2lkZSBjb29raWUgZXhpc3RzLgot
QmVmb3JlIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogSHR0cE9ubHkgY29va2llIGV4aXN0cy4KLUJl
Zm9yZSBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IFJlZ3VsYXIgc2VydmVyLXNpZGUgY29va2llIGV4
aXN0cy4KLUJlZm9yZSBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IExvY2FsU3RvcmFnZSBlbnRyeSBk
b2VzIGV4aXN0LgotQmVmb3JlIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogSURCIGVudHJ5IGRvZXMg
ZXhpc3QuCi0KLUFmdGVyIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogSHR0cE9ubHkgY29va2llIGV4
aXN0cy4KLUFmdGVyIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogQ2xpZW50LXNpZGUgY29va2llIGV4
aXN0cy4KLUFmdGVyIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogUmVndWxhciBzZXJ2ZXItc2lkZSBj
b29raWUgZXhpc3RzLgotQWZ0ZXIgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBMb2NhbFN0b3JhZ2Ug
ZW50cnkgZG9lcyBub3QgZXhpc3QuCi1BZnRlciBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IElEQiBl
bnRyeSBkb2VzIG5vdCBleGlzdC4KLQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvb3BlcmF0aW5nLWRhdGVzLWFsbC1idXQtY29va2ll
cy1yZW1vdmVkLWRhdGFiYXNlLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNl
TG9hZFN0YXRpc3RpY3Mvb3BlcmF0aW5nLWRhdGVzLWFsbC1idXQtY29va2llcy1yZW1vdmVkLWRh
dGFiYXNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZTMxMjgxOWUxOWY5
ZGRkODY4YmE2Y2E3MzM3ODI1MmEwYmFhOTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzL29wZXJhdGluZy1kYXRlcy1hbGwtYnV0LWNvb2tpZXMtcmVtb3ZlZC1kYXRhYmFzZS5o
dG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0
bWw+Ci08aGVhZD4KLSAgICA8c2NyaXB0IHNyYz0iL2Nvb2tpZXMvcmVzb3VyY2VzL2Nvb2tpZS11
dGlsaXRpZXMuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdXRpbC5q
cyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBvbmxvYWQ9InNldFRpbWVvdXQoJ3J1blRlc3Qo
KScsIDApIj4KLTxicj4KLTxkaXYgaWQ9Im91dHB1dCI+PC9kaXY+Ci08YnI+Ci08c2NyaXB0Pgot
ICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwotICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4
dCgpOwotICAgIHRlc3RSdW5uZXIuc2V0VXNlSVRQRGF0YWJhc2UodHJ1ZSk7Ci0KLSAgICBjb25z
dCBodHRwT25seUNvb2tpZU5hbWUgPSAiaHR0cC1vbmx5LWNvb2tpZSI7Ci0gICAgY29uc3Qgc2Vy
dmVyU2lkZUNvb2tpZU5hbWUgPSAic2VydmVyLXNpZGUtY29va2llIjsKLSAgICBjb25zdCBjbGll
bnRTaWRlQ29va2llTmFtZSA9ICJjbGllbnQtc2lkZS1jb29raWUiOwotCi0gICAgZnVuY3Rpb24g
c29ydFN0cmluZ0FycmF5KGEsIGIpIHsKLSAgICAgICAgYSA9IGEudG9Mb3dlckNhc2UoKTsKLSAg
ICAgICAgYiA9IGIudG9Mb3dlckNhc2UoKTsKLQotICAgICAgICByZXR1cm4gYSA+IGIgPyAxIDog
YiA+IGEgPyAtMSA6IDA7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gYWRkTGluZWJyZWFrVG9PdXRw
dXQoKSB7Ci0gICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIi
KTsKLSAgICAgICAgb3V0cHV0LmFwcGVuZENoaWxkKGVsZW1lbnQpOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIGFkZE91dHB1dChtZXNzYWdlKSB7Ci0gICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIGVsZW1lbnQuaW5uZXJUZXh0ID0gbWVz
c2FnZTsKLSAgICAgICAgb3V0cHV0LmFwcGVuZENoaWxkKGVsZW1lbnQpOwotICAgIH0KLQotICAg
IGZ1bmN0aW9uIGNoZWNrQ29va2llcyhpc0FmdGVyRGVsZXRpb24pIHsKLSAgICAgICAgbGV0IHVu
c29ydGVkVGVzdFBhc3NlZE1lc3NhZ2VzID0gW107Ci0gICAgICAgIGxldCBjb29raWVzID0gaW50
ZXJuYWxzLmdldENvb2tpZXMoKTsKLSAgICAgICAgaWYgKCFjb29raWVzLmxlbmd0aCAmJiBpc0Fm
dGVyRGVsZXRpb24pCi0gICAgICAgICAgICBhZGRPdXRwdXQoIkZBSUw6ICIgKyAiTm8gY29va2ll
cyBmb3VuZC4iKTsKLSAgICAgICAgZm9yIChsZXQgY29va2llIG9mIGNvb2tpZXMpIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAoY29va2llLm5hbWUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIGh0dHBP
bmx5Q29va2llTmFtZToKLSAgICAgICAgICAgICAgICAgICAgdW5zb3J0ZWRUZXN0UGFzc2VkTWVz
c2FnZXMucHVzaCgoaXNBZnRlckRlbGV0aW9uID8gIkFmdGVyIiA6ICJCZWZvcmUiKSArICIgc3Rh
dGlzdGljcyBwcm9jZXNzaW5nOiAiICsgKGlzQWZ0ZXJEZWxldGlvbiA/ICIgIiA6ICIiKSArICJI
dHRwT25seSBjb29raWUgZXhpc3RzLiIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBjYXNlIHNlcnZlclNpZGVDb29raWVOYW1lOgotICAgICAgICAgICAgICAg
ICAgICB1bnNvcnRlZFRlc3RQYXNzZWRNZXNzYWdlcy5wdXNoKChpc0FmdGVyRGVsZXRpb24gPyAi
QWZ0ZXIiIDogIkJlZm9yZSIpICsgIiBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IFJlZ3VsYXIgc2Vy
dmVyLXNpZGUgY29va2llIGV4aXN0cy4iKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBjbGllbnRTaWRlQ29va2llTmFtZToKLSAgICAgICAgICAgICAg
ICAgICAgdW5zb3J0ZWRUZXN0UGFzc2VkTWVzc2FnZXMucHVzaCgoaXNBZnRlckRlbGV0aW9uID8g
IkFmdGVyIiA6ICJCZWZvcmUiKSArICIgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBDbGllbnQtc2lk
ZSBjb29raWUgZXhpc3RzLiIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBsZXQgc29ydGVkVGVzdFBhc3NlZE1lc3NhZ2VzID0g
dW5zb3J0ZWRUZXN0UGFzc2VkTWVzc2FnZXMuc29ydChzb3J0U3RyaW5nQXJyYXkpOwotICAgICAg
ICBmb3IgKGxldCB0ZXN0UGFzc2VkTWVzc2FnZSBvZiBzb3J0ZWRUZXN0UGFzc2VkTWVzc2FnZXMp
IHsKLSAgICAgICAgICAgIGFkZE91dHB1dCh0ZXN0UGFzc2VkTWVzc2FnZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBjb25zdCBkYk5hbWUgPSAiVGVzdERhdGFiYXNlIjsKLQotICAgIGZ1bmN0
aW9uIGNyZWF0ZUlEQkRhdGFTdG9yZShjYWxsYmFjaykgewotICAgICAgICBsZXQgcmVxdWVzdCA9
IGluZGV4ZWREQi5vcGVuKGRiTmFtZSk7Ci0gICAgICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgYWRkT3V0cHV0KCJDb3VsZG4ndCBjcmVhdGUgaW5kZXhlZERC
LiIpOwotICAgICAgICAgICAgZmluaXNoVGVzdCgpOwotICAgICAgICB9OwotICAgICAgICByZXF1
ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgICAgICBsZXQg
ZGIgPSBldmVudC50YXJnZXQucmVzdWx0OwotICAgICAgICAgICAgbGV0IG9ialN0b3JlID0gZGIu
Y3JlYXRlT2JqZWN0U3RvcmUoInRlc3QiLCB7YXV0b0luY3JlbWVudDogdHJ1ZX0pOwotICAgICAg
ICAgICAgb2JqU3RvcmUuYWRkKCJ2YWx1ZSIpOwotICAgICAgICAgICAgY2FsbGJhY2soKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0IG1heEludGVydmFscyA9IDIwOwotCi0gICAgbGV0
IGludGVydmFsQ291bnRlcklEQjsKLSAgICBsZXQgY2hlY2tJREJDYWxsYmFjazsKLSAgICBsZXQg
Y2hlY2tJREJJbnRlcnZhbElEOwotICAgIGxldCBzZW1hcGhvcmVJREJDaGVjayA9IGZhbHNlOwot
ICAgIGZ1bmN0aW9uIGNoZWNrSURCRGF0YVN0b3JlRXhpc3RzKGlzQWZ0ZXJEZWxldGlvbiwgY2Fs
bGJhY2spIHsKLSAgICAgICAgbGV0IHJlcXVlc3Q7Ci0gICAgICAgIGludGVydmFsQ291bnRlcklE
QiA9IDA7Ci0gICAgICAgIGNoZWNrSURCQ2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICAgICAgaWYg
KCFpc0FmdGVyRGVsZXRpb24pIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHVudGlsIHRoZXJlIGlz
IGEgSURCLgotICAgICAgICAgICAgY2hlY2tJREJJbnRlcnZhbElEID0gc2V0SW50ZXJ2YWwoZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbWFwaG9yZUlEQkNoZWNrKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgc2VtYXBob3JlSURCQ2hlY2sg
PSB0cnVlOwotCi0gICAgICAgICAgICAgICAgaWYgKCsraW50ZXJ2YWxDb3VudGVySURCID49IG1h
eEludGVydmFscykgewotICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGNoZWNrSURC
SW50ZXJ2YWxJRCk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZE91dHB1dCgiQmVmb3JlIHN0YXRp
c3RpY3MgcHJvY2Vzc2luZzogSURCIGVudHJ5IGRvZXMgbm90IGV4aXN0LiIpOwotICAgICAgICAg
ICAgICAgICAgICBzZW1hcGhvcmVJREJDaGVjayA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICBjaGVja0lEQkNhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRiTmFtZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tJREJJbnRlcnZhbElEKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFkZE91dHB1dCgiQ291bGRuJ3Qgb3BlbiBpbmRleGVkREIuIik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzZW1hcGhvcmVJREJDaGVjayA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZmluaXNoVGVzdCgpOwotICAgICAgICAgICAgICAgICAgICB9OwotICAg
ICAgICAgICAgICAgICAgICByZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIExldCB0aGUgbmV4dCBpbnRlcnZhbCBjaGVjayBh
Z2Fpbi4KLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9yZUlEQkNoZWNrID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qub25z
dWNjZXNzID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRl
cnZhbChjaGVja0lEQkludGVydmFsSUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkT3V0
cHV0KCJCZWZvcmUgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBJREIgZW50cnkgZG9lcyBleGlzdC4i
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9yZUlEQkNoZWNrID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjaGVja0lEQkNhbGxiYWNrKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwgMjAwKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHVudGlsIHRoZXJlIGlzIG5vIElEQi4K
LSAgICAgICAgICAgIGNoZWNrSURCSW50ZXJ2YWxJRCA9IHNldEludGVydmFsKGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgICAgICAgICBpZiAoc2VtYXBob3JlSURCQ2hlY2spCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBzZW1hcGhvcmVJREJDaGVjayA9IHRydWU7
Ci0KLSAgICAgICAgICAgICAgICBpZiAoKytpbnRlcnZhbENvdW50ZXJJREIgPj0gbWF4SW50ZXJ2
YWxzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tJREJJbnRlcnZh
bElEKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkT3V0cHV0KCJBZnRlciBzdGF0aXN0aWNzIHBy
b2Nlc3Npbmc6IElEQiBlbnRyeSBkb2VzIGV4aXN0LiIpOwotICAgICAgICAgICAgICAgICAgICBz
ZW1hcGhvcmVJREJDaGVjayA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBjaGVja0lEQkNh
bGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
cmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRiTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJl
cXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNs
ZWFySW50ZXJ2YWwoY2hlY2tJREJJbnRlcnZhbElEKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFkZE91dHB1dCgiQ291bGRuJ3Qgb3BlbiBpbmRleGVkREIuIik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzZW1hcGhvcmVJREJDaGVjayA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZmluaXNoVGVzdCgpOwotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAg
ICAgICByZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tJREJJbnRlcnZhbElEKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZE91dHB1dCgiQWZ0ZXIgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBJ
REIgZW50cnkgZG9lcyBub3QgZXhpc3QuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZW1h
cGhvcmVJREJDaGVjayA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoVGVz
dCgpOwotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICByZXF1ZXN0
Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIExl
dCB0aGUgbmV4dCBpbnRlcnZhbCBjaGVjayBhZ2FpbiBiZWNhdXNlIGRlbGV0aW9uIG1pZ2h0IGJl
IGRlbGF5ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICBzZW1hcGhvcmVJREJDaGVjayA9IGZh
bHNlOwotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0sIDIwMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBsZXQgaW50ZXJ2YWxDb3VudGVy
TG9jYWxTdG9yYWdlOwotICAgIGxldCBjaGVja0xvY2FsU3RvcmFnZUNhbGxiYWNrOwotICAgIGxl
dCBjaGVja0xvY2FsU3RvcmFnZUludGVydmFsSUQ7Ci0gICAgY29uc3QgbG9jYWxTdG9yYWdlTmFt
ZSA9ICJ0ZXN0IjsKLSAgICBjb25zdCBsb2NhbFN0b3JhZ2VWYWx1ZSA9ICJ2YWx1ZSI7Ci0gICAg
ZnVuY3Rpb24gY2hlY2tMb2NhbFN0b3JhZ2VFeGlzdHMoaXNBZnRlckRlbGV0aW9uLCBjYWxsYmFj
aykgewotICAgICAgICBpbnRlcnZhbENvdW50ZXJMb2NhbFN0b3JhZ2UgPSAwOwotICAgICAgICBj
aGVja0xvY2FsU3RvcmFnZUNhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgICAgIGlmICghaXNBZnRl
ckRlbGV0aW9uKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayB1bnRpbCB0aGVyZSBpcyBMb2NhbFN0
b3JhZ2UuCi0gICAgICAgICAgICBjaGVja0xvY2FsU3RvcmFnZUludGVydmFsSUQgPSBzZXRJbnRl
cnZhbChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAoKytpbnRlcnZhbENvdW50ZXJM
b2NhbFN0b3JhZ2UgPj0gbWF4SW50ZXJ2YWxzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNsZWFy
SW50ZXJ2YWwoY2hlY2tMb2NhbFN0b3JhZ2VJbnRlcnZhbElEKTsKLSAgICAgICAgICAgICAgICAg
ICAgbGV0IHZhbHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0obG9jYWxTdG9yYWdlTmFtZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGFkZE91dHB1dCgiQmVmb3JlIHN0YXRpc3RpY3MgcHJvY2Vzc2lu
ZzogTG9jYWxTdG9yYWdlIGVudHJ5ICIgKyAodmFsdWUgPT09IGxvY2FsU3RvcmFnZVZhbHVlID8g
ImRvZXMiIDogImRvZXMgbm90IikgKyAiIGV4aXN0LiIpOwotICAgICAgICAgICAgICAgICAgICBj
aGVja0xvY2FsU3RvcmFnZUNhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0
ZXN0UnVubmVyLmlzU3RhdGlzdGljc0hhc0xvY2FsU3RvcmFnZShvcmlnaW5VbmRlclRlc3QpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tMb2NhbFN0b3JhZ2VJbnRl
cnZhbElEKTsKLSAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gbG9jYWxTdG9yYWdlLmdl
dEl0ZW0obG9jYWxTdG9yYWdlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZE91dHB1dCgi
QmVmb3JlIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogTG9jYWxTdG9yYWdlIGVudHJ5ICIgKyAodmFs
dWUgPT09IGxvY2FsU3RvcmFnZVZhbHVlID8gImRvZXMiIDogImRvZXMgbm90IikgKyAiIGV4aXN0
LiIpOwotICAgICAgICAgICAgICAgICAgICBjaGVja0xvY2FsU3RvcmFnZUNhbGxiYWNrKCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwgMTAwKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIC8vIENoZWNrIHVudGlsIHRoZXJlIGlzIG5vIExvY2FsU3RvcmFnZS4KLSAg
ICAgICAgICAgIGNoZWNrTG9jYWxTdG9yYWdlSW50ZXJ2YWxJRCA9IHNldEludGVydmFsKGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICgrK2ludGVydmFsQ291bnRlckxvY2FsU3RvcmFn
ZSA+PSBtYXhJbnRlcnZhbHMpIHsKLSAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChj
aGVja0xvY2FsU3RvcmFnZUludGVydmFsSUQpOwotICAgICAgICAgICAgICAgICAgICBsZXQgdmFs
dWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShsb2NhbFN0b3JhZ2VOYW1lKTsKLSAgICAgICAgICAg
ICAgICAgICAgYWRkT3V0cHV0KCJBZnRlciBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IExvY2FsU3Rv
cmFnZSBlbnRyeSAiICsgKHZhbHVlID09PSBsb2NhbFN0b3JhZ2VWYWx1ZSA/ICJkb2VzIiA6ICJk
b2VzIG5vdCIpICsgIiBleGlzdC4iKTsKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2NhbFN0
b3JhZ2VDYWxsYmFjaygpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRlc3RSdW5uZXIu
aXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdlKG9yaWdpblVuZGVyVGVzdCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0xvY2FsU3RvcmFnZUludGVydmFsSUQpOwot
ICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShsb2Nh
bFN0b3JhZ2VOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkT3V0cHV0KCJBZnRlciBzdGF0
aXN0aWNzIHByb2Nlc3Npbmc6IExvY2FsU3RvcmFnZSBlbnRyeSAiICsgKHZhbHVlID09PSBsb2Nh
bFN0b3JhZ2VWYWx1ZSA/ICJkb2VzIiA6ICJkb2VzIG5vdCIpICsgIiBleGlzdC4iKTsKLSAgICAg
ICAgICAgICAgICAgICAgY2hlY2tMb2NhbFN0b3JhZ2VDYWxsYmFjaygpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0sIDEwMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhc3lu
YyBmdW5jdGlvbiB3cml0ZVdlYnNpdGVEYXRhQW5kQ29udGludWUoKSB7Ci0gICAgICAgIC8vIFdy
aXRlIGNvb2tpZXMuCi0gICAgICAgIGF3YWl0IGZldGNoKCIvY29va2llcy9yZXNvdXJjZXMvc2V0
LWh0dHAtb25seS1jb29raWUucGhwP2Nvb2tpZU5hbWU9IiArIGh0dHBPbmx5Q29va2llTmFtZSwg
eyBjcmVkZW50aWFsczogInNhbWUtb3JpZ2luIiB9KTsKLSAgICAgICAgYXdhaXQgZmV0Y2goIi9j
b29raWVzL3Jlc291cmNlcy9zZXRDb29raWVzLmNnaSIsIHsgaGVhZGVyczogeyAiU2V0LUNvb2tp
ZSI6IHNlcnZlclNpZGVDb29raWVOYW1lICsgIj0xOyBwYXRoPS87IiB9LCBjcmVkZW50aWFsczog
InNhbWUtb3JpZ2luIiB9KTsKLSAgICAgICAgZG9jdW1lbnQuY29va2llID0gY2xpZW50U2lkZUNv
b2tpZU5hbWUgKyAiPTEiOwotCi0gICAgICAgIGNoZWNrQ29va2llcyhmYWxzZSk7Ci0KLSAgICAg
ICAgLy8gV3JpdGUgTG9jYWxTdG9yYWdlCi0gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGxv
Y2FsU3RvcmFnZU5hbWUsIGxvY2FsU3RvcmFnZVZhbHVlKTsKLSAgICAgICAgY2hlY2tMb2NhbFN0
b3JhZ2VFeGlzdHMoZmFsc2UsIGZ1bmN0aW9uKCkgewotCi0gICAgICAgICAgICAvLyBXcml0ZSBJ
bmRleGVkREIuCi0gICAgICAgICAgICBjcmVhdGVJREJEYXRhU3RvcmUoZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgICAgIGNoZWNrSURCRGF0YVN0b3JlRXhpc3RzKGZhbHNlLCBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICAgICAgYWRkTGluZWJyZWFrVG9PdXRwdXQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgcHJvY2Vzc1dlYnNpdGVEYXRhQW5kQ29udGludWUoKTsKLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBmdW5j
dGlvbiBwcm9jZXNzV2Vic2l0ZURhdGFBbmRDb250aW51ZSgpIHsKLSAgICAgICAgdGVzdFJ1bm5l
ci5pbnN0YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrKGNoZWNrV2Vic2l0
ZURhdGFBbmRDb250aW51ZSk7Ci0gICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc1Byb2Nlc3NT
dGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBjaGVja1dl
YnNpdGVEYXRhQW5kQ29udGludWUoKSB7Ci0gICAgICAgIGNoZWNrQ29va2llcyh0cnVlKTsKLSAg
ICAgICAgY2hlY2tMb2NhbFN0b3JhZ2VFeGlzdHModHJ1ZSwgZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgY2hlY2tJREJEYXRhU3RvcmVFeGlzdHModHJ1ZSwgZmluaXNoVGVzdCk7Ci0gICAgICAg
IH0pOwotICAgIH0KLQotICAgIGNvbnN0IG9yaWdpblVuZGVyVGVzdCAgPSAiaHR0cDovLzEyNy4w
LjAuMTo4MDAwIjsKLSAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgewotICAgICAgICBpZiAodGVz
dFJ1bm5lci5pc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24ob3JpZ2luVW5kZXJUZXN0
KSkKLSAgICAgICAgICAgIGFkZE91dHB1dCgiRkFJTDogIiArIG9yaWdpblVuZGVyVGVzdCArICIg
c3RpbGwgaGFzIHVzZXIgaW50ZXJhY3Rpb24gYWZ0ZXIgcHJvY2Vzc2luZy4iKTsKLSAgICAgICAg
cmVzZXRDb29raWVzKCk7Ci0gICAgICAgIHNldEVuYWJsZUZlYXR1cmUoZmFsc2UsIGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Ci0gICAgICAgIH0pOwot
ICAgIH0KLQotICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7Ci0gICAgICAgIHNldEVuYWJsZUZlYXR1
cmUodHJ1ZSwgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0
aWNzRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUodHJ1ZSwgZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgICAgIC8vIGluc2VydFN0YXRpc3RpY3NFeHBpcmVkU3RhdGlzdGljKGRvbWFp
biwgaGFzSGFkVXNlckludGVyYWN0aW9uLCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFS
ZW1vdmFsLCBpc1ByZXZhbGVudCkKLSAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRp
c3RpY3NFeHBpcmVkU3RhdGlzdGljKG9yaWdpblVuZGVyVGVzdCwgdHJ1ZSwgdHJ1ZSwgZmFsc2Us
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICB3cml0ZVdlYnNpdGVEYXRhQW5kQ29u
dGludWUoKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9
KTsKLSAgICB9Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9vcGVyYXRpbmctZGF0ZXMt
YWxsLWJ1dC1jb29raWVzLXJlbW92ZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL29wZXJhdGluZy1kYXRlcy1hbGwtYnV0LWNvb2tp
ZXMtcmVtb3ZlZC1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1
YTVlYTI0MTA4NWU0YjUxMWE4MTBmODk2YWM0ZTM0OTlhODQ3NDAuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzL29wZXJhdGluZy1kYXRlcy1hbGwtYnV0LWNvb2tpZXMtcmVtb3Zl
ZC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0KLUJlZm9yZSBz
dGF0aXN0aWNzIHByb2Nlc3Npbmc6IENsaWVudC1zaWRlIGNvb2tpZSBleGlzdHMuCi1CZWZvcmUg
c3RhdGlzdGljcyBwcm9jZXNzaW5nOiBIdHRwT25seSBjb29raWUgZXhpc3RzLgotQmVmb3JlIHN0
YXRpc3RpY3MgcHJvY2Vzc2luZzogUmVndWxhciBzZXJ2ZXItc2lkZSBjb29raWUgZXhpc3RzLgot
QmVmb3JlIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogTG9jYWxTdG9yYWdlIGVudHJ5IGRvZXMgZXhp
c3QuCi1CZWZvcmUgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBJREIgZW50cnkgZG9lcyBleGlzdC4K
LQotQWZ0ZXIgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBIdHRwT25seSBjb29raWUgZXhpc3RzLgot
QWZ0ZXIgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBDbGllbnQtc2lkZSBjb29raWUgZXhpc3RzLgot
QWZ0ZXIgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBSZWd1bGFyIHNlcnZlci1zaWRlIGNvb2tpZSBl
eGlzdHMuCi1BZnRlciBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IExvY2FsU3RvcmFnZSBlbnRyeSBk
b2VzIG5vdCBleGlzdC4KLUFmdGVyIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogSURCIGVudHJ5IGRv
ZXMgbm90IGV4aXN0LgotCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVz
b3VyY2VMb2FkU3RhdGlzdGljcy9vcGVyYXRpbmctZGF0ZXMtYWxsLWJ1dC1jb29raWVzLXJlbW92
ZWQtc3RhdGlzdGljcy13aXRoLW5vLXVzZXItaW50ZXJhY3Rpb24tZGF0YWJhc2UtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL29wZXJh
dGluZy1kYXRlcy1hbGwtYnV0LWNvb2tpZXMtcmVtb3ZlZC1zdGF0aXN0aWNzLXdpdGgtbm8tdXNl
ci1pbnRlcmFjdGlvbi1kYXRhYmFzZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjVhNWVhMjQx
MDg1ZTRiNTExYTgxMGY4OTZhYzRlMzQ5OWE4NDc0MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9vcGVyYXRpbmctZGF0ZXMt
YWxsLWJ1dC1jb29raWVzLXJlbW92ZWQtc3RhdGlzdGljcy13aXRoLW5vLXVzZXItaW50ZXJhY3Rp
b24tZGF0YWJhc2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTQgQEAKKworQmVmb3JlIHN0YXRp
c3RpY3MgcHJvY2Vzc2luZzogQ2xpZW50LXNpZGUgY29va2llIGV4aXN0cy4KK0JlZm9yZSBzdGF0
aXN0aWNzIHByb2Nlc3Npbmc6IEh0dHBPbmx5IGNvb2tpZSBleGlzdHMuCitCZWZvcmUgc3RhdGlz
dGljcyBwcm9jZXNzaW5nOiBSZWd1bGFyIHNlcnZlci1zaWRlIGNvb2tpZSBleGlzdHMuCitCZWZv
cmUgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBMb2NhbFN0b3JhZ2UgZW50cnkgZG9lcyBleGlzdC4K
K0JlZm9yZSBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IElEQiBlbnRyeSBkb2VzIGV4aXN0LgorCitB
ZnRlciBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IEh0dHBPbmx5IGNvb2tpZSBleGlzdHMuCitBZnRl
ciBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IENsaWVudC1zaWRlIGNvb2tpZSBleGlzdHMuCitBZnRl
ciBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IFJlZ3VsYXIgc2VydmVyLXNpZGUgY29va2llIGV4aXN0
cy4KK0FmdGVyIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogTG9jYWxTdG9yYWdlIGVudHJ5IGRvZXMg
bm90IGV4aXN0LgorQWZ0ZXIgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBJREIgZW50cnkgZG9lcyBu
b3QgZXhpc3QuCisKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzL29wZXJhdGluZy1kYXRlcy1hbGwtYnV0LWNvb2tpZXMtcmVtb3ZlZC1z
dGF0aXN0aWNzLXdpdGgtbm8tdXNlci1pbnRlcmFjdGlvbi1kYXRhYmFzZS5odG1sIGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL29wZXJhdGluZy1kYXRlcy1h
bGwtYnV0LWNvb2tpZXMtcmVtb3ZlZC1zdGF0aXN0aWNzLXdpdGgtbm8tdXNlci1pbnRlcmFjdGlv
bi1kYXRhYmFzZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmYmU4ZjgxYTdiYTM3MTkyNmM2YjZjMjJkYTEw
NmE5NGJkZTI3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jl
c291cmNlTG9hZFN0YXRpc3RpY3Mvb3BlcmF0aW5nLWRhdGVzLWFsbC1idXQtY29va2llcy1yZW1v
dmVkLXN0YXRpc3RpY3Mtd2l0aC1uby11c2VyLWludGVyYWN0aW9uLWRhdGFiYXNlLmh0bWwKQEAg
LTAsMCArMSwyNTggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2Ny
aXB0IHNyYz0iL2Nvb2tpZXMvcmVzb3VyY2VzL2Nvb2tpZS11dGlsaXRpZXMuanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdXRpbC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keSBvbmxvYWQ9InNldFRpbWVvdXQoJ3J1blRlc3QoKScsIDApIj4KKzxicj4KKzxkaXYg
aWQ9Im91dHB1dCI+PC9kaXY+Cis8YnI+Cis8c2NyaXB0PgorICAgIHRlc3RSdW5uZXIud2FpdFVu
dGlsRG9uZSgpOworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIu
c2V0VXNlSVRQRGF0YWJhc2UodHJ1ZSk7CisKKyAgICBjb25zdCBodHRwT25seUNvb2tpZU5hbWUg
PSAiaHR0cC1vbmx5LWNvb2tpZSI7CisgICAgY29uc3Qgc2VydmVyU2lkZUNvb2tpZU5hbWUgPSAi
c2VydmVyLXNpZGUtY29va2llIjsKKyAgICBjb25zdCBjbGllbnRTaWRlQ29va2llTmFtZSA9ICJj
bGllbnQtc2lkZS1jb29raWUiOworCisgICAgZnVuY3Rpb24gc29ydFN0cmluZ0FycmF5KGEsIGIp
IHsKKyAgICAgICAgYSA9IGEudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgYiA9IGIudG9Mb3dlckNh
c2UoKTsKKworICAgICAgICByZXR1cm4gYSA+IGIgPyAxIDogYiA+IGEgPyAtMSA6IDA7CisgICAg
fQorCisgICAgZnVuY3Rpb24gYWRkTGluZWJyZWFrVG9PdXRwdXQoKSB7CisgICAgICAgIGxldCBl
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKTsKKyAgICAgICAgb3V0cHV0LmFw
cGVuZENoaWxkKGVsZW1lbnQpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGFkZE91dHB1dChtZXNz
YWdlKSB7CisgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7CisgICAgICAgIGVsZW1lbnQuaW5uZXJUZXh0ID0gbWVzc2FnZTsKKyAgICAgICAgb3V0cHV0
LmFwcGVuZENoaWxkKGVsZW1lbnQpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrQ29va2ll
cyhpc0FmdGVyRGVsZXRpb24pIHsKKyAgICAgICAgbGV0IHVuc29ydGVkVGVzdFBhc3NlZE1lc3Nh
Z2VzID0gW107CisgICAgICAgIGxldCBjb29raWVzID0gaW50ZXJuYWxzLmdldENvb2tpZXMoKTsK
KyAgICAgICAgaWYgKCFjb29raWVzLmxlbmd0aCAmJiBpc0FmdGVyRGVsZXRpb24pCisgICAgICAg
ICAgICBhZGRPdXRwdXQoIkZBSUw6ICIgKyAiTm8gY29va2llcyBmb3VuZC4iKTsKKyAgICAgICAg
Zm9yIChsZXQgY29va2llIG9mIGNvb2tpZXMpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY29va2ll
Lm5hbWUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIGh0dHBPbmx5Q29va2llTmFtZToKKyAgICAg
ICAgICAgICAgICAgICAgdW5zb3J0ZWRUZXN0UGFzc2VkTWVzc2FnZXMucHVzaCgoaXNBZnRlckRl
bGV0aW9uID8gIkFmdGVyIiA6ICJCZWZvcmUiKSArICIgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiAi
ICsgKGlzQWZ0ZXJEZWxldGlvbiA/ICIgIiA6ICIiKSArICJIdHRwT25seSBjb29raWUgZXhpc3Rz
LiIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIHNl
cnZlclNpZGVDb29raWVOYW1lOgorICAgICAgICAgICAgICAgICAgICB1bnNvcnRlZFRlc3RQYXNz
ZWRNZXNzYWdlcy5wdXNoKChpc0FmdGVyRGVsZXRpb24gPyAiQWZ0ZXIiIDogIkJlZm9yZSIpICsg
IiBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IFJlZ3VsYXIgc2VydmVyLXNpZGUgY29va2llIGV4aXN0
cy4iKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBj
bGllbnRTaWRlQ29va2llTmFtZToKKyAgICAgICAgICAgICAgICAgICAgdW5zb3J0ZWRUZXN0UGFz
c2VkTWVzc2FnZXMucHVzaCgoaXNBZnRlckRlbGV0aW9uID8gIkFmdGVyIiA6ICJCZWZvcmUiKSAr
ICIgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBDbGllbnQtc2lkZSBjb29raWUgZXhpc3RzLiIpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBsZXQgc29ydGVkVGVzdFBhc3NlZE1lc3NhZ2VzID0gdW5zb3J0ZWRUZXN0UGFzc2VkTWVz
c2FnZXMuc29ydChzb3J0U3RyaW5nQXJyYXkpOworICAgICAgICBmb3IgKGxldCB0ZXN0UGFzc2Vk
TWVzc2FnZSBvZiBzb3J0ZWRUZXN0UGFzc2VkTWVzc2FnZXMpIHsKKyAgICAgICAgICAgIGFkZE91
dHB1dCh0ZXN0UGFzc2VkTWVzc2FnZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBk
Yk5hbWUgPSAiVGVzdERhdGFiYXNlIjsKKworICAgIGZ1bmN0aW9uIGNyZWF0ZUlEQkRhdGFTdG9y
ZShjYWxsYmFjaykgeworICAgICAgICBsZXQgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRiTmFt
ZSk7CisgICAgICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
YWRkT3V0cHV0KCJDb3VsZG4ndCBjcmVhdGUgaW5kZXhlZERCLiIpOworICAgICAgICAgICAgZmlu
aXNoVGVzdCgpOworICAgICAgICB9OworICAgICAgICByZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICBsZXQgZGIgPSBldmVudC50YXJnZXQucmVz
dWx0OworICAgICAgICAgICAgbGV0IG9ialN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoInRl
c3QiLCB7YXV0b0luY3JlbWVudDogdHJ1ZX0pOworICAgICAgICAgICAgb2JqU3RvcmUuYWRkKCJ2
YWx1ZSIpOworICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGNvbnN0IG1heEludGVydmFscyA9IDIwOworCisgICAgbGV0IGludGVydmFsQ291bnRlcklEQjsK
KyAgICBsZXQgY2hlY2tJREJDYWxsYmFjazsKKyAgICBsZXQgY2hlY2tJREJJbnRlcnZhbElEOwor
ICAgIGxldCBzZW1hcGhvcmVJREJDaGVjayA9IGZhbHNlOworICAgIGZ1bmN0aW9uIGNoZWNrSURC
RGF0YVN0b3JlRXhpc3RzKGlzQWZ0ZXJEZWxldGlvbiwgY2FsbGJhY2spIHsKKyAgICAgICAgbGV0
IHJlcXVlc3Q7CisgICAgICAgIGludGVydmFsQ291bnRlcklEQiA9IDA7CisgICAgICAgIGNoZWNr
SURCQ2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICAgICAgaWYgKCFpc0FmdGVyRGVsZXRpb24pIHsK
KyAgICAgICAgICAgIC8vIENoZWNrIHVudGlsIHRoZXJlIGlzIGEgSURCLgorICAgICAgICAgICAg
Y2hlY2tJREJJbnRlcnZhbElEID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHNlbWFwaG9yZUlEQkNoZWNrKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgc2VtYXBob3JlSURCQ2hlY2sgPSB0cnVlOworCisgICAgICAgICAg
ICAgICAgaWYgKCsraW50ZXJ2YWxDb3VudGVySURCID49IG1heEludGVydmFscykgeworICAgICAg
ICAgICAgICAgICAgICBjbGVhckludGVydmFsKGNoZWNrSURCSW50ZXJ2YWxJRCk7CisgICAgICAg
ICAgICAgICAgICAgIGFkZE91dHB1dCgiQmVmb3JlIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogSURC
IGVudHJ5IGRvZXMgbm90IGV4aXN0LiIpOworICAgICAgICAgICAgICAgICAgICBzZW1hcGhvcmVJ
REJDaGVjayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBjaGVja0lEQkNhbGxiYWNrKCk7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCA9
IGluZGV4ZWREQi5vcGVuKGRiTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qub25l
cnJvciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2
YWwoY2hlY2tJREJJbnRlcnZhbElEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZE91dHB1
dCgiQ291bGRuJ3Qgb3BlbiBpbmRleGVkREIuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBz
ZW1hcGhvcmVJREJDaGVjayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNo
VGVzdCgpOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIExldCB0aGUgbmV4dCBpbnRlcnZhbCBjaGVjayBhZ2Fpbi4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbWFwaG9yZUlEQkNoZWNrID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0lEQkludGVydmFs
SUQpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkT3V0cHV0KCJCZWZvcmUgc3RhdGlzdGlj
cyBwcm9jZXNzaW5nOiBJREIgZW50cnkgZG9lcyBleGlzdC4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbWFwaG9yZUlEQkNoZWNrID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjaGVja0lEQkNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSwgMjAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIENoZWNrIHVudGlsIHRoZXJlIGlzIG5vIElEQi4KKyAgICAgICAgICAgIGNoZWNrSURC
SW50ZXJ2YWxJRCA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoc2VtYXBob3JlSURCQ2hlY2spCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICBzZW1hcGhvcmVJREJDaGVjayA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBp
ZiAoKytpbnRlcnZhbENvdW50ZXJJREIgPj0gbWF4SW50ZXJ2YWxzKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tJREJJbnRlcnZhbElEKTsKKyAgICAgICAgICAgICAg
ICAgICAgYWRkT3V0cHV0KCJBZnRlciBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IElEQiBlbnRyeSBk
b2VzIGV4aXN0LiIpOworICAgICAgICAgICAgICAgICAgICBzZW1hcGhvcmVJREJDaGVjayA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICBjaGVja0lEQkNhbGxiYWNrKCk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCA9IGluZGV4ZWREQi5v
cGVuKGRiTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tJREJJ
bnRlcnZhbElEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZE91dHB1dCgiQ291bGRuJ3Qg
b3BlbiBpbmRleGVkREIuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBzZW1hcGhvcmVJREJD
aGVjayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoVGVzdCgpOworICAg
ICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Lm9udXBncmFk
ZW5lZWRlZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50
ZXJ2YWwoY2hlY2tJREJJbnRlcnZhbElEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZE91
dHB1dCgiQWZ0ZXIgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBJREIgZW50cnkgZG9lcyBub3QgZXhp
c3QuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBzZW1hcGhvcmVJREJDaGVjayA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoVGVzdCgpOworICAgICAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIExldCB0aGUgbmV4dCBpbnRlcnZhbCBj
aGVjayBhZ2FpbiBiZWNhdXNlIGRlbGV0aW9uIG1pZ2h0IGJlIGRlbGF5ZWQuCisgICAgICAgICAg
ICAgICAgICAgICAgICBzZW1hcGhvcmVJREJDaGVjayA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sIDIwMCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBsZXQgaW50ZXJ2YWxDb3VudGVyTG9jYWxTdG9yYWdlOworICAgIGxl
dCBjaGVja0xvY2FsU3RvcmFnZUNhbGxiYWNrOworICAgIGxldCBjaGVja0xvY2FsU3RvcmFnZUlu
dGVydmFsSUQ7CisgICAgY29uc3QgbG9jYWxTdG9yYWdlTmFtZSA9ICJ0ZXN0IjsKKyAgICBjb25z
dCBsb2NhbFN0b3JhZ2VWYWx1ZSA9ICJ2YWx1ZSI7CisgICAgZnVuY3Rpb24gY2hlY2tMb2NhbFN0
b3JhZ2VFeGlzdHMoaXNBZnRlckRlbGV0aW9uLCBjYWxsYmFjaykgeworICAgICAgICBpbnRlcnZh
bENvdW50ZXJMb2NhbFN0b3JhZ2UgPSAwOworICAgICAgICBjaGVja0xvY2FsU3RvcmFnZUNhbGxi
YWNrID0gY2FsbGJhY2s7CisgICAgICAgIGlmICghaXNBZnRlckRlbGV0aW9uKSB7CisgICAgICAg
ICAgICAvLyBDaGVjayB1bnRpbCB0aGVyZSBpcyBMb2NhbFN0b3JhZ2UuCisgICAgICAgICAgICBj
aGVja0xvY2FsU3RvcmFnZUludGVydmFsSUQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoKytpbnRlcnZhbENvdW50ZXJMb2NhbFN0b3JhZ2UgPj0gbWF4SW50
ZXJ2YWxzKSB7CisgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tMb2NhbFN0
b3JhZ2VJbnRlcnZhbElEKTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gbG9jYWxT
dG9yYWdlLmdldEl0ZW0obG9jYWxTdG9yYWdlTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGFk
ZE91dHB1dCgiQmVmb3JlIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogTG9jYWxTdG9yYWdlIGVudHJ5
ICIgKyAodmFsdWUgPT09IGxvY2FsU3RvcmFnZVZhbHVlID8gImRvZXMiIDogImRvZXMgbm90Iikg
KyAiIGV4aXN0LiIpOworICAgICAgICAgICAgICAgICAgICBjaGVja0xvY2FsU3RvcmFnZUNhbGxi
YWNrKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0UnVubmVyLmlzU3RhdGlzdGlj
c0hhc0xvY2FsU3RvcmFnZShvcmlnaW5VbmRlclRlc3QpKSB7CisgICAgICAgICAgICAgICAgICAg
IGNsZWFySW50ZXJ2YWwoY2hlY2tMb2NhbFN0b3JhZ2VJbnRlcnZhbElEKTsKKyAgICAgICAgICAg
ICAgICAgICAgbGV0IHZhbHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0obG9jYWxTdG9yYWdlTmFt
ZSk7CisgICAgICAgICAgICAgICAgICAgIGFkZE91dHB1dCgiQmVmb3JlIHN0YXRpc3RpY3MgcHJv
Y2Vzc2luZzogTG9jYWxTdG9yYWdlIGVudHJ5ICIgKyAodmFsdWUgPT09IGxvY2FsU3RvcmFnZVZh
bHVlID8gImRvZXMiIDogImRvZXMgbm90IikgKyAiIGV4aXN0LiIpOworICAgICAgICAgICAgICAg
ICAgICBjaGVja0xvY2FsU3RvcmFnZUNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSwgMTAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIENoZWNr
IHVudGlsIHRoZXJlIGlzIG5vIExvY2FsU3RvcmFnZS4KKyAgICAgICAgICAgIGNoZWNrTG9jYWxT
dG9yYWdlSW50ZXJ2YWxJRCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIGlmICgrK2ludGVydmFsQ291bnRlckxvY2FsU3RvcmFnZSA+PSBtYXhJbnRlcnZhbHMpIHsK
KyAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0xvY2FsU3RvcmFnZUludGVy
dmFsSUQpOworICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0
SXRlbShsb2NhbFN0b3JhZ2VOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkT3V0cHV0KCJB
ZnRlciBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IExvY2FsU3RvcmFnZSBlbnRyeSAiICsgKHZhbHVl
ID09PSBsb2NhbFN0b3JhZ2VWYWx1ZSA/ICJkb2VzIiA6ICJkb2VzIG5vdCIpICsgIiBleGlzdC4i
KTsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2NhbFN0b3JhZ2VDYWxsYmFjaygpOworICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzSGFzTG9jYWxT
dG9yYWdlKG9yaWdpblVuZGVyVGVzdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRl
cnZhbChjaGVja0xvY2FsU3RvcmFnZUludGVydmFsSUQpOworICAgICAgICAgICAgICAgICAgICBs
ZXQgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShsb2NhbFN0b3JhZ2VOYW1lKTsKKyAgICAg
ICAgICAgICAgICAgICAgYWRkT3V0cHV0KCJBZnRlciBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IExv
Y2FsU3RvcmFnZSBlbnRyeSAiICsgKHZhbHVlID09PSBsb2NhbFN0b3JhZ2VWYWx1ZSA/ICJkb2Vz
IiA6ICJkb2VzIG5vdCIpICsgIiBleGlzdC4iKTsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tM
b2NhbFN0b3JhZ2VDYWxsYmFjaygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0s
IDEwMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhc3luYyBmdW5jdGlvbiB3cml0ZVdlYnNp
dGVEYXRhQW5kQ29udGludWUoKSB7CisgICAgICAgIC8vIFdyaXRlIGNvb2tpZXMuCisgICAgICAg
IGF3YWl0IGZldGNoKCIvY29va2llcy9yZXNvdXJjZXMvc2V0LWh0dHAtb25seS1jb29raWUucGhw
P2Nvb2tpZU5hbWU9IiArIGh0dHBPbmx5Q29va2llTmFtZSwgeyBjcmVkZW50aWFsczogInNhbWUt
b3JpZ2luIiB9KTsKKyAgICAgICAgYXdhaXQgZmV0Y2goIi9jb29raWVzL3Jlc291cmNlcy9zZXRD
b29raWVzLmNnaSIsIHsgaGVhZGVyczogeyAiU2V0LUNvb2tpZSI6IHNlcnZlclNpZGVDb29raWVO
YW1lICsgIj0xOyBwYXRoPS87IiB9LCBjcmVkZW50aWFsczogInNhbWUtb3JpZ2luIiB9KTsKKyAg
ICAgICAgZG9jdW1lbnQuY29va2llID0gY2xpZW50U2lkZUNvb2tpZU5hbWUgKyAiPTEiOworCisg
ICAgICAgIGNoZWNrQ29va2llcyhmYWxzZSk7CisKKyAgICAgICAgLy8gV3JpdGUgTG9jYWxTdG9y
YWdlCisgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGxvY2FsU3RvcmFnZU5hbWUsIGxvY2Fs
U3RvcmFnZVZhbHVlKTsKKyAgICAgICAgY2hlY2tMb2NhbFN0b3JhZ2VFeGlzdHMoZmFsc2UsIGZ1
bmN0aW9uKCkgeworCisgICAgICAgICAgICAvLyBXcml0ZSBJbmRleGVkREIuCisgICAgICAgICAg
ICBjcmVhdGVJREJEYXRhU3RvcmUoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGNoZWNr
SURCRGF0YVN0b3JlRXhpc3RzKGZhbHNlLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAg
ICAgYWRkTGluZWJyZWFrVG9PdXRwdXQoKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1dl
YnNpdGVEYXRhQW5kQ29udGludWUoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwcm9jZXNzV2Vic2l0ZURh
dGFBbmRDb250aW51ZSgpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3RhdGlzdGljc0Rp
ZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrKGNoZWNrV2Vic2l0ZURhdGFBbmRDb250aW51ZSk7Cisg
ICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc1Byb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29y
ZHMoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja1dlYnNpdGVEYXRhQW5kQ29udGludWUo
KSB7CisgICAgICAgIGNoZWNrQ29va2llcyh0cnVlKTsKKyAgICAgICAgY2hlY2tMb2NhbFN0b3Jh
Z2VFeGlzdHModHJ1ZSwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgY2hlY2tJREJEYXRhU3Rv
cmVFeGlzdHModHJ1ZSwgZmluaXNoVGVzdCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIGNv
bnN0IG9yaWdpblVuZGVyVGVzdCAgPSAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIjsKKyAgICBjb25z
dCBvdGhlck9yaWdpbiA9ICJodHRwOi8vbG9jYWxob3N0OjgwMDAiOworICAgIGNvbnN0IHRvcEZy
YW1lT3JpZ2luID0gImh0dHA6Ly8xMjcuMC4wLjI6ODAwMCI7CisKKyAgICBjb25zdCB0aW1lU3Rh
bXAgPSBNYXRoLnJvdW5kKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLyAxMDAwKTsKKyAgICBmdW5j
dGlvbiBmaW5pc2hUZXN0KCkgeworICAgICAgICBpZiAodGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NI
YXNIYWRVc2VySW50ZXJhY3Rpb24ob3JpZ2luVW5kZXJUZXN0KSkKKyAgICAgICAgICAgIGFkZE91
dHB1dCgiRkFJTDogIiArIG9yaWdpblVuZGVyVGVzdCArICIgc3RpbGwgaGFzIHVzZXIgaW50ZXJh
Y3Rpb24gYWZ0ZXIgcHJvY2Vzc2luZy4iKTsKKyAgICAgICAgcmVzZXRDb29raWVzKCk7CisgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0KKworICAgIC8vIERvIG5vdCB1c2Ug
c2V0RW5hYmxlRmVhdHVyZSBoZXJlIGJlY2F1c2Ugd2Ugd2FudCB0byBtYWtlIHN1cmUgd2Vic2l0
ZSBkYXRhIGRlbGV0aW9uIGlzIG5vdCBza2lwcGVkCisgICAgLy8gYnkgdGhlIHByZXNlbmNlIG9m
IHBhcmFtZXRlcnMoKS5pc1J1bm5pbmdUZXN0LgorICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7Cisg
ICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNv
cmRzUmVtb3ZhbCgzNjAwKTsKKyAgICAgICAgLy8gTWVyZ2UgYSBzdGF0aXN0aWMgd2l0aCBubyB1
c2VyIGludGVyYWN0aW9uIHRvIGNoZWNrIHRoZSAtMSBjYXNlLgorICAgICAgICB0ZXN0UnVubmVy
LnNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyhvdGhlck9yaWdpbiwgdG9wRnJhbWVPcmlnaW4s
ICIiLCB0aW1lU3RhbXAsIGZhbHNlLCAtMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMCwgZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vi
c2l0ZURhdGFSZW1vdmFsTW9kZSh0cnVlLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAg
Ly8gaW5zZXJ0U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWMoZG9tYWluLCBoYXNIYWRVc2VySW50
ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGlzUHJldmFs
ZW50KQorICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0
aXN0aWMob3JpZ2luVW5kZXJUZXN0LCB0cnVlLCB0cnVlLCBmYWxzZSwgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHdyaXRlV2Vic2l0ZURhdGFBbmRDb250aW51ZSgpOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL29wZXJhdGluZy1kYXRlcy1hbGwtYnV0LWNvb2tpZXMt
cmVtb3ZlZC1zdGF0aXN0aWNzLXdpdGgtbm8tdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvb3BlcmF0aW5n
LWRhdGVzLWFsbC1idXQtY29va2llcy1yZW1vdmVkLXN0YXRpc3RpY3Mtd2l0aC1uby11c2VyLWlu
dGVyYWN0aW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNWE1ZWEyNDEwODVlNGI1MTFhODEw
Zjg5NmFjNGUzNDk5YTg0NzQwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL29wZXJhdGluZy1kYXRlcy1hbGwtYnV0LWNvb2tp
ZXMtcmVtb3ZlZC1zdGF0aXN0aWNzLXdpdGgtbm8tdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwxNCBAQAorCitCZWZvcmUgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBDbGll
bnQtc2lkZSBjb29raWUgZXhpc3RzLgorQmVmb3JlIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogSHR0
cE9ubHkgY29va2llIGV4aXN0cy4KK0JlZm9yZSBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IFJlZ3Vs
YXIgc2VydmVyLXNpZGUgY29va2llIGV4aXN0cy4KK0JlZm9yZSBzdGF0aXN0aWNzIHByb2Nlc3Np
bmc6IExvY2FsU3RvcmFnZSBlbnRyeSBkb2VzIGV4aXN0LgorQmVmb3JlIHN0YXRpc3RpY3MgcHJv
Y2Vzc2luZzogSURCIGVudHJ5IGRvZXMgZXhpc3QuCisKK0FmdGVyIHN0YXRpc3RpY3MgcHJvY2Vz
c2luZzogSHR0cE9ubHkgY29va2llIGV4aXN0cy4KK0FmdGVyIHN0YXRpc3RpY3MgcHJvY2Vzc2lu
ZzogQ2xpZW50LXNpZGUgY29va2llIGV4aXN0cy4KK0FmdGVyIHN0YXRpc3RpY3MgcHJvY2Vzc2lu
ZzogUmVndWxhciBzZXJ2ZXItc2lkZSBjb29raWUgZXhpc3RzLgorQWZ0ZXIgc3RhdGlzdGljcyBw
cm9jZXNzaW5nOiBMb2NhbFN0b3JhZ2UgZW50cnkgZG9lcyBub3QgZXhpc3QuCitBZnRlciBzdGF0
aXN0aWNzIHByb2Nlc3Npbmc6IElEQiBlbnRyeSBkb2VzIG5vdCBleGlzdC4KKworCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvb3BlcmF0
aW5nLWRhdGVzLWFsbC1idXQtY29va2llcy1yZW1vdmVkLXN0YXRpc3RpY3Mtd2l0aC1uby11c2Vy
LWludGVyYWN0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlTG9hZFN0
YXRpc3RpY3Mvb3BlcmF0aW5nLWRhdGVzLWFsbC1idXQtY29va2llcy1yZW1vdmVkLXN0YXRpc3Rp
Y3Mtd2l0aC1uby11c2VyLWludGVyYWN0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTU1YjFhYjZhZWY4
ZDk0NDRjNGMxNDJhMDYyNmY1YzBlMTIxYjI1MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9vcGVyYXRpbmctZGF0ZXMtYWxs
LWJ1dC1jb29raWVzLXJlbW92ZWQtc3RhdGlzdGljcy13aXRoLW5vLXVzZXItaW50ZXJhY3Rpb24u
aHRtbApAQCAtMCwwICsxLDI1OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
ICAgIDxzY3JpcHQgc3JjPSIvY29va2llcy9yZXNvdXJjZXMvY29va2llLXV0aWxpdGllcy5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy91dGlsLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ic2V0VGltZW91dCgncnVuVGVzdCgpJywgMCkiPgorPGJy
PgorPGRpdiBpZD0ib3V0cHV0Ij48L2Rpdj4KKzxicj4KKzxzY3JpcHQ+CisgICAgdGVzdFJ1bm5l
ci53YWl0VW50aWxEb25lKCk7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKKyAgICBj
b25zdCBodHRwT25seUNvb2tpZU5hbWUgPSAiaHR0cC1vbmx5LWNvb2tpZSI7CisgICAgY29uc3Qg
c2VydmVyU2lkZUNvb2tpZU5hbWUgPSAic2VydmVyLXNpZGUtY29va2llIjsKKyAgICBjb25zdCBj
bGllbnRTaWRlQ29va2llTmFtZSA9ICJjbGllbnQtc2lkZS1jb29raWUiOworCisgICAgZnVuY3Rp
b24gc29ydFN0cmluZ0FycmF5KGEsIGIpIHsKKyAgICAgICAgYSA9IGEudG9Mb3dlckNhc2UoKTsK
KyAgICAgICAgYiA9IGIudG9Mb3dlckNhc2UoKTsKKworICAgICAgICByZXR1cm4gYSA+IGIgPyAx
IDogYiA+IGEgPyAtMSA6IDA7CisgICAgfQorCisgICAgZnVuY3Rpb24gYWRkTGluZWJyZWFrVG9P
dXRwdXQoKSB7CisgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
YnIiKTsKKyAgICAgICAgb3V0cHV0LmFwcGVuZENoaWxkKGVsZW1lbnQpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGFkZE91dHB1dChtZXNzYWdlKSB7CisgICAgICAgIGxldCBlbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIGVsZW1lbnQuaW5uZXJUZXh0ID0g
bWVzc2FnZTsKKyAgICAgICAgb3V0cHV0LmFwcGVuZENoaWxkKGVsZW1lbnQpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGNoZWNrQ29va2llcyhpc0FmdGVyRGVsZXRpb24pIHsKKyAgICAgICAgbGV0
IHVuc29ydGVkVGVzdFBhc3NlZE1lc3NhZ2VzID0gW107CisgICAgICAgIGxldCBjb29raWVzID0g
aW50ZXJuYWxzLmdldENvb2tpZXMoKTsKKyAgICAgICAgaWYgKCFjb29raWVzLmxlbmd0aCAmJiBp
c0FmdGVyRGVsZXRpb24pCisgICAgICAgICAgICBhZGRPdXRwdXQoIkZBSUw6ICIgKyAiTm8gY29v
a2llcyBmb3VuZC4iKTsKKyAgICAgICAgZm9yIChsZXQgY29va2llIG9mIGNvb2tpZXMpIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAoY29va2llLm5hbWUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIGh0
dHBPbmx5Q29va2llTmFtZToKKyAgICAgICAgICAgICAgICAgICAgdW5zb3J0ZWRUZXN0UGFzc2Vk
TWVzc2FnZXMucHVzaCgoaXNBZnRlckRlbGV0aW9uID8gIkFmdGVyIiA6ICJCZWZvcmUiKSArICIg
c3RhdGlzdGljcyBwcm9jZXNzaW5nOiAiICsgKGlzQWZ0ZXJEZWxldGlvbiA/ICIgIiA6ICIiKSAr
ICJIdHRwT25seSBjb29raWUgZXhpc3RzLiIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIHNlcnZlclNpZGVDb29raWVOYW1lOgorICAgICAgICAgICAg
ICAgICAgICB1bnNvcnRlZFRlc3RQYXNzZWRNZXNzYWdlcy5wdXNoKChpc0FmdGVyRGVsZXRpb24g
PyAiQWZ0ZXIiIDogIkJlZm9yZSIpICsgIiBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IFJlZ3VsYXIg
c2VydmVyLXNpZGUgY29va2llIGV4aXN0cy4iKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBjbGllbnRTaWRlQ29va2llTmFtZToKKyAgICAgICAgICAg
ICAgICAgICAgdW5zb3J0ZWRUZXN0UGFzc2VkTWVzc2FnZXMucHVzaCgoaXNBZnRlckRlbGV0aW9u
ID8gIkFmdGVyIiA6ICJCZWZvcmUiKSArICIgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBDbGllbnQt
c2lkZSBjb29raWUgZXhpc3RzLiIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBsZXQgc29ydGVkVGVzdFBhc3NlZE1lc3NhZ2Vz
ID0gdW5zb3J0ZWRUZXN0UGFzc2VkTWVzc2FnZXMuc29ydChzb3J0U3RyaW5nQXJyYXkpOworICAg
ICAgICBmb3IgKGxldCB0ZXN0UGFzc2VkTWVzc2FnZSBvZiBzb3J0ZWRUZXN0UGFzc2VkTWVzc2Fn
ZXMpIHsKKyAgICAgICAgICAgIGFkZE91dHB1dCh0ZXN0UGFzc2VkTWVzc2FnZSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBjb25zdCBkYk5hbWUgPSAiVGVzdERhdGFiYXNlIjsKKworICAgIGZ1
bmN0aW9uIGNyZWF0ZUlEQkRhdGFTdG9yZShjYWxsYmFjaykgeworICAgICAgICBsZXQgcmVxdWVz
dCA9IGluZGV4ZWREQi5vcGVuKGRiTmFtZSk7CisgICAgICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgYWRkT3V0cHV0KCJDb3VsZG4ndCBjcmVhdGUgaW5kZXhl
ZERCLiIpOworICAgICAgICAgICAgZmluaXNoVGVzdCgpOworICAgICAgICB9OworICAgICAgICBy
ZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICBs
ZXQgZGIgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgICAgICAgICAgbGV0IG9ialN0b3JlID0g
ZGIuY3JlYXRlT2JqZWN0U3RvcmUoInRlc3QiLCB7YXV0b0luY3JlbWVudDogdHJ1ZX0pOworICAg
ICAgICAgICAgb2JqU3RvcmUuYWRkKCJ2YWx1ZSIpOworICAgICAgICAgICAgY2FsbGJhY2soKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IG1heEludGVydmFscyA9IDIwOworCisgICAg
bGV0IGludGVydmFsQ291bnRlcklEQjsKKyAgICBsZXQgY2hlY2tJREJDYWxsYmFjazsKKyAgICBs
ZXQgY2hlY2tJREJJbnRlcnZhbElEOworICAgIGxldCBzZW1hcGhvcmVJREJDaGVjayA9IGZhbHNl
OworICAgIGZ1bmN0aW9uIGNoZWNrSURCRGF0YVN0b3JlRXhpc3RzKGlzQWZ0ZXJEZWxldGlvbiwg
Y2FsbGJhY2spIHsKKyAgICAgICAgbGV0IHJlcXVlc3Q7CisgICAgICAgIGludGVydmFsQ291bnRl
cklEQiA9IDA7CisgICAgICAgIGNoZWNrSURCQ2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICAgICAg
aWYgKCFpc0FmdGVyRGVsZXRpb24pIHsKKyAgICAgICAgICAgIC8vIENoZWNrIHVudGlsIHRoZXJl
IGlzIGEgSURCLgorICAgICAgICAgICAgY2hlY2tJREJJbnRlcnZhbElEID0gc2V0SW50ZXJ2YWwo
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKHNlbWFwaG9yZUlEQkNoZWNrKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgc2VtYXBob3JlSURCQ2hl
Y2sgPSB0cnVlOworCisgICAgICAgICAgICAgICAgaWYgKCsraW50ZXJ2YWxDb3VudGVySURCID49
IG1heEludGVydmFscykgeworICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGNoZWNr
SURCSW50ZXJ2YWxJRCk7CisgICAgICAgICAgICAgICAgICAgIGFkZE91dHB1dCgiQmVmb3JlIHN0
YXRpc3RpY3MgcHJvY2Vzc2luZzogSURCIGVudHJ5IGRvZXMgbm90IGV4aXN0LiIpOworICAgICAg
ICAgICAgICAgICAgICBzZW1hcGhvcmVJREJDaGVjayA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICBjaGVja0lEQkNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRiTmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tJREJJbnRlcnZhbElEKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZE91dHB1dCgiQ291bGRuJ3Qgb3BlbiBpbmRleGVkREIuIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzZW1hcGhvcmVJREJDaGVjayA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgZmluaXNoVGVzdCgpOworICAgICAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIExldCB0aGUgbmV4dCBpbnRlcnZhbCBjaGVj
ayBhZ2Fpbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9yZUlEQkNoZWNrID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qu
b25zdWNjZXNzID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJ
bnRlcnZhbChjaGVja0lEQkludGVydmFsSUQpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRk
T3V0cHV0KCJCZWZvcmUgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBJREIgZW50cnkgZG9lcyBleGlz
dC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9yZUlEQkNoZWNrID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0lEQkNhbGxiYWNrKCk7CisgICAgICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgMjAwKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIENoZWNrIHVudGlsIHRoZXJlIGlzIG5vIElE
Qi4KKyAgICAgICAgICAgIGNoZWNrSURCSW50ZXJ2YWxJRCA9IHNldEludGVydmFsKGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2VtYXBob3JlSURCQ2hlY2spCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBzZW1hcGhvcmVJREJDaGVjayA9IHRy
dWU7CisKKyAgICAgICAgICAgICAgICBpZiAoKytpbnRlcnZhbENvdW50ZXJJREIgPj0gbWF4SW50
ZXJ2YWxzKSB7CisgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tJREJJbnRl
cnZhbElEKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkT3V0cHV0KCJBZnRlciBzdGF0aXN0aWNz
IHByb2Nlc3Npbmc6IElEQiBlbnRyeSBkb2VzIGV4aXN0LiIpOworICAgICAgICAgICAgICAgICAg
ICBzZW1hcGhvcmVJREJDaGVjayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBjaGVja0lE
QkNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRiTmFtZSk7CisgICAgICAgICAgICAgICAgICAg
IHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNsZWFySW50ZXJ2YWwoY2hlY2tJREJJbnRlcnZhbElEKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZE91dHB1dCgiQ291bGRuJ3Qgb3BlbiBpbmRleGVkREIuIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICBzZW1hcGhvcmVJREJDaGVjayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgZmluaXNoVGVzdCgpOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgICAgICByZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tJREJJbnRlcnZhbElEKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZE91dHB1dCgiQWZ0ZXIgc3RhdGlzdGljcyBwcm9jZXNzaW5n
OiBJREIgZW50cnkgZG9lcyBub3QgZXhpc3QuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBz
ZW1hcGhvcmVJREJDaGVjayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNo
VGVzdCgpOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IExldCB0aGUgbmV4dCBpbnRlcnZhbCBjaGVjayBhZ2FpbiBiZWNhdXNlIGRlbGV0aW9uIG1pZ2h0
IGJlIGRlbGF5ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBzZW1hcGhvcmVJREJDaGVjayA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0sIDIwMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsZXQgaW50ZXJ2YWxDb3Vu
dGVyTG9jYWxTdG9yYWdlOworICAgIGxldCBjaGVja0xvY2FsU3RvcmFnZUNhbGxiYWNrOworICAg
IGxldCBjaGVja0xvY2FsU3RvcmFnZUludGVydmFsSUQ7CisgICAgY29uc3QgbG9jYWxTdG9yYWdl
TmFtZSA9ICJ0ZXN0IjsKKyAgICBjb25zdCBsb2NhbFN0b3JhZ2VWYWx1ZSA9ICJ2YWx1ZSI7Cisg
ICAgZnVuY3Rpb24gY2hlY2tMb2NhbFN0b3JhZ2VFeGlzdHMoaXNBZnRlckRlbGV0aW9uLCBjYWxs
YmFjaykgeworICAgICAgICBpbnRlcnZhbENvdW50ZXJMb2NhbFN0b3JhZ2UgPSAwOworICAgICAg
ICBjaGVja0xvY2FsU3RvcmFnZUNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgICAgIGlmICghaXNB
ZnRlckRlbGV0aW9uKSB7CisgICAgICAgICAgICAvLyBDaGVjayB1bnRpbCB0aGVyZSBpcyBMb2Nh
bFN0b3JhZ2UuCisgICAgICAgICAgICBjaGVja0xvY2FsU3RvcmFnZUludGVydmFsSUQgPSBzZXRJ
bnRlcnZhbChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoKytpbnRlcnZhbENvdW50
ZXJMb2NhbFN0b3JhZ2UgPj0gbWF4SW50ZXJ2YWxzKSB7CisgICAgICAgICAgICAgICAgICAgIGNs
ZWFySW50ZXJ2YWwoY2hlY2tMb2NhbFN0b3JhZ2VJbnRlcnZhbElEKTsKKyAgICAgICAgICAgICAg
ICAgICAgbGV0IHZhbHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0obG9jYWxTdG9yYWdlTmFtZSk7
CisgICAgICAgICAgICAgICAgICAgIGFkZE91dHB1dCgiQmVmb3JlIHN0YXRpc3RpY3MgcHJvY2Vz
c2luZzogTG9jYWxTdG9yYWdlIGVudHJ5ICIgKyAodmFsdWUgPT09IGxvY2FsU3RvcmFnZVZhbHVl
ID8gImRvZXMiIDogImRvZXMgbm90IikgKyAiIGV4aXN0LiIpOworICAgICAgICAgICAgICAgICAg
ICBjaGVja0xvY2FsU3RvcmFnZUNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICh0ZXN0UnVubmVyLmlzU3RhdGlzdGljc0hhc0xvY2FsU3RvcmFnZShvcmlnaW5VbmRlclRlc3Qp
KSB7CisgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tMb2NhbFN0b3JhZ2VJ
bnRlcnZhbElEKTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gbG9jYWxTdG9yYWdl
LmdldEl0ZW0obG9jYWxTdG9yYWdlTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGFkZE91dHB1
dCgiQmVmb3JlIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogTG9jYWxTdG9yYWdlIGVudHJ5ICIgKyAo
dmFsdWUgPT09IGxvY2FsU3RvcmFnZVZhbHVlID8gImRvZXMiIDogImRvZXMgbm90IikgKyAiIGV4
aXN0LiIpOworICAgICAgICAgICAgICAgICAgICBjaGVja0xvY2FsU3RvcmFnZUNhbGxiYWNrKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgMTAwKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIENoZWNrIHVudGlsIHRoZXJlIGlzIG5vIExvY2FsU3RvcmFnZS4K
KyAgICAgICAgICAgIGNoZWNrTG9jYWxTdG9yYWdlSW50ZXJ2YWxJRCA9IHNldEludGVydmFsKGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICgrK2ludGVydmFsQ291bnRlckxvY2FsU3Rv
cmFnZSA+PSBtYXhJbnRlcnZhbHMpIHsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZh
bChjaGVja0xvY2FsU3RvcmFnZUludGVydmFsSUQpOworICAgICAgICAgICAgICAgICAgICBsZXQg
dmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShsb2NhbFN0b3JhZ2VOYW1lKTsKKyAgICAgICAg
ICAgICAgICAgICAgYWRkT3V0cHV0KCJBZnRlciBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IExvY2Fs
U3RvcmFnZSBlbnRyeSAiICsgKHZhbHVlID09PSBsb2NhbFN0b3JhZ2VWYWx1ZSA/ICJkb2VzIiA6
ICJkb2VzIG5vdCIpICsgIiBleGlzdC4iKTsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2Nh
bFN0b3JhZ2VDYWxsYmFjaygpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRlc3RSdW5u
ZXIuaXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdlKG9yaWdpblVuZGVyVGVzdCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0xvY2FsU3RvcmFnZUludGVydmFsSUQp
OworICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShs
b2NhbFN0b3JhZ2VOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkT3V0cHV0KCJBZnRlciBz
dGF0aXN0aWNzIHByb2Nlc3Npbmc6IExvY2FsU3RvcmFnZSBlbnRyeSAiICsgKHZhbHVlID09PSBs
b2NhbFN0b3JhZ2VWYWx1ZSA/ICJkb2VzIiA6ICJkb2VzIG5vdCIpICsgIiBleGlzdC4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgY2hlY2tMb2NhbFN0b3JhZ2VDYWxsYmFjaygpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0sIDEwMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBh
c3luYyBmdW5jdGlvbiB3cml0ZVdlYnNpdGVEYXRhQW5kQ29udGludWUoKSB7CisgICAgICAgIC8v
IFdyaXRlIGNvb2tpZXMuCisgICAgICAgIGF3YWl0IGZldGNoKCIvY29va2llcy9yZXNvdXJjZXMv
c2V0LWh0dHAtb25seS1jb29raWUucGhwP2Nvb2tpZU5hbWU9IiArIGh0dHBPbmx5Q29va2llTmFt
ZSwgeyBjcmVkZW50aWFsczogInNhbWUtb3JpZ2luIiB9KTsKKyAgICAgICAgYXdhaXQgZmV0Y2go
Ii9jb29raWVzL3Jlc291cmNlcy9zZXRDb29raWVzLmNnaSIsIHsgaGVhZGVyczogeyAiU2V0LUNv
b2tpZSI6IHNlcnZlclNpZGVDb29raWVOYW1lICsgIj0xOyBwYXRoPS87IiB9LCBjcmVkZW50aWFs
czogInNhbWUtb3JpZ2luIiB9KTsKKyAgICAgICAgZG9jdW1lbnQuY29va2llID0gY2xpZW50U2lk
ZUNvb2tpZU5hbWUgKyAiPTEiOworCisgICAgICAgIGNoZWNrQ29va2llcyhmYWxzZSk7CisKKyAg
ICAgICAgLy8gV3JpdGUgTG9jYWxTdG9yYWdlCisgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVt
KGxvY2FsU3RvcmFnZU5hbWUsIGxvY2FsU3RvcmFnZVZhbHVlKTsKKyAgICAgICAgY2hlY2tMb2Nh
bFN0b3JhZ2VFeGlzdHMoZmFsc2UsIGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAvLyBXcml0
ZSBJbmRleGVkREIuCisgICAgICAgICAgICBjcmVhdGVJREJEYXRhU3RvcmUoZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgICAgIGNoZWNrSURCRGF0YVN0b3JlRXhpc3RzKGZhbHNlLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkTGluZWJyZWFrVG9PdXRwdXQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgcHJvY2Vzc1dlYnNpdGVEYXRhQW5kQ29udGludWUoKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBwcm9jZXNzV2Vic2l0ZURhdGFBbmRDb250aW51ZSgpIHsKKyAgICAgICAgdGVzdFJ1
bm5lci5pbnN0YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrKGNoZWNrV2Vi
c2l0ZURhdGFBbmRDb250aW51ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc1Byb2Nl
c3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVj
a1dlYnNpdGVEYXRhQW5kQ29udGludWUoKSB7CisgICAgICAgIGNoZWNrQ29va2llcyh0cnVlKTsK
KyAgICAgICAgY2hlY2tMb2NhbFN0b3JhZ2VFeGlzdHModHJ1ZSwgZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgY2hlY2tJREJEYXRhU3RvcmVFeGlzdHModHJ1ZSwgZmluaXNoVGVzdCk7CisgICAg
ICAgIH0pOworICAgIH0KKworICAgIGNvbnN0IG9yaWdpblVuZGVyVGVzdCAgPSAiaHR0cDovLzEy
Ny4wLjAuMTo4MDAwIjsKKyAgICBjb25zdCBvdGhlck9yaWdpbiA9ICJodHRwOi8vbG9jYWxob3N0
OjgwMDAiCisgICAgY29uc3QgdG9wRnJhbWVPcmlnaW4gPSAiaHR0cDovLzEyNy4wLjAuMjo4MDAw
IjsKKyAgICBjb25zdCB0aW1lU3RhbXAgPSBNYXRoLnJvdW5kKChuZXcgRGF0ZSgpKS5nZXRUaW1l
KCkgLyAxMDAwKTsKKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgICAgICBpZiAodGVz
dFJ1bm5lci5pc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24ob3JpZ2luVW5kZXJUZXN0
KSkKKyAgICAgICAgICAgIGFkZE91dHB1dCgiRkFJTDogIiArIG9yaWdpblVuZGVyVGVzdCArICIg
c3RpbGwgaGFzIHVzZXIgaW50ZXJhY3Rpb24gYWZ0ZXIgcHJvY2Vzc2luZy4iKTsKKyAgICAgICAg
cmVzZXRDb29raWVzKCk7CisgICAgICAgIHNldEVuYWJsZUZlYXR1cmUoZmFsc2UsIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0pOwor
ICAgIH0KKworICAgIC8vIERvIG5vdCB1c2Ugc2V0RW5hYmxlRmVhdHVyZSBoZXJlIGJlY2F1c2Ug
d2Ugd2FudCB0byBtYWtlIHN1cmUgd2Vic2l0ZSBkYXRhIGRlbGV0aW9uIGlzIG5vdCBza2lwcGVk
CisgICAgLy8gYnkgdGhlIHByZXNlbmNlIG9mIHBhcmFtZXRlcnMoKS5pc1J1bm5pbmdUZXN0Lgor
ICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGlj
c01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCgzNjAwKTsKKyAgICAgICAgLy8g
TWVyZ2UgYSBzdGF0aXN0aWMgd2l0aCBubyB1c2VyIGludGVyYWN0aW9uIHRvIGNoZWNrIHRoZSAt
MSBjYXNlLgorICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NNZXJnZVN0YXRpc3RpYyhv
dGhlck9yaWdpbiwgdG9wRnJhbWVPcmlnaW4sICIiLCB0aW1lU3RhbXAsIGZhbHNlLCAtMSwgZmFs
c2UsIGZhbHNlLCBmYWxzZSwgMCwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB0ZXN0UnVubmVy
LnNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSh0cnVlLCBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICAgICAgLy8gaW5zZXJ0U3RhdGlzdGljc0V4cGlyZWRTdGF0
aXN0aWMoZG9tYWluLCBoYXNIYWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxsQnV0
Q29va2llRGF0YVJlbW92YWwsIGlzUHJldmFsZW50KQorICAgICAgICAgICAgICAgIHRlc3RSdW5u
ZXIuc2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWMob3JpZ2luVW5kZXJUZXN0LCB0cnVlLCB0
cnVlLCBmYWxzZSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHdyaXRlV2Vic2l0
ZURhdGFBbmRDb250aW51ZSgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0pOworICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL29wZXJh
dGluZy1kYXRlcy1hbGwtYnV0LWNvb2tpZXMtcmVtb3ZlZC5odG1sIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL29wZXJhdGluZy1kYXRlcy1hbGwtYnV0LWNv
b2tpZXMtcmVtb3ZlZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2RlYTc4
ZTYxMDJiN2ExMTc2MDkzYzUxZDE3YWEyNDMxY2RlOTE4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VM
b2FkU3RhdGlzdGljcy9vcGVyYXRpbmctZGF0ZXMtYWxsLWJ1dC1jb29raWVzLXJlbW92ZWQuaHRt
bAorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1s
PgotPGhlYWQ+Ci0gICAgPHNjcmlwdCBzcmM9Ii9jb29raWVzL3Jlc291cmNlcy9jb29raWUtdXRp
bGl0aWVzLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3V0aWwuanMi
Pjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgb25sb2FkPSJzZXRUaW1lb3V0KCdydW5UZXN0KCkn
LCAwKSI+Ci08YnI+Ci08ZGl2IGlkPSJvdXRwdXQiPjwvZGl2PgotPGJyPgotPHNjcmlwdD4KLSAg
ICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLSAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQo
KTsKLQotICAgIGNvbnN0IGh0dHBPbmx5Q29va2llTmFtZSA9ICJodHRwLW9ubHktY29va2llIjsK
LSAgICBjb25zdCBzZXJ2ZXJTaWRlQ29va2llTmFtZSA9ICJzZXJ2ZXItc2lkZS1jb29raWUiOwot
ICAgIGNvbnN0IGNsaWVudFNpZGVDb29raWVOYW1lID0gImNsaWVudC1zaWRlLWNvb2tpZSI7Ci0K
LSAgICBmdW5jdGlvbiBzb3J0U3RyaW5nQXJyYXkoYSwgYikgewotICAgICAgICBhID0gYS50b0xv
d2VyQ2FzZSgpOwotICAgICAgICBiID0gYi50b0xvd2VyQ2FzZSgpOwotCi0gICAgICAgIHJldHVy
biBhID4gYiA/IDEgOiBiID4gYSA/IC0xIDogMDsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBhZGRM
aW5lYnJlYWtUb091dHB1dCgpIHsKLSAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJiciIpOwotICAgICAgICBvdXRwdXQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7Ci0g
ICAgfQotCi0gICAgZnVuY3Rpb24gYWRkT3V0cHV0KG1lc3NhZ2UpIHsKLSAgICAgICAgbGV0IGVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgZWxlbWVudC5p
bm5lclRleHQgPSBtZXNzYWdlOwotICAgICAgICBvdXRwdXQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gY2hlY2tDb29raWVzKGlzQWZ0ZXJEZWxldGlvbikgewot
ICAgICAgICBsZXQgdW5zb3J0ZWRUZXN0UGFzc2VkTWVzc2FnZXMgPSBbXTsKLSAgICAgICAgbGV0
IGNvb2tpZXMgPSBpbnRlcm5hbHMuZ2V0Q29va2llcygpOwotICAgICAgICBpZiAoIWNvb2tpZXMu
bGVuZ3RoICYmIGlzQWZ0ZXJEZWxldGlvbikKLSAgICAgICAgICAgIGFkZE91dHB1dCgiRkFJTDog
IiArICJObyBjb29raWVzIGZvdW5kLiIpOwotICAgICAgICBmb3IgKGxldCBjb29raWUgb2YgY29v
a2llcykgewotICAgICAgICAgICAgc3dpdGNoIChjb29raWUubmFtZSkgewotICAgICAgICAgICAg
ICAgIGNhc2UgaHR0cE9ubHlDb29raWVOYW1lOgotICAgICAgICAgICAgICAgICAgICB1bnNvcnRl
ZFRlc3RQYXNzZWRNZXNzYWdlcy5wdXNoKChpc0FmdGVyRGVsZXRpb24gPyAiQWZ0ZXIiIDogIkJl
Zm9yZSIpICsgIiBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6ICIgKyAoaXNBZnRlckRlbGV0aW9uID8g
IiAiIDogIiIpICsgIkh0dHBPbmx5IGNvb2tpZSBleGlzdHMuIik7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ugc2VydmVyU2lkZUNvb2tpZU5hbWU6Ci0g
ICAgICAgICAgICAgICAgICAgIHVuc29ydGVkVGVzdFBhc3NlZE1lc3NhZ2VzLnB1c2goKGlzQWZ0
ZXJEZWxldGlvbiA/ICJBZnRlciIgOiAiQmVmb3JlIikgKyAiIHN0YXRpc3RpY3MgcHJvY2Vzc2lu
ZzogUmVndWxhciBzZXJ2ZXItc2lkZSBjb29raWUgZXhpc3RzLiIpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIGNsaWVudFNpZGVDb29raWVOYW1lOgot
ICAgICAgICAgICAgICAgICAgICB1bnNvcnRlZFRlc3RQYXNzZWRNZXNzYWdlcy5wdXNoKChpc0Fm
dGVyRGVsZXRpb24gPyAiQWZ0ZXIiIDogIkJlZm9yZSIpICsgIiBzdGF0aXN0aWNzIHByb2Nlc3Np
bmc6IENsaWVudC1zaWRlIGNvb2tpZSBleGlzdHMuIik7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGxldCBzb3J0ZWRUZXN0UGFz
c2VkTWVzc2FnZXMgPSB1bnNvcnRlZFRlc3RQYXNzZWRNZXNzYWdlcy5zb3J0KHNvcnRTdHJpbmdB
cnJheSk7Ci0gICAgICAgIGZvciAobGV0IHRlc3RQYXNzZWRNZXNzYWdlIG9mIHNvcnRlZFRlc3RQ
YXNzZWRNZXNzYWdlcykgewotICAgICAgICAgICAgYWRkT3V0cHV0KHRlc3RQYXNzZWRNZXNzYWdl
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0IGRiTmFtZSA9ICJUZXN0RGF0YWJhc2Ui
OwotCi0gICAgZnVuY3Rpb24gY3JlYXRlSURCRGF0YVN0b3JlKGNhbGxiYWNrKSB7Ci0gICAgICAg
IGxldCByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGJOYW1lKTsKLSAgICAgICAgcmVxdWVzdC5v
bmVycm9yID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBhZGRPdXRwdXQoIkNvdWxkbid0IGNy
ZWF0ZSBpbmRleGVkREIuIik7Ci0gICAgICAgICAgICBmaW5pc2hUZXN0KCk7Ci0gICAgICAgIH07
Ci0gICAgICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKLSAg
ICAgICAgICAgIGxldCBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7Ci0gICAgICAgICAgICBsZXQg
b2JqU3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgidGVzdCIsIHthdXRvSW5jcmVtZW50OiB0
cnVlfSk7Ci0gICAgICAgICAgICBvYmpTdG9yZS5hZGQoInZhbHVlIik7Ci0gICAgICAgICAgICBj
YWxsYmFjaygpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29uc3QgbWF4SW50ZXJ2YWxzID0g
MjA7Ci0KLSAgICBsZXQgaW50ZXJ2YWxDb3VudGVySURCOwotICAgIGxldCBjaGVja0lEQkNhbGxi
YWNrOwotICAgIGxldCBjaGVja0lEQkludGVydmFsSUQ7Ci0gICAgbGV0IHNlbWFwaG9yZUlEQkNo
ZWNrID0gZmFsc2U7Ci0gICAgZnVuY3Rpb24gY2hlY2tJREJEYXRhU3RvcmVFeGlzdHMoaXNBZnRl
ckRlbGV0aW9uLCBjYWxsYmFjaykgewotICAgICAgICBsZXQgcmVxdWVzdDsKLSAgICAgICAgaW50
ZXJ2YWxDb3VudGVySURCID0gMDsKLSAgICAgICAgY2hlY2tJREJDYWxsYmFjayA9IGNhbGxiYWNr
OwotICAgICAgICBpZiAoIWlzQWZ0ZXJEZWxldGlvbikgewotICAgICAgICAgICAgLy8gQ2hlY2sg
dW50aWwgdGhlcmUgaXMgYSBJREIuCi0gICAgICAgICAgICBjaGVja0lEQkludGVydmFsSUQgPSBz
ZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAoc2VtYXBob3JlSURC
Q2hlY2spCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBzZW1h
cGhvcmVJREJDaGVjayA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoKytpbnRlcnZhbENv
dW50ZXJJREIgPj0gbWF4SW50ZXJ2YWxzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNsZWFySW50
ZXJ2YWwoY2hlY2tJREJJbnRlcnZhbElEKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkT3V0cHV0
KCJCZWZvcmUgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBJREIgZW50cnkgZG9lcyBub3QgZXhpc3Qu
Iik7Ci0gICAgICAgICAgICAgICAgICAgIHNlbWFwaG9yZUlEQkNoZWNrID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgICAgIGNoZWNrSURCQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGJOYW1l
KTsKLSAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0lEQkludGVydmFsSUQp
OwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkT3V0cHV0KCJDb3VsZG4ndCBvcGVuIGluZGV4
ZWREQi4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9yZUlEQkNoZWNrID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hUZXN0KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0g
ZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSBuZXh0IGlu
dGVydmFsIGNoZWNrIGFnYWluLgotICAgICAgICAgICAgICAgICAgICAgICAgc2VtYXBob3JlSURC
Q2hlY2sgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAg
ICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjbGVhckludGVydmFsKGNoZWNrSURCSW50ZXJ2YWxJRCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBhZGRPdXRwdXQoIkJlZm9yZSBzdGF0aXN0aWNzIHByb2Nlc3Npbmc6IElEQiBlbnRy
eSBkb2VzIGV4aXN0LiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VtYXBob3JlSURCQ2hl
Y2sgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrSURCQ2FsbGJhY2soKTsK
LSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
LCAyMDApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQ2hlY2sgdW50aWwgdGhl
cmUgaXMgbm8gSURCLgotICAgICAgICAgICAgY2hlY2tJREJJbnRlcnZhbElEID0gc2V0SW50ZXJ2
YWwoZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgIGlmIChzZW1hcGhvcmVJREJDaGVjaykK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHNlbWFwaG9yZUlE
QkNoZWNrID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIGlmICgrK2ludGVydmFsQ291bnRlcklE
QiA+PSBtYXhJbnRlcnZhbHMpIHsKLSAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChj
aGVja0lEQkludGVydmFsSUQpOwotICAgICAgICAgICAgICAgICAgICBhZGRPdXRwdXQoIkFmdGVy
IHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogSURCIGVudHJ5IGRvZXMgZXhpc3QuIik7Ci0gICAgICAg
ICAgICAgICAgICAgIHNlbWFwaG9yZUlEQkNoZWNrID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
ICAgIGNoZWNrSURCQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGJOYW1lKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0lEQkludGVydmFsSUQpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkT3V0cHV0KCJDb3VsZG4ndCBvcGVuIGluZGV4ZWREQi4iKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9yZUlEQkNoZWNrID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBmaW5pc2hUZXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH07Ci0g
ICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24gKCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0lEQkludGVydmFs
SUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkT3V0cHV0KCJBZnRlciBzdGF0aXN0aWNz
IHByb2Nlc3Npbmc6IElEQiBlbnRyeSBkb2VzIG5vdCBleGlzdC4iKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbWFwaG9yZUlEQkNoZWNrID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmaW5pc2hUZXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAg
ICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gTGV0IHRoZSBuZXh0IGludGVydmFsIGNoZWNrIGFnYWluIGJlY2F1c2UgZGVs
ZXRpb24gbWlnaHQgYmUgZGVsYXllZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9y
ZUlEQkNoZWNrID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSwgMjAwKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGxldCBp
bnRlcnZhbENvdW50ZXJMb2NhbFN0b3JhZ2U7Ci0gICAgbGV0IGNoZWNrTG9jYWxTdG9yYWdlQ2Fs
bGJhY2s7Ci0gICAgbGV0IGNoZWNrTG9jYWxTdG9yYWdlSW50ZXJ2YWxJRDsKLSAgICBjb25zdCBs
b2NhbFN0b3JhZ2VOYW1lID0gInRlc3QiOwotICAgIGNvbnN0IGxvY2FsU3RvcmFnZVZhbHVlID0g
InZhbHVlIjsKLSAgICBmdW5jdGlvbiBjaGVja0xvY2FsU3RvcmFnZUV4aXN0cyhpc0FmdGVyRGVs
ZXRpb24sIGNhbGxiYWNrKSB7Ci0gICAgICAgIGludGVydmFsQ291bnRlckxvY2FsU3RvcmFnZSA9
IDA7Ci0gICAgICAgIGNoZWNrTG9jYWxTdG9yYWdlQ2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICAg
ICAgaWYgKCFpc0FmdGVyRGVsZXRpb24pIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHVudGlsIHRo
ZXJlIGlzIExvY2FsU3RvcmFnZS4KLSAgICAgICAgICAgIGNoZWNrTG9jYWxTdG9yYWdlSW50ZXJ2
YWxJRCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICgrK2lu
dGVydmFsQ291bnRlckxvY2FsU3RvcmFnZSA+PSBtYXhJbnRlcnZhbHMpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0xvY2FsU3RvcmFnZUludGVydmFsSUQpOwotICAg
ICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShsb2NhbFN0
b3JhZ2VOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkT3V0cHV0KCJCZWZvcmUgc3RhdGlz
dGljcyBwcm9jZXNzaW5nOiBMb2NhbFN0b3JhZ2UgZW50cnkgIiArICh2YWx1ZSA9PT0gbG9jYWxT
dG9yYWdlVmFsdWUgPyAiZG9lcyIgOiAiZG9lcyBub3QiKSArICIgZXhpc3QuIik7Ci0gICAgICAg
ICAgICAgICAgICAgIGNoZWNrTG9jYWxTdG9yYWdlQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzSGFzTG9jYWxTdG9yYWdlKG9yaWdp
blVuZGVyVGVzdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0xv
Y2FsU3RvcmFnZUludGVydmFsSUQpOwotICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBs
b2NhbFN0b3JhZ2UuZ2V0SXRlbShsb2NhbFN0b3JhZ2VOYW1lKTsKLSAgICAgICAgICAgICAgICAg
ICAgYWRkT3V0cHV0KCJCZWZvcmUgc3RhdGlzdGljcyBwcm9jZXNzaW5nOiBMb2NhbFN0b3JhZ2Ug
ZW50cnkgIiArICh2YWx1ZSA9PT0gbG9jYWxTdG9yYWdlVmFsdWUgPyAiZG9lcyIgOiAiZG9lcyBu
b3QiKSArICIgZXhpc3QuIik7Ci0gICAgICAgICAgICAgICAgICAgIGNoZWNrTG9jYWxTdG9yYWdl
Q2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LCAxMDApOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQ2hlY2sgdW50aWwgdGhlcmUgaXMgbm8gTG9j
YWxTdG9yYWdlLgotICAgICAgICAgICAgY2hlY2tMb2NhbFN0b3JhZ2VJbnRlcnZhbElEID0gc2V0
SW50ZXJ2YWwoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCsraW50ZXJ2YWxDb3Vu
dGVyTG9jYWxTdG9yYWdlID49IG1heEludGVydmFscykgewotICAgICAgICAgICAgICAgICAgICBj
bGVhckludGVydmFsKGNoZWNrTG9jYWxTdG9yYWdlSW50ZXJ2YWxJRCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGxldCB2YWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGxvY2FsU3RvcmFnZU5hbWUp
OwotICAgICAgICAgICAgICAgICAgICBhZGRPdXRwdXQoIkFmdGVyIHN0YXRpc3RpY3MgcHJvY2Vz
c2luZzogTG9jYWxTdG9yYWdlIGVudHJ5ICIgKyAodmFsdWUgPT09IGxvY2FsU3RvcmFnZVZhbHVl
ID8gImRvZXMiIDogImRvZXMgbm90IikgKyAiIGV4aXN0LiIpOwotICAgICAgICAgICAgICAgICAg
ICBjaGVja0xvY2FsU3RvcmFnZUNhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NIYXNMb2NhbFN0b3JhZ2Uob3JpZ2luVW5kZXJUZXN0
KSkgewotICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGNoZWNrTG9jYWxTdG9yYWdl
SW50ZXJ2YWxJRCk7Ci0gICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGxvY2FsU3RvcmFn
ZS5nZXRJdGVtKGxvY2FsU3RvcmFnZU5hbWUpOwotICAgICAgICAgICAgICAgICAgICBhZGRPdXRw
dXQoIkFmdGVyIHN0YXRpc3RpY3MgcHJvY2Vzc2luZzogTG9jYWxTdG9yYWdlIGVudHJ5ICIgKyAo
dmFsdWUgPT09IGxvY2FsU3RvcmFnZVZhbHVlID8gImRvZXMiIDogImRvZXMgbm90IikgKyAiIGV4
aXN0LiIpOwotICAgICAgICAgICAgICAgICAgICBjaGVja0xvY2FsU3RvcmFnZUNhbGxiYWNrKCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwgMTAwKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGFzeW5jIGZ1bmN0aW9uIHdyaXRlV2Vic2l0ZURhdGFBbmRDb250aW51ZSgpIHsK
LSAgICAgICAgLy8gV3JpdGUgY29va2llcy4KLSAgICAgICAgYXdhaXQgZmV0Y2goIi9jb29raWVz
L3Jlc291cmNlcy9zZXQtaHR0cC1vbmx5LWNvb2tpZS5waHA/Y29va2llTmFtZT0iICsgaHR0cE9u
bHlDb29raWVOYW1lLCB7IGNyZWRlbnRpYWxzOiAic2FtZS1vcmlnaW4iIH0pOwotICAgICAgICBh
d2FpdCBmZXRjaCgiL2Nvb2tpZXMvcmVzb3VyY2VzL3NldENvb2tpZXMuY2dpIiwgeyBoZWFkZXJz
OiB7ICJTZXQtQ29va2llIjogc2VydmVyU2lkZUNvb2tpZU5hbWUgKyAiPTE7IHBhdGg9LzsiIH0s
IGNyZWRlbnRpYWxzOiAic2FtZS1vcmlnaW4iIH0pOwotICAgICAgICBkb2N1bWVudC5jb29raWUg
PSBjbGllbnRTaWRlQ29va2llTmFtZSArICI9MSI7Ci0KLSAgICAgICAgY2hlY2tDb29raWVzKGZh
bHNlKTsKLQotICAgICAgICAvLyBXcml0ZSBMb2NhbFN0b3JhZ2UKLSAgICAgICAgbG9jYWxTdG9y
YWdlLnNldEl0ZW0obG9jYWxTdG9yYWdlTmFtZSwgbG9jYWxTdG9yYWdlVmFsdWUpOwotICAgICAg
ICBjaGVja0xvY2FsU3RvcmFnZUV4aXN0cyhmYWxzZSwgZnVuY3Rpb24oKSB7Ci0KLSAgICAgICAg
ICAgIC8vIFdyaXRlIEluZGV4ZWREQi4KLSAgICAgICAgICAgIGNyZWF0ZUlEQkRhdGFTdG9yZShm
dW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgY2hlY2tJREJEYXRhU3RvcmVFeGlzdHMoZmFs
c2UsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICBhZGRMaW5lYnJlYWtUb091dHB1
dCgpOwotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzV2Vic2l0ZURhdGFBbmRDb250aW51ZSgp
OwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAg
IH0KLQotICAgIGZ1bmN0aW9uIHByb2Nlc3NXZWJzaXRlRGF0YUFuZENvbnRpbnVlKCkgewotICAg
ICAgICB0ZXN0UnVubmVyLmluc3RhbGxTdGF0aXN0aWNzRGlkU2NhbkRhdGFSZWNvcmRzQ2FsbGJh
Y2soY2hlY2tXZWJzaXRlRGF0YUFuZENvbnRpbnVlKTsKLSAgICAgICAgdGVzdFJ1bm5lci5zdGF0
aXN0aWNzUHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIGNoZWNrV2Vic2l0ZURhdGFBbmRDb250aW51ZSgpIHsKLSAgICAgICAgY2hlY2tDb29r
aWVzKHRydWUpOwotICAgICAgICBjaGVja0xvY2FsU3RvcmFnZUV4aXN0cyh0cnVlLCBmdW5jdGlv
biAoKSB7Ci0gICAgICAgICAgICBjaGVja0lEQkRhdGFTdG9yZUV4aXN0cyh0cnVlLCBmaW5pc2hU
ZXN0KTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgY29uc3Qgb3JpZ2luVW5kZXJUZXN0ICA9
ICJodHRwOi8vMTI3LjAuMC4xOjgwMDAiOwotICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7Ci0g
ICAgICAgIGlmICh0ZXN0UnVubmVyLmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihv
cmlnaW5VbmRlclRlc3QpKQotICAgICAgICAgICAgYWRkT3V0cHV0KCJGQUlMOiAiICsgb3JpZ2lu
VW5kZXJUZXN0ICsgIiBzdGlsbCBoYXMgdXNlciBpbnRlcmFjdGlvbiBhZnRlciBwcm9jZXNzaW5n
LiIpOwotICAgICAgICByZXNldENvb2tpZXMoKTsKLSAgICAgICAgc2V0RW5hYmxlRmVhdHVyZShm
YWxzZSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
LSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKLSAgICAgICAg
c2V0RW5hYmxlRmVhdHVyZSh0cnVlLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB0ZXN0UnVu
bmVyLnNldFN0YXRpc3RpY3NGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSh0cnVlLCBm
dW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgLy8gaW5zZXJ0U3RhdGlzdGljc0V4cGlyZWRT
dGF0aXN0aWMoZG9tYWluLCBoYXNIYWRVc2VySW50ZXJhY3Rpb24sIGlzU2NoZWR1bGVkRm9yQWxs
QnV0Q29va2llRGF0YVJlbW92YWwsIGlzUHJldmFsZW50KQotICAgICAgICAgICAgICAgIHRlc3RS
dW5uZXIuc2V0U3RhdGlzdGljc0V4cGlyZWRTdGF0aXN0aWMob3JpZ2luVW5kZXJUZXN0LCB0cnVl
LCB0cnVlLCBmYWxzZSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlV2Vi
c2l0ZURhdGFBbmRDb250aW51ZSgpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
fSk7Ci0gICAgICAgIH0pOwotICAgIH0KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>