<?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>40422</bug_id>
          
          <creation_ts>2010-06-10 05:59:56 -0700</creation_ts>
          <short_desc>Web Inspector: Port performSearch from InjectedScript to InspectorDOMAgent.</short_desc>
          <delta_ts>2010-06-14 09:37:04 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>dglazkov</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>236324</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-10 05:59:56 -0700</bug_when>
    <thetext>Two reasons here:
1) We want to search within iframes from other domains and JS can&apos;t do that
2) We want to slowly get rid of InjectedScript

I am working on the port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236500</commentid>
    <comment_count>1</comment_count>
      <attachid>58404</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-10 13:21:21 -0700</bug_when>
    <thetext>Created attachment 58404
[PATCH] Proposed change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236502</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-10 13:22:01 -0700</bug_when>
    <thetext>Attachment 58404 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/inspector/InspectorDOMAgent.cpp:88:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/inspector/InspectorDOMAgent.cpp:103:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/inspector/InspectorDOMAgent.cpp:114:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/inspector/InspectorDOMAgent.cpp:125:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/inspector/InspectorDOMAgent.cpp:141:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/inspector/InspectorDOMAgent.cpp:616:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 6 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236504</commentid>
    <comment_count>3</comment_count>
      <attachid>58405</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-10 13:26:22 -0700</bug_when>
    <thetext>Created attachment 58405
[PATCH] Same with proper formatting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236511</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-10 13:42:58 -0700</bug_when>
    <thetext>Attachment 58404 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3205155</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236513</commentid>
    <comment_count>5</comment_count>
      <attachid>58408</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-10 13:47:03 -0700</bug_when>
    <thetext>Created attachment 58408
[PATCH] Same + missing import for Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236516</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-10 14:00:10 -0700</bug_when>
    <thetext>Attachment 58405 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3187144</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236527</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-10 14:17:38 -0700</bug_when>
    <thetext>Attachment 58408 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3226172</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236703</commentid>
    <comment_count>8</comment_count>
      <attachid>58449</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-10 23:18:21 -0700</bug_when>
    <thetext>Created attachment 58449
[PATCH] More imports! (is this going to end?).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236721</commentid>
    <comment_count>9</comment_count>
      <attachid>58449</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-06-11 01:00:49 -0700</bug_when>
    <thetext>Comment on attachment 58449
[PATCH] More imports! (is this going to end?).


WebCore/inspector/InspectorResource.cpp: 
 +          jsonObject.set(&quot;suggestedFilename&quot;, m_suggestedFilename);
Remove suggestedFilename handling from inspecor.js too.

WebCore/inspector/InspectorDOMAgent.cpp:1554
 +      m_pendingMatchJobs.removeFirst();
Use takeFirst instead.

WebCore/inspector/InspectorDOMAgent.cpp:644
 +      RefPtr&lt;NodeList&gt; frameOwners = mainFrameDocument()-&gt;querySelectorAll(&quot;iframe, frame, object&quot;, ec);
Why not use FrameTree to iterate all frames in the page?

WebCore/inspector/InspectorDOMAgent.cpp:696
 +          m_pendingMatchJobs.append(new MatchPlainTextJob(*it, escapedQuery));
Please put this line first in the loop body and remove it from all the ifs above.

WebCore/inspector/InspectorDOMAgent.cpp:674
 +              m_pendingMatchJobs.append(new MatchXPathJob(*it, &quot;//*[contains(name(), &apos;&quot; + escapedTagNameQuery + &quot;&apos;)]&quot;));
This could be implemented as

//*[contains(name(), &apos;escapedTagNameQuery&apos;) and string-length(substring-after(name(), &apos;escapedTagNameQuery&apos;)) = 0]


WebCore/inspector/InspectorDOMAgent.h:78
 +      class MatchJob {
Can you leave only forward declaration of the class here and put its definition into InspectorDOMAgent.cpp?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236739</commentid>
    <comment_count>10</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-11 02:15:29 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 58449 [details])
&gt; 
&gt; WebCore/inspector/InspectorResource.cpp: 
&gt;  +          jsonObject.set(&quot;suggestedFilename&quot;, m_suggestedFilename);
&gt; Remove suggestedFilename handling from inspecor.js too.
&gt; 

I am just removing the dupe entry.

&gt; WebCore/inspector/InspectorDOMAgent.cpp:1554
&gt;  +      m_pendingMatchJobs.removeFirst();
&gt; Use takeFirst instead.
&gt;

Done. thanks.
 
&gt; WebCore/inspector/InspectorDOMAgent.cpp:644
&gt;  +      RefPtr&lt;NodeList&gt; frameOwners = mainFrameDocument()-&gt;querySelectorAll(&quot;iframe, frame, object&quot;, ec);
&gt; Why not use FrameTree to iterate all frames in the page?
&gt; 

I don&apos;t want to get outside DOM domain, documents&apos; frame might be unavailable :)

&gt; WebCore/inspector/InspectorDOMAgent.cpp:696
&gt;  +          m_pendingMatchJobs.append(new MatchPlainTextJob(*it, escapedQuery));
&gt; Please put this line first in the loop body and remove it from all the ifs above.
&gt; 

I can&apos;t. We keep specific order of matches (ordered by relevance).

&gt; WebCore/inspector/InspectorDOMAgent.cpp:674
&gt;  +              m_pendingMatchJobs.append(new MatchXPathJob(*it, &quot;//*[contains(name(), &apos;&quot; + escapedTagNameQuery + &quot;&apos;)]&quot;));
&gt; This could be implemented as
&gt; 
&gt; //*[contains(name(), &apos;escapedTagNameQuery&apos;) and string-length(substring-after(name(), &apos;escapedTagNameQuery&apos;)) = 0]
&gt; 

I am only porting code, don&apos;t want to fix it yet.

&gt; 
&gt; WebCore/inspector/InspectorDOMAgent.h:78
&gt;  +      class MatchJob {
&gt; Can you leave only forward declaration of the class here and put its definition into InspectorDOMAgent.cpp?

Done. thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236742</commentid>
    <comment_count>11</comment_count>
      <attachid>58456</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-11 02:18:16 -0700</bug_when>
    <thetext>Created attachment 58456
[PATCH] Review comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236781</commentid>
    <comment_count>12</comment_count>
      <attachid>58464</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-11 04:59:13 -0700</bug_when>
    <thetext>Created attachment 58464
[PATCH] With nice frame tree traversal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236802</commentid>
    <comment_count>13</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-11 06:32:30 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/ChangeLog
	M	LayoutTests/inspector/elements-panel-search.html
	M	WebCore/ChangeLog
	M	WebCore/inspector/InjectedScriptHost.cpp
	M	WebCore/inspector/InjectedScriptHost.h
	M	WebCore/inspector/InjectedScriptHost.idl
	M	WebCore/inspector/InspectorBackend.cpp
	M	WebCore/inspector/InspectorBackend.h
	M	WebCore/inspector/InspectorBackend.idl
	M	WebCore/inspector/InspectorDOMAgent.cpp
	M	WebCore/inspector/InspectorDOMAgent.h
	M	WebCore/inspector/InspectorFrontend.cpp
	M	WebCore/inspector/InspectorFrontend.h
	M	WebCore/inspector/InspectorResource.cpp
	M	WebCore/inspector/front-end/ElementsPanel.js
	M	WebCore/inspector/front-end/InjectedScript.js
	M	WebCore/inspector/front-end/InjectedScriptAccess.js
	M	WebCore/inspector/front-end/InspectorBackendStub.js
	M	WebKit/chromium/ChangeLog
	M	WebKit/chromium/src/js/InspectorControllerImpl.js
Committed r61012</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237166</commentid>
    <comment_count>14</comment_count>
      <attachid>58464</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-06-11 17:17:34 -0700</bug_when>
    <thetext>Comment on attachment 58464
[PATCH] With nice frame tree traversal.

Good solution! Its nice to see that using clean OO that this
actually made the code more readable than JavaScript. =)

I know this was landed, and it looks good to me, I just have
some late comments (as usual).


&gt; (WebCore::InspectorBackend::searchCanceled):
&gt; (WebCore::InspectorDOMAgent::searchCanceled):
&gt; (WebInspector.ElementsPanel.prototype.searchCanceled):

&gt; +void InspectorDOMAgent::searchCanceled()
&gt; +{
&gt; +    if (m_matchJobsTimer.isActive())
&gt; +        m_matchJobsTimer.stop();
&gt; +    deleteAllValues(m_pendingMatchJobs);
&gt; +    m_pendingMatchJobs.clear();
&gt; +    m_searchResults.clear();
&gt; +}

I know &quot;searchCanceled&quot; was the original name, but I think it
makes more sense to call this &quot;cancelSearch&quot;. Because that
is what it is doing and that is what most of its callers want
to do.


&gt; +    void performSearch(const String&amp; query, bool runSynchronously);

It would be nice to have a comment here that runSynchronously is here
only for testing. There is a comment in the implementation, but it
might have been more noticeable here.


&gt; WebCore/inspector/InspectorDOMAgent.cpp
&gt; + 701         m_pendingMatchJobs.append(new MatchExactTagNamesJob(document, tagNameQuery));
&gt; + 702         m_pendingMatchJobs.append(new MatchQuerySelectorAllJob(document, &quot;[&quot; + attributeNameQuery + &quot;]&quot;));
&gt; + 703         m_pendingMatchJobs.append(new MatchQuerySelectorAllJob(document, whitespaceTrimmedQuery));

Can we remove line 701 in favor of the more generic line 703?
I always thought that:

  var str = &apos;...&apos;;
  document.getElementsByTagName(str) ⊆ document.querySelectorAll(str)

I realize your changes here keep the results the same as the
JavaScript. My proposal would be to make this just:

  m_pendingMatchJobs.append(new MatchQuerySelectorAllJob(document, whitespaceTrimmedQuery));
  m_pendingMatchJobs.append(new MatchQuerySelectorAllJob(document, &quot;[&quot; + attributeNameQuery + &quot;]&quot;));


&gt; WebCore/inspector/InspectorDOMAgent.h
&gt; +#include &quot;Document.h&quot;
&gt;  #include &quot;EventListener.h&quot;
&gt;  #include &quot;EventTarget.h&quot;
&gt;  #include &quot;InspectorCSSStore.h&quot;
&gt; +#include &quot;NodeList.h&quot;
&gt;  #include &quot;ScriptArray.h&quot;
&gt;  #include &quot;ScriptObject.h&quot;
&gt;  #include &quot;ScriptState.h&quot;
&gt; +#include &quot;Timer.h&quot;
&gt; ...
&gt; -    class Document;

With the recent concern over build times, I&apos;ve been taking
a look at these. NodeList is only used in the .cpp and not the
.h. Is there an advantage to putting this in the .h instead of
just the .cpp. Same thing for Document? Prolly not a big deal
in this case, but I&apos;m interested in why this changed.


&gt; +    m_matchJobsTimer.startOneShot(0.025);

Magic value. It was magic before too =(


&gt; WebCore/inspector/front-end/InjectedScript.js
&gt;  // Called from within InspectorController on the &apos;inspected page&apos; side.
&gt;  InjectedScript.reset = function()
&gt;  {
&gt; -    InjectedScript._searchResults = [];
&gt; -    InjectedScript._includedInSearchResultsPropertyName = &quot;__includedInInspectorSearchResults&quot;;
&gt;  }
&gt;  
&gt;  InjectedScript.reset();

Can you just remove all of this code, including the lines
you left in? This looks the only caller, and it looks like
now it is just saving a reference (and calling) an empty
function. You now clear the search results in
InspectorDOMAgent::reset and InspectorDOMAgent::performSearch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237248</commentid>
    <comment_count>15</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-11 23:37:28 -0700</bug_when>
    <thetext>Joe, all good suggestions, thanks.

&gt; I know &quot;searchCanceled&quot; was the original name, but I think it
&gt; makes more sense to call this &quot;cancelSearch&quot;. Because that
&gt; is what it is doing and that is what most of its callers want
&gt; to do.
&gt; 

True, I was porting the code and wanted to keep the original naming in the pure port change.

&gt; 
&gt; &gt; +    void performSearch(const String&amp; query, bool runSynchronously);
&gt; 
&gt; It would be nice to have a comment here that runSynchronously is here
&gt; only for testing. There is a comment in the implementation, but it
&gt; might have been more noticeable here.
&gt; 

He-he, request to add comment into WebKit source :). In fact, I can see us using it not only for testing at some time. Imagine that alternate front-ends connect to inspector using the protocol, they might want to search synchronously.

&gt; Can we remove line 701 in favor of the more generic line 703?
&gt; I always thought that:
&gt; 

This is a pure port and I did not want regressions. What you suggest may show tag name matches after the attribute matches, hence breaking the original order.

&gt; &gt; WebCore/inspector/InspectorDOMAgent.h
&gt; &gt; +#include &quot;Document.h&quot;
&gt; &gt;  #include &quot;EventListener.h&quot;
&gt; &gt;  #include &quot;EventTarget.h&quot;
&gt; &gt;  #include &quot;InspectorCSSStore.h&quot;
&gt; &gt; +#include &quot;NodeList.h&quot;
&gt; &gt;  #include &quot;ScriptArray.h&quot;
&gt; &gt;  #include &quot;ScriptObject.h&quot;
&gt; &gt;  #include &quot;ScriptState.h&quot;
&gt; &gt; +#include &quot;Timer.h&quot;
&gt; &gt; ...
&gt; &gt; -    class Document;
&gt; 
&gt; With the recent concern over build times, I&apos;ve been taking
&gt; a look at these. NodeList is only used in the .cpp and not the
&gt; .h. Is there an advantage to putting this in the .h instead of
&gt; just the .cpp. Same thing for Document? Prolly not a big deal
&gt; in this case, but I&apos;m interested in why this changed.
&gt; 

Ok, this is my bad. First version of the patch had MatchJob declared in .h, so it needed imports. Then, driven with the build time concern, it moved to .cpp, but I forgot to wipe out the imports. Will fix in subsequent patch.

&gt; 
&gt; &gt; +    m_matchJobsTimer.startOneShot(0.025);
&gt; 
&gt; Magic value. It was magic before too =(
&gt; 

Magic indeed.

&gt; 
&gt; &gt; WebCore/inspector/front-end/InjectedScript.js
&gt; &gt;  // Called from within InspectorController on the &apos;inspected page&apos; side.
&gt; &gt;  InjectedScript.reset = function()
&gt; &gt;  {
&gt; &gt; -    InjectedScript._searchResults = [];
&gt; &gt; -    InjectedScript._includedInSearchResultsPropertyName = &quot;__includedInInspectorSearchResults&quot;;
&gt; &gt;  }
&gt; &gt;  
&gt; &gt;  InjectedScript.reset();
&gt; 
&gt; Can you just remove all of this code, including the lines
&gt; you left in? This looks the only caller, and it looks like
&gt; now it is just saving a reference (and calling) an empty
&gt; function. You now clear the search results in
&gt; InspectorDOMAgent::reset and InspectorDOMAgent::performSearch.

My plan is to remove the whole thing if we can. Rationale: 1) injecting JS into the page might be harmful 2) it makes our remote debugging protocol not as clean as pure InspectorFrontend / InspectorBackend. I was hesitant removing this reset since it might have been overriden in the chromium port. Now I see it is not, so probably worth a cleanup next time we port something from it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237865</commentid>
    <comment_count>16</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-06-14 09:37:04 -0700</bug_when>
    <thetext>&gt; &gt; It would be nice to have a comment here that runSynchronously
&gt; &gt; is here only for testing.
&gt; 
&gt; [...] they might want to search synchronously.

Sounds good.


&gt; &gt; Can we remove line 701 in favor of the more generic line 703?
&gt; &gt; I always thought that:
&gt; 
&gt; This is a pure port and I did not want regressions. What you suggest
&gt; may show tag name matches after the attribute matches, hence
&gt; breaking the original order.

Yes, I was aware, but I think this would still be for the better. It gets rid
of a full DOM tree traversal. I don&apos;t think this is a major issue, the same
results are returned, just their order is different (and hopefully faster).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58404</attachid>
            <date>2010-06-10 13:21:21 -0700</date>
            <delta_ts>2010-06-10 13:26:22 -0700</delta_ts>
            <desc>[PATCH] Proposed change.</desc>
            <filename>perform_search</filename>
            <type>text/plain</type>
            <size>42444</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2ZGQzYWMwLi45OTljYTM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDYt
MTAgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogUG9ydCBw
ZXJmb3JtU2VhcmNoIGZyb20gSW5qZWN0ZWRTY3JpcHQgdG8gSW5zcGVjdG9yRE9NQWdlbnQuCisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNDIyCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvZWxlbWVudHMtcGFuZWwtc2VhcmNoLmh0bWw6CisKIDIwMTAt
MDYtMDggIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdkLiBVcGRhdGVkIHRlc3RfZXhwZWN0YXRpb25zLnR4dCB0byBmb2xsb3cgcjYwODIyCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtcGFuZWwtc2VhcmNoLmh0
bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtcGFuZWwtc2VhcmNoLmh0bWwKaW5k
ZXggNGYxNjJkYi4uZDBkNDI4MyAxMDA3NTUKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Vs
ZW1lbnRzLXBhbmVsLXNlYXJjaC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9lbGVt
ZW50cy1wYW5lbC1zZWFyY2guaHRtbApAQCAtMzEsNyArMzEsNiBAQCBmdW5jdGlvbiBmcm9udGVu
ZF9wZXJmb3JtU2VhcmNoKHRlc3RDb250cm9sbGVyKQogCiAgICAgV2ViSW5zcGVjdG9yLmFkZE5v
ZGVzVG9TZWFyY2hSZXN1bHQgPSBmdW5jdGlvbihub2RlSWRzKQogICAgIHsKLSAgICAgICAgdmFy
IG5vZGVJZHMgPSBub2RlSWRzLnNwbGl0KCIsIik7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbm9kZUlkcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgdmFyIG5vZGUgPSBXZWJJbnNw
ZWN0b3IuZG9tQWdlbnQubm9kZUZvcklkKG5vZGVJZHNbaV0pOwogICAgICAgICAgICAgaWYgKG5v
ZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKQpAQCAtNDEsMTkgKzQwLDE5IEBAIGZ1bmN0
aW9uIGZyb250ZW5kX3BlcmZvcm1TZWFyY2godGVzdENvbnRyb2xsZXIpCiAgICAgICAgIH0KICAg
ICB9CiAgICAgLy8gUGxhaW4gdGV4dC4KLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZh
dWx0KCkucGVyZm9ybVNlYXJjaCgiRm9vIiArICJCYXIiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsK
KyAgICBJbnNwZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goIkZvbyIgKyAiQmFyIiwgdHJ1ZSk7
CiAgICAgLy8gUGFydGlhbCB0ZXh0LgotICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdldERlZmF1
bHQoKS5wZXJmb3JtU2VhcmNoKCJvbyIgKyAiQmEiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsKKyAg
ICBJbnNwZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goIm9vIiArICJCYSIsIHRydWUpOwogICAg
IC8vIFN0YXJ0IHRhZy4KLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZhdWx0KCkucGVy
Zm9ybVNlYXJjaCgiPGlucHUiICsgInQiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsKKyAgICBJbnNw
ZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goIjxpbnB1IiArICJ0IiwgdHJ1ZSk7CiAgICAgLy8g
UGFydGlhbCB0YWcuCi0gICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0RGVmYXVsdCgpLnBlcmZv
cm1TZWFyY2goIm5wdSIgKyAidCIsIHRydWUsIGZ1bmN0aW9uKCkge30pOworICAgIEluc3BlY3Rv
ckJhY2tlbmQucGVyZm9ybVNlYXJjaCgibnB1IiArICJ0IiwgdHJ1ZSk7CiAgICAgLy8gRXhhY3Qg
YXR0cmlidXRlIG5hbWUuCi0gICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0RGVmYXVsdCgpLnBl
cmZvcm1TZWFyY2goInZhbHUiICsgImUiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsKKyAgICBJbnNw
ZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goInZhbHUiICsgImUiLCB0cnVlKTsKICAgICAvLyBF
eGFjdCBhdHRyaWJ1dGUgdmFsPD51ZS4KLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZh
dWx0KCkucGVyZm9ybVNlYXJjaCgiSW4iICsgInB1dFZhIiArICJsIiwgdHJ1ZSwgZnVuY3Rpb24o
KSB7fSk7CisgICAgSW5zcGVjdG9yQmFja2VuZC5wZXJmb3JtU2VhcmNoKCJJbiIgKyAicHV0VmEi
ICsgImwiLCB0cnVlKTsKICAgICAvLyBQYXJ0aWFsIGF0dHJpYnV0ZSB2YWw8PnVlLgotICAgIElu
amVjdGVkU2NyaXB0QWNjZXNzLmdldERlZmF1bHQoKS5wZXJmb3JtU2VhcmNoKCJuIiArICJwdXRW
YSIgKyAibCIsIHRydWUsIGZ1bmN0aW9uKCkge30pOworICAgIEluc3BlY3RvckJhY2tlbmQucGVy
Zm9ybVNlYXJjaCgibiIgKyAicHV0VmEiICsgImwiLCB0cnVlKTsKIAogICAgIHRlc3RDb250cm9s
bGVyLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoZnVuY3Rpb24oKSB7CiAgICAgICAgIHRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoc2VhcmNoUmVzdWx0cyk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDMwNDc4ZWEuLjA2YjE3OTMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDMgQEAKKzIwMTAtMDYtMTAgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2ViIEluc3BlY3RvcjogUG9ydCBwZXJmb3JtU2VhcmNoIGZyb20gSW5qZWN0ZWRTY3JpcHQgdG8g
SW5zcGVjdG9yRE9NQWdlbnQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQwNDIyCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRI
b3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6YWRkTm9kZXNU
b1NlYXJjaFJlc3VsdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6cGVyZm9ybVNlYXJjaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpzZWFyY2hDYW5jZWxlZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZC5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6On5JbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6c2VhcmNoQ2FuY2VsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6Om9uTWF0Y2hKb2JzVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OnJlcG9ydE5vZGVzQXNTZWFyY2hSZXN1bHRzKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGNoSm9iOjp+TWF0
Y2hKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TWF0Y2hKb2I6Ok1hdGNoSm9iKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1hdGNoSm9iOjphZGROb2Rlc1RvUmVzdWx0cyk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kOjphZGROb2Rlc1RvU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2U6OnVwZGF0ZVNjcmlwdE9i
amVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlLnNlYXJjaENhbmNl
bGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZS5wZXJm
b3JtU2VhcmNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlw
ZS5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0luamVjdGVkU2NyaXB0LmpzOgorICAgICAgICAoaW5qZWN0ZWRTY3JpcHRDb25zdHJ1Y3Rvcik6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qczoK
KwogMjAxMC0wNi0wOCAgVmFuZ2VsaXMgS29ra2V2aXMgIDx2YW5nZWxpc0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0SG9zdC5jcHAKaW5kZXggYzU4MDczZC4uNGMzYzdhZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCkBAIC0xMTAsMTIgKzExMCw2IEBAIGxv
bmcgSW5qZWN0ZWRTY3JpcHRIb3N0OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5vZGUs
IGJvb2wgd2l0aENoaWxkcmVuLCBiCiAgICAgcmV0dXJuIGlkOwogfQogCi12b2lkIEluamVjdGVk
U2NyaXB0SG9zdDo6YWRkTm9kZXNUb1NlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIG5vZGVJZHMp
Ci17Ci0gICAgaWYgKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCA9IGluc3BlY3RvckZyb250
ZW5kKCkpCi0gICAgICAgIGZyb250ZW5kLT5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KG5vZGVJZHMp
OwotfQotCiBsb25nIEluamVjdGVkU2NyaXB0SG9zdDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5k
KGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQg
PSBpbnNwZWN0b3JET01BZ2VudCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRIb3N0LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3Qu
aAppbmRleCBiZWZmYzlkLi42NmNmNDFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEhvc3QuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dEhvc3QuaApAQCAtNjksNyArNjksNiBAQCBwdWJsaWM6CiAgICAgTm9kZSogbm9kZUZvcklkKGxv
bmcgbm9kZUlkKTsKICAgICBsb25nIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9kZSwg
Ym9vbCB3aXRoQ2hpbGRyZW4sIGJvb2wgc2VsZWN0SW5VSSk7CiAKLSAgICB2b2lkIGFkZE5vZGVz
VG9TZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBub2RlSWRzKTsKICAgICBsb25nIHB1c2hOb2Rl
QnlQYXRoVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHBhdGgpOwogCiAjaWYgRU5BQkxFKERBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0Lmlk
bCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5pZGwKaW5kZXggOGIyNDE1
Ny4uNWE0Y2UxOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRI
b3N0LmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaWRsCkBA
IC0zOCw3ICszOCw2IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0
IG5vZGVGb3JJZChpbiBsb25nIG5vZGVJZCk7CiAgICAgICAgIFtDdXN0b21dIGludCBwdXNoTm9k
ZVBhdGhUb0Zyb250ZW5kKGluIERPTU9iamVjdCBub2RlLCBpbiBib29sZWFuIHdpdGhDaGlsZHJl
biwgaW4gYm9vbGVhbiBzZWxlY3RJblVJKTsKIAotICAgICAgICB2b2lkIGFkZE5vZGVzVG9TZWFy
Y2hSZXN1bHQoaW4gRE9NU3RyaW5nIG5vZGVJZHMpOwogICAgICAgICBsb25nIHB1c2hOb2RlQnlQ
YXRoVG9Gcm9udGVuZChpbiBET01TdHJpbmcgcGF0aCk7CiAKICNpZiBkZWZpbmVkKEVOQUJMRV9K
QVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcAppbmRleCAzNmY0MWI4Li44MTRlNWQyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcApAQCAtMzUxLDYgKzM1MSwxOCBAQCB2
b2lkIEluc3BlY3RvckJhY2tlbmQ6OmNoYW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9k
ZUlkLCBjb25zdCBBdG9taWNTdHJpbgogICAgICAgICBkb21BZ2VudC0+Y2hhbmdlVGFnTmFtZShj
YWxsSWQsIG5vZGVJZCwgdGFnTmFtZSwgZXhwYW5kZWQpOwogfQogCit2b2lkIEluc3BlY3RvckJh
Y2tlbmQ6OnBlcmZvcm1TZWFyY2goY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCBydW5TeW5jaHJv
bm91c2x5KQoreworICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0
b3JET01BZ2VudCgpKQorICAgICAgICBkb21BZ2VudC0+cGVyZm9ybVNlYXJjaChxdWVyeSwgcnVu
U3luY2hyb25vdXNseSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c2VhcmNoQ2FuY2Vs
ZWQoKQoreworICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JE
T01BZ2VudCgpKQorICAgICAgICBkb21BZ2VudC0+c2VhcmNoQ2FuY2VsZWQoKTsKK30KKwogdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBi
b29sIGF1dGhvck9ubHkpCiB7CiAgICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9
IGluc3BlY3RvckRPTUFnZW50KCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKaW5k
ZXggMGViOGU0Yy4uYzg4YzIzYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApA
QCAtMTE2LDYgKzExNiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvcHlOb2RlKGxvbmcgbm9kZUlk
KTsKICAgICB2b2lkIHJlbW92ZU5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKICAgICB2
b2lkIGNoYW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25zdCBBdG9taWNT
dHJpbmcmIHRhZ05hbWUsIGJvb2wgZXhwYW5kZWQpOworICAgIHZvaWQgcGVyZm9ybVNlYXJjaChj
b25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sIHJ1blN5bmNocm9ub3VzbHkpOworICAgIHZvaWQgc2Vh
cmNoQ2FuY2VsZWQoKTsKIAogICAgIHZvaWQgZ2V0U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5v
ZGVJZCwgYm9vbCBhdXRoT25seSk7CiAgICAgdm9pZCBnZXRBbGxTdHlsZXMobG9uZyBjYWxsSWQp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAppbmRleCBlOGNmZGI5Li5lZThh
NTg1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbApAQCAtOTEsNiArOTEs
OSBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIHZvaWQgY29weU5vZGUoaW4gbG9uZyBub2RlSWQp
OwogICAgICAgICB2b2lkIHJlbW92ZU5vZGUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlk
KTsKICAgICAgICAgdm9pZCBjaGFuZ2VUYWdOYW1lKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIG5v
ZGVJZCwgaW4gRE9NU3RyaW5nIG5ld1RhZ05hbWUsIGluIGJvb2xlYW4gZXhwYW5kZWQpOworICAg
ICAgICB2b2lkIHBlcmZvcm1TZWFyY2goaW4gRE9NU3RyaW5nIHF1ZXJ5LCBpbiBib29sZWFuIHJ1
blN5bmNocm9ub3VzbHkpOworICAgICAgICB2b2lkIHNlYXJjaENhbmNlbGVkKCk7CisKICAgICAg
ICAgdm9pZCBoaWdobGlnaHRET01Ob2RlKGluIGxvbmcgbm9kZUlkKTsKICAgICAgICAgdm9pZCBo
aWRlRE9NTm9kZUhpZ2hsaWdodCgpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAKaW5kZXggMzM4ZGMzMy4uMDUxZWE5MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmNwcApAQCAtNjUsMTggKzY1LDExNiBAQAogI2luY2x1ZGUgIlN0eWxlU2hlZXRM
aXN0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogCisjaWYgRU5BQkxFKFhQQVRIKQorI2luY2x1ZGUg
IlhQYXRoUmVzdWx0LmgiCisjZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIHsKKworY2xhc3MgTWF0Y2hFeGFjdElkSm9iIDog
cHVibGljIFdlYkNvcmU6Ok1hdGNoSm9iIHsKK3B1YmxpYzoKKyAgICBNYXRjaEV4YWN0SWRKb2Io
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA6IFdlYkNvcmU6Ok1hdGNo
Sm9iKGRvY3VtZW50LCBxdWVyeSkgeyB9CisgICAgdmlydHVhbCB+TWF0Y2hFeGFjdElkSm9iKCkg
eyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbWF0Y2goTGlzdEhhc2hTZXQ8Tm9k
ZSo+JiByZXN1bHRDb2xsZWN0b3IpIHsKKyAgICAgICAgaWYgKG1fcXVlcnkuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBtX2RvY3Vt
ZW50LT5nZXRFbGVtZW50QnlJZChtX3F1ZXJ5KTsKKyAgICAgICAgaWYgKGVsZW1lbnQpCisgICAg
ICAgICAgICByZXN1bHRDb2xsZWN0b3IuYWRkKGVsZW1lbnQpOworICAgIH0KK307CisKK2NsYXNz
IE1hdGNoRXhhY3RDbGFzc05hbWVzSm9iIDogcHVibGljIFdlYkNvcmU6Ok1hdGNoSm9iIHsKK3B1
YmxpYzoKKyAgICBNYXRjaEV4YWN0Q2xhc3NOYW1lc0pvYihEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IFN0cmluZyYgcXVlcnkpIDogV2ViQ29yZTo6TWF0Y2hKb2IoZG9jdW1lbnQsIHF1ZXJ5KSB7
IH0KKyAgICB2aXJ0dWFsIH5NYXRjaEV4YWN0Q2xhc3NOYW1lc0pvYigpIHsgfQorCisgICAgdmly
dHVhbCB2b2lkIG1hdGNoKExpc3RIYXNoU2V0PE5vZGUqPiYgcmVzdWx0Q29sbGVjdG9yKSB7Cisg
ICAgICAgIGlmICghbV9xdWVyeS5pc0VtcHR5KCkpCisgICAgICAgICAgICBhZGROb2Rlc1RvUmVz
dWx0cyhtX2RvY3VtZW50LT5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKG1fcXVlcnkpLCByZXN1bHRD
b2xsZWN0b3IpOworICAgIH0KK307CisKK2NsYXNzIE1hdGNoRXhhY3RUYWdOYW1lc0pvYiA6IHB1
YmxpYyBXZWJDb3JlOjpNYXRjaEpvYiB7CitwdWJsaWM6CisgICAgTWF0Y2hFeGFjdFRhZ05hbWVz
Sm9iKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgOiBXZWJDb3JlOjpN
YXRjaEpvYihkb2N1bWVudCwgcXVlcnkpIHsgfQorICAgIHZpcnR1YWwgfk1hdGNoRXhhY3RUYWdO
YW1lc0pvYigpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIG1hdGNoKExpc3RIYXNoU2V0PE5vZGUq
PiYgcmVzdWx0Q29sbGVjdG9yKSB7CisgICAgICAgIGlmICghbV9xdWVyeS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cyhtX2RvY3VtZW50LT5nZXRFbGVtZW50c0J5TmFt
ZShtX3F1ZXJ5KSwgcmVzdWx0Q29sbGVjdG9yKTsKKyAgICB9Cit9OworCitjbGFzcyBNYXRjaFF1
ZXJ5U2VsZWN0b3JBbGxKb2IgOiBwdWJsaWMgV2ViQ29yZTo6TWF0Y2hKb2IgeworcHVibGljOgor
ICAgIE1hdGNoUXVlcnlTZWxlY3RvckFsbEpvYihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0
cmluZyYgcXVlcnkpIDogV2ViQ29yZTo6TWF0Y2hKb2IoZG9jdW1lbnQsIHF1ZXJ5KSB7IH0KKyAg
ICB2aXJ0dWFsIH5NYXRjaFF1ZXJ5U2VsZWN0b3JBbGxKb2IoKSB7IH0KKworICAgIHZpcnR1YWwg
dm9pZCBtYXRjaChMaXN0SGFzaFNldDxOb2RlKj4mIHJlc3VsdENvbGxlY3RvcikgeworICAgICAg
ICBpZiAobV9xdWVyeS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIFJlZlB0cjxOb2RlTGlzdD4gbGlzdCA9IG1f
ZG9jdW1lbnQtPnF1ZXJ5U2VsZWN0b3JBbGwobV9xdWVyeSwgZWMpOworICAgICAgICBpZiAoIWVj
KQorICAgICAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMobGlzdCwgcmVzdWx0Q29sbGVjdG9yKTsK
KyAgICB9Cit9OworCitjbGFzcyBNYXRjaFhQYXRoSm9iIDogcHVibGljIFdlYkNvcmU6Ok1hdGNo
Sm9iIHsKK3B1YmxpYzoKKyAgICBNYXRjaFhQYXRoSm9iKERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgU3RyaW5nJiBxdWVyeSkgOiBXZWJDb3JlOjpNYXRjaEpvYihkb2N1bWVudCwgcXVlcnkpIHsg
fQorICAgIHZpcnR1YWwgfk1hdGNoWFBhdGhKb2IoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBt
YXRjaChMaXN0SGFzaFNldDxOb2RlKj4mIHJlc3VsdENvbGxlY3RvcikgeworI2lmIEVOQUJMRShY
UEFUSCkKKyAgICAgICAgaWYgKG1fcXVlcnkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBSZWZQdHI8WFBhdGhS
ZXN1bHQ+IHJlc3VsdCA9IG1fZG9jdW1lbnQtPmV2YWx1YXRlKG1fcXVlcnksIG1fZG9jdW1lbnQu
Z2V0KCksIDAsIFhQYXRoUmVzdWx0OjpPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSwgMCwgZWMp
OworICAgICAgICBpZiAoZWMgfHwgIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICB1bnNpZ25lZCBsb25nIHNpemUgPSByZXN1bHQtPnNuYXBzaG90TGVuZ3RoKGVjKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyAhZWMgJiYgaSA8IHNpemU7ICsraSkgewor
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IHJlc3VsdC0+c25hcHNob3RJdGVtKGksIGVjKTsKKyAg
ICAgICAgICAgIGlmICghZWMpCisgICAgICAgICAgICAgICAgcmVzdWx0Q29sbGVjdG9yLmFkZChu
b2RlKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorfTsKKworY2xhc3MgTWF0Y2hQbGFpblRl
eHRKb2IgOiBwdWJsaWMgTWF0Y2hYUGF0aEpvYiB7CitwdWJsaWM6CisgICAgTWF0Y2hQbGFpblRl
eHRKb2IoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA6IE1hdGNoWFBh
dGhKb2IoZG9jdW1lbnQsIHF1ZXJ5KQorICAgIHsKKyAgICAgICAgbV9xdWVyeSA9ICIvL3RleHQo
KVtjb250YWlucyguLCAnIiArIG1fcXVlcnkgKyAiJyldIHwgLy9jb21tZW50KClbY29udGFpbnMo
LiwgJyIgKyBtX3F1ZXJ5ICsgIicpXSI7CisgICAgfQorICAgIHZpcnR1YWwgfk1hdGNoUGxhaW5U
ZXh0Sm9iKCkgeyB9Cit9OworCit9CisKIEluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01B
Z2VudChJbnNwZWN0b3JDU1NTdG9yZSogY3NzU3RvcmUsIEluc3BlY3RvckZyb250ZW5kKiBmcm9u
dGVuZCkKICAgICA6IEV2ZW50TGlzdGVuZXIoSW5zcGVjdG9yRE9NQWdlbnRUeXBlKQogICAgICwg
bV9jc3NTdG9yZShjc3NTdG9yZSkKICAgICAsIG1fZnJvbnRlbmQoZnJvbnRlbmQpCiAgICAgLCBt
X2xhc3ROb2RlSWQoMSkKKyAgICAsIG1fbWF0Y2hKb2JzVGltZXIodGhpcywgJkluc3BlY3RvckRP
TUFnZW50Ojpvbk1hdGNoSm9ic1RpbWVyKQogewogfQogCkBAIC04Nyw2ICsxODUsNyBAQCBJbnNw
ZWN0b3JET01BZ2VudDo6fkluc3BlY3RvckRPTUFnZW50KCkKIAogdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6cmVzZXQoKQogeworICAgIHNlYXJjaENhbmNlbGVkKCk7CiAgICAgZGlzY2FyZEJpbmRp
bmdzKCk7CiAKICAgICBMaXN0SGFzaFNldDxSZWZQdHI8RG9jdW1lbnQ+ID4gY29weSA9IG1fZG9j
dW1lbnRzOwpAQCAtNTA2LDYgKzYwNSwxMTQgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0
RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCkKICAgICBtX2Zy
b250ZW5kLT5kaWRHZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoY2FsbElkLCBub2RlSWQsIGxpc3Rl
bmVyc0FycmF5KTsKIH0KIAordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaChj
b25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIGJvb2wgcnVuU3luY2hyb25vdXNs
eSkKK3sKKyAgICAvLyBGSVhNRTogRmV3IHRoaW5ncyBhcmUgbWlzc2luZyBoZXJlOgorICAgIC8v
IDEpIFNlYXJjaCB3b3JrcyB3aXRoIG5vZGUgZ3JhbnVsYXJpdHkgLSBudW1iZXIgb2YgbWF0Y2hl
cyB3aXRoaW4gbm9kZSBpcyBub3QgY2FsY3VsYXRlZC4KKyAgICAvLyAyKSBUaGVyZSBpcyBubyBu
ZWVkIHRvIHB1c2ggYWxsIHNlYXJjaCByZXN1bHRzIHRvIHRoZSBmcm9udC1lbmQgYXQgYSB0aW1l
LCBwdXNoaW5nIG5leHQgLyBwcmV2aW91cyByZXN1bHQKKyAgICAvLyAgICBpcyBzdWZmaWNpZW50
LgorCisgICAgaW50IHF1ZXJ5TGVuZ3RoID0gd2hpdGVzcGFjZVRyaW1tZWRRdWVyeS5sZW5ndGgo
KTsKKyAgICBib29sIHN0YXJ0VGFnRm91bmQgPSB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LmZpbmQo
JzwnKSA9PSAwOworICAgIGJvb2wgZW5kVGFnRm91bmQgPSB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5
LnJldmVyc2VGaW5kKCc+JykgKyAxID09IHF1ZXJ5TGVuZ3RoOworCisgICAgU3RyaW5nIHRhZ05h
bWVRdWVyeSA9IHdoaXRlc3BhY2VUcmltbWVkUXVlcnk7CisgICAgaWYgKHN0YXJ0VGFnRm91bmQg
fHwgZW5kVGFnRm91bmQpCisgICAgICAgIHRhZ05hbWVRdWVyeSA9IHRhZ05hbWVRdWVyeS5zdWJz
dHJpbmcoc3RhcnRUYWdGb3VuZCA/IDEgOiAwLCBlbmRUYWdGb3VuZCA/IHF1ZXJ5TGVuZ3RoIC0g
MSA6IHF1ZXJ5TGVuZ3RoKTsKKyAgICBpZiAoIURvY3VtZW50Ojppc1ZhbGlkTmFtZSh0YWdOYW1l
UXVlcnkpKQorICAgICAgICB0YWdOYW1lUXVlcnkgPSAiIjsKKworICAgIFN0cmluZyBhdHRyaWJ1
dGVOYW1lUXVlcnkgPSB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5OworICAgIGlmICghRG9jdW1lbnQ6
OmlzVmFsaWROYW1lKGF0dHJpYnV0ZU5hbWVRdWVyeSkpCisgICAgICAgIGF0dHJpYnV0ZU5hbWVR
dWVyeSA9ICIiOworCisgICAgU3RyaW5nIGVzY2FwZWRRdWVyeSA9IHdoaXRlc3BhY2VUcmltbWVk
UXVlcnk7CisgICAgZXNjYXBlZFF1ZXJ5LnJlcGxhY2UoIiciLCAiXFwnIik7CisgICAgU3RyaW5n
IGVzY2FwZWRUYWdOYW1lUXVlcnkgPSB0YWdOYW1lUXVlcnk7CisgICAgZXNjYXBlZFRhZ05hbWVR
dWVyeS5yZXBsYWNlKCInIiwgIlxcJyIpOworCisgICAgLy8gRmluZCBhbGwgZnJhbWVzLCBpZnJh
bWVzIGFuZCBvYmplY3QgZWxlbWVudHMgdG8gc2VhcmNoIHRoZWlyIGRvY3VtZW50cy4KKyAgICBW
ZWN0b3I8RG9jdW1lbnQqPiBkb2N1bWVudHM7CisgICAgZG9jdW1lbnRzLmFwcGVuZChtYWluRnJh
bWVEb2N1bWVudCgpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxO
b2RlTGlzdD4gZnJhbWVPd25lcnMgPSBtYWluRnJhbWVEb2N1bWVudCgpLT5xdWVyeVNlbGVjdG9y
QWxsKCJpZnJhbWUsIGZyYW1lLCBvYmplY3QiLCBlYyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgIWVjICYmIGZyYW1lT3duZXJzICYmIGkgPCBmcmFtZU93bmVycy0+bGVuZ3RoKCk7ICsraSkg
eworICAgICAgICBOb2RlKiBub2RlID0gZnJhbWVPd25lcnMtPml0ZW0oaSk7CisgICAgICAgIGlm
IChub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIEhUTUxGcmFtZU93
bmVyRWxlbWVudCogZnJhbWVPd25lciA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVu
dCo+KG5vZGUpOworICAgICAgICAgICAgaWYgKGZyYW1lT3duZXItPmNvbnRlbnREb2N1bWVudCgp
KQorICAgICAgICAgICAgICAgIGRvY3VtZW50cy5hcHBlbmQoZnJhbWVPd25lci0+Y29udGVudERv
Y3VtZW50KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2xlYXIgcGVuZGluZyBqb2Jz
LgorICAgIHNlYXJjaENhbmNlbGVkKCk7CisKKyAgICAvLyBQb3B1bGF0ZSBuZXcgam9icy4KKyAg
ICBmb3IgKFZlY3RvcjxEb2N1bWVudCo+OjppdGVyYXRvciBpdCA9IGRvY3VtZW50cy5iZWdpbigp
OyBpdCAhPSBkb2N1bWVudHMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKCF0YWdOYW1lUXVl
cnkuaXNFbXB0eSgpICYmIHN0YXJ0VGFnRm91bmQgJiYgZW5kVGFnRm91bmQpIHsKKyAgICAgICAg
ICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoRXhhY3RUYWdOYW1lc0pvYigq
aXQsIHRhZ05hbWVRdWVyeSkpOworICAgICAgICAgICAgbV9wZW5kaW5nTWF0Y2hKb2JzLmFwcGVu
ZChuZXcgTWF0Y2hQbGFpblRleHRKb2IoKml0LCBlc2NhcGVkUXVlcnkpKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0YWdOYW1lUXVlcnkuaXNFbXB0
eSgpICYmIHN0YXJ0VGFnRm91bmQpIHsKKyAgICAgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5h
cHBlbmQobmV3IE1hdGNoWFBhdGhKb2IoKml0LCAiLy8qW3N0YXJ0cy13aXRoKG5hbWUoKSwgJyIg
KyBlc2NhcGVkVGFnTmFtZVF1ZXJ5ICsgIicpXSIpKTsKKyAgICAgICAgICAgIG1fcGVuZGluZ01h
dGNoSm9icy5hcHBlbmQobmV3IE1hdGNoUGxhaW5UZXh0Sm9iKCppdCwgZXNjYXBlZFF1ZXJ5KSk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGFnTmFt
ZVF1ZXJ5LmlzRW1wdHkoKSAmJiBlbmRUYWdGb3VuZCkgeworICAgICAgICAgICAgLy8gRklYTUU6
IHdlIHNob3VsZCBoYXZlIGEgbWF0Y2hFbmRPZlRhZ05hbWVzIHNlYXJjaCBmdW5jdGlvbiBpZiBl
bmRUYWdGb3VuZCBpcyB0cnVlIGJ1dCBub3Qgc3RhcnRUYWdGb3VuZC4KKyAgICAgICAgICAgIC8v
IFRoaXMgcmVxdWlyZXMgZW5kcy13aXRoKCkgc3VwcG9ydCBpbiBYUGF0aCwgV2ViS2l0IG9ubHkg
c3VwcG9ydHMgc3RhcnRzLXdpdGgoKSBhbmQgY29udGFpbnMoKS4KKyAgICAgICAgICAgIG1fcGVu
ZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoWFBhdGhKb2IoKml0LCAiLy8qW2NvbnRhaW5z
KG5hbWUoKSwgJyIgKyBlc2NhcGVkVGFnTmFtZVF1ZXJ5ICsgIicpXSIpKTsKKyAgICAgICAgICAg
IG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoUGxhaW5UZXh0Sm9iKCppdCwgZXNj
YXBlZFF1ZXJ5KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgbWF0Y2hlc0V2ZXJ5Tm9kZSA9IHdoaXRlc3BhY2VUcmltbWVkUXVlcnkgPT0gIi8vKiIg
fHwgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSA9PSAiKiI7CisgICAgICAgIGlmIChtYXRjaGVzRXZl
cnlOb2RlKSB7CisgICAgICAgICAgICAvLyBUaGVzZSBxdWVyaWVzIHdpbGwgbWF0Y2ggZXZlcnkg
bm9kZS4gTWF0Y2hpbmcgZXZlcnl0aGluZyBpc24ndCB1c2VmdWwgYW5kIGNhbiBiZSBzbG93IGZv
ciBsYXJnZSBwYWdlcywKKyAgICAgICAgICAgIC8vIHNvIGxpbWl0IHRoZSBzZWFyY2ggZnVuY3Rp
b25zIGxpc3QgdG8gcGxhaW4gdGV4dCBhbmQgYXR0cmlidXRlIG1hdGNoaW5nIGZvciB0aGVzZS4K
KyAgICAgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoWFBhdGhKb2Io
Kml0LCAiLy8qW2NvbnRhaW5zKEAqLCAnIiArIGVzY2FwZWRRdWVyeSArICInKV0iKSk7CisgICAg
ICAgICAgICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBNYXRjaFBsYWluVGV4dEpvYigq
aXQsIGVzY2FwZWRRdWVyeSkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBNYXRjaEV4
YWN0SWRKb2IoKml0LCB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5KSk7CisgICAgICAgIG1fcGVuZGlu
Z01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoRXhhY3RDbGFzc05hbWVzSm9iKCppdCwgd2hpdGVz
cGFjZVRyaW1tZWRRdWVyeSkpOworICAgICAgICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5l
dyBNYXRjaEV4YWN0VGFnTmFtZXNKb2IoKml0LCB0YWdOYW1lUXVlcnkpKTsKKyAgICAgICAgbV9w
ZW5kaW5nTWF0Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hRdWVyeVNlbGVjdG9yQWxsSm9iKCppdCwg
IlsiICsgYXR0cmlidXRlTmFtZVF1ZXJ5ICsgIl0iKSk7CisgICAgICAgIG1fcGVuZGluZ01hdGNo
Sm9icy5hcHBlbmQobmV3IE1hdGNoUXVlcnlTZWxlY3RvckFsbEpvYigqaXQsIHdoaXRlc3BhY2VU
cmltbWVkUXVlcnkpKTsKKyAgICAgICAgbV9wZW5kaW5nTWF0Y2hKb2JzLmFwcGVuZChuZXcgTWF0
Y2hYUGF0aEpvYigqaXQsICIvLypbY29udGFpbnMoQCosICciICsgZXNjYXBlZFF1ZXJ5ICsgIicp
XSIpKTsKKyAgICAgICAgaWYgKCF0YWdOYW1lUXVlcnkuaXNFbXB0eSgpKQorICAgICAgICAgICAg
bV9wZW5kaW5nTWF0Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hYUGF0aEpvYigqaXQsICIvLypbY29u
dGFpbnMobmFtZSgpLCAnIiArIGVzY2FwZWRUYWdOYW1lUXVlcnkgKyAiJyldIikpOworICAgICAg
ICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBNYXRjaFBsYWluVGV4dEpvYigqaXQsIGVz
Y2FwZWRRdWVyeSkpOworICAgICAgICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBNYXRj
aFhQYXRoSm9iKCppdCwgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSkpOworICAgIH0KKworICAgIGlm
IChydW5TeW5jaHJvbm91c2x5KSB7CisgICAgICAgIC8vIEZvciB0ZXN0cy4KKyAgICAgICAgTGlz
dEhhc2hTZXQ8Tm9kZSo+IHJlc3VsdENvbGxlY3RvcjsKKyAgICAgICAgZm9yIChEZXF1ZTxNYXRj
aEpvYio+OjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ01hdGNoSm9icy5iZWdpbigpOyBpdCAhPSBt
X3BlbmRpbmdNYXRjaEpvYnMuZW5kKCk7ICsraXQpCisgICAgICAgICAgICAoKml0KS0+bWF0Y2go
cmVzdWx0Q29sbGVjdG9yKTsKKyAgICAgICAgcmVwb3J0Tm9kZXNBc1NlYXJjaFJlc3VsdHMocmVz
dWx0Q29sbGVjdG9yKTsKKyAgICAgICAgc2VhcmNoQ2FuY2VsZWQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBtX21hdGNoSm9ic1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6c2VhcmNoQ2FuY2VsZWQoKQoreworICAgIGlmIChtX21hdGNo
Sm9ic1RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fbWF0Y2hKb2JzVGltZXIuc3RvcCgpOwor
ICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3BlbmRpbmdNYXRjaEpvYnMpOworICAgIG1fcGVuZGluZ01h
dGNoSm9icy5jbGVhcigpOworICAgIG1fc2VhcmNoUmVzdWx0cy5jbGVhcigpOworfQorCiBTdHJp
bmcgSW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVu
dCkgY29uc3QKIHsKICAgICBpZiAoIWRvY3VtZW50IHx8IGRvY3VtZW50LT51cmwoKS5pc051bGwo
KSkKQEAgLTEzMzAsNiArMTUzNywzNyBAQCBDU1NTdHlsZVNoZWV0KiBJbnNwZWN0b3JET01BZ2Vu
dDo6Z2V0UGFyZW50U3R5bGVTaGVldChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZQogICAgIHJl
dHVybiBwYXJlbnRTdHlsZVNoZWV0OwogfQogCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpvbk1h
dGNoSm9ic1RpbWVyKFRpbWVyPEluc3BlY3RvckRPTUFnZW50PiopCit7CisgICAgaWYgKCFtX3Bl
bmRpbmdNYXRjaEpvYnMuc2l6ZSgpKSB7CisgICAgICAgIHNlYXJjaENhbmNlbGVkKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBMaXN0SGFzaFNldDxOb2RlKj4gcmVzdWx0Q29sbGVj
dG9yOworICAgIE1hdGNoSm9iKiBqb2IgPSBtX3BlbmRpbmdNYXRjaEpvYnMuZmlyc3QoKTsKKyAg
ICBtX3BlbmRpbmdNYXRjaEpvYnMucmVtb3ZlRmlyc3QoKTsKKyAgICBqb2ItPm1hdGNoKHJlc3Vs
dENvbGxlY3Rvcik7CisgICAgZGVsZXRlIGpvYjsKKworICAgIHJlcG9ydE5vZGVzQXNTZWFyY2hS
ZXN1bHRzKHJlc3VsdENvbGxlY3Rvcik7CisKKyAgICBtX21hdGNoSm9ic1RpbWVyLnN0YXJ0T25l
U2hvdCgwLjAyNSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlcG9ydE5vZGVzQXNT
ZWFyY2hSZXN1bHRzKExpc3RIYXNoU2V0PE5vZGUqPiYgcmVzdWx0Q29sbGVjdG9yKQoreworICAg
IFNjcmlwdEFycmF5IG5vZGVJZHMgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRBcnJheSgpOworICAg
IGludCBpbmRleCA9IDA7CisgICAgZm9yIChMaXN0SGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0
ID0gcmVzdWx0Q29sbGVjdG9yLmJlZ2luKCk7IGl0ICE9IHJlc3VsdENvbGxlY3Rvci5lbmQoKTsg
KytpdCkgeworICAgICAgICBpZiAobV9zZWFyY2hSZXN1bHRzLmNvbnRhaW5zKCppdCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9zZWFyY2hSZXN1bHRzLmFkZCgqaXQpOworICAg
ICAgICBub2RlSWRzLnNldChpbmRleCsrLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHB1c2hOb2Rl
UGF0aFRvRnJvbnRlbmQoKml0KSkpOworICAgIH0KKyAgICBtX2Zyb250ZW5kLT5hZGROb2Rlc1Rv
U2VhcmNoUmVzdWx0KG5vZGVJZHMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
LmgKaW5kZXggZjg5MjViNS4uMWM0ZjBjMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5oCkBAIC0zNCwxMCArMzQsMTIgQEAKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAj
aW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDU1NTdG9yZS5oIgor
I2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0QXJyYXkuaCIKICNpbmNsdWRl
ICJTY3JpcHRPYmplY3QuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogCisjaW5jbHVkZSA8
d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtNzIsNiArNzQsMjYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBFdmVudExpc3RlbmVyVmVjdG9yIGV2
ZW50TGlzdGVuZXJWZWN0b3I7CiAgICAgfTsKIAorICAgIGNsYXNzIE1hdGNoSm9iIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXRjaChMaXN0SGFzaFNldDxOb2RlKj4mIHJl
c3VsdENvbGxlY3RvcikgPSAwOworICAgICAgICB2aXJ0dWFsIH5NYXRjaEpvYigpIHsgfQorCisg
ICAgcHJvdGVjdGVkOgorICAgICAgICBNYXRjaEpvYihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IFN0cmluZyYgcXVlcnkpCisgICAgICAgICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAg
ICAgICAgICAsIG1fcXVlcnkocXVlcnkpIHsgfQorCisgICAgICAgIHZvaWQgYWRkTm9kZXNUb1Jl
c3VsdHMoUGFzc1JlZlB0cjxOb2RlTGlzdD4gbm9kZXMsIExpc3RIYXNoU2V0PE5vZGUqPiYgcmVz
dWx0Q29sbGVjdG9yKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBub2RlcyAmJiBpIDwgbm9kZXMtPmxlbmd0aCgpOyArK2kpCisgICAgICAgICAgICAgICAgcmVz
dWx0Q29sbGVjdG9yLmFkZChub2Rlcy0+aXRlbShpKSk7CisgICAgICAgIH0KKworICAgICAgICBS
ZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CisgICAgICAgIFN0cmluZyBtX3F1ZXJ5OworICAg
IH07CisKICAgICBjbGFzcyBJbnNwZWN0b3JET01BZ2VudCA6IHB1YmxpYyBFdmVudExpc3RlbmVy
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckRPTUFn
ZW50PiBjcmVhdGUoSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3JlLCBJbnNwZWN0b3JGcm9udGVu
ZCogZnJvbnRlbmQpCkBAIC0xMDEsNiArMTIzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2b2lkIGNoYW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25zdCBB
dG9taWNTdHJpbmcmIHRhZ05hbWUsIGJvb2wgZXhwYW5kZWQpOwogICAgICAgICB2b2lkIHNldFRl
eHROb2RlVmFsdWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHZhbHVl
KTsKICAgICAgICAgdm9pZCBnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUobG9uZyBjYWxsSWQsIGxv
bmcgbm9kZUlkKTsKKyAgICAgICAgdm9pZCBwZXJmb3JtU2VhcmNoKGNvbnN0IFN0cmluZyYgd2hp
dGVzcGFjZVRyaW1tZWRRdWVyeSwgYm9vbCBydW5TeW5jaHJvbm91c2x5KTsKKyAgICAgICAgdm9p
ZCBzZWFyY2hDYW5jZWxlZCgpOwogCiAgICAgICAgIC8vIE1ldGhvZHMgY2FsbGVkIGZyb20gdGhl
IGZyb250ZW5kIGZvciBDU1Mgc3R5bGVzIGluc3BlY3Rpb24uCiAgICAgICAgIHZvaWQgZ2V0U3R5
bGVzKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgYm9vbCBhdXRob3JPbmx5KTsKQEAgLTE2NSw2
ICsxODksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmluZyBkb2N1bWVudFVS
TFN0cmluZyhEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0OwogICAgICAgICBJbnNwZWN0b3JDU1NT
dG9yZSogY3NzU3RvcmUoKSB7IHJldHVybiBtX2Nzc1N0b3JlOyB9CiAKKyAgICAgICAgdm9pZCBv
bk1hdGNoSm9ic1RpbWVyKFRpbWVyPEluc3BlY3RvckRPTUFnZW50PiopOworICAgICAgICB2b2lk
IHJlcG9ydE5vZGVzQXNTZWFyY2hSZXN1bHRzKExpc3RIYXNoU2V0PE5vZGUqPiYgcmVzdWx0Q29s
bGVjdG9yKTsKKwogICAgICAgICBTY3JpcHRPYmplY3QgYnVpbGRPYmplY3RGb3JTdHlsZShDU1NT
dHlsZURlY2xhcmF0aW9uKiwgYm9vbCBiaW5kKTsKICAgICAgICAgdm9pZCBwb3B1bGF0ZU9iamVj
dFdpdGhTdHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIFNjcmlwdE9iamVjdCYg
cmVzdWx0KTsKICAgICAgICAgU2NyaXB0QXJyYXkgYnVpbGRBcnJheUZvckRpc2FibGVkU3R5bGVQ
cm9wZXJ0aWVzKERpc2FibGVkU3R5bGVEZWNsYXJhdGlvbiopOwpAQCAtMTg4LDkgKzIxNSwxMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEhhc2hTZXQ8bG9uZz4gbV9jaGlsZHJlblJl
cXVlc3RlZDsKICAgICAgICAgbG9uZyBtX2xhc3ROb2RlSWQ7CiAgICAgICAgIExpc3RIYXNoU2V0
PFJlZlB0cjxEb2N1bWVudD4gPiBtX2RvY3VtZW50czsKKyAgICAgICAgRGVxdWU8TWF0Y2hKb2Iq
PiBtX3BlbmRpbmdNYXRjaEpvYnM7CisgICAgICAgIFRpbWVyPEluc3BlY3RvckRPTUFnZW50PiBt
X21hdGNoSm9ic1RpbWVyOworICAgICAgICBIYXNoU2V0PFJlZlB0cjxOb2RlPiA+IG1fc2VhcmNo
UmVzdWx0czsKICAgICB9OwogCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
ICFkZWZpbmVkKEluc3BlY3RvckRPTUFnZW50X2gpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZC5jcHAKaW5kZXggMzkwZWRhYi4uZWVlZmJkMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kLmNwcApAQCAtNzM5LDcgKzczOSw3IEBAIHZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OnVwZGF0ZURPTVN0b3JhZ2UobG9uZyBzdG9yYWdlSWQpCiB9CiAjZW5kaWYKIAotdm9p
ZCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkTm9kZXNUb1NlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcm
IG5vZGVJZHMpCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjphZGROb2Rlc1RvU2VhcmNoUmVzdWx0
KGNvbnN0IFNjcmlwdEFycmF5JiBub2RlSWRzKQogewogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBm
dW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVu
ZEFyZ3VtZW50KCJhZGROb2Rlc1RvU2VhcmNoUmVzdWx0Iik7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmQuaAppbmRleCBiOWY4N2VmLi44MmNkZjhiIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kLmgKQEAgLTE1OCw3ICsxNTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZvaWQgZGlkR2V0Q29va2llcyhsb25nIGNhbGxJZCwgY29uc3QgU2NyaXB0QXJy
YXkmIGNvb2tpZXMsIGNvbnN0IFN0cmluZyYgY29va2llc1N0cmluZyk7CiAgICAgICAgIHZvaWQg
ZGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGxvbmcgY2FsbElkLCBTZXJpYWxpemVkU2NyaXB0
VmFsdWUqIHJlc3VsdCwgYm9vbCBpc0V4Y2VwdGlvbik7CiAKLSAgICAgICAgdm9pZCBhZGROb2Rl
c1RvU2VhcmNoUmVzdWx0KGNvbnN0IFN0cmluZyYgbm9kZUlkcyk7CisgICAgICAgIHZvaWQgYWRk
Tm9kZXNUb1NlYXJjaFJlc3VsdChjb25zdCBTY3JpcHRBcnJheSYgbm9kZUlkcyk7CiAKICAgICAg
ICAgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChpbnQgaXRlbUlkKTsKICAgICAgICAgdm9p
ZCBjb250ZXh0TWVudUNsZWFyZWQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclJlc291cmNlLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
LmNwcAppbmRleCA5OTliOGQ2Li5mMGUzOTFkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UmVzb3VyY2UuY3BwCkBAIC0xNjksNyArMTY5LDYgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZTo6
dXBkYXRlU2NyaXB0T2JqZWN0KEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKICAgICAgICAg
anNvbk9iamVjdC5zZXQoImV4cGVjdGVkQ29udGVudExlbmd0aCIsIG1fZXhwZWN0ZWRDb250ZW50
TGVuZ3RoKTsKICAgICAgICAganNvbk9iamVjdC5zZXQoInN0YXR1c0NvZGUiLCBtX3Jlc3BvbnNl
U3RhdHVzQ29kZSk7CiAgICAgICAgIGpzb25PYmplY3Quc2V0KCJzdGF0dXNUZXh0IiwgbV9yZXNw
b25zZVN0YXR1c1RleHQpOwotICAgICAgICBqc29uT2JqZWN0LnNldCgic3VnZ2VzdGVkRmlsZW5h
bWUiLCBtX3N1Z2dlc3RlZEZpbGVuYW1lKTsKICAgICAgICAgU2NyaXB0T2JqZWN0IHJlc3BvbnNl
SGVhZGVycyA9IGZyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKICAgICAgICAgcG9wdWxhdGVI
ZWFkZXJzT2JqZWN0KCZyZXNwb25zZUhlYWRlcnMsIG1fcmVzcG9uc2VIZWFkZXJGaWVsZHMpOwog
ICAgICAgICBqc29uT2JqZWN0LnNldCgicmVzcG9uc2VIZWFkZXJzIiwgcmVzcG9uc2VIZWFkZXJz
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVs
LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMKaW5kZXgg
Yzg1MzQ0MC4uNTViYTgyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0VsZW1lbnRzUGFuZWwuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1l
bnRzUGFuZWwuanMKQEAgLTI0MCw3ICsyNDAsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5l
bC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4
ID0gMDsKICAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0cyA9IFtdOwotICAgICAgICBJbmplY3Rl
ZFNjcmlwdEFjY2Vzcy5nZXREZWZhdWx0KCkuc2VhcmNoQ2FuY2VsZWQoZnVuY3Rpb24oKSB7fSk7
CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2VhcmNoQ2FuY2VsZWQoKTsKICAgICB9LAogCiAg
ICAgcGVyZm9ybVNlYXJjaDogZnVuY3Rpb24ocXVlcnkpCkBAIC0yNTYsNyArMjU2LDcgQEAgV2Vi
SW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9tYXRj
aGVzQ291bnRVcGRhdGVUaW1lb3V0ID0gbnVsbDsKICAgICAgICAgdGhpcy5fc2VhcmNoUXVlcnkg
PSBxdWVyeTsKIAotICAgICAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZhdWx0KCkucGVy
Zm9ybVNlYXJjaCh3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBmYWxzZSwgZnVuY3Rpb24oKSB7fSk7
CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQucGVyZm9ybVNlYXJjaCh3aGl0ZXNwYWNlVHJpbW1l
ZFF1ZXJ5KTsKICAgICB9LAogCiAgICAgc2VhcmNoaW5nRm9yTm9kZVdhc0VuYWJsZWQ6IGZ1bmN0
aW9uKCkKQEAgLTI4OCwxMiArMjg4LDExIEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnBy
b3RvdHlwZSA9IHsKIAogICAgIGFkZE5vZGVzVG9TZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKG5vZGVJ
ZHMpCiAgICAgewotICAgICAgICBpZiAoIW5vZGVJZHMpCisgICAgICAgIGlmICghbm9kZUlkcy5s
ZW5ndGgpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIG5vZGVJZHNBcnJheSA9
IG5vZGVJZHMuc3BsaXQoIiwiKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlSWRz
QXJyYXkubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBub2RlSWQgPSBub2RlSWRzQXJy
YXlbaV07CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUlkcy5sZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgdmFyIG5vZGVJZCA9IG5vZGVJZHNbaV07CiAgICAgICAgICAgICB2YXIg
bm9kZSA9IFdlYkluc3BlY3Rvci5kb21BZ2VudC5ub2RlRm9ySWQobm9kZUlkKTsKICAgICAgICAg
ICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcyBiL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcwppbmRleCA0MDAyZTIzLi5lNjJhOTE2
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQu
anMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCkBA
IC04Myw4ICs4Myw2IEBAIEluamVjdGVkU2NyaXB0LnJlbGVhc2VXcmFwcGVyT2JqZWN0R3JvdXAg
PSBmdW5jdGlvbihvYmplY3RHcm91cE5hbWUpIHsKIC8vIENhbGxlZCBmcm9tIHdpdGhpbiBJbnNw
ZWN0b3JDb250cm9sbGVyIG9uIHRoZSAnaW5zcGVjdGVkIHBhZ2UnIHNpZGUuCiBJbmplY3RlZFNj
cmlwdC5yZXNldCA9IGZ1bmN0aW9uKCkKIHsKLSAgICBJbmplY3RlZFNjcmlwdC5fc2VhcmNoUmVz
dWx0cyA9IFtdOwotICAgIEluamVjdGVkU2NyaXB0Ll9pbmNsdWRlZEluU2VhcmNoUmVzdWx0c1By
b3BlcnR5TmFtZSA9ICJfX2luY2x1ZGVkSW5JbnNwZWN0b3JTZWFyY2hSZXN1bHRzIjsKIH0KIAog
SW5qZWN0ZWRTY3JpcHQucmVzZXQoKTsKQEAgLTIxMSw3ICsyMDksNyBAQCBJbmplY3RlZFNjcmlw
dC5zZXRQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24ob2JqZWN0UHJveHksIHByb3BlcnR5TmFtZSwg
ZXhwcmVzc2lvbgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGNhdGNoKGUpIHsKICAgICAg
ICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBpbnNwZWN0ZWRXaW5kb3cuZXZhbCgi
XCIiICsgSW5qZWN0ZWRTY3JpcHQuX2VzY2FwZUNoYXJhY3RlcnMoZXhwcmVzc2lvbiwgIlwiIikg
KyAiXCIiKTsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBpbnNwZWN0ZWRXaW5kb3cuZXZhbCgi
XCIiICsgZXhwcmVzc2lvbi5yZXBsYWNlKC8iL2csICJcXFwiIikgKyAiXCIiKTsKICAgICAgICAg
ICAgIG9iamVjdFtwcm9wZXJ0eU5hbWVdID0gcmVzdWx0OwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0gY2F0Y2goZSkgewpAQCAtMzU1LDI0NyArMzUzLDYgQEAgSW5qZWN0ZWRT
Y3JpcHQuZ2V0Tm9kZUlkID0gZnVuY3Rpb24obm9kZSkKICAgICByZXR1cm4gSW5qZWN0ZWRTY3Jp
cHRIb3N0LnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSwgZmFsc2UsIGZhbHNlKTsKIH0KIAot
SW5qZWN0ZWRTY3JpcHQucGVyZm9ybVNlYXJjaCA9IGZ1bmN0aW9uKHdoaXRlc3BhY2VUcmltbWVk
UXVlcnksIHJ1blN5bmNocm9ub3VzbHkpCi17Ci0gICAgLy8gRklYTUU6IEZldyB0aGluZ3MgYXJl
IG1pc3NpbmcgaGVyZToKLSAgICAvLyAxKSBTZWFyY2ggd29ya3Mgd2l0aCBub2RlIGdyYW51bGFy
aXR5IC0gbnVtYmVyIG9mIG1hdGNoZXMgd2l0aGluIG5vZGUgaXMgbm90IGNhbGN1bGF0ZWQuCi0g
ICAgLy8gMikgU2VhcmNoIGRvZXMgbm90IHdvcmsgb3V0c2lkZSBtYWluIGRvY3VtZW50cycgZG9t
YWluIC0gd2UgbmVlZCB0byB1c2Ugc3BlY2lmaWMgSW5qZWN0ZWRTY3JpcHQgaW5zdGFuY2VzCi0g
ICAgLy8gICAgZm9yIG90aGVyIGRvbWFpbnMuCi0gICAgLy8gMykgVGhlcmUgaXMgbm8gbmVlZCB0
byBwdXNoIGFsbCBzZWFyY2ggcmVzdWx0cyB0byB0aGUgZnJvbnQtZW5kIGF0IGEgdGltZSwgcHVz
aGluZyBuZXh0IC8gcHJldmlvdXMgcmVzdWx0Ci0gICAgLy8gICAgaXMgc3VmZmljaWVudC4KLSAg
ICB2YXIgdGFnTmFtZVF1ZXJ5ID0gd2hpdGVzcGFjZVRyaW1tZWRRdWVyeTsKLSAgICB2YXIgYXR0
cmlidXRlTmFtZVF1ZXJ5ID0gd2hpdGVzcGFjZVRyaW1tZWRRdWVyeTsKLSAgICB2YXIgc3RhcnRU
YWdGb3VuZCA9ICh0YWdOYW1lUXVlcnkuaW5kZXhPZigiPCIpID09PSAwKTsKLSAgICB2YXIgZW5k
VGFnRm91bmQgPSAodGFnTmFtZVF1ZXJ5Lmxhc3RJbmRleE9mKCI+IikgPT09ICh0YWdOYW1lUXVl
cnkubGVuZ3RoIC0gMSkpOwotCi0gICAgaWYgKHN0YXJ0VGFnRm91bmQgfHwgZW5kVGFnRm91bmQp
IHsKLSAgICAgICAgdmFyIHRhZ05hbWVRdWVyeUxlbmd0aCA9IHRhZ05hbWVRdWVyeS5sZW5ndGg7
Ci0gICAgICAgIHRhZ05hbWVRdWVyeSA9IHRhZ05hbWVRdWVyeS5zdWJzdHJpbmcoKHN0YXJ0VGFn
Rm91bmQgPyAxIDogMCksIChlbmRUYWdGb3VuZCA/ICh0YWdOYW1lUXVlcnlMZW5ndGggLSAxKSA6
IHRhZ05hbWVRdWVyeUxlbmd0aCkpOwotICAgIH0KLQotICAgIC8vIENoZWNrIHRoZSB0YWdOYW1l
UXVlcnkgaXMgaXQgaXMgYSBwb3NzaWJseSB2YWxpZCB0YWcgbmFtZS4KLSAgICBpZiAoIS9eW2Et
ekEtWjAtOVwtXzpdKyQvLnRlc3QodGFnTmFtZVF1ZXJ5KSkKLSAgICAgICAgdGFnTmFtZVF1ZXJ5
ID0gbnVsbDsKLQotICAgIC8vIENoZWNrIHRoZSBhdHRyaWJ1dGVOYW1lUXVlcnkgaXMgaXQgaXMg
YSBwb3NzaWJseSB2YWxpZCB0YWcgbmFtZS4KLSAgICBpZiAoIS9eW2EtekEtWjAtOVwtXzpdKyQv
LnRlc3QoYXR0cmlidXRlTmFtZVF1ZXJ5KSkKLSAgICAgICAgYXR0cmlidXRlTmFtZVF1ZXJ5ID0g
bnVsbDsKLQotICAgIGNvbnN0IGVzY2FwZWRRdWVyeSA9IEluamVjdGVkU2NyaXB0Ll9lc2NhcGVD
aGFyYWN0ZXJzKHdoaXRlc3BhY2VUcmltbWVkUXVlcnksICInIik7Ci0gICAgY29uc3QgZXNjYXBl
ZFRhZ05hbWVRdWVyeSA9ICh0YWdOYW1lUXVlcnkgPyAgSW5qZWN0ZWRTY3JpcHQuX2VzY2FwZUNo
YXJhY3RlcnModGFnTmFtZVF1ZXJ5LCAiJyIpIDogbnVsbCk7Ci0gICAgY29uc3QgZXNjYXBlZFdo
aXRlc3BhY2VUcmltbWVkUXVlcnkgPSBJbmplY3RlZFNjcmlwdC5fZXNjYXBlQ2hhcmFjdGVycyh3
aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCAiJyIpOwotICAgIGNvbnN0IHNlYXJjaFJlc3VsdHNQcm9w
ZXJ0eSA9IEluamVjdGVkU2NyaXB0Ll9pbmNsdWRlZEluU2VhcmNoUmVzdWx0c1Byb3BlcnR5TmFt
ZTsKLQotICAgIGZ1bmN0aW9uIGFkZE5vZGVzVG9SZXN1bHRzKG5vZGVzLCBsZW5ndGgsIGdldEl0
ZW0pCi0gICAgewotICAgICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICB2YXIgbm9kZUlkcyA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IGdldEl0ZW0uY2FsbChub2Rlcywg
aSk7Ci0gICAgICAgICAgICAvLyBTa2lwIHRoaXMgbm9kZSBpZiBpdCBhbHJlYWR5IGhhcyB0aGUg
cHJvcGVydHkuCi0gICAgICAgICAgICBpZiAoc2VhcmNoUmVzdWx0c1Byb3BlcnR5IGluIG5vZGUp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmICghSW5qZWN0ZWRT
Y3JpcHQuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgSW5qZWN0ZWRT
Y3JpcHQuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9IDA7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIG5vZGVbc2VhcmNoUmVzdWx0c1Byb3BlcnR5XSA9IHRydWU7Ci0gICAgICAgICAg
ICBJbmplY3RlZFNjcmlwdC5fc2VhcmNoUmVzdWx0cy5wdXNoKG5vZGUpOwotICAgICAgICAgICAg
dmFyIG5vZGVJZCA9IEluamVjdGVkU2NyaXB0SG9zdC5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5v
ZGUsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgICAgICBub2RlSWRzLnB1c2gobm9kZUlkKTsKLSAg
ICAgICAgfQotICAgICAgICBJbmplY3RlZFNjcmlwdEhvc3QuYWRkTm9kZXNUb1NlYXJjaFJlc3Vs
dChub2RlSWRzLmpvaW4oIiwiKSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbWF0Y2hFeGFjdEl0
ZW1zKGRvYykKLSAgICB7Ci0gICAgICAgIG1hdGNoRXhhY3RJZC5jYWxsKHRoaXMsIGRvYyk7Ci0g
ICAgICAgIG1hdGNoRXhhY3RDbGFzc05hbWVzLmNhbGwodGhpcywgZG9jKTsKLSAgICAgICAgbWF0
Y2hFeGFjdFRhZ05hbWVzLmNhbGwodGhpcywgZG9jKTsKLSAgICAgICAgbWF0Y2hFeGFjdEF0dHJp
YnV0ZU5hbWVzLmNhbGwodGhpcywgZG9jKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBtYXRjaEV4
YWN0SWQoZG9jKQotICAgIHsKLSAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5n
ZXRFbGVtZW50QnlJZC5jYWxsKGRvYywgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSk7Ci0gICAgICAg
IGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCAocmVzdWx0ID8gMSA6IDApLCBm
dW5jdGlvbigpIHsgcmV0dXJuIHRoaXMgfSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbWF0Y2hF
eGFjdENsYXNzTmFtZXMoZG9jKQotICAgIHsKLSAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jLl9f
cHJvdG9fXy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lLmNhbGwoZG9jLCB3aGl0ZXNwYWNlVHJpbW1l
ZFF1ZXJ5KTsKLSAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0aGlzLCByZXN1bHQsIHJl
c3VsdC5sZW5ndGgsIHJlc3VsdC5pdGVtKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBtYXRjaEV4
YWN0VGFnTmFtZXMoZG9jKQotICAgIHsKLSAgICAgICAgaWYgKCF0YWdOYW1lUXVlcnkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18uZ2V0
RWxlbWVudHNCeVRhZ05hbWUuY2FsbChkb2MsIHRhZ05hbWVRdWVyeSk7Ci0gICAgICAgIGFkZE5v
ZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQubGVuZ3RoLCByZXN1bHQuaXRl
bSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbWF0Y2hFeGFjdEF0dHJpYnV0ZU5hbWVzKGRvYykK
LSAgICB7Ci0gICAgICAgIGlmICghYXR0cmlidXRlTmFtZVF1ZXJ5KQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLnF1ZXJ5U2VsZWN0b3JB
bGwuY2FsbChkb2MsICJbIiArIGF0dHJpYnV0ZU5hbWVRdWVyeSArICJdIik7Ci0gICAgICAgIGFk
ZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQubGVuZ3RoLCByZXN1bHQu
aXRlbSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbWF0Y2hQYXJ0aWFsVGFnTmFtZXMoZG9jKQot
ICAgIHsKLSAgICAgICAgaWYgKCF0YWdOYW1lUXVlcnkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18uZXZhbHVhdGUuY2FsbChkb2MsICIv
LypbY29udGFpbnMobmFtZSgpLCAnIiArIGVzY2FwZWRUYWdOYW1lUXVlcnkgKyAiJyldIiwgZG9j
LCBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSk7Ci0gICAgICAg
IGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQuc25hcHNob3RMZW5n
dGgsIHJlc3VsdC5zbmFwc2hvdEl0ZW0pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIG1hdGNoU3Rh
cnRPZlRhZ05hbWVzKGRvYykKLSAgICB7Ci0gICAgICAgIGlmICghdGFnTmFtZVF1ZXJ5KQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmV2
YWx1YXRlLmNhbGwoZG9jLCAiLy8qW3N0YXJ0cy13aXRoKG5hbWUoKSwgJyIgKyBlc2NhcGVkVGFn
TmFtZVF1ZXJ5ICsgIicpXSIsIGRvYywgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NO
QVBTSE9UX1RZUEUpOwotICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3Vs
dCwgcmVzdWx0LnNuYXBzaG90TGVuZ3RoLCByZXN1bHQuc25hcHNob3RJdGVtKTsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBtYXRjaFBhcnRpYWxUYWdOYW1lc0FuZEF0dHJpYnV0ZVZhbHVlcyhkb2Mp
Ci0gICAgewotICAgICAgICBpZiAoIXRhZ05hbWVRdWVyeSkgewotICAgICAgICAgICAgbWF0Y2hQ
YXJ0aWFsQXR0cmlidXRlVmFsdWVzLmNhbGwodGhpcywgZG9jKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18uZXZh
bHVhdGUuY2FsbChkb2MsICIvLypbY29udGFpbnMobmFtZSgpLCAnIiArIGVzY2FwZWRUYWdOYW1l
UXVlcnkgKyAiJykgb3IgY29udGFpbnMoQCosICciICsgZXNjYXBlZFF1ZXJ5ICsgIicpXSIsIGRv
YywgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUpOwotICAgICAg
ICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0LnNuYXBzaG90TGVu
Z3RoLCByZXN1bHQuc25hcHNob3RJdGVtKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBtYXRjaFBh
cnRpYWxBdHRyaWJ1dGVWYWx1ZXMoZG9jKQotICAgIHsKLSAgICAgICAgY29uc3QgcmVzdWx0ID0g
ZG9jLl9fcHJvdG9fXy5ldmFsdWF0ZS5jYWxsKGRvYywgIi8vKltjb250YWlucyhAKiwgJyIgKyBl
c2NhcGVkUXVlcnkgKyAiJyldIiwgZG9jLCBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVf
U05BUFNIT1RfVFlQRSk7Ci0gICAgICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVz
dWx0LCByZXN1bHQuc25hcHNob3RMZW5ndGgsIHJlc3VsdC5zbmFwc2hvdEl0ZW0pOwotICAgIH0K
LQotICAgIGZ1bmN0aW9uIG1hdGNoU3R5bGVTZWxlY3Rvcihkb2MpCi0gICAgewotICAgICAgICBj
b25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLnF1ZXJ5U2VsZWN0b3JBbGwuY2FsbChkb2MsIHdo
aXRlc3BhY2VUcmltbWVkUXVlcnkpOwotICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRo
aXMsIHJlc3VsdCwgcmVzdWx0Lmxlbmd0aCwgcmVzdWx0Lml0ZW0pOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIG1hdGNoUGxhaW5UZXh0KGRvYykKLSAgICB7Ci0gICAgICAgIGNvbnN0IHJlc3VsdCA9
IGRvYy5fX3Byb3RvX18uZXZhbHVhdGUuY2FsbChkb2MsICIvL3RleHQoKVtjb250YWlucyguLCAn
IiArIGVzY2FwZWRRdWVyeSArICInKV0gfCAvL2NvbW1lbnQoKVtjb250YWlucyguLCAnIiArIGVz
Y2FwZWRRdWVyeSArICInKV0iLCBkb2MsIG51bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFKTsKLSAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0aGlzLCByZXN1
bHQsIHJlc3VsdC5zbmFwc2hvdExlbmd0aCwgcmVzdWx0LnNuYXBzaG90SXRlbSk7Ci0gICAgfQot
Ci0gICAgZnVuY3Rpb24gbWF0Y2hYUGF0aFF1ZXJ5KGRvYykKLSAgICB7Ci0gICAgICAgIGNvbnN0
IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18uZXZhbHVhdGUuY2FsbChkb2MsIHdoaXRlc3BhY2VUcmlt
bWVkUXVlcnksIGRvYywgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEUpOwotICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0
LnNuYXBzaG90TGVuZ3RoLCByZXN1bHQuc25hcHNob3RJdGVtKTsKLSAgICB9Ci0KLSAgICBmdW5j
dGlvbiBmaW5pc2hlZFNlYXJjaGluZygpCi0gICAgewotICAgICAgICAvLyBSZW1vdmUgdGhlIHNl
YXJjaFJlc3VsdHNQcm9wZXJ0eSBub3cgdGhhdCB0aGUgc2VhcmNoIGlzIGZpbmlzaGVkLgotICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IEluamVjdGVkU2NyaXB0Ll9zZWFyY2hSZXN1bHRzLmxl
bmd0aDsgKytpKQotICAgICAgICAgICAgZGVsZXRlIEluamVjdGVkU2NyaXB0Ll9zZWFyY2hSZXN1
bHRzW2ldW3NlYXJjaFJlc3VsdHNQcm9wZXJ0eV07Ci0gICAgfQotCi0gICAgY29uc3QgbWFpbkZy
YW1lRG9jdW1lbnQgPSBpbnNwZWN0ZWRXaW5kb3cuZG9jdW1lbnQ7Ci0gICAgY29uc3Qgc2VhcmNo
RG9jdW1lbnRzID0gW21haW5GcmFtZURvY3VtZW50XTsKLSAgICB2YXIgc2VhcmNoRnVuY3Rpb25z
OwotICAgIGlmICh0YWdOYW1lUXVlcnkgJiYgc3RhcnRUYWdGb3VuZCAmJiBlbmRUYWdGb3VuZCkK
LSAgICAgICAgc2VhcmNoRnVuY3Rpb25zID0gW21hdGNoRXhhY3RUYWdOYW1lcywgbWF0Y2hQbGFp
blRleHRdOwotICAgIGVsc2UgaWYgKHRhZ05hbWVRdWVyeSAmJiBzdGFydFRhZ0ZvdW5kKQotICAg
ICAgICBzZWFyY2hGdW5jdGlvbnMgPSBbbWF0Y2hTdGFydE9mVGFnTmFtZXMsIG1hdGNoUGxhaW5U
ZXh0XTsKLSAgICBlbHNlIGlmICh0YWdOYW1lUXVlcnkgJiYgZW5kVGFnRm91bmQpIHsKLSAgICAg
ICAgLy8gRklYTUU6IHdlIHNob3VsZCBoYXZlIGEgbWF0Y2hFbmRPZlRhZ05hbWVzIHNlYXJjaCBm
dW5jdGlvbiBpZiBlbmRUYWdGb3VuZCBpcyB0cnVlIGJ1dCBub3Qgc3RhcnRUYWdGb3VuZC4KLSAg
ICAgICAgLy8gVGhpcyByZXF1aXJlcyBlbmRzLXdpdGgoKSBzdXBwb3J0IGluIFhQYXRoLCBXZWJL
aXQgb25seSBzdXBwb3J0cyBzdGFydHMtd2l0aCgpIGFuZCBjb250YWlucygpLgotICAgICAgICBz
ZWFyY2hGdW5jdGlvbnMgPSBbbWF0Y2hQYXJ0aWFsVGFnTmFtZXMsIG1hdGNoUGxhaW5UZXh0XTsK
LSAgICB9IGVsc2UgaWYgKHdoaXRlc3BhY2VUcmltbWVkUXVlcnkgPT09ICIvLyoiIHx8IHdoaXRl
c3BhY2VUcmltbWVkUXVlcnkgPT09ICIqIikgewotICAgICAgICAvLyBUaGVzZSBxdWVyaWVzIHdp
bGwgbWF0Y2ggZXZlcnkgbm9kZS4gTWF0Y2hpbmcgZXZlcnl0aGluZyBpc24ndCB1c2VmdWwgYW5k
IGNhbiBiZSBzbG93IGZvciBsYXJnZSBwYWdlcywKLSAgICAgICAgLy8gc28gbGltaXQgdGhlIHNl
YXJjaCBmdW5jdGlvbnMgbGlzdCB0byBwbGFpbiB0ZXh0IGFuZCBhdHRyaWJ1dGUgbWF0Y2hpbmcu
Ci0gICAgICAgIHNlYXJjaEZ1bmN0aW9ucyA9IFttYXRjaFBhcnRpYWxBdHRyaWJ1dGVWYWx1ZXMs
IG1hdGNoUGxhaW5UZXh0XTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2VhcmNoRnVuY3Rpb25zID0g
W21hdGNoRXhhY3RJdGVtcywgbWF0Y2hTdHlsZVNlbGVjdG9yLCBtYXRjaFBhcnRpYWxUYWdOYW1l
c0FuZEF0dHJpYnV0ZVZhbHVlcywgbWF0Y2hQbGFpblRleHQsIG1hdGNoWFBhdGhRdWVyeV07Ci0K
LSAgICAvLyBGaW5kIGFsbCBmcmFtZXMsIGlmcmFtZXMgYW5kIG9iamVjdCBlbGVtZW50cyB0byBz
ZWFyY2ggdGhlaXIgZG9jdW1lbnRzLgotICAgIGNvbnN0IHN1YmRvY3VtZW50UmVzdWx0ID0gbWFp
bkZyYW1lRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiaWZyYW1lLCBmcmFtZSwgb2JqZWN0Iik7
Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YmRvY3VtZW50UmVzdWx0Lmxlbmd0aDsgKytp
KSB7Ci0gICAgICAgIHZhciBlbGVtZW50ID0gc3ViZG9jdW1lbnRSZXN1bHQuaXRlbShpKTsKLSAg
ICAgICAgaWYgKGVsZW1lbnQuY29udGVudERvY3VtZW50KQotICAgICAgICAgICAgc2VhcmNoRG9j
dW1lbnRzLnB1c2goZWxlbWVudC5jb250ZW50RG9jdW1lbnQpOwotICAgIH0KLQotICAgIGNvbnN0
IHBhbmVsID0gSW5qZWN0ZWRTY3JpcHQ7Ci0gICAgdmFyIGRvY3VtZW50SW5kZXggPSAwOwotICAg
IHZhciBzZWFyY2hGdW5jdGlvbkluZGV4ID0gMDsKLSAgICB2YXIgY2h1bmtJbnRlcnZhbElkZW50
aWZpZXIgPSBudWxsOwotCi0gICAgLy8gU3BsaXQgdXAgdGhlIHdvcmsgaW50byBjaHVua3Mgc28g
d2UgZG9uJ3QgYmxvY2sgdGhlIFVJIHRocmVhZCB3aGlsZSBwcm9jZXNzaW5nLgotCi0gICAgZnVu
Y3Rpb24gcHJvY2Vzc0NodW5rKCkKLSAgICB7Ci0gICAgICAgIHZhciBzZWFyY2hEb2N1bWVudCA9
IHNlYXJjaERvY3VtZW50c1tkb2N1bWVudEluZGV4XTsKLSAgICAgICAgdmFyIHNlYXJjaEZ1bmN0
aW9uID0gc2VhcmNoRnVuY3Rpb25zW3NlYXJjaEZ1bmN0aW9uSW5kZXhdOwotCi0gICAgICAgIGlm
ICgrK3NlYXJjaEZ1bmN0aW9uSW5kZXggPiBzZWFyY2hGdW5jdGlvbnMubGVuZ3RoKSB7Ci0gICAg
ICAgICAgICBzZWFyY2hGdW5jdGlvbiA9IHNlYXJjaEZ1bmN0aW9uc1swXTsKLSAgICAgICAgICAg
IHNlYXJjaEZ1bmN0aW9uSW5kZXggPSAwOwotCi0gICAgICAgICAgICBpZiAoKytkb2N1bWVudElu
ZGV4ID4gc2VhcmNoRG9jdW1lbnRzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIGlmIChwYW5l
bC5fY3VycmVudFNlYXJjaENodW5rSW50ZXJ2YWxJZGVudGlmaWVyID09PSBjaHVua0ludGVydmFs
SWRlbnRpZmllcikKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhbmVsLl9jdXJyZW50U2Vh
cmNoQ2h1bmtJbnRlcnZhbElkZW50aWZpZXI7Ci0gICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZh
bChjaHVua0ludGVydmFsSWRlbnRpZmllcik7Ci0gICAgICAgICAgICAgICAgZmluaXNoZWRTZWFy
Y2hpbmcuY2FsbChwYW5lbCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBzZWFyY2hEb2N1bWVudCA9IHNlYXJjaERvY3VtZW50c1tk
b2N1bWVudEluZGV4XTsKLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBz
ZWFyY2hGdW5jdGlvbi5jYWxsKHBhbmVsLCBzZWFyY2hEb2N1bWVudCk7Ci0gICAgICAgIH0gY2F0
Y2goZXJyKSB7Ci0gICAgICAgICAgICAvLyBpZ25vcmUgYW55IGV4Y2VwdGlvbnMuIHRoZSBxdWVy
eSBtaWdodCBiZSBtYWxmb3JtZWQsIGJ1dCB3ZSBhbGxvdyB0aGF0LgotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChydW5TeW5jaHJvbm91c2x5KQotICAg
ICAgICB3aGlsZSAocHJvY2Vzc0NodW5rKCkpIHt9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHByb2Nl
c3NDaHVuaygpOwotICAgICAgICBjaHVua0ludGVydmFsSWRlbnRpZmllciA9IHNldEludGVydmFs
KHByb2Nlc3NDaHVuaywgMjUpOwotICAgICAgICBJbmplY3RlZFNjcmlwdC5fY3VycmVudFNlYXJj
aENodW5rSW50ZXJ2YWxJZGVudGlmaWVyID0gY2h1bmtJbnRlcnZhbElkZW50aWZpZXI7Ci0gICAg
fQotICAgIHJldHVybiB0cnVlOwotfQotCi1JbmplY3RlZFNjcmlwdC5zZWFyY2hDYW5jZWxlZCA9
IGZ1bmN0aW9uKCkKLXsKLSAgICBpZiAoSW5qZWN0ZWRTY3JpcHQuX3NlYXJjaFJlc3VsdHMpIHsK
LSAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0c1Byb3BlcnR5ID0gSW5qZWN0ZWRTY3JpcHQuX2lu
Y2x1ZGVkSW5TZWFyY2hSZXN1bHRzUHJvcGVydHlOYW1lOwotICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZh
ciBub2RlID0gdGhpcy5fc2VhcmNoUmVzdWx0c1tpXTsKLQotICAgICAgICAgICAgLy8gUmVtb3Zl
IHRoZSBzZWFyY2hSZXN1bHRzUHJvcGVydHkgc2luY2UgdGhlcmUgbWlnaHQgYmUgYW4gdW5maW5p
c2hlZCBzZWFyY2guCi0gICAgICAgICAgICBkZWxldGUgbm9kZVtzZWFyY2hSZXN1bHRzUHJvcGVy
dHldOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKEluamVjdGVkU2NyaXB0Ll9jdXJyZW50
U2VhcmNoQ2h1bmtJbnRlcnZhbElkZW50aWZpZXIpIHsKLSAgICAgICAgY2xlYXJJbnRlcnZhbChJ
bmplY3RlZFNjcmlwdC5fY3VycmVudFNlYXJjaENodW5rSW50ZXJ2YWxJZGVudGlmaWVyKTsKLSAg
ICAgICAgZGVsZXRlIEluamVjdGVkU2NyaXB0Ll9jdXJyZW50U2VhcmNoQ2h1bmtJbnRlcnZhbElk
ZW50aWZpZXI7Ci0gICAgfQotICAgIEluamVjdGVkU2NyaXB0Ll9zZWFyY2hSZXN1bHRzID0gW107
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIEluamVjdGVkU2NyaXB0Lm9wZW5Jbkluc3BlY3RlZFdp
bmRvdyA9IGZ1bmN0aW9uKHVybCkKIHsKICAgICAvLyBEb24ndCBjYWxsIHdpbmRvdy5vcGVuIG9u
IHdyYXBwZXIgLSBwb3B1cCBibG9ja2VyIG11dGVzIGl0LgpAQCAtMTAyOCwyOCArNzg1LDUgQEAg
SW5qZWN0ZWRTY3JpcHQuX2NsYXNzTmFtZSA9IGZ1bmN0aW9uKG9iaikKICAgICB9CiB9CiAKLUlu
amVjdGVkU2NyaXB0Ll9lc2NhcGVDaGFyYWN0ZXJzID0gZnVuY3Rpb24oc3RyLCBjaGFycykKLXsK
LSAgICB2YXIgZm91bmRDaGFyID0gZmFsc2U7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFy
cy5sZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoc3RyLmluZGV4T2YoY2hhcnMuY2hhckF0KGkp
KSAhPT0gLTEpIHsKLSAgICAgICAgICAgIGZvdW5kQ2hhciA9IHRydWU7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghZm91bmRDaGFyKQotICAgICAgICBy
ZXR1cm4gc3RyOwotCi0gICAgdmFyIHJlc3VsdCA9ICIiOwotICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgc3RyLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChjaGFycy5pbmRleE9mKHN0ci5jaGFy
QXQoaSkpICE9PSAtMSkKLSAgICAgICAgICAgIHJlc3VsdCArPSAiXFwiOwotICAgICAgICByZXN1
bHQgKz0gc3RyLmNoYXJBdChpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBy
ZXR1cm4gSW5qZWN0ZWRTY3JpcHQ7CiB9KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qcwppbmRleCAyNTU4MjY3Li5jMzg4MjEzIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHRBY2Nl
c3MuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0QWNj
ZXNzLmpzCkBAIC03MSwyOSArNzEsMTggQEAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxI
YW5kbGVyID0gZnVuY3Rpb24obWV0aG9kTmFtZSwgYXN5bmMpCiAvLyAtIE1ha2Ugc3VyZSBsYXN0
IHBhcmFtZXRlciBvZiBhbGwgdGhlIEluamVjdGVkU3JpcHRBY2Nlc3MuKiBjYWxscyBpcyBhIGNh
bGxiYWNrIGZ1bmN0aW9uLgogLy8gV2Uga2VlcCB0aGVzZSBzb3J0ZWQuCiBJbmplY3RlZFNjcmlw
dEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoImFkZEluc3BlY3RlZE5vZGUiKTsKLUluamVjdGVkU2Ny
aXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiYWRkU3R5bGVTZWxlY3RvciIpOwotSW5qZWN0ZWRT
Y3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJhcHBseVN0eWxlUnVsZVRleHQiKTsKLUluamVj
dGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiYXBwbHlTdHlsZVRleHQiKTsKIEluamVj
dGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiY2xlYXJDb25zb2xlTWVzc2FnZXMiKTsK
IEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiZXZhbHVhdGUiKTsKIEluamVj
dGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiZXZhbHVhdGVJbkNhbGxGcmFtZSIpOwog
SW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJnZXRDb21wbGV0aW9ucyIpOwot
SW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJnZXRDb21wdXRlZFN0eWxlIik7
Ci1JbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoImdldElubGluZVN0eWxlIik7
CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoImdldE5vZGVQcm9wZXJ0eVZh
bHVlIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoImdldFByb3BlcnRp
ZXMiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiZ2V0UHJvdG90eXBl
cyIpOwotSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJnZXRTdHlsZXMiKTsK
IEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigib3BlbkluSW5zcGVjdGVkV2lu
ZG93Iik7Ci1JbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoInBlcmZvcm1TZWFy
Y2giKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigicHVzaE5vZGVUb0Zy
b250ZW5kIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoIm5vZGVCeVBh
dGgiKTsKLUluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigic2VhcmNoQ2FuY2Vs
ZWQiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigic2V0T3V0ZXJIVE1M
Iik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoInNldFByb3BlcnR5VmFs
dWUiKTsKLUluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigic2V0U3R5bGVQcm9w
ZXJ0eSIpOwotSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJzZXRTdHlsZVRl
eHQiKTsKLUluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigidG9nZ2xlU3R5bGVF
bmFibGVkIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoImV2YWx1YXRl
T25TZWxmIik7CiAKIC8vIFNvbWUgbWV0aG9kcyBjYW4ndCBydW4gc3luY2hyb25vdXNseSBldmVu
IG9uIHRoZSBpbmplY3RlZCBzY3JpcHQgc2lkZSAoc3VjaCBhcyBEQiB0cmFuc2FjdGlvbnMpLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRT
dHViLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHVi
LmpzCmluZGV4IDQ2NzBhZjEuLjdkOGM0ZDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMKQEAgLTI1OSw2ICsyNTksMTQgQEAg
V2ViSW5zcGVjdG9yLkluc3BlY3RvckJhY2tlbmRTdHViLnByb3RvdHlwZSA9IHsKIAogICAgIHJl
bW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkOiBmdW5jdGlvbigpCiAgICAgeworICAgIH0s
CisKKyAgICBwZXJmb3JtU2VhcmNoOiBmdW5jdGlvbigpCisgICAgeworICAgIH0sCisKKyAgICBz
ZWFyY2hDYW5jZWxlZDogZnVuY3Rpb24oKQorICAgIHsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmlu
ZGV4IDQxYjM2MTguLjVjMDU3MzIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEw
LTA2LTEwICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFBv
cnQgcGVyZm9ybVNlYXJjaCBmcm9tIEluamVjdGVkU2NyaXB0IHRvIEluc3BlY3RvckRPTUFnZW50
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDQy
MgorCisgICAgICAgICogc3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzOgorICAgICAg
ICAoZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwpOgorCiAyMDEwLTA2LTA3ICBUb255IENo
YW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11
cmEuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luc3BlY3RvckNvbnRyb2xs
ZXJJbXBsLmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1w
bC5qcwppbmRleCA4NmY4ODVhLi5mNzYyNTViIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
c3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMKQEAgLTYxLDYgKzYxLDcgQEAgZGV2dG9v
bHMuSW5zcGVjdG9yQmFja2VuZEltcGwgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5pbnN0YWxsSW5z
cGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygiZ2V0UmVzb3VyY2VDb250ZW50Iik7CiAgICAgdGhp
cy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygiaGlnaGxpZ2h0RE9NTm9kZSIp
OwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oImhpZGVET01O
b2RlSGlnaGxpZ2h0Iik7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVn
YXRlXygicGVyZm9ybVNlYXJjaCIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xs
ZXJEZWxlZ2F0ZV8oInJlbGVhc2VXcmFwcGVyT2JqZWN0R3JvdXAiKTsKICAgICB0aGlzLmluc3Rh
bGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJyZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0
ZU9uTG9hZCIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8o
InJlbG9hZFBhZ2UiKTsKQEAgLTY4LDYgKzY5LDcgQEAgZGV2dG9vbHMuSW5zcGVjdG9yQmFja2Vu
ZEltcGwgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRl
bGVnYXRlXygicmVtb3ZlRE9NU3RvcmFnZUl0ZW0iKTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0
b3JDb250cm9sbGVyRGVsZWdhdGVfKCJyZW1vdmVOb2RlIik7CiAgICAgdGhpcy5pbnN0YWxsSW5z
cGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygic2F2ZUZyb250ZW5kU2V0dGluZ3MiKTsKKyAgICB0
aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJzZWFyY2hDYW5jZWxlZCIp
OwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInNldEF0dHJp
YnV0ZSIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInNl
dERPTVN0b3JhZ2VJdGVtIik7CiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRl
bGVnYXRlXygic2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2UiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58405</attachid>
            <date>2010-06-10 13:26:22 -0700</date>
            <delta_ts>2010-06-10 13:47:03 -0700</delta_ts>
            <desc>[PATCH] Same with proper formatting.</desc>
            <filename>perform_search</filename>
            <type>text/plain</type>
            <size>42465</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2ZGQzYWMwLi45OTljYTM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDYt
MTAgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogUG9ydCBw
ZXJmb3JtU2VhcmNoIGZyb20gSW5qZWN0ZWRTY3JpcHQgdG8gSW5zcGVjdG9yRE9NQWdlbnQuCisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNDIyCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvZWxlbWVudHMtcGFuZWwtc2VhcmNoLmh0bWw6CisKIDIwMTAt
MDYtMDggIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdkLiBVcGRhdGVkIHRlc3RfZXhwZWN0YXRpb25zLnR4dCB0byBmb2xsb3cgcjYwODIyCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtcGFuZWwtc2VhcmNoLmh0
bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtcGFuZWwtc2VhcmNoLmh0bWwKaW5k
ZXggNGYxNjJkYi4uZDBkNDI4MyAxMDA3NTUKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Vs
ZW1lbnRzLXBhbmVsLXNlYXJjaC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9lbGVt
ZW50cy1wYW5lbC1zZWFyY2guaHRtbApAQCAtMzEsNyArMzEsNiBAQCBmdW5jdGlvbiBmcm9udGVu
ZF9wZXJmb3JtU2VhcmNoKHRlc3RDb250cm9sbGVyKQogCiAgICAgV2ViSW5zcGVjdG9yLmFkZE5v
ZGVzVG9TZWFyY2hSZXN1bHQgPSBmdW5jdGlvbihub2RlSWRzKQogICAgIHsKLSAgICAgICAgdmFy
IG5vZGVJZHMgPSBub2RlSWRzLnNwbGl0KCIsIik7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbm9kZUlkcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgdmFyIG5vZGUgPSBXZWJJbnNw
ZWN0b3IuZG9tQWdlbnQubm9kZUZvcklkKG5vZGVJZHNbaV0pOwogICAgICAgICAgICAgaWYgKG5v
ZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKQpAQCAtNDEsMTkgKzQwLDE5IEBAIGZ1bmN0
aW9uIGZyb250ZW5kX3BlcmZvcm1TZWFyY2godGVzdENvbnRyb2xsZXIpCiAgICAgICAgIH0KICAg
ICB9CiAgICAgLy8gUGxhaW4gdGV4dC4KLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZh
dWx0KCkucGVyZm9ybVNlYXJjaCgiRm9vIiArICJCYXIiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsK
KyAgICBJbnNwZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goIkZvbyIgKyAiQmFyIiwgdHJ1ZSk7
CiAgICAgLy8gUGFydGlhbCB0ZXh0LgotICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdldERlZmF1
bHQoKS5wZXJmb3JtU2VhcmNoKCJvbyIgKyAiQmEiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsKKyAg
ICBJbnNwZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goIm9vIiArICJCYSIsIHRydWUpOwogICAg
IC8vIFN0YXJ0IHRhZy4KLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZhdWx0KCkucGVy
Zm9ybVNlYXJjaCgiPGlucHUiICsgInQiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsKKyAgICBJbnNw
ZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goIjxpbnB1IiArICJ0IiwgdHJ1ZSk7CiAgICAgLy8g
UGFydGlhbCB0YWcuCi0gICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0RGVmYXVsdCgpLnBlcmZv
cm1TZWFyY2goIm5wdSIgKyAidCIsIHRydWUsIGZ1bmN0aW9uKCkge30pOworICAgIEluc3BlY3Rv
ckJhY2tlbmQucGVyZm9ybVNlYXJjaCgibnB1IiArICJ0IiwgdHJ1ZSk7CiAgICAgLy8gRXhhY3Qg
YXR0cmlidXRlIG5hbWUuCi0gICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0RGVmYXVsdCgpLnBl
cmZvcm1TZWFyY2goInZhbHUiICsgImUiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsKKyAgICBJbnNw
ZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goInZhbHUiICsgImUiLCB0cnVlKTsKICAgICAvLyBF
eGFjdCBhdHRyaWJ1dGUgdmFsPD51ZS4KLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZh
dWx0KCkucGVyZm9ybVNlYXJjaCgiSW4iICsgInB1dFZhIiArICJsIiwgdHJ1ZSwgZnVuY3Rpb24o
KSB7fSk7CisgICAgSW5zcGVjdG9yQmFja2VuZC5wZXJmb3JtU2VhcmNoKCJJbiIgKyAicHV0VmEi
ICsgImwiLCB0cnVlKTsKICAgICAvLyBQYXJ0aWFsIGF0dHJpYnV0ZSB2YWw8PnVlLgotICAgIElu
amVjdGVkU2NyaXB0QWNjZXNzLmdldERlZmF1bHQoKS5wZXJmb3JtU2VhcmNoKCJuIiArICJwdXRW
YSIgKyAibCIsIHRydWUsIGZ1bmN0aW9uKCkge30pOworICAgIEluc3BlY3RvckJhY2tlbmQucGVy
Zm9ybVNlYXJjaCgibiIgKyAicHV0VmEiICsgImwiLCB0cnVlKTsKIAogICAgIHRlc3RDb250cm9s
bGVyLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoZnVuY3Rpb24oKSB7CiAgICAgICAgIHRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoc2VhcmNoUmVzdWx0cyk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDMwNDc4ZWEuLjA2YjE3OTMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDMgQEAKKzIwMTAtMDYtMTAgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2ViIEluc3BlY3RvcjogUG9ydCBwZXJmb3JtU2VhcmNoIGZyb20gSW5qZWN0ZWRTY3JpcHQgdG8g
SW5zcGVjdG9yRE9NQWdlbnQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQwNDIyCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRI
b3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6YWRkTm9kZXNU
b1NlYXJjaFJlc3VsdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6cGVyZm9ybVNlYXJjaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpzZWFyY2hDYW5jZWxlZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZC5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6On5JbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6c2VhcmNoQ2FuY2VsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6Om9uTWF0Y2hKb2JzVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OnJlcG9ydE5vZGVzQXNTZWFyY2hSZXN1bHRzKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGNoSm9iOjp+TWF0
Y2hKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TWF0Y2hKb2I6Ok1hdGNoSm9iKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1hdGNoSm9iOjphZGROb2Rlc1RvUmVzdWx0cyk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kOjphZGROb2Rlc1RvU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2U6OnVwZGF0ZVNjcmlwdE9i
amVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlLnNlYXJjaENhbmNl
bGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZS5wZXJm
b3JtU2VhcmNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlw
ZS5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0luamVjdGVkU2NyaXB0LmpzOgorICAgICAgICAoaW5qZWN0ZWRTY3JpcHRDb25zdHJ1Y3Rvcik6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qczoK
KwogMjAxMC0wNi0wOCAgVmFuZ2VsaXMgS29ra2V2aXMgIDx2YW5nZWxpc0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0SG9zdC5jcHAKaW5kZXggYzU4MDczZC4uNGMzYzdhZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCkBAIC0xMTAsMTIgKzExMCw2IEBAIGxv
bmcgSW5qZWN0ZWRTY3JpcHRIb3N0OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5vZGUs
IGJvb2wgd2l0aENoaWxkcmVuLCBiCiAgICAgcmV0dXJuIGlkOwogfQogCi12b2lkIEluamVjdGVk
U2NyaXB0SG9zdDo6YWRkTm9kZXNUb1NlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIG5vZGVJZHMp
Ci17Ci0gICAgaWYgKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCA9IGluc3BlY3RvckZyb250
ZW5kKCkpCi0gICAgICAgIGZyb250ZW5kLT5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KG5vZGVJZHMp
OwotfQotCiBsb25nIEluamVjdGVkU2NyaXB0SG9zdDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5k
KGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQg
PSBpbnNwZWN0b3JET01BZ2VudCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRIb3N0LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3Qu
aAppbmRleCBiZWZmYzlkLi42NmNmNDFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEhvc3QuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dEhvc3QuaApAQCAtNjksNyArNjksNiBAQCBwdWJsaWM6CiAgICAgTm9kZSogbm9kZUZvcklkKGxv
bmcgbm9kZUlkKTsKICAgICBsb25nIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9kZSwg
Ym9vbCB3aXRoQ2hpbGRyZW4sIGJvb2wgc2VsZWN0SW5VSSk7CiAKLSAgICB2b2lkIGFkZE5vZGVz
VG9TZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBub2RlSWRzKTsKICAgICBsb25nIHB1c2hOb2Rl
QnlQYXRoVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHBhdGgpOwogCiAjaWYgRU5BQkxFKERBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0Lmlk
bCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5pZGwKaW5kZXggOGIyNDE1
Ny4uNWE0Y2UxOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRI
b3N0LmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaWRsCkBA
IC0zOCw3ICszOCw2IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0
IG5vZGVGb3JJZChpbiBsb25nIG5vZGVJZCk7CiAgICAgICAgIFtDdXN0b21dIGludCBwdXNoTm9k
ZVBhdGhUb0Zyb250ZW5kKGluIERPTU9iamVjdCBub2RlLCBpbiBib29sZWFuIHdpdGhDaGlsZHJl
biwgaW4gYm9vbGVhbiBzZWxlY3RJblVJKTsKIAotICAgICAgICB2b2lkIGFkZE5vZGVzVG9TZWFy
Y2hSZXN1bHQoaW4gRE9NU3RyaW5nIG5vZGVJZHMpOwogICAgICAgICBsb25nIHB1c2hOb2RlQnlQ
YXRoVG9Gcm9udGVuZChpbiBET01TdHJpbmcgcGF0aCk7CiAKICNpZiBkZWZpbmVkKEVOQUJMRV9K
QVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcAppbmRleCAzNmY0MWI4Li44MTRlNWQyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcApAQCAtMzUxLDYgKzM1MSwxOCBAQCB2
b2lkIEluc3BlY3RvckJhY2tlbmQ6OmNoYW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9k
ZUlkLCBjb25zdCBBdG9taWNTdHJpbgogICAgICAgICBkb21BZ2VudC0+Y2hhbmdlVGFnTmFtZShj
YWxsSWQsIG5vZGVJZCwgdGFnTmFtZSwgZXhwYW5kZWQpOwogfQogCit2b2lkIEluc3BlY3RvckJh
Y2tlbmQ6OnBlcmZvcm1TZWFyY2goY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCBydW5TeW5jaHJv
bm91c2x5KQoreworICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0
b3JET01BZ2VudCgpKQorICAgICAgICBkb21BZ2VudC0+cGVyZm9ybVNlYXJjaChxdWVyeSwgcnVu
U3luY2hyb25vdXNseSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c2VhcmNoQ2FuY2Vs
ZWQoKQoreworICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JE
T01BZ2VudCgpKQorICAgICAgICBkb21BZ2VudC0+c2VhcmNoQ2FuY2VsZWQoKTsKK30KKwogdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBi
b29sIGF1dGhvck9ubHkpCiB7CiAgICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9
IGluc3BlY3RvckRPTUFnZW50KCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKaW5k
ZXggMGViOGU0Yy4uYzg4YzIzYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApA
QCAtMTE2LDYgKzExNiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvcHlOb2RlKGxvbmcgbm9kZUlk
KTsKICAgICB2b2lkIHJlbW92ZU5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKICAgICB2
b2lkIGNoYW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25zdCBBdG9taWNT
dHJpbmcmIHRhZ05hbWUsIGJvb2wgZXhwYW5kZWQpOworICAgIHZvaWQgcGVyZm9ybVNlYXJjaChj
b25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sIHJ1blN5bmNocm9ub3VzbHkpOworICAgIHZvaWQgc2Vh
cmNoQ2FuY2VsZWQoKTsKIAogICAgIHZvaWQgZ2V0U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5v
ZGVJZCwgYm9vbCBhdXRoT25seSk7CiAgICAgdm9pZCBnZXRBbGxTdHlsZXMobG9uZyBjYWxsSWQp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAppbmRleCBlOGNmZGI5Li5lZThh
NTg1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbApAQCAtOTEsNiArOTEs
OSBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIHZvaWQgY29weU5vZGUoaW4gbG9uZyBub2RlSWQp
OwogICAgICAgICB2b2lkIHJlbW92ZU5vZGUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlk
KTsKICAgICAgICAgdm9pZCBjaGFuZ2VUYWdOYW1lKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIG5v
ZGVJZCwgaW4gRE9NU3RyaW5nIG5ld1RhZ05hbWUsIGluIGJvb2xlYW4gZXhwYW5kZWQpOworICAg
ICAgICB2b2lkIHBlcmZvcm1TZWFyY2goaW4gRE9NU3RyaW5nIHF1ZXJ5LCBpbiBib29sZWFuIHJ1
blN5bmNocm9ub3VzbHkpOworICAgICAgICB2b2lkIHNlYXJjaENhbmNlbGVkKCk7CisKICAgICAg
ICAgdm9pZCBoaWdobGlnaHRET01Ob2RlKGluIGxvbmcgbm9kZUlkKTsKICAgICAgICAgdm9pZCBo
aWRlRE9NTm9kZUhpZ2hsaWdodCgpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAKaW5kZXggMzM4ZGMzMy4uMzQwN2UyNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmNwcApAQCAtNjUsMTggKzY1LDEyMSBAQAogI2luY2x1ZGUgIlN0eWxlU2hlZXRM
aXN0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogCisjaWYgRU5BQkxFKFhQQVRIKQorI2luY2x1ZGUg
IlhQYXRoUmVzdWx0LmgiCisjZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIHsKKworY2xhc3MgTWF0Y2hFeGFjdElkSm9iIDog
cHVibGljIFdlYkNvcmU6Ok1hdGNoSm9iIHsKK3B1YmxpYzoKKyAgICBNYXRjaEV4YWN0SWRKb2Io
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA6IFdlYkNvcmU6Ok1hdGNo
Sm9iKGRvY3VtZW50LCBxdWVyeSkgeyB9CisgICAgdmlydHVhbCB+TWF0Y2hFeGFjdElkSm9iKCkg
eyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbWF0Y2goTGlzdEhhc2hTZXQ8Tm9k
ZSo+JiByZXN1bHRDb2xsZWN0b3IpCisgICAgeworICAgICAgICBpZiAobV9xdWVyeS5pc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IG1f
ZG9jdW1lbnQtPmdldEVsZW1lbnRCeUlkKG1fcXVlcnkpOworICAgICAgICBpZiAoZWxlbWVudCkK
KyAgICAgICAgICAgIHJlc3VsdENvbGxlY3Rvci5hZGQoZWxlbWVudCk7CisgICAgfQorfTsKKwor
Y2xhc3MgTWF0Y2hFeGFjdENsYXNzTmFtZXNKb2IgOiBwdWJsaWMgV2ViQ29yZTo6TWF0Y2hKb2Ig
eworcHVibGljOgorICAgIE1hdGNoRXhhY3RDbGFzc05hbWVzSm9iKERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgOiBXZWJDb3JlOjpNYXRjaEpvYihkb2N1bWVudCwgcXVl
cnkpIHsgfQorICAgIHZpcnR1YWwgfk1hdGNoRXhhY3RDbGFzc05hbWVzSm9iKCkgeyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgbWF0Y2goTGlzdEhhc2hTZXQ8Tm9kZSo+JiByZXN1bHRDb2xsZWN0b3Ip
CisgICAgeworICAgICAgICBpZiAoIW1fcXVlcnkuaXNFbXB0eSgpKQorICAgICAgICAgICAgYWRk
Tm9kZXNUb1Jlc3VsdHMobV9kb2N1bWVudC0+Z2V0RWxlbWVudHNCeUNsYXNzTmFtZShtX3F1ZXJ5
KSwgcmVzdWx0Q29sbGVjdG9yKTsKKyAgICB9Cit9OworCitjbGFzcyBNYXRjaEV4YWN0VGFnTmFt
ZXNKb2IgOiBwdWJsaWMgV2ViQ29yZTo6TWF0Y2hKb2IgeworcHVibGljOgorICAgIE1hdGNoRXhh
Y3RUYWdOYW1lc0pvYihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIDog
V2ViQ29yZTo6TWF0Y2hKb2IoZG9jdW1lbnQsIHF1ZXJ5KSB7IH0KKyAgICB2aXJ0dWFsIH5NYXRj
aEV4YWN0VGFnTmFtZXNKb2IoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBtYXRjaChMaXN0SGFz
aFNldDxOb2RlKj4mIHJlc3VsdENvbGxlY3RvcikKKyAgICB7CisgICAgICAgIGlmICghbV9xdWVy
eS5pc0VtcHR5KCkpCisgICAgICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cyhtX2RvY3VtZW50LT5n
ZXRFbGVtZW50c0J5TmFtZShtX3F1ZXJ5KSwgcmVzdWx0Q29sbGVjdG9yKTsKKyAgICB9Cit9Owor
CitjbGFzcyBNYXRjaFF1ZXJ5U2VsZWN0b3JBbGxKb2IgOiBwdWJsaWMgV2ViQ29yZTo6TWF0Y2hK
b2IgeworcHVibGljOgorICAgIE1hdGNoUXVlcnlTZWxlY3RvckFsbEpvYihEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIDogV2ViQ29yZTo6TWF0Y2hKb2IoZG9jdW1lbnQs
IHF1ZXJ5KSB7IH0KKyAgICB2aXJ0dWFsIH5NYXRjaFF1ZXJ5U2VsZWN0b3JBbGxKb2IoKSB7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBtYXRjaChMaXN0SGFzaFNldDxOb2RlKj4mIHJlc3VsdENvbGxl
Y3RvcikKKyAgICB7CisgICAgICAgIGlmIChtX3F1ZXJ5LmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgUmVmUHRy
PE5vZGVMaXN0PiBsaXN0ID0gbV9kb2N1bWVudC0+cXVlcnlTZWxlY3RvckFsbChtX3F1ZXJ5LCBl
Yyk7CisgICAgICAgIGlmICghZWMpCisgICAgICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cyhsaXN0
LCByZXN1bHRDb2xsZWN0b3IpOworICAgIH0KK307CisKK2NsYXNzIE1hdGNoWFBhdGhKb2IgOiBw
dWJsaWMgV2ViQ29yZTo6TWF0Y2hKb2IgeworcHVibGljOgorICAgIE1hdGNoWFBhdGhKb2IoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA6IFdlYkNvcmU6Ok1hdGNoSm9i
KGRvY3VtZW50LCBxdWVyeSkgeyB9CisgICAgdmlydHVhbCB+TWF0Y2hYUGF0aEpvYigpIHsgfQor
CisgICAgdmlydHVhbCB2b2lkIG1hdGNoKExpc3RIYXNoU2V0PE5vZGUqPiYgcmVzdWx0Q29sbGVj
dG9yKQorICAgIHsKKyNpZiBFTkFCTEUoWFBBVEgpCisgICAgICAgIGlmIChtX3F1ZXJ5LmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICAgICAgUmVmUHRyPFhQYXRoUmVzdWx0PiByZXN1bHQgPSBtX2RvY3VtZW50LT5ldmFs
dWF0ZShtX3F1ZXJ5LCBtX2RvY3VtZW50LmdldCgpLCAwLCBYUGF0aFJlc3VsdDo6T1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEUsIDAsIGVjKTsKKyAgICAgICAgaWYgKGVjIHx8ICFyZXN1bHQpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplID0gcmVzdWx0
LT5zbmFwc2hvdExlbmd0aChlYyk7CisgICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsg
IWVjICYmIGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSByZXN1bHQt
PnNuYXBzaG90SXRlbShpLCBlYyk7CisgICAgICAgICAgICBpZiAoIWVjKQorICAgICAgICAgICAg
ICAgIHJlc3VsdENvbGxlY3Rvci5hZGQobm9kZSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0K
K307CisKK2NsYXNzIE1hdGNoUGxhaW5UZXh0Sm9iIDogcHVibGljIE1hdGNoWFBhdGhKb2Igewor
cHVibGljOgorICAgIE1hdGNoUGxhaW5UZXh0Sm9iKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
U3RyaW5nJiBxdWVyeSkgOiBNYXRjaFhQYXRoSm9iKGRvY3VtZW50LCBxdWVyeSkKKyAgICB7Cisg
ICAgICAgIG1fcXVlcnkgPSAiLy90ZXh0KClbY29udGFpbnMoLiwgJyIgKyBtX3F1ZXJ5ICsgIicp
XSB8IC8vY29tbWVudCgpW2NvbnRhaW5zKC4sICciICsgbV9xdWVyeSArICInKV0iOworICAgIH0K
KyAgICB2aXJ0dWFsIH5NYXRjaFBsYWluVGV4dEpvYigpIHsgfQorfTsKKworfQorCiBJbnNwZWN0
b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQoSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3Jl
LCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAgICAgOiBFdmVudExpc3RlbmVyKEluc3Bl
Y3RvckRPTUFnZW50VHlwZSkKICAgICAsIG1fY3NzU3RvcmUoY3NzU3RvcmUpCiAgICAgLCBtX2Zy
b250ZW5kKGZyb250ZW5kKQogICAgICwgbV9sYXN0Tm9kZUlkKDEpCisgICAgLCBtX21hdGNoSm9i
c1RpbWVyKHRoaXMsICZJbnNwZWN0b3JET01BZ2VudDo6b25NYXRjaEpvYnNUaW1lcikKIHsKIH0K
IApAQCAtODcsNiArMTkwLDcgQEAgSW5zcGVjdG9yRE9NQWdlbnQ6On5JbnNwZWN0b3JET01BZ2Vu
dCgpCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc2V0KCkKIHsKKyAgICBzZWFyY2hDYW5j
ZWxlZCgpOwogICAgIGRpc2NhcmRCaW5kaW5ncygpOwogCiAgICAgTGlzdEhhc2hTZXQ8UmVmUHRy
PERvY3VtZW50PiA+IGNvcHkgPSBtX2RvY3VtZW50czsKQEAgLTUwNiw2ICs2MTAsMTE0IEBAIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nIGNhbGxJ
ZCwgbG9uZyBub2RlSWQpCiAgICAgbV9mcm9udGVuZC0+ZGlkR2V0RXZlbnRMaXN0ZW5lcnNGb3JO
b2RlKGNhbGxJZCwgbm9kZUlkLCBsaXN0ZW5lcnNBcnJheSk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goY29uc3QgU3RyaW5nJiB3aGl0ZXNwYWNlVHJpbW1lZFF1
ZXJ5LCBib29sIHJ1blN5bmNocm9ub3VzbHkpCit7CisgICAgLy8gRklYTUU6IEZldyB0aGluZ3Mg
YXJlIG1pc3NpbmcgaGVyZToKKyAgICAvLyAxKSBTZWFyY2ggd29ya3Mgd2l0aCBub2RlIGdyYW51
bGFyaXR5IC0gbnVtYmVyIG9mIG1hdGNoZXMgd2l0aGluIG5vZGUgaXMgbm90IGNhbGN1bGF0ZWQu
CisgICAgLy8gMikgVGhlcmUgaXMgbm8gbmVlZCB0byBwdXNoIGFsbCBzZWFyY2ggcmVzdWx0cyB0
byB0aGUgZnJvbnQtZW5kIGF0IGEgdGltZSwgcHVzaGluZyBuZXh0IC8gcHJldmlvdXMgcmVzdWx0
CisgICAgLy8gICAgaXMgc3VmZmljaWVudC4KKworICAgIGludCBxdWVyeUxlbmd0aCA9IHdoaXRl
c3BhY2VUcmltbWVkUXVlcnkubGVuZ3RoKCk7CisgICAgYm9vbCBzdGFydFRhZ0ZvdW5kID0gIXdo
aXRlc3BhY2VUcmltbWVkUXVlcnkuZmluZCgnPCcpOworICAgIGJvb2wgZW5kVGFnRm91bmQgPSB3
aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LnJldmVyc2VGaW5kKCc+JykgKyAxID09IHF1ZXJ5TGVuZ3Ro
OworCisgICAgU3RyaW5nIHRhZ05hbWVRdWVyeSA9IHdoaXRlc3BhY2VUcmltbWVkUXVlcnk7Cisg
ICAgaWYgKHN0YXJ0VGFnRm91bmQgfHwgZW5kVGFnRm91bmQpCisgICAgICAgIHRhZ05hbWVRdWVy
eSA9IHRhZ05hbWVRdWVyeS5zdWJzdHJpbmcoc3RhcnRUYWdGb3VuZCA/IDEgOiAwLCBlbmRUYWdG
b3VuZCA/IHF1ZXJ5TGVuZ3RoIC0gMSA6IHF1ZXJ5TGVuZ3RoKTsKKyAgICBpZiAoIURvY3VtZW50
Ojppc1ZhbGlkTmFtZSh0YWdOYW1lUXVlcnkpKQorICAgICAgICB0YWdOYW1lUXVlcnkgPSAiIjsK
KworICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lUXVlcnkgPSB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5
OworICAgIGlmICghRG9jdW1lbnQ6OmlzVmFsaWROYW1lKGF0dHJpYnV0ZU5hbWVRdWVyeSkpCisg
ICAgICAgIGF0dHJpYnV0ZU5hbWVRdWVyeSA9ICIiOworCisgICAgU3RyaW5nIGVzY2FwZWRRdWVy
eSA9IHdoaXRlc3BhY2VUcmltbWVkUXVlcnk7CisgICAgZXNjYXBlZFF1ZXJ5LnJlcGxhY2UoIici
LCAiXFwnIik7CisgICAgU3RyaW5nIGVzY2FwZWRUYWdOYW1lUXVlcnkgPSB0YWdOYW1lUXVlcnk7
CisgICAgZXNjYXBlZFRhZ05hbWVRdWVyeS5yZXBsYWNlKCInIiwgIlxcJyIpOworCisgICAgLy8g
RmluZCBhbGwgZnJhbWVzLCBpZnJhbWVzIGFuZCBvYmplY3QgZWxlbWVudHMgdG8gc2VhcmNoIHRo
ZWlyIGRvY3VtZW50cy4KKyAgICBWZWN0b3I8RG9jdW1lbnQqPiBkb2N1bWVudHM7CisgICAgZG9j
dW1lbnRzLmFwcGVuZChtYWluRnJhbWVEb2N1bWVudCgpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIFJlZlB0cjxOb2RlTGlzdD4gZnJhbWVPd25lcnMgPSBtYWluRnJhbWVEb2N1
bWVudCgpLT5xdWVyeVNlbGVjdG9yQWxsKCJpZnJhbWUsIGZyYW1lLCBvYmplY3QiLCBlYyk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWVjICYmIGZyYW1lT3duZXJzICYmIGkgPCBmcmFtZU93
bmVycy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBOb2RlKiBub2RlID0gZnJhbWVPd25lcnMt
Pml0ZW0oaSk7CisgICAgICAgIGlmIChub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpIHsKKyAg
ICAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogZnJhbWVPd25lciA9IHN0YXRpY19jYXN0
PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KG5vZGUpOworICAgICAgICAgICAgaWYgKGZyYW1lT3du
ZXItPmNvbnRlbnREb2N1bWVudCgpKQorICAgICAgICAgICAgICAgIGRvY3VtZW50cy5hcHBlbmQo
ZnJhbWVPd25lci0+Y29udGVudERvY3VtZW50KCkpOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gQ2xlYXIgcGVuZGluZyBqb2JzLgorICAgIHNlYXJjaENhbmNlbGVkKCk7CisKKyAgICAvLyBQ
b3B1bGF0ZSBuZXcgam9icy4KKyAgICBmb3IgKFZlY3RvcjxEb2N1bWVudCo+OjppdGVyYXRvciBp
dCA9IGRvY3VtZW50cy5iZWdpbigpOyBpdCAhPSBkb2N1bWVudHMuZW5kKCk7ICsraXQpIHsKKyAg
ICAgICAgaWYgKCF0YWdOYW1lUXVlcnkuaXNFbXB0eSgpICYmIHN0YXJ0VGFnRm91bmQgJiYgZW5k
VGFnRm91bmQpIHsKKyAgICAgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1h
dGNoRXhhY3RUYWdOYW1lc0pvYigqaXQsIHRhZ05hbWVRdWVyeSkpOworICAgICAgICAgICAgbV9w
ZW5kaW5nTWF0Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hQbGFpblRleHRKb2IoKml0LCBlc2NhcGVk
UXVlcnkpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCF0YWdOYW1lUXVlcnkuaXNFbXB0eSgpICYmIHN0YXJ0VGFnRm91bmQpIHsKKyAgICAgICAgICAg
IG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoWFBhdGhKb2IoKml0LCAiLy8qW3N0
YXJ0cy13aXRoKG5hbWUoKSwgJyIgKyBlc2NhcGVkVGFnTmFtZVF1ZXJ5ICsgIicpXSIpKTsKKyAg
ICAgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoUGxhaW5UZXh0Sm9i
KCppdCwgZXNjYXBlZFF1ZXJ5KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICghdGFnTmFtZVF1ZXJ5LmlzRW1wdHkoKSAmJiBlbmRUYWdGb3VuZCkgewor
ICAgICAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBoYXZlIGEgbWF0Y2hFbmRPZlRhZ05hbWVz
IHNlYXJjaCBmdW5jdGlvbiBpZiBlbmRUYWdGb3VuZCBpcyB0cnVlIGJ1dCBub3Qgc3RhcnRUYWdG
b3VuZC4KKyAgICAgICAgICAgIC8vIFRoaXMgcmVxdWlyZXMgZW5kcy13aXRoKCkgc3VwcG9ydCBp
biBYUGF0aCwgV2ViS2l0IG9ubHkgc3VwcG9ydHMgc3RhcnRzLXdpdGgoKSBhbmQgY29udGFpbnMo
KS4KKyAgICAgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoWFBhdGhK
b2IoKml0LCAiLy8qW2NvbnRhaW5zKG5hbWUoKSwgJyIgKyBlc2NhcGVkVGFnTmFtZVF1ZXJ5ICsg
IicpXSIpKTsKKyAgICAgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNo
UGxhaW5UZXh0Sm9iKCppdCwgZXNjYXBlZFF1ZXJ5KSk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgbWF0Y2hlc0V2ZXJ5Tm9kZSA9IHdoaXRlc3BhY2VU
cmltbWVkUXVlcnkgPT0gIi8vKiIgfHwgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSA9PSAiKiI7Cisg
ICAgICAgIGlmIChtYXRjaGVzRXZlcnlOb2RlKSB7CisgICAgICAgICAgICAvLyBUaGVzZSBxdWVy
aWVzIHdpbGwgbWF0Y2ggZXZlcnkgbm9kZS4gTWF0Y2hpbmcgZXZlcnl0aGluZyBpc24ndCB1c2Vm
dWwgYW5kIGNhbiBiZSBzbG93IGZvciBsYXJnZSBwYWdlcywKKyAgICAgICAgICAgIC8vIHNvIGxp
bWl0IHRoZSBzZWFyY2ggZnVuY3Rpb25zIGxpc3QgdG8gcGxhaW4gdGV4dCBhbmQgYXR0cmlidXRl
IG1hdGNoaW5nIGZvciB0aGVzZS4KKyAgICAgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBl
bmQobmV3IE1hdGNoWFBhdGhKb2IoKml0LCAiLy8qW2NvbnRhaW5zKEAqLCAnIiArIGVzY2FwZWRR
dWVyeSArICInKV0iKSk7CisgICAgICAgICAgICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5l
dyBNYXRjaFBsYWluVGV4dEpvYigqaXQsIGVzY2FwZWRRdWVyeSkpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBtX3BlbmRpbmdNYXRjaEpv
YnMuYXBwZW5kKG5ldyBNYXRjaEV4YWN0SWRKb2IoKml0LCB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5
KSk7CisgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoRXhhY3RDbGFz
c05hbWVzSm9iKCppdCwgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSkpOworICAgICAgICBtX3BlbmRp
bmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBNYXRjaEV4YWN0VGFnTmFtZXNKb2IoKml0LCB0YWdOYW1l
UXVlcnkpKTsKKyAgICAgICAgbV9wZW5kaW5nTWF0Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hRdWVy
eVNlbGVjdG9yQWxsSm9iKCppdCwgIlsiICsgYXR0cmlidXRlTmFtZVF1ZXJ5ICsgIl0iKSk7Cisg
ICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoUXVlcnlTZWxlY3RvckFs
bEpvYigqaXQsIHdoaXRlc3BhY2VUcmltbWVkUXVlcnkpKTsKKyAgICAgICAgbV9wZW5kaW5nTWF0
Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hYUGF0aEpvYigqaXQsICIvLypbY29udGFpbnMoQCosICci
ICsgZXNjYXBlZFF1ZXJ5ICsgIicpXSIpKTsKKyAgICAgICAgaWYgKCF0YWdOYW1lUXVlcnkuaXNF
bXB0eSgpKQorICAgICAgICAgICAgbV9wZW5kaW5nTWF0Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hY
UGF0aEpvYigqaXQsICIvLypbY29udGFpbnMobmFtZSgpLCAnIiArIGVzY2FwZWRUYWdOYW1lUXVl
cnkgKyAiJyldIikpOworICAgICAgICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBNYXRj
aFBsYWluVGV4dEpvYigqaXQsIGVzY2FwZWRRdWVyeSkpOworICAgICAgICBtX3BlbmRpbmdNYXRj
aEpvYnMuYXBwZW5kKG5ldyBNYXRjaFhQYXRoSm9iKCppdCwgd2hpdGVzcGFjZVRyaW1tZWRRdWVy
eSkpOworICAgIH0KKworICAgIGlmIChydW5TeW5jaHJvbm91c2x5KSB7CisgICAgICAgIC8vIEZv
ciB0ZXN0cy4KKyAgICAgICAgTGlzdEhhc2hTZXQ8Tm9kZSo+IHJlc3VsdENvbGxlY3RvcjsKKyAg
ICAgICAgZm9yIChEZXF1ZTxNYXRjaEpvYio+OjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ01hdGNo
Sm9icy5iZWdpbigpOyBpdCAhPSBtX3BlbmRpbmdNYXRjaEpvYnMuZW5kKCk7ICsraXQpCisgICAg
ICAgICAgICAoKml0KS0+bWF0Y2gocmVzdWx0Q29sbGVjdG9yKTsKKyAgICAgICAgcmVwb3J0Tm9k
ZXNBc1NlYXJjaFJlc3VsdHMocmVzdWx0Q29sbGVjdG9yKTsKKyAgICAgICAgc2VhcmNoQ2FuY2Vs
ZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX21hdGNoSm9ic1RpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKK30KKwordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2VhcmNoQ2FuY2VsZWQo
KQoreworICAgIGlmIChtX21hdGNoSm9ic1RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fbWF0
Y2hKb2JzVGltZXIuc3RvcCgpOworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3BlbmRpbmdNYXRjaEpv
YnMpOworICAgIG1fcGVuZGluZ01hdGNoSm9icy5jbGVhcigpOworICAgIG1fc2VhcmNoUmVzdWx0
cy5jbGVhcigpOworfQorCiBTdHJpbmcgSW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50VVJMU3Ry
aW5nKERvY3VtZW50KiBkb2N1bWVudCkgY29uc3QKIHsKICAgICBpZiAoIWRvY3VtZW50IHx8IGRv
Y3VtZW50LT51cmwoKS5pc051bGwoKSkKQEAgLTEzMzAsNiArMTU0MiwzNyBAQCBDU1NTdHlsZVNo
ZWV0KiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0UGFyZW50U3R5bGVTaGVldChDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZQogICAgIHJldHVybiBwYXJlbnRTdHlsZVNoZWV0OwogfQogCit2b2lkIElu
c3BlY3RvckRPTUFnZW50Ojpvbk1hdGNoSm9ic1RpbWVyKFRpbWVyPEluc3BlY3RvckRPTUFnZW50
PiopCit7CisgICAgaWYgKCFtX3BlbmRpbmdNYXRjaEpvYnMuc2l6ZSgpKSB7CisgICAgICAgIHNl
YXJjaENhbmNlbGVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBMaXN0SGFzaFNl
dDxOb2RlKj4gcmVzdWx0Q29sbGVjdG9yOworICAgIE1hdGNoSm9iKiBqb2IgPSBtX3BlbmRpbmdN
YXRjaEpvYnMuZmlyc3QoKTsKKyAgICBtX3BlbmRpbmdNYXRjaEpvYnMucmVtb3ZlRmlyc3QoKTsK
KyAgICBqb2ItPm1hdGNoKHJlc3VsdENvbGxlY3Rvcik7CisgICAgZGVsZXRlIGpvYjsKKworICAg
IHJlcG9ydE5vZGVzQXNTZWFyY2hSZXN1bHRzKHJlc3VsdENvbGxlY3Rvcik7CisKKyAgICBtX21h
dGNoSm9ic1RpbWVyLnN0YXJ0T25lU2hvdCgwLjAyNSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OnJlcG9ydE5vZGVzQXNTZWFyY2hSZXN1bHRzKExpc3RIYXNoU2V0PE5vZGUqPiYgcmVz
dWx0Q29sbGVjdG9yKQoreworICAgIFNjcmlwdEFycmF5IG5vZGVJZHMgPSBtX2Zyb250ZW5kLT5u
ZXdTY3JpcHRBcnJheSgpOworICAgIGludCBpbmRleCA9IDA7CisgICAgZm9yIChMaXN0SGFzaFNl
dDxOb2RlKj46Oml0ZXJhdG9yIGl0ID0gcmVzdWx0Q29sbGVjdG9yLmJlZ2luKCk7IGl0ICE9IHJl
c3VsdENvbGxlY3Rvci5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAobV9zZWFyY2hSZXN1bHRz
LmNvbnRhaW5zKCppdCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9zZWFyY2hS
ZXN1bHRzLmFkZCgqaXQpOworICAgICAgICBub2RlSWRzLnNldChpbmRleCsrLCBzdGF0aWNfY2Fz
dDxsb25nIGxvbmc+KHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoKml0KSkpOworICAgIH0KKyAgICBt
X2Zyb250ZW5kLT5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KG5vZGVJZHMpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggZjg5MjViNS4uMWM0ZjBjMyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0zNCwxMCArMzQsMTIgQEAKICNpbmNsdWRl
ICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JDU1NTdG9yZS5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiU2Ny
aXB0QXJyYXkuaCIKICNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKICNpbmNsdWRlICJTY3JpcHRT
dGF0ZS5oIgogCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgpAQCAtNzIsNiArNzQsMjYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBF
dmVudExpc3RlbmVyVmVjdG9yIGV2ZW50TGlzdGVuZXJWZWN0b3I7CiAgICAgfTsKIAorICAgIGNs
YXNzIE1hdGNoSm9iIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXRjaChM
aXN0SGFzaFNldDxOb2RlKj4mIHJlc3VsdENvbGxlY3RvcikgPSAwOworICAgICAgICB2aXJ0dWFs
IH5NYXRjaEpvYigpIHsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBNYXRjaEpvYihEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgcXVlcnkpCisgICAgICAgICAgICA6IG1fZG9j
dW1lbnQoZG9jdW1lbnQpCisgICAgICAgICAgICAsIG1fcXVlcnkocXVlcnkpIHsgfQorCisgICAg
ICAgIHZvaWQgYWRkTm9kZXNUb1Jlc3VsdHMoUGFzc1JlZlB0cjxOb2RlTGlzdD4gbm9kZXMsIExp
c3RIYXNoU2V0PE5vZGUqPiYgcmVzdWx0Q29sbGVjdG9yKQorICAgICAgICB7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBub2RlcyAmJiBpIDwgbm9kZXMtPmxlbmd0aCgpOyArK2kp
CisgICAgICAgICAgICAgICAgcmVzdWx0Q29sbGVjdG9yLmFkZChub2Rlcy0+aXRlbShpKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CisgICAgICAg
IFN0cmluZyBtX3F1ZXJ5OworICAgIH07CisKICAgICBjbGFzcyBJbnNwZWN0b3JET01BZ2VudCA6
IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEluc3BlY3RvckRPTUFnZW50PiBjcmVhdGUoSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0
b3JlLCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCkBAIC0xMDEsNiArMTIzLDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGNoYW5nZVRhZ05hbWUobG9uZyBjYWxsSWQs
IGxvbmcgbm9kZUlkLCBjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGJvb2wgZXhwYW5kZWQp
OwogICAgICAgICB2b2lkIHNldFRleHROb2RlVmFsdWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlk
LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICAgICAgdm9pZCBnZXRFdmVudExpc3RlbmVyc0Zv
ck5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKKyAgICAgICAgdm9pZCBwZXJmb3JtU2Vh
cmNoKGNvbnN0IFN0cmluZyYgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSwgYm9vbCBydW5TeW5jaHJv
bm91c2x5KTsKKyAgICAgICAgdm9pZCBzZWFyY2hDYW5jZWxlZCgpOwogCiAgICAgICAgIC8vIE1l
dGhvZHMgY2FsbGVkIGZyb20gdGhlIGZyb250ZW5kIGZvciBDU1Mgc3R5bGVzIGluc3BlY3Rpb24u
CiAgICAgICAgIHZvaWQgZ2V0U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgYm9vbCBh
dXRob3JPbmx5KTsKQEAgLTE2NSw2ICsxODksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIFN0cmluZyBkb2N1bWVudFVSTFN0cmluZyhEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0Owog
ICAgICAgICBJbnNwZWN0b3JDU1NTdG9yZSogY3NzU3RvcmUoKSB7IHJldHVybiBtX2Nzc1N0b3Jl
OyB9CiAKKyAgICAgICAgdm9pZCBvbk1hdGNoSm9ic1RpbWVyKFRpbWVyPEluc3BlY3RvckRPTUFn
ZW50PiopOworICAgICAgICB2b2lkIHJlcG9ydE5vZGVzQXNTZWFyY2hSZXN1bHRzKExpc3RIYXNo
U2V0PE5vZGUqPiYgcmVzdWx0Q29sbGVjdG9yKTsKKwogICAgICAgICBTY3JpcHRPYmplY3QgYnVp
bGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgYm9vbCBiaW5kKTsKICAgICAg
ICAgdm9pZCBwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJh
dGlvbiosIFNjcmlwdE9iamVjdCYgcmVzdWx0KTsKICAgICAgICAgU2NyaXB0QXJyYXkgYnVpbGRB
cnJheUZvckRpc2FibGVkU3R5bGVQcm9wZXJ0aWVzKERpc2FibGVkU3R5bGVEZWNsYXJhdGlvbiop
OwpAQCAtMTg4LDkgKzIxNSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEhhc2hT
ZXQ8bG9uZz4gbV9jaGlsZHJlblJlcXVlc3RlZDsKICAgICAgICAgbG9uZyBtX2xhc3ROb2RlSWQ7
CiAgICAgICAgIExpc3RIYXNoU2V0PFJlZlB0cjxEb2N1bWVudD4gPiBtX2RvY3VtZW50czsKKyAg
ICAgICAgRGVxdWU8TWF0Y2hKb2IqPiBtX3BlbmRpbmdNYXRjaEpvYnM7CisgICAgICAgIFRpbWVy
PEluc3BlY3RvckRPTUFnZW50PiBtX21hdGNoSm9ic1RpbWVyOworICAgICAgICBIYXNoU2V0PFJl
ZlB0cjxOb2RlPiA+IG1fc2VhcmNoUmVzdWx0czsKICAgICB9OwogCi0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckRPTUFnZW50X2gpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKaW5kZXggMzkwZWRhYi4uZWVlZmJkMiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcApAQCAtNzM5LDcgKzczOSw3
IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnVwZGF0ZURPTVN0b3JhZ2UobG9uZyBzdG9yYWdl
SWQpCiB9CiAjZW5kaWYKIAotdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkTm9kZXNUb1NlYXJj
aFJlc3VsdChjb25zdCBTdHJpbmcmIG5vZGVJZHMpCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjph
ZGROb2Rlc1RvU2VhcmNoUmVzdWx0KGNvbnN0IFNjcmlwdEFycmF5JiBub2RlSWRzKQogewogICAg
IFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7
IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJhZGROb2Rlc1RvU2VhcmNoUmVzdWx0Iik7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAppbmRleCBiOWY4N2VmLi44MmNkZjhi
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKQEAgLTE1OCw3ICsxNTgsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZGlkR2V0Q29va2llcyhsb25nIGNh
bGxJZCwgY29uc3QgU2NyaXB0QXJyYXkmIGNvb2tpZXMsIGNvbnN0IFN0cmluZyYgY29va2llc1N0
cmluZyk7CiAgICAgICAgIHZvaWQgZGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGxvbmcgY2Fs
bElkLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHJlc3VsdCwgYm9vbCBpc0V4Y2VwdGlvbik7CiAK
LSAgICAgICAgdm9pZCBhZGROb2Rlc1RvU2VhcmNoUmVzdWx0KGNvbnN0IFN0cmluZyYgbm9kZUlk
cyk7CisgICAgICAgIHZvaWQgYWRkTm9kZXNUb1NlYXJjaFJlc3VsdChjb25zdCBTY3JpcHRBcnJh
eSYgbm9kZUlkcyk7CiAKICAgICAgICAgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChpbnQg
aXRlbUlkKTsKICAgICAgICAgdm9pZCBjb250ZXh0TWVudUNsZWFyZWQoKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclJlc291cmNlLmNwcAppbmRleCA5OTliOGQ2Li5mMGUzOTFkIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwCkBAIC0xNjksNyArMTY5LDYgQEAgdm9p
ZCBJbnNwZWN0b3JSZXNvdXJjZTo6dXBkYXRlU2NyaXB0T2JqZWN0KEluc3BlY3RvckZyb250ZW5k
KiBmcm9udGVuZCkKICAgICAgICAganNvbk9iamVjdC5zZXQoImV4cGVjdGVkQ29udGVudExlbmd0
aCIsIG1fZXhwZWN0ZWRDb250ZW50TGVuZ3RoKTsKICAgICAgICAganNvbk9iamVjdC5zZXQoInN0
YXR1c0NvZGUiLCBtX3Jlc3BvbnNlU3RhdHVzQ29kZSk7CiAgICAgICAgIGpzb25PYmplY3Quc2V0
KCJzdGF0dXNUZXh0IiwgbV9yZXNwb25zZVN0YXR1c1RleHQpOwotICAgICAgICBqc29uT2JqZWN0
LnNldCgic3VnZ2VzdGVkRmlsZW5hbWUiLCBtX3N1Z2dlc3RlZEZpbGVuYW1lKTsKICAgICAgICAg
U2NyaXB0T2JqZWN0IHJlc3BvbnNlSGVhZGVycyA9IGZyb250ZW5kLT5uZXdTY3JpcHRPYmplY3Qo
KTsKICAgICAgICAgcG9wdWxhdGVIZWFkZXJzT2JqZWN0KCZyZXNwb25zZUhlYWRlcnMsIG1fcmVz
cG9uc2VIZWFkZXJGaWVsZHMpOwogICAgICAgICBqc29uT2JqZWN0LnNldCgicmVzcG9uc2VIZWFk
ZXJzIiwgcmVzcG9uc2VIZWFkZXJzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9FbGVtZW50c1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Vs
ZW1lbnRzUGFuZWwuanMKaW5kZXggYzg1MzQ0MC4uNTViYTgyZCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMKQEAgLTI0MCw3ICsyNDAsNyBAQCBXZWJJ
bnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy5fY3Vy
cmVudFNlYXJjaFJlc3VsdEluZGV4ID0gMDsKICAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0cyA9
IFtdOwotICAgICAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZhdWx0KCkuc2VhcmNoQ2Fu
Y2VsZWQoZnVuY3Rpb24oKSB7fSk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2VhcmNoQ2Fu
Y2VsZWQoKTsKICAgICB9LAogCiAgICAgcGVyZm9ybVNlYXJjaDogZnVuY3Rpb24ocXVlcnkpCkBA
IC0yNTYsNyArMjU2LDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlID0g
ewogICAgICAgICB0aGlzLl9tYXRjaGVzQ291bnRVcGRhdGVUaW1lb3V0ID0gbnVsbDsKICAgICAg
ICAgdGhpcy5fc2VhcmNoUXVlcnkgPSBxdWVyeTsKIAotICAgICAgICBJbmplY3RlZFNjcmlwdEFj
Y2Vzcy5nZXREZWZhdWx0KCkucGVyZm9ybVNlYXJjaCh3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBm
YWxzZSwgZnVuY3Rpb24oKSB7fSk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQucGVyZm9ybVNl
YXJjaCh3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5KTsKICAgICB9LAogCiAgICAgc2VhcmNoaW5nRm9y
Tm9kZVdhc0VuYWJsZWQ6IGZ1bmN0aW9uKCkKQEAgLTI4OCwxMiArMjg4LDExIEBAIFdlYkluc3Bl
Y3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgIGFkZE5vZGVzVG9TZWFyY2hS
ZXN1bHQ6IGZ1bmN0aW9uKG5vZGVJZHMpCiAgICAgewotICAgICAgICBpZiAoIW5vZGVJZHMpCisg
ICAgICAgIGlmICghbm9kZUlkcy5sZW5ndGgpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgdmFyIG5vZGVJZHNBcnJheSA9IG5vZGVJZHMuc3BsaXQoIiwiKTsKLSAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBub2RlSWRzQXJyYXkubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZh
ciBub2RlSWQgPSBub2RlSWRzQXJyYXlbaV07CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bm9kZUlkcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIG5vZGVJZCA9IG5vZGVJZHNb
aV07CiAgICAgICAgICAgICB2YXIgbm9kZSA9IFdlYkluc3BlY3Rvci5kb21BZ2VudC5ub2RlRm9y
SWQobm9kZUlkKTsKICAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNj
cmlwdC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcwpp
bmRleCA0MDAyZTIzLi5lNjJhOTE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0luamVjdGVkU2NyaXB0LmpzCkBAIC04Myw4ICs4Myw2IEBAIEluamVjdGVkU2NyaXB0LnJlbGVh
c2VXcmFwcGVyT2JqZWN0R3JvdXAgPSBmdW5jdGlvbihvYmplY3RHcm91cE5hbWUpIHsKIC8vIENh
bGxlZCBmcm9tIHdpdGhpbiBJbnNwZWN0b3JDb250cm9sbGVyIG9uIHRoZSAnaW5zcGVjdGVkIHBh
Z2UnIHNpZGUuCiBJbmplY3RlZFNjcmlwdC5yZXNldCA9IGZ1bmN0aW9uKCkKIHsKLSAgICBJbmpl
Y3RlZFNjcmlwdC5fc2VhcmNoUmVzdWx0cyA9IFtdOwotICAgIEluamVjdGVkU2NyaXB0Ll9pbmNs
dWRlZEluU2VhcmNoUmVzdWx0c1Byb3BlcnR5TmFtZSA9ICJfX2luY2x1ZGVkSW5JbnNwZWN0b3JT
ZWFyY2hSZXN1bHRzIjsKIH0KIAogSW5qZWN0ZWRTY3JpcHQucmVzZXQoKTsKQEAgLTIxMSw3ICsy
MDksNyBAQCBJbmplY3RlZFNjcmlwdC5zZXRQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24ob2JqZWN0
UHJveHksIHByb3BlcnR5TmFtZSwgZXhwcmVzc2lvbgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9IGNhdGNoKGUpIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBp
bnNwZWN0ZWRXaW5kb3cuZXZhbCgiXCIiICsgSW5qZWN0ZWRTY3JpcHQuX2VzY2FwZUNoYXJhY3Rl
cnMoZXhwcmVzc2lvbiwgIlwiIikgKyAiXCIiKTsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBp
bnNwZWN0ZWRXaW5kb3cuZXZhbCgiXCIiICsgZXhwcmVzc2lvbi5yZXBsYWNlKC8iL2csICJcXFwi
IikgKyAiXCIiKTsKICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eU5hbWVdID0gcmVzdWx0Owog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gY2F0Y2goZSkgewpAQCAtMzU1LDI0
NyArMzUzLDYgQEAgSW5qZWN0ZWRTY3JpcHQuZ2V0Tm9kZUlkID0gZnVuY3Rpb24obm9kZSkKICAg
ICByZXR1cm4gSW5qZWN0ZWRTY3JpcHRIb3N0LnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSwg
ZmFsc2UsIGZhbHNlKTsKIH0KIAotSW5qZWN0ZWRTY3JpcHQucGVyZm9ybVNlYXJjaCA9IGZ1bmN0
aW9uKHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIHJ1blN5bmNocm9ub3VzbHkpCi17Ci0gICAgLy8g
RklYTUU6IEZldyB0aGluZ3MgYXJlIG1pc3NpbmcgaGVyZToKLSAgICAvLyAxKSBTZWFyY2ggd29y
a3Mgd2l0aCBub2RlIGdyYW51bGFyaXR5IC0gbnVtYmVyIG9mIG1hdGNoZXMgd2l0aGluIG5vZGUg
aXMgbm90IGNhbGN1bGF0ZWQuCi0gICAgLy8gMikgU2VhcmNoIGRvZXMgbm90IHdvcmsgb3V0c2lk
ZSBtYWluIGRvY3VtZW50cycgZG9tYWluIC0gd2UgbmVlZCB0byB1c2Ugc3BlY2lmaWMgSW5qZWN0
ZWRTY3JpcHQgaW5zdGFuY2VzCi0gICAgLy8gICAgZm9yIG90aGVyIGRvbWFpbnMuCi0gICAgLy8g
MykgVGhlcmUgaXMgbm8gbmVlZCB0byBwdXNoIGFsbCBzZWFyY2ggcmVzdWx0cyB0byB0aGUgZnJv
bnQtZW5kIGF0IGEgdGltZSwgcHVzaGluZyBuZXh0IC8gcHJldmlvdXMgcmVzdWx0Ci0gICAgLy8g
ICAgaXMgc3VmZmljaWVudC4KLSAgICB2YXIgdGFnTmFtZVF1ZXJ5ID0gd2hpdGVzcGFjZVRyaW1t
ZWRRdWVyeTsKLSAgICB2YXIgYXR0cmlidXRlTmFtZVF1ZXJ5ID0gd2hpdGVzcGFjZVRyaW1tZWRR
dWVyeTsKLSAgICB2YXIgc3RhcnRUYWdGb3VuZCA9ICh0YWdOYW1lUXVlcnkuaW5kZXhPZigiPCIp
ID09PSAwKTsKLSAgICB2YXIgZW5kVGFnRm91bmQgPSAodGFnTmFtZVF1ZXJ5Lmxhc3RJbmRleE9m
KCI+IikgPT09ICh0YWdOYW1lUXVlcnkubGVuZ3RoIC0gMSkpOwotCi0gICAgaWYgKHN0YXJ0VGFn
Rm91bmQgfHwgZW5kVGFnRm91bmQpIHsKLSAgICAgICAgdmFyIHRhZ05hbWVRdWVyeUxlbmd0aCA9
IHRhZ05hbWVRdWVyeS5sZW5ndGg7Ci0gICAgICAgIHRhZ05hbWVRdWVyeSA9IHRhZ05hbWVRdWVy
eS5zdWJzdHJpbmcoKHN0YXJ0VGFnRm91bmQgPyAxIDogMCksIChlbmRUYWdGb3VuZCA/ICh0YWdO
YW1lUXVlcnlMZW5ndGggLSAxKSA6IHRhZ05hbWVRdWVyeUxlbmd0aCkpOwotICAgIH0KLQotICAg
IC8vIENoZWNrIHRoZSB0YWdOYW1lUXVlcnkgaXMgaXQgaXMgYSBwb3NzaWJseSB2YWxpZCB0YWcg
bmFtZS4KLSAgICBpZiAoIS9eW2EtekEtWjAtOVwtXzpdKyQvLnRlc3QodGFnTmFtZVF1ZXJ5KSkK
LSAgICAgICAgdGFnTmFtZVF1ZXJ5ID0gbnVsbDsKLQotICAgIC8vIENoZWNrIHRoZSBhdHRyaWJ1
dGVOYW1lUXVlcnkgaXMgaXQgaXMgYSBwb3NzaWJseSB2YWxpZCB0YWcgbmFtZS4KLSAgICBpZiAo
IS9eW2EtekEtWjAtOVwtXzpdKyQvLnRlc3QoYXR0cmlidXRlTmFtZVF1ZXJ5KSkKLSAgICAgICAg
YXR0cmlidXRlTmFtZVF1ZXJ5ID0gbnVsbDsKLQotICAgIGNvbnN0IGVzY2FwZWRRdWVyeSA9IElu
amVjdGVkU2NyaXB0Ll9lc2NhcGVDaGFyYWN0ZXJzKHdoaXRlc3BhY2VUcmltbWVkUXVlcnksICIn
Iik7Ci0gICAgY29uc3QgZXNjYXBlZFRhZ05hbWVRdWVyeSA9ICh0YWdOYW1lUXVlcnkgPyAgSW5q
ZWN0ZWRTY3JpcHQuX2VzY2FwZUNoYXJhY3RlcnModGFnTmFtZVF1ZXJ5LCAiJyIpIDogbnVsbCk7
Ci0gICAgY29uc3QgZXNjYXBlZFdoaXRlc3BhY2VUcmltbWVkUXVlcnkgPSBJbmplY3RlZFNjcmlw
dC5fZXNjYXBlQ2hhcmFjdGVycyh3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCAiJyIpOwotICAgIGNv
bnN0IHNlYXJjaFJlc3VsdHNQcm9wZXJ0eSA9IEluamVjdGVkU2NyaXB0Ll9pbmNsdWRlZEluU2Vh
cmNoUmVzdWx0c1Byb3BlcnR5TmFtZTsKLQotICAgIGZ1bmN0aW9uIGFkZE5vZGVzVG9SZXN1bHRz
KG5vZGVzLCBsZW5ndGgsIGdldEl0ZW0pCi0gICAgewotICAgICAgICBpZiAoIWxlbmd0aCkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgbm9kZUlkcyA9IFtdOwotICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9
IGdldEl0ZW0uY2FsbChub2RlcywgaSk7Ci0gICAgICAgICAgICAvLyBTa2lwIHRoaXMgbm9kZSBp
ZiBpdCBhbHJlYWR5IGhhcyB0aGUgcHJvcGVydHkuCi0gICAgICAgICAgICBpZiAoc2VhcmNoUmVz
dWx0c1Byb3BlcnR5IGluIG5vZGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgICAgIGlmICghSW5qZWN0ZWRTY3JpcHQuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKSB7Ci0gICAg
ICAgICAgICAgICAgSW5qZWN0ZWRTY3JpcHQuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9IDA7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG5vZGVbc2VhcmNoUmVzdWx0c1Byb3BlcnR5
XSA9IHRydWU7Ci0gICAgICAgICAgICBJbmplY3RlZFNjcmlwdC5fc2VhcmNoUmVzdWx0cy5wdXNo
KG5vZGUpOwotICAgICAgICAgICAgdmFyIG5vZGVJZCA9IEluamVjdGVkU2NyaXB0SG9zdC5wdXNo
Tm9kZVBhdGhUb0Zyb250ZW5kKG5vZGUsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgICAgICBub2Rl
SWRzLnB1c2gobm9kZUlkKTsKLSAgICAgICAgfQotICAgICAgICBJbmplY3RlZFNjcmlwdEhvc3Qu
YWRkTm9kZXNUb1NlYXJjaFJlc3VsdChub2RlSWRzLmpvaW4oIiwiKSk7Ci0gICAgfQotCi0gICAg
ZnVuY3Rpb24gbWF0Y2hFeGFjdEl0ZW1zKGRvYykKLSAgICB7Ci0gICAgICAgIG1hdGNoRXhhY3RJ
ZC5jYWxsKHRoaXMsIGRvYyk7Ci0gICAgICAgIG1hdGNoRXhhY3RDbGFzc05hbWVzLmNhbGwodGhp
cywgZG9jKTsKLSAgICAgICAgbWF0Y2hFeGFjdFRhZ05hbWVzLmNhbGwodGhpcywgZG9jKTsKLSAg
ICAgICAgbWF0Y2hFeGFjdEF0dHJpYnV0ZU5hbWVzLmNhbGwodGhpcywgZG9jKTsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBtYXRjaEV4YWN0SWQoZG9jKQotICAgIHsKLSAgICAgICAgY29uc3QgcmVz
dWx0ID0gZG9jLl9fcHJvdG9fXy5nZXRFbGVtZW50QnlJZC5jYWxsKGRvYywgd2hpdGVzcGFjZVRy
aW1tZWRRdWVyeSk7Ci0gICAgICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0
LCAocmVzdWx0ID8gMSA6IDApLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMgfSk7Ci0gICAgfQot
Ci0gICAgZnVuY3Rpb24gbWF0Y2hFeGFjdENsYXNzTmFtZXMoZG9jKQotICAgIHsKLSAgICAgICAg
Y29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lLmNhbGwo
ZG9jLCB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5KTsKLSAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMu
Y2FsbCh0aGlzLCByZXN1bHQsIHJlc3VsdC5sZW5ndGgsIHJlc3VsdC5pdGVtKTsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBtYXRjaEV4YWN0VGFnTmFtZXMoZG9jKQotICAgIHsKLSAgICAgICAgaWYg
KCF0YWdOYW1lUXVlcnkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNvbnN0IHJlc3Vs
dCA9IGRvYy5fX3Byb3RvX18uZ2V0RWxlbWVudHNCeVRhZ05hbWUuY2FsbChkb2MsIHRhZ05hbWVR
dWVyeSk7Ci0gICAgICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1
bHQubGVuZ3RoLCByZXN1bHQuaXRlbSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbWF0Y2hFeGFj
dEF0dHJpYnV0ZU5hbWVzKGRvYykKLSAgICB7Ci0gICAgICAgIGlmICghYXR0cmlidXRlTmFtZVF1
ZXJ5KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19w
cm90b19fLnF1ZXJ5U2VsZWN0b3JBbGwuY2FsbChkb2MsICJbIiArIGF0dHJpYnV0ZU5hbWVRdWVy
eSArICJdIik7Ci0gICAgICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCBy
ZXN1bHQubGVuZ3RoLCByZXN1bHQuaXRlbSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbWF0Y2hQ
YXJ0aWFsVGFnTmFtZXMoZG9jKQotICAgIHsKLSAgICAgICAgaWYgKCF0YWdOYW1lUXVlcnkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18u
ZXZhbHVhdGUuY2FsbChkb2MsICIvLypbY29udGFpbnMobmFtZSgpLCAnIiArIGVzY2FwZWRUYWdO
YW1lUXVlcnkgKyAiJyldIiwgZG9jLCBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05B
UFNIT1RfVFlQRSk7Ci0gICAgICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0
LCByZXN1bHQuc25hcHNob3RMZW5ndGgsIHJlc3VsdC5zbmFwc2hvdEl0ZW0pOwotICAgIH0KLQot
ICAgIGZ1bmN0aW9uIG1hdGNoU3RhcnRPZlRhZ05hbWVzKGRvYykKLSAgICB7Ci0gICAgICAgIGlm
ICghdGFnTmFtZVF1ZXJ5KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjb25zdCByZXN1
bHQgPSBkb2MuX19wcm90b19fLmV2YWx1YXRlLmNhbGwoZG9jLCAiLy8qW3N0YXJ0cy13aXRoKG5h
bWUoKSwgJyIgKyBlc2NhcGVkVGFnTmFtZVF1ZXJ5ICsgIicpXSIsIGRvYywgbnVsbCwgWFBhdGhS
ZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUpOwotICAgICAgICBhZGROb2Rlc1RvUmVz
dWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0LnNuYXBzaG90TGVuZ3RoLCByZXN1bHQuc25h
cHNob3RJdGVtKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBtYXRjaFBhcnRpYWxUYWdOYW1lc0Fu
ZEF0dHJpYnV0ZVZhbHVlcyhkb2MpCi0gICAgewotICAgICAgICBpZiAoIXRhZ05hbWVRdWVyeSkg
ewotICAgICAgICAgICAgbWF0Y2hQYXJ0aWFsQXR0cmlidXRlVmFsdWVzLmNhbGwodGhpcywgZG9j
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IHJlc3Vs
dCA9IGRvYy5fX3Byb3RvX18uZXZhbHVhdGUuY2FsbChkb2MsICIvLypbY29udGFpbnMobmFtZSgp
LCAnIiArIGVzY2FwZWRUYWdOYW1lUXVlcnkgKyAiJykgb3IgY29udGFpbnMoQCosICciICsgZXNj
YXBlZFF1ZXJ5ICsgIicpXSIsIGRvYywgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NO
QVBTSE9UX1RZUEUpOwotICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3Vs
dCwgcmVzdWx0LnNuYXBzaG90TGVuZ3RoLCByZXN1bHQuc25hcHNob3RJdGVtKTsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBtYXRjaFBhcnRpYWxBdHRyaWJ1dGVWYWx1ZXMoZG9jKQotICAgIHsKLSAg
ICAgICAgY29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5ldmFsdWF0ZS5jYWxsKGRvYywgIi8v
Kltjb250YWlucyhAKiwgJyIgKyBlc2NhcGVkUXVlcnkgKyAiJyldIiwgZG9jLCBudWxsLCBYUGF0
aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSk7Ci0gICAgICAgIGFkZE5vZGVzVG9S
ZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQuc25hcHNob3RMZW5ndGgsIHJlc3VsdC5z
bmFwc2hvdEl0ZW0pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIG1hdGNoU3R5bGVTZWxlY3Rvcihk
b2MpCi0gICAgewotICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLnF1ZXJ5U2Vs
ZWN0b3JBbGwuY2FsbChkb2MsIHdoaXRlc3BhY2VUcmltbWVkUXVlcnkpOwotICAgICAgICBhZGRO
b2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0Lmxlbmd0aCwgcmVzdWx0Lml0
ZW0pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIG1hdGNoUGxhaW5UZXh0KGRvYykKLSAgICB7Ci0g
ICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18uZXZhbHVhdGUuY2FsbChkb2MsICIv
L3RleHQoKVtjb250YWlucyguLCAnIiArIGVzY2FwZWRRdWVyeSArICInKV0gfCAvL2NvbW1lbnQo
KVtjb250YWlucyguLCAnIiArIGVzY2FwZWRRdWVyeSArICInKV0iLCBkb2MsIG51bGwsIFhQYXRo
UmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKTsKLSAgICAgICAgYWRkTm9kZXNUb1Jl
c3VsdHMuY2FsbCh0aGlzLCByZXN1bHQsIHJlc3VsdC5zbmFwc2hvdExlbmd0aCwgcmVzdWx0LnNu
YXBzaG90SXRlbSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbWF0Y2hYUGF0aFF1ZXJ5KGRvYykK
LSAgICB7Ci0gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18uZXZhbHVhdGUuY2Fs
bChkb2MsIHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIGRvYywgbnVsbCwgWFBhdGhSZXN1bHQuT1JE
RVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUpOwotICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxs
KHRoaXMsIHJlc3VsdCwgcmVzdWx0LnNuYXBzaG90TGVuZ3RoLCByZXN1bHQuc25hcHNob3RJdGVt
KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBmaW5pc2hlZFNlYXJjaGluZygpCi0gICAgewotICAg
ICAgICAvLyBSZW1vdmUgdGhlIHNlYXJjaFJlc3VsdHNQcm9wZXJ0eSBub3cgdGhhdCB0aGUgc2Vh
cmNoIGlzIGZpbmlzaGVkLgotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IEluamVjdGVkU2Ny
aXB0Ll9zZWFyY2hSZXN1bHRzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgZGVsZXRlIEluamVj
dGVkU2NyaXB0Ll9zZWFyY2hSZXN1bHRzW2ldW3NlYXJjaFJlc3VsdHNQcm9wZXJ0eV07Ci0gICAg
fQotCi0gICAgY29uc3QgbWFpbkZyYW1lRG9jdW1lbnQgPSBpbnNwZWN0ZWRXaW5kb3cuZG9jdW1l
bnQ7Ci0gICAgY29uc3Qgc2VhcmNoRG9jdW1lbnRzID0gW21haW5GcmFtZURvY3VtZW50XTsKLSAg
ICB2YXIgc2VhcmNoRnVuY3Rpb25zOwotICAgIGlmICh0YWdOYW1lUXVlcnkgJiYgc3RhcnRUYWdG
b3VuZCAmJiBlbmRUYWdGb3VuZCkKLSAgICAgICAgc2VhcmNoRnVuY3Rpb25zID0gW21hdGNoRXhh
Y3RUYWdOYW1lcywgbWF0Y2hQbGFpblRleHRdOwotICAgIGVsc2UgaWYgKHRhZ05hbWVRdWVyeSAm
JiBzdGFydFRhZ0ZvdW5kKQotICAgICAgICBzZWFyY2hGdW5jdGlvbnMgPSBbbWF0Y2hTdGFydE9m
VGFnTmFtZXMsIG1hdGNoUGxhaW5UZXh0XTsKLSAgICBlbHNlIGlmICh0YWdOYW1lUXVlcnkgJiYg
ZW5kVGFnRm91bmQpIHsKLSAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBoYXZlIGEgbWF0Y2hF
bmRPZlRhZ05hbWVzIHNlYXJjaCBmdW5jdGlvbiBpZiBlbmRUYWdGb3VuZCBpcyB0cnVlIGJ1dCBu
b3Qgc3RhcnRUYWdGb3VuZC4KLSAgICAgICAgLy8gVGhpcyByZXF1aXJlcyBlbmRzLXdpdGgoKSBz
dXBwb3J0IGluIFhQYXRoLCBXZWJLaXQgb25seSBzdXBwb3J0cyBzdGFydHMtd2l0aCgpIGFuZCBj
b250YWlucygpLgotICAgICAgICBzZWFyY2hGdW5jdGlvbnMgPSBbbWF0Y2hQYXJ0aWFsVGFnTmFt
ZXMsIG1hdGNoUGxhaW5UZXh0XTsKLSAgICB9IGVsc2UgaWYgKHdoaXRlc3BhY2VUcmltbWVkUXVl
cnkgPT09ICIvLyoiIHx8IHdoaXRlc3BhY2VUcmltbWVkUXVlcnkgPT09ICIqIikgewotICAgICAg
ICAvLyBUaGVzZSBxdWVyaWVzIHdpbGwgbWF0Y2ggZXZlcnkgbm9kZS4gTWF0Y2hpbmcgZXZlcnl0
aGluZyBpc24ndCB1c2VmdWwgYW5kIGNhbiBiZSBzbG93IGZvciBsYXJnZSBwYWdlcywKLSAgICAg
ICAgLy8gc28gbGltaXQgdGhlIHNlYXJjaCBmdW5jdGlvbnMgbGlzdCB0byBwbGFpbiB0ZXh0IGFu
ZCBhdHRyaWJ1dGUgbWF0Y2hpbmcuCi0gICAgICAgIHNlYXJjaEZ1bmN0aW9ucyA9IFttYXRjaFBh
cnRpYWxBdHRyaWJ1dGVWYWx1ZXMsIG1hdGNoUGxhaW5UZXh0XTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgc2VhcmNoRnVuY3Rpb25zID0gW21hdGNoRXhhY3RJdGVtcywgbWF0Y2hTdHlsZVNlbGVjdG9y
LCBtYXRjaFBhcnRpYWxUYWdOYW1lc0FuZEF0dHJpYnV0ZVZhbHVlcywgbWF0Y2hQbGFpblRleHQs
IG1hdGNoWFBhdGhRdWVyeV07Ci0KLSAgICAvLyBGaW5kIGFsbCBmcmFtZXMsIGlmcmFtZXMgYW5k
IG9iamVjdCBlbGVtZW50cyB0byBzZWFyY2ggdGhlaXIgZG9jdW1lbnRzLgotICAgIGNvbnN0IHN1
YmRvY3VtZW50UmVzdWx0ID0gbWFpbkZyYW1lRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiaWZy
YW1lLCBmcmFtZSwgb2JqZWN0Iik7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YmRvY3Vt
ZW50UmVzdWx0Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBlbGVtZW50ID0gc3ViZG9jdW1l
bnRSZXN1bHQuaXRlbShpKTsKLSAgICAgICAgaWYgKGVsZW1lbnQuY29udGVudERvY3VtZW50KQot
ICAgICAgICAgICAgc2VhcmNoRG9jdW1lbnRzLnB1c2goZWxlbWVudC5jb250ZW50RG9jdW1lbnQp
OwotICAgIH0KLQotICAgIGNvbnN0IHBhbmVsID0gSW5qZWN0ZWRTY3JpcHQ7Ci0gICAgdmFyIGRv
Y3VtZW50SW5kZXggPSAwOwotICAgIHZhciBzZWFyY2hGdW5jdGlvbkluZGV4ID0gMDsKLSAgICB2
YXIgY2h1bmtJbnRlcnZhbElkZW50aWZpZXIgPSBudWxsOwotCi0gICAgLy8gU3BsaXQgdXAgdGhl
IHdvcmsgaW50byBjaHVua3Mgc28gd2UgZG9uJ3QgYmxvY2sgdGhlIFVJIHRocmVhZCB3aGlsZSBw
cm9jZXNzaW5nLgotCi0gICAgZnVuY3Rpb24gcHJvY2Vzc0NodW5rKCkKLSAgICB7Ci0gICAgICAg
IHZhciBzZWFyY2hEb2N1bWVudCA9IHNlYXJjaERvY3VtZW50c1tkb2N1bWVudEluZGV4XTsKLSAg
ICAgICAgdmFyIHNlYXJjaEZ1bmN0aW9uID0gc2VhcmNoRnVuY3Rpb25zW3NlYXJjaEZ1bmN0aW9u
SW5kZXhdOwotCi0gICAgICAgIGlmICgrK3NlYXJjaEZ1bmN0aW9uSW5kZXggPiBzZWFyY2hGdW5j
dGlvbnMubGVuZ3RoKSB7Ci0gICAgICAgICAgICBzZWFyY2hGdW5jdGlvbiA9IHNlYXJjaEZ1bmN0
aW9uc1swXTsKLSAgICAgICAgICAgIHNlYXJjaEZ1bmN0aW9uSW5kZXggPSAwOwotCi0gICAgICAg
ICAgICBpZiAoKytkb2N1bWVudEluZGV4ID4gc2VhcmNoRG9jdW1lbnRzLmxlbmd0aCkgewotICAg
ICAgICAgICAgICAgIGlmIChwYW5lbC5fY3VycmVudFNlYXJjaENodW5rSW50ZXJ2YWxJZGVudGlm
aWVyID09PSBjaHVua0ludGVydmFsSWRlbnRpZmllcikKLSAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIHBhbmVsLl9jdXJyZW50U2VhcmNoQ2h1bmtJbnRlcnZhbElkZW50aWZpZXI7Ci0gICAgICAg
ICAgICAgICAgY2xlYXJJbnRlcnZhbChjaHVua0ludGVydmFsSWRlbnRpZmllcik7Ci0gICAgICAg
ICAgICAgICAgZmluaXNoZWRTZWFyY2hpbmcuY2FsbChwYW5lbCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzZWFyY2hEb2N1bWVu
dCA9IHNlYXJjaERvY3VtZW50c1tkb2N1bWVudEluZGV4XTsKLSAgICAgICAgfQotCi0gICAgICAg
IHRyeSB7Ci0gICAgICAgICAgICBzZWFyY2hGdW5jdGlvbi5jYWxsKHBhbmVsLCBzZWFyY2hEb2N1
bWVudCk7Ci0gICAgICAgIH0gY2F0Y2goZXJyKSB7Ci0gICAgICAgICAgICAvLyBpZ25vcmUgYW55
IGV4Y2VwdGlvbnMuIHRoZSBxdWVyeSBtaWdodCBiZSBtYWxmb3JtZWQsIGJ1dCB3ZSBhbGxvdyB0
aGF0LgotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChy
dW5TeW5jaHJvbm91c2x5KQotICAgICAgICB3aGlsZSAocHJvY2Vzc0NodW5rKCkpIHt9Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIHByb2Nlc3NDaHVuaygpOwotICAgICAgICBjaHVua0ludGVydmFsSWRl
bnRpZmllciA9IHNldEludGVydmFsKHByb2Nlc3NDaHVuaywgMjUpOwotICAgICAgICBJbmplY3Rl
ZFNjcmlwdC5fY3VycmVudFNlYXJjaENodW5rSW50ZXJ2YWxJZGVudGlmaWVyID0gY2h1bmtJbnRl
cnZhbElkZW50aWZpZXI7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1JbmplY3RlZFNj
cmlwdC5zZWFyY2hDYW5jZWxlZCA9IGZ1bmN0aW9uKCkKLXsKLSAgICBpZiAoSW5qZWN0ZWRTY3Jp
cHQuX3NlYXJjaFJlc3VsdHMpIHsKLSAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0c1Byb3BlcnR5
ID0gSW5qZWN0ZWRTY3JpcHQuX2luY2x1ZGVkSW5TZWFyY2hSZXN1bHRzUHJvcGVydHlOYW1lOwot
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5fc2VhcmNoUmVzdWx0c1tpXTsKLQot
ICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzZWFyY2hSZXN1bHRzUHJvcGVydHkgc2luY2UgdGhl
cmUgbWlnaHQgYmUgYW4gdW5maW5pc2hlZCBzZWFyY2guCi0gICAgICAgICAgICBkZWxldGUgbm9k
ZVtzZWFyY2hSZXN1bHRzUHJvcGVydHldOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKElu
amVjdGVkU2NyaXB0Ll9jdXJyZW50U2VhcmNoQ2h1bmtJbnRlcnZhbElkZW50aWZpZXIpIHsKLSAg
ICAgICAgY2xlYXJJbnRlcnZhbChJbmplY3RlZFNjcmlwdC5fY3VycmVudFNlYXJjaENodW5rSW50
ZXJ2YWxJZGVudGlmaWVyKTsKLSAgICAgICAgZGVsZXRlIEluamVjdGVkU2NyaXB0Ll9jdXJyZW50
U2VhcmNoQ2h1bmtJbnRlcnZhbElkZW50aWZpZXI7Ci0gICAgfQotICAgIEluamVjdGVkU2NyaXB0
Ll9zZWFyY2hSZXN1bHRzID0gW107Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIEluamVjdGVkU2Ny
aXB0Lm9wZW5Jbkluc3BlY3RlZFdpbmRvdyA9IGZ1bmN0aW9uKHVybCkKIHsKICAgICAvLyBEb24n
dCBjYWxsIHdpbmRvdy5vcGVuIG9uIHdyYXBwZXIgLSBwb3B1cCBibG9ja2VyIG11dGVzIGl0LgpA
QCAtMTAyOCwyOCArNzg1LDUgQEAgSW5qZWN0ZWRTY3JpcHQuX2NsYXNzTmFtZSA9IGZ1bmN0aW9u
KG9iaikKICAgICB9CiB9CiAKLUluamVjdGVkU2NyaXB0Ll9lc2NhcGVDaGFyYWN0ZXJzID0gZnVu
Y3Rpb24oc3RyLCBjaGFycykKLXsKLSAgICB2YXIgZm91bmRDaGFyID0gZmFsc2U7Ci0gICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoc3RyLmlu
ZGV4T2YoY2hhcnMuY2hhckF0KGkpKSAhPT0gLTEpIHsKLSAgICAgICAgICAgIGZvdW5kQ2hhciA9
IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgh
Zm91bmRDaGFyKQotICAgICAgICByZXR1cm4gc3RyOwotCi0gICAgdmFyIHJlc3VsdCA9ICIiOwot
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChj
aGFycy5pbmRleE9mKHN0ci5jaGFyQXQoaSkpICE9PSAtMSkKLSAgICAgICAgICAgIHJlc3VsdCAr
PSAiXFwiOwotICAgICAgICByZXN1bHQgKz0gc3RyLmNoYXJBdChpKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCiByZXR1cm4gSW5qZWN0ZWRTY3JpcHQ7CiB9KTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qcyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qcwppbmRl
eCAyNTU4MjY3Li5jMzg4MjEzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0luamVjdGVkU2NyaXB0QWNjZXNzLmpzCkBAIC03MSwyOSArNzEsMTggQEAgSW5qZWN0ZWRT
Y3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyID0gZnVuY3Rpb24obWV0aG9kTmFtZSwgYXN5bmMp
CiAvLyAtIE1ha2Ugc3VyZSBsYXN0IHBhcmFtZXRlciBvZiBhbGwgdGhlIEluamVjdGVkU3JpcHRB
Y2Nlc3MuKiBjYWxscyBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uLgogLy8gV2Uga2VlcCB0aGVzZSBz
b3J0ZWQuCiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoImFkZEluc3BlY3Rl
ZE5vZGUiKTsKLUluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiYWRkU3R5bGVT
ZWxlY3RvciIpOwotSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJhcHBseVN0
eWxlUnVsZVRleHQiKTsKLUluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiYXBw
bHlTdHlsZVRleHQiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiY2xl
YXJDb25zb2xlTWVzc2FnZXMiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxl
cigiZXZhbHVhdGUiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiZXZh
bHVhdGVJbkNhbGxGcmFtZSIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVy
KCJnZXRDb21wbGV0aW9ucyIpOwotSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVy
KCJnZXRDb21wdXRlZFN0eWxlIik7Ci1JbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRs
ZXIoImdldElubGluZVN0eWxlIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRs
ZXIoImdldE5vZGVQcm9wZXJ0eVZhbHVlIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFs
bEhhbmRsZXIoImdldFByb3BlcnRpZXMiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxs
SGFuZGxlcigiZ2V0UHJvdG90eXBlcyIpOwotSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxI
YW5kbGVyKCJnZXRTdHlsZXMiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxl
cigib3BlbkluSW5zcGVjdGVkV2luZG93Iik7Ci1JbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFs
bEhhbmRsZXIoInBlcmZvcm1TZWFyY2giKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxs
SGFuZGxlcigicHVzaE5vZGVUb0Zyb250ZW5kIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5z
dGFsbEhhbmRsZXIoIm5vZGVCeVBhdGgiKTsKLUluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxs
SGFuZGxlcigic2VhcmNoQ2FuY2VsZWQiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxs
SGFuZGxlcigic2V0T3V0ZXJIVE1MIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhh
bmRsZXIoInNldFByb3BlcnR5VmFsdWUiKTsKLUluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxs
SGFuZGxlcigic2V0U3R5bGVQcm9wZXJ0eSIpOwotSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3Rh
bGxIYW5kbGVyKCJzZXRTdHlsZVRleHQiKTsKLUluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxs
SGFuZGxlcigidG9nZ2xlU3R5bGVFbmFibGVkIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5z
dGFsbEhhbmRsZXIoImV2YWx1YXRlT25TZWxmIik7CiAKIC8vIFNvbWUgbWV0aG9kcyBjYW4ndCBy
dW4gc3luY2hyb25vdXNseSBldmVuIG9uIHRoZSBpbmplY3RlZCBzY3JpcHQgc2lkZSAoc3VjaCBh
cyBEQiB0cmFuc2FjdGlvbnMpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0luc3BlY3RvckJhY2tlbmRTdHViLmpzCmluZGV4IDQ2NzBhZjEuLjdkOGM0ZDUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qcwor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMK
QEAgLTI1OSw2ICsyNTksMTQgQEAgV2ViSW5zcGVjdG9yLkluc3BlY3RvckJhY2tlbmRTdHViLnBy
b3RvdHlwZSA9IHsKIAogICAgIHJlbW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkOiBmdW5j
dGlvbigpCiAgICAgeworICAgIH0sCisKKyAgICBwZXJmb3JtU2VhcmNoOiBmdW5jdGlvbigpCisg
ICAgeworICAgIH0sCisKKyAgICBzZWFyY2hDYW5jZWxlZDogZnVuY3Rpb24oKQorICAgIHsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDQxYjM2MTguLjVjMDU3MzIgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE0IEBACisyMDEwLTA2LTEwICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IFBvcnQgcGVyZm9ybVNlYXJjaCBmcm9tIEluamVjdGVkU2NyaXB0
IHRvIEluc3BlY3RvckRPTUFnZW50LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00MDQyMgorCisgICAgICAgICogc3JjL2pzL0luc3BlY3RvckNvbnRy
b2xsZXJJbXBsLmpzOgorICAgICAgICAoZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwpOgor
CiAyMDEwLTA2LTA3ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9J
bnNwZWN0b3JDb250cm9sbGVySW1wbC5qcwppbmRleCA4NmY4ODVhLi5mNzYyNTViIDEwMDY0NAot
LS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMKQEAg
LTYxLDYgKzYxLDcgQEAgZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwgPSBmdW5jdGlvbigp
CiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygiZ2V0UmVzb3Vy
Y2VDb250ZW50Iik7CiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRl
XygiaGlnaGxpZ2h0RE9NTm9kZSIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xs
ZXJEZWxlZ2F0ZV8oImhpZGVET01Ob2RlSGlnaGxpZ2h0Iik7CisgICAgdGhpcy5pbnN0YWxsSW5z
cGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygicGVyZm9ybVNlYXJjaCIpOwogICAgIHRoaXMuaW5z
dGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInJlbGVhc2VXcmFwcGVyT2JqZWN0R3Jv
dXAiKTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJyZW1v
dmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3Rv
ckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInJlbG9hZFBhZ2UiKTsKQEAgLTY4LDYgKzY5LDcgQEAgZGV2
dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5pbnN0YWxs
SW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygicmVtb3ZlRE9NU3RvcmFnZUl0ZW0iKTsKICAg
ICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJyZW1vdmVOb2RlIik7
CiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygic2F2ZUZyb250
ZW5kU2V0dGluZ3MiKTsKKyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdh
dGVfKCJzZWFyY2hDYW5jZWxlZCIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xs
ZXJEZWxlZ2F0ZV8oInNldEF0dHJpYnV0ZSIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNv
bnRyb2xsZXJEZWxlZ2F0ZV8oInNldERPTVN0b3JhZ2VJdGVtIik7CiAgICAgdGhpcy5pbnN0YWxs
SW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygic2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2UiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58408</attachid>
            <date>2010-06-10 13:47:03 -0700</date>
            <delta_ts>2010-06-10 23:18:21 -0700</delta_ts>
            <desc>[PATCH] Same + missing import for Chromium.</desc>
            <filename>perform_search</filename>
            <type>text/plain</type>
            <size>42485</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2ZGQzYWMwLi45OTljYTM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDYt
MTAgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogUG9ydCBw
ZXJmb3JtU2VhcmNoIGZyb20gSW5qZWN0ZWRTY3JpcHQgdG8gSW5zcGVjdG9yRE9NQWdlbnQuCisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNDIyCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvZWxlbWVudHMtcGFuZWwtc2VhcmNoLmh0bWw6CisKIDIwMTAt
MDYtMDggIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdkLiBVcGRhdGVkIHRlc3RfZXhwZWN0YXRpb25zLnR4dCB0byBmb2xsb3cgcjYwODIyCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtcGFuZWwtc2VhcmNoLmh0
bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtcGFuZWwtc2VhcmNoLmh0bWwKaW5k
ZXggNGYxNjJkYi4uZDBkNDI4MyAxMDA3NTUKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Vs
ZW1lbnRzLXBhbmVsLXNlYXJjaC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9lbGVt
ZW50cy1wYW5lbC1zZWFyY2guaHRtbApAQCAtMzEsNyArMzEsNiBAQCBmdW5jdGlvbiBmcm9udGVu
ZF9wZXJmb3JtU2VhcmNoKHRlc3RDb250cm9sbGVyKQogCiAgICAgV2ViSW5zcGVjdG9yLmFkZE5v
ZGVzVG9TZWFyY2hSZXN1bHQgPSBmdW5jdGlvbihub2RlSWRzKQogICAgIHsKLSAgICAgICAgdmFy
IG5vZGVJZHMgPSBub2RlSWRzLnNwbGl0KCIsIik7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbm9kZUlkcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgdmFyIG5vZGUgPSBXZWJJbnNw
ZWN0b3IuZG9tQWdlbnQubm9kZUZvcklkKG5vZGVJZHNbaV0pOwogICAgICAgICAgICAgaWYgKG5v
ZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKQpAQCAtNDEsMTkgKzQwLDE5IEBAIGZ1bmN0
aW9uIGZyb250ZW5kX3BlcmZvcm1TZWFyY2godGVzdENvbnRyb2xsZXIpCiAgICAgICAgIH0KICAg
ICB9CiAgICAgLy8gUGxhaW4gdGV4dC4KLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZh
dWx0KCkucGVyZm9ybVNlYXJjaCgiRm9vIiArICJCYXIiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsK
KyAgICBJbnNwZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goIkZvbyIgKyAiQmFyIiwgdHJ1ZSk7
CiAgICAgLy8gUGFydGlhbCB0ZXh0LgotICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdldERlZmF1
bHQoKS5wZXJmb3JtU2VhcmNoKCJvbyIgKyAiQmEiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsKKyAg
ICBJbnNwZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goIm9vIiArICJCYSIsIHRydWUpOwogICAg
IC8vIFN0YXJ0IHRhZy4KLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZhdWx0KCkucGVy
Zm9ybVNlYXJjaCgiPGlucHUiICsgInQiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsKKyAgICBJbnNw
ZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goIjxpbnB1IiArICJ0IiwgdHJ1ZSk7CiAgICAgLy8g
UGFydGlhbCB0YWcuCi0gICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0RGVmYXVsdCgpLnBlcmZv
cm1TZWFyY2goIm5wdSIgKyAidCIsIHRydWUsIGZ1bmN0aW9uKCkge30pOworICAgIEluc3BlY3Rv
ckJhY2tlbmQucGVyZm9ybVNlYXJjaCgibnB1IiArICJ0IiwgdHJ1ZSk7CiAgICAgLy8gRXhhY3Qg
YXR0cmlidXRlIG5hbWUuCi0gICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0RGVmYXVsdCgpLnBl
cmZvcm1TZWFyY2goInZhbHUiICsgImUiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsKKyAgICBJbnNw
ZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goInZhbHUiICsgImUiLCB0cnVlKTsKICAgICAvLyBF
eGFjdCBhdHRyaWJ1dGUgdmFsPD51ZS4KLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZh
dWx0KCkucGVyZm9ybVNlYXJjaCgiSW4iICsgInB1dFZhIiArICJsIiwgdHJ1ZSwgZnVuY3Rpb24o
KSB7fSk7CisgICAgSW5zcGVjdG9yQmFja2VuZC5wZXJmb3JtU2VhcmNoKCJJbiIgKyAicHV0VmEi
ICsgImwiLCB0cnVlKTsKICAgICAvLyBQYXJ0aWFsIGF0dHJpYnV0ZSB2YWw8PnVlLgotICAgIElu
amVjdGVkU2NyaXB0QWNjZXNzLmdldERlZmF1bHQoKS5wZXJmb3JtU2VhcmNoKCJuIiArICJwdXRW
YSIgKyAibCIsIHRydWUsIGZ1bmN0aW9uKCkge30pOworICAgIEluc3BlY3RvckJhY2tlbmQucGVy
Zm9ybVNlYXJjaCgibiIgKyAicHV0VmEiICsgImwiLCB0cnVlKTsKIAogICAgIHRlc3RDb250cm9s
bGVyLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoZnVuY3Rpb24oKSB7CiAgICAgICAgIHRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoc2VhcmNoUmVzdWx0cyk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDMwNDc4ZWEuLjA2YjE3OTMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDMgQEAKKzIwMTAtMDYtMTAgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2ViIEluc3BlY3RvcjogUG9ydCBwZXJmb3JtU2VhcmNoIGZyb20gSW5qZWN0ZWRTY3JpcHQgdG8g
SW5zcGVjdG9yRE9NQWdlbnQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQwNDIyCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRI
b3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6YWRkTm9kZXNU
b1NlYXJjaFJlc3VsdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6cGVyZm9ybVNlYXJjaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpzZWFyY2hDYW5jZWxlZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZC5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6On5JbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6c2VhcmNoQ2FuY2VsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6Om9uTWF0Y2hKb2JzVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OnJlcG9ydE5vZGVzQXNTZWFyY2hSZXN1bHRzKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGNoSm9iOjp+TWF0
Y2hKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TWF0Y2hKb2I6Ok1hdGNoSm9iKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1hdGNoSm9iOjphZGROb2Rlc1RvUmVzdWx0cyk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kOjphZGROb2Rlc1RvU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2U6OnVwZGF0ZVNjcmlwdE9i
amVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlLnNlYXJjaENhbmNl
bGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZS5wZXJm
b3JtU2VhcmNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlw
ZS5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0luamVjdGVkU2NyaXB0LmpzOgorICAgICAgICAoaW5qZWN0ZWRTY3JpcHRDb25zdHJ1Y3Rvcik6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qczoK
KwogMjAxMC0wNi0wOCAgVmFuZ2VsaXMgS29ra2V2aXMgIDx2YW5nZWxpc0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0SG9zdC5jcHAKaW5kZXggYzU4MDczZC4uNGMzYzdhZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCkBAIC0xMTAsMTIgKzExMCw2IEBAIGxv
bmcgSW5qZWN0ZWRTY3JpcHRIb3N0OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5vZGUs
IGJvb2wgd2l0aENoaWxkcmVuLCBiCiAgICAgcmV0dXJuIGlkOwogfQogCi12b2lkIEluamVjdGVk
U2NyaXB0SG9zdDo6YWRkTm9kZXNUb1NlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIG5vZGVJZHMp
Ci17Ci0gICAgaWYgKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCA9IGluc3BlY3RvckZyb250
ZW5kKCkpCi0gICAgICAgIGZyb250ZW5kLT5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KG5vZGVJZHMp
OwotfQotCiBsb25nIEluamVjdGVkU2NyaXB0SG9zdDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5k
KGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQg
PSBpbnNwZWN0b3JET01BZ2VudCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRIb3N0LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3Qu
aAppbmRleCBiZWZmYzlkLi42NmNmNDFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEhvc3QuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dEhvc3QuaApAQCAtNjksNyArNjksNiBAQCBwdWJsaWM6CiAgICAgTm9kZSogbm9kZUZvcklkKGxv
bmcgbm9kZUlkKTsKICAgICBsb25nIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9kZSwg
Ym9vbCB3aXRoQ2hpbGRyZW4sIGJvb2wgc2VsZWN0SW5VSSk7CiAKLSAgICB2b2lkIGFkZE5vZGVz
VG9TZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBub2RlSWRzKTsKICAgICBsb25nIHB1c2hOb2Rl
QnlQYXRoVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHBhdGgpOwogCiAjaWYgRU5BQkxFKERBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0Lmlk
bCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5pZGwKaW5kZXggOGIyNDE1
Ny4uNWE0Y2UxOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRI
b3N0LmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaWRsCkBA
IC0zOCw3ICszOCw2IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0
IG5vZGVGb3JJZChpbiBsb25nIG5vZGVJZCk7CiAgICAgICAgIFtDdXN0b21dIGludCBwdXNoTm9k
ZVBhdGhUb0Zyb250ZW5kKGluIERPTU9iamVjdCBub2RlLCBpbiBib29sZWFuIHdpdGhDaGlsZHJl
biwgaW4gYm9vbGVhbiBzZWxlY3RJblVJKTsKIAotICAgICAgICB2b2lkIGFkZE5vZGVzVG9TZWFy
Y2hSZXN1bHQoaW4gRE9NU3RyaW5nIG5vZGVJZHMpOwogICAgICAgICBsb25nIHB1c2hOb2RlQnlQ
YXRoVG9Gcm9udGVuZChpbiBET01TdHJpbmcgcGF0aCk7CiAKICNpZiBkZWZpbmVkKEVOQUJMRV9K
QVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcAppbmRleCAzNmY0MWI4Li44MTRlNWQyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcApAQCAtMzUxLDYgKzM1MSwxOCBAQCB2
b2lkIEluc3BlY3RvckJhY2tlbmQ6OmNoYW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9k
ZUlkLCBjb25zdCBBdG9taWNTdHJpbgogICAgICAgICBkb21BZ2VudC0+Y2hhbmdlVGFnTmFtZShj
YWxsSWQsIG5vZGVJZCwgdGFnTmFtZSwgZXhwYW5kZWQpOwogfQogCit2b2lkIEluc3BlY3RvckJh
Y2tlbmQ6OnBlcmZvcm1TZWFyY2goY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCBydW5TeW5jaHJv
bm91c2x5KQoreworICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0
b3JET01BZ2VudCgpKQorICAgICAgICBkb21BZ2VudC0+cGVyZm9ybVNlYXJjaChxdWVyeSwgcnVu
U3luY2hyb25vdXNseSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c2VhcmNoQ2FuY2Vs
ZWQoKQoreworICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JE
T01BZ2VudCgpKQorICAgICAgICBkb21BZ2VudC0+c2VhcmNoQ2FuY2VsZWQoKTsKK30KKwogdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBi
b29sIGF1dGhvck9ubHkpCiB7CiAgICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9
IGluc3BlY3RvckRPTUFnZW50KCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKaW5k
ZXggMGViOGU0Yy4uYzg4YzIzYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApA
QCAtMTE2LDYgKzExNiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvcHlOb2RlKGxvbmcgbm9kZUlk
KTsKICAgICB2b2lkIHJlbW92ZU5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKICAgICB2
b2lkIGNoYW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25zdCBBdG9taWNT
dHJpbmcmIHRhZ05hbWUsIGJvb2wgZXhwYW5kZWQpOworICAgIHZvaWQgcGVyZm9ybVNlYXJjaChj
b25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sIHJ1blN5bmNocm9ub3VzbHkpOworICAgIHZvaWQgc2Vh
cmNoQ2FuY2VsZWQoKTsKIAogICAgIHZvaWQgZ2V0U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5v
ZGVJZCwgYm9vbCBhdXRoT25seSk7CiAgICAgdm9pZCBnZXRBbGxTdHlsZXMobG9uZyBjYWxsSWQp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAppbmRleCBlOGNmZGI5Li5lZThh
NTg1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbApAQCAtOTEsNiArOTEs
OSBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIHZvaWQgY29weU5vZGUoaW4gbG9uZyBub2RlSWQp
OwogICAgICAgICB2b2lkIHJlbW92ZU5vZGUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlk
KTsKICAgICAgICAgdm9pZCBjaGFuZ2VUYWdOYW1lKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIG5v
ZGVJZCwgaW4gRE9NU3RyaW5nIG5ld1RhZ05hbWUsIGluIGJvb2xlYW4gZXhwYW5kZWQpOworICAg
ICAgICB2b2lkIHBlcmZvcm1TZWFyY2goaW4gRE9NU3RyaW5nIHF1ZXJ5LCBpbiBib29sZWFuIHJ1
blN5bmNocm9ub3VzbHkpOworICAgICAgICB2b2lkIHNlYXJjaENhbmNlbGVkKCk7CisKICAgICAg
ICAgdm9pZCBoaWdobGlnaHRET01Ob2RlKGluIGxvbmcgbm9kZUlkKTsKICAgICAgICAgdm9pZCBo
aWRlRE9NTm9kZUhpZ2hsaWdodCgpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAKaW5kZXggMzM4ZGMzMy4uMzQwN2UyNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmNwcApAQCAtNjUsMTggKzY1LDEyMSBAQAogI2luY2x1ZGUgIlN0eWxlU2hlZXRM
aXN0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogCisjaWYgRU5BQkxFKFhQQVRIKQorI2luY2x1ZGUg
IlhQYXRoUmVzdWx0LmgiCisjZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIHsKKworY2xhc3MgTWF0Y2hFeGFjdElkSm9iIDog
cHVibGljIFdlYkNvcmU6Ok1hdGNoSm9iIHsKK3B1YmxpYzoKKyAgICBNYXRjaEV4YWN0SWRKb2Io
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA6IFdlYkNvcmU6Ok1hdGNo
Sm9iKGRvY3VtZW50LCBxdWVyeSkgeyB9CisgICAgdmlydHVhbCB+TWF0Y2hFeGFjdElkSm9iKCkg
eyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbWF0Y2goTGlzdEhhc2hTZXQ8Tm9k
ZSo+JiByZXN1bHRDb2xsZWN0b3IpCisgICAgeworICAgICAgICBpZiAobV9xdWVyeS5pc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IG1f
ZG9jdW1lbnQtPmdldEVsZW1lbnRCeUlkKG1fcXVlcnkpOworICAgICAgICBpZiAoZWxlbWVudCkK
KyAgICAgICAgICAgIHJlc3VsdENvbGxlY3Rvci5hZGQoZWxlbWVudCk7CisgICAgfQorfTsKKwor
Y2xhc3MgTWF0Y2hFeGFjdENsYXNzTmFtZXNKb2IgOiBwdWJsaWMgV2ViQ29yZTo6TWF0Y2hKb2Ig
eworcHVibGljOgorICAgIE1hdGNoRXhhY3RDbGFzc05hbWVzSm9iKERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgOiBXZWJDb3JlOjpNYXRjaEpvYihkb2N1bWVudCwgcXVl
cnkpIHsgfQorICAgIHZpcnR1YWwgfk1hdGNoRXhhY3RDbGFzc05hbWVzSm9iKCkgeyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgbWF0Y2goTGlzdEhhc2hTZXQ8Tm9kZSo+JiByZXN1bHRDb2xsZWN0b3Ip
CisgICAgeworICAgICAgICBpZiAoIW1fcXVlcnkuaXNFbXB0eSgpKQorICAgICAgICAgICAgYWRk
Tm9kZXNUb1Jlc3VsdHMobV9kb2N1bWVudC0+Z2V0RWxlbWVudHNCeUNsYXNzTmFtZShtX3F1ZXJ5
KSwgcmVzdWx0Q29sbGVjdG9yKTsKKyAgICB9Cit9OworCitjbGFzcyBNYXRjaEV4YWN0VGFnTmFt
ZXNKb2IgOiBwdWJsaWMgV2ViQ29yZTo6TWF0Y2hKb2IgeworcHVibGljOgorICAgIE1hdGNoRXhh
Y3RUYWdOYW1lc0pvYihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIDog
V2ViQ29yZTo6TWF0Y2hKb2IoZG9jdW1lbnQsIHF1ZXJ5KSB7IH0KKyAgICB2aXJ0dWFsIH5NYXRj
aEV4YWN0VGFnTmFtZXNKb2IoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBtYXRjaChMaXN0SGFz
aFNldDxOb2RlKj4mIHJlc3VsdENvbGxlY3RvcikKKyAgICB7CisgICAgICAgIGlmICghbV9xdWVy
eS5pc0VtcHR5KCkpCisgICAgICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cyhtX2RvY3VtZW50LT5n
ZXRFbGVtZW50c0J5TmFtZShtX3F1ZXJ5KSwgcmVzdWx0Q29sbGVjdG9yKTsKKyAgICB9Cit9Owor
CitjbGFzcyBNYXRjaFF1ZXJ5U2VsZWN0b3JBbGxKb2IgOiBwdWJsaWMgV2ViQ29yZTo6TWF0Y2hK
b2IgeworcHVibGljOgorICAgIE1hdGNoUXVlcnlTZWxlY3RvckFsbEpvYihEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIDogV2ViQ29yZTo6TWF0Y2hKb2IoZG9jdW1lbnQs
IHF1ZXJ5KSB7IH0KKyAgICB2aXJ0dWFsIH5NYXRjaFF1ZXJ5U2VsZWN0b3JBbGxKb2IoKSB7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBtYXRjaChMaXN0SGFzaFNldDxOb2RlKj4mIHJlc3VsdENvbGxl
Y3RvcikKKyAgICB7CisgICAgICAgIGlmIChtX3F1ZXJ5LmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgUmVmUHRy
PE5vZGVMaXN0PiBsaXN0ID0gbV9kb2N1bWVudC0+cXVlcnlTZWxlY3RvckFsbChtX3F1ZXJ5LCBl
Yyk7CisgICAgICAgIGlmICghZWMpCisgICAgICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cyhsaXN0
LCByZXN1bHRDb2xsZWN0b3IpOworICAgIH0KK307CisKK2NsYXNzIE1hdGNoWFBhdGhKb2IgOiBw
dWJsaWMgV2ViQ29yZTo6TWF0Y2hKb2IgeworcHVibGljOgorICAgIE1hdGNoWFBhdGhKb2IoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA6IFdlYkNvcmU6Ok1hdGNoSm9i
KGRvY3VtZW50LCBxdWVyeSkgeyB9CisgICAgdmlydHVhbCB+TWF0Y2hYUGF0aEpvYigpIHsgfQor
CisgICAgdmlydHVhbCB2b2lkIG1hdGNoKExpc3RIYXNoU2V0PE5vZGUqPiYgcmVzdWx0Q29sbGVj
dG9yKQorICAgIHsKKyNpZiBFTkFCTEUoWFBBVEgpCisgICAgICAgIGlmIChtX3F1ZXJ5LmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICAgICAgUmVmUHRyPFhQYXRoUmVzdWx0PiByZXN1bHQgPSBtX2RvY3VtZW50LT5ldmFs
dWF0ZShtX3F1ZXJ5LCBtX2RvY3VtZW50LmdldCgpLCAwLCBYUGF0aFJlc3VsdDo6T1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEUsIDAsIGVjKTsKKyAgICAgICAgaWYgKGVjIHx8ICFyZXN1bHQpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplID0gcmVzdWx0
LT5zbmFwc2hvdExlbmd0aChlYyk7CisgICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsg
IWVjICYmIGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSByZXN1bHQt
PnNuYXBzaG90SXRlbShpLCBlYyk7CisgICAgICAgICAgICBpZiAoIWVjKQorICAgICAgICAgICAg
ICAgIHJlc3VsdENvbGxlY3Rvci5hZGQobm9kZSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0K
K307CisKK2NsYXNzIE1hdGNoUGxhaW5UZXh0Sm9iIDogcHVibGljIE1hdGNoWFBhdGhKb2Igewor
cHVibGljOgorICAgIE1hdGNoUGxhaW5UZXh0Sm9iKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
U3RyaW5nJiBxdWVyeSkgOiBNYXRjaFhQYXRoSm9iKGRvY3VtZW50LCBxdWVyeSkKKyAgICB7Cisg
ICAgICAgIG1fcXVlcnkgPSAiLy90ZXh0KClbY29udGFpbnMoLiwgJyIgKyBtX3F1ZXJ5ICsgIicp
XSB8IC8vY29tbWVudCgpW2NvbnRhaW5zKC4sICciICsgbV9xdWVyeSArICInKV0iOworICAgIH0K
KyAgICB2aXJ0dWFsIH5NYXRjaFBsYWluVGV4dEpvYigpIHsgfQorfTsKKworfQorCiBJbnNwZWN0
b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQoSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3Jl
LCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAgICAgOiBFdmVudExpc3RlbmVyKEluc3Bl
Y3RvckRPTUFnZW50VHlwZSkKICAgICAsIG1fY3NzU3RvcmUoY3NzU3RvcmUpCiAgICAgLCBtX2Zy
b250ZW5kKGZyb250ZW5kKQogICAgICwgbV9sYXN0Tm9kZUlkKDEpCisgICAgLCBtX21hdGNoSm9i
c1RpbWVyKHRoaXMsICZJbnNwZWN0b3JET01BZ2VudDo6b25NYXRjaEpvYnNUaW1lcikKIHsKIH0K
IApAQCAtODcsNiArMTkwLDcgQEAgSW5zcGVjdG9yRE9NQWdlbnQ6On5JbnNwZWN0b3JET01BZ2Vu
dCgpCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc2V0KCkKIHsKKyAgICBzZWFyY2hDYW5j
ZWxlZCgpOwogICAgIGRpc2NhcmRCaW5kaW5ncygpOwogCiAgICAgTGlzdEhhc2hTZXQ8UmVmUHRy
PERvY3VtZW50PiA+IGNvcHkgPSBtX2RvY3VtZW50czsKQEAgLTUwNiw2ICs2MTAsMTE0IEBAIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nIGNhbGxJ
ZCwgbG9uZyBub2RlSWQpCiAgICAgbV9mcm9udGVuZC0+ZGlkR2V0RXZlbnRMaXN0ZW5lcnNGb3JO
b2RlKGNhbGxJZCwgbm9kZUlkLCBsaXN0ZW5lcnNBcnJheSk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goY29uc3QgU3RyaW5nJiB3aGl0ZXNwYWNlVHJpbW1lZFF1
ZXJ5LCBib29sIHJ1blN5bmNocm9ub3VzbHkpCit7CisgICAgLy8gRklYTUU6IEZldyB0aGluZ3Mg
YXJlIG1pc3NpbmcgaGVyZToKKyAgICAvLyAxKSBTZWFyY2ggd29ya3Mgd2l0aCBub2RlIGdyYW51
bGFyaXR5IC0gbnVtYmVyIG9mIG1hdGNoZXMgd2l0aGluIG5vZGUgaXMgbm90IGNhbGN1bGF0ZWQu
CisgICAgLy8gMikgVGhlcmUgaXMgbm8gbmVlZCB0byBwdXNoIGFsbCBzZWFyY2ggcmVzdWx0cyB0
byB0aGUgZnJvbnQtZW5kIGF0IGEgdGltZSwgcHVzaGluZyBuZXh0IC8gcHJldmlvdXMgcmVzdWx0
CisgICAgLy8gICAgaXMgc3VmZmljaWVudC4KKworICAgIGludCBxdWVyeUxlbmd0aCA9IHdoaXRl
c3BhY2VUcmltbWVkUXVlcnkubGVuZ3RoKCk7CisgICAgYm9vbCBzdGFydFRhZ0ZvdW5kID0gIXdo
aXRlc3BhY2VUcmltbWVkUXVlcnkuZmluZCgnPCcpOworICAgIGJvb2wgZW5kVGFnRm91bmQgPSB3
aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LnJldmVyc2VGaW5kKCc+JykgKyAxID09IHF1ZXJ5TGVuZ3Ro
OworCisgICAgU3RyaW5nIHRhZ05hbWVRdWVyeSA9IHdoaXRlc3BhY2VUcmltbWVkUXVlcnk7Cisg
ICAgaWYgKHN0YXJ0VGFnRm91bmQgfHwgZW5kVGFnRm91bmQpCisgICAgICAgIHRhZ05hbWVRdWVy
eSA9IHRhZ05hbWVRdWVyeS5zdWJzdHJpbmcoc3RhcnRUYWdGb3VuZCA/IDEgOiAwLCBlbmRUYWdG
b3VuZCA/IHF1ZXJ5TGVuZ3RoIC0gMSA6IHF1ZXJ5TGVuZ3RoKTsKKyAgICBpZiAoIURvY3VtZW50
Ojppc1ZhbGlkTmFtZSh0YWdOYW1lUXVlcnkpKQorICAgICAgICB0YWdOYW1lUXVlcnkgPSAiIjsK
KworICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lUXVlcnkgPSB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5
OworICAgIGlmICghRG9jdW1lbnQ6OmlzVmFsaWROYW1lKGF0dHJpYnV0ZU5hbWVRdWVyeSkpCisg
ICAgICAgIGF0dHJpYnV0ZU5hbWVRdWVyeSA9ICIiOworCisgICAgU3RyaW5nIGVzY2FwZWRRdWVy
eSA9IHdoaXRlc3BhY2VUcmltbWVkUXVlcnk7CisgICAgZXNjYXBlZFF1ZXJ5LnJlcGxhY2UoIici
LCAiXFwnIik7CisgICAgU3RyaW5nIGVzY2FwZWRUYWdOYW1lUXVlcnkgPSB0YWdOYW1lUXVlcnk7
CisgICAgZXNjYXBlZFRhZ05hbWVRdWVyeS5yZXBsYWNlKCInIiwgIlxcJyIpOworCisgICAgLy8g
RmluZCBhbGwgZnJhbWVzLCBpZnJhbWVzIGFuZCBvYmplY3QgZWxlbWVudHMgdG8gc2VhcmNoIHRo
ZWlyIGRvY3VtZW50cy4KKyAgICBWZWN0b3I8RG9jdW1lbnQqPiBkb2N1bWVudHM7CisgICAgZG9j
dW1lbnRzLmFwcGVuZChtYWluRnJhbWVEb2N1bWVudCgpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIFJlZlB0cjxOb2RlTGlzdD4gZnJhbWVPd25lcnMgPSBtYWluRnJhbWVEb2N1
bWVudCgpLT5xdWVyeVNlbGVjdG9yQWxsKCJpZnJhbWUsIGZyYW1lLCBvYmplY3QiLCBlYyk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWVjICYmIGZyYW1lT3duZXJzICYmIGkgPCBmcmFtZU93
bmVycy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBOb2RlKiBub2RlID0gZnJhbWVPd25lcnMt
Pml0ZW0oaSk7CisgICAgICAgIGlmIChub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpIHsKKyAg
ICAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogZnJhbWVPd25lciA9IHN0YXRpY19jYXN0
PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KG5vZGUpOworICAgICAgICAgICAgaWYgKGZyYW1lT3du
ZXItPmNvbnRlbnREb2N1bWVudCgpKQorICAgICAgICAgICAgICAgIGRvY3VtZW50cy5hcHBlbmQo
ZnJhbWVPd25lci0+Y29udGVudERvY3VtZW50KCkpOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gQ2xlYXIgcGVuZGluZyBqb2JzLgorICAgIHNlYXJjaENhbmNlbGVkKCk7CisKKyAgICAvLyBQ
b3B1bGF0ZSBuZXcgam9icy4KKyAgICBmb3IgKFZlY3RvcjxEb2N1bWVudCo+OjppdGVyYXRvciBp
dCA9IGRvY3VtZW50cy5iZWdpbigpOyBpdCAhPSBkb2N1bWVudHMuZW5kKCk7ICsraXQpIHsKKyAg
ICAgICAgaWYgKCF0YWdOYW1lUXVlcnkuaXNFbXB0eSgpICYmIHN0YXJ0VGFnRm91bmQgJiYgZW5k
VGFnRm91bmQpIHsKKyAgICAgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1h
dGNoRXhhY3RUYWdOYW1lc0pvYigqaXQsIHRhZ05hbWVRdWVyeSkpOworICAgICAgICAgICAgbV9w
ZW5kaW5nTWF0Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hQbGFpblRleHRKb2IoKml0LCBlc2NhcGVk
UXVlcnkpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCF0YWdOYW1lUXVlcnkuaXNFbXB0eSgpICYmIHN0YXJ0VGFnRm91bmQpIHsKKyAgICAgICAgICAg
IG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoWFBhdGhKb2IoKml0LCAiLy8qW3N0
YXJ0cy13aXRoKG5hbWUoKSwgJyIgKyBlc2NhcGVkVGFnTmFtZVF1ZXJ5ICsgIicpXSIpKTsKKyAg
ICAgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoUGxhaW5UZXh0Sm9i
KCppdCwgZXNjYXBlZFF1ZXJ5KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICghdGFnTmFtZVF1ZXJ5LmlzRW1wdHkoKSAmJiBlbmRUYWdGb3VuZCkgewor
ICAgICAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBoYXZlIGEgbWF0Y2hFbmRPZlRhZ05hbWVz
IHNlYXJjaCBmdW5jdGlvbiBpZiBlbmRUYWdGb3VuZCBpcyB0cnVlIGJ1dCBub3Qgc3RhcnRUYWdG
b3VuZC4KKyAgICAgICAgICAgIC8vIFRoaXMgcmVxdWlyZXMgZW5kcy13aXRoKCkgc3VwcG9ydCBp
biBYUGF0aCwgV2ViS2l0IG9ubHkgc3VwcG9ydHMgc3RhcnRzLXdpdGgoKSBhbmQgY29udGFpbnMo
KS4KKyAgICAgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoWFBhdGhK
b2IoKml0LCAiLy8qW2NvbnRhaW5zKG5hbWUoKSwgJyIgKyBlc2NhcGVkVGFnTmFtZVF1ZXJ5ICsg
IicpXSIpKTsKKyAgICAgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNo
UGxhaW5UZXh0Sm9iKCppdCwgZXNjYXBlZFF1ZXJ5KSk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgbWF0Y2hlc0V2ZXJ5Tm9kZSA9IHdoaXRlc3BhY2VU
cmltbWVkUXVlcnkgPT0gIi8vKiIgfHwgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSA9PSAiKiI7Cisg
ICAgICAgIGlmIChtYXRjaGVzRXZlcnlOb2RlKSB7CisgICAgICAgICAgICAvLyBUaGVzZSBxdWVy
aWVzIHdpbGwgbWF0Y2ggZXZlcnkgbm9kZS4gTWF0Y2hpbmcgZXZlcnl0aGluZyBpc24ndCB1c2Vm
dWwgYW5kIGNhbiBiZSBzbG93IGZvciBsYXJnZSBwYWdlcywKKyAgICAgICAgICAgIC8vIHNvIGxp
bWl0IHRoZSBzZWFyY2ggZnVuY3Rpb25zIGxpc3QgdG8gcGxhaW4gdGV4dCBhbmQgYXR0cmlidXRl
IG1hdGNoaW5nIGZvciB0aGVzZS4KKyAgICAgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBl
bmQobmV3IE1hdGNoWFBhdGhKb2IoKml0LCAiLy8qW2NvbnRhaW5zKEAqLCAnIiArIGVzY2FwZWRR
dWVyeSArICInKV0iKSk7CisgICAgICAgICAgICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5l
dyBNYXRjaFBsYWluVGV4dEpvYigqaXQsIGVzY2FwZWRRdWVyeSkpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBtX3BlbmRpbmdNYXRjaEpv
YnMuYXBwZW5kKG5ldyBNYXRjaEV4YWN0SWRKb2IoKml0LCB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5
KSk7CisgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoRXhhY3RDbGFz
c05hbWVzSm9iKCppdCwgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSkpOworICAgICAgICBtX3BlbmRp
bmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBNYXRjaEV4YWN0VGFnTmFtZXNKb2IoKml0LCB0YWdOYW1l
UXVlcnkpKTsKKyAgICAgICAgbV9wZW5kaW5nTWF0Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hRdWVy
eVNlbGVjdG9yQWxsSm9iKCppdCwgIlsiICsgYXR0cmlidXRlTmFtZVF1ZXJ5ICsgIl0iKSk7Cisg
ICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoUXVlcnlTZWxlY3RvckFs
bEpvYigqaXQsIHdoaXRlc3BhY2VUcmltbWVkUXVlcnkpKTsKKyAgICAgICAgbV9wZW5kaW5nTWF0
Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hYUGF0aEpvYigqaXQsICIvLypbY29udGFpbnMoQCosICci
ICsgZXNjYXBlZFF1ZXJ5ICsgIicpXSIpKTsKKyAgICAgICAgaWYgKCF0YWdOYW1lUXVlcnkuaXNF
bXB0eSgpKQorICAgICAgICAgICAgbV9wZW5kaW5nTWF0Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hY
UGF0aEpvYigqaXQsICIvLypbY29udGFpbnMobmFtZSgpLCAnIiArIGVzY2FwZWRUYWdOYW1lUXVl
cnkgKyAiJyldIikpOworICAgICAgICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBNYXRj
aFBsYWluVGV4dEpvYigqaXQsIGVzY2FwZWRRdWVyeSkpOworICAgICAgICBtX3BlbmRpbmdNYXRj
aEpvYnMuYXBwZW5kKG5ldyBNYXRjaFhQYXRoSm9iKCppdCwgd2hpdGVzcGFjZVRyaW1tZWRRdWVy
eSkpOworICAgIH0KKworICAgIGlmIChydW5TeW5jaHJvbm91c2x5KSB7CisgICAgICAgIC8vIEZv
ciB0ZXN0cy4KKyAgICAgICAgTGlzdEhhc2hTZXQ8Tm9kZSo+IHJlc3VsdENvbGxlY3RvcjsKKyAg
ICAgICAgZm9yIChEZXF1ZTxNYXRjaEpvYio+OjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ01hdGNo
Sm9icy5iZWdpbigpOyBpdCAhPSBtX3BlbmRpbmdNYXRjaEpvYnMuZW5kKCk7ICsraXQpCisgICAg
ICAgICAgICAoKml0KS0+bWF0Y2gocmVzdWx0Q29sbGVjdG9yKTsKKyAgICAgICAgcmVwb3J0Tm9k
ZXNBc1NlYXJjaFJlc3VsdHMocmVzdWx0Q29sbGVjdG9yKTsKKyAgICAgICAgc2VhcmNoQ2FuY2Vs
ZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX21hdGNoSm9ic1RpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKK30KKwordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2VhcmNoQ2FuY2VsZWQo
KQoreworICAgIGlmIChtX21hdGNoSm9ic1RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fbWF0
Y2hKb2JzVGltZXIuc3RvcCgpOworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3BlbmRpbmdNYXRjaEpv
YnMpOworICAgIG1fcGVuZGluZ01hdGNoSm9icy5jbGVhcigpOworICAgIG1fc2VhcmNoUmVzdWx0
cy5jbGVhcigpOworfQorCiBTdHJpbmcgSW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50VVJMU3Ry
aW5nKERvY3VtZW50KiBkb2N1bWVudCkgY29uc3QKIHsKICAgICBpZiAoIWRvY3VtZW50IHx8IGRv
Y3VtZW50LT51cmwoKS5pc051bGwoKSkKQEAgLTEzMzAsNiArMTU0MiwzNyBAQCBDU1NTdHlsZVNo
ZWV0KiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0UGFyZW50U3R5bGVTaGVldChDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZQogICAgIHJldHVybiBwYXJlbnRTdHlsZVNoZWV0OwogfQogCit2b2lkIElu
c3BlY3RvckRPTUFnZW50Ojpvbk1hdGNoSm9ic1RpbWVyKFRpbWVyPEluc3BlY3RvckRPTUFnZW50
PiopCit7CisgICAgaWYgKCFtX3BlbmRpbmdNYXRjaEpvYnMuc2l6ZSgpKSB7CisgICAgICAgIHNl
YXJjaENhbmNlbGVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBMaXN0SGFzaFNl
dDxOb2RlKj4gcmVzdWx0Q29sbGVjdG9yOworICAgIE1hdGNoSm9iKiBqb2IgPSBtX3BlbmRpbmdN
YXRjaEpvYnMuZmlyc3QoKTsKKyAgICBtX3BlbmRpbmdNYXRjaEpvYnMucmVtb3ZlRmlyc3QoKTsK
KyAgICBqb2ItPm1hdGNoKHJlc3VsdENvbGxlY3Rvcik7CisgICAgZGVsZXRlIGpvYjsKKworICAg
IHJlcG9ydE5vZGVzQXNTZWFyY2hSZXN1bHRzKHJlc3VsdENvbGxlY3Rvcik7CisKKyAgICBtX21h
dGNoSm9ic1RpbWVyLnN0YXJ0T25lU2hvdCgwLjAyNSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OnJlcG9ydE5vZGVzQXNTZWFyY2hSZXN1bHRzKExpc3RIYXNoU2V0PE5vZGUqPiYgcmVz
dWx0Q29sbGVjdG9yKQoreworICAgIFNjcmlwdEFycmF5IG5vZGVJZHMgPSBtX2Zyb250ZW5kLT5u
ZXdTY3JpcHRBcnJheSgpOworICAgIGludCBpbmRleCA9IDA7CisgICAgZm9yIChMaXN0SGFzaFNl
dDxOb2RlKj46Oml0ZXJhdG9yIGl0ID0gcmVzdWx0Q29sbGVjdG9yLmJlZ2luKCk7IGl0ICE9IHJl
c3VsdENvbGxlY3Rvci5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAobV9zZWFyY2hSZXN1bHRz
LmNvbnRhaW5zKCppdCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9zZWFyY2hS
ZXN1bHRzLmFkZCgqaXQpOworICAgICAgICBub2RlSWRzLnNldChpbmRleCsrLCBzdGF0aWNfY2Fz
dDxsb25nIGxvbmc+KHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoKml0KSkpOworICAgIH0KKyAgICBt
X2Zyb250ZW5kLT5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KG5vZGVJZHMpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggZjg5MjViNS4uMTZhNmVmYyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0zNCwxMCArMzQsMTMgQEAKICNpbmNsdWRl
ICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JDU1NTdG9yZS5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiU2Ny
aXB0QXJyYXkuaCIKICNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKICNpbmNsdWRlICJTY3JpcHRT
dGF0ZS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCiAKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNp
bmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC03Miw2ICs3NSwyNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3IgZXZlbnRMaXN0ZW5lclZlY3Rv
cjsKICAgICB9OwogCisgICAgY2xhc3MgTWF0Y2hKb2IgeworICAgIHB1YmxpYzoKKyAgICAgICAg
dmlydHVhbCB2b2lkIG1hdGNoKExpc3RIYXNoU2V0PE5vZGUqPiYgcmVzdWx0Q29sbGVjdG9yKSA9
IDA7CisgICAgICAgIHZpcnR1YWwgfk1hdGNoSm9iKCkgeyB9CisKKyAgICBwcm90ZWN0ZWQ6Cisg
ICAgICAgIE1hdGNoSm9iKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBxdWVyeSkK
KyAgICAgICAgICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKKyAgICAgICAgICAgICwgbV9xdWVy
eShxdWVyeSkgeyB9CisKKyAgICAgICAgdm9pZCBhZGROb2Rlc1RvUmVzdWx0cyhQYXNzUmVmUHRy
PE5vZGVMaXN0PiBub2RlcywgTGlzdEhhc2hTZXQ8Tm9kZSo+JiByZXN1bHRDb2xsZWN0b3IpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IG5vZGVzICYmIGkgPCBu
b2Rlcy0+bGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAgICAgICByZXN1bHRDb2xsZWN0b3IuYWRk
KG5vZGVzLT5pdGVtKGkpKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZlB0cjxEb2N1bWVudD4g
bV9kb2N1bWVudDsKKyAgICAgICAgU3RyaW5nIG1fcXVlcnk7CisgICAgfTsKKwogICAgIGNsYXNz
IEluc3BlY3RvckRPTUFnZW50IDogcHVibGljIEV2ZW50TGlzdGVuZXIgewogICAgIHB1YmxpYzoK
ICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IGNyZWF0ZShJbnNw
ZWN0b3JDU1NTdG9yZSogY3NzU3RvcmUsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKQEAg
LTEwMSw2ICsxMjQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY2hhbmdl
VGFnTmFtZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IEF0b21pY1N0cmluZyYgdGFn
TmFtZSwgYm9vbCBleHBhbmRlZCk7CiAgICAgICAgIHZvaWQgc2V0VGV4dE5vZGVWYWx1ZShsb25n
IGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgICAgICB2b2lk
IGdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOworICAg
ICAgICB2b2lkIHBlcmZvcm1TZWFyY2goY29uc3QgU3RyaW5nJiB3aGl0ZXNwYWNlVHJpbW1lZFF1
ZXJ5LCBib29sIHJ1blN5bmNocm9ub3VzbHkpOworICAgICAgICB2b2lkIHNlYXJjaENhbmNlbGVk
KCk7CiAKICAgICAgICAgLy8gTWV0aG9kcyBjYWxsZWQgZnJvbSB0aGUgZnJvbnRlbmQgZm9yIENT
UyBzdHlsZXMgaW5zcGVjdGlvbi4KICAgICAgICAgdm9pZCBnZXRTdHlsZXMobG9uZyBjYWxsSWQs
IGxvbmcgbm9kZUlkLCBib29sIGF1dGhvck9ubHkpOwpAQCAtMTY1LDYgKzE5MCw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIGRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50
KiBkb2N1bWVudCkgY29uc3Q7CiAgICAgICAgIEluc3BlY3RvckNTU1N0b3JlKiBjc3NTdG9yZSgp
IHsgcmV0dXJuIG1fY3NzU3RvcmU7IH0KIAorICAgICAgICB2b2lkIG9uTWF0Y2hKb2JzVGltZXIo
VGltZXI8SW5zcGVjdG9yRE9NQWdlbnQ+Kik7CisgICAgICAgIHZvaWQgcmVwb3J0Tm9kZXNBc1Nl
YXJjaFJlc3VsdHMoTGlzdEhhc2hTZXQ8Tm9kZSo+JiByZXN1bHRDb2xsZWN0b3IpOworCiAgICAg
ICAgIFNjcmlwdE9iamVjdCBidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24q
LCBib29sIGJpbmQpOwogICAgICAgICB2b2lkIHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVy
dGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiwgU2NyaXB0T2JqZWN0JiByZXN1bHQpOwogICAgICAg
ICBTY3JpcHRBcnJheSBidWlsZEFycmF5Rm9yRGlzYWJsZWRTdHlsZVByb3BlcnRpZXMoRGlzYWJs
ZWRTdHlsZURlY2xhcmF0aW9uKik7CkBAIC0xODgsOSArMjE2LDExIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgSGFzaFNldDxsb25nPiBtX2NoaWxkcmVuUmVxdWVzdGVkOwogICAgICAg
ICBsb25nIG1fbGFzdE5vZGVJZDsKICAgICAgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPERvY3VtZW50
PiA+IG1fZG9jdW1lbnRzOworICAgICAgICBEZXF1ZTxNYXRjaEpvYio+IG1fcGVuZGluZ01hdGNo
Sm9iczsKKyAgICAgICAgVGltZXI8SW5zcGVjdG9yRE9NQWdlbnQ+IG1fbWF0Y2hKb2JzVGltZXI7
CisgICAgICAgIEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID4gbV9zZWFyY2hSZXN1bHRzOwogICAgIH07
CiAKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVj
dG9yRE9NQWdlbnRfaCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAppbmRl
eCAzOTBlZGFiLi5lZWVmYmQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
Y3BwCkBAIC03MzksNyArNzM5LDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6dXBkYXRlRE9N
U3RvcmFnZShsb25nIHN0b3JhZ2VJZCkKIH0KICNlbmRpZgogCi12b2lkIEluc3BlY3RvckZyb250
ZW5kOjphZGROb2Rlc1RvU2VhcmNoUmVzdWx0KGNvbnN0IFN0cmluZyYgbm9kZUlkcykKK3ZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OmFkZE5vZGVzVG9TZWFyY2hSZXN1bHQoY29uc3QgU2NyaXB0QXJy
YXkmIG5vZGVJZHMpCiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5z
cGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImFkZE5v
ZGVzVG9TZWFyY2hSZXN1bHQiKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCmlu
ZGV4IGI5Zjg3ZWYuLjgyY2RmOGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
aApAQCAtMTU4LDcgKzE1OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBk
aWRHZXRDb29raWVzKGxvbmcgY2FsbElkLCBjb25zdCBTY3JpcHRBcnJheSYgY29va2llcywgY29u
c3QgU3RyaW5nJiBjb29raWVzU3RyaW5nKTsKICAgICAgICAgdm9pZCBkaWREaXNwYXRjaE9uSW5q
ZWN0ZWRTY3JpcHQobG9uZyBjYWxsSWQsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogcmVzdWx0LCBi
b29sIGlzRXhjZXB0aW9uKTsKIAotICAgICAgICB2b2lkIGFkZE5vZGVzVG9TZWFyY2hSZXN1bHQo
Y29uc3QgU3RyaW5nJiBub2RlSWRzKTsKKyAgICAgICAgdm9pZCBhZGROb2Rlc1RvU2VhcmNoUmVz
dWx0KGNvbnN0IFNjcmlwdEFycmF5JiBub2RlSWRzKTsKIAogICAgICAgICB2b2lkIGNvbnRleHRN
ZW51SXRlbVNlbGVjdGVkKGludCBpdGVtSWQpOwogICAgICAgICB2b2lkIGNvbnRleHRNZW51Q2xl
YXJlZCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2Uu
Y3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwCmluZGV4IDk5OWI4
ZDYuLmYwZTM5MWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291
cmNlLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAKQEAg
LTE2OSw3ICsxNjksNiBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlOjp1cGRhdGVTY3JpcHRPYmpl
Y3QoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQogICAgICAgICBqc29uT2JqZWN0LnNldCgi
ZXhwZWN0ZWRDb250ZW50TGVuZ3RoIiwgbV9leHBlY3RlZENvbnRlbnRMZW5ndGgpOwogICAgICAg
ICBqc29uT2JqZWN0LnNldCgic3RhdHVzQ29kZSIsIG1fcmVzcG9uc2VTdGF0dXNDb2RlKTsKICAg
ICAgICAganNvbk9iamVjdC5zZXQoInN0YXR1c1RleHQiLCBtX3Jlc3BvbnNlU3RhdHVzVGV4dCk7
Ci0gICAgICAgIGpzb25PYmplY3Quc2V0KCJzdWdnZXN0ZWRGaWxlbmFtZSIsIG1fc3VnZ2VzdGVk
RmlsZW5hbWUpOwogICAgICAgICBTY3JpcHRPYmplY3QgcmVzcG9uc2VIZWFkZXJzID0gZnJvbnRl
bmQtPm5ld1NjcmlwdE9iamVjdCgpOwogICAgICAgICBwb3B1bGF0ZUhlYWRlcnNPYmplY3QoJnJl
c3BvbnNlSGVhZGVycywgbV9yZXNwb25zZUhlYWRlckZpZWxkcyk7CiAgICAgICAgIGpzb25PYmpl
Y3Quc2V0KCJyZXNwb25zZUhlYWRlcnMiLCByZXNwb25zZUhlYWRlcnMpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcwppbmRleCBjODUzNDQwLi41NWJhODJk
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5q
cworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcwpAQCAt
MjQwLDcgKzI0MCw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZSA9IHsK
IAogICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPSAwOwogICAgICAgICB0
aGlzLl9zZWFyY2hSZXN1bHRzID0gW107Ci0gICAgICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdl
dERlZmF1bHQoKS5zZWFyY2hDYW5jZWxlZChmdW5jdGlvbigpIHt9KTsKKyAgICAgICAgSW5zcGVj
dG9yQmFja2VuZC5zZWFyY2hDYW5jZWxlZCgpOwogICAgIH0sCiAKICAgICBwZXJmb3JtU2VhcmNo
OiBmdW5jdGlvbihxdWVyeSkKQEAgLTI1Niw3ICsyNTYsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVu
dHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX21hdGNoZXNDb3VudFVwZGF0ZVRp
bWVvdXQgPSBudWxsOwogICAgICAgICB0aGlzLl9zZWFyY2hRdWVyeSA9IHF1ZXJ5OwogCi0gICAg
ICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdldERlZmF1bHQoKS5wZXJmb3JtU2VhcmNoKHdoaXRl
c3BhY2VUcmltbWVkUXVlcnksIGZhbHNlLCBmdW5jdGlvbigpIHt9KTsKKyAgICAgICAgSW5zcGVj
dG9yQmFja2VuZC5wZXJmb3JtU2VhcmNoKHdoaXRlc3BhY2VUcmltbWVkUXVlcnkpOwogICAgIH0s
CiAKICAgICBzZWFyY2hpbmdGb3JOb2RlV2FzRW5hYmxlZDogZnVuY3Rpb24oKQpAQCAtMjg4LDEy
ICsyODgsMTEgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlID0gewogCiAg
ICAgYWRkTm9kZXNUb1NlYXJjaFJlc3VsdDogZnVuY3Rpb24obm9kZUlkcykKICAgICB7Ci0gICAg
ICAgIGlmICghbm9kZUlkcykKKyAgICAgICAgaWYgKCFub2RlSWRzLmxlbmd0aCkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICB2YXIgbm9kZUlkc0FycmF5ID0gbm9kZUlkcy5zcGxpdCgi
LCIpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVJZHNBcnJheS5sZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgdmFyIG5vZGVJZCA9IG5vZGVJZHNBcnJheVtpXTsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBub2RlSWRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2
YXIgbm9kZUlkID0gbm9kZUlkc1tpXTsKICAgICAgICAgICAgIHZhciBub2RlID0gV2ViSW5zcGVj
dG9yLmRvbUFnZW50Lm5vZGVGb3JJZChub2RlSWQpOwogICAgICAgICAgICAgaWYgKCFub2RlKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0luamVjdGVkU2NyaXB0LmpzCmluZGV4IDQwMDJlMjMuLmU2MmE5MTYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcworKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKQEAgLTgzLDggKzgzLDYgQEAg
SW5qZWN0ZWRTY3JpcHQucmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cCA9IGZ1bmN0aW9uKG9iamVj
dEdyb3VwTmFtZSkgewogLy8gQ2FsbGVkIGZyb20gd2l0aGluIEluc3BlY3RvckNvbnRyb2xsZXIg
b24gdGhlICdpbnNwZWN0ZWQgcGFnZScgc2lkZS4KIEluamVjdGVkU2NyaXB0LnJlc2V0ID0gZnVu
Y3Rpb24oKQogewotICAgIEluamVjdGVkU2NyaXB0Ll9zZWFyY2hSZXN1bHRzID0gW107Ci0gICAg
SW5qZWN0ZWRTY3JpcHQuX2luY2x1ZGVkSW5TZWFyY2hSZXN1bHRzUHJvcGVydHlOYW1lID0gIl9f
aW5jbHVkZWRJbkluc3BlY3RvclNlYXJjaFJlc3VsdHMiOwogfQogCiBJbmplY3RlZFNjcmlwdC5y
ZXNldCgpOwpAQCAtMjExLDcgKzIwOSw3IEBAIEluamVjdGVkU2NyaXB0LnNldFByb3BlcnR5VmFs
dWUgPSBmdW5jdGlvbihvYmplY3RQcm94eSwgcHJvcGVydHlOYW1lLCBleHByZXNzaW9uCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0gY2F0Y2goZSkgewogICAgICAgICB0cnkgewotICAgICAg
ICAgICAgdmFyIHJlc3VsdCA9IGluc3BlY3RlZFdpbmRvdy5ldmFsKCJcIiIgKyBJbmplY3RlZFNj
cmlwdC5fZXNjYXBlQ2hhcmFjdGVycyhleHByZXNzaW9uLCAiXCIiKSArICJcIiIpOworICAgICAg
ICAgICAgdmFyIHJlc3VsdCA9IGluc3BlY3RlZFdpbmRvdy5ldmFsKCJcIiIgKyBleHByZXNzaW9u
LnJlcGxhY2UoLyIvZywgIlxcXCIiKSArICJcIiIpOwogICAgICAgICAgICAgb2JqZWN0W3Byb3Bl
cnR5TmFtZV0gPSByZXN1bHQ7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBj
YXRjaChlKSB7CkBAIC0zNTUsMjQ3ICszNTMsNiBAQCBJbmplY3RlZFNjcmlwdC5nZXROb2RlSWQg
PSBmdW5jdGlvbihub2RlKQogICAgIHJldHVybiBJbmplY3RlZFNjcmlwdEhvc3QucHVzaE5vZGVQ
YXRoVG9Gcm9udGVuZChub2RlLCBmYWxzZSwgZmFsc2UpOwogfQogCi1JbmplY3RlZFNjcmlwdC5w
ZXJmb3JtU2VhcmNoID0gZnVuY3Rpb24od2hpdGVzcGFjZVRyaW1tZWRRdWVyeSwgcnVuU3luY2hy
b25vdXNseSkKLXsKLSAgICAvLyBGSVhNRTogRmV3IHRoaW5ncyBhcmUgbWlzc2luZyBoZXJlOgot
ICAgIC8vIDEpIFNlYXJjaCB3b3JrcyB3aXRoIG5vZGUgZ3JhbnVsYXJpdHkgLSBudW1iZXIgb2Yg
bWF0Y2hlcyB3aXRoaW4gbm9kZSBpcyBub3QgY2FsY3VsYXRlZC4KLSAgICAvLyAyKSBTZWFyY2gg
ZG9lcyBub3Qgd29yayBvdXRzaWRlIG1haW4gZG9jdW1lbnRzJyBkb21haW4gLSB3ZSBuZWVkIHRv
IHVzZSBzcGVjaWZpYyBJbmplY3RlZFNjcmlwdCBpbnN0YW5jZXMKLSAgICAvLyAgICBmb3Igb3Ro
ZXIgZG9tYWlucy4KLSAgICAvLyAzKSBUaGVyZSBpcyBubyBuZWVkIHRvIHB1c2ggYWxsIHNlYXJj
aCByZXN1bHRzIHRvIHRoZSBmcm9udC1lbmQgYXQgYSB0aW1lLCBwdXNoaW5nIG5leHQgLyBwcmV2
aW91cyByZXN1bHQKLSAgICAvLyAgICBpcyBzdWZmaWNpZW50LgotICAgIHZhciB0YWdOYW1lUXVl
cnkgPSB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5OwotICAgIHZhciBhdHRyaWJ1dGVOYW1lUXVlcnkg
PSB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5OwotICAgIHZhciBzdGFydFRhZ0ZvdW5kID0gKHRhZ05h
bWVRdWVyeS5pbmRleE9mKCI8IikgPT09IDApOwotICAgIHZhciBlbmRUYWdGb3VuZCA9ICh0YWdO
YW1lUXVlcnkubGFzdEluZGV4T2YoIj4iKSA9PT0gKHRhZ05hbWVRdWVyeS5sZW5ndGggLSAxKSk7
Ci0KLSAgICBpZiAoc3RhcnRUYWdGb3VuZCB8fCBlbmRUYWdGb3VuZCkgewotICAgICAgICB2YXIg
dGFnTmFtZVF1ZXJ5TGVuZ3RoID0gdGFnTmFtZVF1ZXJ5Lmxlbmd0aDsKLSAgICAgICAgdGFnTmFt
ZVF1ZXJ5ID0gdGFnTmFtZVF1ZXJ5LnN1YnN0cmluZygoc3RhcnRUYWdGb3VuZCA/IDEgOiAwKSwg
KGVuZFRhZ0ZvdW5kID8gKHRhZ05hbWVRdWVyeUxlbmd0aCAtIDEpIDogdGFnTmFtZVF1ZXJ5TGVu
Z3RoKSk7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgdGhlIHRhZ05hbWVRdWVyeSBpcyBpdCBpcyBh
IHBvc3NpYmx5IHZhbGlkIHRhZyBuYW1lLgotICAgIGlmICghL15bYS16QS1aMC05XC1fOl0rJC8u
dGVzdCh0YWdOYW1lUXVlcnkpKQotICAgICAgICB0YWdOYW1lUXVlcnkgPSBudWxsOwotCi0gICAg
Ly8gQ2hlY2sgdGhlIGF0dHJpYnV0ZU5hbWVRdWVyeSBpcyBpdCBpcyBhIHBvc3NpYmx5IHZhbGlk
IHRhZyBuYW1lLgotICAgIGlmICghL15bYS16QS1aMC05XC1fOl0rJC8udGVzdChhdHRyaWJ1dGVO
YW1lUXVlcnkpKQotICAgICAgICBhdHRyaWJ1dGVOYW1lUXVlcnkgPSBudWxsOwotCi0gICAgY29u
c3QgZXNjYXBlZFF1ZXJ5ID0gSW5qZWN0ZWRTY3JpcHQuX2VzY2FwZUNoYXJhY3RlcnMod2hpdGVz
cGFjZVRyaW1tZWRRdWVyeSwgIiciKTsKLSAgICBjb25zdCBlc2NhcGVkVGFnTmFtZVF1ZXJ5ID0g
KHRhZ05hbWVRdWVyeSA/ICBJbmplY3RlZFNjcmlwdC5fZXNjYXBlQ2hhcmFjdGVycyh0YWdOYW1l
UXVlcnksICInIikgOiBudWxsKTsKLSAgICBjb25zdCBlc2NhcGVkV2hpdGVzcGFjZVRyaW1tZWRR
dWVyeSA9IEluamVjdGVkU2NyaXB0Ll9lc2NhcGVDaGFyYWN0ZXJzKHdoaXRlc3BhY2VUcmltbWVk
UXVlcnksICInIik7Ci0gICAgY29uc3Qgc2VhcmNoUmVzdWx0c1Byb3BlcnR5ID0gSW5qZWN0ZWRT
Y3JpcHQuX2luY2x1ZGVkSW5TZWFyY2hSZXN1bHRzUHJvcGVydHlOYW1lOwotCi0gICAgZnVuY3Rp
b24gYWRkTm9kZXNUb1Jlc3VsdHMobm9kZXMsIGxlbmd0aCwgZ2V0SXRlbSkKLSAgICB7Ci0gICAg
ICAgIGlmICghbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBub2Rl
SWRzID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgICAgIHZhciBub2RlID0gZ2V0SXRlbS5jYWxsKG5vZGVzLCBpKTsKLSAgICAgICAgICAg
IC8vIFNraXAgdGhpcyBub2RlIGlmIGl0IGFscmVhZHkgaGFzIHRoZSBwcm9wZXJ0eS4KLSAgICAg
ICAgICAgIGlmIChzZWFyY2hSZXN1bHRzUHJvcGVydHkgaW4gbm9kZSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKCFJbmplY3RlZFNjcmlwdC5fc2VhcmNoUmVz
dWx0cy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBJbmplY3RlZFNjcmlwdC5fY3VycmVudFNl
YXJjaFJlc3VsdEluZGV4ID0gMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbm9kZVtz
ZWFyY2hSZXN1bHRzUHJvcGVydHldID0gdHJ1ZTsKLSAgICAgICAgICAgIEluamVjdGVkU2NyaXB0
Ll9zZWFyY2hSZXN1bHRzLnB1c2gobm9kZSk7Ci0gICAgICAgICAgICB2YXIgbm9kZUlkID0gSW5q
ZWN0ZWRTY3JpcHRIb3N0LnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSwgZmFsc2UsIGZhbHNl
KTsKLSAgICAgICAgICAgIG5vZGVJZHMucHVzaChub2RlSWQpOwotICAgICAgICB9Ci0gICAgICAg
IEluamVjdGVkU2NyaXB0SG9zdC5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KG5vZGVJZHMuam9pbigi
LCIpKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBtYXRjaEV4YWN0SXRlbXMoZG9jKQotICAgIHsK
LSAgICAgICAgbWF0Y2hFeGFjdElkLmNhbGwodGhpcywgZG9jKTsKLSAgICAgICAgbWF0Y2hFeGFj
dENsYXNzTmFtZXMuY2FsbCh0aGlzLCBkb2MpOwotICAgICAgICBtYXRjaEV4YWN0VGFnTmFtZXMu
Y2FsbCh0aGlzLCBkb2MpOwotICAgICAgICBtYXRjaEV4YWN0QXR0cmlidXRlTmFtZXMuY2FsbCh0
aGlzLCBkb2MpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIG1hdGNoRXhhY3RJZChkb2MpCi0gICAg
ewotICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmdldEVsZW1lbnRCeUlkLmNh
bGwoZG9jLCB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5KTsKLSAgICAgICAgYWRkTm9kZXNUb1Jlc3Vs
dHMuY2FsbCh0aGlzLCByZXN1bHQsIChyZXN1bHQgPyAxIDogMCksIGZ1bmN0aW9uKCkgeyByZXR1
cm4gdGhpcyB9KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBtYXRjaEV4YWN0Q2xhc3NOYW1lcyhk
b2MpCi0gICAgewotICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmdldEVsZW1l
bnRzQnlDbGFzc05hbWUuY2FsbChkb2MsIHdoaXRlc3BhY2VUcmltbWVkUXVlcnkpOwotICAgICAg
ICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0Lmxlbmd0aCwgcmVz
dWx0Lml0ZW0pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIG1hdGNoRXhhY3RUYWdOYW1lcyhkb2Mp
Ci0gICAgewotICAgICAgICBpZiAoIXRhZ05hbWVRdWVyeSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5nZXRFbGVtZW50c0J5VGFnTmFt
ZS5jYWxsKGRvYywgdGFnTmFtZVF1ZXJ5KTsKLSAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMuY2Fs
bCh0aGlzLCByZXN1bHQsIHJlc3VsdC5sZW5ndGgsIHJlc3VsdC5pdGVtKTsKLSAgICB9Ci0KLSAg
ICBmdW5jdGlvbiBtYXRjaEV4YWN0QXR0cmlidXRlTmFtZXMoZG9jKQotICAgIHsKLSAgICAgICAg
aWYgKCFhdHRyaWJ1dGVOYW1lUXVlcnkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNv
bnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18ucXVlcnlTZWxlY3RvckFsbC5jYWxsKGRvYywgIlsi
ICsgYXR0cmlidXRlTmFtZVF1ZXJ5ICsgIl0iKTsKLSAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMu
Y2FsbCh0aGlzLCByZXN1bHQsIHJlc3VsdC5sZW5ndGgsIHJlc3VsdC5pdGVtKTsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBtYXRjaFBhcnRpYWxUYWdOYW1lcyhkb2MpCi0gICAgewotICAgICAgICBp
ZiAoIXRhZ05hbWVRdWVyeSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY29uc3QgcmVz
dWx0ID0gZG9jLl9fcHJvdG9fXy5ldmFsdWF0ZS5jYWxsKGRvYywgIi8vKltjb250YWlucyhuYW1l
KCksICciICsgZXNjYXBlZFRhZ05hbWVRdWVyeSArICInKV0iLCBkb2MsIG51bGwsIFhQYXRoUmVz
dWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKTsKLSAgICAgICAgYWRkTm9kZXNUb1Jlc3Vs
dHMuY2FsbCh0aGlzLCByZXN1bHQsIHJlc3VsdC5zbmFwc2hvdExlbmd0aCwgcmVzdWx0LnNuYXBz
aG90SXRlbSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbWF0Y2hTdGFydE9mVGFnTmFtZXMoZG9j
KQotICAgIHsKLSAgICAgICAgaWYgKCF0YWdOYW1lUXVlcnkpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18uZXZhbHVhdGUuY2FsbChkb2Ms
ICIvLypbc3RhcnRzLXdpdGgobmFtZSgpLCAnIiArIGVzY2FwZWRUYWdOYW1lUXVlcnkgKyAiJyld
IiwgZG9jLCBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSk7Ci0g
ICAgICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQuc25hcHNo
b3RMZW5ndGgsIHJlc3VsdC5zbmFwc2hvdEl0ZW0pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIG1h
dGNoUGFydGlhbFRhZ05hbWVzQW5kQXR0cmlidXRlVmFsdWVzKGRvYykKLSAgICB7Ci0gICAgICAg
IGlmICghdGFnTmFtZVF1ZXJ5KSB7Ci0gICAgICAgICAgICBtYXRjaFBhcnRpYWxBdHRyaWJ1dGVW
YWx1ZXMuY2FsbCh0aGlzLCBkb2MpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5ldmFsdWF0ZS5jYWxsKGRvYywg
Ii8vKltjb250YWlucyhuYW1lKCksICciICsgZXNjYXBlZFRhZ05hbWVRdWVyeSArICInKSBvciBj
b250YWlucyhAKiwgJyIgKyBlc2NhcGVkUXVlcnkgKyAiJyldIiwgZG9jLCBudWxsLCBYUGF0aFJl
c3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSk7Ci0gICAgICAgIGFkZE5vZGVzVG9SZXN1
bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQuc25hcHNob3RMZW5ndGgsIHJlc3VsdC5zbmFw
c2hvdEl0ZW0pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIG1hdGNoUGFydGlhbEF0dHJpYnV0ZVZh
bHVlcyhkb2MpCi0gICAgewotICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmV2
YWx1YXRlLmNhbGwoZG9jLCAiLy8qW2NvbnRhaW5zKEAqLCAnIiArIGVzY2FwZWRRdWVyeSArICIn
KV0iLCBkb2MsIG51bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKTsK
LSAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0aGlzLCByZXN1bHQsIHJlc3VsdC5zbmFw
c2hvdExlbmd0aCwgcmVzdWx0LnNuYXBzaG90SXRlbSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24g
bWF0Y2hTdHlsZVNlbGVjdG9yKGRvYykKLSAgICB7Ci0gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRv
Yy5fX3Byb3RvX18ucXVlcnlTZWxlY3RvckFsbC5jYWxsKGRvYywgd2hpdGVzcGFjZVRyaW1tZWRR
dWVyeSk7Ci0gICAgICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1
bHQubGVuZ3RoLCByZXN1bHQuaXRlbSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbWF0Y2hQbGFp
blRleHQoZG9jKQotICAgIHsKLSAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5l
dmFsdWF0ZS5jYWxsKGRvYywgIi8vdGV4dCgpW2NvbnRhaW5zKC4sICciICsgZXNjYXBlZFF1ZXJ5
ICsgIicpXSB8IC8vY29tbWVudCgpW2NvbnRhaW5zKC4sICciICsgZXNjYXBlZFF1ZXJ5ICsgIicp
XSIsIGRvYywgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUpOwot
ICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0LnNuYXBz
aG90TGVuZ3RoLCByZXN1bHQuc25hcHNob3RJdGVtKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBt
YXRjaFhQYXRoUXVlcnkoZG9jKQotICAgIHsKLSAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jLl9f
cHJvdG9fXy5ldmFsdWF0ZS5jYWxsKGRvYywgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSwgZG9jLCBu
dWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSk7Ci0gICAgICAgIGFk
ZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQuc25hcHNob3RMZW5ndGgs
IHJlc3VsdC5zbmFwc2hvdEl0ZW0pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGZpbmlzaGVkU2Vh
cmNoaW5nKCkKLSAgICB7Ci0gICAgICAgIC8vIFJlbW92ZSB0aGUgc2VhcmNoUmVzdWx0c1Byb3Bl
cnR5IG5vdyB0aGF0IHRoZSBzZWFyY2ggaXMgZmluaXNoZWQuCi0gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgSW5qZWN0ZWRTY3JpcHQuX3NlYXJjaFJlc3VsdHMubGVuZ3RoOyArK2kpCi0gICAg
ICAgICAgICBkZWxldGUgSW5qZWN0ZWRTY3JpcHQuX3NlYXJjaFJlc3VsdHNbaV1bc2VhcmNoUmVz
dWx0c1Byb3BlcnR5XTsKLSAgICB9Ci0KLSAgICBjb25zdCBtYWluRnJhbWVEb2N1bWVudCA9IGlu
c3BlY3RlZFdpbmRvdy5kb2N1bWVudDsKLSAgICBjb25zdCBzZWFyY2hEb2N1bWVudHMgPSBbbWFp
bkZyYW1lRG9jdW1lbnRdOwotICAgIHZhciBzZWFyY2hGdW5jdGlvbnM7Ci0gICAgaWYgKHRhZ05h
bWVRdWVyeSAmJiBzdGFydFRhZ0ZvdW5kICYmIGVuZFRhZ0ZvdW5kKQotICAgICAgICBzZWFyY2hG
dW5jdGlvbnMgPSBbbWF0Y2hFeGFjdFRhZ05hbWVzLCBtYXRjaFBsYWluVGV4dF07Ci0gICAgZWxz
ZSBpZiAodGFnTmFtZVF1ZXJ5ICYmIHN0YXJ0VGFnRm91bmQpCi0gICAgICAgIHNlYXJjaEZ1bmN0
aW9ucyA9IFttYXRjaFN0YXJ0T2ZUYWdOYW1lcywgbWF0Y2hQbGFpblRleHRdOwotICAgIGVsc2Ug
aWYgKHRhZ05hbWVRdWVyeSAmJiBlbmRUYWdGb3VuZCkgewotICAgICAgICAvLyBGSVhNRTogd2Ug
c2hvdWxkIGhhdmUgYSBtYXRjaEVuZE9mVGFnTmFtZXMgc2VhcmNoIGZ1bmN0aW9uIGlmIGVuZFRh
Z0ZvdW5kIGlzIHRydWUgYnV0IG5vdCBzdGFydFRhZ0ZvdW5kLgotICAgICAgICAvLyBUaGlzIHJl
cXVpcmVzIGVuZHMtd2l0aCgpIHN1cHBvcnQgaW4gWFBhdGgsIFdlYktpdCBvbmx5IHN1cHBvcnRz
IHN0YXJ0cy13aXRoKCkgYW5kIGNvbnRhaW5zKCkuCi0gICAgICAgIHNlYXJjaEZ1bmN0aW9ucyA9
IFttYXRjaFBhcnRpYWxUYWdOYW1lcywgbWF0Y2hQbGFpblRleHRdOwotICAgIH0gZWxzZSBpZiAo
d2hpdGVzcGFjZVRyaW1tZWRRdWVyeSA9PT0gIi8vKiIgfHwgd2hpdGVzcGFjZVRyaW1tZWRRdWVy
eSA9PT0gIioiKSB7Ci0gICAgICAgIC8vIFRoZXNlIHF1ZXJpZXMgd2lsbCBtYXRjaCBldmVyeSBu
b2RlLiBNYXRjaGluZyBldmVyeXRoaW5nIGlzbid0IHVzZWZ1bCBhbmQgY2FuIGJlIHNsb3cgZm9y
IGxhcmdlIHBhZ2VzLAotICAgICAgICAvLyBzbyBsaW1pdCB0aGUgc2VhcmNoIGZ1bmN0aW9ucyBs
aXN0IHRvIHBsYWluIHRleHQgYW5kIGF0dHJpYnV0ZSBtYXRjaGluZy4KLSAgICAgICAgc2VhcmNo
RnVuY3Rpb25zID0gW21hdGNoUGFydGlhbEF0dHJpYnV0ZVZhbHVlcywgbWF0Y2hQbGFpblRleHRd
OwotICAgIH0gZWxzZQotICAgICAgICBzZWFyY2hGdW5jdGlvbnMgPSBbbWF0Y2hFeGFjdEl0ZW1z
LCBtYXRjaFN0eWxlU2VsZWN0b3IsIG1hdGNoUGFydGlhbFRhZ05hbWVzQW5kQXR0cmlidXRlVmFs
dWVzLCBtYXRjaFBsYWluVGV4dCwgbWF0Y2hYUGF0aFF1ZXJ5XTsKLQotICAgIC8vIEZpbmQgYWxs
IGZyYW1lcywgaWZyYW1lcyBhbmQgb2JqZWN0IGVsZW1lbnRzIHRvIHNlYXJjaCB0aGVpciBkb2N1
bWVudHMuCi0gICAgY29uc3Qgc3ViZG9jdW1lbnRSZXN1bHQgPSBtYWluRnJhbWVEb2N1bWVudC5x
dWVyeVNlbGVjdG9yQWxsKCJpZnJhbWUsIGZyYW1lLCBvYmplY3QiKTsKLQotICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc3ViZG9jdW1lbnRSZXN1bHQubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFy
IGVsZW1lbnQgPSBzdWJkb2N1bWVudFJlc3VsdC5pdGVtKGkpOwotICAgICAgICBpZiAoZWxlbWVu
dC5jb250ZW50RG9jdW1lbnQpCi0gICAgICAgICAgICBzZWFyY2hEb2N1bWVudHMucHVzaChlbGVt
ZW50LmNvbnRlbnREb2N1bWVudCk7Ci0gICAgfQotCi0gICAgY29uc3QgcGFuZWwgPSBJbmplY3Rl
ZFNjcmlwdDsKLSAgICB2YXIgZG9jdW1lbnRJbmRleCA9IDA7Ci0gICAgdmFyIHNlYXJjaEZ1bmN0
aW9uSW5kZXggPSAwOwotICAgIHZhciBjaHVua0ludGVydmFsSWRlbnRpZmllciA9IG51bGw7Ci0K
LSAgICAvLyBTcGxpdCB1cCB0aGUgd29yayBpbnRvIGNodW5rcyBzbyB3ZSBkb24ndCBibG9jayB0
aGUgVUkgdGhyZWFkIHdoaWxlIHByb2Nlc3NpbmcuCi0KLSAgICBmdW5jdGlvbiBwcm9jZXNzQ2h1
bmsoKQotICAgIHsKLSAgICAgICAgdmFyIHNlYXJjaERvY3VtZW50ID0gc2VhcmNoRG9jdW1lbnRz
W2RvY3VtZW50SW5kZXhdOwotICAgICAgICB2YXIgc2VhcmNoRnVuY3Rpb24gPSBzZWFyY2hGdW5j
dGlvbnNbc2VhcmNoRnVuY3Rpb25JbmRleF07Ci0KLSAgICAgICAgaWYgKCsrc2VhcmNoRnVuY3Rp
b25JbmRleCA+IHNlYXJjaEZ1bmN0aW9ucy5sZW5ndGgpIHsKLSAgICAgICAgICAgIHNlYXJjaEZ1
bmN0aW9uID0gc2VhcmNoRnVuY3Rpb25zWzBdOwotICAgICAgICAgICAgc2VhcmNoRnVuY3Rpb25J
bmRleCA9IDA7Ci0KLSAgICAgICAgICAgIGlmICgrK2RvY3VtZW50SW5kZXggPiBzZWFyY2hEb2N1
bWVudHMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBhbmVsLl9jdXJyZW50U2VhcmNo
Q2h1bmtJbnRlcnZhbElkZW50aWZpZXIgPT09IGNodW5rSW50ZXJ2YWxJZGVudGlmaWVyKQotICAg
ICAgICAgICAgICAgICAgICBkZWxldGUgcGFuZWwuX2N1cnJlbnRTZWFyY2hDaHVua0ludGVydmFs
SWRlbnRpZmllcjsKLSAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGNodW5rSW50ZXJ2YWxJ
ZGVudGlmaWVyKTsKLSAgICAgICAgICAgICAgICBmaW5pc2hlZFNlYXJjaGluZy5jYWxsKHBhbmVs
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHNlYXJjaERvY3VtZW50ID0gc2VhcmNoRG9jdW1lbnRzW2RvY3VtZW50SW5kZXhdOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHNlYXJjaEZ1bmN0aW9uLmNh
bGwocGFuZWwsIHNlYXJjaERvY3VtZW50KTsKLSAgICAgICAgfSBjYXRjaChlcnIpIHsKLSAgICAg
ICAgICAgIC8vIGlnbm9yZSBhbnkgZXhjZXB0aW9ucy4gdGhlIHF1ZXJ5IG1pZ2h0IGJlIG1hbGZv
cm1lZCwgYnV0IHdlIGFsbG93IHRoYXQuCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgaWYgKHJ1blN5bmNocm9ub3VzbHkpCi0gICAgICAgIHdoaWxlIChwcm9j
ZXNzQ2h1bmsoKSkge30KLSAgICBlbHNlIHsKLSAgICAgICAgcHJvY2Vzc0NodW5rKCk7Ci0gICAg
ICAgIGNodW5rSW50ZXJ2YWxJZGVudGlmaWVyID0gc2V0SW50ZXJ2YWwocHJvY2Vzc0NodW5rLCAy
NSk7Ci0gICAgICAgIEluamVjdGVkU2NyaXB0Ll9jdXJyZW50U2VhcmNoQ2h1bmtJbnRlcnZhbElk
ZW50aWZpZXIgPSBjaHVua0ludGVydmFsSWRlbnRpZmllcjsKLSAgICB9Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLUluamVjdGVkU2NyaXB0LnNlYXJjaENhbmNlbGVkID0gZnVuY3Rpb24oKQotewot
ICAgIGlmIChJbmplY3RlZFNjcmlwdC5fc2VhcmNoUmVzdWx0cykgewotICAgICAgICBjb25zdCBz
ZWFyY2hSZXN1bHRzUHJvcGVydHkgPSBJbmplY3RlZFNjcmlwdC5faW5jbHVkZWRJblNlYXJjaFJl
c3VsdHNQcm9wZXJ0eU5hbWU7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2Vh
cmNoUmVzdWx0cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLl9z
ZWFyY2hSZXN1bHRzW2ldOwotCi0gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHNlYXJjaFJlc3Vs
dHNQcm9wZXJ0eSBzaW5jZSB0aGVyZSBtaWdodCBiZSBhbiB1bmZpbmlzaGVkIHNlYXJjaC4KLSAg
ICAgICAgICAgIGRlbGV0ZSBub2RlW3NlYXJjaFJlc3VsdHNQcm9wZXJ0eV07Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoSW5qZWN0ZWRTY3JpcHQuX2N1cnJlbnRTZWFyY2hDaHVua0ludGVy
dmFsSWRlbnRpZmllcikgewotICAgICAgICBjbGVhckludGVydmFsKEluamVjdGVkU2NyaXB0Ll9j
dXJyZW50U2VhcmNoQ2h1bmtJbnRlcnZhbElkZW50aWZpZXIpOwotICAgICAgICBkZWxldGUgSW5q
ZWN0ZWRTY3JpcHQuX2N1cnJlbnRTZWFyY2hDaHVua0ludGVydmFsSWRlbnRpZmllcjsKLSAgICB9
Ci0gICAgSW5qZWN0ZWRTY3JpcHQuX3NlYXJjaFJlc3VsdHMgPSBbXTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQogSW5qZWN0ZWRTY3JpcHQub3BlbkluSW5zcGVjdGVkV2luZG93ID0gZnVuY3Rpb24o
dXJsKQogewogICAgIC8vIERvbid0IGNhbGwgd2luZG93Lm9wZW4gb24gd3JhcHBlciAtIHBvcHVw
IGJsb2NrZXIgbXV0ZXMgaXQuCkBAIC0xMDI4LDI4ICs3ODUsNSBAQCBJbmplY3RlZFNjcmlwdC5f
Y2xhc3NOYW1lID0gZnVuY3Rpb24ob2JqKQogICAgIH0KIH0KIAotSW5qZWN0ZWRTY3JpcHQuX2Vz
Y2FwZUNoYXJhY3RlcnMgPSBmdW5jdGlvbihzdHIsIGNoYXJzKQotewotICAgIHZhciBmb3VuZENo
YXIgPSBmYWxzZTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIGlmIChzdHIuaW5kZXhPZihjaGFycy5jaGFyQXQoaSkpICE9PSAtMSkgewotICAg
ICAgICAgICAgZm91bmRDaGFyID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKCFmb3VuZENoYXIpCi0gICAgICAgIHJldHVybiBzdHI7Ci0KLSAg
ICB2YXIgcmVzdWx0ID0gIiI7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgaWYgKGNoYXJzLmluZGV4T2Yoc3RyLmNoYXJBdChpKSkgIT09IC0xKQot
ICAgICAgICAgICAgcmVzdWx0ICs9ICJcXCI7Ci0gICAgICAgIHJlc3VsdCArPSBzdHIuY2hhckF0
KGkpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHJldHVybiBJbmplY3RlZFNj
cmlwdDsKIH0pOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVj
dGVkU2NyaXB0QWNjZXNzLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVk
U2NyaXB0QWNjZXNzLmpzCmluZGV4IDI1NTgyNjcuLmMzODgyMTMgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qcworKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuanMKQEAgLTcxLDI5
ICs3MSwxOCBAQCBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIgPSBmdW5jdGlv
bihtZXRob2ROYW1lLCBhc3luYykKIC8vIC0gTWFrZSBzdXJlIGxhc3QgcGFyYW1ldGVyIG9mIGFs
bCB0aGUgSW5qZWN0ZWRTcmlwdEFjY2Vzcy4qIGNhbGxzIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24u
CiAvLyBXZSBrZWVwIHRoZXNlIHNvcnRlZC4KIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxs
SGFuZGxlcigiYWRkSW5zcGVjdGVkTm9kZSIpOwotSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3Rh
bGxIYW5kbGVyKCJhZGRTdHlsZVNlbGVjdG9yIik7Ci1JbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5z
dGFsbEhhbmRsZXIoImFwcGx5U3R5bGVSdWxlVGV4dCIpOwotSW5qZWN0ZWRTY3JpcHRBY2Nlc3Mu
X2luc3RhbGxIYW5kbGVyKCJhcHBseVN0eWxlVGV4dCIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3Mu
X2luc3RhbGxIYW5kbGVyKCJjbGVhckNvbnNvbGVNZXNzYWdlcyIpOwogSW5qZWN0ZWRTY3JpcHRB
Y2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJldmFsdWF0ZSIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3Mu
X2luc3RhbGxIYW5kbGVyKCJldmFsdWF0ZUluQ2FsbEZyYW1lIik7CiBJbmplY3RlZFNjcmlwdEFj
Y2Vzcy5faW5zdGFsbEhhbmRsZXIoImdldENvbXBsZXRpb25zIik7Ci1JbmplY3RlZFNjcmlwdEFj
Y2Vzcy5faW5zdGFsbEhhbmRsZXIoImdldENvbXB1dGVkU3R5bGUiKTsKLUluamVjdGVkU2NyaXB0
QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiZ2V0SW5saW5lU3R5bGUiKTsKIEluamVjdGVkU2NyaXB0
QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiZ2V0Tm9kZVByb3BlcnR5VmFsdWUiKTsKIEluamVjdGVk
U2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiZ2V0UHJvcGVydGllcyIpOwogSW5qZWN0ZWRT
Y3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJnZXRQcm90b3R5cGVzIik7Ci1JbmplY3RlZFNj
cmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoImdldFN0eWxlcyIpOwogSW5qZWN0ZWRTY3JpcHRB
Y2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJvcGVuSW5JbnNwZWN0ZWRXaW5kb3ciKTsKLUluamVjdGVk
U2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigicGVyZm9ybVNlYXJjaCIpOwogSW5qZWN0ZWRT
Y3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJwdXNoTm9kZVRvRnJvbnRlbmQiKTsKIEluamVj
dGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigibm9kZUJ5UGF0aCIpOwotSW5qZWN0ZWRT
Y3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJzZWFyY2hDYW5jZWxlZCIpOwogSW5qZWN0ZWRT
Y3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJzZXRPdXRlckhUTUwiKTsKIEluamVjdGVkU2Ny
aXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigic2V0UHJvcGVydHlWYWx1ZSIpOwotSW5qZWN0ZWRT
Y3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJzZXRTdHlsZVByb3BlcnR5Iik7Ci1JbmplY3Rl
ZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoInNldFN0eWxlVGV4dCIpOwotSW5qZWN0ZWRT
Y3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJ0b2dnbGVTdHlsZUVuYWJsZWQiKTsKIEluamVj
dGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiZXZhbHVhdGVPblNlbGYiKTsKIAogLy8g
U29tZSBtZXRob2RzIGNhbid0IHJ1biBzeW5jaHJvbm91c2x5IGV2ZW4gb24gdGhlIGluamVjdGVk
IHNjcmlwdCBzaWRlIChzdWNoIGFzIERCIHRyYW5zYWN0aW9ucykuCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMKaW5kZXggNDY3MGFm
MS4uN2Q4YzRkNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3Bl
Y3RvckJhY2tlbmRTdHViLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNw
ZWN0b3JCYWNrZW5kU3R1Yi5qcwpAQCAtMjU5LDYgKzI1OSwxNCBAQCBXZWJJbnNwZWN0b3IuSW5z
cGVjdG9yQmFja2VuZFN0dWIucHJvdG90eXBlID0gewogCiAgICAgcmVtb3ZlQWxsU2NyaXB0c1Rv
RXZhbHVhdGVPbkxvYWQ6IGZ1bmN0aW9uKCkKICAgICB7CisgICAgfSwKKworICAgIHBlcmZvcm1T
ZWFyY2g6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgfSwKKworICAgIHNlYXJjaENhbmNlbGVkOiBm
dW5jdGlvbigpCisgICAgewogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNDFiMzYxOC4uNWMw
NTczMiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDYtMTAgIFBhdmVsIEZl
bGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogUG9ydCBwZXJmb3JtU2VhcmNo
IGZyb20gSW5qZWN0ZWRTY3JpcHQgdG8gSW5zcGVjdG9yRE9NQWdlbnQuCisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNDIyCisKKyAgICAgICAgKiBz
cmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanM6CisgICAgICAgIChkZXZ0b29scy5JbnNw
ZWN0b3JCYWNrZW5kSW1wbCk6CisKIDIwMTAtMDYtMDcgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRhbXVyYS4KZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzCmluZGV4IDg2Zjg4
NWEuLmY3NjI1NWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5zcGVjdG9y
Q29udHJvbGxlckltcGwuanMKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JD
b250cm9sbGVySW1wbC5qcwpAQCAtNjEsNiArNjEsNyBAQCBkZXZ0b29scy5JbnNwZWN0b3JCYWNr
ZW5kSW1wbCA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVy
RGVsZWdhdGVfKCJnZXRSZXNvdXJjZUNvbnRlbnQiKTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0
b3JDb250cm9sbGVyRGVsZWdhdGVfKCJoaWdobGlnaHRET01Ob2RlIik7CiAgICAgdGhpcy5pbnN0
YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygiaGlkZURPTU5vZGVIaWdobGlnaHQiKTsK
KyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJwZXJmb3JtU2Vh
cmNoIik7CiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygicmVs
ZWFzZVdyYXBwZXJPYmplY3RHcm91cCIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRy
b2xsZXJEZWxlZ2F0ZV8oInJlbW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkIik7CiAgICAg
dGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygicmVsb2FkUGFnZSIpOwpA
QCAtNjgsNiArNjksNyBAQCBkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbCA9IGZ1bmN0aW9u
KCkKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJyZW1vdmVE
T01TdG9yYWdlSXRlbSIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxl
Z2F0ZV8oInJlbW92ZU5vZGUiKTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVy
RGVsZWdhdGVfKCJzYXZlRnJvbnRlbmRTZXR0aW5ncyIpOworICAgIHRoaXMuaW5zdGFsbEluc3Bl
Y3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInNlYXJjaENhbmNlbGVkIik7CiAgICAgdGhpcy5pbnN0
YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygic2V0QXR0cmlidXRlIik7CiAgICAgdGhp
cy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygic2V0RE9NU3RvcmFnZUl0ZW0i
KTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJzZXRJbmpl
Y3RlZFNjcmlwdFNvdXJjZSIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58449</attachid>
            <date>2010-06-10 23:18:21 -0700</date>
            <delta_ts>2010-06-11 02:18:16 -0700</delta_ts>
            <desc>[PATCH] More imports! (is this going to end?).</desc>
            <filename>perform_search</filename>
            <type>text/plain</type>
            <size>42760</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2ZGQzYWMwLi45OTljYTM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDYt
MTAgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogUG9ydCBw
ZXJmb3JtU2VhcmNoIGZyb20gSW5qZWN0ZWRTY3JpcHQgdG8gSW5zcGVjdG9yRE9NQWdlbnQuCisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNDIyCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvZWxlbWVudHMtcGFuZWwtc2VhcmNoLmh0bWw6CisKIDIwMTAt
MDYtMDggIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdkLiBVcGRhdGVkIHRlc3RfZXhwZWN0YXRpb25zLnR4dCB0byBmb2xsb3cgcjYwODIyCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtcGFuZWwtc2VhcmNoLmh0
bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtcGFuZWwtc2VhcmNoLmh0bWwKaW5k
ZXggNGYxNjJkYi4uZDBkNDI4MyAxMDA3NTUKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Vs
ZW1lbnRzLXBhbmVsLXNlYXJjaC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9lbGVt
ZW50cy1wYW5lbC1zZWFyY2guaHRtbApAQCAtMzEsNyArMzEsNiBAQCBmdW5jdGlvbiBmcm9udGVu
ZF9wZXJmb3JtU2VhcmNoKHRlc3RDb250cm9sbGVyKQogCiAgICAgV2ViSW5zcGVjdG9yLmFkZE5v
ZGVzVG9TZWFyY2hSZXN1bHQgPSBmdW5jdGlvbihub2RlSWRzKQogICAgIHsKLSAgICAgICAgdmFy
IG5vZGVJZHMgPSBub2RlSWRzLnNwbGl0KCIsIik7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbm9kZUlkcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgdmFyIG5vZGUgPSBXZWJJbnNw
ZWN0b3IuZG9tQWdlbnQubm9kZUZvcklkKG5vZGVJZHNbaV0pOwogICAgICAgICAgICAgaWYgKG5v
ZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKQpAQCAtNDEsMTkgKzQwLDE5IEBAIGZ1bmN0
aW9uIGZyb250ZW5kX3BlcmZvcm1TZWFyY2godGVzdENvbnRyb2xsZXIpCiAgICAgICAgIH0KICAg
ICB9CiAgICAgLy8gUGxhaW4gdGV4dC4KLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZh
dWx0KCkucGVyZm9ybVNlYXJjaCgiRm9vIiArICJCYXIiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsK
KyAgICBJbnNwZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goIkZvbyIgKyAiQmFyIiwgdHJ1ZSk7
CiAgICAgLy8gUGFydGlhbCB0ZXh0LgotICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdldERlZmF1
bHQoKS5wZXJmb3JtU2VhcmNoKCJvbyIgKyAiQmEiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsKKyAg
ICBJbnNwZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goIm9vIiArICJCYSIsIHRydWUpOwogICAg
IC8vIFN0YXJ0IHRhZy4KLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZhdWx0KCkucGVy
Zm9ybVNlYXJjaCgiPGlucHUiICsgInQiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsKKyAgICBJbnNw
ZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goIjxpbnB1IiArICJ0IiwgdHJ1ZSk7CiAgICAgLy8g
UGFydGlhbCB0YWcuCi0gICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0RGVmYXVsdCgpLnBlcmZv
cm1TZWFyY2goIm5wdSIgKyAidCIsIHRydWUsIGZ1bmN0aW9uKCkge30pOworICAgIEluc3BlY3Rv
ckJhY2tlbmQucGVyZm9ybVNlYXJjaCgibnB1IiArICJ0IiwgdHJ1ZSk7CiAgICAgLy8gRXhhY3Qg
YXR0cmlidXRlIG5hbWUuCi0gICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0RGVmYXVsdCgpLnBl
cmZvcm1TZWFyY2goInZhbHUiICsgImUiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsKKyAgICBJbnNw
ZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goInZhbHUiICsgImUiLCB0cnVlKTsKICAgICAvLyBF
eGFjdCBhdHRyaWJ1dGUgdmFsPD51ZS4KLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZh
dWx0KCkucGVyZm9ybVNlYXJjaCgiSW4iICsgInB1dFZhIiArICJsIiwgdHJ1ZSwgZnVuY3Rpb24o
KSB7fSk7CisgICAgSW5zcGVjdG9yQmFja2VuZC5wZXJmb3JtU2VhcmNoKCJJbiIgKyAicHV0VmEi
ICsgImwiLCB0cnVlKTsKICAgICAvLyBQYXJ0aWFsIGF0dHJpYnV0ZSB2YWw8PnVlLgotICAgIElu
amVjdGVkU2NyaXB0QWNjZXNzLmdldERlZmF1bHQoKS5wZXJmb3JtU2VhcmNoKCJuIiArICJwdXRW
YSIgKyAibCIsIHRydWUsIGZ1bmN0aW9uKCkge30pOworICAgIEluc3BlY3RvckJhY2tlbmQucGVy
Zm9ybVNlYXJjaCgibiIgKyAicHV0VmEiICsgImwiLCB0cnVlKTsKIAogICAgIHRlc3RDb250cm9s
bGVyLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoZnVuY3Rpb24oKSB7CiAgICAgICAgIHRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoc2VhcmNoUmVzdWx0cyk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDMwNDc4ZWEuLjA2YjE3OTMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDMgQEAKKzIwMTAtMDYtMTAgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2ViIEluc3BlY3RvcjogUG9ydCBwZXJmb3JtU2VhcmNoIGZyb20gSW5qZWN0ZWRTY3JpcHQgdG8g
SW5zcGVjdG9yRE9NQWdlbnQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQwNDIyCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRI
b3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6YWRkTm9kZXNU
b1NlYXJjaFJlc3VsdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6cGVyZm9ybVNlYXJjaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpzZWFyY2hDYW5jZWxlZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZC5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6On5JbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6c2VhcmNoQ2FuY2VsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6Om9uTWF0Y2hKb2JzVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OnJlcG9ydE5vZGVzQXNTZWFyY2hSZXN1bHRzKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGNoSm9iOjp+TWF0
Y2hKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TWF0Y2hKb2I6Ok1hdGNoSm9iKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1hdGNoSm9iOjphZGROb2Rlc1RvUmVzdWx0cyk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kOjphZGROb2Rlc1RvU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2U6OnVwZGF0ZVNjcmlwdE9i
amVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlLnNlYXJjaENhbmNl
bGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZS5wZXJm
b3JtU2VhcmNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlw
ZS5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0luamVjdGVkU2NyaXB0LmpzOgorICAgICAgICAoaW5qZWN0ZWRTY3JpcHRDb25zdHJ1Y3Rvcik6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qczoK
KwogMjAxMC0wNi0wOCAgVmFuZ2VsaXMgS29ra2V2aXMgIDx2YW5nZWxpc0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0SG9zdC5jcHAKaW5kZXggYzU4MDczZC4uNGMzYzdhZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCkBAIC0xMTAsMTIgKzExMCw2IEBAIGxv
bmcgSW5qZWN0ZWRTY3JpcHRIb3N0OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5vZGUs
IGJvb2wgd2l0aENoaWxkcmVuLCBiCiAgICAgcmV0dXJuIGlkOwogfQogCi12b2lkIEluamVjdGVk
U2NyaXB0SG9zdDo6YWRkTm9kZXNUb1NlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIG5vZGVJZHMp
Ci17Ci0gICAgaWYgKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCA9IGluc3BlY3RvckZyb250
ZW5kKCkpCi0gICAgICAgIGZyb250ZW5kLT5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KG5vZGVJZHMp
OwotfQotCiBsb25nIEluamVjdGVkU2NyaXB0SG9zdDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5k
KGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQg
PSBpbnNwZWN0b3JET01BZ2VudCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRIb3N0LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3Qu
aAppbmRleCBiZWZmYzlkLi42NmNmNDFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEhvc3QuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dEhvc3QuaApAQCAtNjksNyArNjksNiBAQCBwdWJsaWM6CiAgICAgTm9kZSogbm9kZUZvcklkKGxv
bmcgbm9kZUlkKTsKICAgICBsb25nIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9kZSwg
Ym9vbCB3aXRoQ2hpbGRyZW4sIGJvb2wgc2VsZWN0SW5VSSk7CiAKLSAgICB2b2lkIGFkZE5vZGVz
VG9TZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBub2RlSWRzKTsKICAgICBsb25nIHB1c2hOb2Rl
QnlQYXRoVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHBhdGgpOwogCiAjaWYgRU5BQkxFKERBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0Lmlk
bCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5pZGwKaW5kZXggOGIyNDE1
Ny4uNWE0Y2UxOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRI
b3N0LmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaWRsCkBA
IC0zOCw3ICszOCw2IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0
IG5vZGVGb3JJZChpbiBsb25nIG5vZGVJZCk7CiAgICAgICAgIFtDdXN0b21dIGludCBwdXNoTm9k
ZVBhdGhUb0Zyb250ZW5kKGluIERPTU9iamVjdCBub2RlLCBpbiBib29sZWFuIHdpdGhDaGlsZHJl
biwgaW4gYm9vbGVhbiBzZWxlY3RJblVJKTsKIAotICAgICAgICB2b2lkIGFkZE5vZGVzVG9TZWFy
Y2hSZXN1bHQoaW4gRE9NU3RyaW5nIG5vZGVJZHMpOwogICAgICAgICBsb25nIHB1c2hOb2RlQnlQ
YXRoVG9Gcm9udGVuZChpbiBET01TdHJpbmcgcGF0aCk7CiAKICNpZiBkZWZpbmVkKEVOQUJMRV9K
QVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcAppbmRleCAzNmY0MWI4Li44MTRlNWQyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcApAQCAtMzUxLDYgKzM1MSwxOCBAQCB2
b2lkIEluc3BlY3RvckJhY2tlbmQ6OmNoYW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9k
ZUlkLCBjb25zdCBBdG9taWNTdHJpbgogICAgICAgICBkb21BZ2VudC0+Y2hhbmdlVGFnTmFtZShj
YWxsSWQsIG5vZGVJZCwgdGFnTmFtZSwgZXhwYW5kZWQpOwogfQogCit2b2lkIEluc3BlY3RvckJh
Y2tlbmQ6OnBlcmZvcm1TZWFyY2goY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCBydW5TeW5jaHJv
bm91c2x5KQoreworICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0
b3JET01BZ2VudCgpKQorICAgICAgICBkb21BZ2VudC0+cGVyZm9ybVNlYXJjaChxdWVyeSwgcnVu
U3luY2hyb25vdXNseSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c2VhcmNoQ2FuY2Vs
ZWQoKQoreworICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JE
T01BZ2VudCgpKQorICAgICAgICBkb21BZ2VudC0+c2VhcmNoQ2FuY2VsZWQoKTsKK30KKwogdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBi
b29sIGF1dGhvck9ubHkpCiB7CiAgICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9
IGluc3BlY3RvckRPTUFnZW50KCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKaW5k
ZXggMGViOGU0Yy4uYzg4YzIzYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApA
QCAtMTE2LDYgKzExNiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvcHlOb2RlKGxvbmcgbm9kZUlk
KTsKICAgICB2b2lkIHJlbW92ZU5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKICAgICB2
b2lkIGNoYW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25zdCBBdG9taWNT
dHJpbmcmIHRhZ05hbWUsIGJvb2wgZXhwYW5kZWQpOworICAgIHZvaWQgcGVyZm9ybVNlYXJjaChj
b25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sIHJ1blN5bmNocm9ub3VzbHkpOworICAgIHZvaWQgc2Vh
cmNoQ2FuY2VsZWQoKTsKIAogICAgIHZvaWQgZ2V0U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5v
ZGVJZCwgYm9vbCBhdXRoT25seSk7CiAgICAgdm9pZCBnZXRBbGxTdHlsZXMobG9uZyBjYWxsSWQp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAppbmRleCBlOGNmZGI5Li5lZThh
NTg1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbApAQCAtOTEsNiArOTEs
OSBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIHZvaWQgY29weU5vZGUoaW4gbG9uZyBub2RlSWQp
OwogICAgICAgICB2b2lkIHJlbW92ZU5vZGUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlk
KTsKICAgICAgICAgdm9pZCBjaGFuZ2VUYWdOYW1lKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIG5v
ZGVJZCwgaW4gRE9NU3RyaW5nIG5ld1RhZ05hbWUsIGluIGJvb2xlYW4gZXhwYW5kZWQpOworICAg
ICAgICB2b2lkIHBlcmZvcm1TZWFyY2goaW4gRE9NU3RyaW5nIHF1ZXJ5LCBpbiBib29sZWFuIHJ1
blN5bmNocm9ub3VzbHkpOworICAgICAgICB2b2lkIHNlYXJjaENhbmNlbGVkKCk7CisKICAgICAg
ICAgdm9pZCBoaWdobGlnaHRET01Ob2RlKGluIGxvbmcgbm9kZUlkKTsKICAgICAgICAgdm9pZCBo
aWRlRE9NTm9kZUhpZ2hsaWdodCgpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAKaW5kZXggMzM4ZGMzMy4uMzQwN2UyNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmNwcApAQCAtNjUsMTggKzY1LDEyMSBAQAogI2luY2x1ZGUgIlN0eWxlU2hlZXRM
aXN0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogCisjaWYgRU5BQkxFKFhQQVRIKQorI2luY2x1ZGUg
IlhQYXRoUmVzdWx0LmgiCisjZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIHsKKworY2xhc3MgTWF0Y2hFeGFjdElkSm9iIDog
cHVibGljIFdlYkNvcmU6Ok1hdGNoSm9iIHsKK3B1YmxpYzoKKyAgICBNYXRjaEV4YWN0SWRKb2Io
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA6IFdlYkNvcmU6Ok1hdGNo
Sm9iKGRvY3VtZW50LCBxdWVyeSkgeyB9CisgICAgdmlydHVhbCB+TWF0Y2hFeGFjdElkSm9iKCkg
eyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbWF0Y2goTGlzdEhhc2hTZXQ8Tm9k
ZSo+JiByZXN1bHRDb2xsZWN0b3IpCisgICAgeworICAgICAgICBpZiAobV9xdWVyeS5pc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IG1f
ZG9jdW1lbnQtPmdldEVsZW1lbnRCeUlkKG1fcXVlcnkpOworICAgICAgICBpZiAoZWxlbWVudCkK
KyAgICAgICAgICAgIHJlc3VsdENvbGxlY3Rvci5hZGQoZWxlbWVudCk7CisgICAgfQorfTsKKwor
Y2xhc3MgTWF0Y2hFeGFjdENsYXNzTmFtZXNKb2IgOiBwdWJsaWMgV2ViQ29yZTo6TWF0Y2hKb2Ig
eworcHVibGljOgorICAgIE1hdGNoRXhhY3RDbGFzc05hbWVzSm9iKERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgOiBXZWJDb3JlOjpNYXRjaEpvYihkb2N1bWVudCwgcXVl
cnkpIHsgfQorICAgIHZpcnR1YWwgfk1hdGNoRXhhY3RDbGFzc05hbWVzSm9iKCkgeyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgbWF0Y2goTGlzdEhhc2hTZXQ8Tm9kZSo+JiByZXN1bHRDb2xsZWN0b3Ip
CisgICAgeworICAgICAgICBpZiAoIW1fcXVlcnkuaXNFbXB0eSgpKQorICAgICAgICAgICAgYWRk
Tm9kZXNUb1Jlc3VsdHMobV9kb2N1bWVudC0+Z2V0RWxlbWVudHNCeUNsYXNzTmFtZShtX3F1ZXJ5
KSwgcmVzdWx0Q29sbGVjdG9yKTsKKyAgICB9Cit9OworCitjbGFzcyBNYXRjaEV4YWN0VGFnTmFt
ZXNKb2IgOiBwdWJsaWMgV2ViQ29yZTo6TWF0Y2hKb2IgeworcHVibGljOgorICAgIE1hdGNoRXhh
Y3RUYWdOYW1lc0pvYihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIDog
V2ViQ29yZTo6TWF0Y2hKb2IoZG9jdW1lbnQsIHF1ZXJ5KSB7IH0KKyAgICB2aXJ0dWFsIH5NYXRj
aEV4YWN0VGFnTmFtZXNKb2IoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBtYXRjaChMaXN0SGFz
aFNldDxOb2RlKj4mIHJlc3VsdENvbGxlY3RvcikKKyAgICB7CisgICAgICAgIGlmICghbV9xdWVy
eS5pc0VtcHR5KCkpCisgICAgICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cyhtX2RvY3VtZW50LT5n
ZXRFbGVtZW50c0J5TmFtZShtX3F1ZXJ5KSwgcmVzdWx0Q29sbGVjdG9yKTsKKyAgICB9Cit9Owor
CitjbGFzcyBNYXRjaFF1ZXJ5U2VsZWN0b3JBbGxKb2IgOiBwdWJsaWMgV2ViQ29yZTo6TWF0Y2hK
b2IgeworcHVibGljOgorICAgIE1hdGNoUXVlcnlTZWxlY3RvckFsbEpvYihEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIDogV2ViQ29yZTo6TWF0Y2hKb2IoZG9jdW1lbnQs
IHF1ZXJ5KSB7IH0KKyAgICB2aXJ0dWFsIH5NYXRjaFF1ZXJ5U2VsZWN0b3JBbGxKb2IoKSB7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBtYXRjaChMaXN0SGFzaFNldDxOb2RlKj4mIHJlc3VsdENvbGxl
Y3RvcikKKyAgICB7CisgICAgICAgIGlmIChtX3F1ZXJ5LmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgUmVmUHRy
PE5vZGVMaXN0PiBsaXN0ID0gbV9kb2N1bWVudC0+cXVlcnlTZWxlY3RvckFsbChtX3F1ZXJ5LCBl
Yyk7CisgICAgICAgIGlmICghZWMpCisgICAgICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cyhsaXN0
LCByZXN1bHRDb2xsZWN0b3IpOworICAgIH0KK307CisKK2NsYXNzIE1hdGNoWFBhdGhKb2IgOiBw
dWJsaWMgV2ViQ29yZTo6TWF0Y2hKb2IgeworcHVibGljOgorICAgIE1hdGNoWFBhdGhKb2IoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA6IFdlYkNvcmU6Ok1hdGNoSm9i
KGRvY3VtZW50LCBxdWVyeSkgeyB9CisgICAgdmlydHVhbCB+TWF0Y2hYUGF0aEpvYigpIHsgfQor
CisgICAgdmlydHVhbCB2b2lkIG1hdGNoKExpc3RIYXNoU2V0PE5vZGUqPiYgcmVzdWx0Q29sbGVj
dG9yKQorICAgIHsKKyNpZiBFTkFCTEUoWFBBVEgpCisgICAgICAgIGlmIChtX3F1ZXJ5LmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICAgICAgUmVmUHRyPFhQYXRoUmVzdWx0PiByZXN1bHQgPSBtX2RvY3VtZW50LT5ldmFs
dWF0ZShtX3F1ZXJ5LCBtX2RvY3VtZW50LmdldCgpLCAwLCBYUGF0aFJlc3VsdDo6T1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEUsIDAsIGVjKTsKKyAgICAgICAgaWYgKGVjIHx8ICFyZXN1bHQpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplID0gcmVzdWx0
LT5zbmFwc2hvdExlbmd0aChlYyk7CisgICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsg
IWVjICYmIGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSByZXN1bHQt
PnNuYXBzaG90SXRlbShpLCBlYyk7CisgICAgICAgICAgICBpZiAoIWVjKQorICAgICAgICAgICAg
ICAgIHJlc3VsdENvbGxlY3Rvci5hZGQobm9kZSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0K
K307CisKK2NsYXNzIE1hdGNoUGxhaW5UZXh0Sm9iIDogcHVibGljIE1hdGNoWFBhdGhKb2Igewor
cHVibGljOgorICAgIE1hdGNoUGxhaW5UZXh0Sm9iKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
U3RyaW5nJiBxdWVyeSkgOiBNYXRjaFhQYXRoSm9iKGRvY3VtZW50LCBxdWVyeSkKKyAgICB7Cisg
ICAgICAgIG1fcXVlcnkgPSAiLy90ZXh0KClbY29udGFpbnMoLiwgJyIgKyBtX3F1ZXJ5ICsgIicp
XSB8IC8vY29tbWVudCgpW2NvbnRhaW5zKC4sICciICsgbV9xdWVyeSArICInKV0iOworICAgIH0K
KyAgICB2aXJ0dWFsIH5NYXRjaFBsYWluVGV4dEpvYigpIHsgfQorfTsKKworfQorCiBJbnNwZWN0
b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQoSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3Jl
LCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAgICAgOiBFdmVudExpc3RlbmVyKEluc3Bl
Y3RvckRPTUFnZW50VHlwZSkKICAgICAsIG1fY3NzU3RvcmUoY3NzU3RvcmUpCiAgICAgLCBtX2Zy
b250ZW5kKGZyb250ZW5kKQogICAgICwgbV9sYXN0Tm9kZUlkKDEpCisgICAgLCBtX21hdGNoSm9i
c1RpbWVyKHRoaXMsICZJbnNwZWN0b3JET01BZ2VudDo6b25NYXRjaEpvYnNUaW1lcikKIHsKIH0K
IApAQCAtODcsNiArMTkwLDcgQEAgSW5zcGVjdG9yRE9NQWdlbnQ6On5JbnNwZWN0b3JET01BZ2Vu
dCgpCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc2V0KCkKIHsKKyAgICBzZWFyY2hDYW5j
ZWxlZCgpOwogICAgIGRpc2NhcmRCaW5kaW5ncygpOwogCiAgICAgTGlzdEhhc2hTZXQ8UmVmUHRy
PERvY3VtZW50PiA+IGNvcHkgPSBtX2RvY3VtZW50czsKQEAgLTUwNiw2ICs2MTAsMTE0IEBAIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nIGNhbGxJ
ZCwgbG9uZyBub2RlSWQpCiAgICAgbV9mcm9udGVuZC0+ZGlkR2V0RXZlbnRMaXN0ZW5lcnNGb3JO
b2RlKGNhbGxJZCwgbm9kZUlkLCBsaXN0ZW5lcnNBcnJheSk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goY29uc3QgU3RyaW5nJiB3aGl0ZXNwYWNlVHJpbW1lZFF1
ZXJ5LCBib29sIHJ1blN5bmNocm9ub3VzbHkpCit7CisgICAgLy8gRklYTUU6IEZldyB0aGluZ3Mg
YXJlIG1pc3NpbmcgaGVyZToKKyAgICAvLyAxKSBTZWFyY2ggd29ya3Mgd2l0aCBub2RlIGdyYW51
bGFyaXR5IC0gbnVtYmVyIG9mIG1hdGNoZXMgd2l0aGluIG5vZGUgaXMgbm90IGNhbGN1bGF0ZWQu
CisgICAgLy8gMikgVGhlcmUgaXMgbm8gbmVlZCB0byBwdXNoIGFsbCBzZWFyY2ggcmVzdWx0cyB0
byB0aGUgZnJvbnQtZW5kIGF0IGEgdGltZSwgcHVzaGluZyBuZXh0IC8gcHJldmlvdXMgcmVzdWx0
CisgICAgLy8gICAgaXMgc3VmZmljaWVudC4KKworICAgIGludCBxdWVyeUxlbmd0aCA9IHdoaXRl
c3BhY2VUcmltbWVkUXVlcnkubGVuZ3RoKCk7CisgICAgYm9vbCBzdGFydFRhZ0ZvdW5kID0gIXdo
aXRlc3BhY2VUcmltbWVkUXVlcnkuZmluZCgnPCcpOworICAgIGJvb2wgZW5kVGFnRm91bmQgPSB3
aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LnJldmVyc2VGaW5kKCc+JykgKyAxID09IHF1ZXJ5TGVuZ3Ro
OworCisgICAgU3RyaW5nIHRhZ05hbWVRdWVyeSA9IHdoaXRlc3BhY2VUcmltbWVkUXVlcnk7Cisg
ICAgaWYgKHN0YXJ0VGFnRm91bmQgfHwgZW5kVGFnRm91bmQpCisgICAgICAgIHRhZ05hbWVRdWVy
eSA9IHRhZ05hbWVRdWVyeS5zdWJzdHJpbmcoc3RhcnRUYWdGb3VuZCA/IDEgOiAwLCBlbmRUYWdG
b3VuZCA/IHF1ZXJ5TGVuZ3RoIC0gMSA6IHF1ZXJ5TGVuZ3RoKTsKKyAgICBpZiAoIURvY3VtZW50
Ojppc1ZhbGlkTmFtZSh0YWdOYW1lUXVlcnkpKQorICAgICAgICB0YWdOYW1lUXVlcnkgPSAiIjsK
KworICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lUXVlcnkgPSB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5
OworICAgIGlmICghRG9jdW1lbnQ6OmlzVmFsaWROYW1lKGF0dHJpYnV0ZU5hbWVRdWVyeSkpCisg
ICAgICAgIGF0dHJpYnV0ZU5hbWVRdWVyeSA9ICIiOworCisgICAgU3RyaW5nIGVzY2FwZWRRdWVy
eSA9IHdoaXRlc3BhY2VUcmltbWVkUXVlcnk7CisgICAgZXNjYXBlZFF1ZXJ5LnJlcGxhY2UoIici
LCAiXFwnIik7CisgICAgU3RyaW5nIGVzY2FwZWRUYWdOYW1lUXVlcnkgPSB0YWdOYW1lUXVlcnk7
CisgICAgZXNjYXBlZFRhZ05hbWVRdWVyeS5yZXBsYWNlKCInIiwgIlxcJyIpOworCisgICAgLy8g
RmluZCBhbGwgZnJhbWVzLCBpZnJhbWVzIGFuZCBvYmplY3QgZWxlbWVudHMgdG8gc2VhcmNoIHRo
ZWlyIGRvY3VtZW50cy4KKyAgICBWZWN0b3I8RG9jdW1lbnQqPiBkb2N1bWVudHM7CisgICAgZG9j
dW1lbnRzLmFwcGVuZChtYWluRnJhbWVEb2N1bWVudCgpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIFJlZlB0cjxOb2RlTGlzdD4gZnJhbWVPd25lcnMgPSBtYWluRnJhbWVEb2N1
bWVudCgpLT5xdWVyeVNlbGVjdG9yQWxsKCJpZnJhbWUsIGZyYW1lLCBvYmplY3QiLCBlYyk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWVjICYmIGZyYW1lT3duZXJzICYmIGkgPCBmcmFtZU93
bmVycy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBOb2RlKiBub2RlID0gZnJhbWVPd25lcnMt
Pml0ZW0oaSk7CisgICAgICAgIGlmIChub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpIHsKKyAg
ICAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogZnJhbWVPd25lciA9IHN0YXRpY19jYXN0
PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KG5vZGUpOworICAgICAgICAgICAgaWYgKGZyYW1lT3du
ZXItPmNvbnRlbnREb2N1bWVudCgpKQorICAgICAgICAgICAgICAgIGRvY3VtZW50cy5hcHBlbmQo
ZnJhbWVPd25lci0+Y29udGVudERvY3VtZW50KCkpOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gQ2xlYXIgcGVuZGluZyBqb2JzLgorICAgIHNlYXJjaENhbmNlbGVkKCk7CisKKyAgICAvLyBQ
b3B1bGF0ZSBuZXcgam9icy4KKyAgICBmb3IgKFZlY3RvcjxEb2N1bWVudCo+OjppdGVyYXRvciBp
dCA9IGRvY3VtZW50cy5iZWdpbigpOyBpdCAhPSBkb2N1bWVudHMuZW5kKCk7ICsraXQpIHsKKyAg
ICAgICAgaWYgKCF0YWdOYW1lUXVlcnkuaXNFbXB0eSgpICYmIHN0YXJ0VGFnRm91bmQgJiYgZW5k
VGFnRm91bmQpIHsKKyAgICAgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1h
dGNoRXhhY3RUYWdOYW1lc0pvYigqaXQsIHRhZ05hbWVRdWVyeSkpOworICAgICAgICAgICAgbV9w
ZW5kaW5nTWF0Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hQbGFpblRleHRKb2IoKml0LCBlc2NhcGVk
UXVlcnkpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCF0YWdOYW1lUXVlcnkuaXNFbXB0eSgpICYmIHN0YXJ0VGFnRm91bmQpIHsKKyAgICAgICAgICAg
IG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoWFBhdGhKb2IoKml0LCAiLy8qW3N0
YXJ0cy13aXRoKG5hbWUoKSwgJyIgKyBlc2NhcGVkVGFnTmFtZVF1ZXJ5ICsgIicpXSIpKTsKKyAg
ICAgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoUGxhaW5UZXh0Sm9i
KCppdCwgZXNjYXBlZFF1ZXJ5KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICghdGFnTmFtZVF1ZXJ5LmlzRW1wdHkoKSAmJiBlbmRUYWdGb3VuZCkgewor
ICAgICAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBoYXZlIGEgbWF0Y2hFbmRPZlRhZ05hbWVz
IHNlYXJjaCBmdW5jdGlvbiBpZiBlbmRUYWdGb3VuZCBpcyB0cnVlIGJ1dCBub3Qgc3RhcnRUYWdG
b3VuZC4KKyAgICAgICAgICAgIC8vIFRoaXMgcmVxdWlyZXMgZW5kcy13aXRoKCkgc3VwcG9ydCBp
biBYUGF0aCwgV2ViS2l0IG9ubHkgc3VwcG9ydHMgc3RhcnRzLXdpdGgoKSBhbmQgY29udGFpbnMo
KS4KKyAgICAgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoWFBhdGhK
b2IoKml0LCAiLy8qW2NvbnRhaW5zKG5hbWUoKSwgJyIgKyBlc2NhcGVkVGFnTmFtZVF1ZXJ5ICsg
IicpXSIpKTsKKyAgICAgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNo
UGxhaW5UZXh0Sm9iKCppdCwgZXNjYXBlZFF1ZXJ5KSk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgbWF0Y2hlc0V2ZXJ5Tm9kZSA9IHdoaXRlc3BhY2VU
cmltbWVkUXVlcnkgPT0gIi8vKiIgfHwgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSA9PSAiKiI7Cisg
ICAgICAgIGlmIChtYXRjaGVzRXZlcnlOb2RlKSB7CisgICAgICAgICAgICAvLyBUaGVzZSBxdWVy
aWVzIHdpbGwgbWF0Y2ggZXZlcnkgbm9kZS4gTWF0Y2hpbmcgZXZlcnl0aGluZyBpc24ndCB1c2Vm
dWwgYW5kIGNhbiBiZSBzbG93IGZvciBsYXJnZSBwYWdlcywKKyAgICAgICAgICAgIC8vIHNvIGxp
bWl0IHRoZSBzZWFyY2ggZnVuY3Rpb25zIGxpc3QgdG8gcGxhaW4gdGV4dCBhbmQgYXR0cmlidXRl
IG1hdGNoaW5nIGZvciB0aGVzZS4KKyAgICAgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBl
bmQobmV3IE1hdGNoWFBhdGhKb2IoKml0LCAiLy8qW2NvbnRhaW5zKEAqLCAnIiArIGVzY2FwZWRR
dWVyeSArICInKV0iKSk7CisgICAgICAgICAgICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5l
dyBNYXRjaFBsYWluVGV4dEpvYigqaXQsIGVzY2FwZWRRdWVyeSkpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBtX3BlbmRpbmdNYXRjaEpv
YnMuYXBwZW5kKG5ldyBNYXRjaEV4YWN0SWRKb2IoKml0LCB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5
KSk7CisgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoRXhhY3RDbGFz
c05hbWVzSm9iKCppdCwgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSkpOworICAgICAgICBtX3BlbmRp
bmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBNYXRjaEV4YWN0VGFnTmFtZXNKb2IoKml0LCB0YWdOYW1l
UXVlcnkpKTsKKyAgICAgICAgbV9wZW5kaW5nTWF0Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hRdWVy
eVNlbGVjdG9yQWxsSm9iKCppdCwgIlsiICsgYXR0cmlidXRlTmFtZVF1ZXJ5ICsgIl0iKSk7Cisg
ICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoUXVlcnlTZWxlY3RvckFs
bEpvYigqaXQsIHdoaXRlc3BhY2VUcmltbWVkUXVlcnkpKTsKKyAgICAgICAgbV9wZW5kaW5nTWF0
Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hYUGF0aEpvYigqaXQsICIvLypbY29udGFpbnMoQCosICci
ICsgZXNjYXBlZFF1ZXJ5ICsgIicpXSIpKTsKKyAgICAgICAgaWYgKCF0YWdOYW1lUXVlcnkuaXNF
bXB0eSgpKQorICAgICAgICAgICAgbV9wZW5kaW5nTWF0Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hY
UGF0aEpvYigqaXQsICIvLypbY29udGFpbnMobmFtZSgpLCAnIiArIGVzY2FwZWRUYWdOYW1lUXVl
cnkgKyAiJyldIikpOworICAgICAgICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBNYXRj
aFBsYWluVGV4dEpvYigqaXQsIGVzY2FwZWRRdWVyeSkpOworICAgICAgICBtX3BlbmRpbmdNYXRj
aEpvYnMuYXBwZW5kKG5ldyBNYXRjaFhQYXRoSm9iKCppdCwgd2hpdGVzcGFjZVRyaW1tZWRRdWVy
eSkpOworICAgIH0KKworICAgIGlmIChydW5TeW5jaHJvbm91c2x5KSB7CisgICAgICAgIC8vIEZv
ciB0ZXN0cy4KKyAgICAgICAgTGlzdEhhc2hTZXQ8Tm9kZSo+IHJlc3VsdENvbGxlY3RvcjsKKyAg
ICAgICAgZm9yIChEZXF1ZTxNYXRjaEpvYio+OjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ01hdGNo
Sm9icy5iZWdpbigpOyBpdCAhPSBtX3BlbmRpbmdNYXRjaEpvYnMuZW5kKCk7ICsraXQpCisgICAg
ICAgICAgICAoKml0KS0+bWF0Y2gocmVzdWx0Q29sbGVjdG9yKTsKKyAgICAgICAgcmVwb3J0Tm9k
ZXNBc1NlYXJjaFJlc3VsdHMocmVzdWx0Q29sbGVjdG9yKTsKKyAgICAgICAgc2VhcmNoQ2FuY2Vs
ZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX21hdGNoSm9ic1RpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKK30KKwordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2VhcmNoQ2FuY2VsZWQo
KQoreworICAgIGlmIChtX21hdGNoSm9ic1RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fbWF0
Y2hKb2JzVGltZXIuc3RvcCgpOworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3BlbmRpbmdNYXRjaEpv
YnMpOworICAgIG1fcGVuZGluZ01hdGNoSm9icy5jbGVhcigpOworICAgIG1fc2VhcmNoUmVzdWx0
cy5jbGVhcigpOworfQorCiBTdHJpbmcgSW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50VVJMU3Ry
aW5nKERvY3VtZW50KiBkb2N1bWVudCkgY29uc3QKIHsKICAgICBpZiAoIWRvY3VtZW50IHx8IGRv
Y3VtZW50LT51cmwoKS5pc051bGwoKSkKQEAgLTEzMzAsNiArMTU0MiwzNyBAQCBDU1NTdHlsZVNo
ZWV0KiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0UGFyZW50U3R5bGVTaGVldChDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZQogICAgIHJldHVybiBwYXJlbnRTdHlsZVNoZWV0OwogfQogCit2b2lkIElu
c3BlY3RvckRPTUFnZW50Ojpvbk1hdGNoSm9ic1RpbWVyKFRpbWVyPEluc3BlY3RvckRPTUFnZW50
PiopCit7CisgICAgaWYgKCFtX3BlbmRpbmdNYXRjaEpvYnMuc2l6ZSgpKSB7CisgICAgICAgIHNl
YXJjaENhbmNlbGVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBMaXN0SGFzaFNl
dDxOb2RlKj4gcmVzdWx0Q29sbGVjdG9yOworICAgIE1hdGNoSm9iKiBqb2IgPSBtX3BlbmRpbmdN
YXRjaEpvYnMuZmlyc3QoKTsKKyAgICBtX3BlbmRpbmdNYXRjaEpvYnMucmVtb3ZlRmlyc3QoKTsK
KyAgICBqb2ItPm1hdGNoKHJlc3VsdENvbGxlY3Rvcik7CisgICAgZGVsZXRlIGpvYjsKKworICAg
IHJlcG9ydE5vZGVzQXNTZWFyY2hSZXN1bHRzKHJlc3VsdENvbGxlY3Rvcik7CisKKyAgICBtX21h
dGNoSm9ic1RpbWVyLnN0YXJ0T25lU2hvdCgwLjAyNSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OnJlcG9ydE5vZGVzQXNTZWFyY2hSZXN1bHRzKExpc3RIYXNoU2V0PE5vZGUqPiYgcmVz
dWx0Q29sbGVjdG9yKQoreworICAgIFNjcmlwdEFycmF5IG5vZGVJZHMgPSBtX2Zyb250ZW5kLT5u
ZXdTY3JpcHRBcnJheSgpOworICAgIGludCBpbmRleCA9IDA7CisgICAgZm9yIChMaXN0SGFzaFNl
dDxOb2RlKj46Oml0ZXJhdG9yIGl0ID0gcmVzdWx0Q29sbGVjdG9yLmJlZ2luKCk7IGl0ICE9IHJl
c3VsdENvbGxlY3Rvci5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAobV9zZWFyY2hSZXN1bHRz
LmNvbnRhaW5zKCppdCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9zZWFyY2hS
ZXN1bHRzLmFkZCgqaXQpOworICAgICAgICBub2RlSWRzLnNldChpbmRleCsrLCBzdGF0aWNfY2Fz
dDxsb25nIGxvbmc+KHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoKml0KSkpOworICAgIH0KKyAgICBt
X2Zyb250ZW5kLT5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KG5vZGVJZHMpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggZjg5MjViNS4uMzBhYmI0YiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0zMSwxMyArMzEsMTcgQEAKICNkZWZpbmUg
SW5zcGVjdG9yRE9NQWdlbnRfaAogCiAjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZl
bnRUYXJnZXQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDU1NTdG9yZS5oIgorI2luY2x1ZGUgIk5v
ZGVMaXN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0QXJyYXkuaCIKICNpbmNsdWRlICJTY3JpcHRPYmpl
Y3QuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCiAKKyNp
bmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC01Myw3ICs1
Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDU1NTdHlsZVNoZWV0OwogICAg
IGNsYXNzIEVsZW1lbnQ7CiAgICAgY2xhc3MgRXZlbnQ7Ci0gICAgY2xhc3MgRG9jdW1lbnQ7CiAg
ICAgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiAgICAgY2xhc3MgTmFtZU5vZGVNYXA7CiAgICAg
Y2xhc3MgTm9kZTsKQEAgLTcyLDYgKzc1LDI2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgY29uc3QgRXZlbnRMaXN0ZW5lclZlY3RvciBldmVudExpc3RlbmVyVmVjdG9yOwogICAgIH07
CiAKKyAgICBjbGFzcyBNYXRjaEpvYiB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZv
aWQgbWF0Y2goTGlzdEhhc2hTZXQ8Tm9kZSo+JiByZXN1bHRDb2xsZWN0b3IpID0gMDsKKyAgICAg
ICAgdmlydHVhbCB+TWF0Y2hKb2IoKSB7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgTWF0
Y2hKb2IoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHF1ZXJ5KQorICAgICAgICAg
ICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICAgICAgICAgLCBtX3F1ZXJ5KHF1ZXJ5KSB7
IH0KKworICAgICAgICB2b2lkIGFkZE5vZGVzVG9SZXN1bHRzKFBhc3NSZWZQdHI8Tm9kZUxpc3Q+
IG5vZGVzLCBMaXN0SGFzaFNldDxOb2RlKj4mIHJlc3VsdENvbGxlY3RvcikKKyAgICAgICAgewor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgbm9kZXMgJiYgaSA8IG5vZGVzLT5sZW5n
dGgoKTsgKytpKQorICAgICAgICAgICAgICAgIHJlc3VsdENvbGxlY3Rvci5hZGQobm9kZXMtPml0
ZW0oaSkpOworICAgICAgICB9CisKKyAgICAgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50
OworICAgICAgICBTdHJpbmcgbV9xdWVyeTsKKyAgICB9OworCiAgICAgY2xhc3MgSW5zcGVjdG9y
RE9NQWdlbnQgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CiAgICAgcHVibGljOgogICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JET01BZ2VudD4gY3JlYXRlKEluc3BlY3RvckNTU1N0
b3JlKiBjc3NTdG9yZSwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQpAQCAtMTAxLDYgKzEy
NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjaGFuZ2VUYWdOYW1lKGxv
bmcgY2FsbElkLCBsb25nIG5vZGVJZCwgY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBib29s
IGV4cGFuZGVkKTsKICAgICAgICAgdm9pZCBzZXRUZXh0Tm9kZVZhbHVlKGxvbmcgY2FsbElkLCBs
b25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgICAgIHZvaWQgZ2V0RXZlbnRM
aXN0ZW5lcnNGb3JOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCk7CisgICAgICAgIHZvaWQg
cGVyZm9ybVNlYXJjaChjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIGJvb2wg
cnVuU3luY2hyb25vdXNseSk7CisgICAgICAgIHZvaWQgc2VhcmNoQ2FuY2VsZWQoKTsKIAogICAg
ICAgICAvLyBNZXRob2RzIGNhbGxlZCBmcm9tIHRoZSBmcm9udGVuZCBmb3IgQ1NTIHN0eWxlcyBp
bnNwZWN0aW9uLgogICAgICAgICB2b2lkIGdldFN0eWxlcyhsb25nIGNhbGxJZCwgbG9uZyBub2Rl
SWQsIGJvb2wgYXV0aG9yT25seSk7CkBAIC0xNjUsNiArMTkwLDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBTdHJpbmcgZG9jdW1lbnRVUkxTdHJpbmcoRG9jdW1lbnQqIGRvY3VtZW50
KSBjb25zdDsKICAgICAgICAgSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3JlKCkgeyByZXR1cm4g
bV9jc3NTdG9yZTsgfQogCisgICAgICAgIHZvaWQgb25NYXRjaEpvYnNUaW1lcihUaW1lcjxJbnNw
ZWN0b3JET01BZ2VudD4qKTsKKyAgICAgICAgdm9pZCByZXBvcnROb2Rlc0FzU2VhcmNoUmVzdWx0
cyhMaXN0SGFzaFNldDxOb2RlKj4mIHJlc3VsdENvbGxlY3Rvcik7CisKICAgICAgICAgU2NyaXB0
T2JqZWN0IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGJvb2wgYmlu
ZCk7CiAgICAgICAgIHZvaWQgcG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKENTU1N0
eWxlRGVjbGFyYXRpb24qLCBTY3JpcHRPYmplY3QmIHJlc3VsdCk7CiAgICAgICAgIFNjcmlwdEFy
cmF5IGJ1aWxkQXJyYXlGb3JEaXNhYmxlZFN0eWxlUHJvcGVydGllcyhEaXNhYmxlZFN0eWxlRGVj
bGFyYXRpb24qKTsKQEAgLTE4OCw5ICsyMTYsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBIYXNoU2V0PGxvbmc+IG1fY2hpbGRyZW5SZXF1ZXN0ZWQ7CiAgICAgICAgIGxvbmcgbV9s
YXN0Tm9kZUlkOwogICAgICAgICBMaXN0SGFzaFNldDxSZWZQdHI8RG9jdW1lbnQ+ID4gbV9kb2N1
bWVudHM7CisgICAgICAgIERlcXVlPE1hdGNoSm9iKj4gbV9wZW5kaW5nTWF0Y2hKb2JzOworICAg
ICAgICBUaW1lcjxJbnNwZWN0b3JET01BZ2VudD4gbV9tYXRjaEpvYnNUaW1lcjsKKyAgICAgICAg
SGFzaFNldDxSZWZQdHI8Tm9kZT4gPiBtX3NlYXJjaFJlc3VsdHM7CiAgICAgfTsKIAotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JET01BZ2Vu
dF9oKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3Bw
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCmluZGV4IDM5MGVkYWIu
LmVlZWZiZDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKQEAgLTcz
OSw3ICs3MzksNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjp1cGRhdGVET01TdG9yYWdlKGxv
bmcgc3RvcmFnZUlkKQogfQogI2VuZGlmCiAKLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZE5v
ZGVzVG9TZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBub2RlSWRzKQordm9pZCBJbnNwZWN0b3JG
cm9udGVuZDo6YWRkTm9kZXNUb1NlYXJjaFJlc3VsdChjb25zdCBTY3JpcHRBcnJheSYgbm9kZUlk
cykKIHsKICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJk
aXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiYWRkTm9kZXNUb1NlYXJj
aFJlc3VsdCIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKaW5kZXggYjlmODdl
Zi4uODJjZGY4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCkBAIC0xNTgs
NyArMTU4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGRpZEdldENvb2tp
ZXMobG9uZyBjYWxsSWQsIGNvbnN0IFNjcmlwdEFycmF5JiBjb29raWVzLCBjb25zdCBTdHJpbmcm
IGNvb2tpZXNTdHJpbmcpOwogICAgICAgICB2b2lkIGRpZERpc3BhdGNoT25JbmplY3RlZFNjcmlw
dChsb25nIGNhbGxJZCwgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiByZXN1bHQsIGJvb2wgaXNFeGNl
cHRpb24pOwogCi0gICAgICAgIHZvaWQgYWRkTm9kZXNUb1NlYXJjaFJlc3VsdChjb25zdCBTdHJp
bmcmIG5vZGVJZHMpOworICAgICAgICB2b2lkIGFkZE5vZGVzVG9TZWFyY2hSZXN1bHQoY29uc3Qg
U2NyaXB0QXJyYXkmIG5vZGVJZHMpOwogCiAgICAgICAgIHZvaWQgY29udGV4dE1lbnVJdGVtU2Vs
ZWN0ZWQoaW50IGl0ZW1JZCk7CiAgICAgICAgIHZvaWQgY29udGV4dE1lbnVDbGVhcmVkKCk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAKaW5kZXggOTk5YjhkNi4uZjBlMzkx
ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcApAQCAtMTY5LDcgKzE2
OSw2IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2U6OnVwZGF0ZVNjcmlwdE9iamVjdChJbnNwZWN0
b3JGcm9udGVuZCogZnJvbnRlbmQpCiAgICAgICAgIGpzb25PYmplY3Quc2V0KCJleHBlY3RlZENv
bnRlbnRMZW5ndGgiLCBtX2V4cGVjdGVkQ29udGVudExlbmd0aCk7CiAgICAgICAgIGpzb25PYmpl
Y3Quc2V0KCJzdGF0dXNDb2RlIiwgbV9yZXNwb25zZVN0YXR1c0NvZGUpOwogICAgICAgICBqc29u
T2JqZWN0LnNldCgic3RhdHVzVGV4dCIsIG1fcmVzcG9uc2VTdGF0dXNUZXh0KTsKLSAgICAgICAg
anNvbk9iamVjdC5zZXQoInN1Z2dlc3RlZEZpbGVuYW1lIiwgbV9zdWdnZXN0ZWRGaWxlbmFtZSk7
CiAgICAgICAgIFNjcmlwdE9iamVjdCByZXNwb25zZUhlYWRlcnMgPSBmcm9udGVuZC0+bmV3U2Ny
aXB0T2JqZWN0KCk7CiAgICAgICAgIHBvcHVsYXRlSGVhZGVyc09iamVjdCgmcmVzcG9uc2VIZWFk
ZXJzLCBtX3Jlc3BvbnNlSGVhZGVyRmllbGRzKTsKICAgICAgICAganNvbk9iamVjdC5zZXQoInJl
c3BvbnNlSGVhZGVycyIsIHJlc3BvbnNlSGVhZGVycyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9FbGVtZW50c1BhbmVsLmpzCmluZGV4IGM4NTM0NDAuLjU1YmE4MmQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzCkBAIC0yNDAsNyArMjQw
LDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgICAg
IHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9IDA7CiAgICAgICAgIHRoaXMuX3NlYXJj
aFJlc3VsdHMgPSBbXTsKLSAgICAgICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0RGVmYXVsdCgp
LnNlYXJjaENhbmNlbGVkKGZ1bmN0aW9uKCkge30pOworICAgICAgICBJbnNwZWN0b3JCYWNrZW5k
LnNlYXJjaENhbmNlbGVkKCk7CiAgICAgfSwKIAogICAgIHBlcmZvcm1TZWFyY2g6IGZ1bmN0aW9u
KHF1ZXJ5KQpAQCAtMjU2LDcgKzI1Niw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fbWF0Y2hlc0NvdW50VXBkYXRlVGltZW91dCA9IG51
bGw7CiAgICAgICAgIHRoaXMuX3NlYXJjaFF1ZXJ5ID0gcXVlcnk7CiAKLSAgICAgICAgSW5qZWN0
ZWRTY3JpcHRBY2Nlc3MuZ2V0RGVmYXVsdCgpLnBlcmZvcm1TZWFyY2god2hpdGVzcGFjZVRyaW1t
ZWRRdWVyeSwgZmFsc2UsIGZ1bmN0aW9uKCkge30pOworICAgICAgICBJbnNwZWN0b3JCYWNrZW5k
LnBlcmZvcm1TZWFyY2god2hpdGVzcGFjZVRyaW1tZWRRdWVyeSk7CiAgICAgfSwKIAogICAgIHNl
YXJjaGluZ0Zvck5vZGVXYXNFbmFibGVkOiBmdW5jdGlvbigpCkBAIC0yODgsMTIgKzI4OCwxMSBA
QCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICBhZGROb2Rl
c1RvU2VhcmNoUmVzdWx0OiBmdW5jdGlvbihub2RlSWRzKQogICAgIHsKLSAgICAgICAgaWYgKCFu
b2RlSWRzKQorICAgICAgICBpZiAoIW5vZGVJZHMubGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIHZhciBub2RlSWRzQXJyYXkgPSBub2RlSWRzLnNwbGl0KCIsIik7Ci0gICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUlkc0FycmF5Lmxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgICAgICB2YXIgbm9kZUlkID0gbm9kZUlkc0FycmF5W2ldOworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG5vZGVJZHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBub2RlSWQg
PSBub2RlSWRzW2ldOwogICAgICAgICAgICAgdmFyIG5vZGUgPSBXZWJJbnNwZWN0b3IuZG9tQWdl
bnQubm9kZUZvcklkKG5vZGVJZCk7CiAgICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
SW5qZWN0ZWRTY3JpcHQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRT
Y3JpcHQuanMKaW5kZXggNDAwMmUyMy4uZTYyYTkxNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcwpAQCAtODMsOCArODMsNiBAQCBJbmplY3RlZFNj
cmlwdC5yZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwID0gZnVuY3Rpb24ob2JqZWN0R3JvdXBOYW1l
KSB7CiAvLyBDYWxsZWQgZnJvbSB3aXRoaW4gSW5zcGVjdG9yQ29udHJvbGxlciBvbiB0aGUgJ2lu
c3BlY3RlZCBwYWdlJyBzaWRlLgogSW5qZWN0ZWRTY3JpcHQucmVzZXQgPSBmdW5jdGlvbigpCiB7
Ci0gICAgSW5qZWN0ZWRTY3JpcHQuX3NlYXJjaFJlc3VsdHMgPSBbXTsKLSAgICBJbmplY3RlZFNj
cmlwdC5faW5jbHVkZWRJblNlYXJjaFJlc3VsdHNQcm9wZXJ0eU5hbWUgPSAiX19pbmNsdWRlZElu
SW5zcGVjdG9yU2VhcmNoUmVzdWx0cyI7CiB9CiAKIEluamVjdGVkU2NyaXB0LnJlc2V0KCk7CkBA
IC0yMTEsNyArMjA5LDcgQEAgSW5qZWN0ZWRTY3JpcHQuc2V0UHJvcGVydHlWYWx1ZSA9IGZ1bmN0
aW9uKG9iamVjdFByb3h5LCBwcm9wZXJ0eU5hbWUsIGV4cHJlc3Npb24KICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YXIg
cmVzdWx0ID0gaW5zcGVjdGVkV2luZG93LmV2YWwoIlwiIiArIEluamVjdGVkU2NyaXB0Ll9lc2Nh
cGVDaGFyYWN0ZXJzKGV4cHJlc3Npb24sICJcIiIpICsgIlwiIik7CisgICAgICAgICAgICB2YXIg
cmVzdWx0ID0gaW5zcGVjdGVkV2luZG93LmV2YWwoIlwiIiArIGV4cHJlc3Npb24ucmVwbGFjZSgv
Ii9nLCAiXFxcIiIpICsgIlwiIik7CiAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHlOYW1lXSA9
IHJlc3VsdDsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9IGNhdGNoKGUpIHsK
QEAgLTM1NSwyNDcgKzM1Myw2IEBAIEluamVjdGVkU2NyaXB0LmdldE5vZGVJZCA9IGZ1bmN0aW9u
KG5vZGUpCiAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdC5wdXNoTm9kZVBhdGhUb0Zyb250
ZW5kKG5vZGUsIGZhbHNlLCBmYWxzZSk7CiB9CiAKLUluamVjdGVkU2NyaXB0LnBlcmZvcm1TZWFy
Y2ggPSBmdW5jdGlvbih3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBydW5TeW5jaHJvbm91c2x5KQot
ewotICAgIC8vIEZJWE1FOiBGZXcgdGhpbmdzIGFyZSBtaXNzaW5nIGhlcmU6Ci0gICAgLy8gMSkg
U2VhcmNoIHdvcmtzIHdpdGggbm9kZSBncmFudWxhcml0eSAtIG51bWJlciBvZiBtYXRjaGVzIHdp
dGhpbiBub2RlIGlzIG5vdCBjYWxjdWxhdGVkLgotICAgIC8vIDIpIFNlYXJjaCBkb2VzIG5vdCB3
b3JrIG91dHNpZGUgbWFpbiBkb2N1bWVudHMnIGRvbWFpbiAtIHdlIG5lZWQgdG8gdXNlIHNwZWNp
ZmljIEluamVjdGVkU2NyaXB0IGluc3RhbmNlcwotICAgIC8vICAgIGZvciBvdGhlciBkb21haW5z
LgotICAgIC8vIDMpIFRoZXJlIGlzIG5vIG5lZWQgdG8gcHVzaCBhbGwgc2VhcmNoIHJlc3VsdHMg
dG8gdGhlIGZyb250LWVuZCBhdCBhIHRpbWUsIHB1c2hpbmcgbmV4dCAvIHByZXZpb3VzIHJlc3Vs
dAotICAgIC8vICAgIGlzIHN1ZmZpY2llbnQuCi0gICAgdmFyIHRhZ05hbWVRdWVyeSA9IHdoaXRl
c3BhY2VUcmltbWVkUXVlcnk7Ci0gICAgdmFyIGF0dHJpYnV0ZU5hbWVRdWVyeSA9IHdoaXRlc3Bh
Y2VUcmltbWVkUXVlcnk7Ci0gICAgdmFyIHN0YXJ0VGFnRm91bmQgPSAodGFnTmFtZVF1ZXJ5Lmlu
ZGV4T2YoIjwiKSA9PT0gMCk7Ci0gICAgdmFyIGVuZFRhZ0ZvdW5kID0gKHRhZ05hbWVRdWVyeS5s
YXN0SW5kZXhPZigiPiIpID09PSAodGFnTmFtZVF1ZXJ5Lmxlbmd0aCAtIDEpKTsKLQotICAgIGlm
IChzdGFydFRhZ0ZvdW5kIHx8IGVuZFRhZ0ZvdW5kKSB7Ci0gICAgICAgIHZhciB0YWdOYW1lUXVl
cnlMZW5ndGggPSB0YWdOYW1lUXVlcnkubGVuZ3RoOwotICAgICAgICB0YWdOYW1lUXVlcnkgPSB0
YWdOYW1lUXVlcnkuc3Vic3RyaW5nKChzdGFydFRhZ0ZvdW5kID8gMSA6IDApLCAoZW5kVGFnRm91
bmQgPyAodGFnTmFtZVF1ZXJ5TGVuZ3RoIC0gMSkgOiB0YWdOYW1lUXVlcnlMZW5ndGgpKTsKLSAg
ICB9Ci0KLSAgICAvLyBDaGVjayB0aGUgdGFnTmFtZVF1ZXJ5IGlzIGl0IGlzIGEgcG9zc2libHkg
dmFsaWQgdGFnIG5hbWUuCi0gICAgaWYgKCEvXlthLXpBLVowLTlcLV86XSskLy50ZXN0KHRhZ05h
bWVRdWVyeSkpCi0gICAgICAgIHRhZ05hbWVRdWVyeSA9IG51bGw7Ci0KLSAgICAvLyBDaGVjayB0
aGUgYXR0cmlidXRlTmFtZVF1ZXJ5IGlzIGl0IGlzIGEgcG9zc2libHkgdmFsaWQgdGFnIG5hbWUu
Ci0gICAgaWYgKCEvXlthLXpBLVowLTlcLV86XSskLy50ZXN0KGF0dHJpYnV0ZU5hbWVRdWVyeSkp
Ci0gICAgICAgIGF0dHJpYnV0ZU5hbWVRdWVyeSA9IG51bGw7Ci0KLSAgICBjb25zdCBlc2NhcGVk
UXVlcnkgPSBJbmplY3RlZFNjcmlwdC5fZXNjYXBlQ2hhcmFjdGVycyh3aGl0ZXNwYWNlVHJpbW1l
ZFF1ZXJ5LCAiJyIpOwotICAgIGNvbnN0IGVzY2FwZWRUYWdOYW1lUXVlcnkgPSAodGFnTmFtZVF1
ZXJ5ID8gIEluamVjdGVkU2NyaXB0Ll9lc2NhcGVDaGFyYWN0ZXJzKHRhZ05hbWVRdWVyeSwgIici
KSA6IG51bGwpOwotICAgIGNvbnN0IGVzY2FwZWRXaGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5ID0gSW5q
ZWN0ZWRTY3JpcHQuX2VzY2FwZUNoYXJhY3RlcnMod2hpdGVzcGFjZVRyaW1tZWRRdWVyeSwgIici
KTsKLSAgICBjb25zdCBzZWFyY2hSZXN1bHRzUHJvcGVydHkgPSBJbmplY3RlZFNjcmlwdC5faW5j
bHVkZWRJblNlYXJjaFJlc3VsdHNQcm9wZXJ0eU5hbWU7Ci0KLSAgICBmdW5jdGlvbiBhZGROb2Rl
c1RvUmVzdWx0cyhub2RlcywgbGVuZ3RoLCBnZXRJdGVtKQotICAgIHsKLSAgICAgICAgaWYgKCFs
ZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIG5vZGVJZHMgPSBbXTsK
LSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
dmFyIG5vZGUgPSBnZXRJdGVtLmNhbGwobm9kZXMsIGkpOwotICAgICAgICAgICAgLy8gU2tpcCB0
aGlzIG5vZGUgaWYgaXQgYWxyZWFkeSBoYXMgdGhlIHByb3BlcnR5LgotICAgICAgICAgICAgaWYg
KHNlYXJjaFJlc3VsdHNQcm9wZXJ0eSBpbiBub2RlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgICAgICBpZiAoIUluamVjdGVkU2NyaXB0Ll9zZWFyY2hSZXN1bHRzLmxlbmd0
aCkgewotICAgICAgICAgICAgICAgIEluamVjdGVkU2NyaXB0Ll9jdXJyZW50U2VhcmNoUmVzdWx0
SW5kZXggPSAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBub2RlW3NlYXJjaFJlc3Vs
dHNQcm9wZXJ0eV0gPSB0cnVlOwotICAgICAgICAgICAgSW5qZWN0ZWRTY3JpcHQuX3NlYXJjaFJl
c3VsdHMucHVzaChub2RlKTsKLSAgICAgICAgICAgIHZhciBub2RlSWQgPSBJbmplY3RlZFNjcmlw
dEhvc3QucHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlLCBmYWxzZSwgZmFsc2UpOwotICAgICAg
ICAgICAgbm9kZUlkcy5wdXNoKG5vZGVJZCk7Ci0gICAgICAgIH0KLSAgICAgICAgSW5qZWN0ZWRT
Y3JpcHRIb3N0LmFkZE5vZGVzVG9TZWFyY2hSZXN1bHQobm9kZUlkcy5qb2luKCIsIikpOwotICAg
IH0KLQotICAgIGZ1bmN0aW9uIG1hdGNoRXhhY3RJdGVtcyhkb2MpCi0gICAgewotICAgICAgICBt
YXRjaEV4YWN0SWQuY2FsbCh0aGlzLCBkb2MpOwotICAgICAgICBtYXRjaEV4YWN0Q2xhc3NOYW1l
cy5jYWxsKHRoaXMsIGRvYyk7Ci0gICAgICAgIG1hdGNoRXhhY3RUYWdOYW1lcy5jYWxsKHRoaXMs
IGRvYyk7Ci0gICAgICAgIG1hdGNoRXhhY3RBdHRyaWJ1dGVOYW1lcy5jYWxsKHRoaXMsIGRvYyk7
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbWF0Y2hFeGFjdElkKGRvYykKLSAgICB7Ci0gICAgICAg
IGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18uZ2V0RWxlbWVudEJ5SWQuY2FsbChkb2MsIHdo
aXRlc3BhY2VUcmltbWVkUXVlcnkpOwotICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRo
aXMsIHJlc3VsdCwgKHJlc3VsdCA/IDEgOiAwKSwgZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzIH0p
OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIG1hdGNoRXhhY3RDbGFzc05hbWVzKGRvYykKLSAgICB7
Ci0gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18uZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZS5jYWxsKGRvYywgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSk7Ci0gICAgICAgIGFkZE5vZGVz
VG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQubGVuZ3RoLCByZXN1bHQuaXRlbSk7
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbWF0Y2hFeGFjdFRhZ05hbWVzKGRvYykKLSAgICB7Ci0g
ICAgICAgIGlmICghdGFnTmFtZVF1ZXJ5KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBj
b25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmdldEVsZW1lbnRzQnlUYWdOYW1lLmNhbGwoZG9j
LCB0YWdOYW1lUXVlcnkpOwotICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJl
c3VsdCwgcmVzdWx0Lmxlbmd0aCwgcmVzdWx0Lml0ZW0pOwotICAgIH0KLQotICAgIGZ1bmN0aW9u
IG1hdGNoRXhhY3RBdHRyaWJ1dGVOYW1lcyhkb2MpCi0gICAgewotICAgICAgICBpZiAoIWF0dHJp
YnV0ZU5hbWVRdWVyeSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY29uc3QgcmVzdWx0
ID0gZG9jLl9fcHJvdG9fXy5xdWVyeVNlbGVjdG9yQWxsLmNhbGwoZG9jLCAiWyIgKyBhdHRyaWJ1
dGVOYW1lUXVlcnkgKyAiXSIpOwotICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMs
IHJlc3VsdCwgcmVzdWx0Lmxlbmd0aCwgcmVzdWx0Lml0ZW0pOwotICAgIH0KLQotICAgIGZ1bmN0
aW9uIG1hdGNoUGFydGlhbFRhZ05hbWVzKGRvYykKLSAgICB7Ci0gICAgICAgIGlmICghdGFnTmFt
ZVF1ZXJ5KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjb25zdCByZXN1bHQgPSBkb2Mu
X19wcm90b19fLmV2YWx1YXRlLmNhbGwoZG9jLCAiLy8qW2NvbnRhaW5zKG5hbWUoKSwgJyIgKyBl
c2NhcGVkVGFnTmFtZVF1ZXJ5ICsgIicpXSIsIGRvYywgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJF
RF9OT0RFX1NOQVBTSE9UX1RZUEUpOwotICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRo
aXMsIHJlc3VsdCwgcmVzdWx0LnNuYXBzaG90TGVuZ3RoLCByZXN1bHQuc25hcHNob3RJdGVtKTsK
LSAgICB9Ci0KLSAgICBmdW5jdGlvbiBtYXRjaFN0YXJ0T2ZUYWdOYW1lcyhkb2MpCi0gICAgewot
ICAgICAgICBpZiAoIXRhZ05hbWVRdWVyeSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Y29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5ldmFsdWF0ZS5jYWxsKGRvYywgIi8vKltzdGFy
dHMtd2l0aChuYW1lKCksICciICsgZXNjYXBlZFRhZ05hbWVRdWVyeSArICInKV0iLCBkb2MsIG51
bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKTsKLSAgICAgICAgYWRk
Tm9kZXNUb1Jlc3VsdHMuY2FsbCh0aGlzLCByZXN1bHQsIHJlc3VsdC5zbmFwc2hvdExlbmd0aCwg
cmVzdWx0LnNuYXBzaG90SXRlbSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbWF0Y2hQYXJ0aWFs
VGFnTmFtZXNBbmRBdHRyaWJ1dGVWYWx1ZXMoZG9jKQotICAgIHsKLSAgICAgICAgaWYgKCF0YWdO
YW1lUXVlcnkpIHsKLSAgICAgICAgICAgIG1hdGNoUGFydGlhbEF0dHJpYnV0ZVZhbHVlcy5jYWxs
KHRoaXMsIGRvYyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBj
b25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmV2YWx1YXRlLmNhbGwoZG9jLCAiLy8qW2NvbnRh
aW5zKG5hbWUoKSwgJyIgKyBlc2NhcGVkVGFnTmFtZVF1ZXJ5ICsgIicpIG9yIGNvbnRhaW5zKEAq
LCAnIiArIGVzY2FwZWRRdWVyeSArICInKV0iLCBkb2MsIG51bGwsIFhQYXRoUmVzdWx0Lk9SREVS
RURfTk9ERV9TTkFQU0hPVF9UWVBFKTsKLSAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0
aGlzLCByZXN1bHQsIHJlc3VsdC5zbmFwc2hvdExlbmd0aCwgcmVzdWx0LnNuYXBzaG90SXRlbSk7
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbWF0Y2hQYXJ0aWFsQXR0cmlidXRlVmFsdWVzKGRvYykK
LSAgICB7Ci0gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18uZXZhbHVhdGUuY2Fs
bChkb2MsICIvLypbY29udGFpbnMoQCosICciICsgZXNjYXBlZFF1ZXJ5ICsgIicpXSIsIGRvYywg
bnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUpOwotICAgICAgICBh
ZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0LnNuYXBzaG90TGVuZ3Ro
LCByZXN1bHQuc25hcHNob3RJdGVtKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBtYXRjaFN0eWxl
U2VsZWN0b3IoZG9jKQotICAgIHsKLSAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9f
Xy5xdWVyeVNlbGVjdG9yQWxsLmNhbGwoZG9jLCB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5KTsKLSAg
ICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0aGlzLCByZXN1bHQsIHJlc3VsdC5sZW5ndGgs
IHJlc3VsdC5pdGVtKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBtYXRjaFBsYWluVGV4dChkb2Mp
Ci0gICAgewotICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmV2YWx1YXRlLmNh
bGwoZG9jLCAiLy90ZXh0KClbY29udGFpbnMoLiwgJyIgKyBlc2NhcGVkUXVlcnkgKyAiJyldIHwg
Ly9jb21tZW50KClbY29udGFpbnMoLiwgJyIgKyBlc2NhcGVkUXVlcnkgKyAiJyldIiwgZG9jLCBu
dWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSk7Ci0gICAgICAgIGFk
ZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQuc25hcHNob3RMZW5ndGgs
IHJlc3VsdC5zbmFwc2hvdEl0ZW0pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIG1hdGNoWFBhdGhR
dWVyeShkb2MpCi0gICAgewotICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmV2
YWx1YXRlLmNhbGwoZG9jLCB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBkb2MsIG51bGwsIFhQYXRo
UmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKTsKLSAgICAgICAgYWRkTm9kZXNUb1Jl
c3VsdHMuY2FsbCh0aGlzLCByZXN1bHQsIHJlc3VsdC5zbmFwc2hvdExlbmd0aCwgcmVzdWx0LnNu
YXBzaG90SXRlbSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZmluaXNoZWRTZWFyY2hpbmcoKQot
ICAgIHsKLSAgICAgICAgLy8gUmVtb3ZlIHRoZSBzZWFyY2hSZXN1bHRzUHJvcGVydHkgbm93IHRo
YXQgdGhlIHNlYXJjaCBpcyBmaW5pc2hlZC4KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBJ
bmplY3RlZFNjcmlwdC5fc2VhcmNoUmVzdWx0cy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGRl
bGV0ZSBJbmplY3RlZFNjcmlwdC5fc2VhcmNoUmVzdWx0c1tpXVtzZWFyY2hSZXN1bHRzUHJvcGVy
dHldOwotICAgIH0KLQotICAgIGNvbnN0IG1haW5GcmFtZURvY3VtZW50ID0gaW5zcGVjdGVkV2lu
ZG93LmRvY3VtZW50OwotICAgIGNvbnN0IHNlYXJjaERvY3VtZW50cyA9IFttYWluRnJhbWVEb2N1
bWVudF07Ci0gICAgdmFyIHNlYXJjaEZ1bmN0aW9uczsKLSAgICBpZiAodGFnTmFtZVF1ZXJ5ICYm
IHN0YXJ0VGFnRm91bmQgJiYgZW5kVGFnRm91bmQpCi0gICAgICAgIHNlYXJjaEZ1bmN0aW9ucyA9
IFttYXRjaEV4YWN0VGFnTmFtZXMsIG1hdGNoUGxhaW5UZXh0XTsKLSAgICBlbHNlIGlmICh0YWdO
YW1lUXVlcnkgJiYgc3RhcnRUYWdGb3VuZCkKLSAgICAgICAgc2VhcmNoRnVuY3Rpb25zID0gW21h
dGNoU3RhcnRPZlRhZ05hbWVzLCBtYXRjaFBsYWluVGV4dF07Ci0gICAgZWxzZSBpZiAodGFnTmFt
ZVF1ZXJ5ICYmIGVuZFRhZ0ZvdW5kKSB7Ci0gICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2
ZSBhIG1hdGNoRW5kT2ZUYWdOYW1lcyBzZWFyY2ggZnVuY3Rpb24gaWYgZW5kVGFnRm91bmQgaXMg
dHJ1ZSBidXQgbm90IHN0YXJ0VGFnRm91bmQuCi0gICAgICAgIC8vIFRoaXMgcmVxdWlyZXMgZW5k
cy13aXRoKCkgc3VwcG9ydCBpbiBYUGF0aCwgV2ViS2l0IG9ubHkgc3VwcG9ydHMgc3RhcnRzLXdp
dGgoKSBhbmQgY29udGFpbnMoKS4KLSAgICAgICAgc2VhcmNoRnVuY3Rpb25zID0gW21hdGNoUGFy
dGlhbFRhZ05hbWVzLCBtYXRjaFBsYWluVGV4dF07Ci0gICAgfSBlbHNlIGlmICh3aGl0ZXNwYWNl
VHJpbW1lZFF1ZXJ5ID09PSAiLy8qIiB8fCB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5ID09PSAiKiIp
IHsKLSAgICAgICAgLy8gVGhlc2UgcXVlcmllcyB3aWxsIG1hdGNoIGV2ZXJ5IG5vZGUuIE1hdGNo
aW5nIGV2ZXJ5dGhpbmcgaXNuJ3QgdXNlZnVsIGFuZCBjYW4gYmUgc2xvdyBmb3IgbGFyZ2UgcGFn
ZXMsCi0gICAgICAgIC8vIHNvIGxpbWl0IHRoZSBzZWFyY2ggZnVuY3Rpb25zIGxpc3QgdG8gcGxh
aW4gdGV4dCBhbmQgYXR0cmlidXRlIG1hdGNoaW5nLgotICAgICAgICBzZWFyY2hGdW5jdGlvbnMg
PSBbbWF0Y2hQYXJ0aWFsQXR0cmlidXRlVmFsdWVzLCBtYXRjaFBsYWluVGV4dF07Ci0gICAgfSBl
bHNlCi0gICAgICAgIHNlYXJjaEZ1bmN0aW9ucyA9IFttYXRjaEV4YWN0SXRlbXMsIG1hdGNoU3R5
bGVTZWxlY3RvciwgbWF0Y2hQYXJ0aWFsVGFnTmFtZXNBbmRBdHRyaWJ1dGVWYWx1ZXMsIG1hdGNo
UGxhaW5UZXh0LCBtYXRjaFhQYXRoUXVlcnldOwotCi0gICAgLy8gRmluZCBhbGwgZnJhbWVzLCBp
ZnJhbWVzIGFuZCBvYmplY3QgZWxlbWVudHMgdG8gc2VhcmNoIHRoZWlyIGRvY3VtZW50cy4KLSAg
ICBjb25zdCBzdWJkb2N1bWVudFJlc3VsdCA9IG1haW5GcmFtZURvY3VtZW50LnF1ZXJ5U2VsZWN0
b3JBbGwoImlmcmFtZSwgZnJhbWUsIG9iamVjdCIpOwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBzdWJkb2N1bWVudFJlc3VsdC5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgZWxlbWVudCA9
IHN1YmRvY3VtZW50UmVzdWx0Lml0ZW0oaSk7Ci0gICAgICAgIGlmIChlbGVtZW50LmNvbnRlbnRE
b2N1bWVudCkKLSAgICAgICAgICAgIHNlYXJjaERvY3VtZW50cy5wdXNoKGVsZW1lbnQuY29udGVu
dERvY3VtZW50KTsKLSAgICB9Ci0KLSAgICBjb25zdCBwYW5lbCA9IEluamVjdGVkU2NyaXB0Owot
ICAgIHZhciBkb2N1bWVudEluZGV4ID0gMDsKLSAgICB2YXIgc2VhcmNoRnVuY3Rpb25JbmRleCA9
IDA7Ci0gICAgdmFyIGNodW5rSW50ZXJ2YWxJZGVudGlmaWVyID0gbnVsbDsKLQotICAgIC8vIFNw
bGl0IHVwIHRoZSB3b3JrIGludG8gY2h1bmtzIHNvIHdlIGRvbid0IGJsb2NrIHRoZSBVSSB0aHJl
YWQgd2hpbGUgcHJvY2Vzc2luZy4KLQotICAgIGZ1bmN0aW9uIHByb2Nlc3NDaHVuaygpCi0gICAg
ewotICAgICAgICB2YXIgc2VhcmNoRG9jdW1lbnQgPSBzZWFyY2hEb2N1bWVudHNbZG9jdW1lbnRJ
bmRleF07Ci0gICAgICAgIHZhciBzZWFyY2hGdW5jdGlvbiA9IHNlYXJjaEZ1bmN0aW9uc1tzZWFy
Y2hGdW5jdGlvbkluZGV4XTsKLQotICAgICAgICBpZiAoKytzZWFyY2hGdW5jdGlvbkluZGV4ID4g
c2VhcmNoRnVuY3Rpb25zLmxlbmd0aCkgewotICAgICAgICAgICAgc2VhcmNoRnVuY3Rpb24gPSBz
ZWFyY2hGdW5jdGlvbnNbMF07Ci0gICAgICAgICAgICBzZWFyY2hGdW5jdGlvbkluZGV4ID0gMDsK
LQotICAgICAgICAgICAgaWYgKCsrZG9jdW1lbnRJbmRleCA+IHNlYXJjaERvY3VtZW50cy5sZW5n
dGgpIHsKLSAgICAgICAgICAgICAgICBpZiAocGFuZWwuX2N1cnJlbnRTZWFyY2hDaHVua0ludGVy
dmFsSWRlbnRpZmllciA9PT0gY2h1bmtJbnRlcnZhbElkZW50aWZpZXIpCi0gICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSBwYW5lbC5fY3VycmVudFNlYXJjaENodW5rSW50ZXJ2YWxJZGVudGlmaWVy
OwotICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2h1bmtJbnRlcnZhbElkZW50aWZpZXIp
OwotICAgICAgICAgICAgICAgIGZpbmlzaGVkU2VhcmNoaW5nLmNhbGwocGFuZWwpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2Vh
cmNoRG9jdW1lbnQgPSBzZWFyY2hEb2N1bWVudHNbZG9jdW1lbnRJbmRleF07Ci0gICAgICAgIH0K
LQotICAgICAgICB0cnkgewotICAgICAgICAgICAgc2VhcmNoRnVuY3Rpb24uY2FsbChwYW5lbCwg
c2VhcmNoRG9jdW1lbnQpOwotICAgICAgICB9IGNhdGNoKGVycikgewotICAgICAgICAgICAgLy8g
aWdub3JlIGFueSBleGNlcHRpb25zLiB0aGUgcXVlcnkgbWlnaHQgYmUgbWFsZm9ybWVkLCBidXQg
d2UgYWxsb3cgdGhhdC4KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBpZiAocnVuU3luY2hyb25vdXNseSkKLSAgICAgICAgd2hpbGUgKHByb2Nlc3NDaHVuaygp
KSB7fQotICAgIGVsc2UgewotICAgICAgICBwcm9jZXNzQ2h1bmsoKTsKLSAgICAgICAgY2h1bmtJ
bnRlcnZhbElkZW50aWZpZXIgPSBzZXRJbnRlcnZhbChwcm9jZXNzQ2h1bmssIDI1KTsKLSAgICAg
ICAgSW5qZWN0ZWRTY3JpcHQuX2N1cnJlbnRTZWFyY2hDaHVua0ludGVydmFsSWRlbnRpZmllciA9
IGNodW5rSW50ZXJ2YWxJZGVudGlmaWVyOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
SW5qZWN0ZWRTY3JpcHQuc2VhcmNoQ2FuY2VsZWQgPSBmdW5jdGlvbigpCi17Ci0gICAgaWYgKElu
amVjdGVkU2NyaXB0Ll9zZWFyY2hSZXN1bHRzKSB7Ci0gICAgICAgIGNvbnN0IHNlYXJjaFJlc3Vs
dHNQcm9wZXJ0eSA9IEluamVjdGVkU2NyaXB0Ll9pbmNsdWRlZEluU2VhcmNoUmVzdWx0c1Byb3Bl
cnR5TmFtZTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWFyY2hSZXN1bHRz
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuX3NlYXJjaFJlc3Vs
dHNbaV07Ci0KLSAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc2VhcmNoUmVzdWx0c1Byb3BlcnR5
IHNpbmNlIHRoZXJlIG1pZ2h0IGJlIGFuIHVuZmluaXNoZWQgc2VhcmNoLgotICAgICAgICAgICAg
ZGVsZXRlIG5vZGVbc2VhcmNoUmVzdWx0c1Byb3BlcnR5XTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChJbmplY3RlZFNjcmlwdC5fY3VycmVudFNlYXJjaENodW5rSW50ZXJ2YWxJZGVudGlm
aWVyKSB7Ci0gICAgICAgIGNsZWFySW50ZXJ2YWwoSW5qZWN0ZWRTY3JpcHQuX2N1cnJlbnRTZWFy
Y2hDaHVua0ludGVydmFsSWRlbnRpZmllcik7Ci0gICAgICAgIGRlbGV0ZSBJbmplY3RlZFNjcmlw
dC5fY3VycmVudFNlYXJjaENodW5rSW50ZXJ2YWxJZGVudGlmaWVyOwotICAgIH0KLSAgICBJbmpl
Y3RlZFNjcmlwdC5fc2VhcmNoUmVzdWx0cyA9IFtdOwotICAgIHJldHVybiB0cnVlOwotfQotCiBJ
bmplY3RlZFNjcmlwdC5vcGVuSW5JbnNwZWN0ZWRXaW5kb3cgPSBmdW5jdGlvbih1cmwpCiB7CiAg
ICAgLy8gRG9uJ3QgY2FsbCB3aW5kb3cub3BlbiBvbiB3cmFwcGVyIC0gcG9wdXAgYmxvY2tlciBt
dXRlcyBpdC4KQEAgLTEwMjgsMjggKzc4NSw1IEBAIEluamVjdGVkU2NyaXB0Ll9jbGFzc05hbWUg
PSBmdW5jdGlvbihvYmopCiAgICAgfQogfQogCi1JbmplY3RlZFNjcmlwdC5fZXNjYXBlQ2hhcmFj
dGVycyA9IGZ1bmN0aW9uKHN0ciwgY2hhcnMpCi17Ci0gICAgdmFyIGZvdW5kQ2hhciA9IGZhbHNl
OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
aWYgKHN0ci5pbmRleE9mKGNoYXJzLmNoYXJBdChpKSkgIT09IC0xKSB7Ci0gICAgICAgICAgICBm
b3VuZENoYXIgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoIWZvdW5kQ2hhcikKLSAgICAgICAgcmV0dXJuIHN0cjsKLQotICAgIHZhciByZXN1
bHQgPSAiIjsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkgewotICAg
ICAgICBpZiAoY2hhcnMuaW5kZXhPZihzdHIuY2hhckF0KGkpKSAhPT0gLTEpCi0gICAgICAgICAg
ICByZXN1bHQgKz0gIlxcIjsKLSAgICAgICAgcmVzdWx0ICs9IHN0ci5jaGFyQXQoaSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogcmV0dXJuIEluamVjdGVkU2NyaXB0OwogfSk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHRB
Y2Nlc3MuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHRBY2Nl
c3MuanMKaW5kZXggMjU1ODI2Ny4uYzM4ODIxMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0QWNjZXNzLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qcwpAQCAtNzEsMjkgKzcxLDE4IEBA
IEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlciA9IGZ1bmN0aW9uKG1ldGhvZE5h
bWUsIGFzeW5jKQogLy8gLSBNYWtlIHN1cmUgbGFzdCBwYXJhbWV0ZXIgb2YgYWxsIHRoZSBJbmpl
Y3RlZFNyaXB0QWNjZXNzLiogY2FsbHMgaXMgYSBjYWxsYmFjayBmdW5jdGlvbi4KIC8vIFdlIGtl
ZXAgdGhlc2Ugc29ydGVkLgogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJh
ZGRJbnNwZWN0ZWROb2RlIik7Ci1JbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIo
ImFkZFN0eWxlU2VsZWN0b3IiKTsKLUluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxl
cigiYXBwbHlTdHlsZVJ1bGVUZXh0Iik7Ci1JbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhh
bmRsZXIoImFwcGx5U3R5bGVUZXh0Iik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhh
bmRsZXIoImNsZWFyQ29uc29sZU1lc3NhZ2VzIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5z
dGFsbEhhbmRsZXIoImV2YWx1YXRlIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhh
bmRsZXIoImV2YWx1YXRlSW5DYWxsRnJhbWUiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0
YWxsSGFuZGxlcigiZ2V0Q29tcGxldGlvbnMiKTsKLUluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0
YWxsSGFuZGxlcigiZ2V0Q29tcHV0ZWRTdHlsZSIpOwotSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2lu
c3RhbGxIYW5kbGVyKCJnZXRJbmxpbmVTdHlsZSIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2lu
c3RhbGxIYW5kbGVyKCJnZXROb2RlUHJvcGVydHlWYWx1ZSIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nl
c3MuX2luc3RhbGxIYW5kbGVyKCJnZXRQcm9wZXJ0aWVzIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vz
cy5faW5zdGFsbEhhbmRsZXIoImdldFByb3RvdHlwZXMiKTsKLUluamVjdGVkU2NyaXB0QWNjZXNz
Ll9pbnN0YWxsSGFuZGxlcigiZ2V0U3R5bGVzIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5z
dGFsbEhhbmRsZXIoIm9wZW5Jbkluc3BlY3RlZFdpbmRvdyIpOwotSW5qZWN0ZWRTY3JpcHRBY2Nl
c3MuX2luc3RhbGxIYW5kbGVyKCJwZXJmb3JtU2VhcmNoIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vz
cy5faW5zdGFsbEhhbmRsZXIoInB1c2hOb2RlVG9Gcm9udGVuZCIpOwogSW5qZWN0ZWRTY3JpcHRB
Y2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJub2RlQnlQYXRoIik7Ci1JbmplY3RlZFNjcmlwdEFjY2Vz
cy5faW5zdGFsbEhhbmRsZXIoInNlYXJjaENhbmNlbGVkIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vz
cy5faW5zdGFsbEhhbmRsZXIoInNldE91dGVySFRNTCIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3Mu
X2luc3RhbGxIYW5kbGVyKCJzZXRQcm9wZXJ0eVZhbHVlIik7Ci1JbmplY3RlZFNjcmlwdEFjY2Vz
cy5faW5zdGFsbEhhbmRsZXIoInNldFN0eWxlUHJvcGVydHkiKTsKLUluamVjdGVkU2NyaXB0QWNj
ZXNzLl9pbnN0YWxsSGFuZGxlcigic2V0U3R5bGVUZXh0Iik7Ci1JbmplY3RlZFNjcmlwdEFjY2Vz
cy5faW5zdGFsbEhhbmRsZXIoInRvZ2dsZVN0eWxlRW5hYmxlZCIpOwogSW5qZWN0ZWRTY3JpcHRB
Y2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJldmFsdWF0ZU9uU2VsZiIpOwogCiAvLyBTb21lIG1ldGhv
ZHMgY2FuJ3QgcnVuIHN5bmNocm9ub3VzbHkgZXZlbiBvbiB0aGUgaW5qZWN0ZWQgc2NyaXB0IHNp
ZGUgKHN1Y2ggYXMgREIgdHJhbnNhY3Rpb25zKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qcyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qcwppbmRleCA0NjcwYWYxLi43ZDhjNGQ1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yQmFja2Vu
ZFN0dWIuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tl
bmRTdHViLmpzCkBAIC0yNTksNiArMjU5LDE0IEBAIFdlYkluc3BlY3Rvci5JbnNwZWN0b3JCYWNr
ZW5kU3R1Yi5wcm90b3R5cGUgPSB7CiAKICAgICByZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9u
TG9hZDogZnVuY3Rpb24oKQogICAgIHsKKyAgICB9LAorCisgICAgcGVyZm9ybVNlYXJjaDogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICB9LAorCisgICAgc2VhcmNoQ2FuY2VsZWQ6IGZ1bmN0aW9uKCkK
KyAgICB7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA0MWIzNjE4Li41YzA1NzMyIDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0wNi0xMCAgUGF2ZWwgRmVsZG1hbiAgPHBm
ZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBQb3J0IHBlcmZvcm1TZWFyY2ggZnJvbSBJbmpl
Y3RlZFNjcmlwdCB0byBJbnNwZWN0b3JET01BZ2VudC4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA0MjIKKworICAgICAgICAqIHNyYy9qcy9JbnNw
ZWN0b3JDb250cm9sbGVySW1wbC5qczoKKyAgICAgICAgKGRldnRvb2xzLkluc3BlY3RvckJhY2tl
bmRJbXBsKToKKwogMjAxMC0wNi0wNyAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qcyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMKaW5kZXggODZmODg1YS4uZjc2MjU1
YiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVy
SW1wbC5qcworKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJ
bXBsLmpzCkBAIC02MSw2ICs2MSw3IEBAIGRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsID0g
ZnVuY3Rpb24oKQogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8o
ImdldFJlc291cmNlQ29udGVudCIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xs
ZXJEZWxlZ2F0ZV8oImhpZ2hsaWdodERPTU5vZGUiKTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0
b3JDb250cm9sbGVyRGVsZWdhdGVfKCJoaWRlRE9NTm9kZUhpZ2hsaWdodCIpOworICAgIHRoaXMu
aW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInBlcmZvcm1TZWFyY2giKTsKICAg
ICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJyZWxlYXNlV3JhcHBl
ck9iamVjdEdyb3VwIik7CiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVn
YXRlXygicmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQiKTsKICAgICB0aGlzLmluc3Rh
bGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJyZWxvYWRQYWdlIik7CkBAIC02OCw2ICs2
OSw3IEBAIGRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsID0gZnVuY3Rpb24oKQogICAgIHRo
aXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInJlbW92ZURPTVN0b3JhZ2VJ
dGVtIik7CiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygicmVt
b3ZlTm9kZSIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8o
InNhdmVGcm9udGVuZFNldHRpbmdzIik7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJv
bGxlckRlbGVnYXRlXygic2VhcmNoQ2FuY2VsZWQiKTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0
b3JDb250cm9sbGVyRGVsZWdhdGVfKCJzZXRBdHRyaWJ1dGUiKTsKICAgICB0aGlzLmluc3RhbGxJ
bnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJzZXRET01TdG9yYWdlSXRlbSIpOwogICAgIHRo
aXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInNldEluamVjdGVkU2NyaXB0
U291cmNlIik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58456</attachid>
            <date>2010-06-11 02:18:16 -0700</date>
            <delta_ts>2010-06-11 04:59:13 -0700</delta_ts>
            <desc>[PATCH] Review comments addressed.</desc>
            <filename>perform_search</filename>
            <type>text/plain</type>
            <size>42416</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2ZGQzYWMwLi45OTljYTM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDYt
MTAgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogUG9ydCBw
ZXJmb3JtU2VhcmNoIGZyb20gSW5qZWN0ZWRTY3JpcHQgdG8gSW5zcGVjdG9yRE9NQWdlbnQuCisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNDIyCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvZWxlbWVudHMtcGFuZWwtc2VhcmNoLmh0bWw6CisKIDIwMTAt
MDYtMDggIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdkLiBVcGRhdGVkIHRlc3RfZXhwZWN0YXRpb25zLnR4dCB0byBmb2xsb3cgcjYwODIyCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtcGFuZWwtc2VhcmNoLmh0
bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtcGFuZWwtc2VhcmNoLmh0bWwKaW5k
ZXggNGYxNjJkYi4uZDBkNDI4MyAxMDA3NTUKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Vs
ZW1lbnRzLXBhbmVsLXNlYXJjaC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9lbGVt
ZW50cy1wYW5lbC1zZWFyY2guaHRtbApAQCAtMzEsNyArMzEsNiBAQCBmdW5jdGlvbiBmcm9udGVu
ZF9wZXJmb3JtU2VhcmNoKHRlc3RDb250cm9sbGVyKQogCiAgICAgV2ViSW5zcGVjdG9yLmFkZE5v
ZGVzVG9TZWFyY2hSZXN1bHQgPSBmdW5jdGlvbihub2RlSWRzKQogICAgIHsKLSAgICAgICAgdmFy
IG5vZGVJZHMgPSBub2RlSWRzLnNwbGl0KCIsIik7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbm9kZUlkcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgdmFyIG5vZGUgPSBXZWJJbnNw
ZWN0b3IuZG9tQWdlbnQubm9kZUZvcklkKG5vZGVJZHNbaV0pOwogICAgICAgICAgICAgaWYgKG5v
ZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKQpAQCAtNDEsMTkgKzQwLDE5IEBAIGZ1bmN0
aW9uIGZyb250ZW5kX3BlcmZvcm1TZWFyY2godGVzdENvbnRyb2xsZXIpCiAgICAgICAgIH0KICAg
ICB9CiAgICAgLy8gUGxhaW4gdGV4dC4KLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZh
dWx0KCkucGVyZm9ybVNlYXJjaCgiRm9vIiArICJCYXIiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsK
KyAgICBJbnNwZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goIkZvbyIgKyAiQmFyIiwgdHJ1ZSk7
CiAgICAgLy8gUGFydGlhbCB0ZXh0LgotICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdldERlZmF1
bHQoKS5wZXJmb3JtU2VhcmNoKCJvbyIgKyAiQmEiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsKKyAg
ICBJbnNwZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goIm9vIiArICJCYSIsIHRydWUpOwogICAg
IC8vIFN0YXJ0IHRhZy4KLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZhdWx0KCkucGVy
Zm9ybVNlYXJjaCgiPGlucHUiICsgInQiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsKKyAgICBJbnNw
ZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goIjxpbnB1IiArICJ0IiwgdHJ1ZSk7CiAgICAgLy8g
UGFydGlhbCB0YWcuCi0gICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0RGVmYXVsdCgpLnBlcmZv
cm1TZWFyY2goIm5wdSIgKyAidCIsIHRydWUsIGZ1bmN0aW9uKCkge30pOworICAgIEluc3BlY3Rv
ckJhY2tlbmQucGVyZm9ybVNlYXJjaCgibnB1IiArICJ0IiwgdHJ1ZSk7CiAgICAgLy8gRXhhY3Qg
YXR0cmlidXRlIG5hbWUuCi0gICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0RGVmYXVsdCgpLnBl
cmZvcm1TZWFyY2goInZhbHUiICsgImUiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsKKyAgICBJbnNw
ZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goInZhbHUiICsgImUiLCB0cnVlKTsKICAgICAvLyBF
eGFjdCBhdHRyaWJ1dGUgdmFsPD51ZS4KLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZh
dWx0KCkucGVyZm9ybVNlYXJjaCgiSW4iICsgInB1dFZhIiArICJsIiwgdHJ1ZSwgZnVuY3Rpb24o
KSB7fSk7CisgICAgSW5zcGVjdG9yQmFja2VuZC5wZXJmb3JtU2VhcmNoKCJJbiIgKyAicHV0VmEi
ICsgImwiLCB0cnVlKTsKICAgICAvLyBQYXJ0aWFsIGF0dHJpYnV0ZSB2YWw8PnVlLgotICAgIElu
amVjdGVkU2NyaXB0QWNjZXNzLmdldERlZmF1bHQoKS5wZXJmb3JtU2VhcmNoKCJuIiArICJwdXRW
YSIgKyAibCIsIHRydWUsIGZ1bmN0aW9uKCkge30pOworICAgIEluc3BlY3RvckJhY2tlbmQucGVy
Zm9ybVNlYXJjaCgibiIgKyAicHV0VmEiICsgImwiLCB0cnVlKTsKIAogICAgIHRlc3RDb250cm9s
bGVyLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoZnVuY3Rpb24oKSB7CiAgICAgICAgIHRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoc2VhcmNoUmVzdWx0cyk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDMwNDc4ZWEuLjA2YjE3OTMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDMgQEAKKzIwMTAtMDYtMTAgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2ViIEluc3BlY3RvcjogUG9ydCBwZXJmb3JtU2VhcmNoIGZyb20gSW5qZWN0ZWRTY3JpcHQgdG8g
SW5zcGVjdG9yRE9NQWdlbnQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQwNDIyCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRI
b3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6YWRkTm9kZXNU
b1NlYXJjaFJlc3VsdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6cGVyZm9ybVNlYXJjaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpzZWFyY2hDYW5jZWxlZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZC5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6On5JbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6c2VhcmNoQ2FuY2VsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6Om9uTWF0Y2hKb2JzVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OnJlcG9ydE5vZGVzQXNTZWFyY2hSZXN1bHRzKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGNoSm9iOjp+TWF0
Y2hKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TWF0Y2hKb2I6Ok1hdGNoSm9iKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1hdGNoSm9iOjphZGROb2Rlc1RvUmVzdWx0cyk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kOjphZGROb2Rlc1RvU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2U6OnVwZGF0ZVNjcmlwdE9i
amVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlLnNlYXJjaENhbmNl
bGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZS5wZXJm
b3JtU2VhcmNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlw
ZS5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0luamVjdGVkU2NyaXB0LmpzOgorICAgICAgICAoaW5qZWN0ZWRTY3JpcHRDb25zdHJ1Y3Rvcik6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qczoK
KwogMjAxMC0wNi0wOCAgVmFuZ2VsaXMgS29ra2V2aXMgIDx2YW5nZWxpc0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0SG9zdC5jcHAKaW5kZXggYzU4MDczZC4uNGMzYzdhZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCkBAIC0xMTAsMTIgKzExMCw2IEBAIGxv
bmcgSW5qZWN0ZWRTY3JpcHRIb3N0OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5vZGUs
IGJvb2wgd2l0aENoaWxkcmVuLCBiCiAgICAgcmV0dXJuIGlkOwogfQogCi12b2lkIEluamVjdGVk
U2NyaXB0SG9zdDo6YWRkTm9kZXNUb1NlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIG5vZGVJZHMp
Ci17Ci0gICAgaWYgKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCA9IGluc3BlY3RvckZyb250
ZW5kKCkpCi0gICAgICAgIGZyb250ZW5kLT5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KG5vZGVJZHMp
OwotfQotCiBsb25nIEluamVjdGVkU2NyaXB0SG9zdDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5k
KGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQg
PSBpbnNwZWN0b3JET01BZ2VudCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRIb3N0LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3Qu
aAppbmRleCBiZWZmYzlkLi42NmNmNDFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEhvc3QuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dEhvc3QuaApAQCAtNjksNyArNjksNiBAQCBwdWJsaWM6CiAgICAgTm9kZSogbm9kZUZvcklkKGxv
bmcgbm9kZUlkKTsKICAgICBsb25nIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9kZSwg
Ym9vbCB3aXRoQ2hpbGRyZW4sIGJvb2wgc2VsZWN0SW5VSSk7CiAKLSAgICB2b2lkIGFkZE5vZGVz
VG9TZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBub2RlSWRzKTsKICAgICBsb25nIHB1c2hOb2Rl
QnlQYXRoVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHBhdGgpOwogCiAjaWYgRU5BQkxFKERBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0Lmlk
bCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5pZGwKaW5kZXggOGIyNDE1
Ny4uNWE0Y2UxOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRI
b3N0LmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaWRsCkBA
IC0zOCw3ICszOCw2IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0
IG5vZGVGb3JJZChpbiBsb25nIG5vZGVJZCk7CiAgICAgICAgIFtDdXN0b21dIGludCBwdXNoTm9k
ZVBhdGhUb0Zyb250ZW5kKGluIERPTU9iamVjdCBub2RlLCBpbiBib29sZWFuIHdpdGhDaGlsZHJl
biwgaW4gYm9vbGVhbiBzZWxlY3RJblVJKTsKIAotICAgICAgICB2b2lkIGFkZE5vZGVzVG9TZWFy
Y2hSZXN1bHQoaW4gRE9NU3RyaW5nIG5vZGVJZHMpOwogICAgICAgICBsb25nIHB1c2hOb2RlQnlQ
YXRoVG9Gcm9udGVuZChpbiBET01TdHJpbmcgcGF0aCk7CiAKICNpZiBkZWZpbmVkKEVOQUJMRV9K
QVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcAppbmRleCAzNmY0MWI4Li44MTRlNWQyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcApAQCAtMzUxLDYgKzM1MSwxOCBAQCB2
b2lkIEluc3BlY3RvckJhY2tlbmQ6OmNoYW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9k
ZUlkLCBjb25zdCBBdG9taWNTdHJpbgogICAgICAgICBkb21BZ2VudC0+Y2hhbmdlVGFnTmFtZShj
YWxsSWQsIG5vZGVJZCwgdGFnTmFtZSwgZXhwYW5kZWQpOwogfQogCit2b2lkIEluc3BlY3RvckJh
Y2tlbmQ6OnBlcmZvcm1TZWFyY2goY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCBydW5TeW5jaHJv
bm91c2x5KQoreworICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0
b3JET01BZ2VudCgpKQorICAgICAgICBkb21BZ2VudC0+cGVyZm9ybVNlYXJjaChxdWVyeSwgcnVu
U3luY2hyb25vdXNseSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c2VhcmNoQ2FuY2Vs
ZWQoKQoreworICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JE
T01BZ2VudCgpKQorICAgICAgICBkb21BZ2VudC0+c2VhcmNoQ2FuY2VsZWQoKTsKK30KKwogdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBi
b29sIGF1dGhvck9ubHkpCiB7CiAgICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9
IGluc3BlY3RvckRPTUFnZW50KCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKaW5k
ZXggMGViOGU0Yy4uYzg4YzIzYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApA
QCAtMTE2LDYgKzExNiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvcHlOb2RlKGxvbmcgbm9kZUlk
KTsKICAgICB2b2lkIHJlbW92ZU5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKICAgICB2
b2lkIGNoYW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25zdCBBdG9taWNT
dHJpbmcmIHRhZ05hbWUsIGJvb2wgZXhwYW5kZWQpOworICAgIHZvaWQgcGVyZm9ybVNlYXJjaChj
b25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sIHJ1blN5bmNocm9ub3VzbHkpOworICAgIHZvaWQgc2Vh
cmNoQ2FuY2VsZWQoKTsKIAogICAgIHZvaWQgZ2V0U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5v
ZGVJZCwgYm9vbCBhdXRoT25seSk7CiAgICAgdm9pZCBnZXRBbGxTdHlsZXMobG9uZyBjYWxsSWQp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAppbmRleCBlOGNmZGI5Li5lZThh
NTg1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbApAQCAtOTEsNiArOTEs
OSBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIHZvaWQgY29weU5vZGUoaW4gbG9uZyBub2RlSWQp
OwogICAgICAgICB2b2lkIHJlbW92ZU5vZGUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlk
KTsKICAgICAgICAgdm9pZCBjaGFuZ2VUYWdOYW1lKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIG5v
ZGVJZCwgaW4gRE9NU3RyaW5nIG5ld1RhZ05hbWUsIGluIGJvb2xlYW4gZXhwYW5kZWQpOworICAg
ICAgICB2b2lkIHBlcmZvcm1TZWFyY2goaW4gRE9NU3RyaW5nIHF1ZXJ5LCBpbiBib29sZWFuIHJ1
blN5bmNocm9ub3VzbHkpOworICAgICAgICB2b2lkIHNlYXJjaENhbmNlbGVkKCk7CisKICAgICAg
ICAgdm9pZCBoaWdobGlnaHRET01Ob2RlKGluIGxvbmcgbm9kZUlkKTsKICAgICAgICAgdm9pZCBo
aWRlRE9NTm9kZUhpZ2hsaWdodCgpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAKaW5kZXggMzM4ZGMzMy4uNzQ5MjAxOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmNwcApAQCAtNjUsMTggKzY1LDE0MSBAQAogI2luY2x1ZGUgIlN0eWxlU2hlZXRM
aXN0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogCisjaWYgRU5BQkxFKFhQQVRIKQorI2luY2x1ZGUg
IlhQYXRoUmVzdWx0LmgiCisjZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgTWF0Y2hKb2IgeworcHVibGljOgorICAgIHZpcnR1YWwg
dm9pZCBtYXRjaChMaXN0SGFzaFNldDxOb2RlKj4mIHJlc3VsdENvbGxlY3RvcikgPSAwOworICAg
IHZpcnR1YWwgfk1hdGNoSm9iKCkgeyB9CisKK3Byb3RlY3RlZDoKKyAgICBNYXRjaEpvYihEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgcXVlcnkpCisgICAgICAgIDogbV9kb2N1bWVu
dChkb2N1bWVudCkKKyAgICAgICAgLCBtX3F1ZXJ5KHF1ZXJ5KSB7IH0KKworICAgIHZvaWQgYWRk
Tm9kZXNUb1Jlc3VsdHMoUGFzc1JlZlB0cjxOb2RlTGlzdD4gbm9kZXMsIExpc3RIYXNoU2V0PE5v
ZGUqPiYgcmVzdWx0Q29sbGVjdG9yKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgbm9kZXMgJiYgaSA8IG5vZGVzLT5sZW5ndGgoKTsgKytpKQorICAgICAgICAgICAgcmVzdWx0
Q29sbGVjdG9yLmFkZChub2Rlcy0+aXRlbShpKSk7CisgICAgfQorCisgICAgUmVmUHRyPERvY3Vt
ZW50PiBtX2RvY3VtZW50OworICAgIFN0cmluZyBtX3F1ZXJ5OworfTsKKworbmFtZXNwYWNlIHsK
KworY2xhc3MgTWF0Y2hFeGFjdElkSm9iIDogcHVibGljIFdlYkNvcmU6Ok1hdGNoSm9iIHsKK3B1
YmxpYzoKKyAgICBNYXRjaEV4YWN0SWRKb2IoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJp
bmcmIHF1ZXJ5KSA6IFdlYkNvcmU6Ok1hdGNoSm9iKGRvY3VtZW50LCBxdWVyeSkgeyB9CisgICAg
dmlydHVhbCB+TWF0Y2hFeGFjdElkSm9iKCkgeyB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHZvaWQgbWF0Y2goTGlzdEhhc2hTZXQ8Tm9kZSo+JiByZXN1bHRDb2xsZWN0b3IpCisgICAgewor
ICAgICAgICBpZiAobV9xdWVyeS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgRWxlbWVudCogZWxlbWVudCA9IG1fZG9jdW1lbnQtPmdldEVsZW1lbnRCeUlkKG1fcXVl
cnkpOworICAgICAgICBpZiAoZWxlbWVudCkKKyAgICAgICAgICAgIHJlc3VsdENvbGxlY3Rvci5h
ZGQoZWxlbWVudCk7CisgICAgfQorfTsKKworY2xhc3MgTWF0Y2hFeGFjdENsYXNzTmFtZXNKb2Ig
OiBwdWJsaWMgV2ViQ29yZTo6TWF0Y2hKb2IgeworcHVibGljOgorICAgIE1hdGNoRXhhY3RDbGFz
c05hbWVzSm9iKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgOiBXZWJD
b3JlOjpNYXRjaEpvYihkb2N1bWVudCwgcXVlcnkpIHsgfQorICAgIHZpcnR1YWwgfk1hdGNoRXhh
Y3RDbGFzc05hbWVzSm9iKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbWF0Y2goTGlzdEhhc2hT
ZXQ8Tm9kZSo+JiByZXN1bHRDb2xsZWN0b3IpCisgICAgeworICAgICAgICBpZiAoIW1fcXVlcnku
aXNFbXB0eSgpKQorICAgICAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMobV9kb2N1bWVudC0+Z2V0
RWxlbWVudHNCeUNsYXNzTmFtZShtX3F1ZXJ5KSwgcmVzdWx0Q29sbGVjdG9yKTsKKyAgICB9Cit9
OworCitjbGFzcyBNYXRjaEV4YWN0VGFnTmFtZXNKb2IgOiBwdWJsaWMgV2ViQ29yZTo6TWF0Y2hK
b2IgeworcHVibGljOgorICAgIE1hdGNoRXhhY3RUYWdOYW1lc0pvYihEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIDogV2ViQ29yZTo6TWF0Y2hKb2IoZG9jdW1lbnQsIHF1
ZXJ5KSB7IH0KKyAgICB2aXJ0dWFsIH5NYXRjaEV4YWN0VGFnTmFtZXNKb2IoKSB7IH0KKworICAg
IHZpcnR1YWwgdm9pZCBtYXRjaChMaXN0SGFzaFNldDxOb2RlKj4mIHJlc3VsdENvbGxlY3RvcikK
KyAgICB7CisgICAgICAgIGlmICghbV9xdWVyeS5pc0VtcHR5KCkpCisgICAgICAgICAgICBhZGRO
b2Rlc1RvUmVzdWx0cyhtX2RvY3VtZW50LT5nZXRFbGVtZW50c0J5TmFtZShtX3F1ZXJ5KSwgcmVz
dWx0Q29sbGVjdG9yKTsKKyAgICB9Cit9OworCitjbGFzcyBNYXRjaFF1ZXJ5U2VsZWN0b3JBbGxK
b2IgOiBwdWJsaWMgV2ViQ29yZTo6TWF0Y2hKb2IgeworcHVibGljOgorICAgIE1hdGNoUXVlcnlT
ZWxlY3RvckFsbEpvYihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIDog
V2ViQ29yZTo6TWF0Y2hKb2IoZG9jdW1lbnQsIHF1ZXJ5KSB7IH0KKyAgICB2aXJ0dWFsIH5NYXRj
aFF1ZXJ5U2VsZWN0b3JBbGxKb2IoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBtYXRjaChMaXN0
SGFzaFNldDxOb2RlKj4mIHJlc3VsdENvbGxlY3RvcikKKyAgICB7CisgICAgICAgIGlmIChtX3F1
ZXJ5LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICAgICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gbV9kb2N1bWVudC0+
cXVlcnlTZWxlY3RvckFsbChtX3F1ZXJ5LCBlYyk7CisgICAgICAgIGlmICghZWMpCisgICAgICAg
ICAgICBhZGROb2Rlc1RvUmVzdWx0cyhsaXN0LCByZXN1bHRDb2xsZWN0b3IpOworICAgIH0KK307
CisKK2NsYXNzIE1hdGNoWFBhdGhKb2IgOiBwdWJsaWMgV2ViQ29yZTo6TWF0Y2hKb2IgeworcHVi
bGljOgorICAgIE1hdGNoWFBhdGhKb2IoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcm
IHF1ZXJ5KSA6IFdlYkNvcmU6Ok1hdGNoSm9iKGRvY3VtZW50LCBxdWVyeSkgeyB9CisgICAgdmly
dHVhbCB+TWF0Y2hYUGF0aEpvYigpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIG1hdGNoKExpc3RI
YXNoU2V0PE5vZGUqPiYgcmVzdWx0Q29sbGVjdG9yKQorICAgIHsKKyNpZiBFTkFCTEUoWFBBVEgp
CisgICAgICAgIGlmIChtX3F1ZXJ5LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgUmVmUHRyPFhQYXRoUmVzdWx0
PiByZXN1bHQgPSBtX2RvY3VtZW50LT5ldmFsdWF0ZShtX3F1ZXJ5LCBtX2RvY3VtZW50LmdldCgp
LCAwLCBYUGF0aFJlc3VsdDo6T1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUsIDAsIGVjKTsKKyAg
ICAgICAgaWYgKGVjIHx8ICFyZXN1bHQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
dW5zaWduZWQgbG9uZyBzaXplID0gcmVzdWx0LT5zbmFwc2hvdExlbmd0aChlYyk7CisgICAgICAg
IGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgIWVjICYmIGkgPCBzaXplOyArK2kpIHsKKyAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSByZXN1bHQtPnNuYXBzaG90SXRlbShpLCBlYyk7CisgICAgICAg
ICAgICBpZiAoIWVjKQorICAgICAgICAgICAgICAgIHJlc3VsdENvbGxlY3Rvci5hZGQobm9kZSk7
CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KK307CisKK2NsYXNzIE1hdGNoUGxhaW5UZXh0Sm9i
IDogcHVibGljIE1hdGNoWFBhdGhKb2IgeworcHVibGljOgorICAgIE1hdGNoUGxhaW5UZXh0Sm9i
KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgOiBNYXRjaFhQYXRoSm9i
KGRvY3VtZW50LCBxdWVyeSkKKyAgICB7CisgICAgICAgIG1fcXVlcnkgPSAiLy90ZXh0KClbY29u
dGFpbnMoLiwgJyIgKyBtX3F1ZXJ5ICsgIicpXSB8IC8vY29tbWVudCgpW2NvbnRhaW5zKC4sICci
ICsgbV9xdWVyeSArICInKV0iOworICAgIH0KKyAgICB2aXJ0dWFsIH5NYXRjaFBsYWluVGV4dEpv
YigpIHsgfQorfTsKKworfQorCiBJbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQo
SW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3JlLCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQp
CiAgICAgOiBFdmVudExpc3RlbmVyKEluc3BlY3RvckRPTUFnZW50VHlwZSkKICAgICAsIG1fY3Nz
U3RvcmUoY3NzU3RvcmUpCiAgICAgLCBtX2Zyb250ZW5kKGZyb250ZW5kKQogICAgICwgbV9sYXN0
Tm9kZUlkKDEpCisgICAgLCBtX21hdGNoSm9ic1RpbWVyKHRoaXMsICZJbnNwZWN0b3JET01BZ2Vu
dDo6b25NYXRjaEpvYnNUaW1lcikKIHsKIH0KIApAQCAtODcsNiArMjEwLDcgQEAgSW5zcGVjdG9y
RE9NQWdlbnQ6On5JbnNwZWN0b3JET01BZ2VudCgpCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnJlc2V0KCkKIHsKKyAgICBzZWFyY2hDYW5jZWxlZCgpOwogICAgIGRpc2NhcmRCaW5kaW5ncygp
OwogCiAgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPERvY3VtZW50PiA+IGNvcHkgPSBtX2RvY3VtZW50
czsKQEAgLTUwNiw2ICs2MzAsMTE0IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50
TGlzdGVuZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpCiAgICAgbV9mcm9udGVu
ZC0+ZGlkR2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGNhbGxJZCwgbm9kZUlkLCBsaXN0ZW5lcnNB
cnJheSk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goY29uc3Qg
U3RyaW5nJiB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBib29sIHJ1blN5bmNocm9ub3VzbHkpCit7
CisgICAgLy8gRklYTUU6IEZldyB0aGluZ3MgYXJlIG1pc3NpbmcgaGVyZToKKyAgICAvLyAxKSBT
ZWFyY2ggd29ya3Mgd2l0aCBub2RlIGdyYW51bGFyaXR5IC0gbnVtYmVyIG9mIG1hdGNoZXMgd2l0
aGluIG5vZGUgaXMgbm90IGNhbGN1bGF0ZWQuCisgICAgLy8gMikgVGhlcmUgaXMgbm8gbmVlZCB0
byBwdXNoIGFsbCBzZWFyY2ggcmVzdWx0cyB0byB0aGUgZnJvbnQtZW5kIGF0IGEgdGltZSwgcHVz
aGluZyBuZXh0IC8gcHJldmlvdXMgcmVzdWx0CisgICAgLy8gICAgaXMgc3VmZmljaWVudC4KKwor
ICAgIGludCBxdWVyeUxlbmd0aCA9IHdoaXRlc3BhY2VUcmltbWVkUXVlcnkubGVuZ3RoKCk7Cisg
ICAgYm9vbCBzdGFydFRhZ0ZvdW5kID0gIXdoaXRlc3BhY2VUcmltbWVkUXVlcnkuZmluZCgnPCcp
OworICAgIGJvb2wgZW5kVGFnRm91bmQgPSB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LnJldmVyc2VG
aW5kKCc+JykgKyAxID09IHF1ZXJ5TGVuZ3RoOworCisgICAgU3RyaW5nIHRhZ05hbWVRdWVyeSA9
IHdoaXRlc3BhY2VUcmltbWVkUXVlcnk7CisgICAgaWYgKHN0YXJ0VGFnRm91bmQgfHwgZW5kVGFn
Rm91bmQpCisgICAgICAgIHRhZ05hbWVRdWVyeSA9IHRhZ05hbWVRdWVyeS5zdWJzdHJpbmcoc3Rh
cnRUYWdGb3VuZCA/IDEgOiAwLCBlbmRUYWdGb3VuZCA/IHF1ZXJ5TGVuZ3RoIC0gMSA6IHF1ZXJ5
TGVuZ3RoKTsKKyAgICBpZiAoIURvY3VtZW50Ojppc1ZhbGlkTmFtZSh0YWdOYW1lUXVlcnkpKQor
ICAgICAgICB0YWdOYW1lUXVlcnkgPSAiIjsKKworICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lUXVl
cnkgPSB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5OworICAgIGlmICghRG9jdW1lbnQ6OmlzVmFsaWRO
YW1lKGF0dHJpYnV0ZU5hbWVRdWVyeSkpCisgICAgICAgIGF0dHJpYnV0ZU5hbWVRdWVyeSA9ICIi
OworCisgICAgU3RyaW5nIGVzY2FwZWRRdWVyeSA9IHdoaXRlc3BhY2VUcmltbWVkUXVlcnk7Cisg
ICAgZXNjYXBlZFF1ZXJ5LnJlcGxhY2UoIiciLCAiXFwnIik7CisgICAgU3RyaW5nIGVzY2FwZWRU
YWdOYW1lUXVlcnkgPSB0YWdOYW1lUXVlcnk7CisgICAgZXNjYXBlZFRhZ05hbWVRdWVyeS5yZXBs
YWNlKCInIiwgIlxcJyIpOworCisgICAgLy8gRmluZCBhbGwgZnJhbWVzLCBpZnJhbWVzIGFuZCBv
YmplY3QgZWxlbWVudHMgdG8gc2VhcmNoIHRoZWlyIGRvY3VtZW50cy4KKyAgICBWZWN0b3I8RG9j
dW1lbnQqPiBkb2N1bWVudHM7CisgICAgZG9jdW1lbnRzLmFwcGVuZChtYWluRnJhbWVEb2N1bWVu
dCgpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxOb2RlTGlzdD4g
ZnJhbWVPd25lcnMgPSBtYWluRnJhbWVEb2N1bWVudCgpLT5xdWVyeVNlbGVjdG9yQWxsKCJpZnJh
bWUsIGZyYW1lLCBvYmplY3QiLCBlYyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWVjICYm
IGZyYW1lT3duZXJzICYmIGkgPCBmcmFtZU93bmVycy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAg
ICBOb2RlKiBub2RlID0gZnJhbWVPd25lcnMtPml0ZW0oaSk7CisgICAgICAgIGlmIChub2RlLT5p
c0ZyYW1lT3duZXJFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVu
dCogZnJhbWVPd25lciA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KG5vZGUp
OworICAgICAgICAgICAgaWYgKGZyYW1lT3duZXItPmNvbnRlbnREb2N1bWVudCgpKQorICAgICAg
ICAgICAgICAgIGRvY3VtZW50cy5hcHBlbmQoZnJhbWVPd25lci0+Y29udGVudERvY3VtZW50KCkp
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2xlYXIgcGVuZGluZyBqb2JzLgorICAgIHNl
YXJjaENhbmNlbGVkKCk7CisKKyAgICAvLyBQb3B1bGF0ZSBuZXcgam9icy4KKyAgICBmb3IgKFZl
Y3RvcjxEb2N1bWVudCo+OjppdGVyYXRvciBpdCA9IGRvY3VtZW50cy5iZWdpbigpOyBpdCAhPSBk
b2N1bWVudHMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKCF0YWdOYW1lUXVlcnkuaXNFbXB0
eSgpICYmIHN0YXJ0VGFnRm91bmQgJiYgZW5kVGFnRm91bmQpIHsKKyAgICAgICAgICAgIG1fcGVu
ZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoRXhhY3RUYWdOYW1lc0pvYigqaXQsIHRhZ05h
bWVRdWVyeSkpOworICAgICAgICAgICAgbV9wZW5kaW5nTWF0Y2hKb2JzLmFwcGVuZChuZXcgTWF0
Y2hQbGFpblRleHRKb2IoKml0LCBlc2NhcGVkUXVlcnkpKTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0YWdOYW1lUXVlcnkuaXNFbXB0eSgpICYmIHN0
YXJ0VGFnRm91bmQpIHsKKyAgICAgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3
IE1hdGNoWFBhdGhKb2IoKml0LCAiLy8qW3N0YXJ0cy13aXRoKG5hbWUoKSwgJyIgKyBlc2NhcGVk
VGFnTmFtZVF1ZXJ5ICsgIicpXSIpKTsKKyAgICAgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5h
cHBlbmQobmV3IE1hdGNoUGxhaW5UZXh0Sm9iKCppdCwgZXNjYXBlZFF1ZXJ5KSk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGFnTmFtZVF1ZXJ5Lmlz
RW1wdHkoKSAmJiBlbmRUYWdGb3VuZCkgeworICAgICAgICAgICAgLy8gRklYTUU6IHdlIHNob3Vs
ZCBoYXZlIGEgbWF0Y2hFbmRPZlRhZ05hbWVzIHNlYXJjaCBmdW5jdGlvbiBpZiBlbmRUYWdGb3Vu
ZCBpcyB0cnVlIGJ1dCBub3Qgc3RhcnRUYWdGb3VuZC4KKyAgICAgICAgICAgIC8vIFRoaXMgcmVx
dWlyZXMgZW5kcy13aXRoKCkgc3VwcG9ydCBpbiBYUGF0aCwgV2ViS2l0IG9ubHkgc3VwcG9ydHMg
c3RhcnRzLXdpdGgoKSBhbmQgY29udGFpbnMoKS4KKyAgICAgICAgICAgIG1fcGVuZGluZ01hdGNo
Sm9icy5hcHBlbmQobmV3IE1hdGNoWFBhdGhKb2IoKml0LCAiLy8qW2NvbnRhaW5zKG5hbWUoKSwg
JyIgKyBlc2NhcGVkVGFnTmFtZVF1ZXJ5ICsgIicpXSIpKTsKKyAgICAgICAgICAgIG1fcGVuZGlu
Z01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoUGxhaW5UZXh0Sm9iKCppdCwgZXNjYXBlZFF1ZXJ5
KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgbWF0
Y2hlc0V2ZXJ5Tm9kZSA9IHdoaXRlc3BhY2VUcmltbWVkUXVlcnkgPT0gIi8vKiIgfHwgd2hpdGVz
cGFjZVRyaW1tZWRRdWVyeSA9PSAiKiI7CisgICAgICAgIGlmIChtYXRjaGVzRXZlcnlOb2RlKSB7
CisgICAgICAgICAgICAvLyBUaGVzZSBxdWVyaWVzIHdpbGwgbWF0Y2ggZXZlcnkgbm9kZS4gTWF0
Y2hpbmcgZXZlcnl0aGluZyBpc24ndCB1c2VmdWwgYW5kIGNhbiBiZSBzbG93IGZvciBsYXJnZSBw
YWdlcywKKyAgICAgICAgICAgIC8vIHNvIGxpbWl0IHRoZSBzZWFyY2ggZnVuY3Rpb25zIGxpc3Qg
dG8gcGxhaW4gdGV4dCBhbmQgYXR0cmlidXRlIG1hdGNoaW5nIGZvciB0aGVzZS4KKyAgICAgICAg
ICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoWFBhdGhKb2IoKml0LCAiLy8q
W2NvbnRhaW5zKEAqLCAnIiArIGVzY2FwZWRRdWVyeSArICInKV0iKSk7CisgICAgICAgICAgICBt
X3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBNYXRjaFBsYWluVGV4dEpvYigqaXQsIGVzY2Fw
ZWRRdWVyeSkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBNYXRjaEV4YWN0SWRKb2Io
Kml0LCB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5KSk7CisgICAgICAgIG1fcGVuZGluZ01hdGNoSm9i
cy5hcHBlbmQobmV3IE1hdGNoRXhhY3RDbGFzc05hbWVzSm9iKCppdCwgd2hpdGVzcGFjZVRyaW1t
ZWRRdWVyeSkpOworICAgICAgICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBNYXRjaEV4
YWN0VGFnTmFtZXNKb2IoKml0LCB0YWdOYW1lUXVlcnkpKTsKKyAgICAgICAgbV9wZW5kaW5nTWF0
Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hRdWVyeVNlbGVjdG9yQWxsSm9iKCppdCwgIlsiICsgYXR0
cmlidXRlTmFtZVF1ZXJ5ICsgIl0iKSk7CisgICAgICAgIG1fcGVuZGluZ01hdGNoSm9icy5hcHBl
bmQobmV3IE1hdGNoUXVlcnlTZWxlY3RvckFsbEpvYigqaXQsIHdoaXRlc3BhY2VUcmltbWVkUXVl
cnkpKTsKKyAgICAgICAgbV9wZW5kaW5nTWF0Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hYUGF0aEpv
YigqaXQsICIvLypbY29udGFpbnMoQCosICciICsgZXNjYXBlZFF1ZXJ5ICsgIicpXSIpKTsKKyAg
ICAgICAgaWYgKCF0YWdOYW1lUXVlcnkuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9wZW5kaW5n
TWF0Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hYUGF0aEpvYigqaXQsICIvLypbY29udGFpbnMobmFt
ZSgpLCAnIiArIGVzY2FwZWRUYWdOYW1lUXVlcnkgKyAiJyldIikpOworICAgICAgICBtX3BlbmRp
bmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBNYXRjaFBsYWluVGV4dEpvYigqaXQsIGVzY2FwZWRRdWVy
eSkpOworICAgICAgICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBNYXRjaFhQYXRoSm9i
KCppdCwgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSkpOworICAgIH0KKworICAgIGlmIChydW5TeW5j
aHJvbm91c2x5KSB7CisgICAgICAgIC8vIEZvciB0ZXN0cy4KKyAgICAgICAgTGlzdEhhc2hTZXQ8
Tm9kZSo+IHJlc3VsdENvbGxlY3RvcjsKKyAgICAgICAgZm9yIChEZXF1ZTxNYXRjaEpvYio+Ojpp
dGVyYXRvciBpdCA9IG1fcGVuZGluZ01hdGNoSm9icy5iZWdpbigpOyBpdCAhPSBtX3BlbmRpbmdN
YXRjaEpvYnMuZW5kKCk7ICsraXQpCisgICAgICAgICAgICAoKml0KS0+bWF0Y2gocmVzdWx0Q29s
bGVjdG9yKTsKKyAgICAgICAgcmVwb3J0Tm9kZXNBc1NlYXJjaFJlc3VsdHMocmVzdWx0Q29sbGVj
dG9yKTsKKyAgICAgICAgc2VhcmNoQ2FuY2VsZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBtX21hdGNoSm9ic1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6c2VhcmNoQ2FuY2VsZWQoKQoreworICAgIGlmIChtX21hdGNoSm9ic1RpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgIG1fbWF0Y2hKb2JzVGltZXIuc3RvcCgpOworICAgIGRlbGV0
ZUFsbFZhbHVlcyhtX3BlbmRpbmdNYXRjaEpvYnMpOworICAgIG1fcGVuZGluZ01hdGNoSm9icy5j
bGVhcigpOworICAgIG1fc2VhcmNoUmVzdWx0cy5jbGVhcigpOworfQorCiBTdHJpbmcgSW5zcGVj
dG9yRE9NQWdlbnQ6OmRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkgY29uc3QK
IHsKICAgICBpZiAoIWRvY3VtZW50IHx8IGRvY3VtZW50LT51cmwoKS5pc051bGwoKSkKQEAgLTEz
MzAsNiArMTU2MiwzNiBAQCBDU1NTdHlsZVNoZWV0KiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0UGFy
ZW50U3R5bGVTaGVldChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZQogICAgIHJldHVybiBwYXJl
bnRTdHlsZVNoZWV0OwogfQogCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpvbk1hdGNoSm9ic1Rp
bWVyKFRpbWVyPEluc3BlY3RvckRPTUFnZW50PiopCit7CisgICAgaWYgKCFtX3BlbmRpbmdNYXRj
aEpvYnMuc2l6ZSgpKSB7CisgICAgICAgIHNlYXJjaENhbmNlbGVkKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBMaXN0SGFzaFNldDxOb2RlKj4gcmVzdWx0Q29sbGVjdG9yOworICAg
IE1hdGNoSm9iKiBqb2IgPSBtX3BlbmRpbmdNYXRjaEpvYnMudGFrZUZpcnN0KCk7CisgICAgam9i
LT5tYXRjaChyZXN1bHRDb2xsZWN0b3IpOworICAgIGRlbGV0ZSBqb2I7CisKKyAgICByZXBvcnRO
b2Rlc0FzU2VhcmNoUmVzdWx0cyhyZXN1bHRDb2xsZWN0b3IpOworCisgICAgbV9tYXRjaEpvYnNU
aW1lci5zdGFydE9uZVNob3QoMC4wMjUpOworfQorCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpy
ZXBvcnROb2Rlc0FzU2VhcmNoUmVzdWx0cyhMaXN0SGFzaFNldDxOb2RlKj4mIHJlc3VsdENvbGxl
Y3RvcikKK3sKKyAgICBTY3JpcHRBcnJheSBub2RlSWRzID0gbV9mcm9udGVuZC0+bmV3U2NyaXB0
QXJyYXkoKTsKKyAgICBpbnQgaW5kZXggPSAwOworICAgIGZvciAoTGlzdEhhc2hTZXQ8Tm9kZSo+
OjppdGVyYXRvciBpdCA9IHJlc3VsdENvbGxlY3Rvci5iZWdpbigpOyBpdCAhPSByZXN1bHRDb2xs
ZWN0b3IuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKG1fc2VhcmNoUmVzdWx0cy5jb250YWlu
cygqaXQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1fc2VhcmNoUmVzdWx0cy5h
ZGQoKml0KTsKKyAgICAgICAgbm9kZUlkcy5zZXQoaW5kZXgrKywgc3RhdGljX2Nhc3Q8bG9uZyBs
b25nPihwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKCppdCkpKTsKKyAgICB9CisgICAgbV9mcm9udGVu
ZC0+YWRkTm9kZXNUb1NlYXJjaFJlc3VsdChub2RlSWRzKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5oCmluZGV4IGY4OTI1YjUuLmE5NjI1NjkgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtMzEsMTMgKzMxLDE3IEBACiAjZGVmaW5lIEluc3BlY3Rv
ckRPTUFnZW50X2gKIAogI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTU3RvcmUuaCIKKyNpbmNsdWRlICJOb2RlTGlzdC5o
IgogI2luY2x1ZGUgIlNjcmlwdEFycmF5LmgiCiAjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCiAj
aW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKKyNpbmNsdWRlICJUaW1lci5oIgogCisjaW5jbHVkZSA8
d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtNTMsOCArNTcsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQ1NTU3R5bGVTaGVldDsKICAgICBjbGFzcyBF
bGVtZW50OwogICAgIGNsYXNzIEV2ZW50OwotICAgIGNsYXNzIERvY3VtZW50OwogICAgIGNsYXNz
IEluc3BlY3RvckZyb250ZW5kOworICAgIGNsYXNzIE1hdGNoSm9iOwogICAgIGNsYXNzIE5hbWVO
b2RlTWFwOwogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3MgUGFnZTsKQEAgLTEwMSw2ICsxMDUs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY2hhbmdlVGFnTmFtZShsb25n
IGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgYm9vbCBl
eHBhbmRlZCk7CiAgICAgICAgIHZvaWQgc2V0VGV4dE5vZGVWYWx1ZShsb25nIGNhbGxJZCwgbG9u
ZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgICAgICB2b2lkIGdldEV2ZW50TGlz
dGVuZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOworICAgICAgICB2b2lkIHBl
cmZvcm1TZWFyY2goY29uc3QgU3RyaW5nJiB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBib29sIHJ1
blN5bmNocm9ub3VzbHkpOworICAgICAgICB2b2lkIHNlYXJjaENhbmNlbGVkKCk7CiAKICAgICAg
ICAgLy8gTWV0aG9kcyBjYWxsZWQgZnJvbSB0aGUgZnJvbnRlbmQgZm9yIENTUyBzdHlsZXMgaW5z
cGVjdGlvbi4KICAgICAgICAgdm9pZCBnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlk
LCBib29sIGF1dGhvck9ubHkpOwpAQCAtMTY1LDYgKzE3MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgU3RyaW5nIGRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkg
Y29uc3Q7CiAgICAgICAgIEluc3BlY3RvckNTU1N0b3JlKiBjc3NTdG9yZSgpIHsgcmV0dXJuIG1f
Y3NzU3RvcmU7IH0KIAorICAgICAgICB2b2lkIG9uTWF0Y2hKb2JzVGltZXIoVGltZXI8SW5zcGVj
dG9yRE9NQWdlbnQ+Kik7CisgICAgICAgIHZvaWQgcmVwb3J0Tm9kZXNBc1NlYXJjaFJlc3VsdHMo
TGlzdEhhc2hTZXQ8Tm9kZSo+JiByZXN1bHRDb2xsZWN0b3IpOworCiAgICAgICAgIFNjcmlwdE9i
amVjdCBidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBib29sIGJpbmQp
OwogICAgICAgICB2b2lkIHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhDU1NTdHls
ZURlY2xhcmF0aW9uKiwgU2NyaXB0T2JqZWN0JiByZXN1bHQpOwogICAgICAgICBTY3JpcHRBcnJh
eSBidWlsZEFycmF5Rm9yRGlzYWJsZWRTdHlsZVByb3BlcnRpZXMoRGlzYWJsZWRTdHlsZURlY2xh
cmF0aW9uKik7CkBAIC0xODgsOSArMTk3LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgSGFzaFNldDxsb25nPiBtX2NoaWxkcmVuUmVxdWVzdGVkOwogICAgICAgICBsb25nIG1fbGFz
dE5vZGVJZDsKICAgICAgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPERvY3VtZW50PiA+IG1fZG9jdW1l
bnRzOworICAgICAgICBEZXF1ZTxNYXRjaEpvYio+IG1fcGVuZGluZ01hdGNoSm9iczsKKyAgICAg
ICAgVGltZXI8SW5zcGVjdG9yRE9NQWdlbnQ+IG1fbWF0Y2hKb2JzVGltZXI7CisgICAgICAgIEhh
c2hTZXQ8UmVmUHRyPE5vZGU+ID4gbV9zZWFyY2hSZXN1bHRzOwogICAgIH07CiAKLQogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yRE9NQWdlbnRf
aCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAppbmRleCAzOTBlZGFiLi5l
ZWVmYmQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5j
cHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCkBAIC03Mzks
NyArNzM5LDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6dXBkYXRlRE9NU3RvcmFnZShsb25n
IHN0b3JhZ2VJZCkKIH0KICNlbmRpZgogCi12b2lkIEluc3BlY3RvckZyb250ZW5kOjphZGROb2Rl
c1RvU2VhcmNoUmVzdWx0KGNvbnN0IFN0cmluZyYgbm9kZUlkcykKK3ZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OmFkZE5vZGVzVG9TZWFyY2hSZXN1bHQoY29uc3QgU2NyaXB0QXJyYXkmIG5vZGVJZHMp
CiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlz
cGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImFkZE5vZGVzVG9TZWFyY2hS
ZXN1bHQiKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCmluZGV4IGI5Zjg3ZWYu
LjgyY2RmOGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaApAQCAtMTU4LDcg
KzE1OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBkaWRHZXRDb29raWVz
KGxvbmcgY2FsbElkLCBjb25zdCBTY3JpcHRBcnJheSYgY29va2llcywgY29uc3QgU3RyaW5nJiBj
b29raWVzU3RyaW5nKTsKICAgICAgICAgdm9pZCBkaWREaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQo
bG9uZyBjYWxsSWQsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogcmVzdWx0LCBib29sIGlzRXhjZXB0
aW9uKTsKIAotICAgICAgICB2b2lkIGFkZE5vZGVzVG9TZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5n
JiBub2RlSWRzKTsKKyAgICAgICAgdm9pZCBhZGROb2Rlc1RvU2VhcmNoUmVzdWx0KGNvbnN0IFNj
cmlwdEFycmF5JiBub2RlSWRzKTsKIAogICAgICAgICB2b2lkIGNvbnRleHRNZW51SXRlbVNlbGVj
dGVkKGludCBpdGVtSWQpOwogICAgICAgICB2b2lkIGNvbnRleHRNZW51Q2xlYXJlZCgpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwCmluZGV4IDk5OWI4ZDYuLmYwZTM5MWQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAKQEAgLTE2OSw3ICsxNjks
NiBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlOjp1cGRhdGVTY3JpcHRPYmplY3QoSW5zcGVjdG9y
RnJvbnRlbmQqIGZyb250ZW5kKQogICAgICAgICBqc29uT2JqZWN0LnNldCgiZXhwZWN0ZWRDb250
ZW50TGVuZ3RoIiwgbV9leHBlY3RlZENvbnRlbnRMZW5ndGgpOwogICAgICAgICBqc29uT2JqZWN0
LnNldCgic3RhdHVzQ29kZSIsIG1fcmVzcG9uc2VTdGF0dXNDb2RlKTsKICAgICAgICAganNvbk9i
amVjdC5zZXQoInN0YXR1c1RleHQiLCBtX3Jlc3BvbnNlU3RhdHVzVGV4dCk7Ci0gICAgICAgIGpz
b25PYmplY3Quc2V0KCJzdWdnZXN0ZWRGaWxlbmFtZSIsIG1fc3VnZ2VzdGVkRmlsZW5hbWUpOwog
ICAgICAgICBTY3JpcHRPYmplY3QgcmVzcG9uc2VIZWFkZXJzID0gZnJvbnRlbmQtPm5ld1Njcmlw
dE9iamVjdCgpOwogICAgICAgICBwb3B1bGF0ZUhlYWRlcnNPYmplY3QoJnJlc3BvbnNlSGVhZGVy
cywgbV9yZXNwb25zZUhlYWRlckZpZWxkcyk7CiAgICAgICAgIGpzb25PYmplY3Quc2V0KCJyZXNw
b25zZUhlYWRlcnMiLCByZXNwb25zZUhlYWRlcnMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRWxlbWVudHNQYW5lbC5qcwppbmRleCBjODUzNDQwLi41NWJhODJkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcworKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcwpAQCAtMjQwLDcgKzI0MCw3
IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0
aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPSAwOwogICAgICAgICB0aGlzLl9zZWFyY2hS
ZXN1bHRzID0gW107Ci0gICAgICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdldERlZmF1bHQoKS5z
ZWFyY2hDYW5jZWxlZChmdW5jdGlvbigpIHt9KTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5z
ZWFyY2hDYW5jZWxlZCgpOwogICAgIH0sCiAKICAgICBwZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihx
dWVyeSkKQEAgLTI1Niw3ICsyNTYsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX21hdGNoZXNDb3VudFVwZGF0ZVRpbWVvdXQgPSBudWxs
OwogICAgICAgICB0aGlzLl9zZWFyY2hRdWVyeSA9IHF1ZXJ5OwogCi0gICAgICAgIEluamVjdGVk
U2NyaXB0QWNjZXNzLmdldERlZmF1bHQoKS5wZXJmb3JtU2VhcmNoKHdoaXRlc3BhY2VUcmltbWVk
UXVlcnksIGZhbHNlLCBmdW5jdGlvbigpIHt9KTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5w
ZXJmb3JtU2VhcmNoKHdoaXRlc3BhY2VUcmltbWVkUXVlcnkpOwogICAgIH0sCiAKICAgICBzZWFy
Y2hpbmdGb3JOb2RlV2FzRW5hYmxlZDogZnVuY3Rpb24oKQpAQCAtMjg4LDEyICsyODgsMTEgQEAg
V2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgYWRkTm9kZXNU
b1NlYXJjaFJlc3VsdDogZnVuY3Rpb24obm9kZUlkcykKICAgICB7Ci0gICAgICAgIGlmICghbm9k
ZUlkcykKKyAgICAgICAgaWYgKCFub2RlSWRzLmxlbmd0aCkKICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICB2YXIgbm9kZUlkc0FycmF5ID0gbm9kZUlkcy5zcGxpdCgiLCIpOwotICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVJZHNBcnJheS5sZW5ndGg7ICsraSkgewotICAgICAg
ICAgICAgdmFyIG5vZGVJZCA9IG5vZGVJZHNBcnJheVtpXTsKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBub2RlSWRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgbm9kZUlkID0g
bm9kZUlkc1tpXTsKICAgICAgICAgICAgIHZhciBub2RlID0gV2ViSW5zcGVjdG9yLmRvbUFnZW50
Lm5vZGVGb3JJZChub2RlSWQpOwogICAgICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0lu
amVjdGVkU2NyaXB0LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2Ny
aXB0LmpzCmluZGV4IDQwMDJlMjMuLmU2MmE5MTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKQEAgLTgzLDggKzgzLDYgQEAgSW5qZWN0ZWRTY3Jp
cHQucmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cCA9IGZ1bmN0aW9uKG9iamVjdEdyb3VwTmFtZSkg
ewogLy8gQ2FsbGVkIGZyb20gd2l0aGluIEluc3BlY3RvckNvbnRyb2xsZXIgb24gdGhlICdpbnNw
ZWN0ZWQgcGFnZScgc2lkZS4KIEluamVjdGVkU2NyaXB0LnJlc2V0ID0gZnVuY3Rpb24oKQogewot
ICAgIEluamVjdGVkU2NyaXB0Ll9zZWFyY2hSZXN1bHRzID0gW107Ci0gICAgSW5qZWN0ZWRTY3Jp
cHQuX2luY2x1ZGVkSW5TZWFyY2hSZXN1bHRzUHJvcGVydHlOYW1lID0gIl9faW5jbHVkZWRJbklu
c3BlY3RvclNlYXJjaFJlc3VsdHMiOwogfQogCiBJbmplY3RlZFNjcmlwdC5yZXNldCgpOwpAQCAt
MjExLDcgKzIwOSw3IEBAIEluamVjdGVkU2NyaXB0LnNldFByb3BlcnR5VmFsdWUgPSBmdW5jdGlv
bihvYmplY3RQcm94eSwgcHJvcGVydHlOYW1lLCBleHByZXNzaW9uCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0gY2F0Y2goZSkgewogICAgICAgICB0cnkgewotICAgICAgICAgICAgdmFyIHJl
c3VsdCA9IGluc3BlY3RlZFdpbmRvdy5ldmFsKCJcIiIgKyBJbmplY3RlZFNjcmlwdC5fZXNjYXBl
Q2hhcmFjdGVycyhleHByZXNzaW9uLCAiXCIiKSArICJcIiIpOworICAgICAgICAgICAgdmFyIHJl
c3VsdCA9IGluc3BlY3RlZFdpbmRvdy5ldmFsKCJcIiIgKyBleHByZXNzaW9uLnJlcGxhY2UoLyIv
ZywgIlxcXCIiKSArICJcIiIpOwogICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5TmFtZV0gPSBy
ZXN1bHQ7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBjYXRjaChlKSB7CkBA
IC0zNTUsMjQ3ICszNTMsNiBAQCBJbmplY3RlZFNjcmlwdC5nZXROb2RlSWQgPSBmdW5jdGlvbihu
b2RlKQogICAgIHJldHVybiBJbmplY3RlZFNjcmlwdEhvc3QucHVzaE5vZGVQYXRoVG9Gcm9udGVu
ZChub2RlLCBmYWxzZSwgZmFsc2UpOwogfQogCi1JbmplY3RlZFNjcmlwdC5wZXJmb3JtU2VhcmNo
ID0gZnVuY3Rpb24od2hpdGVzcGFjZVRyaW1tZWRRdWVyeSwgcnVuU3luY2hyb25vdXNseSkKLXsK
LSAgICAvLyBGSVhNRTogRmV3IHRoaW5ncyBhcmUgbWlzc2luZyBoZXJlOgotICAgIC8vIDEpIFNl
YXJjaCB3b3JrcyB3aXRoIG5vZGUgZ3JhbnVsYXJpdHkgLSBudW1iZXIgb2YgbWF0Y2hlcyB3aXRo
aW4gbm9kZSBpcyBub3QgY2FsY3VsYXRlZC4KLSAgICAvLyAyKSBTZWFyY2ggZG9lcyBub3Qgd29y
ayBvdXRzaWRlIG1haW4gZG9jdW1lbnRzJyBkb21haW4gLSB3ZSBuZWVkIHRvIHVzZSBzcGVjaWZp
YyBJbmplY3RlZFNjcmlwdCBpbnN0YW5jZXMKLSAgICAvLyAgICBmb3Igb3RoZXIgZG9tYWlucy4K
LSAgICAvLyAzKSBUaGVyZSBpcyBubyBuZWVkIHRvIHB1c2ggYWxsIHNlYXJjaCByZXN1bHRzIHRv
IHRoZSBmcm9udC1lbmQgYXQgYSB0aW1lLCBwdXNoaW5nIG5leHQgLyBwcmV2aW91cyByZXN1bHQK
LSAgICAvLyAgICBpcyBzdWZmaWNpZW50LgotICAgIHZhciB0YWdOYW1lUXVlcnkgPSB3aGl0ZXNw
YWNlVHJpbW1lZFF1ZXJ5OwotICAgIHZhciBhdHRyaWJ1dGVOYW1lUXVlcnkgPSB3aGl0ZXNwYWNl
VHJpbW1lZFF1ZXJ5OwotICAgIHZhciBzdGFydFRhZ0ZvdW5kID0gKHRhZ05hbWVRdWVyeS5pbmRl
eE9mKCI8IikgPT09IDApOwotICAgIHZhciBlbmRUYWdGb3VuZCA9ICh0YWdOYW1lUXVlcnkubGFz
dEluZGV4T2YoIj4iKSA9PT0gKHRhZ05hbWVRdWVyeS5sZW5ndGggLSAxKSk7Ci0KLSAgICBpZiAo
c3RhcnRUYWdGb3VuZCB8fCBlbmRUYWdGb3VuZCkgewotICAgICAgICB2YXIgdGFnTmFtZVF1ZXJ5
TGVuZ3RoID0gdGFnTmFtZVF1ZXJ5Lmxlbmd0aDsKLSAgICAgICAgdGFnTmFtZVF1ZXJ5ID0gdGFn
TmFtZVF1ZXJ5LnN1YnN0cmluZygoc3RhcnRUYWdGb3VuZCA/IDEgOiAwKSwgKGVuZFRhZ0ZvdW5k
ID8gKHRhZ05hbWVRdWVyeUxlbmd0aCAtIDEpIDogdGFnTmFtZVF1ZXJ5TGVuZ3RoKSk7Ci0gICAg
fQotCi0gICAgLy8gQ2hlY2sgdGhlIHRhZ05hbWVRdWVyeSBpcyBpdCBpcyBhIHBvc3NpYmx5IHZh
bGlkIHRhZyBuYW1lLgotICAgIGlmICghL15bYS16QS1aMC05XC1fOl0rJC8udGVzdCh0YWdOYW1l
UXVlcnkpKQotICAgICAgICB0YWdOYW1lUXVlcnkgPSBudWxsOwotCi0gICAgLy8gQ2hlY2sgdGhl
IGF0dHJpYnV0ZU5hbWVRdWVyeSBpcyBpdCBpcyBhIHBvc3NpYmx5IHZhbGlkIHRhZyBuYW1lLgot
ICAgIGlmICghL15bYS16QS1aMC05XC1fOl0rJC8udGVzdChhdHRyaWJ1dGVOYW1lUXVlcnkpKQot
ICAgICAgICBhdHRyaWJ1dGVOYW1lUXVlcnkgPSBudWxsOwotCi0gICAgY29uc3QgZXNjYXBlZFF1
ZXJ5ID0gSW5qZWN0ZWRTY3JpcHQuX2VzY2FwZUNoYXJhY3RlcnMod2hpdGVzcGFjZVRyaW1tZWRR
dWVyeSwgIiciKTsKLSAgICBjb25zdCBlc2NhcGVkVGFnTmFtZVF1ZXJ5ID0gKHRhZ05hbWVRdWVy
eSA/ICBJbmplY3RlZFNjcmlwdC5fZXNjYXBlQ2hhcmFjdGVycyh0YWdOYW1lUXVlcnksICInIikg
OiBudWxsKTsKLSAgICBjb25zdCBlc2NhcGVkV2hpdGVzcGFjZVRyaW1tZWRRdWVyeSA9IEluamVj
dGVkU2NyaXB0Ll9lc2NhcGVDaGFyYWN0ZXJzKHdoaXRlc3BhY2VUcmltbWVkUXVlcnksICInIik7
Ci0gICAgY29uc3Qgc2VhcmNoUmVzdWx0c1Byb3BlcnR5ID0gSW5qZWN0ZWRTY3JpcHQuX2luY2x1
ZGVkSW5TZWFyY2hSZXN1bHRzUHJvcGVydHlOYW1lOwotCi0gICAgZnVuY3Rpb24gYWRkTm9kZXNU
b1Jlc3VsdHMobm9kZXMsIGxlbmd0aCwgZ2V0SXRlbSkKLSAgICB7Ci0gICAgICAgIGlmICghbGVu
Z3RoKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBub2RlSWRzID0gW107Ci0g
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZh
ciBub2RlID0gZ2V0SXRlbS5jYWxsKG5vZGVzLCBpKTsKLSAgICAgICAgICAgIC8vIFNraXAgdGhp
cyBub2RlIGlmIGl0IGFscmVhZHkgaGFzIHRoZSBwcm9wZXJ0eS4KLSAgICAgICAgICAgIGlmIChz
ZWFyY2hSZXN1bHRzUHJvcGVydHkgaW4gbm9kZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgaWYgKCFJbmplY3RlZFNjcmlwdC5fc2VhcmNoUmVzdWx0cy5sZW5ndGgp
IHsKLSAgICAgICAgICAgICAgICBJbmplY3RlZFNjcmlwdC5fY3VycmVudFNlYXJjaFJlc3VsdElu
ZGV4ID0gMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbm9kZVtzZWFyY2hSZXN1bHRz
UHJvcGVydHldID0gdHJ1ZTsKLSAgICAgICAgICAgIEluamVjdGVkU2NyaXB0Ll9zZWFyY2hSZXN1
bHRzLnB1c2gobm9kZSk7Ci0gICAgICAgICAgICB2YXIgbm9kZUlkID0gSW5qZWN0ZWRTY3JpcHRI
b3N0LnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAg
ICAgIG5vZGVJZHMucHVzaChub2RlSWQpOwotICAgICAgICB9Ci0gICAgICAgIEluamVjdGVkU2Ny
aXB0SG9zdC5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KG5vZGVJZHMuam9pbigiLCIpKTsKLSAgICB9
Ci0KLSAgICBmdW5jdGlvbiBtYXRjaEV4YWN0SXRlbXMoZG9jKQotICAgIHsKLSAgICAgICAgbWF0
Y2hFeGFjdElkLmNhbGwodGhpcywgZG9jKTsKLSAgICAgICAgbWF0Y2hFeGFjdENsYXNzTmFtZXMu
Y2FsbCh0aGlzLCBkb2MpOwotICAgICAgICBtYXRjaEV4YWN0VGFnTmFtZXMuY2FsbCh0aGlzLCBk
b2MpOwotICAgICAgICBtYXRjaEV4YWN0QXR0cmlidXRlTmFtZXMuY2FsbCh0aGlzLCBkb2MpOwot
ICAgIH0KLQotICAgIGZ1bmN0aW9uIG1hdGNoRXhhY3RJZChkb2MpCi0gICAgewotICAgICAgICBj
b25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmdldEVsZW1lbnRCeUlkLmNhbGwoZG9jLCB3aGl0
ZXNwYWNlVHJpbW1lZFF1ZXJ5KTsKLSAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0aGlz
LCByZXN1bHQsIChyZXN1bHQgPyAxIDogMCksIGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcyB9KTsK
LSAgICB9Ci0KLSAgICBmdW5jdGlvbiBtYXRjaEV4YWN0Q2xhc3NOYW1lcyhkb2MpCi0gICAgewot
ICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmdldEVsZW1lbnRzQnlDbGFzc05h
bWUuY2FsbChkb2MsIHdoaXRlc3BhY2VUcmltbWVkUXVlcnkpOwotICAgICAgICBhZGROb2Rlc1Rv
UmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0Lmxlbmd0aCwgcmVzdWx0Lml0ZW0pOwot
ICAgIH0KLQotICAgIGZ1bmN0aW9uIG1hdGNoRXhhY3RUYWdOYW1lcyhkb2MpCi0gICAgewotICAg
ICAgICBpZiAoIXRhZ05hbWVRdWVyeSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY29u
c3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5nZXRFbGVtZW50c0J5VGFnTmFtZS5jYWxsKGRvYywg
dGFnTmFtZVF1ZXJ5KTsKLSAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0aGlzLCByZXN1
bHQsIHJlc3VsdC5sZW5ndGgsIHJlc3VsdC5pdGVtKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBt
YXRjaEV4YWN0QXR0cmlidXRlTmFtZXMoZG9jKQotICAgIHsKLSAgICAgICAgaWYgKCFhdHRyaWJ1
dGVOYW1lUXVlcnkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNvbnN0IHJlc3VsdCA9
IGRvYy5fX3Byb3RvX18ucXVlcnlTZWxlY3RvckFsbC5jYWxsKGRvYywgIlsiICsgYXR0cmlidXRl
TmFtZVF1ZXJ5ICsgIl0iKTsKLSAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0aGlzLCBy
ZXN1bHQsIHJlc3VsdC5sZW5ndGgsIHJlc3VsdC5pdGVtKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlv
biBtYXRjaFBhcnRpYWxUYWdOYW1lcyhkb2MpCi0gICAgewotICAgICAgICBpZiAoIXRhZ05hbWVR
dWVyeSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jLl9f
cHJvdG9fXy5ldmFsdWF0ZS5jYWxsKGRvYywgIi8vKltjb250YWlucyhuYW1lKCksICciICsgZXNj
YXBlZFRhZ05hbWVRdWVyeSArICInKV0iLCBkb2MsIG51bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURf
Tk9ERV9TTkFQU0hPVF9UWVBFKTsKLSAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0aGlz
LCByZXN1bHQsIHJlc3VsdC5zbmFwc2hvdExlbmd0aCwgcmVzdWx0LnNuYXBzaG90SXRlbSk7Ci0g
ICAgfQotCi0gICAgZnVuY3Rpb24gbWF0Y2hTdGFydE9mVGFnTmFtZXMoZG9jKQotICAgIHsKLSAg
ICAgICAgaWYgKCF0YWdOYW1lUXVlcnkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNv
bnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18uZXZhbHVhdGUuY2FsbChkb2MsICIvLypbc3RhcnRz
LXdpdGgobmFtZSgpLCAnIiArIGVzY2FwZWRUYWdOYW1lUXVlcnkgKyAiJyldIiwgZG9jLCBudWxs
LCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSk7Ci0gICAgICAgIGFkZE5v
ZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQuc25hcHNob3RMZW5ndGgsIHJl
c3VsdC5zbmFwc2hvdEl0ZW0pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIG1hdGNoUGFydGlhbFRh
Z05hbWVzQW5kQXR0cmlidXRlVmFsdWVzKGRvYykKLSAgICB7Ci0gICAgICAgIGlmICghdGFnTmFt
ZVF1ZXJ5KSB7Ci0gICAgICAgICAgICBtYXRjaFBhcnRpYWxBdHRyaWJ1dGVWYWx1ZXMuY2FsbCh0
aGlzLCBkb2MpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgY29u
c3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5ldmFsdWF0ZS5jYWxsKGRvYywgIi8vKltjb250YWlu
cyhuYW1lKCksICciICsgZXNjYXBlZFRhZ05hbWVRdWVyeSArICInKSBvciBjb250YWlucyhAKiwg
JyIgKyBlc2NhcGVkUXVlcnkgKyAiJyldIiwgZG9jLCBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVE
X05PREVfU05BUFNIT1RfVFlQRSk7Ci0gICAgICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhp
cywgcmVzdWx0LCByZXN1bHQuc25hcHNob3RMZW5ndGgsIHJlc3VsdC5zbmFwc2hvdEl0ZW0pOwot
ICAgIH0KLQotICAgIGZ1bmN0aW9uIG1hdGNoUGFydGlhbEF0dHJpYnV0ZVZhbHVlcyhkb2MpCi0g
ICAgewotICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmV2YWx1YXRlLmNhbGwo
ZG9jLCAiLy8qW2NvbnRhaW5zKEAqLCAnIiArIGVzY2FwZWRRdWVyeSArICInKV0iLCBkb2MsIG51
bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKTsKLSAgICAgICAgYWRk
Tm9kZXNUb1Jlc3VsdHMuY2FsbCh0aGlzLCByZXN1bHQsIHJlc3VsdC5zbmFwc2hvdExlbmd0aCwg
cmVzdWx0LnNuYXBzaG90SXRlbSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbWF0Y2hTdHlsZVNl
bGVjdG9yKGRvYykKLSAgICB7Ci0gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18u
cXVlcnlTZWxlY3RvckFsbC5jYWxsKGRvYywgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSk7Ci0gICAg
ICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQubGVuZ3RoLCBy
ZXN1bHQuaXRlbSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbWF0Y2hQbGFpblRleHQoZG9jKQot
ICAgIHsKLSAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5ldmFsdWF0ZS5jYWxs
KGRvYywgIi8vdGV4dCgpW2NvbnRhaW5zKC4sICciICsgZXNjYXBlZFF1ZXJ5ICsgIicpXSB8IC8v
Y29tbWVudCgpW2NvbnRhaW5zKC4sICciICsgZXNjYXBlZFF1ZXJ5ICsgIicpXSIsIGRvYywgbnVs
bCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUpOwotICAgICAgICBhZGRO
b2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0LnNuYXBzaG90TGVuZ3RoLCBy
ZXN1bHQuc25hcHNob3RJdGVtKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBtYXRjaFhQYXRoUXVl
cnkoZG9jKQotICAgIHsKLSAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5ldmFs
dWF0ZS5jYWxsKGRvYywgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSwgZG9jLCBudWxsLCBYUGF0aFJl
c3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSk7Ci0gICAgICAgIGFkZE5vZGVzVG9SZXN1
bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQuc25hcHNob3RMZW5ndGgsIHJlc3VsdC5zbmFw
c2hvdEl0ZW0pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGZpbmlzaGVkU2VhcmNoaW5nKCkKLSAg
ICB7Ci0gICAgICAgIC8vIFJlbW92ZSB0aGUgc2VhcmNoUmVzdWx0c1Byb3BlcnR5IG5vdyB0aGF0
IHRoZSBzZWFyY2ggaXMgZmluaXNoZWQuCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgSW5q
ZWN0ZWRTY3JpcHQuX3NlYXJjaFJlc3VsdHMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBkZWxl
dGUgSW5qZWN0ZWRTY3JpcHQuX3NlYXJjaFJlc3VsdHNbaV1bc2VhcmNoUmVzdWx0c1Byb3BlcnR5
XTsKLSAgICB9Ci0KLSAgICBjb25zdCBtYWluRnJhbWVEb2N1bWVudCA9IGluc3BlY3RlZFdpbmRv
dy5kb2N1bWVudDsKLSAgICBjb25zdCBzZWFyY2hEb2N1bWVudHMgPSBbbWFpbkZyYW1lRG9jdW1l
bnRdOwotICAgIHZhciBzZWFyY2hGdW5jdGlvbnM7Ci0gICAgaWYgKHRhZ05hbWVRdWVyeSAmJiBz
dGFydFRhZ0ZvdW5kICYmIGVuZFRhZ0ZvdW5kKQotICAgICAgICBzZWFyY2hGdW5jdGlvbnMgPSBb
bWF0Y2hFeGFjdFRhZ05hbWVzLCBtYXRjaFBsYWluVGV4dF07Ci0gICAgZWxzZSBpZiAodGFnTmFt
ZVF1ZXJ5ICYmIHN0YXJ0VGFnRm91bmQpCi0gICAgICAgIHNlYXJjaEZ1bmN0aW9ucyA9IFttYXRj
aFN0YXJ0T2ZUYWdOYW1lcywgbWF0Y2hQbGFpblRleHRdOwotICAgIGVsc2UgaWYgKHRhZ05hbWVR
dWVyeSAmJiBlbmRUYWdGb3VuZCkgewotICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGhhdmUg
YSBtYXRjaEVuZE9mVGFnTmFtZXMgc2VhcmNoIGZ1bmN0aW9uIGlmIGVuZFRhZ0ZvdW5kIGlzIHRy
dWUgYnV0IG5vdCBzdGFydFRhZ0ZvdW5kLgotICAgICAgICAvLyBUaGlzIHJlcXVpcmVzIGVuZHMt
d2l0aCgpIHN1cHBvcnQgaW4gWFBhdGgsIFdlYktpdCBvbmx5IHN1cHBvcnRzIHN0YXJ0cy13aXRo
KCkgYW5kIGNvbnRhaW5zKCkuCi0gICAgICAgIHNlYXJjaEZ1bmN0aW9ucyA9IFttYXRjaFBhcnRp
YWxUYWdOYW1lcywgbWF0Y2hQbGFpblRleHRdOwotICAgIH0gZWxzZSBpZiAod2hpdGVzcGFjZVRy
aW1tZWRRdWVyeSA9PT0gIi8vKiIgfHwgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSA9PT0gIioiKSB7
Ci0gICAgICAgIC8vIFRoZXNlIHF1ZXJpZXMgd2lsbCBtYXRjaCBldmVyeSBub2RlLiBNYXRjaGlu
ZyBldmVyeXRoaW5nIGlzbid0IHVzZWZ1bCBhbmQgY2FuIGJlIHNsb3cgZm9yIGxhcmdlIHBhZ2Vz
LAotICAgICAgICAvLyBzbyBsaW1pdCB0aGUgc2VhcmNoIGZ1bmN0aW9ucyBsaXN0IHRvIHBsYWlu
IHRleHQgYW5kIGF0dHJpYnV0ZSBtYXRjaGluZy4KLSAgICAgICAgc2VhcmNoRnVuY3Rpb25zID0g
W21hdGNoUGFydGlhbEF0dHJpYnV0ZVZhbHVlcywgbWF0Y2hQbGFpblRleHRdOwotICAgIH0gZWxz
ZQotICAgICAgICBzZWFyY2hGdW5jdGlvbnMgPSBbbWF0Y2hFeGFjdEl0ZW1zLCBtYXRjaFN0eWxl
U2VsZWN0b3IsIG1hdGNoUGFydGlhbFRhZ05hbWVzQW5kQXR0cmlidXRlVmFsdWVzLCBtYXRjaFBs
YWluVGV4dCwgbWF0Y2hYUGF0aFF1ZXJ5XTsKLQotICAgIC8vIEZpbmQgYWxsIGZyYW1lcywgaWZy
YW1lcyBhbmQgb2JqZWN0IGVsZW1lbnRzIHRvIHNlYXJjaCB0aGVpciBkb2N1bWVudHMuCi0gICAg
Y29uc3Qgc3ViZG9jdW1lbnRSZXN1bHQgPSBtYWluRnJhbWVEb2N1bWVudC5xdWVyeVNlbGVjdG9y
QWxsKCJpZnJhbWUsIGZyYW1lLCBvYmplY3QiKTsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
c3ViZG9jdW1lbnRSZXN1bHQubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIGVsZW1lbnQgPSBz
dWJkb2N1bWVudFJlc3VsdC5pdGVtKGkpOwotICAgICAgICBpZiAoZWxlbWVudC5jb250ZW50RG9j
dW1lbnQpCi0gICAgICAgICAgICBzZWFyY2hEb2N1bWVudHMucHVzaChlbGVtZW50LmNvbnRlbnRE
b2N1bWVudCk7Ci0gICAgfQotCi0gICAgY29uc3QgcGFuZWwgPSBJbmplY3RlZFNjcmlwdDsKLSAg
ICB2YXIgZG9jdW1lbnRJbmRleCA9IDA7Ci0gICAgdmFyIHNlYXJjaEZ1bmN0aW9uSW5kZXggPSAw
OwotICAgIHZhciBjaHVua0ludGVydmFsSWRlbnRpZmllciA9IG51bGw7Ci0KLSAgICAvLyBTcGxp
dCB1cCB0aGUgd29yayBpbnRvIGNodW5rcyBzbyB3ZSBkb24ndCBibG9jayB0aGUgVUkgdGhyZWFk
IHdoaWxlIHByb2Nlc3NpbmcuCi0KLSAgICBmdW5jdGlvbiBwcm9jZXNzQ2h1bmsoKQotICAgIHsK
LSAgICAgICAgdmFyIHNlYXJjaERvY3VtZW50ID0gc2VhcmNoRG9jdW1lbnRzW2RvY3VtZW50SW5k
ZXhdOwotICAgICAgICB2YXIgc2VhcmNoRnVuY3Rpb24gPSBzZWFyY2hGdW5jdGlvbnNbc2VhcmNo
RnVuY3Rpb25JbmRleF07Ci0KLSAgICAgICAgaWYgKCsrc2VhcmNoRnVuY3Rpb25JbmRleCA+IHNl
YXJjaEZ1bmN0aW9ucy5sZW5ndGgpIHsKLSAgICAgICAgICAgIHNlYXJjaEZ1bmN0aW9uID0gc2Vh
cmNoRnVuY3Rpb25zWzBdOwotICAgICAgICAgICAgc2VhcmNoRnVuY3Rpb25JbmRleCA9IDA7Ci0K
LSAgICAgICAgICAgIGlmICgrK2RvY3VtZW50SW5kZXggPiBzZWFyY2hEb2N1bWVudHMubGVuZ3Ro
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBhbmVsLl9jdXJyZW50U2VhcmNoQ2h1bmtJbnRlcnZh
bElkZW50aWZpZXIgPT09IGNodW5rSW50ZXJ2YWxJZGVudGlmaWVyKQotICAgICAgICAgICAgICAg
ICAgICBkZWxldGUgcGFuZWwuX2N1cnJlbnRTZWFyY2hDaHVua0ludGVydmFsSWRlbnRpZmllcjsK
LSAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGNodW5rSW50ZXJ2YWxJZGVudGlmaWVyKTsK
LSAgICAgICAgICAgICAgICBmaW5pc2hlZFNlYXJjaGluZy5jYWxsKHBhbmVsKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNlYXJj
aERvY3VtZW50ID0gc2VhcmNoRG9jdW1lbnRzW2RvY3VtZW50SW5kZXhdOwotICAgICAgICB9Ci0K
LSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHNlYXJjaEZ1bmN0aW9uLmNhbGwocGFuZWwsIHNl
YXJjaERvY3VtZW50KTsKLSAgICAgICAgfSBjYXRjaChlcnIpIHsKLSAgICAgICAgICAgIC8vIGln
bm9yZSBhbnkgZXhjZXB0aW9ucy4gdGhlIHF1ZXJ5IG1pZ2h0IGJlIG1hbGZvcm1lZCwgYnV0IHdl
IGFsbG93IHRoYXQuCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgaWYgKHJ1blN5bmNocm9ub3VzbHkpCi0gICAgICAgIHdoaWxlIChwcm9jZXNzQ2h1bmsoKSkg
e30KLSAgICBlbHNlIHsKLSAgICAgICAgcHJvY2Vzc0NodW5rKCk7Ci0gICAgICAgIGNodW5rSW50
ZXJ2YWxJZGVudGlmaWVyID0gc2V0SW50ZXJ2YWwocHJvY2Vzc0NodW5rLCAyNSk7Ci0gICAgICAg
IEluamVjdGVkU2NyaXB0Ll9jdXJyZW50U2VhcmNoQ2h1bmtJbnRlcnZhbElkZW50aWZpZXIgPSBj
aHVua0ludGVydmFsSWRlbnRpZmllcjsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUlu
amVjdGVkU2NyaXB0LnNlYXJjaENhbmNlbGVkID0gZnVuY3Rpb24oKQotewotICAgIGlmIChJbmpl
Y3RlZFNjcmlwdC5fc2VhcmNoUmVzdWx0cykgewotICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHRz
UHJvcGVydHkgPSBJbmplY3RlZFNjcmlwdC5faW5jbHVkZWRJblNlYXJjaFJlc3VsdHNQcm9wZXJ0
eU5hbWU7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VhcmNoUmVzdWx0cy5s
ZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLl9zZWFyY2hSZXN1bHRz
W2ldOwotCi0gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHNlYXJjaFJlc3VsdHNQcm9wZXJ0eSBz
aW5jZSB0aGVyZSBtaWdodCBiZSBhbiB1bmZpbmlzaGVkIHNlYXJjaC4KLSAgICAgICAgICAgIGRl
bGV0ZSBub2RlW3NlYXJjaFJlc3VsdHNQcm9wZXJ0eV07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoSW5qZWN0ZWRTY3JpcHQuX2N1cnJlbnRTZWFyY2hDaHVua0ludGVydmFsSWRlbnRpZmll
cikgewotICAgICAgICBjbGVhckludGVydmFsKEluamVjdGVkU2NyaXB0Ll9jdXJyZW50U2VhcmNo
Q2h1bmtJbnRlcnZhbElkZW50aWZpZXIpOwotICAgICAgICBkZWxldGUgSW5qZWN0ZWRTY3JpcHQu
X2N1cnJlbnRTZWFyY2hDaHVua0ludGVydmFsSWRlbnRpZmllcjsKLSAgICB9Ci0gICAgSW5qZWN0
ZWRTY3JpcHQuX3NlYXJjaFJlc3VsdHMgPSBbXTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogSW5q
ZWN0ZWRTY3JpcHQub3BlbkluSW5zcGVjdGVkV2luZG93ID0gZnVuY3Rpb24odXJsKQogewogICAg
IC8vIERvbid0IGNhbGwgd2luZG93Lm9wZW4gb24gd3JhcHBlciAtIHBvcHVwIGJsb2NrZXIgbXV0
ZXMgaXQuCkBAIC0xMDI4LDI4ICs3ODUsNSBAQCBJbmplY3RlZFNjcmlwdC5fY2xhc3NOYW1lID0g
ZnVuY3Rpb24ob2JqKQogICAgIH0KIH0KIAotSW5qZWN0ZWRTY3JpcHQuX2VzY2FwZUNoYXJhY3Rl
cnMgPSBmdW5jdGlvbihzdHIsIGNoYXJzKQotewotICAgIHZhciBmb3VuZENoYXIgPSBmYWxzZTsK
LSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlm
IChzdHIuaW5kZXhPZihjaGFycy5jaGFyQXQoaSkpICE9PSAtMSkgewotICAgICAgICAgICAgZm91
bmRDaGFyID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKCFmb3VuZENoYXIpCi0gICAgICAgIHJldHVybiBzdHI7Ci0KLSAgICB2YXIgcmVzdWx0
ID0gIiI7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgaWYgKGNoYXJzLmluZGV4T2Yoc3RyLmNoYXJBdChpKSkgIT09IC0xKQotICAgICAgICAgICAg
cmVzdWx0ICs9ICJcXCI7Ci0gICAgICAgIHJlc3VsdCArPSBzdHIuY2hhckF0KGkpOwotICAgIH0K
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHJldHVybiBJbmplY3RlZFNjcmlwdDsKIH0pOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0QWNj
ZXNzLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0QWNjZXNz
LmpzCmluZGV4IDI1NTgyNjcuLmMzODgyMTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuanMKQEAgLTcxLDI5ICs3MSwxOCBAQCBJ
bmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIgPSBmdW5jdGlvbihtZXRob2ROYW1l
LCBhc3luYykKIC8vIC0gTWFrZSBzdXJlIGxhc3QgcGFyYW1ldGVyIG9mIGFsbCB0aGUgSW5qZWN0
ZWRTcmlwdEFjY2Vzcy4qIGNhbGxzIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24uCiAvLyBXZSBrZWVw
IHRoZXNlIHNvcnRlZC4KIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiYWRk
SW5zcGVjdGVkTm9kZSIpOwotSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJh
ZGRTdHlsZVNlbGVjdG9yIik7Ci1JbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIo
ImFwcGx5U3R5bGVSdWxlVGV4dCIpOwotSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5k
bGVyKCJhcHBseVN0eWxlVGV4dCIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5k
bGVyKCJjbGVhckNvbnNvbGVNZXNzYWdlcyIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3Rh
bGxIYW5kbGVyKCJldmFsdWF0ZSIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5k
bGVyKCJldmFsdWF0ZUluQ2FsbEZyYW1lIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFs
bEhhbmRsZXIoImdldENvbXBsZXRpb25zIik7Ci1JbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFs
bEhhbmRsZXIoImdldENvbXB1dGVkU3R5bGUiKTsKLUluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0
YWxsSGFuZGxlcigiZ2V0SW5saW5lU3R5bGUiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0
YWxsSGFuZGxlcigiZ2V0Tm9kZVByb3BlcnR5VmFsdWUiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNz
Ll9pbnN0YWxsSGFuZGxlcigiZ2V0UHJvcGVydGllcyIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3Mu
X2luc3RhbGxIYW5kbGVyKCJnZXRQcm90b3R5cGVzIik7Ci1JbmplY3RlZFNjcmlwdEFjY2Vzcy5f
aW5zdGFsbEhhbmRsZXIoImdldFN0eWxlcyIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3Rh
bGxIYW5kbGVyKCJvcGVuSW5JbnNwZWN0ZWRXaW5kb3ciKTsKLUluamVjdGVkU2NyaXB0QWNjZXNz
Ll9pbnN0YWxsSGFuZGxlcigicGVyZm9ybVNlYXJjaCIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3Mu
X2luc3RhbGxIYW5kbGVyKCJwdXNoTm9kZVRvRnJvbnRlbmQiKTsKIEluamVjdGVkU2NyaXB0QWNj
ZXNzLl9pbnN0YWxsSGFuZGxlcigibm9kZUJ5UGF0aCIpOwotSW5qZWN0ZWRTY3JpcHRBY2Nlc3Mu
X2luc3RhbGxIYW5kbGVyKCJzZWFyY2hDYW5jZWxlZCIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3Mu
X2luc3RhbGxIYW5kbGVyKCJzZXRPdXRlckhUTUwiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9p
bnN0YWxsSGFuZGxlcigic2V0UHJvcGVydHlWYWx1ZSIpOwotSW5qZWN0ZWRTY3JpcHRBY2Nlc3Mu
X2luc3RhbGxIYW5kbGVyKCJzZXRTdHlsZVByb3BlcnR5Iik7Ci1JbmplY3RlZFNjcmlwdEFjY2Vz
cy5faW5zdGFsbEhhbmRsZXIoInNldFN0eWxlVGV4dCIpOwotSW5qZWN0ZWRTY3JpcHRBY2Nlc3Mu
X2luc3RhbGxIYW5kbGVyKCJ0b2dnbGVTdHlsZUVuYWJsZWQiKTsKIEluamVjdGVkU2NyaXB0QWNj
ZXNzLl9pbnN0YWxsSGFuZGxlcigiZXZhbHVhdGVPblNlbGYiKTsKIAogLy8gU29tZSBtZXRob2Rz
IGNhbid0IHJ1biBzeW5jaHJvbm91c2x5IGV2ZW4gb24gdGhlIGluamVjdGVkIHNjcmlwdCBzaWRl
IChzdWNoIGFzIERCIHRyYW5zYWN0aW9ucykuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMKaW5kZXggNDY3MGFmMS4uN2Q4YzRkNSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRT
dHViLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5k
U3R1Yi5qcwpAQCAtMjU5LDYgKzI1OSwxNCBAQCBXZWJJbnNwZWN0b3IuSW5zcGVjdG9yQmFja2Vu
ZFN0dWIucHJvdG90eXBlID0gewogCiAgICAgcmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxv
YWQ6IGZ1bmN0aW9uKCkKICAgICB7CisgICAgfSwKKworICAgIHBlcmZvcm1TZWFyY2g6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgfSwKKworICAgIHNlYXJjaENhbmNlbGVkOiBmdW5jdGlvbigpCisg
ICAgewogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNDFiMzYxOC4uNWMwNTczMiAxMDA2NDQK
LS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDYtMTAgIFBhdmVsIEZlbGRtYW4gIDxwZmVs
ZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogUG9ydCBwZXJmb3JtU2VhcmNoIGZyb20gSW5qZWN0
ZWRTY3JpcHQgdG8gSW5zcGVjdG9yRE9NQWdlbnQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNDIyCisKKyAgICAgICAgKiBzcmMvanMvSW5zcGVj
dG9yQ29udHJvbGxlckltcGwuanM6CisgICAgICAgIChkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5k
SW1wbCk6CisKIDIwMTAtMDYtMDcgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRhbXVyYS4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzCmluZGV4IDg2Zjg4NWEuLmY3NjI1NWIg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlcklt
cGwuanMKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1w
bC5qcwpAQCAtNjEsNiArNjEsNyBAQCBkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbCA9IGZ1
bmN0aW9uKCkKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJn
ZXRSZXNvdXJjZUNvbnRlbnQiKTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVy
RGVsZWdhdGVfKCJoaWdobGlnaHRET01Ob2RlIik7CiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9y
Q29udHJvbGxlckRlbGVnYXRlXygiaGlkZURPTU5vZGVIaWdobGlnaHQiKTsKKyAgICB0aGlzLmlu
c3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJwZXJmb3JtU2VhcmNoIik7CiAgICAg
dGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygicmVsZWFzZVdyYXBwZXJP
YmplY3RHcm91cCIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0
ZV8oInJlbW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkIik7CiAgICAgdGhpcy5pbnN0YWxs
SW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygicmVsb2FkUGFnZSIpOwpAQCAtNjgsNiArNjks
NyBAQCBkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbCA9IGZ1bmN0aW9uKCkKICAgICB0aGlz
Lmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJyZW1vdmVET01TdG9yYWdlSXRl
bSIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInJlbW92
ZU5vZGUiKTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJz
YXZlRnJvbnRlbmRTZXR0aW5ncyIpOworICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xs
ZXJEZWxlZ2F0ZV8oInNlYXJjaENhbmNlbGVkIik7CiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9y
Q29udHJvbGxlckRlbGVnYXRlXygic2V0QXR0cmlidXRlIik7CiAgICAgdGhpcy5pbnN0YWxsSW5z
cGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygic2V0RE9NU3RvcmFnZUl0ZW0iKTsKICAgICB0aGlz
Lmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJzZXRJbmplY3RlZFNjcmlwdFNv
dXJjZSIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58464</attachid>
            <date>2010-06-11 04:59:13 -0700</date>
            <delta_ts>2010-06-11 17:17:34 -0700</delta_ts>
            <desc>[PATCH] With nice frame tree traversal.</desc>
            <filename>perform_search</filename>
            <type>text/plain</type>
            <size>42205</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2ZGQzYWMwLi45OTljYTM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDYt
MTAgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogUG9ydCBw
ZXJmb3JtU2VhcmNoIGZyb20gSW5qZWN0ZWRTY3JpcHQgdG8gSW5zcGVjdG9yRE9NQWdlbnQuCisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNDIyCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvZWxlbWVudHMtcGFuZWwtc2VhcmNoLmh0bWw6CisKIDIwMTAt
MDYtMDggIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdkLiBVcGRhdGVkIHRlc3RfZXhwZWN0YXRpb25zLnR4dCB0byBmb2xsb3cgcjYwODIyCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtcGFuZWwtc2VhcmNoLmh0
bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtcGFuZWwtc2VhcmNoLmh0bWwKaW5k
ZXggNGYxNjJkYi4uZDBkNDI4MyAxMDA3NTUKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Vs
ZW1lbnRzLXBhbmVsLXNlYXJjaC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9lbGVt
ZW50cy1wYW5lbC1zZWFyY2guaHRtbApAQCAtMzEsNyArMzEsNiBAQCBmdW5jdGlvbiBmcm9udGVu
ZF9wZXJmb3JtU2VhcmNoKHRlc3RDb250cm9sbGVyKQogCiAgICAgV2ViSW5zcGVjdG9yLmFkZE5v
ZGVzVG9TZWFyY2hSZXN1bHQgPSBmdW5jdGlvbihub2RlSWRzKQogICAgIHsKLSAgICAgICAgdmFy
IG5vZGVJZHMgPSBub2RlSWRzLnNwbGl0KCIsIik7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbm9kZUlkcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgdmFyIG5vZGUgPSBXZWJJbnNw
ZWN0b3IuZG9tQWdlbnQubm9kZUZvcklkKG5vZGVJZHNbaV0pOwogICAgICAgICAgICAgaWYgKG5v
ZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKQpAQCAtNDEsMTkgKzQwLDE5IEBAIGZ1bmN0
aW9uIGZyb250ZW5kX3BlcmZvcm1TZWFyY2godGVzdENvbnRyb2xsZXIpCiAgICAgICAgIH0KICAg
ICB9CiAgICAgLy8gUGxhaW4gdGV4dC4KLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZh
dWx0KCkucGVyZm9ybVNlYXJjaCgiRm9vIiArICJCYXIiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsK
KyAgICBJbnNwZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goIkZvbyIgKyAiQmFyIiwgdHJ1ZSk7
CiAgICAgLy8gUGFydGlhbCB0ZXh0LgotICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdldERlZmF1
bHQoKS5wZXJmb3JtU2VhcmNoKCJvbyIgKyAiQmEiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsKKyAg
ICBJbnNwZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goIm9vIiArICJCYSIsIHRydWUpOwogICAg
IC8vIFN0YXJ0IHRhZy4KLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZhdWx0KCkucGVy
Zm9ybVNlYXJjaCgiPGlucHUiICsgInQiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsKKyAgICBJbnNw
ZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goIjxpbnB1IiArICJ0IiwgdHJ1ZSk7CiAgICAgLy8g
UGFydGlhbCB0YWcuCi0gICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0RGVmYXVsdCgpLnBlcmZv
cm1TZWFyY2goIm5wdSIgKyAidCIsIHRydWUsIGZ1bmN0aW9uKCkge30pOworICAgIEluc3BlY3Rv
ckJhY2tlbmQucGVyZm9ybVNlYXJjaCgibnB1IiArICJ0IiwgdHJ1ZSk7CiAgICAgLy8gRXhhY3Qg
YXR0cmlidXRlIG5hbWUuCi0gICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0RGVmYXVsdCgpLnBl
cmZvcm1TZWFyY2goInZhbHUiICsgImUiLCB0cnVlLCBmdW5jdGlvbigpIHt9KTsKKyAgICBJbnNw
ZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2goInZhbHUiICsgImUiLCB0cnVlKTsKICAgICAvLyBF
eGFjdCBhdHRyaWJ1dGUgdmFsPD51ZS4KLSAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZh
dWx0KCkucGVyZm9ybVNlYXJjaCgiSW4iICsgInB1dFZhIiArICJsIiwgdHJ1ZSwgZnVuY3Rpb24o
KSB7fSk7CisgICAgSW5zcGVjdG9yQmFja2VuZC5wZXJmb3JtU2VhcmNoKCJJbiIgKyAicHV0VmEi
ICsgImwiLCB0cnVlKTsKICAgICAvLyBQYXJ0aWFsIGF0dHJpYnV0ZSB2YWw8PnVlLgotICAgIElu
amVjdGVkU2NyaXB0QWNjZXNzLmdldERlZmF1bHQoKS5wZXJmb3JtU2VhcmNoKCJuIiArICJwdXRW
YSIgKyAibCIsIHRydWUsIGZ1bmN0aW9uKCkge30pOworICAgIEluc3BlY3RvckJhY2tlbmQucGVy
Zm9ybVNlYXJjaCgibiIgKyAicHV0VmEiICsgImwiLCB0cnVlKTsKIAogICAgIHRlc3RDb250cm9s
bGVyLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoZnVuY3Rpb24oKSB7CiAgICAgICAgIHRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoc2VhcmNoUmVzdWx0cyk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDMwNDc4ZWEuLjA2YjE3OTMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDMgQEAKKzIwMTAtMDYtMTAgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2ViIEluc3BlY3RvcjogUG9ydCBwZXJmb3JtU2VhcmNoIGZyb20gSW5qZWN0ZWRTY3JpcHQgdG8g
SW5zcGVjdG9yRE9NQWdlbnQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQwNDIyCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRI
b3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6YWRkTm9kZXNU
b1NlYXJjaFJlc3VsdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6cGVyZm9ybVNlYXJjaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpzZWFyY2hDYW5jZWxlZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZC5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6On5JbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6c2VhcmNoQ2FuY2VsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6Om9uTWF0Y2hKb2JzVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OnJlcG9ydE5vZGVzQXNTZWFyY2hSZXN1bHRzKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGNoSm9iOjp+TWF0
Y2hKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TWF0Y2hKb2I6Ok1hdGNoSm9iKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1hdGNoSm9iOjphZGROb2Rlc1RvUmVzdWx0cyk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kOjphZGROb2Rlc1RvU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2U6OnVwZGF0ZVNjcmlwdE9i
amVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlLnNlYXJjaENhbmNl
bGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZS5wZXJm
b3JtU2VhcmNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlw
ZS5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0luamVjdGVkU2NyaXB0LmpzOgorICAgICAgICAoaW5qZWN0ZWRTY3JpcHRDb25zdHJ1Y3Rvcik6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qczoK
KwogMjAxMC0wNi0wOCAgVmFuZ2VsaXMgS29ra2V2aXMgIDx2YW5nZWxpc0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0SG9zdC5jcHAKaW5kZXggYzU4MDczZC4uNGMzYzdhZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCkBAIC0xMTAsMTIgKzExMCw2IEBAIGxv
bmcgSW5qZWN0ZWRTY3JpcHRIb3N0OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5vZGUs
IGJvb2wgd2l0aENoaWxkcmVuLCBiCiAgICAgcmV0dXJuIGlkOwogfQogCi12b2lkIEluamVjdGVk
U2NyaXB0SG9zdDo6YWRkTm9kZXNUb1NlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIG5vZGVJZHMp
Ci17Ci0gICAgaWYgKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCA9IGluc3BlY3RvckZyb250
ZW5kKCkpCi0gICAgICAgIGZyb250ZW5kLT5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KG5vZGVJZHMp
OwotfQotCiBsb25nIEluamVjdGVkU2NyaXB0SG9zdDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5k
KGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQg
PSBpbnNwZWN0b3JET01BZ2VudCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRIb3N0LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3Qu
aAppbmRleCBiZWZmYzlkLi42NmNmNDFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEhvc3QuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dEhvc3QuaApAQCAtNjksNyArNjksNiBAQCBwdWJsaWM6CiAgICAgTm9kZSogbm9kZUZvcklkKGxv
bmcgbm9kZUlkKTsKICAgICBsb25nIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9kZSwg
Ym9vbCB3aXRoQ2hpbGRyZW4sIGJvb2wgc2VsZWN0SW5VSSk7CiAKLSAgICB2b2lkIGFkZE5vZGVz
VG9TZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBub2RlSWRzKTsKICAgICBsb25nIHB1c2hOb2Rl
QnlQYXRoVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHBhdGgpOwogCiAjaWYgRU5BQkxFKERBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0Lmlk
bCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5pZGwKaW5kZXggOGIyNDE1
Ny4uNWE0Y2UxOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRI
b3N0LmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaWRsCkBA
IC0zOCw3ICszOCw2IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0
IG5vZGVGb3JJZChpbiBsb25nIG5vZGVJZCk7CiAgICAgICAgIFtDdXN0b21dIGludCBwdXNoTm9k
ZVBhdGhUb0Zyb250ZW5kKGluIERPTU9iamVjdCBub2RlLCBpbiBib29sZWFuIHdpdGhDaGlsZHJl
biwgaW4gYm9vbGVhbiBzZWxlY3RJblVJKTsKIAotICAgICAgICB2b2lkIGFkZE5vZGVzVG9TZWFy
Y2hSZXN1bHQoaW4gRE9NU3RyaW5nIG5vZGVJZHMpOwogICAgICAgICBsb25nIHB1c2hOb2RlQnlQ
YXRoVG9Gcm9udGVuZChpbiBET01TdHJpbmcgcGF0aCk7CiAKICNpZiBkZWZpbmVkKEVOQUJMRV9K
QVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcAppbmRleCAzNmY0MWI4Li44MTRlNWQyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcApAQCAtMzUxLDYgKzM1MSwxOCBAQCB2
b2lkIEluc3BlY3RvckJhY2tlbmQ6OmNoYW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9k
ZUlkLCBjb25zdCBBdG9taWNTdHJpbgogICAgICAgICBkb21BZ2VudC0+Y2hhbmdlVGFnTmFtZShj
YWxsSWQsIG5vZGVJZCwgdGFnTmFtZSwgZXhwYW5kZWQpOwogfQogCit2b2lkIEluc3BlY3RvckJh
Y2tlbmQ6OnBlcmZvcm1TZWFyY2goY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCBydW5TeW5jaHJv
bm91c2x5KQoreworICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0
b3JET01BZ2VudCgpKQorICAgICAgICBkb21BZ2VudC0+cGVyZm9ybVNlYXJjaChxdWVyeSwgcnVu
U3luY2hyb25vdXNseSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c2VhcmNoQ2FuY2Vs
ZWQoKQoreworICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JE
T01BZ2VudCgpKQorICAgICAgICBkb21BZ2VudC0+c2VhcmNoQ2FuY2VsZWQoKTsKK30KKwogdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBi
b29sIGF1dGhvck9ubHkpCiB7CiAgICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9
IGluc3BlY3RvckRPTUFnZW50KCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKaW5k
ZXggMGViOGU0Yy4uYzg4YzIzYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApA
QCAtMTE2LDYgKzExNiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvcHlOb2RlKGxvbmcgbm9kZUlk
KTsKICAgICB2b2lkIHJlbW92ZU5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKICAgICB2
b2lkIGNoYW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25zdCBBdG9taWNT
dHJpbmcmIHRhZ05hbWUsIGJvb2wgZXhwYW5kZWQpOworICAgIHZvaWQgcGVyZm9ybVNlYXJjaChj
b25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sIHJ1blN5bmNocm9ub3VzbHkpOworICAgIHZvaWQgc2Vh
cmNoQ2FuY2VsZWQoKTsKIAogICAgIHZvaWQgZ2V0U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5v
ZGVJZCwgYm9vbCBhdXRoT25seSk7CiAgICAgdm9pZCBnZXRBbGxTdHlsZXMobG9uZyBjYWxsSWQp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAppbmRleCBlOGNmZGI5Li5lZThh
NTg1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbApAQCAtOTEsNiArOTEs
OSBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIHZvaWQgY29weU5vZGUoaW4gbG9uZyBub2RlSWQp
OwogICAgICAgICB2b2lkIHJlbW92ZU5vZGUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlk
KTsKICAgICAgICAgdm9pZCBjaGFuZ2VUYWdOYW1lKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIG5v
ZGVJZCwgaW4gRE9NU3RyaW5nIG5ld1RhZ05hbWUsIGluIGJvb2xlYW4gZXhwYW5kZWQpOworICAg
ICAgICB2b2lkIHBlcmZvcm1TZWFyY2goaW4gRE9NU3RyaW5nIHF1ZXJ5LCBpbiBib29sZWFuIHJ1
blN5bmNocm9ub3VzbHkpOworICAgICAgICB2b2lkIHNlYXJjaENhbmNlbGVkKCk7CisKICAgICAg
ICAgdm9pZCBoaWdobGlnaHRET01Ob2RlKGluIGxvbmcgbm9kZUlkKTsKICAgICAgICAgdm9pZCBo
aWRlRE9NTm9kZUhpZ2hsaWdodCgpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAKaW5kZXggMzM4ZGMzMy4uYjE1MmRjMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmNwcApAQCAtNTEsNiArNTEsOCBAQAogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIu
aCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkhUTUxG
cmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCiAjaW5j
bHVkZSAibWFya3VwLmgiCkBAIC02NSwxOCArNjcsMTQxIEBACiAjaW5jbHVkZSAiU3R5bGVTaGVl
dExpc3QuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAKKyNpZiBFTkFCTEUoWFBBVEgpCisjaW5jbHVk
ZSAiWFBhdGhSZXN1bHQuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+
CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBNYXRjaEpvYiB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB2b2lkIG1hdGNoKExpc3RIYXNoU2V0PE5vZGUqPiYgcmVzdWx0Q29sbGVjdG9yKSA9IDA7Cisg
ICAgdmlydHVhbCB+TWF0Y2hKb2IoKSB7IH0KKworcHJvdGVjdGVkOgorICAgIE1hdGNoSm9iKERv
Y3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBxdWVyeSkKKyAgICAgICAgOiBtX2RvY3Vt
ZW50KGRvY3VtZW50KQorICAgICAgICAsIG1fcXVlcnkocXVlcnkpIHsgfQorCisgICAgdm9pZCBh
ZGROb2Rlc1RvUmVzdWx0cyhQYXNzUmVmUHRyPE5vZGVMaXN0PiBub2RlcywgTGlzdEhhc2hTZXQ8
Tm9kZSo+JiByZXN1bHRDb2xsZWN0b3IpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBub2RlcyAmJiBpIDwgbm9kZXMtPmxlbmd0aCgpOyArK2kpCisgICAgICAgICAgICByZXN1
bHRDb2xsZWN0b3IuYWRkKG5vZGVzLT5pdGVtKGkpKTsKKyAgICB9CisKKyAgICBSZWZQdHI8RG9j
dW1lbnQ+IG1fZG9jdW1lbnQ7CisgICAgU3RyaW5nIG1fcXVlcnk7Cit9OworCituYW1lc3BhY2Ug
eworCitjbGFzcyBNYXRjaEV4YWN0SWRKb2IgOiBwdWJsaWMgV2ViQ29yZTo6TWF0Y2hKb2Igewor
cHVibGljOgorICAgIE1hdGNoRXhhY3RJZEpvYihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0
cmluZyYgcXVlcnkpIDogV2ViQ29yZTo6TWF0Y2hKb2IoZG9jdW1lbnQsIHF1ZXJ5KSB7IH0KKyAg
ICB2aXJ0dWFsIH5NYXRjaEV4YWN0SWRKb2IoKSB7IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgdm9pZCBtYXRjaChMaXN0SGFzaFNldDxOb2RlKj4mIHJlc3VsdENvbGxlY3RvcikKKyAgICB7
CisgICAgICAgIGlmIChtX3F1ZXJ5LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gbV9kb2N1bWVudC0+Z2V0RWxlbWVudEJ5SWQobV9x
dWVyeSk7CisgICAgICAgIGlmIChlbGVtZW50KQorICAgICAgICAgICAgcmVzdWx0Q29sbGVjdG9y
LmFkZChlbGVtZW50KTsKKyAgICB9Cit9OworCitjbGFzcyBNYXRjaEV4YWN0Q2xhc3NOYW1lc0pv
YiA6IHB1YmxpYyBXZWJDb3JlOjpNYXRjaEpvYiB7CitwdWJsaWM6CisgICAgTWF0Y2hFeGFjdENs
YXNzTmFtZXNKb2IoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA6IFdl
YkNvcmU6Ok1hdGNoSm9iKGRvY3VtZW50LCBxdWVyeSkgeyB9CisgICAgdmlydHVhbCB+TWF0Y2hF
eGFjdENsYXNzTmFtZXNKb2IoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBtYXRjaChMaXN0SGFz
aFNldDxOb2RlKj4mIHJlc3VsdENvbGxlY3RvcikKKyAgICB7CisgICAgICAgIGlmICghbV9xdWVy
eS5pc0VtcHR5KCkpCisgICAgICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cyhtX2RvY3VtZW50LT5n
ZXRFbGVtZW50c0J5Q2xhc3NOYW1lKG1fcXVlcnkpLCByZXN1bHRDb2xsZWN0b3IpOworICAgIH0K
K307CisKK2NsYXNzIE1hdGNoRXhhY3RUYWdOYW1lc0pvYiA6IHB1YmxpYyBXZWJDb3JlOjpNYXRj
aEpvYiB7CitwdWJsaWM6CisgICAgTWF0Y2hFeGFjdFRhZ05hbWVzSm9iKERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgOiBXZWJDb3JlOjpNYXRjaEpvYihkb2N1bWVudCwg
cXVlcnkpIHsgfQorICAgIHZpcnR1YWwgfk1hdGNoRXhhY3RUYWdOYW1lc0pvYigpIHsgfQorCisg
ICAgdmlydHVhbCB2b2lkIG1hdGNoKExpc3RIYXNoU2V0PE5vZGUqPiYgcmVzdWx0Q29sbGVjdG9y
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX3F1ZXJ5LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGFk
ZE5vZGVzVG9SZXN1bHRzKG1fZG9jdW1lbnQtPmdldEVsZW1lbnRzQnlOYW1lKG1fcXVlcnkpLCBy
ZXN1bHRDb2xsZWN0b3IpOworICAgIH0KK307CisKK2NsYXNzIE1hdGNoUXVlcnlTZWxlY3RvckFs
bEpvYiA6IHB1YmxpYyBXZWJDb3JlOjpNYXRjaEpvYiB7CitwdWJsaWM6CisgICAgTWF0Y2hRdWVy
eVNlbGVjdG9yQWxsSm9iKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBxdWVyeSkg
OiBXZWJDb3JlOjpNYXRjaEpvYihkb2N1bWVudCwgcXVlcnkpIHsgfQorICAgIHZpcnR1YWwgfk1h
dGNoUXVlcnlTZWxlY3RvckFsbEpvYigpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIG1hdGNoKExp
c3RIYXNoU2V0PE5vZGUqPiYgcmVzdWx0Q29sbGVjdG9yKQorICAgIHsKKyAgICAgICAgaWYgKG1f
cXVlcnkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgICAgICBSZWZQdHI8Tm9kZUxpc3Q+IGxpc3QgPSBtX2RvY3VtZW50
LT5xdWVyeVNlbGVjdG9yQWxsKG1fcXVlcnksIGVjKTsKKyAgICAgICAgaWYgKCFlYykKKyAgICAg
ICAgICAgIGFkZE5vZGVzVG9SZXN1bHRzKGxpc3QsIHJlc3VsdENvbGxlY3Rvcik7CisgICAgfQor
fTsKKworY2xhc3MgTWF0Y2hYUGF0aEpvYiA6IHB1YmxpYyBXZWJDb3JlOjpNYXRjaEpvYiB7Citw
dWJsaWM6CisgICAgTWF0Y2hYUGF0aEpvYihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmlu
ZyYgcXVlcnkpIDogV2ViQ29yZTo6TWF0Y2hKb2IoZG9jdW1lbnQsIHF1ZXJ5KSB7IH0KKyAgICB2
aXJ0dWFsIH5NYXRjaFhQYXRoSm9iKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbWF0Y2goTGlz
dEhhc2hTZXQ8Tm9kZSo+JiByZXN1bHRDb2xsZWN0b3IpCisgICAgeworI2lmIEVOQUJMRShYUEFU
SCkKKyAgICAgICAgaWYgKG1fcXVlcnkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBSZWZQdHI8WFBhdGhSZXN1
bHQ+IHJlc3VsdCA9IG1fZG9jdW1lbnQtPmV2YWx1YXRlKG1fcXVlcnksIG1fZG9jdW1lbnQuZ2V0
KCksIDAsIFhQYXRoUmVzdWx0OjpPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSwgMCwgZWMpOwor
ICAgICAgICBpZiAoZWMgfHwgIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICB1bnNpZ25lZCBsb25nIHNpemUgPSByZXN1bHQtPnNuYXBzaG90TGVuZ3RoKGVjKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyAhZWMgJiYgaSA8IHNpemU7ICsraSkgeworICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IHJlc3VsdC0+c25hcHNob3RJdGVtKGksIGVjKTsKKyAgICAg
ICAgICAgIGlmICghZWMpCisgICAgICAgICAgICAgICAgcmVzdWx0Q29sbGVjdG9yLmFkZChub2Rl
KTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorfTsKKworY2xhc3MgTWF0Y2hQbGFpblRleHRK
b2IgOiBwdWJsaWMgTWF0Y2hYUGF0aEpvYiB7CitwdWJsaWM6CisgICAgTWF0Y2hQbGFpblRleHRK
b2IoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA6IE1hdGNoWFBhdGhK
b2IoZG9jdW1lbnQsIHF1ZXJ5KQorICAgIHsKKyAgICAgICAgbV9xdWVyeSA9ICIvL3RleHQoKVtj
b250YWlucyguLCAnIiArIG1fcXVlcnkgKyAiJyldIHwgLy9jb21tZW50KClbY29udGFpbnMoLiwg
JyIgKyBtX3F1ZXJ5ICsgIicpXSI7CisgICAgfQorICAgIHZpcnR1YWwgfk1hdGNoUGxhaW5UZXh0
Sm9iKCkgeyB9Cit9OworCit9CisKIEluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2Vu
dChJbnNwZWN0b3JDU1NTdG9yZSogY3NzU3RvcmUsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVu
ZCkKICAgICA6IEV2ZW50TGlzdGVuZXIoSW5zcGVjdG9yRE9NQWdlbnRUeXBlKQogICAgICwgbV9j
c3NTdG9yZShjc3NTdG9yZSkKICAgICAsIG1fZnJvbnRlbmQoZnJvbnRlbmQpCiAgICAgLCBtX2xh
c3ROb2RlSWQoMSkKKyAgICAsIG1fbWF0Y2hKb2JzVGltZXIodGhpcywgJkluc3BlY3RvckRPTUFn
ZW50Ojpvbk1hdGNoSm9ic1RpbWVyKQogewogfQogCkBAIC04Nyw2ICsyMTIsNyBAQCBJbnNwZWN0
b3JET01BZ2VudDo6fkluc3BlY3RvckRPTUFnZW50KCkKIAogdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6cmVzZXQoKQogeworICAgIHNlYXJjaENhbmNlbGVkKCk7CiAgICAgZGlzY2FyZEJpbmRpbmdz
KCk7CiAKICAgICBMaXN0SGFzaFNldDxSZWZQdHI8RG9jdW1lbnQ+ID4gY29weSA9IG1fZG9jdW1l
bnRzOwpAQCAtNTA2LDYgKzYzMiwxMDMgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZl
bnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCkKICAgICBtX2Zyb250
ZW5kLT5kaWRHZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoY2FsbElkLCBub2RlSWQsIGxpc3RlbmVy
c0FycmF5KTsKIH0KIAordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaChjb25z
dCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIGJvb2wgcnVuU3luY2hyb25vdXNseSkK
K3sKKyAgICAvLyBGSVhNRTogRmV3IHRoaW5ncyBhcmUgbWlzc2luZyBoZXJlOgorICAgIC8vIDEp
IFNlYXJjaCB3b3JrcyB3aXRoIG5vZGUgZ3JhbnVsYXJpdHkgLSBudW1iZXIgb2YgbWF0Y2hlcyB3
aXRoaW4gbm9kZSBpcyBub3QgY2FsY3VsYXRlZC4KKyAgICAvLyAyKSBUaGVyZSBpcyBubyBuZWVk
IHRvIHB1c2ggYWxsIHNlYXJjaCByZXN1bHRzIHRvIHRoZSBmcm9udC1lbmQgYXQgYSB0aW1lLCBw
dXNoaW5nIG5leHQgLyBwcmV2aW91cyByZXN1bHQKKyAgICAvLyAgICBpcyBzdWZmaWNpZW50Lgor
CisgICAgaW50IHF1ZXJ5TGVuZ3RoID0gd2hpdGVzcGFjZVRyaW1tZWRRdWVyeS5sZW5ndGgoKTsK
KyAgICBib29sIHN0YXJ0VGFnRm91bmQgPSAhd2hpdGVzcGFjZVRyaW1tZWRRdWVyeS5maW5kKCc8
Jyk7CisgICAgYm9vbCBlbmRUYWdGb3VuZCA9IHdoaXRlc3BhY2VUcmltbWVkUXVlcnkucmV2ZXJz
ZUZpbmQoJz4nKSArIDEgPT0gcXVlcnlMZW5ndGg7CisKKyAgICBTdHJpbmcgdGFnTmFtZVF1ZXJ5
ID0gd2hpdGVzcGFjZVRyaW1tZWRRdWVyeTsKKyAgICBpZiAoc3RhcnRUYWdGb3VuZCB8fCBlbmRU
YWdGb3VuZCkKKyAgICAgICAgdGFnTmFtZVF1ZXJ5ID0gdGFnTmFtZVF1ZXJ5LnN1YnN0cmluZyhz
dGFydFRhZ0ZvdW5kID8gMSA6IDAsIGVuZFRhZ0ZvdW5kID8gcXVlcnlMZW5ndGggLSAxIDogcXVl
cnlMZW5ndGgpOworICAgIGlmICghRG9jdW1lbnQ6OmlzVmFsaWROYW1lKHRhZ05hbWVRdWVyeSkp
CisgICAgICAgIHRhZ05hbWVRdWVyeSA9ICIiOworCisgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWVR
dWVyeSA9IHdoaXRlc3BhY2VUcmltbWVkUXVlcnk7CisgICAgaWYgKCFEb2N1bWVudDo6aXNWYWxp
ZE5hbWUoYXR0cmlidXRlTmFtZVF1ZXJ5KSkKKyAgICAgICAgYXR0cmlidXRlTmFtZVF1ZXJ5ID0g
IiI7CisKKyAgICBTdHJpbmcgZXNjYXBlZFF1ZXJ5ID0gd2hpdGVzcGFjZVRyaW1tZWRRdWVyeTsK
KyAgICBlc2NhcGVkUXVlcnkucmVwbGFjZSgiJyIsICJcXCciKTsKKyAgICBTdHJpbmcgZXNjYXBl
ZFRhZ05hbWVRdWVyeSA9IHRhZ05hbWVRdWVyeTsKKyAgICBlc2NhcGVkVGFnTmFtZVF1ZXJ5LnJl
cGxhY2UoIiciLCAiXFwnIik7CisKKyAgICAvLyBDbGVhciBwZW5kaW5nIGpvYnMuCisgICAgc2Vh
cmNoQ2FuY2VsZWQoKTsKKworICAgIC8vIEZpbmQgYWxsIGZyYW1lcywgaWZyYW1lcyBhbmQgb2Jq
ZWN0IGVsZW1lbnRzIHRvIHNlYXJjaCB0aGVpciBkb2N1bWVudHMuCisgICAgZm9yIChGcmFtZSog
ZnJhbWUgPSBtYWluRnJhbWVEb2N1bWVudCgpLT5mcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgeworICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIGlmICghdGFnTmFtZVF1ZXJ5LmlzRW1wdHkoKSAmJiBzdGFy
dFRhZ0ZvdW5kICYmIGVuZFRhZ0ZvdW5kKSB7CisgICAgICAgICAgICBtX3BlbmRpbmdNYXRjaEpv
YnMuYXBwZW5kKG5ldyBNYXRjaEV4YWN0VGFnTmFtZXNKb2IoZG9jdW1lbnQsIHRhZ05hbWVRdWVy
eSkpOworICAgICAgICAgICAgbV9wZW5kaW5nTWF0Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hQbGFp
blRleHRKb2IoZG9jdW1lbnQsIGVzY2FwZWRRdWVyeSkpOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXRhZ05hbWVRdWVyeS5pc0VtcHR5KCkgJiYgc3Rh
cnRUYWdGb3VuZCkgeworICAgICAgICAgICAgbV9wZW5kaW5nTWF0Y2hKb2JzLmFwcGVuZChuZXcg
TWF0Y2hYUGF0aEpvYihkb2N1bWVudCwgIi8vKltzdGFydHMtd2l0aChuYW1lKCksICciICsgZXNj
YXBlZFRhZ05hbWVRdWVyeSArICInKV0iKSk7CisgICAgICAgICAgICBtX3BlbmRpbmdNYXRjaEpv
YnMuYXBwZW5kKG5ldyBNYXRjaFBsYWluVGV4dEpvYihkb2N1bWVudCwgZXNjYXBlZFF1ZXJ5KSk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGFnTmFt
ZVF1ZXJ5LmlzRW1wdHkoKSAmJiBlbmRUYWdGb3VuZCkgeworICAgICAgICAgICAgLy8gRklYTUU6
IHdlIHNob3VsZCBoYXZlIGEgbWF0Y2hFbmRPZlRhZ05hbWVzIHNlYXJjaCBmdW5jdGlvbiBpZiBl
bmRUYWdGb3VuZCBpcyB0cnVlIGJ1dCBub3Qgc3RhcnRUYWdGb3VuZC4KKyAgICAgICAgICAgIC8v
IFRoaXMgcmVxdWlyZXMgZW5kcy13aXRoKCkgc3VwcG9ydCBpbiBYUGF0aCwgV2ViS2l0IG9ubHkg
c3VwcG9ydHMgc3RhcnRzLXdpdGgoKSBhbmQgY29udGFpbnMoKS4KKyAgICAgICAgICAgIG1fcGVu
ZGluZ01hdGNoSm9icy5hcHBlbmQobmV3IE1hdGNoWFBhdGhKb2IoZG9jdW1lbnQsICIvLypbY29u
dGFpbnMobmFtZSgpLCAnIiArIGVzY2FwZWRUYWdOYW1lUXVlcnkgKyAiJyldIikpOworICAgICAg
ICAgICAgbV9wZW5kaW5nTWF0Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hQbGFpblRleHRKb2IoZG9j
dW1lbnQsIGVzY2FwZWRRdWVyeSkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICBib29sIG1hdGNoZXNFdmVyeU5vZGUgPSB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5
ID09ICIvLyoiIHx8IHdoaXRlc3BhY2VUcmltbWVkUXVlcnkgPT0gIioiOworICAgICAgICBpZiAo
bWF0Y2hlc0V2ZXJ5Tm9kZSkgeworICAgICAgICAgICAgLy8gVGhlc2UgcXVlcmllcyB3aWxsIG1h
dGNoIGV2ZXJ5IG5vZGUuIE1hdGNoaW5nIGV2ZXJ5dGhpbmcgaXNuJ3QgdXNlZnVsIGFuZCBjYW4g
YmUgc2xvdyBmb3IgbGFyZ2UgcGFnZXMsCisgICAgICAgICAgICAvLyBzbyBsaW1pdCB0aGUgc2Vh
cmNoIGZ1bmN0aW9ucyBsaXN0IHRvIHBsYWluIHRleHQgYW5kIGF0dHJpYnV0ZSBtYXRjaGluZyBm
b3IgdGhlc2UuCisgICAgICAgICAgICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBNYXRj
aFhQYXRoSm9iKGRvY3VtZW50LCAiLy8qW2NvbnRhaW5zKEAqLCAnIiArIGVzY2FwZWRRdWVyeSAr
ICInKV0iKSk7CisgICAgICAgICAgICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBNYXRj
aFBsYWluVGV4dEpvYihkb2N1bWVudCwgZXNjYXBlZFF1ZXJ5KSk7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIG1fcGVuZGluZ01hdGNoSm9i
cy5hcHBlbmQobmV3IE1hdGNoRXhhY3RJZEpvYihkb2N1bWVudCwgd2hpdGVzcGFjZVRyaW1tZWRR
dWVyeSkpOworICAgICAgICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBNYXRjaEV4YWN0
Q2xhc3NOYW1lc0pvYihkb2N1bWVudCwgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSkpOworICAgICAg
ICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBNYXRjaEV4YWN0VGFnTmFtZXNKb2IoZG9j
dW1lbnQsIHRhZ05hbWVRdWVyeSkpOworICAgICAgICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5k
KG5ldyBNYXRjaFF1ZXJ5U2VsZWN0b3JBbGxKb2IoZG9jdW1lbnQsICJbIiArIGF0dHJpYnV0ZU5h
bWVRdWVyeSArICJdIikpOworICAgICAgICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBN
YXRjaFF1ZXJ5U2VsZWN0b3JBbGxKb2IoZG9jdW1lbnQsIHdoaXRlc3BhY2VUcmltbWVkUXVlcnkp
KTsKKyAgICAgICAgbV9wZW5kaW5nTWF0Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hYUGF0aEpvYihk
b2N1bWVudCwgIi8vKltjb250YWlucyhAKiwgJyIgKyBlc2NhcGVkUXVlcnkgKyAiJyldIikpOwor
ICAgICAgICBpZiAoIXRhZ05hbWVRdWVyeS5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX3BlbmRp
bmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBNYXRjaFhQYXRoSm9iKGRvY3VtZW50LCAiLy8qW2NvbnRh
aW5zKG5hbWUoKSwgJyIgKyBlc2NhcGVkVGFnTmFtZVF1ZXJ5ICsgIicpXSIpKTsKKyAgICAgICAg
bV9wZW5kaW5nTWF0Y2hKb2JzLmFwcGVuZChuZXcgTWF0Y2hQbGFpblRleHRKb2IoZG9jdW1lbnQs
IGVzY2FwZWRRdWVyeSkpOworICAgICAgICBtX3BlbmRpbmdNYXRjaEpvYnMuYXBwZW5kKG5ldyBN
YXRjaFhQYXRoSm9iKGRvY3VtZW50LCB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5KSk7CisgICAgfQor
CisgICAgaWYgKHJ1blN5bmNocm9ub3VzbHkpIHsKKyAgICAgICAgLy8gRm9yIHRlc3RzLgorICAg
ICAgICBMaXN0SGFzaFNldDxOb2RlKj4gcmVzdWx0Q29sbGVjdG9yOworICAgICAgICBmb3IgKERl
cXVlPE1hdGNoSm9iKj46Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nTWF0Y2hKb2JzLmJlZ2luKCk7
IGl0ICE9IG1fcGVuZGluZ01hdGNoSm9icy5lbmQoKTsgKytpdCkKKyAgICAgICAgICAgICgqaXQp
LT5tYXRjaChyZXN1bHRDb2xsZWN0b3IpOworICAgICAgICByZXBvcnROb2Rlc0FzU2VhcmNoUmVz
dWx0cyhyZXN1bHRDb2xsZWN0b3IpOworICAgICAgICBzZWFyY2hDYW5jZWxlZCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1fbWF0Y2hKb2JzVGltZXIuc3RhcnRPbmVTaG90KDApOwor
fQorCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZWFyY2hDYW5jZWxlZCgpCit7CisgICAgaWYg
KG1fbWF0Y2hKb2JzVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9tYXRjaEpvYnNUaW1lci5z
dG9wKCk7CisgICAgZGVsZXRlQWxsVmFsdWVzKG1fcGVuZGluZ01hdGNoSm9icyk7CisgICAgbV9w
ZW5kaW5nTWF0Y2hKb2JzLmNsZWFyKCk7CisgICAgbV9zZWFyY2hSZXN1bHRzLmNsZWFyKCk7Cit9
CisKIFN0cmluZyBJbnNwZWN0b3JET01BZ2VudDo6ZG9jdW1lbnRVUkxTdHJpbmcoRG9jdW1lbnQq
IGRvY3VtZW50KSBjb25zdAogewogICAgIGlmICghZG9jdW1lbnQgfHwgZG9jdW1lbnQtPnVybCgp
LmlzTnVsbCgpKQpAQCAtMTMzMCw2ICsxNTUzLDM2IEBAIENTU1N0eWxlU2hlZXQqIEluc3BlY3Rv
ckRPTUFnZW50OjpnZXRQYXJlbnRTdHlsZVNoZWV0KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxl
CiAgICAgcmV0dXJuIHBhcmVudFN0eWxlU2hlZXQ7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6Om9uTWF0Y2hKb2JzVGltZXIoVGltZXI8SW5zcGVjdG9yRE9NQWdlbnQ+KikKK3sKKyAgICBp
ZiAoIW1fcGVuZGluZ01hdGNoSm9icy5zaXplKCkpIHsKKyAgICAgICAgc2VhcmNoQ2FuY2VsZWQo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIExpc3RIYXNoU2V0PE5vZGUqPiByZXN1
bHRDb2xsZWN0b3I7CisgICAgTWF0Y2hKb2IqIGpvYiA9IG1fcGVuZGluZ01hdGNoSm9icy50YWtl
Rmlyc3QoKTsKKyAgICBqb2ItPm1hdGNoKHJlc3VsdENvbGxlY3Rvcik7CisgICAgZGVsZXRlIGpv
YjsKKworICAgIHJlcG9ydE5vZGVzQXNTZWFyY2hSZXN1bHRzKHJlc3VsdENvbGxlY3Rvcik7CisK
KyAgICBtX21hdGNoSm9ic1RpbWVyLnN0YXJ0T25lU2hvdCgwLjAyNSk7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnJlcG9ydE5vZGVzQXNTZWFyY2hSZXN1bHRzKExpc3RIYXNoU2V0PE5v
ZGUqPiYgcmVzdWx0Q29sbGVjdG9yKQoreworICAgIFNjcmlwdEFycmF5IG5vZGVJZHMgPSBtX2Zy
b250ZW5kLT5uZXdTY3JpcHRBcnJheSgpOworICAgIGludCBpbmRleCA9IDA7CisgICAgZm9yIChM
aXN0SGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ID0gcmVzdWx0Q29sbGVjdG9yLmJlZ2luKCk7
IGl0ICE9IHJlc3VsdENvbGxlY3Rvci5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAobV9zZWFy
Y2hSZXN1bHRzLmNvbnRhaW5zKCppdCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
bV9zZWFyY2hSZXN1bHRzLmFkZCgqaXQpOworICAgICAgICBub2RlSWRzLnNldChpbmRleCsrLCBz
dGF0aWNfY2FzdDxsb25nIGxvbmc+KHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoKml0KSkpOworICAg
IH0KKyAgICBtX2Zyb250ZW5kLT5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KG5vZGVJZHMpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggZjg5MjViNS4uYTk2MjU2OSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0zMSwxMyArMzEsMTcgQEAK
ICNkZWZpbmUgSW5zcGVjdG9yRE9NQWdlbnRfaAogCiAjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgi
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5j
bHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDU1NTdG9yZS5oIgorI2lu
Y2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0QXJyYXkuaCIKICNpbmNsdWRlICJT
Y3JpcHRPYmplY3QuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgorI2luY2x1ZGUgIlRpbWVy
LmgiCiAKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBA
IC01Myw4ICs1Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDU1NTdHlsZVNo
ZWV0OwogICAgIGNsYXNzIEVsZW1lbnQ7CiAgICAgY2xhc3MgRXZlbnQ7Ci0gICAgY2xhc3MgRG9j
dW1lbnQ7CiAgICAgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CisgICAgY2xhc3MgTWF0Y2hKb2I7
CiAgICAgY2xhc3MgTmFtZU5vZGVNYXA7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBQYWdl
OwpAQCAtMTAxLDYgKzEwNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBj
aGFuZ2VUYWdOYW1lKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgY29uc3QgQXRvbWljU3RyaW5n
JiB0YWdOYW1lLCBib29sIGV4cGFuZGVkKTsKICAgICAgICAgdm9pZCBzZXRUZXh0Tm9kZVZhbHVl
KGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgICAg
IHZvaWQgZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCk7
CisgICAgICAgIHZvaWQgcGVyZm9ybVNlYXJjaChjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmlt
bWVkUXVlcnksIGJvb2wgcnVuU3luY2hyb25vdXNseSk7CisgICAgICAgIHZvaWQgc2VhcmNoQ2Fu
Y2VsZWQoKTsKIAogICAgICAgICAvLyBNZXRob2RzIGNhbGxlZCBmcm9tIHRoZSBmcm9udGVuZCBm
b3IgQ1NTIHN0eWxlcyBpbnNwZWN0aW9uLgogICAgICAgICB2b2lkIGdldFN0eWxlcyhsb25nIGNh
bGxJZCwgbG9uZyBub2RlSWQsIGJvb2wgYXV0aG9yT25seSk7CkBAIC0xNjUsNiArMTcxLDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmcgZG9jdW1lbnRVUkxTdHJpbmcoRG9j
dW1lbnQqIGRvY3VtZW50KSBjb25zdDsKICAgICAgICAgSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0
b3JlKCkgeyByZXR1cm4gbV9jc3NTdG9yZTsgfQogCisgICAgICAgIHZvaWQgb25NYXRjaEpvYnNU
aW1lcihUaW1lcjxJbnNwZWN0b3JET01BZ2VudD4qKTsKKyAgICAgICAgdm9pZCByZXBvcnROb2Rl
c0FzU2VhcmNoUmVzdWx0cyhMaXN0SGFzaFNldDxOb2RlKj4mIHJlc3VsdENvbGxlY3Rvcik7CisK
ICAgICAgICAgU2NyaXB0T2JqZWN0IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJh
dGlvbiosIGJvb2wgYmluZCk7CiAgICAgICAgIHZvaWQgcG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQ
cm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qLCBTY3JpcHRPYmplY3QmIHJlc3VsdCk7CiAg
ICAgICAgIFNjcmlwdEFycmF5IGJ1aWxkQXJyYXlGb3JEaXNhYmxlZFN0eWxlUHJvcGVydGllcyhE
aXNhYmxlZFN0eWxlRGVjbGFyYXRpb24qKTsKQEAgLTE4OCw5ICsxOTcsMTEgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBIYXNoU2V0PGxvbmc+IG1fY2hpbGRyZW5SZXF1ZXN0ZWQ7CiAg
ICAgICAgIGxvbmcgbV9sYXN0Tm9kZUlkOwogICAgICAgICBMaXN0SGFzaFNldDxSZWZQdHI8RG9j
dW1lbnQ+ID4gbV9kb2N1bWVudHM7CisgICAgICAgIERlcXVlPE1hdGNoSm9iKj4gbV9wZW5kaW5n
TWF0Y2hKb2JzOworICAgICAgICBUaW1lcjxJbnNwZWN0b3JET01BZ2VudD4gbV9tYXRjaEpvYnNU
aW1lcjsKKyAgICAgICAgSGFzaFNldDxSZWZQdHI8Tm9kZT4gPiBtX3NlYXJjaFJlc3VsdHM7CiAg
ICAgfTsKIAotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyAhZGVmaW5lZChJ
bnNwZWN0b3JET01BZ2VudF9oKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3Bw
CmluZGV4IDM5MGVkYWIuLmVlZWZiZDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZC5jcHAKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjp1cGRh
dGVET01TdG9yYWdlKGxvbmcgc3RvcmFnZUlkKQogfQogI2VuZGlmCiAKLXZvaWQgSW5zcGVjdG9y
RnJvbnRlbmQ6OmFkZE5vZGVzVG9TZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBub2RlSWRzKQor
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkTm9kZXNUb1NlYXJjaFJlc3VsdChjb25zdCBTY3Jp
cHRBcnJheSYgbm9kZUlkcykKIHsKICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93
ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgi
YWRkTm9kZXNUb1NlYXJjaFJlc3VsdCIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
LmgKaW5kZXggYjlmODdlZi4uODJjZGY4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZC5oCkBAIC0xNTgsNyArMTU4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIGRpZEdldENvb2tpZXMobG9uZyBjYWxsSWQsIGNvbnN0IFNjcmlwdEFycmF5JiBjb29raWVz
LCBjb25zdCBTdHJpbmcmIGNvb2tpZXNTdHJpbmcpOwogICAgICAgICB2b2lkIGRpZERpc3BhdGNo
T25JbmplY3RlZFNjcmlwdChsb25nIGNhbGxJZCwgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiByZXN1
bHQsIGJvb2wgaXNFeGNlcHRpb24pOwogCi0gICAgICAgIHZvaWQgYWRkTm9kZXNUb1NlYXJjaFJl
c3VsdChjb25zdCBTdHJpbmcmIG5vZGVJZHMpOworICAgICAgICB2b2lkIGFkZE5vZGVzVG9TZWFy
Y2hSZXN1bHQoY29uc3QgU2NyaXB0QXJyYXkmIG5vZGVJZHMpOwogCiAgICAgICAgIHZvaWQgY29u
dGV4dE1lbnVJdGVtU2VsZWN0ZWQoaW50IGl0ZW1JZCk7CiAgICAgICAgIHZvaWQgY29udGV4dE1l
bnVDbGVhcmVkKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNv
dXJjZS5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAKaW5kZXgg
OTk5YjhkNi4uZjBlMzkxZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UmVzb3VyY2UuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNw
cApAQCAtMTY5LDcgKzE2OSw2IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2U6OnVwZGF0ZVNjcmlw
dE9iamVjdChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAgICAgICAgIGpzb25PYmplY3Qu
c2V0KCJleHBlY3RlZENvbnRlbnRMZW5ndGgiLCBtX2V4cGVjdGVkQ29udGVudExlbmd0aCk7CiAg
ICAgICAgIGpzb25PYmplY3Quc2V0KCJzdGF0dXNDb2RlIiwgbV9yZXNwb25zZVN0YXR1c0NvZGUp
OwogICAgICAgICBqc29uT2JqZWN0LnNldCgic3RhdHVzVGV4dCIsIG1fcmVzcG9uc2VTdGF0dXNU
ZXh0KTsKLSAgICAgICAganNvbk9iamVjdC5zZXQoInN1Z2dlc3RlZEZpbGVuYW1lIiwgbV9zdWdn
ZXN0ZWRGaWxlbmFtZSk7CiAgICAgICAgIFNjcmlwdE9iamVjdCByZXNwb25zZUhlYWRlcnMgPSBm
cm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0KCk7CiAgICAgICAgIHBvcHVsYXRlSGVhZGVyc09iamVj
dCgmcmVzcG9uc2VIZWFkZXJzLCBtX3Jlc3BvbnNlSGVhZGVyRmllbGRzKTsKICAgICAgICAganNv
bk9iamVjdC5zZXQoInJlc3BvbnNlSGVhZGVycyIsIHJlc3BvbnNlSGVhZGVycyk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzCmluZGV4IGM4NTM0NDAuLjU1
YmE4MmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1Bh
bmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpz
CkBAIC0yNDAsNyArMjQwLDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBl
ID0gewogCiAgICAgICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9IDA7CiAgICAg
ICAgIHRoaXMuX3NlYXJjaFJlc3VsdHMgPSBbXTsKLSAgICAgICAgSW5qZWN0ZWRTY3JpcHRBY2Nl
c3MuZ2V0RGVmYXVsdCgpLnNlYXJjaENhbmNlbGVkKGZ1bmN0aW9uKCkge30pOworICAgICAgICBJ
bnNwZWN0b3JCYWNrZW5kLnNlYXJjaENhbmNlbGVkKCk7CiAgICAgfSwKIAogICAgIHBlcmZvcm1T
ZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5KQpAQCAtMjU2LDcgKzI1Niw3IEBAIFdlYkluc3BlY3Rvci5F
bGVtZW50c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fbWF0Y2hlc0NvdW50VXBk
YXRlVGltZW91dCA9IG51bGw7CiAgICAgICAgIHRoaXMuX3NlYXJjaFF1ZXJ5ID0gcXVlcnk7CiAK
LSAgICAgICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0RGVmYXVsdCgpLnBlcmZvcm1TZWFyY2go
d2hpdGVzcGFjZVRyaW1tZWRRdWVyeSwgZmFsc2UsIGZ1bmN0aW9uKCkge30pOworICAgICAgICBJ
bnNwZWN0b3JCYWNrZW5kLnBlcmZvcm1TZWFyY2god2hpdGVzcGFjZVRyaW1tZWRRdWVyeSk7CiAg
ICAgfSwKIAogICAgIHNlYXJjaGluZ0Zvck5vZGVXYXNFbmFibGVkOiBmdW5jdGlvbigpCkBAIC0y
ODgsMTIgKzI4OCwxMSBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUgPSB7
CiAKICAgICBhZGROb2Rlc1RvU2VhcmNoUmVzdWx0OiBmdW5jdGlvbihub2RlSWRzKQogICAgIHsK
LSAgICAgICAgaWYgKCFub2RlSWRzKQorICAgICAgICBpZiAoIW5vZGVJZHMubGVuZ3RoKQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHZhciBub2RlSWRzQXJyYXkgPSBub2RlSWRzLnNw
bGl0KCIsIik7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUlkc0FycmF5Lmxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZUlkID0gbm9kZUlkc0FycmF5W2ldOworICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVJZHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgIHZhciBub2RlSWQgPSBub2RlSWRzW2ldOwogICAgICAgICAgICAgdmFyIG5vZGUgPSBXZWJJ
bnNwZWN0b3IuZG9tQWdlbnQubm9kZUZvcklkKG5vZGVJZCk7CiAgICAgICAgICAgICBpZiAoIW5v
ZGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKaW5kZXggNDAwMmUyMy4uZTYyYTkxNiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcwpAQCAtODMsOCArODMs
NiBAQCBJbmplY3RlZFNjcmlwdC5yZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwID0gZnVuY3Rpb24o
b2JqZWN0R3JvdXBOYW1lKSB7CiAvLyBDYWxsZWQgZnJvbSB3aXRoaW4gSW5zcGVjdG9yQ29udHJv
bGxlciBvbiB0aGUgJ2luc3BlY3RlZCBwYWdlJyBzaWRlLgogSW5qZWN0ZWRTY3JpcHQucmVzZXQg
PSBmdW5jdGlvbigpCiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHQuX3NlYXJjaFJlc3VsdHMgPSBbXTsK
LSAgICBJbmplY3RlZFNjcmlwdC5faW5jbHVkZWRJblNlYXJjaFJlc3VsdHNQcm9wZXJ0eU5hbWUg
PSAiX19pbmNsdWRlZEluSW5zcGVjdG9yU2VhcmNoUmVzdWx0cyI7CiB9CiAKIEluamVjdGVkU2Ny
aXB0LnJlc2V0KCk7CkBAIC0yMTEsNyArMjA5LDcgQEAgSW5qZWN0ZWRTY3JpcHQuc2V0UHJvcGVy
dHlWYWx1ZSA9IGZ1bmN0aW9uKG9iamVjdFByb3h5LCBwcm9wZXJ0eU5hbWUsIGV4cHJlc3Npb24K
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgIHRyeSB7Ci0g
ICAgICAgICAgICB2YXIgcmVzdWx0ID0gaW5zcGVjdGVkV2luZG93LmV2YWwoIlwiIiArIEluamVj
dGVkU2NyaXB0Ll9lc2NhcGVDaGFyYWN0ZXJzKGV4cHJlc3Npb24sICJcIiIpICsgIlwiIik7Cisg
ICAgICAgICAgICB2YXIgcmVzdWx0ID0gaW5zcGVjdGVkV2luZG93LmV2YWwoIlwiIiArIGV4cHJl
c3Npb24ucmVwbGFjZSgvIi9nLCAiXFxcIiIpICsgIlwiIik7CiAgICAgICAgICAgICBvYmplY3Rb
cHJvcGVydHlOYW1lXSA9IHJlc3VsdDsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9IGNhdGNoKGUpIHsKQEAgLTM1NSwyNDcgKzM1Myw2IEBAIEluamVjdGVkU2NyaXB0LmdldE5v
ZGVJZCA9IGZ1bmN0aW9uKG5vZGUpCiAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdC5wdXNo
Tm9kZVBhdGhUb0Zyb250ZW5kKG5vZGUsIGZhbHNlLCBmYWxzZSk7CiB9CiAKLUluamVjdGVkU2Ny
aXB0LnBlcmZvcm1TZWFyY2ggPSBmdW5jdGlvbih3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBydW5T
eW5jaHJvbm91c2x5KQotewotICAgIC8vIEZJWE1FOiBGZXcgdGhpbmdzIGFyZSBtaXNzaW5nIGhl
cmU6Ci0gICAgLy8gMSkgU2VhcmNoIHdvcmtzIHdpdGggbm9kZSBncmFudWxhcml0eSAtIG51bWJl
ciBvZiBtYXRjaGVzIHdpdGhpbiBub2RlIGlzIG5vdCBjYWxjdWxhdGVkLgotICAgIC8vIDIpIFNl
YXJjaCBkb2VzIG5vdCB3b3JrIG91dHNpZGUgbWFpbiBkb2N1bWVudHMnIGRvbWFpbiAtIHdlIG5l
ZWQgdG8gdXNlIHNwZWNpZmljIEluamVjdGVkU2NyaXB0IGluc3RhbmNlcwotICAgIC8vICAgIGZv
ciBvdGhlciBkb21haW5zLgotICAgIC8vIDMpIFRoZXJlIGlzIG5vIG5lZWQgdG8gcHVzaCBhbGwg
c2VhcmNoIHJlc3VsdHMgdG8gdGhlIGZyb250LWVuZCBhdCBhIHRpbWUsIHB1c2hpbmcgbmV4dCAv
IHByZXZpb3VzIHJlc3VsdAotICAgIC8vICAgIGlzIHN1ZmZpY2llbnQuCi0gICAgdmFyIHRhZ05h
bWVRdWVyeSA9IHdoaXRlc3BhY2VUcmltbWVkUXVlcnk7Ci0gICAgdmFyIGF0dHJpYnV0ZU5hbWVR
dWVyeSA9IHdoaXRlc3BhY2VUcmltbWVkUXVlcnk7Ci0gICAgdmFyIHN0YXJ0VGFnRm91bmQgPSAo
dGFnTmFtZVF1ZXJ5LmluZGV4T2YoIjwiKSA9PT0gMCk7Ci0gICAgdmFyIGVuZFRhZ0ZvdW5kID0g
KHRhZ05hbWVRdWVyeS5sYXN0SW5kZXhPZigiPiIpID09PSAodGFnTmFtZVF1ZXJ5Lmxlbmd0aCAt
IDEpKTsKLQotICAgIGlmIChzdGFydFRhZ0ZvdW5kIHx8IGVuZFRhZ0ZvdW5kKSB7Ci0gICAgICAg
IHZhciB0YWdOYW1lUXVlcnlMZW5ndGggPSB0YWdOYW1lUXVlcnkubGVuZ3RoOwotICAgICAgICB0
YWdOYW1lUXVlcnkgPSB0YWdOYW1lUXVlcnkuc3Vic3RyaW5nKChzdGFydFRhZ0ZvdW5kID8gMSA6
IDApLCAoZW5kVGFnRm91bmQgPyAodGFnTmFtZVF1ZXJ5TGVuZ3RoIC0gMSkgOiB0YWdOYW1lUXVl
cnlMZW5ndGgpKTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayB0aGUgdGFnTmFtZVF1ZXJ5IGlzIGl0
IGlzIGEgcG9zc2libHkgdmFsaWQgdGFnIG5hbWUuCi0gICAgaWYgKCEvXlthLXpBLVowLTlcLV86
XSskLy50ZXN0KHRhZ05hbWVRdWVyeSkpCi0gICAgICAgIHRhZ05hbWVRdWVyeSA9IG51bGw7Ci0K
LSAgICAvLyBDaGVjayB0aGUgYXR0cmlidXRlTmFtZVF1ZXJ5IGlzIGl0IGlzIGEgcG9zc2libHkg
dmFsaWQgdGFnIG5hbWUuCi0gICAgaWYgKCEvXlthLXpBLVowLTlcLV86XSskLy50ZXN0KGF0dHJp
YnV0ZU5hbWVRdWVyeSkpCi0gICAgICAgIGF0dHJpYnV0ZU5hbWVRdWVyeSA9IG51bGw7Ci0KLSAg
ICBjb25zdCBlc2NhcGVkUXVlcnkgPSBJbmplY3RlZFNjcmlwdC5fZXNjYXBlQ2hhcmFjdGVycyh3
aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCAiJyIpOwotICAgIGNvbnN0IGVzY2FwZWRUYWdOYW1lUXVl
cnkgPSAodGFnTmFtZVF1ZXJ5ID8gIEluamVjdGVkU2NyaXB0Ll9lc2NhcGVDaGFyYWN0ZXJzKHRh
Z05hbWVRdWVyeSwgIiciKSA6IG51bGwpOwotICAgIGNvbnN0IGVzY2FwZWRXaGl0ZXNwYWNlVHJp
bW1lZFF1ZXJ5ID0gSW5qZWN0ZWRTY3JpcHQuX2VzY2FwZUNoYXJhY3RlcnMod2hpdGVzcGFjZVRy
aW1tZWRRdWVyeSwgIiciKTsKLSAgICBjb25zdCBzZWFyY2hSZXN1bHRzUHJvcGVydHkgPSBJbmpl
Y3RlZFNjcmlwdC5faW5jbHVkZWRJblNlYXJjaFJlc3VsdHNQcm9wZXJ0eU5hbWU7Ci0KLSAgICBm
dW5jdGlvbiBhZGROb2Rlc1RvUmVzdWx0cyhub2RlcywgbGVuZ3RoLCBnZXRJdGVtKQotICAgIHsK
LSAgICAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFy
IG5vZGVJZHMgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgdmFyIG5vZGUgPSBnZXRJdGVtLmNhbGwobm9kZXMsIGkpOwotICAgICAg
ICAgICAgLy8gU2tpcCB0aGlzIG5vZGUgaWYgaXQgYWxyZWFkeSBoYXMgdGhlIHByb3BlcnR5Lgot
ICAgICAgICAgICAgaWYgKHNlYXJjaFJlc3VsdHNQcm9wZXJ0eSBpbiBub2RlKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAoIUluamVjdGVkU2NyaXB0Ll9zZWFy
Y2hSZXN1bHRzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIEluamVjdGVkU2NyaXB0Ll9jdXJy
ZW50U2VhcmNoUmVzdWx0SW5kZXggPSAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBu
b2RlW3NlYXJjaFJlc3VsdHNQcm9wZXJ0eV0gPSB0cnVlOwotICAgICAgICAgICAgSW5qZWN0ZWRT
Y3JpcHQuX3NlYXJjaFJlc3VsdHMucHVzaChub2RlKTsKLSAgICAgICAgICAgIHZhciBub2RlSWQg
PSBJbmplY3RlZFNjcmlwdEhvc3QucHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlLCBmYWxzZSwg
ZmFsc2UpOwotICAgICAgICAgICAgbm9kZUlkcy5wdXNoKG5vZGVJZCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgSW5qZWN0ZWRTY3JpcHRIb3N0LmFkZE5vZGVzVG9TZWFyY2hSZXN1bHQobm9kZUlkcy5q
b2luKCIsIikpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIG1hdGNoRXhhY3RJdGVtcyhkb2MpCi0g
ICAgewotICAgICAgICBtYXRjaEV4YWN0SWQuY2FsbCh0aGlzLCBkb2MpOwotICAgICAgICBtYXRj
aEV4YWN0Q2xhc3NOYW1lcy5jYWxsKHRoaXMsIGRvYyk7Ci0gICAgICAgIG1hdGNoRXhhY3RUYWdO
YW1lcy5jYWxsKHRoaXMsIGRvYyk7Ci0gICAgICAgIG1hdGNoRXhhY3RBdHRyaWJ1dGVOYW1lcy5j
YWxsKHRoaXMsIGRvYyk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbWF0Y2hFeGFjdElkKGRvYykK
LSAgICB7Ci0gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18uZ2V0RWxlbWVudEJ5
SWQuY2FsbChkb2MsIHdoaXRlc3BhY2VUcmltbWVkUXVlcnkpOwotICAgICAgICBhZGROb2Rlc1Rv
UmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgKHJlc3VsdCA/IDEgOiAwKSwgZnVuY3Rpb24oKSB7
IHJldHVybiB0aGlzIH0pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIG1hdGNoRXhhY3RDbGFzc05h
bWVzKGRvYykKLSAgICB7Ci0gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18uZ2V0
RWxlbWVudHNCeUNsYXNzTmFtZS5jYWxsKGRvYywgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSk7Ci0g
ICAgICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQubGVuZ3Ro
LCByZXN1bHQuaXRlbSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbWF0Y2hFeGFjdFRhZ05hbWVz
KGRvYykKLSAgICB7Ci0gICAgICAgIGlmICghdGFnTmFtZVF1ZXJ5KQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmdldEVsZW1lbnRzQnlU
YWdOYW1lLmNhbGwoZG9jLCB0YWdOYW1lUXVlcnkpOwotICAgICAgICBhZGROb2Rlc1RvUmVzdWx0
cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0Lmxlbmd0aCwgcmVzdWx0Lml0ZW0pOwotICAgIH0K
LQotICAgIGZ1bmN0aW9uIG1hdGNoRXhhY3RBdHRyaWJ1dGVOYW1lcyhkb2MpCi0gICAgewotICAg
ICAgICBpZiAoIWF0dHJpYnV0ZU5hbWVRdWVyeSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgY29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5xdWVyeVNlbGVjdG9yQWxsLmNhbGwoZG9j
LCAiWyIgKyBhdHRyaWJ1dGVOYW1lUXVlcnkgKyAiXSIpOwotICAgICAgICBhZGROb2Rlc1RvUmVz
dWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0Lmxlbmd0aCwgcmVzdWx0Lml0ZW0pOwotICAg
IH0KLQotICAgIGZ1bmN0aW9uIG1hdGNoUGFydGlhbFRhZ05hbWVzKGRvYykKLSAgICB7Ci0gICAg
ICAgIGlmICghdGFnTmFtZVF1ZXJ5KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjb25z
dCByZXN1bHQgPSBkb2MuX19wcm90b19fLmV2YWx1YXRlLmNhbGwoZG9jLCAiLy8qW2NvbnRhaW5z
KG5hbWUoKSwgJyIgKyBlc2NhcGVkVGFnTmFtZVF1ZXJ5ICsgIicpXSIsIGRvYywgbnVsbCwgWFBh
dGhSZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUpOwotICAgICAgICBhZGROb2Rlc1Rv
UmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0LnNuYXBzaG90TGVuZ3RoLCByZXN1bHQu
c25hcHNob3RJdGVtKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBtYXRjaFN0YXJ0T2ZUYWdOYW1l
cyhkb2MpCi0gICAgewotICAgICAgICBpZiAoIXRhZ05hbWVRdWVyeSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5ldmFsdWF0ZS5jYWxs
KGRvYywgIi8vKltzdGFydHMtd2l0aChuYW1lKCksICciICsgZXNjYXBlZFRhZ05hbWVRdWVyeSAr
ICInKV0iLCBkb2MsIG51bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBF
KTsKLSAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0aGlzLCByZXN1bHQsIHJlc3VsdC5z
bmFwc2hvdExlbmd0aCwgcmVzdWx0LnNuYXBzaG90SXRlbSk7Ci0gICAgfQotCi0gICAgZnVuY3Rp
b24gbWF0Y2hQYXJ0aWFsVGFnTmFtZXNBbmRBdHRyaWJ1dGVWYWx1ZXMoZG9jKQotICAgIHsKLSAg
ICAgICAgaWYgKCF0YWdOYW1lUXVlcnkpIHsKLSAgICAgICAgICAgIG1hdGNoUGFydGlhbEF0dHJp
YnV0ZVZhbHVlcy5jYWxsKHRoaXMsIGRvYyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmV2YWx1YXRlLmNhbGwo
ZG9jLCAiLy8qW2NvbnRhaW5zKG5hbWUoKSwgJyIgKyBlc2NhcGVkVGFnTmFtZVF1ZXJ5ICsgIicp
IG9yIGNvbnRhaW5zKEAqLCAnIiArIGVzY2FwZWRRdWVyeSArICInKV0iLCBkb2MsIG51bGwsIFhQ
YXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKTsKLSAgICAgICAgYWRkTm9kZXNU
b1Jlc3VsdHMuY2FsbCh0aGlzLCByZXN1bHQsIHJlc3VsdC5zbmFwc2hvdExlbmd0aCwgcmVzdWx0
LnNuYXBzaG90SXRlbSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbWF0Y2hQYXJ0aWFsQXR0cmli
dXRlVmFsdWVzKGRvYykKLSAgICB7Ci0gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3Rv
X18uZXZhbHVhdGUuY2FsbChkb2MsICIvLypbY29udGFpbnMoQCosICciICsgZXNjYXBlZFF1ZXJ5
ICsgIicpXSIsIGRvYywgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEUpOwotICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0
LnNuYXBzaG90TGVuZ3RoLCByZXN1bHQuc25hcHNob3RJdGVtKTsKLSAgICB9Ci0KLSAgICBmdW5j
dGlvbiBtYXRjaFN0eWxlU2VsZWN0b3IoZG9jKQotICAgIHsKLSAgICAgICAgY29uc3QgcmVzdWx0
ID0gZG9jLl9fcHJvdG9fXy5xdWVyeVNlbGVjdG9yQWxsLmNhbGwoZG9jLCB3aGl0ZXNwYWNlVHJp
bW1lZFF1ZXJ5KTsKLSAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0aGlzLCByZXN1bHQs
IHJlc3VsdC5sZW5ndGgsIHJlc3VsdC5pdGVtKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBtYXRj
aFBsYWluVGV4dChkb2MpCi0gICAgewotICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90
b19fLmV2YWx1YXRlLmNhbGwoZG9jLCAiLy90ZXh0KClbY29udGFpbnMoLiwgJyIgKyBlc2NhcGVk
UXVlcnkgKyAiJyldIHwgLy9jb21tZW50KClbY29udGFpbnMoLiwgJyIgKyBlc2NhcGVkUXVlcnkg
KyAiJyldIiwgZG9jLCBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQ
RSk7Ci0gICAgICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQu
c25hcHNob3RMZW5ndGgsIHJlc3VsdC5zbmFwc2hvdEl0ZW0pOwotICAgIH0KLQotICAgIGZ1bmN0
aW9uIG1hdGNoWFBhdGhRdWVyeShkb2MpCi0gICAgewotICAgICAgICBjb25zdCByZXN1bHQgPSBk
b2MuX19wcm90b19fLmV2YWx1YXRlLmNhbGwoZG9jLCB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBk
b2MsIG51bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKTsKLSAgICAg
ICAgYWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0aGlzLCByZXN1bHQsIHJlc3VsdC5zbmFwc2hvdExl
bmd0aCwgcmVzdWx0LnNuYXBzaG90SXRlbSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZmluaXNo
ZWRTZWFyY2hpbmcoKQotICAgIHsKLSAgICAgICAgLy8gUmVtb3ZlIHRoZSBzZWFyY2hSZXN1bHRz
UHJvcGVydHkgbm93IHRoYXQgdGhlIHNlYXJjaCBpcyBmaW5pc2hlZC4KLSAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBJbmplY3RlZFNjcmlwdC5fc2VhcmNoUmVzdWx0cy5sZW5ndGg7ICsraSkK
LSAgICAgICAgICAgIGRlbGV0ZSBJbmplY3RlZFNjcmlwdC5fc2VhcmNoUmVzdWx0c1tpXVtzZWFy
Y2hSZXN1bHRzUHJvcGVydHldOwotICAgIH0KLQotICAgIGNvbnN0IG1haW5GcmFtZURvY3VtZW50
ID0gaW5zcGVjdGVkV2luZG93LmRvY3VtZW50OwotICAgIGNvbnN0IHNlYXJjaERvY3VtZW50cyA9
IFttYWluRnJhbWVEb2N1bWVudF07Ci0gICAgdmFyIHNlYXJjaEZ1bmN0aW9uczsKLSAgICBpZiAo
dGFnTmFtZVF1ZXJ5ICYmIHN0YXJ0VGFnRm91bmQgJiYgZW5kVGFnRm91bmQpCi0gICAgICAgIHNl
YXJjaEZ1bmN0aW9ucyA9IFttYXRjaEV4YWN0VGFnTmFtZXMsIG1hdGNoUGxhaW5UZXh0XTsKLSAg
ICBlbHNlIGlmICh0YWdOYW1lUXVlcnkgJiYgc3RhcnRUYWdGb3VuZCkKLSAgICAgICAgc2VhcmNo
RnVuY3Rpb25zID0gW21hdGNoU3RhcnRPZlRhZ05hbWVzLCBtYXRjaFBsYWluVGV4dF07Ci0gICAg
ZWxzZSBpZiAodGFnTmFtZVF1ZXJ5ICYmIGVuZFRhZ0ZvdW5kKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiB3ZSBzaG91bGQgaGF2ZSBhIG1hdGNoRW5kT2ZUYWdOYW1lcyBzZWFyY2ggZnVuY3Rpb24gaWYg
ZW5kVGFnRm91bmQgaXMgdHJ1ZSBidXQgbm90IHN0YXJ0VGFnRm91bmQuCi0gICAgICAgIC8vIFRo
aXMgcmVxdWlyZXMgZW5kcy13aXRoKCkgc3VwcG9ydCBpbiBYUGF0aCwgV2ViS2l0IG9ubHkgc3Vw
cG9ydHMgc3RhcnRzLXdpdGgoKSBhbmQgY29udGFpbnMoKS4KLSAgICAgICAgc2VhcmNoRnVuY3Rp
b25zID0gW21hdGNoUGFydGlhbFRhZ05hbWVzLCBtYXRjaFBsYWluVGV4dF07Ci0gICAgfSBlbHNl
IGlmICh3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5ID09PSAiLy8qIiB8fCB3aGl0ZXNwYWNlVHJpbW1l
ZFF1ZXJ5ID09PSAiKiIpIHsKLSAgICAgICAgLy8gVGhlc2UgcXVlcmllcyB3aWxsIG1hdGNoIGV2
ZXJ5IG5vZGUuIE1hdGNoaW5nIGV2ZXJ5dGhpbmcgaXNuJ3QgdXNlZnVsIGFuZCBjYW4gYmUgc2xv
dyBmb3IgbGFyZ2UgcGFnZXMsCi0gICAgICAgIC8vIHNvIGxpbWl0IHRoZSBzZWFyY2ggZnVuY3Rp
b25zIGxpc3QgdG8gcGxhaW4gdGV4dCBhbmQgYXR0cmlidXRlIG1hdGNoaW5nLgotICAgICAgICBz
ZWFyY2hGdW5jdGlvbnMgPSBbbWF0Y2hQYXJ0aWFsQXR0cmlidXRlVmFsdWVzLCBtYXRjaFBsYWlu
VGV4dF07Ci0gICAgfSBlbHNlCi0gICAgICAgIHNlYXJjaEZ1bmN0aW9ucyA9IFttYXRjaEV4YWN0
SXRlbXMsIG1hdGNoU3R5bGVTZWxlY3RvciwgbWF0Y2hQYXJ0aWFsVGFnTmFtZXNBbmRBdHRyaWJ1
dGVWYWx1ZXMsIG1hdGNoUGxhaW5UZXh0LCBtYXRjaFhQYXRoUXVlcnldOwotCi0gICAgLy8gRmlu
ZCBhbGwgZnJhbWVzLCBpZnJhbWVzIGFuZCBvYmplY3QgZWxlbWVudHMgdG8gc2VhcmNoIHRoZWly
IGRvY3VtZW50cy4KLSAgICBjb25zdCBzdWJkb2N1bWVudFJlc3VsdCA9IG1haW5GcmFtZURvY3Vt
ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImlmcmFtZSwgZnJhbWUsIG9iamVjdCIpOwotCi0gICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBzdWJkb2N1bWVudFJlc3VsdC5sZW5ndGg7ICsraSkgewotICAgICAg
ICB2YXIgZWxlbWVudCA9IHN1YmRvY3VtZW50UmVzdWx0Lml0ZW0oaSk7Ci0gICAgICAgIGlmIChl
bGVtZW50LmNvbnRlbnREb2N1bWVudCkKLSAgICAgICAgICAgIHNlYXJjaERvY3VtZW50cy5wdXNo
KGVsZW1lbnQuY29udGVudERvY3VtZW50KTsKLSAgICB9Ci0KLSAgICBjb25zdCBwYW5lbCA9IElu
amVjdGVkU2NyaXB0OwotICAgIHZhciBkb2N1bWVudEluZGV4ID0gMDsKLSAgICB2YXIgc2VhcmNo
RnVuY3Rpb25JbmRleCA9IDA7Ci0gICAgdmFyIGNodW5rSW50ZXJ2YWxJZGVudGlmaWVyID0gbnVs
bDsKLQotICAgIC8vIFNwbGl0IHVwIHRoZSB3b3JrIGludG8gY2h1bmtzIHNvIHdlIGRvbid0IGJs
b2NrIHRoZSBVSSB0aHJlYWQgd2hpbGUgcHJvY2Vzc2luZy4KLQotICAgIGZ1bmN0aW9uIHByb2Nl
c3NDaHVuaygpCi0gICAgewotICAgICAgICB2YXIgc2VhcmNoRG9jdW1lbnQgPSBzZWFyY2hEb2N1
bWVudHNbZG9jdW1lbnRJbmRleF07Ci0gICAgICAgIHZhciBzZWFyY2hGdW5jdGlvbiA9IHNlYXJj
aEZ1bmN0aW9uc1tzZWFyY2hGdW5jdGlvbkluZGV4XTsKLQotICAgICAgICBpZiAoKytzZWFyY2hG
dW5jdGlvbkluZGV4ID4gc2VhcmNoRnVuY3Rpb25zLmxlbmd0aCkgewotICAgICAgICAgICAgc2Vh
cmNoRnVuY3Rpb24gPSBzZWFyY2hGdW5jdGlvbnNbMF07Ci0gICAgICAgICAgICBzZWFyY2hGdW5j
dGlvbkluZGV4ID0gMDsKLQotICAgICAgICAgICAgaWYgKCsrZG9jdW1lbnRJbmRleCA+IHNlYXJj
aERvY3VtZW50cy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBpZiAocGFuZWwuX2N1cnJlbnRT
ZWFyY2hDaHVua0ludGVydmFsSWRlbnRpZmllciA9PT0gY2h1bmtJbnRlcnZhbElkZW50aWZpZXIp
Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYW5lbC5fY3VycmVudFNlYXJjaENodW5rSW50
ZXJ2YWxJZGVudGlmaWVyOwotICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2h1bmtJbnRl
cnZhbElkZW50aWZpZXIpOwotICAgICAgICAgICAgICAgIGZpbmlzaGVkU2VhcmNoaW5nLmNhbGwo
cGFuZWwpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgc2VhcmNoRG9jdW1lbnQgPSBzZWFyY2hEb2N1bWVudHNbZG9jdW1lbnRJbmRl
eF07Ci0gICAgICAgIH0KLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgc2VhcmNoRnVuY3Rp
b24uY2FsbChwYW5lbCwgc2VhcmNoRG9jdW1lbnQpOwotICAgICAgICB9IGNhdGNoKGVycikgewot
ICAgICAgICAgICAgLy8gaWdub3JlIGFueSBleGNlcHRpb25zLiB0aGUgcXVlcnkgbWlnaHQgYmUg
bWFsZm9ybWVkLCBidXQgd2UgYWxsb3cgdGhhdC4KLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAocnVuU3luY2hyb25vdXNseSkKLSAgICAgICAgd2hpbGUg
KHByb2Nlc3NDaHVuaygpKSB7fQotICAgIGVsc2UgewotICAgICAgICBwcm9jZXNzQ2h1bmsoKTsK
LSAgICAgICAgY2h1bmtJbnRlcnZhbElkZW50aWZpZXIgPSBzZXRJbnRlcnZhbChwcm9jZXNzQ2h1
bmssIDI1KTsKLSAgICAgICAgSW5qZWN0ZWRTY3JpcHQuX2N1cnJlbnRTZWFyY2hDaHVua0ludGVy
dmFsSWRlbnRpZmllciA9IGNodW5rSW50ZXJ2YWxJZGVudGlmaWVyOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotSW5qZWN0ZWRTY3JpcHQuc2VhcmNoQ2FuY2VsZWQgPSBmdW5jdGlvbigp
Ci17Ci0gICAgaWYgKEluamVjdGVkU2NyaXB0Ll9zZWFyY2hSZXN1bHRzKSB7Ci0gICAgICAgIGNv
bnN0IHNlYXJjaFJlc3VsdHNQcm9wZXJ0eSA9IEluamVjdGVkU2NyaXB0Ll9pbmNsdWRlZEluU2Vh
cmNoUmVzdWx0c1Byb3BlcnR5TmFtZTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz
Ll9zZWFyY2hSZXN1bHRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRo
aXMuX3NlYXJjaFJlc3VsdHNbaV07Ci0KLSAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc2VhcmNo
UmVzdWx0c1Byb3BlcnR5IHNpbmNlIHRoZXJlIG1pZ2h0IGJlIGFuIHVuZmluaXNoZWQgc2VhcmNo
LgotICAgICAgICAgICAgZGVsZXRlIG5vZGVbc2VhcmNoUmVzdWx0c1Byb3BlcnR5XTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChJbmplY3RlZFNjcmlwdC5fY3VycmVudFNlYXJjaENodW5r
SW50ZXJ2YWxJZGVudGlmaWVyKSB7Ci0gICAgICAgIGNsZWFySW50ZXJ2YWwoSW5qZWN0ZWRTY3Jp
cHQuX2N1cnJlbnRTZWFyY2hDaHVua0ludGVydmFsSWRlbnRpZmllcik7Ci0gICAgICAgIGRlbGV0
ZSBJbmplY3RlZFNjcmlwdC5fY3VycmVudFNlYXJjaENodW5rSW50ZXJ2YWxJZGVudGlmaWVyOwot
ICAgIH0KLSAgICBJbmplY3RlZFNjcmlwdC5fc2VhcmNoUmVzdWx0cyA9IFtdOwotICAgIHJldHVy
biB0cnVlOwotfQotCiBJbmplY3RlZFNjcmlwdC5vcGVuSW5JbnNwZWN0ZWRXaW5kb3cgPSBmdW5j
dGlvbih1cmwpCiB7CiAgICAgLy8gRG9uJ3QgY2FsbCB3aW5kb3cub3BlbiBvbiB3cmFwcGVyIC0g
cG9wdXAgYmxvY2tlciBtdXRlcyBpdC4KQEAgLTEwMjgsMjggKzc4NSw1IEBAIEluamVjdGVkU2Ny
aXB0Ll9jbGFzc05hbWUgPSBmdW5jdGlvbihvYmopCiAgICAgfQogfQogCi1JbmplY3RlZFNjcmlw
dC5fZXNjYXBlQ2hhcmFjdGVycyA9IGZ1bmN0aW9uKHN0ciwgY2hhcnMpCi17Ci0gICAgdmFyIGZv
dW5kQ2hhciA9IGZhbHNlOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgaWYgKHN0ci5pbmRleE9mKGNoYXJzLmNoYXJBdChpKSkgIT09IC0xKSB7
Ci0gICAgICAgICAgICBmb3VuZENoYXIgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWZvdW5kQ2hhcikKLSAgICAgICAgcmV0dXJuIHN0cjsK
LQotICAgIHZhciByZXN1bHQgPSAiIjsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5n
dGg7ICsraSkgewotICAgICAgICBpZiAoY2hhcnMuaW5kZXhPZihzdHIuY2hhckF0KGkpKSAhPT0g
LTEpCi0gICAgICAgICAgICByZXN1bHQgKz0gIlxcIjsKLSAgICAgICAgcmVzdWx0ICs9IHN0ci5j
aGFyQXQoaSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogcmV0dXJuIEluamVj
dGVkU2NyaXB0OwogfSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
SW5qZWN0ZWRTY3JpcHRBY2Nlc3MuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5q
ZWN0ZWRTY3JpcHRBY2Nlc3MuanMKaW5kZXggMjU1ODI2Ny4uYzM4ODIxMyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0QWNjZXNzLmpzCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qcwpAQCAt
NzEsMjkgKzcxLDE4IEBAIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlciA9IGZ1
bmN0aW9uKG1ldGhvZE5hbWUsIGFzeW5jKQogLy8gLSBNYWtlIHN1cmUgbGFzdCBwYXJhbWV0ZXIg
b2YgYWxsIHRoZSBJbmplY3RlZFNyaXB0QWNjZXNzLiogY2FsbHMgaXMgYSBjYWxsYmFjayBmdW5j
dGlvbi4KIC8vIFdlIGtlZXAgdGhlc2Ugc29ydGVkLgogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2lu
c3RhbGxIYW5kbGVyKCJhZGRJbnNwZWN0ZWROb2RlIik7Ci1JbmplY3RlZFNjcmlwdEFjY2Vzcy5f
aW5zdGFsbEhhbmRsZXIoImFkZFN0eWxlU2VsZWN0b3IiKTsKLUluamVjdGVkU2NyaXB0QWNjZXNz
Ll9pbnN0YWxsSGFuZGxlcigiYXBwbHlTdHlsZVJ1bGVUZXh0Iik7Ci1JbmplY3RlZFNjcmlwdEFj
Y2Vzcy5faW5zdGFsbEhhbmRsZXIoImFwcGx5U3R5bGVUZXh0Iik7CiBJbmplY3RlZFNjcmlwdEFj
Y2Vzcy5faW5zdGFsbEhhbmRsZXIoImNsZWFyQ29uc29sZU1lc3NhZ2VzIik7CiBJbmplY3RlZFNj
cmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoImV2YWx1YXRlIik7CiBJbmplY3RlZFNjcmlwdEFj
Y2Vzcy5faW5zdGFsbEhhbmRsZXIoImV2YWx1YXRlSW5DYWxsRnJhbWUiKTsKIEluamVjdGVkU2Ny
aXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiZ2V0Q29tcGxldGlvbnMiKTsKLUluamVjdGVkU2Ny
aXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiZ2V0Q29tcHV0ZWRTdHlsZSIpOwotSW5qZWN0ZWRT
Y3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJnZXRJbmxpbmVTdHlsZSIpOwogSW5qZWN0ZWRT
Y3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJnZXROb2RlUHJvcGVydHlWYWx1ZSIpOwogSW5q
ZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJnZXRQcm9wZXJ0aWVzIik7CiBJbmpl
Y3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoImdldFByb3RvdHlwZXMiKTsKLUluamVj
dGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiZ2V0U3R5bGVzIik7CiBJbmplY3RlZFNj
cmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoIm9wZW5Jbkluc3BlY3RlZFdpbmRvdyIpOwotSW5q
ZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJwZXJmb3JtU2VhcmNoIik7CiBJbmpl
Y3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoInB1c2hOb2RlVG9Gcm9udGVuZCIpOwog
SW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJub2RlQnlQYXRoIik7Ci1Jbmpl
Y3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoInNlYXJjaENhbmNlbGVkIik7CiBJbmpl
Y3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoInNldE91dGVySFRNTCIpOwogSW5qZWN0
ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJzZXRQcm9wZXJ0eVZhbHVlIik7Ci1Jbmpl
Y3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoInNldFN0eWxlUHJvcGVydHkiKTsKLUlu
amVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigic2V0U3R5bGVUZXh0Iik7Ci1Jbmpl
Y3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoInRvZ2dsZVN0eWxlRW5hYmxlZCIpOwog
SW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJldmFsdWF0ZU9uU2VsZiIpOwog
CiAvLyBTb21lIG1ldGhvZHMgY2FuJ3QgcnVuIHN5bmNocm9ub3VzbHkgZXZlbiBvbiB0aGUgaW5q
ZWN0ZWQgc2NyaXB0IHNpZGUgKHN1Y2ggYXMgREIgdHJhbnNhY3Rpb25zKS4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qcyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qcwppbmRleCA0
NjcwYWYxLi43ZDhjNGQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
SW5zcGVjdG9yQmFja2VuZFN0dWIuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0luc3BlY3RvckJhY2tlbmRTdHViLmpzCkBAIC0yNTksNiArMjU5LDE0IEBAIFdlYkluc3BlY3Rv
ci5JbnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUgPSB7CiAKICAgICByZW1vdmVBbGxTY3Jp
cHRzVG9FdmFsdWF0ZU9uTG9hZDogZnVuY3Rpb24oKQogICAgIHsKKyAgICB9LAorCisgICAgcGVy
Zm9ybVNlYXJjaDogZnVuY3Rpb24oKQorICAgIHsKKyAgICB9LAorCisgICAgc2VhcmNoQ2FuY2Vs
ZWQ6IGZ1bmN0aW9uKCkKKyAgICB7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA0MWIzNjE4
Li41YzA1NzMyIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0wNi0xMCAgUGF2
ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBQb3J0IHBlcmZvcm1T
ZWFyY2ggZnJvbSBJbmplY3RlZFNjcmlwdCB0byBJbnNwZWN0b3JET01BZ2VudC4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA0MjIKKworICAgICAg
ICAqIHNyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qczoKKyAgICAgICAgKGRldnRvb2xz
Lkluc3BlY3RvckJhY2tlbmRJbXBsKToKKwogMjAxMC0wNi0wNyAgVG9ueSBDaGFuZyAgPHRvbnlA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qcyBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMKaW5kZXgg
ODZmODg1YS4uZjc2MjU1YiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNw
ZWN0b3JDb250cm9sbGVySW1wbC5qcworKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luc3Bl
Y3RvckNvbnRyb2xsZXJJbXBsLmpzCkBAIC02MSw2ICs2MSw3IEBAIGRldnRvb2xzLkluc3BlY3Rv
ckJhY2tlbmRJbXBsID0gZnVuY3Rpb24oKQogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRy
b2xsZXJEZWxlZ2F0ZV8oImdldFJlc291cmNlQ29udGVudCIpOwogICAgIHRoaXMuaW5zdGFsbElu
c3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oImhpZ2hsaWdodERPTU5vZGUiKTsKICAgICB0aGlz
Lmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJoaWRlRE9NTm9kZUhpZ2hsaWdo
dCIpOworICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInBlcmZv
cm1TZWFyY2giKTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVf
KCJyZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwIik7CiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9y
Q29udHJvbGxlckRlbGVnYXRlXygicmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQiKTsK
ICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJyZWxvYWRQYWdl
Iik7CkBAIC02OCw2ICs2OSw3IEBAIGRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsID0gZnVu
Y3Rpb24oKQogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInJl
bW92ZURPTVN0b3JhZ2VJdGVtIik7CiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxl
ckRlbGVnYXRlXygicmVtb3ZlTm9kZSIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRy
b2xsZXJEZWxlZ2F0ZV8oInNhdmVGcm9udGVuZFNldHRpbmdzIik7CisgICAgdGhpcy5pbnN0YWxs
SW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygic2VhcmNoQ2FuY2VsZWQiKTsKICAgICB0aGlz
Lmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJzZXRBdHRyaWJ1dGUiKTsKICAg
ICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJzZXRET01TdG9yYWdl
SXRlbSIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInNl
dEluamVjdGVkU2NyaXB0U291cmNlIik7Cg==
</data>
<flag name="review"
          id="44199"
          type_id="1"
          status="+"
          setter="yurys"
    />
    <flag name="commit-queue"
          id="44204"
          type_id="3"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>