<?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>104214</bug_id>
          
          <creation_ts>2012-12-05 22:11:33 -0800</creation_ts>
          <short_desc>[WTR] Move text output accumulation to the UIProcess</short_desc>
          <delta_ts>2012-12-15 01:14:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>103653</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>cdumez</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>784610</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-12-05 22:11:33 -0800</bug_when>
    <thetext>Instead of accumulating text output in the InjectedBundle and then shipping it to the UIProcess once a test is finished, WTR should immediately send any text output to the UIProcess. This will allow WTR to output text from the UIProcess as well, which is immediately useful to test authentication in WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786527</commentid>
    <comment_count>1</comment_count>
      <attachid>178360</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-12-08 09:24:15 -0800</bug_when>
    <thetext>Created attachment 178360
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786528</commentid>
    <comment_count>2</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-12-08 09:24:38 -0800</bug_when>
    <thetext>This patch is large, but generally mechanical.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786658</commentid>
    <comment_count>3</comment_count>
      <attachid>178360</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-12-08 17:43:06 -0800</bug_when>
    <thetext>Comment on attachment 178360
Patch

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

What effect did this have on the speed of test running? Slower? Faster? No noticeable effect?

Looks like the patch did not apply.

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:220
&gt; +        outputText(String::format(&quot;Boolean value for key \&quot;%s\&quot; not found in dictionary\n&quot;, key));

More efficient to use makeString instead of String::format.

    outputText(makeString(&quot;Boolean value for key \&quot;, key, \&quot; not found in dictionary\n&quot;));

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h:40
&gt; +#include &lt;wtf/text/WTFString.h&gt;

Normally wtf/Forward.h would be sufficient in a header like this one, since there’s no actual use of WTF::String, just a declaration of an argument of const String&amp; type.

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h:70
&gt; +    void dumpBackForwardListsForAllPages(WTF::StringBuilder&amp;);

Should not need the WTF:: prefix. StringBuilder.h should be taking care of that.

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h:84
&gt; +    void outputText(const WTF::String&amp;);

Should not need the WTF:: prefix. WTFString.h should be taking care of that.

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:64
&gt; +using WTF::StringBuilder;

Should not need this. StringBuilder.h should do this.

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:487
&gt; +    stringBuilder.appendLiteral(&quot;\n&quot;);

Can use character append here.

&gt; Tools/WebKitTestRunner/TestInvocation.cpp:109
&gt; +    , m_textOutput(WTF::adoptPtr(new WTF::StringBuilder()))

Should not need these WTF:: prefixes, because WTF headers should do the using thing. No need for () after StringBuilder either. Looks like you moved this from elsewhere and it had the same problem.

&gt; Tools/WebKitTestRunner/TestInvocation.h:72
&gt; +    OwnPtr&lt;WTF::StringBuilder&gt; m_textOutput;

Why the OwnPtr? Why not just StringBuilder?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786826</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-12-09 11:24:31 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 178360 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=178360&amp;action=review

Thanks for the review! I&apos;ll keep testing this a bit before landing.

&gt; What effect did this have on the speed of test running? Slower? Faster? No noticeable effect?

I ran time run-webkit-tests --gtk -2 --no-show-results --no-retry-failures editing fast css2.1 css3 css1 dom, which is over 13000 tests.

Before the patch I saw:
real    10m25.461s
user    8m23.507s
sys 2m12.272s

with the patch I got:
real	10m46.092s
user	8m46.305s
sys	2m16.777s

So it looks like this may have a small performance penalty, though I&apos;ll investigate if this scales proportionally with the number of tests or is sampling error.

&gt; Looks like the patch did not apply.
&gt; 
&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:220
&gt; &gt; +        outputText(String::format(&quot;Boolean value for key \&quot;%s\&quot; not found in dictionary\n&quot;, key));
&gt; 
&gt; More efficient to use makeString instead of String::format.

Okay.

&gt;     outputText(makeString(&quot;Boolean value for key \&quot;, key, \&quot; not found in dictionary\n&quot;));
&gt; 
&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h:40
&gt; &gt; +#include &lt;wtf/text/WTFString.h&gt;
&gt; 
&gt; Normally wtf/Forward.h would be sufficient in a header like this one, since there’s no actual use of WTF::String, just a declaration of an argument of const String&amp; type.
&gt; 
&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h:70
&gt; &gt; +    void dumpBackForwardListsForAllPages(WTF::StringBuilder&amp;);
&gt; 
&gt; Should not need the WTF:: prefix. StringBuilder.h should be taking care of that.
&gt; 
&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h:84
&gt; &gt; +    void outputText(const WTF::String&amp;);
&gt; 
&gt; Should not need the WTF:: prefix. WTFString.h should be taking care of that.
&gt; 
&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:64
&gt; &gt; +using WTF::StringBuilder;
&gt; 
&gt; Should not need this. StringBuilder.h should do this.
&gt; 
&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:487
&gt; &gt; +    stringBuilder.appendLiteral(&quot;\n&quot;);
&gt; 
&gt; Can use character append here.
&gt; 
&gt; &gt; Tools/WebKitTestRunner/TestInvocation.cpp:109
&gt; &gt; +    , m_textOutput(WTF::adoptPtr(new WTF::StringBuilder()))
&gt; 
&gt; Should not need these WTF:: prefixes, because WTF headers should do the using thing. No need for () after StringBuilder either. Looks like you moved this from elsewhere and it had the same problem.
&gt; 
&gt; &gt; Tools/WebKitTestRunner/TestInvocation.h:72
&gt; &gt; +    OwnPtr&lt;WTF::StringBuilder&gt; m_textOutput;
&gt; 
&gt; Why the OwnPtr? Why not just StringBuilder?

I copied this over from the InjectedBundle. In my new version of the patch I made it just StringBuilder and fixed all the other issues you mentioned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786834</commentid>
    <comment_count>5</comment_count>
      <attachid>178429</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-12-09 11:32:20 -0800</bug_when>
    <thetext>Created attachment 178429
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786837</commentid>
    <comment_count>6</comment_count>
      <attachid>178429</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-12-09 11:43:53 -0800</bug_when>
    <thetext>Comment on attachment 178429
Patch

Attachment 178429 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15212979</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786870</commentid>
    <comment_count>7</comment_count>
      <attachid>178439</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-12-09 14:32:27 -0800</bug_when>
    <thetext>Created attachment 178439
Fix bad merge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786872</commentid>
    <comment_count>8</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-12-09 14:34:12 -0800</bug_when>
    <thetext>I ran the editing tests multiple times with these results:

before:
1m43.296s
1m43.785s
1m47.829s
1m47.173s

after:
1m46.336s
1m48.317s
1m46.510s
1m45.438s

I&apos;ll land this tomorrow morning and watch the bots very closely. If I detect significant performance degradation on any of the WebKit2 platforms I&apos;ll roll it out and reevaluate. Thanks again!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787134</commentid>
    <comment_count>9</comment_count>
      <attachid>178439</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-10 02:45:32 -0800</bug_when>
    <thetext>Comment on attachment 178439
Fix bad merge

Clearing flags on attachment: 178439

Committed r137127: &lt;http://trac.webkit.org/changeset/137127&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787135</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-10 02:45:36 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787214</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-12-10 05:10:49 -0800</bug_when>
    <thetext>LayoutTests are no longer running on WK2 EFL, it looks like it may be related to this patch:

03:03:15.572 490 worker/3 http/tests/inspector/network/async-xhr-json-mime-type.html crashed, (stderr lines):
03:03:15.572 490   SHOULD NEVER BE REACHED
03:03:15.572 490   /home/buildslave-1/webkit-buildslave/efl-linux-64-debug-wk2/build/Tools/WebKitTestRunner/TestInvocation.cpp(559) : void WTR::TestInvocation::didReceiveMessageFromInjectedBundle(WKStringRef, WKTypeRef)
03:03:15.572 490   1   0x427ebc WTR::TestInvocation::didReceiveMessageFromInjectedBundle(OpaqueWKString const*, void const*)
03:03:15.572 490   2   0x41f43d WTR::TestController::didReceiveMessageFromInjectedBundle(OpaqueWKString const*, void const*)
03:03:15.572 490   3   0x41f143 WTR::TestController::didReceiveMessageFromInjectedBundle(OpaqueWKContext const*, OpaqueWKString const*, void const*, void const*)
03:03:15.572 490   4   0x7f91af49b675 WebKit::WebContextInjectedBundleClient::didReceiveMessageFromInjectedBundle(WebKit::WebContext*, WTF::String const&amp;, WebKit::APIObject*)
03:03:15.572 490   5   0x7f91af48895a WebKit::WebContext::didReceiveMessageFromInjectedBundle(WTF::String const&amp;, WebKit::APIObject*)
03:03:15.572 490   6   0x7f91af4894b2 WebKit::WebContext::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
03:03:15.572 490   7   0x7f91af3f6c7a CoreIPC::MessageReceiverMap::dispatchMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
03:03:15.572 490   8   0x7f91af4892f5 WebKit::WebContext::dispatchMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
03:03:15.572 490   9   0x7f91af50740a WebKit::WebProcessProxy::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
03:03:15.572 490   10  0x7f91af3eb5d8 CoreIPC::Connection::dispatchMessage(CoreIPC::MessageID, CoreIPC::MessageDecoder&amp;)
03:03:15.572 490   11  0x7f91af3eb744 CoreIPC::Connection::dispatchMessage(CoreIPC::Connection::Message&lt;CoreIPC::MessageDecoder&gt;&amp;)
03:03:15.572 490   12  0x7f91af3eb98f CoreIPC::Connection::dispatchOneMessage()
03:03:15.572 490   13  0x7f91af3f6226 WTF::FunctionWrapper&lt;void (CoreIPC::Connection::*)()&gt;::operator()(CoreIPC::Connection*)
03:03:15.572 490   14  0x7f91af3f602c WTF::BoundFunctionImpl&lt;WTF::FunctionWrapper&lt;void (CoreIPC::Connection::*)()&gt;, void (CoreIPC::Connection*)&gt;::operator()()
03:03:15.572 490   15  0x7f91b6920a62 WTF::Function&lt;void ()&gt;::operator()() const
03:03:15.572 490   16  0x7f91b2c0180b WebCore::RunLoop::performWork()
03:03:15.572 490   17  0x7f91b367b51f WebCore::RunLoop::wakeUpEvent(void*, void*, unsigned int)
03:03:15.572 490   18  0x7f91ae7bb621
03:03:15.572 490   19  0x7f91ae7ba571
03:03:15.572 490   20  0x7f91ae7baab7 ecore_main_loop_begin
03:03:15.572 490   21  0x4343d5 WTR::TestController::platformRunUntil(bool&amp;, double)
03:03:15.572 490   22  0x41f112 WTR::TestController::runUntil(bool&amp;, WTR::TestController::TimeoutDuration)
03:03:15.572 490   23  0x4261dd WTR::TestInvocation::invoke()
03:03:15.572 490   24  0x41ee4a WTR::TestController::runTest(char const*)
03:03:15.572 490   25  0x41ef83 WTR::TestController::runTestingServerLoop()
03:03:15.572 490   26  0x41f01d WTR::TestController::run()
03:03:15.572 490   27  0x41c953 WTR::TestController::TestController(int, char const**)
03:03:15.572 490   28  0x43456e main
03:03:15.572 490   29  0x7f91ad31b76d __libc_start_main
03:03:15.572 490   30  0x41b279
03:03:15.572 490   LEAK: 31 XMLHttpRequest
03:03:15.572 490   LEAK: 162 CachedResource
03:03:15.572 490   LEAK: 4 Range
03:03:15.572 490   LEAK: 1482 WebCoreNode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787268</commentid>
    <comment_count>12</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-12-10 06:38:33 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; LayoutTests are no longer running on WK2 EFL, it looks like it may be related to this patch:

Thanks for letting me know. I filed a bug here:  https://bugs.webkit.org/show_bug.cgi?id=104549</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178360</attachid>
            <date>2012-12-08 09:24:15 -0800</date>
            <delta_ts>2012-12-09 11:32:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104214-20121208182137.patch</filename>
            <type>text/plain</type>
            <size>85444</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2NTg0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMjczYjFhOTNkMTllOTdlNjUzOWM2YzY0ZDRiMzY4NGU3
OTQ5YmVkNi4uMTk4Yjc2NjQ4OGE2NDQzZDgyYjllYzIwN2FlNGJmZGYwMDYyNzgzNCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM1
IEBACiAyMDEyLTEyLTA2ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4K
IAorICAgICAgICBbV1RSXSBNb3ZlIHRleHQgb3V0cHV0IGFjY3VtdWxhdGlvbiB0byB0aGUgVUlQ
cm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDQyMTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bnN0ZWFkIG9mIGFjY3VtdWxhdGluZyB0ZXh0IG91dHB1dCBpbiB0aGUgSW5qZWN0ZWRCdW5kbGUg
YW5kIHRoZW4gc2VuZGluZyBpdCB0byB0aGUgVUlQcm9jZXNzIAorICAgICAgICBvbmNlIGEgdGVz
dCBpcyBmaW5pc2hlZCwgaW1tZWRpYXRlbHkgc2VuZCBhbnkgdGV4dCBvdXRwdXQgdG8gdGhlIFVJ
UHJvY2Vzcy4gVGhpcyB3aWxsIGFsbG93CisgICAgICAgIFdlYktpdFRlc3RSdW5uZXIgdG8gb3V0
cHV0IHRleHQgZnJvbSB0aGUgVUlQcm9jZXNzIGFzIHdlbGwuCisKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDogUmVtb3ZlIHRoZSBo
YW5kbGluZyBvZiB0aGUgdGV4dCBvdXRwdXQKKyAgICAgICAgU3RyaW5nQnVpbGRlci4gQWRkIGEg
bWV0aG9kIHRvIHNlbmQgb3V0cHV0IHRvIHRoZSBVSVByb2Nlc3MuCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oOgorICAgICAgICAoSW5q
ZWN0ZWRCdW5kbGUpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGVQYWdlLmNwcDogQ2hhbmdlIGNvZGUgdGhhdCBhcHBlbmRzIHRvIHRoZSBT
dHJpbmdCdWlsZGVyCisgICAgICAgIHRvIHVzZSB0aGUgbmV3IG91dHB1dFRleHQgbWV0aG9kLgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQ
YWdlLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVu
bmVyLmNwcDogRGl0dG8uCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9hdGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJBdGsuY3BwOiBEaXR0by4KKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdElu
dm9jYXRpb246OlRlc3RJbnZvY2F0aW9uKTogSW50aWFsaXplIHRoZSBTdHJpbmdCdWlsZGVyLgor
ICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6aW52b2tlKTogQ2xlYXIgdGhlIFN0cmluZ0J1
aWxkZXIgd2hlbiBhIG5ldyB0ZXN0cyBzdGFydHMuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0
aW9uOjpkdW1wUmVzdWx0cyk6IG1fdGV4dE91dHB1dCBpcyBhIFN0cmluZ0J1aWxkZXIgbm93IHNv
IHRoZQorICAgICAgICBtZXRob2Qgb2YgcHJpbnRpbmcgdGhlIHRleHQgaXMgc2xpZ2h0bHkgZGlm
ZmVyZW50LgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VG
cm9tSW5qZWN0ZWRCdW5kbGUpOiBIYW5kbGUgdGhlIG5ldyBUZXh0T3V0cHV0CisgICAgICAgIG1l
c3NhZ2UgYnkgYXBwZW5kaW5nIHRoZSByZXN1bHRzIHRvIHRoZSBTdHJpbmdCdWlsZGVyLgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uaDoKKyAgICAgICAgKFRlc3RJ
bnZvY2F0aW9uKTogU3dpdGNoIHRoZSB0eXBlIG9mIG1fdGV4dE91dHB1dC4KKworMjAxMi0xMi0w
NiAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dU
S10gQWRkIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnQgdG8gRFJUIGFuZCBmaXggZXhwb3NlZCBpc3N1
ZXMgaW4gdGhlIGxpYnNvdXAgYmFja2VuZAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA0Mjg1CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKaW5kZXggZmE3OTM5ZDNl
ZDdmMThhYTljZDIxOTllYjk2NzY2ODA5MDVkYzM1ZS4uYzRhMmQyYjM5OWViOTRkOWNmODViZDA5
ZjY5NzQ1MTg0OTY2NWE2ZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKQEAgLTg2LDcgKzg2LDYgQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVSZWYgYnVu
ZGxlLCBXS0J1bmRsZVBhZ2VSZWYKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmluaXRpYWxpemUoV0tC
dW5kbGVSZWYgYnVuZGxlLCBXS1R5cGVSZWYgaW5pdGlhbGl6YXRpb25Vc2VyRGF0YSkKIHsKICAg
ICBtX2J1bmRsZSA9IGJ1bmRsZTsKLSAgICBtX3N0cmluZ0J1aWxkZXIgPSBXVEY6OmFkb3B0UHRy
KG5ldyBXVEY6OlN0cmluZ0J1aWxkZXIoKSk7CiAKICAgICBXS0J1bmRsZUNsaWVudCBjbGllbnQg
PSB7CiAgICAgICAgIGtXS0J1bmRsZUNsaWVudEN1cnJlbnRWZXJzaW9uLApAQCAtMjE4LDkgKzIx
Nyw3IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGU6OmJvb2xlYW5Gb3JLZXkoV0tEaWN0aW9uYXJ5UmVm
IGRpY3Rpb25hcnksIGNvbnN0IGNoYXIqIGtleSkKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gd2tLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoa2V5KSk7CiAg
ICAgV0tUeXBlUmVmIHZhbHVlID0gV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShkaWN0aW9uYXJ5
LCB3a0tleS5nZXQoKSk7CiAgICAgaWYgKFdLR2V0VHlwZUlEKHZhbHVlKSAhPSBXS0Jvb2xlYW5H
ZXRUeXBlSUQoKSkgewotICAgICAgICBzdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIkJv
b2xlYW4gdmFsdWUgZm9yIGtleSBcIiIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZChrZXkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIlwiIG5vdCBm
b3VuZCBpbiBkaWN0aW9uYXJ5XG4iKTsKKyAgICAgICAgb3V0cHV0VGV4dChTdHJpbmc6OmZvcm1h
dCgiQm9vbGVhbiB2YWx1ZSBmb3Iga2V5IFwiJXNcIiBub3QgZm91bmQgaW4gZGljdGlvbmFyeVxu
Iiwga2V5KSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIFdLQm9v
bGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4odmFsdWUpKTsKQEAgLTIzMiw3
ICsyMjksNiBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpiZWdpblRlc3RpbmcoV0tEaWN0aW9uYXJ5
UmVmIHNldHRpbmdzKQogCiAgICAgbV9waXhlbFJlc3VsdC5jbGVhcigpOwogICAgIG1fcmVwYWlu
dFJlY3RzLmNsZWFyKCk7Ci0gICAgbV9zdHJpbmdCdWlsZGVyLT5jbGVhcigpOwogCiAgICAgbV90
ZXN0UnVubmVyID0gVGVzdFJ1bm5lcjo6Y3JlYXRlKCk7CiAgICAgbV9nY0NvbnRyb2xsZXIgPSBH
Q0NvbnRyb2xsZXI6OmNyZWF0ZSgpOwpAQCAtMjkyLDEwICsyODgsNiBAQCB2b2lkIEluamVjdGVk
QnVuZGxlOjpkb25lKCkKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZG9uZU1lc3NhZ2VO
YW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJEb25lIikpOwogICAg
IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGRvbmVNZXNzYWdlQm9keShBZG9w
dFdLLCBXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwogCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHRleHRPdXRwdXRLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlRleHRPdXRwdXQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRleHRP
dXRwdXQoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobV9zdHJpbmdCdWls
ZGVyLT50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBXS0RpY3Rpb25hcnlBZGRJdGVt
KGRvbmVNZXNzYWdlQm9keS5nZXQoKSwgdGV4dE91dHB1dEtleS5nZXQoKSwgdGV4dE91dHB1dC5n
ZXQoKSk7Ci0gICAgCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBpeGVsUmVzdWx0S2V5
ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGl4ZWxSZXN1bHQiKSk7
CiAgICAgV0tEaWN0aW9uYXJ5QWRkSXRlbShkb25lTWVzc2FnZUJvZHkuZ2V0KCksIHBpeGVsUmVz
dWx0S2V5LmdldCgpLCBtX3BpeGVsUmVzdWx0LmdldCgpKTsKIApAQCAtMzIyLDEzICszMTQsMjQg
QEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6Y2xvc2VPdGhlclBhZ2VzKCkKICAgICAgICAgV0tCdW5k
bGVQYWdlQ2xvc2UocGFnZXNUb0Nsb3NlW2ldKTsKIH0KIAotdm9pZCBJbmplY3RlZEJ1bmRsZTo6
ZHVtcEJhY2tGb3J3YXJkTGlzdHNGb3JBbGxQYWdlcygpCit2b2lkIEluamVjdGVkQnVuZGxlOjpk
dW1wQmFja0ZvcndhcmRMaXN0c0ZvckFsbFBhZ2VzKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxk
ZXIpCiB7CiAgICAgc2l6ZV90IHNpemUgPSBtX3BhZ2VzLnNpemUoKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgbV9wYWdlc1tpXS0+ZHVtcEJhY2tGb3J3
YXJkTGlzdCgpOworICAgICAgICBtX3BhZ2VzW2ldLT5kdW1wQmFja0ZvcndhcmRMaXN0KHN0cmlu
Z0J1aWxkZXIpOwogfQotICAgIAorCit2b2lkIEluamVjdGVkQnVuZGxlOjpvdXRwdXRUZXh0KGNv
bnN0IFN0cmluZyYgb3V0cHV0KQoreworICAgIGlmIChtX3N0YXRlICE9IFRlc3RpbmcpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAob3V0cHV0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGV4dE91dHB1dCIpKTsKKyAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcob3V0cHV0LnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKG1f
YnVuZGxlLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworfQorCiB2b2lk
IEluamVjdGVkQnVuZGxlOjpwb3N0TmV3QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUoYm9vbCB2YWx1
ZSkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywg
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkJlZm9yZVVubG9hZFJldHVyblZhbHVlIikp
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZS5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZS5oCmluZGV4IDQxNDY5ZWM3OTZlOTI1YTg1MGM2NDgxNmZjNTYxMmE3ZDkwOTE4
NzguLjIyMjdhYTYxYzAyN2ZhY2QwZDBjZTJhZjRiMDJhNmZkMjg3YmJiNTUgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxl
LmgKQEAgLTMzLDExICszMywxMSBAQAogI2luY2x1ZGUgIlRleHRJbnB1dENvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5Q
dHIuaD4KKyNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0jaW5jbHVkZSA8
c3N0cmVhbT4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdU
RiB7CiBjbGFzcyBTdHJpbmdCdWlsZGVyOwpAQCAtNjcsMTAgKzY3LDkgQEAgcHVibGljOgogICAg
IHNpemVfdCBwYWdlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VzLnNpemUoKTsgfQogICAg
IHZvaWQgY2xvc2VPdGhlclBhZ2VzKCk7CiAKLSAgICB2b2lkIGR1bXBCYWNrRm9yd2FyZExpc3Rz
Rm9yQWxsUGFnZXMoKTsKKyAgICB2b2lkIGR1bXBCYWNrRm9yd2FyZExpc3RzRm9yQWxsUGFnZXMo
V1RGOjpTdHJpbmdCdWlsZGVyJik7CiAKICAgICB2b2lkIGRvbmUoKTsKLSAgICBXVEY6OlN0cmlu
Z0J1aWxkZXIqIHN0cmluZ0J1aWxkZXIoKSB7IHJldHVybiBtX3N0cmluZ0J1aWxkZXIuZ2V0KCk7
IH0KICAgICB2b2lkIHNldFBpeGVsUmVzdWx0KFdLSW1hZ2VSZWYgaW1hZ2UpIHsgbV9waXhlbFJl
c3VsdCA9IGltYWdlOyB9CiAgICAgdm9pZCBzZXRSZXBhaW50UmVjdHMoV0tBcnJheVJlZiByZWN0
cykgeyBtX3JlcGFpbnRSZWN0cyA9IHJlY3RzOyB9CiAKQEAgLTgyLDYgKzgxLDcgQEAgcHVibGlj
OgogICAgIGJvb2wgc2hvdWxkRHVtcFBpeGVscygpIGNvbnN0IHsgcmV0dXJuIG1fZHVtcFBpeGVs
czsgfQogICAgIGJvb2wgdXNlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoKSBjb25zdCB7IHJldHVy
biBtX3VzZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyOyB9CiAgICAgCisgICAgdm9pZCBvdXRwdXRU
ZXh0KGNvbnN0IFdURjo6U3RyaW5nJik7CiAgICAgdm9pZCBwb3N0TmV3QmVmb3JlVW5sb2FkUmV0
dXJuVmFsdWUoYm9vbCk7CiAgICAgdm9pZCBwb3N0QWRkQ2hyb21lSW5wdXRGaWVsZCgpOwogICAg
IHZvaWQgcG9zdFJlbW92ZUNocm9tZUlucHV0RmllbGQoKTsKQEAgLTE0NCw4ICsxNDQsNiBAQCBw
cml2YXRlOgogCiAgICAgV0tCdW5kbGVGcmFtZVJlZiBtX3RvcExvYWRpbmdGcmFtZTsKIAotICAg
IE93blB0cjxXVEY6OlN0cmluZ0J1aWxkZXI+IG1fc3RyaW5nQnVpbGRlcjsKLSAgICAKICAgICBl
bnVtIFN0YXRlIHsKICAgICAgICAgSWRsZSwKICAgICAgICAgVGVzdGluZywKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdl
LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGVQYWdlLmNwcAppbmRleCAwMDgxOTc1ZTBhMWZjM2E1NDA2ZjczZGZhMGIyMWNjOTA5YzY3YjVk
Li5mODIxYzcxNDQwN2I0ZWJlYmIzYjBiZDlhYzkyYjZiZjVmNTkwZWE0IDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5j
cHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVBhZ2UuY3BwCkBAIC02MSw2ICs2MSw3IEBACiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKK3VzaW5nIFdURjo6U3RyaW5nQnVpbGRlcjsKIAogbmFtZXNwYWNlIFdUUiB7CiAKQEAg
LTEwNCw3ICsxMDUsNyBAQCBzdGF0aWMgV1RGOjpTdHJpbmcgZHVtcFBhdGgoSlNHbG9iYWxDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG5vZGVWYWx1ZSkKIAogICAgIEpTVmFsdWVSZWYg
cGFyZW50Tm9kZSA9IHByb3BlcnR5VmFsdWUoY29udGV4dCwgbm9kZVZhbHVlLCAicGFyZW50Tm9k
ZSIpOwogCi0gICAgV1RGOjpTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgU3RyaW5n
QnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3Ry
aW5nKG5vZGVOYW1lKSk7CiAKICAgICBpZiAocGFyZW50Tm9kZSAmJiBKU1ZhbHVlSXNPYmplY3Qo
Y29udGV4dCwgcGFyZW50Tm9kZSkpIHsKQEAgLTE1Myw3ICsxNTQsNyBAQCBzdGF0aWMgV1RGOjpT
dHJpbmcgcmFuZ2VUb1N0cihXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRXb3Js
ZFJlZiB3b3JsZAogICAgIGludCBzdGFydE9mZnNldCA9IHByb3BlcnR5VmFsdWVJbnQoY29udGV4
dCwgcmFuZ2VPYmplY3QsICJzdGFydE9mZnNldCIpOwogICAgIGludCBlbmRPZmZzZXQgPSBwcm9w
ZXJ0eVZhbHVlSW50KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAiZW5kT2Zmc2V0Iik7CiAKLSAgICBX
VEY6OlN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmlu
Z0J1aWxkZXI7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJyYW5nZSBmcm9tICIp
OwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKHN0YXJ0T2Zmc2V0KTsKICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBvZiAiKTsKQEAgLTE4OSwxNCArMTkwLDE0IEBAIHN0
YXRpYyBXVEY6OlN0cmluZyBzdHlsZURlY1RvU3RyKFdLQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlv
blJlZiBzdHlsZSkKICAgICAvLyBEdW1wUmVuZGVyVHJlZSBjYWxscyAtW0RPTUNTU1N0eWxlRGVj
bGFyYXRpb24gZGVzY3JpcHRpb25dLCB3aGljaCBqdXN0IGR1bXBzIGNsYXNzIG5hbWUgYW5kIG9i
amVjdCBhZGRyZXNzLgogICAgIC8vIE5vIGV4aXN0aW5nIHRlc3RzIGFjdHVhbGx5IGhpdCB0aGlz
IGNvZGUgcGF0aCBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIGJlY2F1c2UgV2ViQ29yZSBk
b2Vzbid0IGNhbGwKICAgICAvLyB0aGUgZWRpdGluZyBjbGllbnQgaWYgdGhlIHN0eWxpbmcgb3Bl
cmF0aW9uIHNvdXJjZSBpcyBDb21tYW5kRnJvbURPTSBvciBDb21tYW5kRnJvbURPTVdpdGhVc2Vy
SW50ZXJmYWNlLgotICAgIFdURjo6U3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIjxET01DU1NTdHlsZURlY2xhcmF0aW9uIEFERFJFU1M+Iik7CiAgICAgcmV0dXJuIHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAogc3RhdGljIFdURjo6U3RyaW5nIHNlY3VyaXR5T3Jp
Z2luVG9TdHIoV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4pCiB7Ci0gICAgV1RGOjpTdHJpbmdC
dWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwog
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCd7Jyk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
dG9XVEZTdHJpbmcoYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weVByb3RvY29sKG9yaWdpbikp
KSk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwpAQCAtMjExLDcgKzIx
Miw3IEBAIHN0YXRpYyBXVEY6OlN0cmluZyBzZWN1cml0eU9yaWdpblRvU3RyKFdLU2VjdXJpdHlP
cmlnaW5SZWYgb3JpZ2luKQogc3RhdGljIFdURjo6U3RyaW5nIGZyYW1lVG9TdHIoV0tCdW5kbGVG
cmFtZVJlZiBmcmFtZSkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZShBZG9w
dFdLLCBXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKLSAgICBXVEY6OlN0cmluZ0J1aWxk
ZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAg
aWYgKFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkpIHsKICAgICAgICAgaWYgKCFXS1N0
cmluZ0lzRW1wdHkobmFtZS5nZXQoKSkpIHsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgibWFpbiBmcmFtZSBcIiIpOwpAQCAtMjQ5LDcgKzI1MCw3IEBAIHN0YXRpYyBp
bmxpbmUgV1RGOjpTdHJpbmcgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJlZiBmaWxl
VXJsKQogICAgICAgICByZXR1cm4gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmco
ZmlsZVVybCkpKTsKIAogICAgIFN0cmluZyBwYXRoU3RyaW5nID0gdG9XVEZTdHJpbmcoYWRvcHRX
SyhXS1VSTENvcHlQYXRoKGZpbGVVcmwpKSk7Ci0gICAgV1RGOjpTdHJpbmdCdWlsZGVyIHN0cmlu
Z0J1aWxkZXI7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogCiAgICAgLy8gUmVt
b3ZlIHRoZSBsZWFkaW5nIHBhdGggZnJvbSBmaWxlIHVybHMuCiAgICAgY29uc3Qgc2l6ZV90IGlu
ZGV4QmFzZU5hbWUgPSBwYXRoU3RyaW5nLnJldmVyc2VGaW5kKGRpdmlkZXIpOwpAQCAtMjg0LDEy
ICsyODUsMTIgQEAgc3RhdGljIGlubGluZSBXVEY6OlN0cmluZyB1cmxTdWl0YWJsZUZvclRlc3RS
ZXN1bHQoV0tVUkxSZWYgZmlsZVVybCkKIAogc3RhdGljIEhhc2hNYXA8dWludDY0X3QsIFN0cmlu
Zz4gYXNzaWduZWRVcmxzQ2FjaGU7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wUmVzb3VyY2VV
UkwodWludDY0X3QgaWRlbnRpZmllcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBkdW1wUmVzb3VyY2VV
UkwodWludDY0X3QgaWRlbnRpZmllciwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsK
ICAgICBpZiAoYXNzaWduZWRVcmxzQ2FjaGUuY29udGFpbnMoaWRlbnRpZmllcikpCi0gICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChhc3NpZ25l
ZFVybHNDYWNoZS5nZXQoaWRlbnRpZmllcikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChhc3NpZ25lZFVybHNDYWNoZS5nZXQoaWRlbnRpZmllcikpOwogICAgIGVsc2UKLSAgICAgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgi
PHVua25vd24+Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPHVua25v
d24+Iik7CiB9CiAKIEluamVjdGVkQnVuZGxlUGFnZTo6SW5qZWN0ZWRCdW5kbGVQYWdlKFdLQnVu
ZGxlUGFnZVJlZiBwYWdlKQpAQCAtNDUyLDY2ICs0NTMsNzYgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OnJlc2V0QWZ0ZXJUZXN0KCkKIC8vIExvYWRlciBDbGllbnQgQ2FsbGJhY2tzCiAKIC8v
IFN0cmluZyBvdXRwdXQgbXVzdCBiZSBpZGVudGljYWwgdG8gLVtXZWJGcmFtZSBfZHJ0X2Rlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0XS4KLXN0YXRpYyB2b2lkIGR1bXBGcmFtZURlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCitzdGF0
aWMgdm9pZCBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS0J1bmRs
ZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewogICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lKEFkb3B0V0ssIFdLQnVuZGxlRnJhbWVDb3B5TmFt
ZShmcmFtZSkpOwogICAgIGlmIChXS0J1bmRsZUZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKSB7CiAg
ICAgICAgIGlmIChXS1N0cmluZ0lzRW1wdHkobmFtZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIm1h
aW4gZnJhbWUiKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgibWFp
biBmcmFtZSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgibWFp
biBmcmFtZSBcIiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVp
bGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcobmFtZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJyInKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJtYWluIGZyYW1lIFwiIik7CisgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5hbWUpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoJyInKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lz
RW1wdHkobmFtZS5nZXQoKSkpIHsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0
cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiZnJhbWUgKGFub255bW91cykiKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmcmFtZSAoYW5vbnltb3VzKSIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmlu
Z0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiZnJhbWUgXCIiKTsKLSAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcobmFtZSkpOwot
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnIicp
OworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiZnJhbWUgXCIiKTsKKyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhuYW1lKSk7CisgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoJyInKTsKK30KKworc3RhdGljIHZvaWQgZHVtcExvYWRFdmVudChXS0J1bmRsZUZyYW1l
UmVmIGZyYW1lLCBjb25zdCBjaGFyKiBldmVudE5hbWUpCit7CisgICAgU3RyaW5nQnVpbGRlciBz
dHJpbmdCdWlsZGVyOworICAgIGR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVz
dWx0KGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIiAtICIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGV2ZW50TmFtZSk7CisgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcbiIpOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgdm9pZCBkdW1wUmVxdWVzdERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdL
VVJMUmVxdWVzdFJlZiByZXF1ZXN0KQorc3RhdGljIGlubGluZSB2b2lkIGR1bXBSZXF1ZXN0RGVz
Y3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIFN0
cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+
IHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7CiAgICAgV0tSZXRh
aW5QdHI8V0tVUkxSZWY+IGZpcnN0UGFydHkgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlGaXJz
dFBhcnR5Rm9yQ29va2llcyhyZXF1ZXN0KSk7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGh0dHBNZXRob2QgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlIVFRQTWV0aG9kKHJlcXVlc3Qp
KTsKIAotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZExpdGVyYWwoIjxOU1VSTFJlcXVlc3QgVVJMICIpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVy
bC5nZXQoKSkpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCkt
PmFwcGVuZExpdGVyYWwoIiwgbWFpbiBkb2N1bWVudCBVUkwgIik7Ci0gICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHVybFN1aXRhYmxlRm9yVGVzdFJl
c3VsdChmaXJzdFBhcnR5LmdldCgpKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0
cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiLCBodHRwIG1ldGhvZCAiKTsKKyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjxOU1VSTFJlcXVlc3QgVVJMICIpOworICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSk7Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIG1haW4gZG9jdW1lbnQgVVJMICIpOwor
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHVybFN1aXRhYmxlRm9yVGVzdFJlc3VsdChmaXJzdFBh
cnR5LmdldCgpKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIGh0dHAgbWV0
aG9kICIpOwogCiAgICAgaWYgKFdLU3RyaW5nSXNFbXB0eShodHRwTWV0aG9kLmdldCgpKSkKLSAg
ICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0
ZXJhbCgiKG5vbmUpIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKG5v
bmUpIik7CiAgICAgZWxzZQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcoaHR0cE1ldGhvZCkpOworICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhodHRwTWV0aG9kKSk7CiAKLSAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJz4nKTsKKyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnPicpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHVtcFJlc3Bv
bnNlRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tVUkxSZXNwb25zZVJlZiByZXNw
b25zZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkdW1wUmVzcG9uc2VEZXNjcmlwdGlvblN1aXRhYmxl
Rm9yVGVzdFJlc3VsdChXS1VSTFJlc3BvbnNlUmVmIHJlc3BvbnNlLCBTdHJpbmdCdWlsZGVyJiBz
dHJpbmdCdWlsZGVyKQogewogICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdL
KFdLVVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7CiAgICAgaWYgKCF1cmwpIHsKLSAgICAg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJh
bCgiKG51bGwpIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKG51bGwp
Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiPE5TVVJMUmVzcG9uc2UgIik7Ci0gICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHBhdGhTdWl0
YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiLCBodHRwIHN0YXR1cyBjb2RlICIp
OwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZE51
bWJlcihXS1VSTFJlc3BvbnNlSFRUUFN0YXR1c0NvZGUocmVzcG9uc2UpKTsKLSAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJz4nKTsKKyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjxOU1VSTFJlc3BvbnNlICIpOworICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSk7CisgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIGh0dHAgc3RhdHVzIGNvZGUgIik7CisgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIoV0tVUkxSZXNwb25zZUhUVFBTdGF0dXNDb2RlKHJl
c3BvbnNlKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJz4nKTsKIH0KIAotc3RhdGljIGlu
bGluZSB2b2lkIGR1bXBFcnJvckRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLRXJy
b3JSZWYgZXJyb3IpCitzdGF0aWMgaW5saW5lIHZvaWQgZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0
YWJsZUZvclRlc3RSZXN1bHQoV0tFcnJvclJlZiBlcnJvciwgU3RyaW5nQnVpbGRlciYgc3RyaW5n
QnVpbGRlcikKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JEb21haW4gPSBh
ZG9wdFdLKFdLRXJyb3JDb3B5RG9tYWluKGVycm9yKSk7CiAgICAgaW50IGVycm9yQ29kZSA9IFdL
RXJyb3JHZXRFcnJvckNvZGUoZXJyb3IpOwpAQCAtNTI1LDIwICs1MzYsMjAgQEAgc3RhdGljIGlu
bGluZSB2b2lkIGR1bXBFcnJvckRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLRXJy
b3JSZWYgZXJyb3IpCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoZXJyb3JE
b21haW4uZ2V0KCksICJXZWJLaXRQb2xpY3lFcnJvciIpKQogICAgICAgICBlcnJvckRvbWFpbiA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdEVycm9yRG9tYWlu
IikpOwogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kTGl0ZXJhbCgiPE5TRXJyb3IgZG9tYWluICIpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyhlcnJvckRvbWFpbikpOwot
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVy
YWwoIiwgY29kZSAiKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRl
cigpLT5hcHBlbmROdW1iZXIoZXJyb3JDb2RlKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIjxOU0Vycm9yIGRvbWFpbiAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dU
RlN0cmluZyhlcnJvckRvbWFpbikpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
LCBjb2RlICIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKGVycm9yQ29kZSk7CiAK
ICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS0Vycm9yQ29weUZhaWxp
bmdVUkwoZXJyb3IpKTsKICAgICBpZiAodXJsLmdldCgpKSB7CiAgICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmwuZ2V0
KCkpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+
YXBwZW5kTGl0ZXJhbCgiLCBmYWlsaW5nIFVSTCBcIiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcodXJsU3RyaW5n
KSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZCgnIicpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgZmFpbGlu
ZyBVUkwgXCIiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcodXJs
U3RyaW5nKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCciJyk7CiAgICAgfQogCi0g
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCc+Jyk7
CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJz4nKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBh
Z2UsIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLVHlwZVJlZiosIGNvbnN0IHZvaWQgKmNsaWVu
dEluZm8pCkBAIC01NzcsMjggKzU4OCwyOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlk
UmVjZWl2ZUludGVudEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZQogICAg
IHN0YXRpY19jYXN0PEluamVjdGVkQnVuZGxlUGFnZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVu
dEluZm8pKS0+bV9jdXJyZW50SW50ZW50UmVxdWVzdCA9IGludGVudFJlcXVlc3Q7CiAgICAgV0tS
ZXRhaW5QdHI8V0tCdW5kbGVJbnRlbnRSZWY+IGludGVudChBZG9wdFdLLCBXS0J1bmRsZUludGVu
dFJlcXVlc3RDb3B5SW50ZW50KGludGVudFJlcXVlc3QpKTsKIAotICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIlJlY2VpdmVkIFdlYiBJ
bnRlbnQ6IGFjdGlvbj0iKTsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJSZWNlaXZlZCBXZWIgSW50ZW50OiBhY3Rpb249
Iik7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrQWN0aW9uKEFkb3B0V0ssIFdLQnVu
ZGxlSW50ZW50Q29weUFjdGlvbihpbnRlbnQuZ2V0KCkpKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcod2tBY3Rpb24uZ2V0
KCkpKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBl
bmRMaXRlcmFsKCIgdHlwZT0iKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmlu
Zyh3a0FjdGlvbi5nZXQoKSkpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHR5
cGU9Iik7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrVHlwZShBZG9wdFdLLCBXS0J1
bmRsZUludGVudENvcHlUeXBlKGludGVudC5nZXQoKSkpOwotICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyh3a1R5cGUuZ2V0KCkp
KTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQo
J1xuJyk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcod2tUeXBlLmdldCgp
KSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAKICAgICBjb25zdCBzaXplX3Qg
bnVtTWVzc2FnZVBvcnRzID0gV0tCdW5kbGVJbnRlbnRNZXNzYWdlUG9ydENvdW50KGludGVudC5n
ZXQoKSk7CiAgICAgaWYgKG51bU1lc3NhZ2VQb3J0cykgewotICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJIYXZlICIpOwotICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmROdW1i
ZXIobnVtTWVzc2FnZVBvcnRzKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0
cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiIHBvcnRzXG4iKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJIYXZlICIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZE51bWJlcihudW1NZXNzYWdlUG9ydHMpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIiBwb3J0c1xuIik7CiAgICAgfQogCiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+
IHdrU2VydmljZVVybChBZG9wdFdLLCBXS0J1bmRsZUludGVudENvcHlTZXJ2aWNlKGludGVudC5n
ZXQoKSkpOwogICAgIGlmICh3a1NlcnZpY2VVcmwpIHsKICAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHdrU2VydmljZShBZG9wdFdLLCBXS1VSTENvcHlTdHJpbmcod2tTZXJ2aWNlVXJs
LmdldCgpKSk7CiAgICAgICAgIGlmICh3a1NlcnZpY2UgJiYgIVdLU3RyaW5nSXNFbXB0eSh3a1Nl
cnZpY2UuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJFeHBsaWNpdCBpbnRlbnQgc2VydmljZTogIik7
Ci0gICAgICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmQodG9XVEZTdHJpbmcod2tTZXJ2aWNlLmdldCgpKSk7Ci0gICAgICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJ1xuJyk7CisgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkV4cGxpY2l0IGludGVudCBzZXJ2aWNl
OiAiKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHdrU2Vy
dmljZS5nZXQoKSkpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTYwOCw0MyArNjIwLDQ3IEBAIHZvaWQgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpkaWRSZWNlaXZlSW50ZW50Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdL
QnVuZGxlCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1FeHRyYUtleXM7ICsraSkgewog
ICAgICAgICBXS1N0cmluZ1JlZiB3a0tleSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Fy
cmF5R2V0SXRlbUF0SW5kZXgod2tFeHRyYUtleXMuZ2V0KCksIGkpKTsKICAgICAgICAgV0tTdHJp
bmdSZWYgd2tWYWx1ZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJ
dGVtRm9yS2V5KHdrRXh0cmFzLmdldCgpLCB3a0tleSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJFeHRyYXNbIik7Ci0g
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0
b1dURlN0cmluZyh3a0tleSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJdID0gIik7Ci0gICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyh3a1ZhbHVl
KSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZCgnXG4nKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFeHRyYXNb
Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHdrS2V5KSk7Cisg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXSA9ICIpOworICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh3a1ZhbHVlKSk7CisgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCdcbicpOwogICAgIH0KIAogICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+
IHdrU3VnZ2VzdGlvbnMoQWRvcHRXSywgV0tCdW5kbGVJbnRlbnRDb3B5U3VnZ2VzdGlvbnMoaW50
ZW50LmdldCgpKSk7CiAgICAgY29uc3Qgc2l6ZV90IG51bVN1Z2dlc3Rpb25zID0gV0tBcnJheUdl
dFNpemUod2tTdWdnZXN0aW9ucy5nZXQoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1TdWdnZXN0aW9uczsgKytpKSB7CiAgICAgICAgIFdLU3RyaW5nUmVmIHdrU3VnZ2VzdGlvbiA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tTdWdnZXN0
aW9ucy5nZXQoKSwgaSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJIYXZlIHN1Z2dlc3Rpb24gIik7Ci0gICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmlu
Zyh3a1N1Z2dlc3Rpb24pKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmlu
Z0J1aWxkZXIoKS0+YXBwZW5kKCdcbicpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIkhhdmUgc3VnZ2VzdGlvbiAiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
dG9XVEZTdHJpbmcod2tTdWdnZXN0aW9uKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCdcbicpOwogICAgIH0KKworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0
KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAjZW5kaWYKIH0KIAogdm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OnJlZ2lzdGVySW50ZW50U2VydmljZUZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiBw
YWdlLCBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBXS0ludGVudFNlcnZpY2VJbmZvUmVmIHNlcnZp
Y2VJbmZvLCBXS1R5cGVSZWYqIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewog
I2lmIEVOQUJMRShXRUJfSU5URU5UU19UQUcpCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiUmVnaXN0ZXJlZCBXZWIgSW50ZW50IFNl
cnZpY2U6IGFjdGlvbj0iKTsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJSZWdpc3RlcmVkIFdlYiBJbnRlbnQgU2Vydmlj
ZTogYWN0aW9uPSIpOwogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a0FjdGlvbihBZG9w
dFdLLCBXS0ludGVudFNlcnZpY2VJbmZvQ29weUFjdGlvbihzZXJ2aWNlSW5mbykpOwotICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmlu
Zyh3a0FjdGlvbi5nZXQoKSkpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdC
dWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiB0eXBlPSIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHRvV1RGU3RyaW5nKHdrQWN0aW9uLmdldCgpKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIgdHlwZT0iKTsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUeXBl
KEFkb3B0V0ssIFdLSW50ZW50U2VydmljZUluZm9Db3B5VHlwZShzZXJ2aWNlSW5mbykpOwotICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0
cmluZyh3a1R5cGUuZ2V0KCkpKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIgdGl0bGU9Iik7CisgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQodG9XVEZTdHJpbmcod2tUeXBlLmdldCgpKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIgdGl0bGU9Iik7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrVGl0
bGUoQWRvcHRXSywgV0tJbnRlbnRTZXJ2aWNlSW5mb0NvcHlUaXRsZShzZXJ2aWNlSW5mbykpOwot
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dU
RlN0cmluZyh3a1RpdGxlLmdldCgpKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0
cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiIHVybD0iKTsKKyAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCh0b1dURlN0cmluZyh3a1RpdGxlLmdldCgpKSk7CisgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCIgdXJsPSIpOwogICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a1VybChB
ZG9wdFdLLCBXS0ludGVudFNlcnZpY2VJbmZvQ29weUhyZWYoc2VydmljZUluZm8pKTsKLSAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJp
bmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcod2tVcmwuZ2V0KCkpKSkpOwotICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiBkaXNwb3Np
dGlvbj0iKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdL
VVJMQ29weVN0cmluZyh3a1VybC5nZXQoKSkpKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCIgZGlzcG9zaXRpb249Iik7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdr
RGlzcG9zaXRpb24oQWRvcHRXSywgV0tJbnRlbnRTZXJ2aWNlSW5mb0NvcHlEaXNwb3NpdGlvbihz
ZXJ2aWNlSW5mbykpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVy
KCktPmFwcGVuZCh0b1dURlN0cmluZyh3a0Rpc3Bvc2l0aW9uLmdldCgpKSk7Ci0gICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCdcbicpOworICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHdrRGlzcG9zaXRpb24uZ2V0KCkpKTsKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogI2VuZGlmCiB9CiAKQEAg
LTc0NSwxOSArNzYxLDE0IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRTdGFydFByb3Zp
c2lvbmFsTG9hZEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiAKICAgICBwbGF0Zm9y
bURpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoZnJhbWUpOwogCi0gICAgaWYgKEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxs
YmFja3MoKSkgewotICAgICAgICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJl
c3VsdChmcmFtZSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWls
ZGVyKCktPmFwcGVuZExpdGVyYWwoIiAtIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWVc
biIpOwotICAgIH0KKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIo
KS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgICAgICBkdW1wTG9hZEV2ZW50
KGZyYW1lLCAiZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSIpOwogCiAgICAgaWYgKCFJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudG9wTG9hZGluZ0ZyYW1lKCkpCiAgICAgICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zZXRUb3BMb2FkaW5nRnJhbWUoZnJhbWUpOwogCi0gICAgaWYg
KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZFN0b3BQcm92aXNp
b25hbEZyYW1lTG9hZHMoKSkgewotICAgICAgICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxl
Rm9yVGVzdFJlc3VsdChmcmFtZSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
dHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiAtIHN0b3BwaW5nIGxvYWQgaW4gZGlkU3Rh
cnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSBjYWxsYmFja1xuIik7Ci0gICAgICAgIFdLQnVuZGxl
RnJhbWVTdG9wTG9hZGluZyhmcmFtZSk7Ci0gICAgfQorICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKCkp
CisgICAgICAgIGR1bXBMb2FkRXZlbnQoZnJhbWUsICJzdG9wcGluZyBsb2FkIGluIGRpZFN0YXJ0
UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUgY2FsbGJhY2siKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZy
YW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCkBAIC03NjgsOCArNzc5LDcgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9h
ZEZvckZyYW1lKFdLQnUKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZHVtcEZyYW1lRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJhbWUpOwot
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVy
YWwoIiAtIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1l
XG4iKTsKKyAgICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAiZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0
Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUiKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OmRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS0J1bmRsZUZyYW1l
UmVmIGZyYW1lLCBXS0Vycm9yUmVmKQpAQCAtNzc3LDEwICs3ODcsOCBAQCB2b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6ZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lKFdLQnVu
ZGxlRnJhbWVSZQogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5p
bmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAg
ICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFtZSk7Ci0gICAg
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVy
YWwoIiAtIGRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JcbiIpOwotICAgIH0KKyAgICBp
ZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1l
TG9hZENhbGxiYWNrcygpKQorICAgICAgICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAiZGlkRmFpbFBy
b3Zpc2lvbmFsTG9hZFdpdGhFcnJvciIpOwogCiAgICAgZnJhbWVEaWRDaGFuZ2VMb2NhdGlvbihm
cmFtZSk7CiB9CkBAIC03OTMsOCArODAxLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRp
ZENvbW1pdExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogICAgIGlmICghSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENh
bGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1
aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFtZSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiIC0gZGlkQ29tbWl0TG9hZEZvckZyYW1l
XG4iKTsKKyAgICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAiZGlkQ29tbWl0TG9hZEZvckZyYW1lIik7
CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hQcm9ncmVzcygpCkBAIC04
MDUsNDYgKzgxMiw0NyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmluaXNoUHJvZ3Jl
c3MoKQogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hv
dWxkRHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjaygpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFs
KCJwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvblxuIik7CisgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLm91dHB1dFRleHQoInBvc3RQcm9ncmVzc0ZpbmlzaGVkTm90aWZpY2F0aW9u
XG4iKTsKIH0KIAogZW51bSBGcmFtZU5hbWVQb2xpY3kgeyBTaG91bGROb3RJbmNsdWRlRnJhbWVO
YW1lLCBTaG91bGRJbmNsdWRlRnJhbWVOYW1lIH07CiAKLXN0YXRpYyB2b2lkIGR1bXBGcmFtZVNj
cm9sbFBvc2l0aW9uKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIEZyYW1lTmFtZVBvbGljeSBzaG91
bGRJbmNsdWRlRnJhbWVOYW1lID0gU2hvdWxkTm90SW5jbHVkZUZyYW1lTmFtZSkKK3N0YXRpYyB2
b2lkIGR1bXBGcmFtZVNjcm9sbFBvc2l0aW9uKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmlu
Z0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIEZyYW1lTmFtZVBvbGljeSBzaG91bGRJbmNsdWRlRnJh
bWVOYW1lID0gU2hvdWxkTm90SW5jbHVkZUZyYW1lTmFtZSkKIHsKICAgICBkb3VibGUgeCA9IG51
bWVyaWNXaW5kb3dQcm9wZXJ0eVZhbHVlKGZyYW1lLCAicGFnZVhPZmZzZXQiKTsKICAgICBkb3Vi
bGUgeSA9IG51bWVyaWNXaW5kb3dQcm9wZXJ0eVZhbHVlKGZyYW1lLCAicGFnZVlPZmZzZXQiKTsK
LSAgICBpZiAoZmFicyh4KSA+IDAuMDAwMDAwMDEgfHwgZmFicyh5KSA+IDAuMDAwMDAwMDEpIHsK
LSAgICAgICAgaWYgKHNob3VsZEluY2x1ZGVGcmFtZU5hbWUpIHsKLSAgICAgICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lKEFkb3B0V0ssIFdLQnVuZGxlRnJhbWVDb3B5TmFtZShm
cmFtZSkpOwotICAgICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxk
ZXIoKS0+YXBwZW5kTGl0ZXJhbCgiZnJhbWUgJyIpOwotICAgICAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKG5hbWUpKTsK
LSAgICAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZExpdGVyYWwoIicgIik7Ci0gICAgICAgIH0KLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgic2Nyb2xsZWQgdG8gIik7Ci0g
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChX
VEY6OlN0cmluZzo6bnVtYmVyKHgpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCcsJyk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChXVEY6OlN0cmluZzo6bnVtYmVyKHkpKTsK
LSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
KCdcbicpOworICAgIGlmIChmYWJzKHgpIDw9IDAuMDAwMDAwMDEgJiYgZmFicyh5KSA8PSAwLjAw
MDAwMDAxKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc2hvdWxkSW5jbHVkZUZyYW1lTmFt
ZSkgeworICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZShBZG9wdFdLLCBXS0J1
bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCJmcmFtZSAnIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3Ry
aW5nKG5hbWUpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCInICIpOwog
ICAgIH0KKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoInNjcm9sbGVkIHRvICIpOwor
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKFdURjo6U3RyaW5nOjpudW1iZXIoeCkpOworICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCcsJyk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoV1RGOjpT
dHJpbmc6Om51bWJlcih5KSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiB9CiAK
LXN0YXRpYyB2b2lkIGR1bXBEZXNjZW5kYW50RnJhbWVTY3JvbGxQb3NpdGlvbnMoV0tCdW5kbGVG
cmFtZVJlZiBmcmFtZSkKK3N0YXRpYyB2b2lkIGR1bXBEZXNjZW5kYW50RnJhbWVTY3JvbGxQb3Np
dGlvbnMoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRl
cikKIHsKICAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBjaGlsZEZyYW1lcyhBZG9wdFdLLCBX
S0J1bmRsZUZyYW1lQ29weUNoaWxkRnJhbWVzKGZyYW1lKSk7CiAgICAgc2l6ZV90IHNpemUgPSBX
S0FycmF5R2V0U2l6ZShjaGlsZEZyYW1lcy5nZXQoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgV0tCdW5kbGVGcmFtZVJlZiBzdWJmcmFtZSA9IHN0
YXRpY19jYXN0PFdLQnVuZGxlRnJhbWVSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChjaGlsZEZy
YW1lcy5nZXQoKSwgaSkpOwotICAgICAgICBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihzdWJmcmFt
ZSwgU2hvdWxkSW5jbHVkZUZyYW1lTmFtZSk7Ci0gICAgICAgIGR1bXBEZXNjZW5kYW50RnJhbWVT
Y3JvbGxQb3NpdGlvbnMoc3ViZnJhbWUpOworICAgICAgICBkdW1wRnJhbWVTY3JvbGxQb3NpdGlv
bihzdWJmcmFtZSwgc3RyaW5nQnVpbGRlciwgU2hvdWxkSW5jbHVkZUZyYW1lTmFtZSk7CisgICAg
ICAgIGR1bXBEZXNjZW5kYW50RnJhbWVTY3JvbGxQb3NpdGlvbnMoc3ViZnJhbWUsIHN0cmluZ0J1
aWxkZXIpOwogICAgIH0KIH0KIAotdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBBbGxGcmFt
ZVNjcm9sbFBvc2l0aW9ucygpCit2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcEFsbEZyYW1l
U2Nyb2xsUG9zaXRpb25zKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7CiAgICAgV0tC
dW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2UpOwot
ICAgIGR1bXBGcmFtZVNjcm9sbFBvc2l0aW9uKGZyYW1lKTsKLSAgICBkdW1wRGVzY2VuZGFudEZy
YW1lU2Nyb2xsUG9zaXRpb25zKGZyYW1lKTsKKyAgICBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihm
cmFtZSwgc3RyaW5nQnVpbGRlcik7CisgICAgZHVtcERlc2NlbmRhbnRGcmFtZVNjcm9sbFBvc2l0
aW9ucyhmcmFtZSwgc3RyaW5nQnVpbGRlcik7CiB9CiAKIHN0YXRpYyBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gdG9KUyhjb25zdCBjaGFyKiBzdHJpbmcpCkBAIC04NzEsNyArODc5LDcgQEAgc3Rh
dGljIGJvb2wgaGFzRG9jdW1lbnRFbGVtZW50KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiAgICAg
cmV0dXJuIEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgZG9jdW1lbnRFbGVtZW50VmFsdWUpOwog
fQogCi1zdGF0aWMgdm9pZCBkdW1wRnJhbWVUZXh0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCitz
dGF0aWMgdm9pZCBkdW1wRnJhbWVUZXh0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1
aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7CiAgICAgLy8gSWYgdGhlIGZyYW1lIGRvZXNuJ3QgaGF2
ZSBhIGRvY3VtZW50IGVsZW1lbnQsIGl0cyBpbm5lciB0ZXh0IHdpbGwgYmUgYW4gZW1wdHkgc3Ry
aW5nLCBzbwogICAgIC8vIHdlJ2xsIGVuZCB1cCBqdXN0IGFwcGVuZGluZyBhIHNpbmdsZSBuZXds
aW5lIGJlbG93LiBCdXQgRHVtcFJlbmRlclRyZWUgZG9lc24ndCBhcHBlbmQKQEAgLTg4MCwzMCAr
ODg4LDMyIEBAIHN0YXRpYyB2b2lkIGR1bXBGcmFtZVRleHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFt
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRleHQo
QWRvcHRXSywgV0tCdW5kbGVGcmFtZUNvcHlJbm5lclRleHQoZnJhbWUpKTsKLSAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcodGV4
dCkpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZCgnXG4nKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh0ZXh0KSk7Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiB9CiAKLXN0YXRpYyB2b2lkIGR1bXBEZXNj
ZW5kYW50RnJhbWVzVGV4dChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQorc3RhdGljIHZvaWQgZHVt
cERlc2NlbmRhbnRGcmFtZXNUZXh0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxk
ZXImIHN0cmluZ0J1aWxkZXIpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gY2hpbGRG
cmFtZXMoQWRvcHRXSywgV0tCdW5kbGVGcmFtZUNvcHlDaGlsZEZyYW1lcyhmcmFtZSkpOwogICAg
IHNpemVfdCBzaXplID0gV0tBcnJheUdldFNpemUoY2hpbGRGcmFtZXMuZ2V0KCkpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFdLQnVuZGxlRnJhbWVS
ZWYgc3ViZnJhbWUgPSBzdGF0aWNfY2FzdDxXS0J1bmRsZUZyYW1lUmVmPihXS0FycmF5R2V0SXRl
bUF0SW5kZXgoY2hpbGRGcmFtZXMuZ2V0KCksIGkpKTsKICAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHN1YmZyYW1lTmFtZShBZG9wdFdLLCBXS0J1bmRsZUZyYW1lQ29weU5hbWUoc3Vi
ZnJhbWUpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIo
KS0+YXBwZW5kTGl0ZXJhbCgiXG4tLS0tLS0tLVxuRnJhbWU6ICciKTsKLSAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHN1
YmZyYW1lTmFtZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVp
bGRlcigpLT5hcHBlbmRMaXRlcmFsKCInXG4tLS0tLS0tLVxuIik7Ci0gICAgICAgIGR1bXBGcmFt
ZVRleHQoc3ViZnJhbWUpOwotICAgICAgICBkdW1wRGVzY2VuZGFudEZyYW1lc1RleHQoc3ViZnJh
bWUpOworCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXG4tLS0tLS0tLVxu
RnJhbWU6ICciKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoc3Vi
ZnJhbWVOYW1lKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiJ1xuLS0t
LS0tLS1cbiIpOworCisgICAgICAgIGR1bXBGcmFtZVRleHQoc3ViZnJhbWUsIHN0cmluZ0J1aWxk
ZXIpOworICAgICAgICBkdW1wRGVzY2VuZGFudEZyYW1lc1RleHQoc3ViZnJhbWUsIHN0cmluZ0J1
aWxkZXIpOwogICAgIH0KIH0KIAotdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBBbGxGcmFt
ZXNUZXh0KCkKK3ZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wQWxsRnJhbWVzVGV4dChTdHJp
bmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewogICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUg
PSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKTsKLSAgICBkdW1wRnJhbWVUZXh0KGZy
YW1lKTsKLSAgICBkdW1wRGVzY2VuZGFudEZyYW1lc1RleHQoZnJhbWUpOworICAgIGR1bXBGcmFt
ZVRleHQoZnJhbWUsIHN0cmluZ0J1aWxkZXIpOworICAgIGR1bXBEZXNjZW5kYW50RnJhbWVzVGV4
dChmcmFtZSwgc3RyaW5nQnVpbGRlcik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpk
dW1wKCkKQEAgLTkyMSwyNyArOTMxLDI5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1w
KCkKICAgICBpZiAodXJsLmZpbmQoImR1bXBBc1RleHQvIikgIT0gV1RGOjpub3RGb3VuZCkKICAg
ICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+ZHVtcEFzVGV4dChm
YWxzZSk7CiAKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisKICAgICBzd2l0Y2gg
KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPndoYXRUb0R1bXAoKSkgewog
ICAgIGNhc2UgVGVzdFJ1bm5lcjo6UmVuZGVyVHJlZTogewogICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdGV4dChBZG9wdFdLLCBXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJlZUV4dGVy
bmFsUmVwcmVzZW50YXRpb24obV9wYWdlKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyh0ZXh0KSk7CisgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHRleHQpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgVGVzdFJ1bm5lcjo6TWFpbkZyYW1lVGV4dDoKLSAgICAgICAgZHVt
cEZyYW1lVGV4dChXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKSk7CisgICAgICAgIGR1
bXBGcmFtZVRleHQoV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKG1fcGFnZSksIHN0cmluZ0J1aWxk
ZXIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRlc3RSdW5uZXI6OkFsbEZyYW1lc1RleHQ6
Ci0gICAgICAgIGR1bXBBbGxGcmFtZXNUZXh0KCk7CisgICAgICAgIGR1bXBBbGxGcmFtZXNUZXh0
KHN0cmluZ0J1aWxkZXIpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBpZiAoSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEFsbEZyYW1lU2Nyb2xs
UG9zaXRpb25zKCkpCi0gICAgICAgIGR1bXBBbGxGcmFtZVNjcm9sbFBvc2l0aW9ucygpOworICAg
ICAgICBkdW1wQWxsRnJhbWVTY3JvbGxQb3NpdGlvbnMoc3RyaW5nQnVpbGRlcik7CiAgICAgZWxz
ZSBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcE1h
aW5GcmFtZVNjcm9sbFBvc2l0aW9uKCkpCi0gICAgICAgIGR1bXBGcmFtZVNjcm9sbFBvc2l0aW9u
KFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2UpKTsKKyAgICAgICAgZHVtcEZyYW1lU2Ny
b2xsUG9zaXRpb24oV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKG1fcGFnZSksIHN0cmluZ0J1aWxk
ZXIpOwogCiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBCYWNrRm9yd2FyZExpc3RzRm9yQWxsV2luZG93cygpKQotICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuZHVtcEJhY2tGb3J3YXJkTGlzdHNGb3JBbGxQYWdlcygpOworICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuZHVtcEJhY2tGb3J3YXJkTGlzdHNGb3JBbGxQ
YWdlcyhzdHJpbmdCdWlsZGVyKTsKIAogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
c2hvdWxkRHVtcFBpeGVscygpICYmIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVy
KCktPnNob3VsZER1bXBQaXhlbHMoKSkgewogICAgICAgICBXS1NuYXBzaG90T3B0aW9ucyBvcHRp
b25zID0ga1dLU25hcHNob3RPcHRpb25zU2hhcmVhYmxlIHwga1dLU25hcHNob3RPcHRpb25zSW5W
aWV3Q29vcmRpbmF0ZXM7CkBAIC05NTMsNiArOTY1LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OmR1bXAoKQogICAgICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnNldFJlcGFp
bnRSZWN0cyhhZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlUcmFja2VkUmVwYWludFJlY3RzKG1fcGFn
ZSkpLmdldCgpKTsKICAgICB9CiAKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0
VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5kb25lKCk7CiB9CiAKQEAgLTk2MSwxMCArOTc0LDggQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmRpZEZpbmlzaExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogICAg
IGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCkt
PnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBkdW1wRnJhbWVEZXNj
cmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFtZSk7Ci0gICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiAtIGRpZEZpbmlz
aExvYWRGb3JGcmFtZVxuIik7Ci0gICAgfQorICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgICAg
IGR1bXBMb2FkRXZlbnQoZnJhbWUsICJkaWRGaW5pc2hMb2FkRm9yRnJhbWUiKTsKIAogICAgIGZy
YW1lRGlkQ2hhbmdlTG9jYXRpb24oZnJhbWUsIC8qc2hvdWxkRHVtcCovIHRydWUpOwogfQpAQCAt
OTc0LDEwICs5ODUsOCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmFpbExvYWRXaXRo
RXJyb3JGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBXSwogICAgIGlmICghSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBG
cmFtZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRh
YmxlRm9yVGVzdFJlc3VsdChmcmFtZSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiAtIGRpZEZhaWxMb2FkV2l0aEVycm9y
XG4iKTsKLSAgICB9CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVy
KCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICAgICAgZHVtcExvYWRFdmVu
dChmcmFtZSwgImRpZEZhaWxMb2FkV2l0aEVycm9yIik7CiAKICAgICBmcmFtZURpZENoYW5nZUxv
Y2F0aW9uKGZyYW1lKTsKIH0KQEAgLTk4NywxOSArOTk2LDIxIEBAIHZvaWQgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpkaWRSZWNlaXZlVGl0bGVGb3JGcmFtZShXS1N0cmluZ1JlZiB0aXRsZSwgV0tCdW5k
bGVGcmFtCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygp
KQogICAgICAgICByZXR1cm47CiAKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAg
ICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBG
cmFtZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRh
YmxlRm9yVGVzdFJlc3VsdChmcmFtZSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiAtIGRpZFJlY2VpdmVUaXRsZTogIik7
Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZCh0b1dURlN0cmluZyh0aXRsZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
c3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJ1xuJyk7CisgICAgICAgIGR1bXBGcmFtZURlc2NyaXB0
aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSBkaWRSZWNlaXZlVGl0bGU6ICIpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh0aXRsZSkpOworICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICB9CiAKLSAgICBpZiAoIUluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBUaXRsZUNoYW5nZXMoKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5l
cigpLT5zaG91bGREdW1wVGl0bGVDaGFuZ2VzKCkpIHsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJUSVRMRSBDSEFOR0VEOiAnIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHRvV1RGU3RyaW5nKHRpdGxlKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiJ1xuIik7CisgICAgfQogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0
cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiVElUTEUgQ0hBTkdFRDogJyIpOwotICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmlu
Zyh0aXRsZSkpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCkt
PmFwcGVuZExpdGVyYWwoIidcbiIpOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRw
dXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpkaWRDbGVhcldpbmRvd0ZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdL
QnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGQpCkBAIC0xMDM3LDggKzEwNDgsNyBAQCB2b2lkIElu
amVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3RGb3JGcmFtZShXS0J1bmRs
ZUZyYW1lUmVmIGZyYW1lKQogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RS
dW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFtZSk7
Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0
ZXJhbCgiIC0gZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3RGb3JGcmFtZVxuIik7CisgICAgZHVtcExv
YWRFdmVudChmcmFtZSwgImRpZENhbmNlbENsaWVudFJlZGlyZWN0Rm9yRnJhbWUiKTsKIH0KIAog
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RGb3JGcmFt
ZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBXS1VSTFJlZiB1cmwsIGRvdWJsZSBkZWxheSwgZG91
YmxlIGRhdGUpCkBAIC0xMDQ5LDEwICsxMDU5LDEyIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdl
Ojp3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0Rm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFt
CiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRE
dW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGR1bXBGcmFt
ZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lKTsKLSAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIgLSB3aWxsUGVy
Zm9ybUNsaWVudFJlZGlyZWN0VG9VUkw6ICIpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybCkp
OwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExp
dGVyYWwoIiBcbiIpOworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBkdW1w
RnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFtZSwgc3RyaW5nQnVpbGRl
cik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSB3aWxsUGVyZm9ybUNsaWVu
dFJlZGlyZWN0VG9VUkw6ICIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHBhdGhTdWl0YWJs
ZUZvclRlc3RSZXN1bHQodXJsKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIg
XG4iKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkU2FtZURv
Y3VtZW50TmF2aWdhdGlvbkZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLU2FtZURv
Y3VtZW50TmF2aWdhdGlvblR5cGUgdHlwZSkKQEAgLTEwNjQsMTcgKzEwNzYsMTcgQEAgdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lKFdLQnVuZGxl
RnJhbWVSZWYgZnJhbWUpCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0
UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7Ci0g
ICAgICAgIGR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lKTsK
LSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
TGl0ZXJhbCgiIC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWVcbiIpOwotICAgIH0KKyAg
ICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZy
YW1lTG9hZENhbGxiYWNrcygpKQorICAgICAgICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAiZGlkRmlu
aXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUiKTsKIAogICAgIHVuc2lnbmVkIHBlbmRpbmdGcmFtZVVu
bG9hZEV2ZW50cyA9IFdLQnVuZGxlRnJhbWVHZXRQZW5kaW5nVW5sb2FkQ291bnQoZnJhbWUpOwog
ICAgIGlmIChwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMpIHsKLSAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKGZyYW1lVG9TdHIoZnJhbWUpKTsK
LSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
TGl0ZXJhbCgiIC0gaGFzICIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmROdW1iZXIocGVuZGluZ0ZyYW1lVW5sb2FkRXZlbnRzKTsKLSAg
ICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0
ZXJhbCgiIG9udW5sb2FkIGhhbmRsZXIocylcbiIpOworICAgICAgICBTdHJpbmdCdWlsZGVyIHN0
cmluZ0J1aWxkZXI7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGZyYW1lVG9TdHIoZnJh
bWUpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSBoYXMgIik7Cisg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKHBlbmRpbmdGcmFtZVVubG9hZEV2ZW50
cyk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIG9udW5sb2FkIGhhbmRs
ZXIocylcbiIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChz
dHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KIH0KIApAQCAtMTA4MywyOCArMTA5NSwy
NiBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJh
bWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJh
Y2tzKCkpIHsKLSAgICAgICAgZHVtcEZyYW1lRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1
bHQoZnJhbWUpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRl
cigpLT5hcHBlbmRMaXRlcmFsKCIgLSBkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZVxuIik7
Ci0gICAgfQorICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5z
aG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgICAgIGR1bXBMb2FkRXZlbnQoZnJh
bWUsICJkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZSIpOwogfQogCiB2b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6ZGlkRGlzcGxheUluc2VjdXJlQ29udGVudEZvckZyYW1lKFdLQnVuZGxlRnJh
bWVSZWYgZnJhbWUpCiB7CiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiZGlkRGlzcGxh
eUluc2VjdXJlQ29udGVudFxuIik7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5v
dXRwdXRUZXh0KCJkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50XG4iKTsKIH0KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmRpZFJ1bkluc2VjdXJlQ29udGVudEZvckZyYW1lKFdLQnVuZGxlRnJh
bWVSZWYgZnJhbWUpCiB7CiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiZGlkUnVuSW5z
ZWN1cmVDb250ZW50XG4iKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1
dFRleHQoImRpZFJ1bkluc2VjdXJlQ29udGVudFxuIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpkaWREZXRlY3RYU1NGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewog
ICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1w
RnJhbWVMb2FkQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
dHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoImRpZERldGVjdFhTU1xuIik7CisgICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KCJkaWREZXRlY3RYU1NcbiIpOwog
fQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkSW5pdGlhdGVMb2FkRm9yUmVzb3VyY2Uo
V0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lUmVmLCB1aW50NjRfdCBpZGVudGlmaWVyLCBX
S1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgYm9vbCkKQEAgLTExMzUsMTIgKzExNDUsMTQgQEAgV0tV
UkxSZXF1ZXN0UmVmIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUo
V0tCdW5kbGVQYWdlUmVmLCBXS0IKIHsKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmlzVGVzdFJ1bm5pbmcoKQogICAgICAgICAmJiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVz
dFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAg
ZHVtcFJlc291cmNlVVJMKGlkZW50aWZpZXIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIgLSB3aWxsU2VuZFJlcXVlc3Qg
Iik7Ci0gICAgICAgIGR1bXBSZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQo
cmVxdWVzdCk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVy
KCktPmFwcGVuZExpdGVyYWwoIiByZWRpcmVjdFJlc3BvbnNlICIpOwotICAgICAgICBkdW1wUmVz
cG9uc2VEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXNwb25zZSk7Ci0gICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnXG4nKTsK
KyAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgICAgICBkdW1wUmVzb3Vy
Y2VVUkwoaWRlbnRpZmllciwgc3RyaW5nQnVpbGRlcik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiIC0gd2lsbFNlbmRSZXF1ZXN0ICIpOworICAgICAgICBkdW1wUmVxdWVz
dERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KHJlcXVlc3QsIHN0cmluZ0J1aWxkZXIp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiByZWRpcmVjdFJlc3BvbnNl
ICIpOworICAgICAgICBkdW1wUmVzcG9uc2VEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3Vs
dChyZXNwb25zZSwgc3RyaW5nQnVpbGRlcik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCdcbicpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KIAogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuaXNUZXN0UnVubmluZygpICYmIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0
UnVubmVyKCktPndpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKCkpCkBAIC0xMTQ4LDcgKzExNjAs
NyBAQCBXS1VSTFJlcXVlc3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RG
b3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYsIFdLQgogCiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+
IHJlZGlyZWN0VVJMID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25zZSkpOwog
ICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpICYmIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPndpbGxTZW5kUmVxdWVzdFJldHVybnNO
dWxsT25SZWRpcmVjdCgpICYmIHJlZGlyZWN0VVJMKSB7Ci0gICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIlJldHVybmluZyBudWxs
IGZvciB0aGlzIHJlZGlyZWN0XG4iKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
Lm91dHB1dFRleHQoIlJldHVybmluZyBudWxsIGZvciB0aGlzIHJlZGlyZWN0XG4iKTsKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0xMTcyLDkgKzExODQsMTEgQEAgV0tVUkxSZXF1ZXN0
UmVmIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQ
YWdlUmVmLCBXS0IKICAgICAgICAgICAgIG1haW5GcmFtZUlzRXh0ZXJuYWwgPSBpc0hUVFBPckhU
VFBTU2NoZW1lKG1haW5GcmFtZVNjaGVtZS5nZXQoKSkgJiYgIWlzTG9jYWxIb3N0KG1haW5GcmFt
ZUhvc3QuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGlmICghbWFpbkZyYW1lSXNFeHRlcm5h
bCkgewotICAgICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIo
KS0+YXBwZW5kTGl0ZXJhbCgiQmxvY2tlZCBhY2Nlc3MgdG8gZXh0ZXJuYWwgVVJMICIpOwotICAg
ICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
KHRvV1RGU3RyaW5nKHVybFN0cmluZykpOwotICAgICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCdcbicpOworICAgICAgICAgICAgU3RyaW5n
QnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCJCbG9ja2VkIGFjY2VzcyB0byBleHRlcm5hbCBVUkwgIik7CisgICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKKyAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQpAQCAtMTE4OSwxMCArMTIwMywxMiBAQCB2
b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlRm9yUmVzb3VyY2UoV0tC
dW5kbGVQYWdlUmVmLCBXS0J1bmRsZQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENh
bGxiYWNrcygpKSB7Ci0gICAgICAgIGR1bXBSZXNvdXJjZVVSTChpZGVudGlmaWVyKTsKLSAgICAg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJh
bCgiIC0gZGlkUmVjZWl2ZVJlc3BvbnNlICIpOwotICAgICAgICBkdW1wUmVzcG9uc2VEZXNjcmlw
dGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXNwb25zZSk7Ci0gICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnXG4nKTsKKyAgICAgICAgU3Ry
aW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgICAgICBkdW1wUmVzb3VyY2VVUkwoaWRlbnRp
Zmllciwgc3RyaW5nQnVpbGRlcik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiIC0gZGlkUmVjZWl2ZVJlc3BvbnNlICIpOworICAgICAgICBkdW1wUmVzcG9uc2VEZXNjcmlw
dGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXNwb25zZSwgc3RyaW5nQnVpbGRlcik7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KIAog
CkBAIC0xMjAzLDEwICsxMjE5LDEyIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNl
aXZlUmVzcG9uc2VGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlCiAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5TGFzdFBh
dGhDb21wb25lbnQodXJsLmdldCgpKSk7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1p
bWVUeXBlU3RyaW5nID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weU1JTUVUeXBlKHJlc3BvbnNl
KSk7CiAKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBl
bmQodG9XVEZTdHJpbmcodXJsU3RyaW5nKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiIGhhcyBNSU1FIHR5cGUgIik7Ci0gICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3Ry
aW5nKG1pbWVUeXBlU3RyaW5nKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmlu
Z0J1aWxkZXIoKS0+YXBwZW5kKCdcbicpOworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRl
cjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBoYXMgTUlNRSB0eXBlICIpOworICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG1pbWVUeXBlU3RyaW5nKSk7CisgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91
dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OmRpZFJlY2VpdmVDb250ZW50TGVuZ3RoRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdl
UmVmLCBXS0J1bmRsZUZyYW1lUmVmLCB1aW50NjRfdCwgdWludDY0X3QpCkBAIC0xMjIxLDggKzEy
MzksMTAgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZpbmlzaExvYWRGb3JSZXNvdXJj
ZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJhbWUKICAgICBpZiAoIUluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3Mo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZHVtcFJlc291cmNlVVJMKGlkZW50aWZpZXIpOwot
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVy
YWwoIiAtIGRpZEZpbmlzaExvYWRpbmdcbiIpOworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVp
bGRlcjsKKyAgICBkdW1wUmVzb3VyY2VVUkwoaWRlbnRpZmllciwgc3RyaW5nQnVpbGRlcik7Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSBkaWRGaW5pc2hMb2FkaW5nXG4iKTsK
KyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmFpbExvYWRGb3JS
ZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJhbWVSZWYsIHVpbnQ2NF90IGlkZW50
aWZpZXIsIFdLRXJyb3JSZWYgZXJyb3IpCkBAIC0xMjMzLDExICsxMjUzLDEzIEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRGYWlsTG9hZEZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiwg
V0tCdW5kbGVGcmFtZVJlCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGR1bXBSZXNvdXJjZVVSTChpZGVudGlmaWVyKTsKLSAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIgLSBkaWRGYWlsTG9h
ZGluZ1dpdGhFcnJvcjogIik7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAg
IGR1bXBSZXNvdXJjZVVSTChpZGVudGlmaWVyLCBzdHJpbmdCdWlsZGVyKTsKKyAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIGRpZEZhaWxMb2FkaW5nV2l0aEVycm9yOiAiKTsKIAot
ICAgIGR1bXBFcnJvckRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGVycm9yKTsKLSAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJ1xuJyk7
CisgICAgZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZXJyb3IsIHN0
cmluZ0J1aWxkZXIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7
CiB9CiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRDYWNoZVJlc3BvbnNlKFdLQnVu
ZGxlUGFnZVJlZiwgV0tCdW5kbGVGcmFtZVJlZiwgdWludDY0X3QgaWRlbnRpZmllcikKQEAgLTEy
NDgsOCArMTI3MCwxMCBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQ2FjaGVSZXNw
b25zZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJhbWVSZWYsCiAgICAgaWYgKCFJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wV2lsbENhY2hlUmVzcG9u
c2UoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmROdW1iZXIoaWRlbnRpZmllcik7Ci0gICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiIC0gd2ls
bENhY2hlUmVzcG9uc2U6IGNhbGxlZFxuIik7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWls
ZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKGlkZW50aWZpZXIpOworICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gd2lsbENhY2hlUmVzcG9uc2U6IGNhbGxlZFxu
Iik7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpKTsKIAogICAgIC8vIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRoZSBjYWNo
ZSB0aGUgcmVzcG9uc2UuCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMjg5LDI0ICsxMzEzLDI2IEBA
IFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb24oV0tCCiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9
IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7CiAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHVybFNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVybC5nZXQo
KSkpOwogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kTGl0ZXJhbCgiUG9saWN5IGRlbGVnYXRlOiBhdHRlbXB0IHRvIGxvYWQgIik7CisgICAgU3Ry
aW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiUG9saWN5IGRlbGVnYXRlOiBhdHRlbXB0IHRvIGxvYWQgIik7CiAgICAgaWYgKGlzTG9jYWxG
aWxlU2NoZW1lKHVybFNjaGVtZS5nZXQoKSkpIHsKICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGZpbGVuYW1lID0gYWRvcHRXSyhXS1VSTENvcHlMYXN0UGF0aENvbXBvbmVudCh1cmwu
Z2V0KCkpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIo
KS0+YXBwZW5kKHRvV1RGU3RyaW5nKGZpbGVuYW1lKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHRvV1RGU3RyaW5nKGZpbGVuYW1lKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5n
KHVybC5nZXQoKSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVp
bGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcodXJsU3RyaW5nKSk7CisgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykpOwogICAgIH0KLSAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIgd2l0aCBu
YXZpZ2F0aW9uIHR5cGUgXCciKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcoTmF2aWdhdGlvblR5cGVUb1N0cmluZyhXS0J1
bmRsZU5hdmlnYXRpb25BY3Rpb25HZXROYXZpZ2F0aW9uVHlwZShuYXZpZ2F0aW9uQWN0aW9uKSkp
KTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRM
aXRlcmFsKCJcJyIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHdpdGggbmF2
aWdhdGlvbiB0eXBlIFwnIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmco
TmF2aWdhdGlvblR5cGVUb1N0cmluZyhXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25HZXROYXZpZ2F0
aW9uVHlwZShuYXZpZ2F0aW9uQWN0aW9uKSkpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIlwnIik7CiAgICAgV0tCdW5kbGVIaXRUZXN0UmVzdWx0UmVmIGhpdFRlc3RSZXN1bHRS
ZWYgPSBXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25Db3B5SGl0VGVzdFJlc3VsdChuYXZpZ2F0aW9u
QWN0aW9uKTsKICAgICBpZiAoaGl0VGVzdFJlc3VsdFJlZikgewotICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIgb3JpZ2luYXRp
bmcgZnJvbSAiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxk
ZXIoKS0+YXBwZW5kKGR1bXBQYXRoKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgV0tCdW5kbGVIaXRU
ZXN0UmVzdWx0Q29weU5vZGVIYW5kbGUoaGl0VGVzdFJlc3VsdFJlZikpKTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgb3JpZ2luYXRpbmcgZnJvbSAiKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBXS0J1
bmRsZUhpdFRlc3RSZXN1bHRDb3B5Tm9kZUhhbmRsZShoaXRUZXN0UmVzdWx0UmVmKSkpOwogICAg
IH0KIAotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZCgnXG4nKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPm5vdGlmeURvbmUoKTsKIAog
ICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5pc1BvbGljeURl
bGVnYXRlUGVybWlzc2l2ZSgpKQpAQCAtMTMyMiwxMCArMTM0OCwxMiBAQCBXS0J1bmRsZVBhZ2VQ
b2xpY3lBY3Rpb24gSW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dB
Y3Rpb24oV0tCdQogV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6
ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJh
bWVSZWYsIFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIFdLVVJMUmVxdWVzdFJlZiwgV0tUeXBl
UmVmKikKIHsKICAgICBpZiAoV0tVUkxSZXNwb25zZUlzQXR0YWNobWVudChyZXNwb25zZSkpIHsK
KyAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gZmlsZW5hbWUgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5U3VnZ2Vz
dGVkRmlsZW5hbWUocmVzcG9uc2UpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiUG9saWN5IGRlbGVnYXRlOiByZXNvdXJj
ZSBpcyBhbiBhdHRhY2htZW50LCBzdWdnZXN0ZWQgZmlsZSBuYW1lIFwnIik7Ci0gICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmlu
ZyhmaWxlbmFtZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVp
bGRlcigpLT5hcHBlbmRMaXRlcmFsKCJcJ1xuIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiUG9saWN5IGRlbGVnYXRlOiByZXNvdXJjZSBpcyBhbiBhdHRhY2htZW50LCBz
dWdnZXN0ZWQgZmlsZSBuYW1lIFwnIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRv
V1RGU3RyaW5nKGZpbGVuYW1lKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiXCdcbiIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChz
dHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KIAogICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtaW1lVHlwZSA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlNSU1FVHlwZShyZXNw
b25zZSkpOwpAQCAtMTQwNCwxNSArMTQzMiwxNiBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6
d2lsbEFkZE1lc3NhZ2VUb0NvbnNvbGUoV0tTdHJpbmdSZWYgbWVzc2FnZSwgdWludDMyX3QgbAog
ICAgICAgICAvLyBGSVhNRTogVGhlIGNvZGUgYmVsb3cgZG9lcyBub3QgaGFuZGxlIGFkZGl0aW9u
YWwgdGV4dCBhZnRlciB1cmwgbm9yIG11bHRpcGxlIHVybHMuIFRoaXMgbWF0Y2hlcyBEdW1wUmVu
ZGVyVHJlZSBpbXBsZW1lbnRhdGlvbi4KICAgICAgICAgbWVzc2FnZVN0cmluZyA9IG1lc3NhZ2VT
dHJpbmcuc3Vic3RyaW5nKDAsIGZpbGVQcm90b2NvbFN0YXJ0KSArIGxhc3RGaWxlVVJMUGF0aENv
bXBvbmVudChtZXNzYWdlU3RyaW5nLnN1YnN0cmluZyhmaWxlUHJvdG9jb2xTdGFydCkpOwogCi0g
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJh
bCgiQ09OU09MRSBNRVNTQUdFOiAiKTsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJDT05TT0xFIE1FU1NBR0U6ICIpOwog
ICAgIGlmIChsaW5lTnVtYmVyKSB7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
dHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoImxpbmUgIik7Ci0gICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZE51bWJlcihsaW5lTnVtYmVy
KTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kTGl0ZXJhbCgiOiAiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJs
aW5lICIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcihsaW5lTnVtYmVyKTsK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCI6ICIpOwogICAgIH0KLSAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQobWVzc2FnZVN0
cmluZyk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kKCdcbicpOwotCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWVzc2FnZVN0cmluZyk7Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OndpbGxTZXRTdGF0dXNiYXJUZXh0KFdLU3RyaW5nUmVmIHN0YXR1c2Jh
clRleHQpCkBAIC0xNDIzLDkgKzE0NTIsMTEgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6Ondp
bGxTZXRTdGF0dXNiYXJUZXh0KFdLU3RyaW5nUmVmIHN0YXR1c2JhclRleHQpCiAgICAgaWYgKCFJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wU3RhdHVzQ2Fs
bGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxM
QkFDSzogc2V0U3RhdHVzVGV4dDoiKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcoc3RhdHVzYmFyVGV4dCkpOwotICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnXG4nKTsKKyAg
ICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCJVSSBERUxFR0FURSBTVEFUVVMgQ0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6Iik7Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoc3RhdHVzYmFyVGV4dCkpOworICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlwdEFsZXJ0KFdLU3RyaW5nUmVmIG1lc3NhZ2Us
IFdLQnVuZGxlRnJhbWVSZWYpCkBAIC0xNDMzLDkgKzE0NjQsMTEgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaXB0QWxlcnQoV0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tC
dW5kbGVGcmEKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5n
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIkFMRVJUOiAiKTsKLSAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcobWVzc2FnZSkp
OwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgn
XG4nKTsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJBTEVSVDogIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9X
VEZTdHJpbmcobWVzc2FnZSkpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlwdENv
bmZpcm0oV0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tCdW5kbGVGcmFtZVJlZikKQEAgLTE0NDMsMTgg
KzE0NzYsMjIgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaXB0Q29u
ZmlybShXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0J1bmRsZUYKICAgICBpZiAoIUluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIkNP
TkZJUk06ICIpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCkt
PmFwcGVuZCh0b1dURlN0cmluZyhtZXNzYWdlKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCdcbicpOworICAgIFN0cmluZ0J1aWxkZXIgc3Ry
aW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkNPTkZJUk06ICIp
OworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG1lc3NhZ2UpKTsKKyAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
b3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRQcm9tcHQoV0tTdHJpbmdSZWYgbWVzc2FnZSwg
V0tTdHJpbmdSZWYgZGVmYXVsdFZhbHVlLCBXS0J1bmRsZUZyYW1lUmVmKQogewotICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIlBST01Q
VDogIik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kKHRvV1RGU3RyaW5nKG1lc3NhZ2UpKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
c3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIsIGRlZmF1bHQgdGV4dDogIik7Ci0gICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3Ry
aW5nKGRlZmF1bHRWYWx1ZSkpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdC
dWlsZGVyKCktPmFwcGVuZCgnXG4nKTsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJQUk9NUFQ6ICIpOworICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG1lc3NhZ2UpKTsKKyAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiwgZGVmYXVsdCB0ZXh0OiAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCh0b1dURlN0cmluZyhkZWZhdWx0VmFsdWUpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgnXG4nKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVh
Y2hBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4s
IGludDY0X3QgdG90YWxCeXRlc05lZWRlZCkKQEAgLTE0NjYsMTEgKzE1MDMsMTMgQEAgdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlYWNoQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKFdL
U2VjdXJpdHlPcmlnaW5SZWYKICAgICAgICAgLy8gYWJvdmUgb3IgYmVsb3cgYSB0aHJlc2hvbGQu
CiAgICAgICAgIGludDY0X3QgdHJ1bmNhdGVkU3BhY2VOZWVkZWQgPSAodG90YWxCeXRlc05lZWRl
ZCAvIDEwMDAwKSAqIDEwMDAwOwogCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
dHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIlVJIERFTEVHQVRFIEFQUExJQ0FUSU9OIENB
Q0hFIENBTExCQUNLOiBleGNlZWRlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YUZvclNlY3Vy
aXR5T3JpZ2luOiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVp
bGRlcigpLT5hcHBlbmQoc2VjdXJpdHlPcmlnaW5Ub1N0cihvcmlnaW4pKTsKLSAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiIHRv
dGFsU3BhY2VOZWVkZWQ6fiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmROdW1iZXIodHJ1bmNhdGVkU3BhY2VOZWVkZWQpOwotICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJ1xuJyk7
CisgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCJVSSBERUxFR0FURSBBUFBMSUNBVElPTiBDQUNIRSBDQUxMQkFD
SzogZXhjZWVkZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGFGb3JTZWN1cml0eU9yaWdpbjoi
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc2VjdXJpdHlPcmlnaW5Ub1N0cihvcmln
aW4pKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgdG90YWxTcGFjZU5l
ZWRlZDp+Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKHRydW5jYXRlZFNw
YWNlTmVlZGVkKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKSk7CiAgICAgfQogCiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVu
bmVyKCktPnNob3VsZERpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEoKSkK
QEAgLTE0ODMsMTEgKzE1MjIsMTMgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlYWNo
QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKFdLU2VjdXJpdHlPcmlnaW5SZWYKIHVpbnQ2NF90
IEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRXhjZWVkRGF0YWJhc2VRdW90YShXS1NlY3VyaXR5T3Jp
Z2luUmVmIG9yaWdpbiwgV0tTdHJpbmdSZWYgZGF0YWJhc2VOYW1lLCBXS1N0cmluZ1JlZiBkYXRh
YmFzZURpc3BsYXlOYW1lLCB1aW50NjRfdCBjdXJyZW50UXVvdGFCeXRlcywgdWludDY0X3QgY3Vy
cmVudE9yaWdpblVzYWdlQnl0ZXMsIHVpbnQ2NF90IGN1cnJlbnREYXRhYmFzZVVzYWdlQnl0ZXMs
IHVpbnQ2NF90IGV4cGVjdGVkVXNhZ2VCeXRlcykKIHsKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcERhdGFiYXNlQ2FsbGJhY2tzKCkpIHsK
LSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
TGl0ZXJhbCgiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGV4Y2VlZGVkRGF0YWJhc2VR
dW90YUZvclNlY3VyaXR5T3JpZ2luOiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoc2VjdXJpdHlPcmlnaW5Ub1N0cihvcmlnaW4pKTsK
LSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
TGl0ZXJhbCgiIGRhdGFiYXNlOiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
c3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcoZGF0YWJhc2VOYW1lKSk7Ci0gICAg
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnXG4n
KTsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNl
ZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjoiKTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoc2VjdXJpdHlPcmlnaW5Ub1N0cihvcmlnaW4pKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgZGF0YWJhc2U6Iik7CisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGRhdGFiYXNlTmFtZSkpOworICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1
dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29u
c3QgdWludDY0X3QgZGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAxMDI0OwpAQCAtMTU1Nyw5ICsx
NTk4LDExIEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdpbkVkaXRpbmcoV0tC
dW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBp
ZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRp
bmdDYWxsYmFja3MoKSkgewotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRCZWdpbkVk
aXRpbmdJbkRPTVJhbmdlOiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJh
bmdlKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCkt
PmFwcGVuZCgnXG4nKTsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOworICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
Lm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAgICB9CiAgICAgcmV0dXJu
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGlu
ZygpOwogfQpAQCAtMTU3MCw5ICsxNjEzLDExIEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpz
aG91bGRFbmRFZGl0aW5nKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2UpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVy
KCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxF
R0FURTogc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6Iik7Ci0gICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwg
bV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCdcbicpOworICAgICAgICBTdHJpbmdCdWlsZGVyIHN0
cmluZ0J1aWxkZXI7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElO
RyBERUxFR0FURTogc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6Iik7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAg
ICB9CiAgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNo
b3VsZEFsbG93RWRpdGluZygpOwogfQpAQCAtMTU4OSwxMyArMTYzNCwxNSBAQCBib29sIEluamVj
dGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0Tm9kZShXS0J1bmRsZU5vZGVIYW5kbGVSZWYgbm9k
ZSwgV0tCdW5kbGVSYQogICAgIH07CiAKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJF
RElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnROb2RlOiIpOwotICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoZHVtcFBhdGgobV9wYWdlLCBt
X3dvcmxkLmdldCgpLCBub2RlKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
dHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiByZXBsYWNpbmdET01SYW5nZToiKTsKLSAg
ICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHJh
bmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZVRvUmVwbGFjZSkpOwotICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFs
KCIgZ2l2ZW5BY3Rpb246Iik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZChpbnNlcnRhY3Rpb25zdHJpbmdbYWN0aW9uXSk7Ci0gICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnXG4nKTsK
KyAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEluc2VydE5vZGU6Iik7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGR1bXBQYXRoKG1fcGFnZSwgbV93b3JsZC5n
ZXQoKSwgbm9kZSkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiByZXBs
YWNpbmdET01SYW5nZToiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocmFuZ2VUb1N0
cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlVG9SZXBsYWNlKSk7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGdpdmVuQWN0aW9uOiIpOworICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChpbnNlcnRhY3Rpb25zdHJpbmdbYWN0aW9uXSk7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
b3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KICAgICByZXR1cm4g
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5n
KCk7CiB9CkBAIC0xNjEyLDEzICsxNjU5LDE1IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpz
aG91bGRJbnNlcnRUZXh0KFdLU3RyaW5nUmVmIHRleHQsIFdLQnVuZGxlUmFuZ2VIYW5kbGVSCiAg
ICAgfTsKIAogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5z
aG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6
IHNob3VsZEluc2VydFRleHQ6Iik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
dHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyh0ZXh0KSk7Ci0gICAgICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiByZXBs
YWNpbmdET01SYW5nZToiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmlu
Z0J1aWxkZXIoKS0+YXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5n
ZVRvUmVwbGFjZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVp
bGRlcigpLT5hcHBlbmRMaXRlcmFsKCIgZ2l2ZW5BY3Rpb246Iik7Ci0gICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChpbnNlcnRhY3Rpb25zdHJp
bmdbYWN0aW9uXSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWls
ZGVyKCktPmFwcGVuZCgnXG4nKTsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVy
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6
IHNob3VsZEluc2VydFRleHQ6Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RG
U3RyaW5nKHRleHQpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgcmVw
bGFjaW5nRE9NUmFuZ2U6Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9T
dHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZVRvUmVwbGFjZSkpOworICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBnaXZlbkFjdGlvbjoiKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoaW5zZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0pOworICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
Lm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAgICB9CiAgICAgcmV0dXJu
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGlu
ZygpOwogfQpAQCAtMTYyOSw5ICsxNjc4LDExIEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpz
aG91bGREZWxldGVSYW5nZShXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5l
cigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVM
RUdBVEU6IHNob3VsZERlbGV0ZURPTVJhbmdlOiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29y
bGQuZ2V0KCksIHJhbmdlKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZCgnXG4nKTsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVM
RUdBVEU6IHNob3VsZERlbGV0ZURPTVJhbmdlOiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQogICAgIHJl
dHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0Vk
aXRpbmcoKTsKIH0KQEAgLTE2NTEsMTUgKzE3MDIsMTcgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiBmcm9t
UmEKICAgICB9OwogCiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVy
KCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxF
R0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZToiKTsKLSAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHJhbmdlVG9TdHIobV9wYWdl
LCBtX3dvcmxkLmdldCgpLCBmcm9tUmFuZ2UpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiIHRvRE9NUmFuZ2U6Iik7Ci0g
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChy
YW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgdG9SYW5nZSkpOwotICAgICAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIgYWZm
aW5pdHk6Iik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVy
KCktPmFwcGVuZChhZmZpbml0eXN0cmluZ1thZmZpbml0eV0pOyAKLSAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiIHN0aWxsU2Vs
ZWN0aW5nOiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRl
cigpLT5hcHBlbmQoYm9vbHN0cmluZ1tzdGlsbFNlbGVjdGluZ10pOyAKLSAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCdcbicpOworICAgICAg
ICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5n
ZToiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1f
d29ybGQuZ2V0KCksIGZyb21SYW5nZSkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIiB0b0RPTVJhbmdlOiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5n
ZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgdG9SYW5nZSkpOworICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiBhZmZpbml0eToiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoYWZmaW5pdHlzdHJpbmdbYWZmaW5pdHldKTsgCisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiIHN0aWxsU2VsZWN0aW5nOiIpOworICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChib29sc3RyaW5nW3N0aWxsU2VsZWN0aW5nXSk7IAorICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91
dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAgICB9CiAgICAgcmV0dXJuIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygp
OwogfQpAQCAtMTY3MCwxMSArMTcyMywxMyBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hv
dWxkQXBwbHlTdHlsZShXS0J1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25SZWYgc3R5bGUsCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiRURJVElO
RyBERUxFR0FURTogc2hvdWxkQXBwbHlTdHlsZToiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHN0eWxlRGVjVG9TdHIoc3R5bGUpKTsK
LSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
TGl0ZXJhbCgiIHRvRWxlbWVudHNJbkRPTVJhbmdlOiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1f
d29ybGQuZ2V0KCksIHJhbmdlKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
dHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnXG4nKTsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJp
bmdCdWlsZGVyOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcg
REVMRUdBVEU6IHNob3VsZEFwcGx5U3R5bGU6Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHN0eWxlRGVjVG9TdHIoc3R5bGUpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCIgdG9FbGVtZW50c0luRE9NUmFuZ2U6Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOworICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAgICB9CiAgICAg
cmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93
RWRpdGluZygpOwogfQpAQCAtMTY4Myw2MiArMTczOCw3MCBAQCB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6ZGlkQmVnaW5FZGl0aW5nKFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCiB7CiAg
ICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQogICAgICAg
ICByZXR1cm47CisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigp
LT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRp
bmdDYWxsYmFja3MoKSkgewotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQmVn
aW5FZGl0aW5nOiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVp
bGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcobm90aWZpY2F0aW9uTmFtZSkpOwotICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJ1xuJyk7Ci0g
ICAgfQorICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6
Iik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcobm90aWZpY2F0aW9uTmFt
ZSkpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKIHZv
aWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRFbmRFZGl0aW5nKFdLU3RyaW5nUmVmIG5vdGlmaWNh
dGlvbk5hbWUpCiB7CiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVu
bmluZygpKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRF
OiB3ZWJWaWV3RGlkRW5kRWRpdGluZzoiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUp
KTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kKCdcbicpOwotICAgIH0KKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlk
RW5kRWRpdGluZzoiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhub3Rp
ZmljYXRpb25OYW1lKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygp
KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZShXS1N0cmluZ1JlZiBu
b3RpZmljYXRpb25OYW1lKQogewogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlz
VGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOworICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZToiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5h
bWUpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+
YXBwZW5kKCdcbicpOwotICAgIH0KKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3
RGlkQ2hhbmdlOiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlm
aWNhdGlvbk5hbWUpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkp
OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlU2VsZWN0aW9uKFdLU3Ry
aW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCiB7CiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNr
cygpKQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJF
RElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOiIpOwotICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJp
bmcobm90aWZpY2F0aW9uTmFtZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
c3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJ1xuJyk7Ci0gICAgfQorICAgIFN0cmluZ0J1aWxkZXIg
c3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcg
REVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246Iik7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQodG9XVEZTdHJpbmcobm90aWZpY2F0aW9uTmFtZSkpOworICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCdcbicpOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0
KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9B
UEkpCiBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c3VwcG9ydHNGdWxsU2NyZWVuKFdLQnVuZGxl
UGFnZVJlZiBwYWdlUmVmLCBXS0Z1bGxTY3JlZW5LZXlib2FyZFJlcXVlc3RUeXBlIHJlcXVlc3RU
eXBlKQogewogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5z
aG91bGREdW1wRnVsbFNjcmVlbkNhbGxiYWNrcygpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJzdXBwb3J0c0Z1bGxTY3Jl
ZW4oKSA9PSB0cnVlXG4iKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1
dFRleHQoInN1cHBvcnRzRnVsbFNjcmVlbigpID09IHRydWVcbiIpOwogICAgIHJldHVybiB0cnVl
OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVu
dChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGVsZW1lbnRS
ZWYpCiB7CiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoImVudGVyRnVsbFNjcmVlbkZv
ckVsZW1lbnQoKVxuIik7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRU
ZXh0KCJlbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KClcbiIpOwogCiAgICAgaWYgKCFJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5oYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZp
b3IoKSkgewogICAgICAgICBXS0J1bmRsZVBhZ2VXaWxsRW50ZXJGdWxsU2NyZWVuKHBhZ2VSZWYp
OwpAQCAtMTc0OSw3ICsxODEyLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmVudGVyRnVs
bFNjcmVlbkZvckVsZW1lbnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnUKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpleGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoV0tCdW5kbGVQYWdlUmVm
IHBhZ2VSZWYsIFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBlbGVtZW50UmVmKQogewogICAgIGlmIChJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnVsbFNjcmVl
bkNhbGxiYWNrcygpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVp
bGRlcigpLT5hcHBlbmRMaXRlcmFsKCJleGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoKVxuIik7Cisg
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KCJleGl0RnVsbFNjcmVl
bkZvckVsZW1lbnQoKVxuIik7CiAKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50
ZXN0UnVubmVyKCktPmhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigpKSB7CiAgICAgICAgIFdL
QnVuZGxlUGFnZVdpbGxFeGl0RnVsbFNjcmVlbihwYWdlUmVmKTsKQEAgLTE3NjAsMTkgKzE4MjMs
MTkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChX
S0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW4KIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpi
ZWdhbkVudGVyRnVsbFNjcmVlbihXS0J1bmRsZVBhZ2VSZWYsIFdLUmVjdCwgV0tSZWN0KQogewog
ICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1w
RnVsbFNjcmVlbkNhbGxiYWNrcygpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
c3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJiZWdhbkVudGVyRnVsbFNjcmVlbigpXG4i
KTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoImJlZ2FuRW50
ZXJGdWxsU2NyZWVuKClcbiIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6YmVnYW5F
eGl0RnVsbFNjcmVlbihXS0J1bmRsZVBhZ2VSZWYsIFdLUmVjdCwgV0tSZWN0KQogewogICAgIGlm
IChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnVsbFNj
cmVlbkNhbGxiYWNrcygpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJiZWdhbkV4aXRGdWxsU2NyZWVuKClcbiIpOworICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dCgiYmVnYW5FeGl0RnVsbFNj
cmVlbigpXG4iKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmNsb3NlRnVsbFNjcmVl
bihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKLSAg
ICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0
ZXJhbCgiY2xvc2VGdWxsU2NyZWVuKClcbiIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkub3V0cHV0VGV4dCgiY2xvc2VGdWxsU2NyZWVuKClcbiIpOwogCiAgICAgaWYgKCFJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5oYXNDdXN0b21GdWxsU2NyZWVuQmVo
YXZpb3IoKSkgewogICAgICAgICBXS0J1bmRsZVBhZ2VXaWxsRXhpdEZ1bGxTY3JlZW4ocGFnZVJl
Zik7CkBAIC0xNzg2LDE1ICsxODQ5LDE1IEBAIHN0YXRpYyBib29sIGNvbXBhcmVCeVRhcmdldE5h
bWUoV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0ZW0xLCBXS0J1bmRsZUJhCiAgICAg
cmV0dXJuIHRvU1REKGFkb3B0V0soV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtQ29weVRhcmdl
dChpdGVtMSkpKSA8IHRvU1REKGFkb3B0V0soV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtQ29w
eVRhcmdldChpdGVtMikpKTsKIH0KIAotc3RhdGljIHZvaWQgZHVtcEJhY2tGb3J3YXJkTGlzdEl0
ZW0oV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0ZW0sIHVuc2lnbmVkIGluZGVudCwg
Ym9vbCBpc0N1cnJlbnRJdGVtKQorc3RhdGljIHZvaWQgZHVtcEJhY2tGb3J3YXJkTGlzdEl0ZW0o
V0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0ZW0sIHVuc2lnbmVkIGluZGVudCwgYm9v
bCBpc0N1cnJlbnRJdGVtLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewogICAgIHVu
c2lnbmVkIGNvbHVtbiA9IDA7CiAgICAgaWYgKGlzQ3VycmVudEl0ZW0pIHsKLSAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiY3Vy
ci0+Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiY3Vyci0+Iik7CiAg
ICAgICAgIGNvbHVtbiA9IDY7CiAgICAgfQogICAgIGZvciAodW5zaWduZWQgaSA9IGNvbHVtbjsg
aSA8IGluZGVudDsgaSsrKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmQoJyAnKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJyAn
KTsKIAogICAgIFdURjo6U3RyaW5nIHVybCA9IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5
U3RyaW5nKGFkb3B0V0soV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtQ29weVVSTChpdGVtKSku
Z2V0KCkpKSk7CiAgICAgaWYgKGhhc1ByZWZpeCh1cmwsICJmaWxlOiIpKSB7CkBAIC0xODA0LDIz
ICsxODY3LDIzIEBAIHN0YXRpYyB2b2lkIGR1bXBCYWNrRm9yd2FyZExpc3RJdGVtKFdLQnVuZGxl
QmFja0ZvcndhcmRMaXN0SXRlbVJlZiBpdGVtLCB1bnNpZ25lCiAgICAgICAgICAgICBzdGFydCA9
IDA7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHN0YXJ0ICs9IGRpcmVjdG9yeU5hbWUubGVu
Z3RoKCk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCkt
PmFwcGVuZExpdGVyYWwoIihmaWxlIHRlc3QpOiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodXJsLnN1YnN0cmluZyhzdGFydCkpOwor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIihmaWxlIHRlc3QpOiIpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh1cmwuc3Vic3RyaW5nKHN0YXJ0KSk7CiAgICAgfSBl
bHNlCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZCh1cmwpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh1cmwpOwogCiAgICAgV1RG
OjpTdHJpbmcgdGFyZ2V0ID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS0J1bmRsZUJhY2tGb3J3YXJk
TGlzdEl0ZW1Db3B5VGFyZ2V0KGl0ZW0pKSk7CiAgICAgaWYgKHRhcmdldC5sZW5ndGgoKSkgewot
ICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRM
aXRlcmFsKCIgKGluIGZyYW1lIFwiIik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0YXJnZXQpOwotICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJcIikiKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgKGluIGZyYW1lIFwiIik7CisgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRhcmdldCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiXCIpIik7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IE5lZWQgV0tCYWNrRm9y
d2FyZExpc3RJdGVtSXNUYXJnZXRJdGVtLgogICAgIGlmIChXS0J1bmRsZUJhY2tGb3J3YXJkTGlz
dEl0ZW1Jc1RhcmdldEl0ZW0oaXRlbSkpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiAgKipuYXYgdGFyZ2V0KioiKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgICoqbmF2IHRhcmdldCoqIik7CiAK
LSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJ1xu
Jyk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAKICAgICBpZiAoV0tSZXRhaW5Q
dHI8V0tBcnJheVJlZj4ga2lkcyA9IGFkb3B0V0soV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVt
Q29weUNoaWxkcmVuKGl0ZW0pKSkgewogICAgICAgICAvLyBTb3J0IHRvIGVsaW1pbmF0ZSBhcmJp
dHJhcnkgcmVzdWx0IG9yZGVyaW5nIHdoaWNoIGRlZmVhdHMgcmVwcm9kdWNpYmxlIHRlc3Rpbmcu
CkBAIC0xODMwLDEzICsxODkzLDEzIEBAIHN0YXRpYyB2b2lkIGR1bXBCYWNrRm9yd2FyZExpc3RJ
dGVtKFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBpdGVtLCB1bnNpZ25lCiAgICAgICAg
ICAgICBzb3J0ZWRLaWRzW2ldID0gc3RhdGljX2Nhc3Q8V0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJ
dGVtUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoa2lkcy5nZXQoKSwgaSkpOwogICAgICAgICBz
dGFibGVfc29ydChzb3J0ZWRLaWRzLmJlZ2luKCksIHNvcnRlZEtpZHMuZW5kKCksIGNvbXBhcmVC
eVRhcmdldE5hbWUpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkK
LSAgICAgICAgICAgIGR1bXBCYWNrRm9yd2FyZExpc3RJdGVtKHNvcnRlZEtpZHNbaV0sIGluZGVu
dCArIDQsIGZhbHNlKTsKKyAgICAgICAgICAgIGR1bXBCYWNrRm9yd2FyZExpc3RJdGVtKHNvcnRl
ZEtpZHNbaV0sIGluZGVudCArIDQsIGZhbHNlLCBzdHJpbmdCdWlsZGVyKTsKICAgICB9CiB9CiAK
LXZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wQmFja0ZvcndhcmRMaXN0KCkKK3ZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkdW1wQmFja0ZvcndhcmRMaXN0KFN0cmluZ0J1aWxkZXImIHN0cmlu
Z0J1aWxkZXIpCiB7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIo
KS0+YXBwZW5kTGl0ZXJhbCgiXG49PT09PT09PT09PT09PSBCYWNrIEZvcndhcmQgTGlzdCA9PT09
PT09PT09PT09PVxuIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcbj09PT09
PT09PT09PT09IEJhY2sgRm9yd2FyZCBMaXN0ID09PT09PT09PT09PT09XG4iKTsKIAogICAgIFdL
QnVuZGxlQmFja0ZvcndhcmRMaXN0UmVmIGxpc3QgPSBXS0J1bmRsZVBhZ2VHZXRCYWNrRm9yd2Fy
ZExpc3QobV9wYWdlKTsKIApAQCAtMTg2NSw5ICsxOTI4LDkgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmR1bXBCYWNrRm9yd2FyZExpc3QoKQogICAgIH0KIAogICAgIGZvciAoaW50IGkgPSBp
dGVtc1RvUHJpbnQuc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pCi0gICAgICAgIGR1bXBCYWNrRm9y
d2FyZExpc3RJdGVtKGl0ZW1zVG9QcmludFtpXS5nZXQoKSwgOCwgaSA9PSBjdXJyZW50SXRlbUlu
ZGV4KTsKKyAgICAgICAgZHVtcEJhY2tGb3J3YXJkTGlzdEl0ZW0oaXRlbXNUb1ByaW50W2ldLmdl
dCgpLCA4LCBpID09IGN1cnJlbnRJdGVtSW5kZXgsIHN0cmluZ0J1aWxkZXIpOwogCi0gICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT1cbiIpOwogfQogCiAjaWYgIVBMQVRGT1JNKE1BQykKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQ
YWdlLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlUGFnZS5oCmluZGV4IDc3MDhhNmYyNmZlZDdiZGVlYWM0MDY3ZmMxN2U1ZmNmNzQ3NmNlMjUu
LmQ1YjljODA3MWQxMjQ4MGU1NDNjNDhiMTQ1OGU4NWY5YjEyMTYyOTMgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmgK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZVBhZ2UuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tCdW5kbGVQYWdl
Lmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0J1bmRsZVNjcmlwdFdvcmxkLmg+CiAjaW5jbHVkZSA8
V2ViS2l0Mi9XS1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV1RSIHsKIApAQCAtNTAsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBw
cmVwYXJlKCk7CiAgICAgdm9pZCByZXNldEFmdGVyVGVzdCgpOwogCi0gICAgdm9pZCBkdW1wQmFj
a0ZvcndhcmRMaXN0KCk7CisgICAgdm9pZCBkdW1wQmFja0ZvcndhcmRMaXN0KFdURjo6U3RyaW5n
QnVpbGRlciYpOwogCiBwcml2YXRlOgogICAgIC8vIExvYWRlciBDbGllbnQKQEAgLTE2OSw4ICsx
NzAsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkQ2hhbmdlKFdLU3RyaW5nUmVmIG5vdGlmaWNh
dGlvbk5hbWUpOwogICAgIHZvaWQgZGlkQ2hhbmdlU2VsZWN0aW9uKFdLU3RyaW5nUmVmIG5vdGlm
aWNhdGlvbk5hbWUpOwogCi0gICAgdm9pZCBkdW1wQWxsRnJhbWVzVGV4dCgpOwotICAgIHZvaWQg
ZHVtcEFsbEZyYW1lU2Nyb2xsUG9zaXRpb25zKCk7CisgICAgdm9pZCBkdW1wQWxsRnJhbWVzVGV4
dChXVEY6OlN0cmluZ0J1aWxkZXImKTsKKyAgICB2b2lkIGR1bXBBbGxGcmFtZVNjcm9sbFBvc2l0
aW9ucyhXVEY6OlN0cmluZ0J1aWxkZXImKTsKIAogICAgIHZvaWQgcGxhdGZvcm1EaWRTdGFydFBy
b3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYpOwogCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAppbmRleCAx
MGZjY2MyM2U0NWNjMmM2NmQwNWI4Mjk0OTQ5Y2ViZWEwYTVmNmY2Li4zOGMyYWUwODUwMGNlOWNi
M2UzODUxNmM3MGRhNzIwNWNmM2UxN2U3IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKQEAgLTE0OSw5ICsxNDksNyBAQCB2
b2lkIFRlc3RSdW5uZXI6OndhaXRVbnRpbERvbmUoKQogdm9pZCBUZXN0UnVubmVyOjp3YWl0VG9E
dW1wV2F0Y2hkb2dUaW1lckZpcmVkKCkKIHsKICAgICBpbnZhbGlkYXRlV2FpdFRvRHVtcFdhdGNo
ZG9nVGltZXIoKTsKLSAgICBjb25zdCBjaGFyKiBtZXNzYWdlID0gIkZBSUw6IFRpbWVkIG91dCB3
YWl0aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNhbGxlZFxuIjsKLSAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQobWVzc2FnZSk7Ci0gICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJcbiIpOworICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KCJGQUlMOiBUaW1lZCBvdXQgd2FpdGlu
ZyBmb3Igbm90aWZ5RG9uZSB0byBiZSBjYWxsZWRcblxuIik7CiAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLmRvbmUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJBdGsuY3BwIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJBdGsuY3BwCmluZGV4IDUzZTc2ZGQ2OGI2OWFmNTg4MzZjMWFhM2E4Y2E2NDg5ZmQ4MDVl
MTkuLmQ3N2FhOWNiYTIwNzQxN2VkYTM2OTM1NDQ2YjMxMTY1M2QyOWM5NmMgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyQXRrLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAKQEAgLTU1LDcgKzU1LDcgQEAg
c3RhdGljIHZvaWQgcHJpbnRBY2Nlc3NpYmlsaXR5RXZlbnQoQXRrT2JqZWN0KiBhY2Nlc3NpYmxl
LCBjb25zdCBnY2hhciogc2lnbmFsTmEKIAogICAgIEdPd25QdHI8Z2NoYXI+IHNpZ25hbE5hbWVB
bmRWYWx1ZShzaWduYWxWYWx1ZSA/IGdfc3RyZHVwX3ByaW50ZigiJXMgPSAlcyIsIHNpZ25hbE5h
bWUsIHNpZ25hbFZhbHVlKSA6IGdfc3RyZHVwKHNpZ25hbE5hbWUpKTsKICAgICBHT3duUHRyPGdj
aGFyPiBhY2Nlc3NpYmlsaXR5RXZlbnRTdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCJBY2Nlc3NpYmls
aXR5IG9iamVjdCBlbWl0dGVkIFwiJXNcIiAvIE5hbWU6IFwiJXNcIiAvIFJvbGU6ICVkXG4iLCBz
aWduYWxOYW1lQW5kVmFsdWUuZ2V0KCksIG9iamVjdE5hbWUsIG9iamVjdFJvbGUpKTsKLSAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoYWNjZXNzaWJp
bGl0eUV2ZW50U3RyaW5nLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0
cHV0VGV4dChTdHJpbmc6OmZyb21VVEY4KGFjY2Vzc2liaWxpdHlFdmVudFN0cmluZy5nZXQoKSkp
OwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gYXhPYmplY3RFdmVudExpc3RlbmVyKEdTaWduYWxJbnZv
Y2F0aW9uSGludCAqc2lnbmFsSGludCwgZ3VpbnQgbnVtUGFyYW1WYWx1ZXMsIGNvbnN0IEdWYWx1
ZSAqcGFyYW1WYWx1ZXMsIGdwb2ludGVyIGRhdGEpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dEludm9jYXRpb24uY3BwCmluZGV4IDhmNjZjYzBkZDA1OWIyNjg4YjIxMTA4ODY3NWNkMDRkYjcx
MTM5MjkuLjVlMjI2NTg1NGIyNDFiYzMwMGY1ZGI0ZTU1MDZmMmZjY2RiZTVhM2MgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCkBAIC0zOCw2ICszOCw3IEBACiAj
aW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIFBMQVRGT1JN
KE1BQykKQEAgLTEwNSw2ICsxMDYsNyBAQCBUZXN0SW52b2NhdGlvbjo6VGVzdEludm9jYXRpb24o
Y29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKICAgICAsIG1fZ290RmluYWxNZXNzYWdlKGZh
bHNlKQogICAgICwgbV9nb3RSZXBhaW50KGZhbHNlKQogICAgICwgbV9lcnJvcihmYWxzZSkKKyAg
ICAsIG1fdGV4dE91dHB1dChXVEY6OmFkb3B0UHRyKG5ldyBXVEY6OlN0cmluZ0J1aWxkZXIoKSkp
CiAgICAgLCBtX3dlYlByb2Nlc3NJc1VucmVzcG9uc2l2ZShmYWxzZSkKIHsKIH0KQEAgLTE5Myw2
ICsxOTUsOCBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjppbnZva2UoKQogICAgIHVwZGF0ZUxheW91
dFR5cGUobV9wYXRoT3JVUkwuY19zdHIoKSk7CiAgICAgdXBkYXRlVGlsZWREcmF3aW5nRm9yQ3Vy
cmVudFRlc3QobV9wYXRoT3JVUkwuY19zdHIoKSk7CiAKKyAgICBtX3RleHRPdXRwdXQtPmNsZWFy
KCk7CisKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCZWdpblRlc3QiKSk7CiAgICAgV0tSZXRh
aW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gYmVnaW5UZXN0TWVzc2FnZUJvZHkgPSBhZG9w
dFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CiAKQEAgLTI4NCw3ICsyODgsNyBAQCB2
b2lkIFRlc3RJbnZvY2F0aW9uOjpkdW1wKGNvbnN0IGNoYXIqIHRleHRUb1N0ZG91dCwgY29uc3Qg
Y2hhciogdGV4dFRvU3RkZXJyLCBibwogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkdW1wUmVzdWx0
cygpCiB7Ci0gICAgZHVtcCh0b1dURlN0cmluZyhtX3RleHRPdXRwdXQuZ2V0KCkpLnV0ZjgoKS5k
YXRhKCkpOworICAgIGR1bXAobV90ZXh0T3V0cHV0LT50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwogCiAgICAgaWYgKG1fZHVtcFBpeGVscyAmJiBtX3BpeGVsUmVzdWx0KQogICAgICAgICBkdW1w
UGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChtX3BpeGVsUmVzdWx0LmdldCgpLCBtX3JlcGFp
bnRSZWN0cy5nZXQoKSk7CkBAIC0zMzYsOSArMzQwLDYgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6
ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5h
bWUKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25h
cnlHZXRUeXBlSUQoKSk7CiAgICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rp
b25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKIAotICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGV4dE91dHB1dEtleShBZG9wdFdLLCBXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGV4dE91dHB1dCIpKTsKLSAgICAgICAgbV90ZXh0
T3V0cHV0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0ZXh0T3V0cHV0S2V5LmdldCgpKSk7Ci0KICAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBpeGVsUmVzdWx0S2V5ID0gYWRvcHRXSyhXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGl4ZWxSZXN1bHQiKSk7CiAgICAgICAgIG1fcGl4
ZWxSZXN1bHQgPSBzdGF0aWNfY2FzdDxXS0ltYWdlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGl4ZWxSZXN1bHRLZXkuZ2V0KCkpKTsKICAgICAg
ICAgQVNTRVJUKCFtX3BpeGVsUmVzdWx0IHx8IG1fZHVtcFBpeGVscyk7CkBAIC0zNTAsNyArMzUx
LDEzIEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aGFyZWQoKS5ub3RpZnlEb25lKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKKyAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlRleHRPdXRw
dXQiKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdTdHJp
bmdHZXRUeXBlSUQoKSk7CisgICAgICAgIFdLU3RyaW5nUmVmIHRleHRPdXRwdXQgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBtX3RleHRPdXRwdXQtPmFw
cGVuZCh0b1dURlN0cmluZyh0ZXh0T3V0cHV0KSk7CisgICAgfQorCiAgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJCZWZvcmVVbmxvYWRSZXR1cm5WYWx1
ZSIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29s
ZWFuR2V0VHlwZUlEKCkpOwogICAgICAgICBXS0Jvb2xlYW5SZWYgYmVmb3JlVW5sb2FkUmV0dXJu
VmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uaCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uaAppbmRleCBlNDlkOWZkMGRlM2ZlNDljYmZkOGYx
OTcyYTZjZDJjZGVmZTdkNzE5Li4wMzY3NjZhNzAwZjViODJlYmZmYjY0MTQ3MjgyNWNjMWY2ZDdm
NGE0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmgK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5oCkBAIC0yOSw2ICsy
OSw4IEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIu
aD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV1RSIHsK
IApAQCAtNjcsNyArNjksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9nb3RSZXBhaW50OwogICAg
IGJvb2wgbV9lcnJvcjsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtX3RleHRPdXRw
dXQ7CisgICAgT3duUHRyPFdURjo6U3RyaW5nQnVpbGRlcj4gbV90ZXh0T3V0cHV0OwogICAgIFdL
UmV0YWluUHRyPFdLSW1hZ2VSZWY+IG1fcGl4ZWxSZXN1bHQ7CiAgICAgV0tSZXRhaW5QdHI8V0tB
cnJheVJlZj4gbV9yZXBhaW50UmVjdHM7CiAgICAgc3RkOjpzdHJpbmcgbV9lcnJvck1lc3NhZ2U7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178429</attachid>
            <date>2012-12-09 11:32:20 -0800</date>
            <delta_ts>2012-12-09 14:32:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104214-20121209202941.patch</filename>
            <type>text/plain</type>
            <size>84997</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MDg5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjllYzE3OTFmOTRmZTRhOTU2YzY0MjUyYzRiNDQzYWZl
MjBiOWU5ZS4uOGE1MjViMGNmMzhmYjA0OWFhYTA3ZmIwMWE0NDA5YTFhYzkzZTRhNiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMz
IEBACisyMDEyLTEyLTA2ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4K
KworICAgICAgICBbV1RSXSBNb3ZlIHRleHQgb3V0cHV0IGFjY3VtdWxhdGlvbiB0byB0aGUgVUlQ
cm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDQyMTQKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBJbnN0
ZWFkIG9mIGFjY3VtdWxhdGluZyB0ZXh0IG91dHB1dCBpbiB0aGUgSW5qZWN0ZWRCdW5kbGUgYW5k
IHRoZW4gc2VuZGluZyBpdCB0byB0aGUgVUlQcm9jZXNzIAorICAgICAgICBvbmNlIGEgdGVzdCBp
cyBmaW5pc2hlZCwgaW1tZWRpYXRlbHkgc2VuZCBhbnkgdGV4dCBvdXRwdXQgdG8gdGhlIFVJUHJv
Y2Vzcy4gVGhpcyB3aWxsIGFsbG93CisgICAgICAgIFdlYktpdFRlc3RSdW5uZXIgdG8gb3V0cHV0
IHRleHQgZnJvbSB0aGUgVUlQcm9jZXNzIGFzIHdlbGwuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDogUmVtb3ZlIHRoZSBoYW5k
bGluZyBvZiB0aGUgdGV4dCBvdXRwdXQKKyAgICAgICAgU3RyaW5nQnVpbGRlci4gQWRkIGEgbWV0
aG9kIHRvIHNlbmQgb3V0cHV0IHRvIHRoZSBVSVByb2Nlc3MuCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oOgorICAgICAgICAoSW5qZWN0
ZWRCdW5kbGUpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGVQYWdlLmNwcDogQ2hhbmdlIGNvZGUgdGhhdCBhcHBlbmRzIHRvIHRoZSBTdHJp
bmdCdWlsZGVyCisgICAgICAgIHRvIHVzZSB0aGUgbmV3IG91dHB1dFRleHQgbWV0aG9kLgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdl
Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVy
LmNwcDogRGl0dG8uCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9h
dGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJBdGsuY3BwOiBEaXR0by4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdEludm9j
YXRpb246OlRlc3RJbnZvY2F0aW9uKTogSW50aWFsaXplIHRoZSBTdHJpbmdCdWlsZGVyLgorICAg
ICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6aW52b2tlKTogQ2xlYXIgdGhlIFN0cmluZ0J1aWxk
ZXIgd2hlbiBhIG5ldyB0ZXN0cyBzdGFydHMuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9u
OjpkdW1wUmVzdWx0cyk6IG1fdGV4dE91dHB1dCBpcyBhIFN0cmluZ0J1aWxkZXIgbm93IHNvIHRo
ZQorICAgICAgICBtZXRob2Qgb2YgcHJpbnRpbmcgdGhlIHRleHQgaXMgc2xpZ2h0bHkgZGlmZmVy
ZW50LgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9t
SW5qZWN0ZWRCdW5kbGUpOiBIYW5kbGUgdGhlIG5ldyBUZXh0T3V0cHV0CisgICAgICAgIG1lc3Nh
Z2UgYnkgYXBwZW5kaW5nIHRoZSByZXN1bHRzIHRvIHRoZSBTdHJpbmdCdWlsZGVyLgorICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uaDoKKyAgICAgICAgKFRlc3RJbnZv
Y2F0aW9uKTogU3dpdGNoIHRoZSB0eXBlIG9mIG1fdGV4dE91dHB1dC4KKwogMjAxMi0xMi0wOSAg
WmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgogCiAgICAgICAgIFJlbW92ZSB0
ZXN0UnVubmVyLmRpc2FibGVJbWFnZUxvYWRpbmcoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAppbmRleCBmYTc5
MzlkM2VkN2YxOGFhOWNkMjE5OWViOTY3NjY4MDkwNWRjMzVlLi4xNGNiYzRjNmEyYWE2OTEwYzdh
YTAyNjIwMjQ2OTBmMjU4ZDcyOTNkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcApAQCAtODYsNyArODYsNiBA
QCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRsZVJl
ZiBidW5kbGUsIFdLQnVuZGxlUGFnZVJlZgogdm9pZCBJbmplY3RlZEJ1bmRsZTo6aW5pdGlhbGl6
ZShXS0J1bmRsZVJlZiBidW5kbGUsIFdLVHlwZVJlZiBpbml0aWFsaXphdGlvblVzZXJEYXRhKQog
ewogICAgIG1fYnVuZGxlID0gYnVuZGxlOwotICAgIG1fc3RyaW5nQnVpbGRlciA9IFdURjo6YWRv
cHRQdHIobmV3IFdURjo6U3RyaW5nQnVpbGRlcigpKTsKIAogICAgIFdLQnVuZGxlQ2xpZW50IGNs
aWVudCA9IHsKICAgICAgICAga1dLQnVuZGxlQ2xpZW50Q3VycmVudFZlcnNpb24sCkBAIC0yMTgs
OSArMjE3LDcgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZTo6Ym9vbGVhbkZvcktleShXS0RpY3Rpb25h
cnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQogICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB3a0tleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhrZXkp
KTsKICAgICBXS1R5cGVSZWYgdmFsdWUgPSBXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGRpY3Rp
b25hcnksIHdrS2V5LmdldCgpKTsKICAgICBpZiAoV0tHZXRUeXBlSUQodmFsdWUpICE9IFdLQm9v
bGVhbkdldFR5cGVJRCgpKSB7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJh
bCgiQm9vbGVhbiB2YWx1ZSBmb3Iga2V5IFwiIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIoKS0+
YXBwZW5kKGtleSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiXCIg
bm90IGZvdW5kIGluIGRpY3Rpb25hcnlcbiIpOworICAgICAgICBvdXRwdXRUZXh0KG1ha2VTdHJp
bmcoIkJvb2xlYW4gdmFsdWUgZm9yIGtleSIsIGtleSwgIiBub3QgZm91bmQgaW4gZGljdGlvbmFy
eVxuIikpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiBXS0Jvb2xl
YW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHZhbHVlKSk7CkBAIC0yMzIsNyAr
MjI5LDYgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6YmVnaW5UZXN0aW5nKFdLRGljdGlvbmFyeVJl
ZiBzZXR0aW5ncykKIAogICAgIG1fcGl4ZWxSZXN1bHQuY2xlYXIoKTsKICAgICBtX3JlcGFpbnRS
ZWN0cy5jbGVhcigpOwotICAgIG1fc3RyaW5nQnVpbGRlci0+Y2xlYXIoKTsKIAogICAgIG1fdGVz
dFJ1bm5lciA9IFRlc3RSdW5uZXI6OmNyZWF0ZSgpOwogICAgIG1fZ2NDb250cm9sbGVyID0gR0ND
b250cm9sbGVyOjpjcmVhdGUoKTsKQEAgLTI5MiwxMCArMjg4LDYgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZTo6ZG9uZSgpCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGRvbmVNZXNzYWdlTmFt
ZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRG9uZSIpKTsKICAgICBX
S1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBkb25lTWVzc2FnZUJvZHkoQWRvcHRX
SywgV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB0ZXh0T3V0cHV0S2V5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJUZXh0T3V0cHV0IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0ZXh0T3V0
cHV0KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG1fc3RyaW5nQnVpbGRl
ci0+dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgV0tEaWN0aW9uYXJ5QWRkSXRlbShk
b25lTWVzc2FnZUJvZHkuZ2V0KCksIHRleHRPdXRwdXRLZXkuZ2V0KCksIHRleHRPdXRwdXQuZ2V0
KCkpOwotICAgIAogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwaXhlbFJlc3VsdEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBpeGVsUmVzdWx0IikpOwog
ICAgIFdLRGljdGlvbmFyeUFkZEl0ZW0oZG9uZU1lc3NhZ2VCb2R5LmdldCgpLCBwaXhlbFJlc3Vs
dEtleS5nZXQoKSwgbV9waXhlbFJlc3VsdC5nZXQoKSk7CiAKQEAgLTMyMiwxMyArMzE0LDI0IEBA
IHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmNsb3NlT3RoZXJQYWdlcygpCiAgICAgICAgIFdLQnVuZGxl
UGFnZUNsb3NlKHBhZ2VzVG9DbG9zZVtpXSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRCdW5kbGU6OmR1
bXBCYWNrRm9yd2FyZExpc3RzRm9yQWxsUGFnZXMoKQordm9pZCBJbmplY3RlZEJ1bmRsZTo6ZHVt
cEJhY2tGb3J3YXJkTGlzdHNGb3JBbGxQYWdlcyhTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVy
KQogewogICAgIHNpemVfdCBzaXplID0gbV9wYWdlcy5zaXplKCk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIG1fcGFnZXNbaV0tPmR1bXBCYWNrRm9yd2Fy
ZExpc3QoKTsKKyAgICAgICAgbV9wYWdlc1tpXS0+ZHVtcEJhY2tGb3J3YXJkTGlzdChzdHJpbmdC
dWlsZGVyKTsKIH0KLSAgICAKKwordm9pZCBJbmplY3RlZEJ1bmRsZTo6b3V0cHV0VGV4dChjb25z
dCBTdHJpbmcmIG91dHB1dCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBUZXN0aW5nKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKG91dHB1dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlRleHRPdXRwdXQiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKG91dHB1dC51dGY4KCkuZGF0YSgpKSk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShtX2J1
bmRsZSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKK30KKwogdm9pZCBJ
bmplY3RlZEJ1bmRsZTo6cG9zdE5ld0JlZm9yZVVubG9hZFJldHVyblZhbHVlKGJvb2wgdmFsdWUp
CiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSIpKTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuaAppbmRleCA0MTQ2OWVjNzk2ZTkyNWE4NTBjNjQ4MTZmYzU2MTJhN2Q5MDkxODc4
Li4zOTVkMjA0NTZkNGFkY2FiN2M0MzBjMGMxZDAwN2Q2MjZmMGNlZjMwIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5o
CkBAIC0zMywxNiArMzMsMTIgQEAKICNpbmNsdWRlICJUZXh0SW5wdXRDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRy
Lmg+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCi0jaW5jbHVkZSA8c3N0cmVhbT4KLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFz
cyBTdHJpbmdCdWlsZGVyOwotfQotCiBuYW1lc3BhY2UgV1RSIHsKIAogY2xhc3MgSW5qZWN0ZWRC
dW5kbGVQYWdlOwpAQCAtNjcsMTAgKzYzLDkgQEAgcHVibGljOgogICAgIHNpemVfdCBwYWdlQ291
bnQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VzLnNpemUoKTsgfQogICAgIHZvaWQgY2xvc2VPdGhl
clBhZ2VzKCk7CiAKLSAgICB2b2lkIGR1bXBCYWNrRm9yd2FyZExpc3RzRm9yQWxsUGFnZXMoKTsK
KyAgICB2b2lkIGR1bXBCYWNrRm9yd2FyZExpc3RzRm9yQWxsUGFnZXMoU3RyaW5nQnVpbGRlciYp
OwogCiAgICAgdm9pZCBkb25lKCk7Ci0gICAgV1RGOjpTdHJpbmdCdWlsZGVyKiBzdHJpbmdCdWls
ZGVyKCkgeyByZXR1cm4gbV9zdHJpbmdCdWlsZGVyLmdldCgpOyB9CiAgICAgdm9pZCBzZXRQaXhl
bFJlc3VsdChXS0ltYWdlUmVmIGltYWdlKSB7IG1fcGl4ZWxSZXN1bHQgPSBpbWFnZTsgfQogICAg
IHZvaWQgc2V0UmVwYWludFJlY3RzKFdLQXJyYXlSZWYgcmVjdHMpIHsgbV9yZXBhaW50UmVjdHMg
PSByZWN0czsgfQogCkBAIC04Miw2ICs3Nyw3IEBAIHB1YmxpYzoKICAgICBib29sIHNob3VsZER1
bXBQaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX2R1bXBQaXhlbHM7IH0KICAgICBib29sIHVzZVdh
aXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkgY29uc3QgeyByZXR1cm4gbV91c2VXYWl0VG9EdW1wV2F0
Y2hkb2dUaW1lcjsgfQogICAgIAorICAgIHZvaWQgb3V0cHV0VGV4dChjb25zdCBTdHJpbmcmKTsK
ICAgICB2b2lkIHBvc3ROZXdCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZShib29sKTsKICAgICB2b2lk
IHBvc3RBZGRDaHJvbWVJbnB1dEZpZWxkKCk7CiAgICAgdm9pZCBwb3N0UmVtb3ZlQ2hyb21lSW5w
dXRGaWVsZCgpOwpAQCAtMTQ0LDggKzE0MCw2IEBAIHByaXZhdGU6CiAKICAgICBXS0J1bmRsZUZy
YW1lUmVmIG1fdG9wTG9hZGluZ0ZyYW1lOwogCi0gICAgT3duUHRyPFdURjo6U3RyaW5nQnVpbGRl
cj4gbV9zdHJpbmdCdWlsZGVyOwotICAgIAogICAgIGVudW0gU3RhdGUgewogICAgICAgICBJZGxl
LAogICAgICAgICBUZXN0aW5nLApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCmluZGV4IGY3ZjMxMGFj
MjIzNDdhODNjNjk1YTE3ZDgxNDRmNzc2MDViOThkNzYuLjIwNTMyNDM3ZWE0MTI4MjY0MWUzNzZi
YzJmN2UyNjcxYzFmYzM1NzYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAKQEAgLTEwNCw3ICsx
MDQsNyBAQCBzdGF0aWMgV1RGOjpTdHJpbmcgZHVtcFBhdGgoSlNHbG9iYWxDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIG5vZGVWYWx1ZSkKIAogICAgIEpTVmFsdWVSZWYgcGFyZW50Tm9k
ZSA9IHByb3BlcnR5VmFsdWUoY29udGV4dCwgbm9kZVZhbHVlLCAicGFyZW50Tm9kZSIpOwogCi0g
ICAgV1RGOjpTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgU3RyaW5nQnVpbGRlciBz
dHJpbmdCdWlsZGVyOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vZGVO
YW1lKSk7CiAKICAgICBpZiAocGFyZW50Tm9kZSAmJiBKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwg
cGFyZW50Tm9kZSkpIHsKQEAgLTE1Myw3ICsxNTMsNyBAQCBzdGF0aWMgV1RGOjpTdHJpbmcgcmFu
Z2VUb1N0cihXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3Js
ZAogICAgIGludCBzdGFydE9mZnNldCA9IHByb3BlcnR5VmFsdWVJbnQoY29udGV4dCwgcmFuZ2VP
YmplY3QsICJzdGFydE9mZnNldCIpOwogICAgIGludCBlbmRPZmZzZXQgPSBwcm9wZXJ0eVZhbHVl
SW50KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAiZW5kT2Zmc2V0Iik7CiAKLSAgICBXVEY6OlN0cmlu
Z0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJyYW5nZSBmcm9tICIpOwogICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKHN0YXJ0T2Zmc2V0KTsKICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiBvZiAiKTsKQEAgLTE4OSwxNCArMTg5LDE0IEBAIHN0YXRpYyBXVEY6
OlN0cmluZyBzdHlsZURlY1RvU3RyKFdLQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvblJlZiBzdHls
ZSkKICAgICAvLyBEdW1wUmVuZGVyVHJlZSBjYWxscyAtW0RPTUNTU1N0eWxlRGVjbGFyYXRpb24g
ZGVzY3JpcHRpb25dLCB3aGljaCBqdXN0IGR1bXBzIGNsYXNzIG5hbWUgYW5kIG9iamVjdCBhZGRy
ZXNzLgogICAgIC8vIE5vIGV4aXN0aW5nIHRlc3RzIGFjdHVhbGx5IGhpdCB0aGlzIGNvZGUgcGF0
aCBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIGJlY2F1c2UgV2ViQ29yZSBkb2Vzbid0IGNh
bGwKICAgICAvLyB0aGUgZWRpdGluZyBjbGllbnQgaWYgdGhlIHN0eWxpbmcgb3BlcmF0aW9uIHNv
dXJjZSBpcyBDb21tYW5kRnJvbURPTSBvciBDb21tYW5kRnJvbURPTVdpdGhVc2VySW50ZXJmYWNl
LgotICAgIFdURjo6U3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIFN0cmluZ0J1aWxk
ZXIgc3RyaW5nQnVpbGRlcjsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjxET01D
U1NTdHlsZURlY2xhcmF0aW9uIEFERFJFU1M+Iik7CiAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKTsKIH0KIAogc3RhdGljIFdURjo6U3RyaW5nIHNlY3VyaXR5T3JpZ2luVG9TdHIo
V0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4pCiB7Ci0gICAgV1RGOjpTdHJpbmdCdWlsZGVyIHN0
cmluZ0J1aWxkZXI7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCd7Jyk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJp
bmcoYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weVByb3RvY29sKG9yaWdpbikpKSk7CiAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwpAQCAtMjExLDcgKzIxMSw3IEBAIHN0
YXRpYyBXVEY6OlN0cmluZyBzZWN1cml0eU9yaWdpblRvU3RyKFdLU2VjdXJpdHlPcmlnaW5SZWYg
b3JpZ2luKQogc3RhdGljIFdURjo6U3RyaW5nIGZyYW1lVG9TdHIoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZShBZG9wdFdLLCBXS0J1
bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKLSAgICBXVEY6OlN0cmluZ0J1aWxkZXIgc3RyaW5n
QnVpbGRlcjsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgaWYgKFdLQnVu
ZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkpIHsKICAgICAgICAgaWYgKCFXS1N0cmluZ0lzRW1w
dHkobmFtZS5nZXQoKSkpIHsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgibWFpbiBmcmFtZSBcIiIpOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIHN0YXRpYyBpbmxpbmUgV1RG
OjpTdHJpbmcgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJlZiBmaWxlVXJsKQogICAg
ICAgICByZXR1cm4gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoZmlsZVVybCkp
KTsKIAogICAgIFN0cmluZyBwYXRoU3RyaW5nID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENv
cHlQYXRoKGZpbGVVcmwpKSk7Ci0gICAgV1RGOjpTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogCiAgICAgLy8gUmVtb3ZlIHRoZSBs
ZWFkaW5nIHBhdGggZnJvbSBmaWxlIHVybHMuCiAgICAgY29uc3Qgc2l6ZV90IGluZGV4QmFzZU5h
bWUgPSBwYXRoU3RyaW5nLnJldmVyc2VGaW5kKGRpdmlkZXIpOwpAQCAtMjg0LDEyICsyODQsMTIg
QEAgc3RhdGljIGlubGluZSBXVEY6OlN0cmluZyB1cmxTdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tV
UkxSZWYgZmlsZVVybCkKIAogc3RhdGljIEhhc2hNYXA8dWludDY0X3QsIFN0cmluZz4gYXNzaWdu
ZWRVcmxzQ2FjaGU7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wUmVzb3VyY2VVUkwodWludDY0
X3QgaWRlbnRpZmllcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBkdW1wUmVzb3VyY2VVUkwodWludDY0
X3QgaWRlbnRpZmllciwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKICAgICBpZiAo
YXNzaWduZWRVcmxzQ2FjaGUuY29udGFpbnMoaWRlbnRpZmllcikpCi0gICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChhc3NpZ25lZFVybHNDYWNo
ZS5nZXQoaWRlbnRpZmllcikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChhc3NpZ25l
ZFVybHNDYWNoZS5nZXQoaWRlbnRpZmllcikpOwogICAgIGVsc2UKLSAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiPHVua25vd24+
Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPHVua25vd24+Iik7CiB9
CiAKIEluamVjdGVkQnVuZGxlUGFnZTo6SW5qZWN0ZWRCdW5kbGVQYWdlKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlKQpAQCAtNDUzLDY2ICs0NTMsNzYgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJl
c2V0QWZ0ZXJUZXN0KCkKIC8vIExvYWRlciBDbGllbnQgQ2FsbGJhY2tzCiAKIC8vIFN0cmluZyBv
dXRwdXQgbXVzdCBiZSBpZGVudGljYWwgdG8gLVtXZWJGcmFtZSBfZHJ0X2Rlc2NyaXB0aW9uU3Vp
dGFibGVGb3JUZXN0UmVzdWx0XS4KLXN0YXRpYyB2b2lkIGR1bXBGcmFtZURlc2NyaXB0aW9uU3Vp
dGFibGVGb3JUZXN0UmVzdWx0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCitzdGF0aWMgdm9pZCBk
dW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS0J1bmRsZUZyYW1lUmVm
IGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewogICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBuYW1lKEFkb3B0V0ssIFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkp
OwogICAgIGlmIChXS0J1bmRsZUZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKSB7CiAgICAgICAgIGlm
IChXS1N0cmluZ0lzRW1wdHkobmFtZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIm1haW4gZnJhbWUi
KTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgibWFpbiBmcmFtZSIp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgibWFpbiBmcmFtZSBc
IiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmQodG9XVEZTdHJpbmcobmFtZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJyInKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJtYWluIGZyYW1lIFwiIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHRvV1RGU3RyaW5nKG5hbWUpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJyIn
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRW1wdHkobmFt
ZS5nZXQoKSkpIHsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxk
ZXIoKS0+YXBwZW5kTGl0ZXJhbCgiZnJhbWUgKGFub255bW91cykiKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmcmFtZSAoYW5vbnltb3VzKSIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIo
KS0+YXBwZW5kTGl0ZXJhbCgiZnJhbWUgXCIiKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcobmFtZSkpOwotICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnIicpOworICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiZnJhbWUgXCIiKTsKKyAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCh0b1dURlN0cmluZyhuYW1lKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJyIn
KTsKK30KKworc3RhdGljIHZvaWQgZHVtcExvYWRFdmVudChXS0J1bmRsZUZyYW1lUmVmIGZyYW1l
LCBjb25zdCBjaGFyKiBldmVudE5hbWUpCit7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWls
ZGVyOworICAgIGR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1l
LCBzdHJpbmdCdWlsZGVyKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtICIp
OworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGV2ZW50TmFtZSk7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoJ1xuJyk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQo
c3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGR1bXBS
ZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tVUkxSZXF1ZXN0UmVmIHJl
cXVlc3QpCitzdGF0aWMgaW5saW5lIHZvaWQgZHVtcFJlcXVlc3REZXNjcmlwdGlvblN1aXRhYmxl
Rm9yVGVzdFJlc3VsdChXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgU3RyaW5nQnVpbGRlciYgc3Ry
aW5nQnVpbGRlcikKIHsKICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhX
S1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4g
Zmlyc3RQYXJ0eSA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUZpcnN0UGFydHlGb3JDb29raWVz
KHJlcXVlc3QpKTsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaHR0cE1ldGhvZCA9IGFk
b3B0V0soV0tVUkxSZXF1ZXN0Q29weUhUVFBNZXRob2QocmVxdWVzdCkpOwogCi0gICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiPE5TVVJM
UmVxdWVzdCBVUkwgIik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxk
ZXIoKS0+YXBwZW5kKHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSk7Ci0gICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgi
LCBtYWluIGRvY3VtZW50IFVSTCAiKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmQodXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZpcnN0UGFydHku
Z2V0KCkpKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmRMaXRlcmFsKCIsIGh0dHAgbWV0aG9kICIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiPE5TVVJMUmVxdWVzdCBVUkwgIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
cGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1cmwuZ2V0KCkpKTsKKyAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiwgbWFpbiBkb2N1bWVudCBVUkwgIik7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQodXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZpcnN0UGFydHkuZ2V0KCkpKTsKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgaHR0cCBtZXRob2QgIik7CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VtcHR5KGh0dHBNZXRob2QuZ2V0KCkpKQotICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIobm9uZSkiKTsK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIobm9uZSkiKTsKICAgICBlbHNl
Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZCh0b1dURlN0cmluZyhodHRwTWV0aG9kKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHRvV1RGU3RyaW5nKGh0dHBNZXRob2QpKTsKIAotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnPicpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCc+Jyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wUmVzcG9uc2VEZXNjcmlwdGlvblN1
aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKQorc3RhdGljIGlu
bGluZSB2b2lkIGR1bXBSZXNwb25zZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdL
VVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7
CiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNv
cHlVUkwocmVzcG9uc2UpKTsKICAgICBpZiAoIXVybCkgewotICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIobnVsbCkiKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIobnVsbCkiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmRMaXRlcmFsKCI8TlNVUkxSZXNwb25zZSAiKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQocGF0aFN1aXRhYmxlRm9yVGVzdFJlc3Vs
dCh1cmwuZ2V0KCkpKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRl
cigpLT5hcHBlbmRMaXRlcmFsKCIsIGh0dHAgc3RhdHVzIGNvZGUgIik7Ci0gICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTnVtYmVyKFdLVVJMUmVzcG9u
c2VIVFRQU3RhdHVzQ29kZShyZXNwb25zZSkpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnPicpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiPE5TVVJMUmVzcG9uc2UgIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocGF0
aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1cmwuZ2V0KCkpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIiwgaHR0cCBzdGF0dXMgY29kZSAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZE51bWJlcihXS1VSTFJlc3BvbnNlSFRUUFN0YXR1c0NvZGUocmVzcG9uc2UpKTsKKyAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnPicpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHVtcEVy
cm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tFcnJvclJlZiBlcnJvcikKK3N0
YXRpYyBpbmxpbmUgdm9pZCBkdW1wRXJyb3JEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3Vs
dChXS0Vycm9yUmVmIGVycm9yLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewogICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvckRvbWFpbiA9IGFkb3B0V0soV0tFcnJvckNv
cHlEb21haW4oZXJyb3IpKTsKICAgICBpbnQgZXJyb3JDb2RlID0gV0tFcnJvckdldEVycm9yQ29k
ZShlcnJvcik7CkBAIC01MjYsMjAgKzUzNiwyMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcEVy
cm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tFcnJvclJlZiBlcnJvcikKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhlcnJvckRvbWFpbi5nZXQoKSwgIldl
YktpdFBvbGljeUVycm9yIikpCiAgICAgICAgIGVycm9yRG9tYWluID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0RXJyb3JEb21haW4iKSk7CiAKLSAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCI8TlNF
cnJvciBkb21haW4gIik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxk
ZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKGVycm9yRG9tYWluKSk7Ci0gICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiLCBjb2RlICIpOwot
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZE51bWJl
cihlcnJvckNvZGUpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPE5TRXJyb3Ig
ZG9tYWluICIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGVycm9yRG9t
YWluKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIGNvZGUgIik7CisgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIoZXJyb3JDb2RlKTsKIAogICAgIFdLUmV0YWluUHRy
PFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdLRXJyb3JDb3B5RmFpbGluZ1VSTChlcnJvcikpOwog
ICAgIGlmICh1cmwuZ2V0KCkpIHsKICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVy
bFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpOwotICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIs
IGZhaWxpbmcgVVJMIFwiIik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKLSAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCciJyk7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBmYWlsaW5nIFVSTCBcIiIpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJyInKTsKICAgICB9CiAKLSAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJz4nKTsKKyAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgnPicpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkU3RhcnRQ
cm92aXNpb25hbExvYWRGb3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVGcmFt
ZVJlZiBmcmFtZSwgV0tUeXBlUmVmKiwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKQEAgLTU3OCwy
OCArNTg4LDI5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlSW50ZW50Rm9y
RnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlCiAgICAgc3RhdGljX2Nhc3Q8SW5q
ZWN0ZWRCdW5kbGVQYWdlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpLT5tX2N1cnJl
bnRJbnRlbnRSZXF1ZXN0ID0gaW50ZW50UmVxdWVzdDsKICAgICBXS1JldGFpblB0cjxXS0J1bmRs
ZUludGVudFJlZj4gaW50ZW50KEFkb3B0V0ssIFdLQnVuZGxlSW50ZW50UmVxdWVzdENvcHlJbnRl
bnQoaW50ZW50UmVxdWVzdCkpOwogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmlu
Z0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiUmVjZWl2ZWQgV2ViIEludGVudDogYWN0aW9uPSIp
OworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIlJlY2VpdmVkIFdlYiBJbnRlbnQ6IGFjdGlvbj0iKTsKICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gd2tBY3Rpb24oQWRvcHRXSywgV0tCdW5kbGVJbnRlbnRDb3B5QWN0
aW9uKGludGVudC5nZXQoKSkpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdC
dWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyh3a0FjdGlvbi5nZXQoKSkpOwotICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiB0eXBl
PSIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHdrQWN0aW9uLmdldCgp
KSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgdHlwZT0iKTsKICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUeXBlKEFkb3B0V0ssIFdLQnVuZGxlSW50ZW50Q29weVR5
cGUoaW50ZW50LmdldCgpKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1
aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHdrVHlwZS5nZXQoKSkpOwotICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnXG4nKTsKKyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh3a1R5cGUuZ2V0KCkpKTsKKyAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgnXG4nKTsKIAogICAgIGNvbnN0IHNpemVfdCBudW1NZXNzYWdlUG9ydHMg
PSBXS0J1bmRsZUludGVudE1lc3NhZ2VQb3J0Q291bnQoaW50ZW50LmdldCgpKTsKICAgICBpZiAo
bnVtTWVzc2FnZVBvcnRzKSB7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIkhhdmUgIik7Ci0gICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZE51bWJlcihudW1NZXNzYWdlUG9y
dHMpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmRMaXRlcmFsKCIgcG9ydHNcbiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIkhhdmUgIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKG51bU1l
c3NhZ2VQb3J0cyk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHBvcnRz
XG4iKTsKICAgICB9CiAKICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tTZXJ2aWNlVXJsKEFk
b3B0V0ssIFdLQnVuZGxlSW50ZW50Q29weVNlcnZpY2UoaW50ZW50LmdldCgpKSk7CiAgICAgaWYg
KHdrU2VydmljZVVybCkgewogICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tTZXJ2
aWNlKEFkb3B0V0ssIFdLVVJMQ29weVN0cmluZyh3a1NlcnZpY2VVcmwuZ2V0KCkpKTsKICAgICAg
ICAgaWYgKHdrU2VydmljZSAmJiAhV0tTdHJpbmdJc0VtcHR5KHdrU2VydmljZS5nZXQoKSkpIHsK
LSAgICAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZExpdGVyYWwoIkV4cGxpY2l0IGludGVudCBzZXJ2aWNlOiAiKTsKLSAgICAgICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmlu
Zyh3a1NlcnZpY2UuZ2V0KCkpKTsKLSAgICAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnXG4nKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiRXhwbGljaXQgaW50ZW50IHNlcnZpY2U6ICIpOworICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcod2tTZXJ2aWNlLmdldCgpKSk7Cisg
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtNjA5LDQ0ICs2MjAsNDggQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2Vp
dmVJbnRlbnRGb3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGUKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG51bUV4dHJhS2V5czsgKytpKSB7CiAgICAgICAgIFdLU3RyaW5n
UmVmIHdrS2V5ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRl
eCh3a0V4dHJhS2V5cy5nZXQoKSwgaSkpOwogICAgICAgICBXS1N0cmluZ1JlZiB3a1ZhbHVlID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkod2tFeHRy
YXMuZ2V0KCksIHdrS2V5KSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIkV4dHJhc1siKTsKLSAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHdrS2V5
KSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZExpdGVyYWwoIl0gPSAiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0
cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHdrVmFsdWUpKTsKLSAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCdcbicpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkV4dHJhc1siKTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcod2tLZXkpKTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCJdID0gIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHRvV1RGU3RyaW5nKHdrVmFsdWUpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xu
Jyk7CiAgICAgfQogCiAgICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gd2tTdWdnZXN0aW9ucyhB
ZG9wdFdLLCBXS0J1bmRsZUludGVudENvcHlTdWdnZXN0aW9ucyhpbnRlbnQuZ2V0KCkpKTsKICAg
ICBjb25zdCBzaXplX3QgbnVtU3VnZ2VzdGlvbnMgPSBXS0FycmF5R2V0U2l6ZSh3a1N1Z2dlc3Rp
b25zLmdldCgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVN1Z2dlc3Rpb25zOyAr
K2kpIHsKICAgICAgICAgV0tTdHJpbmdSZWYgd2tTdWdnZXN0aW9uID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3a1N1Z2dlc3Rpb25zLmdldCgpLCBpKSk7
Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZExpdGVyYWwoIkhhdmUgc3VnZ2VzdGlvbiAiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHdrU3VnZ2VzdGlvbikp
OwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBl
bmQoJ1xuJyk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiSGF2ZSBzdWdn
ZXN0aW9uICIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh3a1N1
Z2dlc3Rpb24pKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgfQor
CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50
b1N0cmluZygpKTsKICNlbmRpZgogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6cmVnaXN0
ZXJJbnRlbnRTZXJ2aWNlRm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJh
bWVSZWYgZnJhbWUsIFdLSW50ZW50U2VydmljZUluZm9SZWYgc2VydmljZUluZm8sIFdLVHlwZVJl
ZiogdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAjaWYgRU5BQkxFKFdFQl9J
TlRFTlRTX1RBRykKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmRMaXRlcmFsKCJSZWdpc3RlcmVkIFdlYiBJbnRlbnQgU2VydmljZTogYWN0aW9uPSIp
OworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIlJlZ2lzdGVyZWQgV2ViIEludGVudCBTZXJ2aWNlOiBhY3Rpb249Iik7CiAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrQWN0aW9uKEFkb3B0V0ssIFdLSW50ZW50U2Vy
dmljZUluZm9Db3B5QWN0aW9uKHNlcnZpY2VJbmZvKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHdrQWN0aW9uLmdldCgp
KSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
TGl0ZXJhbCgiIHR5cGU9Iik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmco
d2tBY3Rpb24uZ2V0KCkpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB0eXBl
PSIpOwogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a1R5cGUoQWRvcHRXSywgV0tJbnRl
bnRTZXJ2aWNlSW5mb0NvcHlUeXBlKHNlcnZpY2VJbmZvKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHdrVHlwZS5nZXQo
KSkpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZExpdGVyYWwoIiB0aXRsZT0iKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmlu
Zyh3a1R5cGUuZ2V0KCkpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB0aXRs
ZT0iKTsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUaXRsZShBZG9wdFdLLCBXS0lu
dGVudFNlcnZpY2VJbmZvQ29weVRpdGxlKHNlcnZpY2VJbmZvKSk7Ci0gICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHdrVGl0bGUu
Z2V0KCkpKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmRMaXRlcmFsKCIgdXJsPSIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3Ry
aW5nKHdrVGl0bGUuZ2V0KCkpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB1
cmw9Iik7CiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrVXJsKEFkb3B0V0ssIFdLSW50ZW50
U2VydmljZUluZm9Db3B5SHJlZihzZXJ2aWNlSW5mbykpOwogICAgIGlmICh3a1VybCkKLSAgICAg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RG
U3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHdrVXJsLmdldCgpKSkpKTsKLSAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIgZGlz
cG9zaXRpb249Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXItPmFwcGVuZCh0b1dURlN0cmluZyhh
ZG9wdFdLKFdLVVJMQ29weVN0cmluZyh3a1VybC5nZXQoKSkpKSk7CisgICAgc3RyaW5nQnVpbGRl
ci0+YXBwZW5kTGl0ZXJhbCgiIGRpc3Bvc2l0aW9uPSIpOwogICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB3a0Rpc3Bvc2l0aW9uKEFkb3B0V0ssIFdLSW50ZW50U2VydmljZUluZm9Db3B5RGlz
cG9zaXRpb24oc2VydmljZUluZm8pKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcod2tEaXNwb3NpdGlvbi5nZXQoKSkpOwot
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnXG4n
KTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh3a0Rpc3Bvc2l0aW9uLmdl
dCgpKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICNlbmRp
ZgogfQogCkBAIC03NDcsMTkgKzc2MiwxNCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlk
U3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogCiAg
ICAgcGxhdGZvcm1EaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKGZyYW1lKTsKIAotICAg
IGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJh
bWVMb2FkQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgZHVtcEZyYW1lRGVzY3JpcHRpb25TdWl0YWJs
ZUZvclRlc3RSZXN1bHQoZnJhbWUpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
c3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIgLSBkaWRTdGFydFByb3Zpc2lvbmFsTG9h
ZEZvckZyYW1lXG4iKTsKLSAgICB9CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50
ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICAgICAgZHVt
cExvYWRFdmVudChmcmFtZSwgImRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUiKTsKIAog
ICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRvcExvYWRpbmdGcmFtZSgpKQogICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc2V0VG9wTG9hZGluZ0ZyYW1lKGZyYW1lKTsK
IAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRT
dG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKCkpIHsKLSAgICAgICAgZHVtcEZyYW1lRGVzY3JpcHRp
b25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJhbWUpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIgLSBzdG9wcGluZyBsb2Fk
IGluIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUgY2FsbGJhY2tcbiIpOwotICAgICAg
ICBXS0J1bmRsZUZyYW1lU3RvcExvYWRpbmcoZnJhbWUpOwotICAgIH0KKyAgICBpZiAoSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkU3RvcFByb3Zpc2lvbmFsRnJh
bWVMb2FkcygpKQorICAgICAgICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAic3RvcHBpbmcgbG9hZCBp
biBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lIGNhbGxiYWNrIik7CiB9CiAKIHZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25h
bExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQpAQCAtNzcwLDggKzc4MCw3IEBA
IHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92
aXNpb25hbExvYWRGb3JGcmFtZShXS0J1CiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0
KGZyYW1lKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmRMaXRlcmFsKCIgLSBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExv
YWRGb3JGcmFtZVxuIik7CisgICAgZHVtcExvYWRFdmVudChmcmFtZSwgImRpZFJlY2VpdmVTZXJ2
ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lIik7CiB9CiAKIHZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUoV0tC
dW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tFcnJvclJlZikKQEAgLTc3OSwxMCArNzg4LDggQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JG
cmFtZShXS0J1bmRsZUZyYW1lUmUKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5p
c1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkp
IHsKLSAgICAgICAgZHVtcEZyYW1lRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJh
bWUpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmRMaXRlcmFsKCIgLSBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yXG4iKTsKLSAg
ICB9CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3Vs
ZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICAgICAgZHVtcExvYWRFdmVudChmcmFtZSwg
ImRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3IiKTsKIAogICAgIGZyYW1lRGlkQ2hhbmdl
TG9jYXRpb24oZnJhbWUpOwogfQpAQCAtNzk1LDggKzgwMiw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpkaWRDb21taXRMb2FkRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKICAg
ICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBG
cmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZHVtcEZyYW1lRGVz
Y3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJhbWUpOwotICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiAtIGRpZENvbW1pdExv
YWRGb3JGcmFtZVxuIik7CisgICAgZHVtcExvYWRFdmVudChmcmFtZSwgImRpZENvbW1pdExvYWRG
b3JGcmFtZSIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmluaXNoUHJvZ3Jl
c3MoKQpAQCAtODA3LDQ2ICs4MTMsNDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZp
bmlzaFByb2dyZXNzKCkKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2soKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kTGl0ZXJhbCgicG9zdFByb2dyZXNzRmluaXNoZWROb3RpZmljYXRpb25cbiIpOworICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KCJwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5v
dGlmaWNhdGlvblxuIik7CiB9CiAKIGVudW0gRnJhbWVOYW1lUG9saWN5IHsgU2hvdWxkTm90SW5j
bHVkZUZyYW1lTmFtZSwgU2hvdWxkSW5jbHVkZUZyYW1lTmFtZSB9OwogCi1zdGF0aWMgdm9pZCBk
dW1wRnJhbWVTY3JvbGxQb3NpdGlvbihXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBGcmFtZU5hbWVQ
b2xpY3kgc2hvdWxkSW5jbHVkZUZyYW1lTmFtZSA9IFNob3VsZE5vdEluY2x1ZGVGcmFtZU5hbWUp
CitzdGF0aWMgdm9pZCBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihXS0J1bmRsZUZyYW1lUmVmIGZy
YW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBGcmFtZU5hbWVQb2xpY3kgc2hvdWxk
SW5jbHVkZUZyYW1lTmFtZSA9IFNob3VsZE5vdEluY2x1ZGVGcmFtZU5hbWUpCiB7CiAgICAgZG91
YmxlIHggPSBudW1lcmljV2luZG93UHJvcGVydHlWYWx1ZShmcmFtZSwgInBhZ2VYT2Zmc2V0Iik7
CiAgICAgZG91YmxlIHkgPSBudW1lcmljV2luZG93UHJvcGVydHlWYWx1ZShmcmFtZSwgInBhZ2VZ
T2Zmc2V0Iik7Ci0gICAgaWYgKGZhYnMoeCkgPiAwLjAwMDAwMDAxIHx8IGZhYnMoeSkgPiAwLjAw
MDAwMDAxKSB7Ci0gICAgICAgIGlmIChzaG91bGRJbmNsdWRlRnJhbWVOYW1lKSB7Ci0gICAgICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZShBZG9wdFdLLCBXS0J1bmRsZUZyYW1l
Q29weU5hbWUoZnJhbWUpKTsKLSAgICAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
dHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoImZyYW1lICciKTsKLSAgICAgICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmlu
ZyhuYW1lKSk7Ci0gICAgICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVp
bGRlcigpLT5hcHBlbmRMaXRlcmFsKCInICIpOwotICAgICAgICB9Ci0gICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoInNjcm9sbGVk
IHRvICIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmQoV1RGOjpTdHJpbmc6Om51bWJlcih4KSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnLCcpOwotICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoV1RGOjpTdHJpbmc6Om51
bWJlcih5KSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVy
KCktPmFwcGVuZCgnXG4nKTsKKyAgICBpZiAoZmFicyh4KSA8PSAwLjAwMDAwMDAxICYmIGZhYnMo
eSkgPD0gMC4wMDAwMDAwMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHNob3VsZEluY2x1
ZGVGcmFtZU5hbWUpIHsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWUoQWRv
cHRXSywgV0tCdW5kbGVGcmFtZUNvcHlOYW1lKGZyYW1lKSk7CisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiZnJhbWUgJyIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCh0b1dURlN0cmluZyhuYW1lKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiJyAiKTsKICAgICB9CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJzY3JvbGxl
ZCB0byAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChXVEY6OlN0cmluZzo6bnVtYmVyKHgp
KTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnLCcpOworICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKFdURjo6U3RyaW5nOjpudW1iZXIoeSkpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdc
bicpOwogfQogCi1zdGF0aWMgdm9pZCBkdW1wRGVzY2VuZGFudEZyYW1lU2Nyb2xsUG9zaXRpb25z
KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCitzdGF0aWMgdm9pZCBkdW1wRGVzY2VuZGFudEZyYW1l
U2Nyb2xsUG9zaXRpb25zKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkZXImIHN0
cmluZ0J1aWxkZXIpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gY2hpbGRGcmFtZXMo
QWRvcHRXSywgV0tCdW5kbGVGcmFtZUNvcHlDaGlsZEZyYW1lcyhmcmFtZSkpOwogICAgIHNpemVf
dCBzaXplID0gV0tBcnJheUdldFNpemUoY2hpbGRGcmFtZXMuZ2V0KCkpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFdLQnVuZGxlRnJhbWVSZWYgc3Vi
ZnJhbWUgPSBzdGF0aWNfY2FzdDxXS0J1bmRsZUZyYW1lUmVmPihXS0FycmF5R2V0SXRlbUF0SW5k
ZXgoY2hpbGRGcmFtZXMuZ2V0KCksIGkpKTsKLSAgICAgICAgZHVtcEZyYW1lU2Nyb2xsUG9zaXRp
b24oc3ViZnJhbWUsIFNob3VsZEluY2x1ZGVGcmFtZU5hbWUpOwotICAgICAgICBkdW1wRGVzY2Vu
ZGFudEZyYW1lU2Nyb2xsUG9zaXRpb25zKHN1YmZyYW1lKTsKKyAgICAgICAgZHVtcEZyYW1lU2Ny
b2xsUG9zaXRpb24oc3ViZnJhbWUsIHN0cmluZ0J1aWxkZXIsIFNob3VsZEluY2x1ZGVGcmFtZU5h
bWUpOworICAgICAgICBkdW1wRGVzY2VuZGFudEZyYW1lU2Nyb2xsUG9zaXRpb25zKHN1YmZyYW1l
LCBzdHJpbmdCdWlsZGVyKTsKICAgICB9CiB9CiAKLXZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpk
dW1wQWxsRnJhbWVTY3JvbGxQb3NpdGlvbnMoKQordm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1
bXBBbGxGcmFtZVNjcm9sbFBvc2l0aW9ucyhTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQog
ewogICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUo
bV9wYWdlKTsKLSAgICBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihmcmFtZSk7Ci0gICAgZHVtcERl
c2NlbmRhbnRGcmFtZVNjcm9sbFBvc2l0aW9ucyhmcmFtZSk7CisgICAgZHVtcEZyYW1lU2Nyb2xs
UG9zaXRpb24oZnJhbWUsIHN0cmluZ0J1aWxkZXIpOworICAgIGR1bXBEZXNjZW5kYW50RnJhbWVT
Y3JvbGxQb3NpdGlvbnMoZnJhbWUsIHN0cmluZ0J1aWxkZXIpOwogfQogCiBzdGF0aWMgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IHRvSlMoY29uc3QgY2hhciogc3RyaW5nKQpAQCAtODczLDcgKzg4
MCw3IEBAIHN0YXRpYyBib29sIGhhc0RvY3VtZW50RWxlbWVudChXS0J1bmRsZUZyYW1lUmVmIGZy
YW1lKQogICAgIHJldHVybiBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGRvY3VtZW50RWxlbWVu
dFZhbHVlKTsKIH0KIAotc3RhdGljIHZvaWQgZHVtcEZyYW1lVGV4dChXS0J1bmRsZUZyYW1lUmVm
IGZyYW1lKQorc3RhdGljIHZvaWQgZHVtcEZyYW1lVGV4dChXS0J1bmRsZUZyYW1lUmVmIGZyYW1l
LCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewogICAgIC8vIElmIHRoZSBmcmFtZSBk
b2Vzbid0IGhhdmUgYSBkb2N1bWVudCBlbGVtZW50LCBpdHMgaW5uZXIgdGV4dCB3aWxsIGJlIGFu
IGVtcHR5IHN0cmluZywgc28KICAgICAvLyB3ZSdsbCBlbmQgdXAganVzdCBhcHBlbmRpbmcgYSBz
aW5nbGUgbmV3bGluZSBiZWxvdy4gQnV0IER1bXBSZW5kZXJUcmVlIGRvZXNuJ3QgYXBwZW5kCkBA
IC04ODIsMzAgKzg4OSwzMiBAQCBzdGF0aWMgdm9pZCBkdW1wRnJhbWVUZXh0KFdLQnVuZGxlRnJh
bWVSZWYgZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB0ZXh0KEFkb3B0V0ssIFdLQnVuZGxlRnJhbWVDb3B5SW5uZXJUZXh0KGZyYW1lKSk7Ci0g
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RG
U3RyaW5nKHRleHQpKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRl
cigpLT5hcHBlbmQoJ1xuJyk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmco
dGV4dCkpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogfQogCi1zdGF0aWMgdm9p
ZCBkdW1wRGVzY2VuZGFudEZyYW1lc1RleHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKK3N0YXRp
YyB2b2lkIGR1bXBEZXNjZW5kYW50RnJhbWVzVGV4dChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBT
dHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewogICAgIFdLUmV0YWluUHRyPFdLQXJyYXlS
ZWY+IGNoaWxkRnJhbWVzKEFkb3B0V0ssIFdLQnVuZGxlRnJhbWVDb3B5Q2hpbGRGcmFtZXMoZnJh
bWUpKTsKICAgICBzaXplX3Qgc2l6ZSA9IFdLQXJyYXlHZXRTaXplKGNoaWxkRnJhbWVzLmdldCgp
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBXS0J1
bmRsZUZyYW1lUmVmIHN1YmZyYW1lID0gc3RhdGljX2Nhc3Q8V0tCdW5kbGVGcmFtZVJlZj4oV0tB
cnJheUdldEl0ZW1BdEluZGV4KGNoaWxkRnJhbWVzLmdldCgpLCBpKSk7CiAgICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJmcmFtZU5hbWUoQWRvcHRXSywgV0tCdW5kbGVGcmFtZUNv
cHlOYW1lKHN1YmZyYW1lKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIlxuLS0tLS0tLS1cbkZyYW1lOiAnIik7Ci0gICAg
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dU
RlN0cmluZyhzdWJmcmFtZU5hbWUpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiJ1xuLS0tLS0tLS1cbiIpOwotICAgICAg
ICBkdW1wRnJhbWVUZXh0KHN1YmZyYW1lKTsKLSAgICAgICAgZHVtcERlc2NlbmRhbnRGcmFtZXNU
ZXh0KHN1YmZyYW1lKTsKKworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlxu
LS0tLS0tLS1cbkZyYW1lOiAnIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RG
U3RyaW5nKHN1YmZyYW1lTmFtZSkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIidcbi0tLS0tLS0tXG4iKTsKKworICAgICAgICBkdW1wRnJhbWVUZXh0KHN1YmZyYW1lLCBz
dHJpbmdCdWlsZGVyKTsKKyAgICAgICAgZHVtcERlc2NlbmRhbnRGcmFtZXNUZXh0KHN1YmZyYW1l
LCBzdHJpbmdCdWlsZGVyKTsKICAgICB9CiB9CiAKLXZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpk
dW1wQWxsRnJhbWVzVGV4dCgpCit2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcEFsbEZyYW1l
c1RleHQoU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKICAgICBXS0J1bmRsZUZyYW1l
UmVmIGZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKG1fcGFnZSk7Ci0gICAgZHVtcEZy
YW1lVGV4dChmcmFtZSk7Ci0gICAgZHVtcERlc2NlbmRhbnRGcmFtZXNUZXh0KGZyYW1lKTsKKyAg
ICBkdW1wRnJhbWVUZXh0KGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKKyAgICBkdW1wRGVzY2VuZGFu
dEZyYW1lc1RleHQoZnJhbWUsIHN0cmluZ0J1aWxkZXIpOwogfQogCiB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6ZHVtcCgpCkBAIC05MjMsMjcgKzkzMiwyOSBAQCB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6ZHVtcCgpCiAgICAgaWYgKHVybC5maW5kKCJkdW1wQXNUZXh0LyIpICE9IFdURjo6bm90
Rm91bmQpCiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPmR1
bXBBc1RleHQoZmFsc2UpOwogCisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworCiAg
ICAgc3dpdGNoIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT53aGF0VG9E
dW1wKCkpIHsKICAgICBjYXNlIFRlc3RSdW5uZXI6OlJlbmRlclRyZWU6IHsKICAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRleHQoQWRvcHRXSywgV0tCdW5kbGVQYWdlQ29weVJlbmRl
clRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKG1fcGFnZSkpOwotICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcodGV4dCkp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh0ZXh0KSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFRlc3RSdW5uZXI6Ok1haW5GcmFtZVRleHQ6Ci0g
ICAgICAgIGR1bXBGcmFtZVRleHQoV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKG1fcGFnZSkpOwor
ICAgICAgICBkdW1wRnJhbWVUZXh0KFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2UpLCBz
dHJpbmdCdWlsZGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUZXN0UnVubmVyOjpBbGxG
cmFtZXNUZXh0OgotICAgICAgICBkdW1wQWxsRnJhbWVzVGV4dCgpOworICAgICAgICBkdW1wQWxs
RnJhbWVzVGV4dChzdHJpbmdCdWlsZGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAg
aWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBBbGxG
cmFtZVNjcm9sbFBvc2l0aW9ucygpKQotICAgICAgICBkdW1wQWxsRnJhbWVTY3JvbGxQb3NpdGlv
bnMoKTsKKyAgICAgICAgZHVtcEFsbEZyYW1lU2Nyb2xsUG9zaXRpb25zKHN0cmluZ0J1aWxkZXIp
OwogICAgIGVsc2UgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBNYWluRnJhbWVTY3JvbGxQb3NpdGlvbigpKQotICAgICAgICBkdW1wRnJhbWVTY3Jv
bGxQb3NpdGlvbihXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKSk7CisgICAgICAgIGR1
bXBGcmFtZVNjcm9sbFBvc2l0aW9uKFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2UpLCBz
dHJpbmdCdWlsZGVyKTsKIAogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wQmFja0ZvcndhcmRMaXN0c0ZvckFsbFdpbmRvd3MoKSkKLSAgICAg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmR1bXBCYWNrRm9yd2FyZExpc3RzRm9yQWxsUGFn
ZXMoKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmR1bXBCYWNrRm9yd2FyZExp
c3RzRm9yQWxsUGFnZXMoc3RyaW5nQnVpbGRlcik7CiAKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnNob3VsZER1bXBQaXhlbHMoKSAmJiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUGl4ZWxzKCkpIHsKICAgICAgICAgV0tTbmFwc2hvdE9w
dGlvbnMgb3B0aW9ucyA9IGtXS1NuYXBzaG90T3B0aW9uc1NoYXJlYWJsZSB8IGtXS1NuYXBzaG90
T3B0aW9uc0luVmlld0Nvb3JkaW5hdGVzOwpAQCAtOTU1LDYgKzk2Niw3IEBAIHZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpkdW1wKCkKICAgICAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zZXRSZXBhaW50UmVjdHMoYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5VHJhY2tlZFJlcGFpbnRS
ZWN0cyhtX3BhZ2UpKS5nZXQoKSk7CiAgICAgfQogCisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuZG9uZSgpOwogfQogCkBAIC05NjMsMTAgKzk3NSw4IEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hMb2FkRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSkKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVz
dFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgZHVt
cEZyYW1lRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJhbWUpOwotICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIg
LSBkaWRGaW5pc2hMb2FkRm9yRnJhbWVcbiIpOwotICAgIH0KKyAgICBpZiAoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygp
KQorICAgICAgICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAiZGlkRmluaXNoTG9hZEZvckZyYW1lIik7
CiAKICAgICBmcmFtZURpZENoYW5nZUxvY2F0aW9uKGZyYW1lLCAvKnNob3VsZER1bXAqLyB0cnVl
KTsKIH0KQEAgLTk3NiwxMCArOTg2LDggQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZh
aWxMb2FkV2l0aEVycm9yRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0sKICAgICBp
ZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5z
aG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgZHVtcEZyYW1lRGVzY3Jp
cHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJhbWUpOwotICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIgLSBkaWRGYWlsTG9h
ZFdpdGhFcnJvclxuIik7Ci0gICAgfQorICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgICAgIGR1
bXBMb2FkRXZlbnQoZnJhbWUsICJkaWRGYWlsTG9hZFdpdGhFcnJvciIpOwogCiAgICAgZnJhbWVE
aWRDaGFuZ2VMb2NhdGlvbihmcmFtZSk7CiB9CkBAIC05ODksMTkgKzk5NywyMSBAQCB2b2lkIElu
amVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUoV0tTdHJpbmdSZWYgdGl0
bGUsIFdLQnVuZGxlRnJhbQogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVz
dFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOwogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5z
aG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgZHVtcEZyYW1lRGVzY3Jp
cHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJhbWUpOwotICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIgLSBkaWRSZWNlaXZl
VGl0bGU6ICIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRl
cigpLT5hcHBlbmQodG9XVEZTdHJpbmcodGl0bGUpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCdcbicpOworICAgICAgICBkdW1wRnJh
bWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFtZSwgc3RyaW5nQnVpbGRlcik7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gZGlkUmVjZWl2ZVRpdGxl
OiAiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcodGl0bGUpKTsK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgfQogCi0gICAgaWYgKCFJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wVGl0bGVDaGFu
Z2VzKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFRpdGxlQ2hhbmdlcygpKSB7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVElUTEUgQ0hBTkdFRDogJyIpOworICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh0aXRsZSkpOworICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZExpdGVyYWwoIidcbiIpOworICAgIH0KIAotICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIlRJVExFIENIQU5HRUQ6ICci
KTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQo
dG9XVEZTdHJpbmcodGl0bGUpKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCInXG4iKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIElu
amVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2xlYXJXaW5kb3dGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVm
IGZyYW1lLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkKQpAQCAtMTAzOSw4ICsxMDQ5LDcg
QEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENhbmNlbENsaWVudFJlZGlyZWN0Rm9yRnJh
bWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgZHVtcEZyYW1lRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1
bHQoZnJhbWUpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCkt
PmFwcGVuZExpdGVyYWwoIiAtIGRpZENhbmNlbENsaWVudFJlZGlyZWN0Rm9yRnJhbWVcbiIpOwor
ICAgIGR1bXBMb2FkRXZlbnQoZnJhbWUsICJkaWRDYW5jZWxDbGllbnRSZWRpcmVjdEZvckZyYW1l
Iik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUGVyZm9ybUNsaWVudFJlZGly
ZWN0Rm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tVUkxSZWYgdXJsLCBkb3VibGUg
ZGVsYXksIGRvdWJsZSBkYXRlKQpAQCAtMTA1MSwxMCArMTA2MCwxMiBAQCB2b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdEZvckZyYW1lKFdLQnVuZGxlRnJh
bWVSZWYgZnJhbQogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIo
KS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChmcmFtZSk7Ci0gICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgi
IC0gd2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFRvVVJMOiAiKTsKLSAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQocGF0aFN1aXRhYmxlRm9yVGVzdFJl
c3VsdCh1cmwpKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmRMaXRlcmFsKCIgXG4iKTsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CisgICAgZHVtcEZyYW1lRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJhbWUsIHN0
cmluZ0J1aWxkZXIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gd2lsbFBl
cmZvcm1DbGllbnRSZWRpcmVjdFRvVVJMOiAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChw
YXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybCkpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiIFxuIik7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQo
c3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OmRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1l
LCBXS1NhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlIHR5cGUpCkBAIC0xMDY2LDE3ICsxMDc3LDE3
IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFt
ZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFj
a3MoKSkgewotICAgICAgICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3Vs
dChmcmFtZSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVy
KCktPmFwcGVuZExpdGVyYWwoIiAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lXG4iKTsK
LSAgICB9CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICAgICAgZHVtcExvYWRFdmVudChmcmFt
ZSwgImRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lIik7CiAKICAgICB1bnNpZ25lZCBwZW5k
aW5nRnJhbWVVbmxvYWRFdmVudHMgPSBXS0J1bmRsZUZyYW1lR2V0UGVuZGluZ1VubG9hZENvdW50
KGZyYW1lKTsKICAgICBpZiAocGVuZGluZ0ZyYW1lVW5sb2FkRXZlbnRzKSB7Ci0gICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChmcmFtZVRvU3Ry
KGZyYW1lKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVy
KCktPmFwcGVuZExpdGVyYWwoIiAtIGhhcyAiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTnVtYmVyKHBlbmRpbmdGcmFtZVVubG9hZEV2
ZW50cyk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCkt
PmFwcGVuZExpdGVyYWwoIiBvbnVubG9hZCBoYW5kbGVyKHMpXG4iKTsKKyAgICAgICAgU3RyaW5n
QnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChmcmFt
ZVRvU3RyKGZyYW1lKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0g
aGFzICIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcihwZW5kaW5nRnJhbWVV
bmxvYWRFdmVudHMpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBvbnVu
bG9hZCBoYW5kbGVyKHMpXG4iKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91
dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAgICB9CiB9CiAKQEAgLTEwODUs
MjggKzEwOTYsMjYgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEhhbmRsZU9ubG9hZEV2
ZW50c0ZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiAgICAgaWYgKCFJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1l
TG9hZENhbGxiYWNrcygpKSB7Ci0gICAgICAgIGR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVG
b3JUZXN0UmVzdWx0KGZyYW1lKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0
cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9y
RnJhbWVcbiIpOwotICAgIH0KKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RS
dW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgICAgICBkdW1wTG9h
ZEV2ZW50KGZyYW1lLCAiZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUiKTsKIH0KIAogdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnRGb3JGcmFtZShX
S0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCi0gICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwo
ImRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnRcbiIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkub3V0cHV0VGV4dCgiZGlkRGlzcGxheUluc2VjdXJlQ29udGVudFxuIik7CiB9CiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSdW5JbnNlY3VyZUNvbnRlbnRGb3JGcmFtZShX
S0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCi0gICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwo
ImRpZFJ1bkluc2VjdXJlQ29udGVudFxuIik7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5vdXRwdXRUZXh0KCJkaWRSdW5JbnNlY3VyZUNvbnRlbnRcbiIpOwogfQogCiB2b2lkIElu
amVjdGVkQnVuZGxlUGFnZTo6ZGlkRGV0ZWN0WFNTRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSkKIHsKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJkaWREZXRlY3RYU1NcbiIp
OworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dCgiZGlkRGV0ZWN0
WFNTXG4iKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEluaXRpYXRlTG9hZEZv
clJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVGcmFtZVJlZiwgdWludDY0X3QgaWRl
bnRpZmllciwgV0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIGJvb2wpCkBAIC0xMTM3LDEyICsxMTQ2
LDE0IEBAIFdLVVJMUmVxdWVzdFJlZiBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZW5kUmVxdWVz
dEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiwgV0tCCiB7CiAgICAgaWYgKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkKICAgICAgICAgJiYgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7
Ci0gICAgICAgIGR1bXBSZXNvdXJjZVVSTChpZGVudGlmaWVyKTsKLSAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiIC0gd2lsbFNl
bmRSZXF1ZXN0ICIpOwotICAgICAgICBkdW1wUmVxdWVzdERlc2NyaXB0aW9uU3VpdGFibGVGb3JU
ZXN0UmVzdWx0KHJlcXVlc3QpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIgcmVkaXJlY3RSZXNwb25zZSAiKTsKLSAgICAg
ICAgZHVtcFJlc3BvbnNlRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVzcG9uc2Up
OwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBl
bmQoJ1xuJyk7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICAgICAg
ZHVtcFJlc291cmNlVVJMKGlkZW50aWZpZXIsIHN0cmluZ0J1aWxkZXIpOworICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIHdpbGxTZW5kUmVxdWVzdCAiKTsKKyAgICAgICAg
ZHVtcFJlcXVlc3REZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXF1ZXN0LCBzdHJp
bmdCdWlsZGVyKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgcmVkaXJl
Y3RSZXNwb25zZSAiKTsKKyAgICAgICAgZHVtcFJlc3BvbnNlRGVzY3JpcHRpb25TdWl0YWJsZUZv
clRlc3RSZXN1bHQocmVzcG9uc2UsIHN0cmluZ0J1aWxkZXIpOworICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1
dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAgICB9CiAKICAgICBpZiAoSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSAmJiBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkudGVzdFJ1bm5lcigpLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCgpKQpAQCAtMTE1
MCw3ICsxMTYxLDcgQEAgV0tVUkxSZXF1ZXN0UmVmIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNl
bmRSZXF1ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmLCBXS0IKIAogICAgIFdLUmV0YWluUHRy
PFdLVVJMUmVmPiByZWRpcmVjdFVSTCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwocmVz
cG9uc2UpKTsKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmco
KSAmJiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT53aWxsU2VuZFJlcXVl
c3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoKSAmJiByZWRpcmVjdFVSTCkgewotICAgICAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJSZXR1
cm5pbmcgbnVsbCBmb3IgdGhpcyByZWRpcmVjdFxuIik7CisgICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5vdXRwdXRUZXh0KCJSZXR1cm5pbmcgbnVsbCBmb3IgdGhpcyByZWRpcmVjdFxu
Iik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMTE3NCw5ICsxMTg1LDExIEBAIFdL
VVJMUmVxdWVzdFJlZiBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZW5kUmVxdWVzdEZvckZyYW1l
KFdLQnVuZGxlUGFnZVJlZiwgV0tCCiAgICAgICAgICAgICBtYWluRnJhbWVJc0V4dGVybmFsID0g
aXNIVFRQT3JIVFRQU1NjaGVtZShtYWluRnJhbWVTY2hlbWUuZ2V0KCkpICYmICFpc0xvY2FsSG9z
dChtYWluRnJhbWVIb3N0LmdldCgpKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIW1haW5GcmFt
ZUlzRXh0ZXJuYWwpIHsKLSAgICAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIkJsb2NrZWQgYWNjZXNzIHRvIGV4dGVybmFsIFVS
TCAiKTsKLSAgICAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVy
KCktPmFwcGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKLSAgICAgICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnXG4nKTsKKyAgICAgICAg
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiQmxvY2tlZCBhY2Nlc3MgdG8gZXh0ZXJuYWwgVVJMICIpOworICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcodXJsU3RyaW5nKSk7Cisg
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7
CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KQEAgLTExOTEsMTAgKzEy
MDQsMTIgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVSZXNwb25zZUZvclJl
c291cmNlKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGUKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNv
dXJjZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBkdW1wUmVzb3VyY2VVUkwoaWRlbnRpZmll
cik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZExpdGVyYWwoIiAtIGRpZFJlY2VpdmVSZXNwb25zZSAiKTsKLSAgICAgICAgZHVtcFJlc3Bv
bnNlRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVzcG9uc2UpOwotICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJ1xuJyk7Cisg
ICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICAgICAgZHVtcFJlc291cmNl
VVJMKGlkZW50aWZpZXIsIHN0cmluZ0J1aWxkZXIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIiAtIGRpZFJlY2VpdmVSZXNwb25zZSAiKTsKKyAgICAgICAgZHVtcFJlc3Bv
bnNlRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVzcG9uc2UsIHN0cmluZ0J1aWxk
ZXIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsK
ICAgICB9CiAKIApAQCAtMTIwNSwxMCArMTIyMCwxMiBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFn
ZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRs
ZQogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJM
Q29weUxhc3RQYXRoQ29tcG9uZW50KHVybC5nZXQoKSkpOwogICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtaW1lVHlwZVN0cmluZyA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlNSU1FVHlw
ZShyZXNwb25zZSkpOwogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxk
ZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykpOwotICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiBoYXMgTUlNRSB0eXBl
ICIpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZCh0b1dURlN0cmluZyhtaW1lVHlwZVN0cmluZykpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnXG4nKTsKKyAgICBTdHJpbmdCdWlsZGVyIHN0
cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcodXJsU3Ry
aW5nKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgaGFzIE1JTUUgdHlwZSAi
KTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhtaW1lVHlwZVN0cmluZykp
OworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlQ29udGVudExlbmd0aEZvclJlc291cmNlKFdL
QnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVGcmFtZVJlZiwgdWludDY0X3QsIHVpbnQ2NF90KQpAQCAt
MTIyMyw4ICsxMjQwLDEwIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hMb2Fk
Rm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lCiAgICAgaWYgKCFJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGR1bXBSZXNvdXJjZVVSTChpZGVu
dGlmaWVyKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmRMaXRlcmFsKCIgLSBkaWRGaW5pc2hMb2FkaW5nXG4iKTsKKyAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7CisgICAgZHVtcFJlc291cmNlVVJMKGlkZW50aWZpZXIsIHN0cmluZ0J1
aWxkZXIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gZGlkRmluaXNoTG9h
ZGluZ1xuIik7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5n
QnVpbGRlci50b1N0cmluZygpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZh
aWxMb2FkRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lUmVmLCB1aW50
NjRfdCBpZGVudGlmaWVyLCBXS0Vycm9yUmVmIGVycm9yKQpAQCAtMTIzNSwxMSArMTI1NCwxMyBA
QCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmFpbExvYWRGb3JSZXNvdXJjZShXS0J1bmRs
ZVBhZ2VSZWYsIFdLQnVuZGxlRnJhbWVSZQogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBkdW1wUmVzb3VyY2VVUkwoaWRlbnRpZmllcik7Ci0gICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiIC0g
ZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6ICIpOworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVp
bGRlcjsKKyAgICBkdW1wUmVzb3VyY2VVUkwoaWRlbnRpZmllciwgc3RyaW5nQnVpbGRlcik7Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSBkaWRGYWlsTG9hZGluZ1dpdGhFcnJv
cjogIik7CiAKLSAgICBkdW1wRXJyb3JEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChl
cnJvcik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kKCdcbicpOworICAgIGR1bXBFcnJvckRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0
KGVycm9yLCBzdHJpbmdCdWlsZGVyKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsK
KyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkpOwogfQogCiBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQ2FjaGVSZXNw
b25zZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJhbWVSZWYsIHVpbnQ2NF90IGlkZW50aWZp
ZXIpCkBAIC0xMjUwLDggKzEyNzEsMTAgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3Vs
ZENhY2hlUmVzcG9uc2UoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lUmVmLAogICAgIGlm
ICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFdpbGxD
YWNoZVJlc3BvbnNlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTnVtYmVyKGlkZW50aWZpZXIpOwot
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVy
YWwoIiAtIHdpbGxDYWNoZVJlc3BvbnNlOiBjYWxsZWRcbiIpOworICAgIFN0cmluZ0J1aWxkZXIg
c3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcihpZGVudGlmaWVy
KTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIHdpbGxDYWNoZVJlc3BvbnNl
OiBjYWxsZWRcbiIpOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAKICAgICAvLyBUaGUgZGVmYXVsdCBiZWhhdmlvciBp
cyB0aGUgY2FjaGUgdGhlIHJlc3BvbnNlLgogICAgIHJldHVybiB0cnVlOwpAQCAtMTI5MSwyNCAr
MTMxNCwyNiBAQCBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0ZWRCdW5kbGVQYWdlOjpk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLQgogICAgIFdLUmV0YWluUHRyPFdLVVJM
UmVmPiB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOwogICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTY2hlbWUgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVt
ZSh1cmwuZ2V0KCkpKTsKIAotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWls
ZGVyKCktPmFwcGVuZExpdGVyYWwoIlBvbGljeSBkZWxlZ2F0ZTogYXR0ZW1wdCB0byBsb2FkICIp
OworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIlBvbGljeSBkZWxlZ2F0ZTogYXR0ZW1wdCB0byBsb2FkICIpOwogICAgIGlm
IChpc0xvY2FsRmlsZVNjaGVtZSh1cmxTY2hlbWUuZ2V0KCkpKSB7CiAgICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBmaWxlbmFtZSA9IGFkb3B0V0soV0tVUkxDb3B5TGFzdFBhdGhDb21w
b25lbnQodXJsLmdldCgpKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyhmaWxlbmFtZSkpOworICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhmaWxlbmFtZSkpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJM
Q29weVN0cmluZyh1cmwuZ2V0KCkpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykpOworICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKICAgICB9Ci0g
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJh
bCgiIHdpdGggbmF2aWdhdGlvbiB0eXBlIFwnIik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKE5hdmlnYXRpb25UeXBlVG9T
dHJpbmcoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0TmF2aWdhdGlvblR5cGUobmF2aWdhdGlv
bkFjdGlvbikpKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIo
KS0+YXBwZW5kTGl0ZXJhbCgiXCciKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IiB3aXRoIG5hdmlnYXRpb24gdHlwZSBcJyIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRv
V1RGU3RyaW5nKE5hdmlnYXRpb25UeXBlVG9TdHJpbmcoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9u
R2V0TmF2aWdhdGlvblR5cGUobmF2aWdhdGlvbkFjdGlvbikpKSk7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJcJyIpOwogICAgIFdLQnVuZGxlSGl0VGVzdFJlc3VsdFJlZiBoaXRU
ZXN0UmVzdWx0UmVmID0gV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uQ29weUhpdFRlc3RSZXN1bHQo
bmF2aWdhdGlvbkFjdGlvbik7CiAgICAgaWYgKGhpdFRlc3RSZXN1bHRSZWYpIHsKLSAgICAgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgi
IG9yaWdpbmF0aW5nIGZyb20gIik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
dHJpbmdCdWlsZGVyKCktPmFwcGVuZChkdW1wUGF0aChtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIFdL
QnVuZGxlSGl0VGVzdFJlc3VsdENvcHlOb2RlSGFuZGxlKGhpdFRlc3RSZXN1bHRSZWYpKSk7Cisg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIG9yaWdpbmF0aW5nIGZyb20gIik7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGR1bXBQYXRoKG1fcGFnZSwgbV93b3JsZC5n
ZXQoKSwgV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weU5vZGVIYW5kbGUoaGl0VGVzdFJlc3VsdFJl
ZikpKTsKICAgICB9CiAKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRl
cigpLT5hcHBlbmQoJ1xuJyk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpKTsKICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5ub3RpZnlE
b25lKCk7CiAKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+
aXNQb2xpY3lEZWxlZ2F0ZVBlcm1pc3NpdmUoKSkKQEAgLTEzMjQsMTAgKzEzNDksMTIgQEAgV0tC
dW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9y
TmV3V2luZG93QWN0aW9uKFdLQnUKIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1
bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvclJlc3BvbnNlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBX
S0J1bmRsZUZyYW1lUmVmLCBXS1VSTFJlc3BvbnNlUmVmIHJlc3BvbnNlLCBXS1VSTFJlcXVlc3RS
ZWYsIFdLVHlwZVJlZiopCiB7CiAgICAgaWYgKFdLVVJMUmVzcG9uc2VJc0F0dGFjaG1lbnQocmVz
cG9uc2UpKSB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZpbGVuYW1lID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNl
Q29weVN1Z2dlc3RlZEZpbGVuYW1lKHJlc3BvbnNlKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIlBvbGljeSBkZWxlZ2F0
ZTogcmVzb3VyY2UgaXMgYW4gYXR0YWNobWVudCwgc3VnZ2VzdGVkIGZpbGUgbmFtZSBcJyIpOwot
ICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQo
dG9XVEZTdHJpbmcoZmlsZW5hbWUpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiXCdcbiIpOworICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIlBvbGljeSBkZWxlZ2F0ZTogcmVzb3VyY2UgaXMgYW4gYXR0
YWNobWVudCwgc3VnZ2VzdGVkIGZpbGUgbmFtZSBcJyIpOworICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCh0b1dURlN0cmluZyhmaWxlbmFtZSkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIlwnXG4iKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91
dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAgICB9CiAKICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWltZVR5cGUgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5TUlN
RVR5cGUocmVzcG9uc2UpKTsKQEAgLTE0MDYsMTUgKzE0MzMsMTYgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OndpbGxBZGRNZXNzYWdlVG9Db25zb2xlKFdLU3RyaW5nUmVmIG1lc3NhZ2UsIHVp
bnQzMl90IGwKICAgICAgICAgLy8gRklYTUU6IFRoZSBjb2RlIGJlbG93IGRvZXMgbm90IGhhbmRs
ZSBhZGRpdGlvbmFsIHRleHQgYWZ0ZXIgdXJsIG5vciBtdWx0aXBsZSB1cmxzLiBUaGlzIG1hdGNo
ZXMgRHVtcFJlbmRlclRyZWUgaW1wbGVtZW50YXRpb24uCiAgICAgICAgIG1lc3NhZ2VTdHJpbmcg
PSBtZXNzYWdlU3RyaW5nLnN1YnN0cmluZygwLCBmaWxlUHJvdG9jb2xTdGFydCkgKyBsYXN0Rmls
ZVVSTFBhdGhDb21wb25lbnQobWVzc2FnZVN0cmluZy5zdWJzdHJpbmcoZmlsZVByb3RvY29sU3Rh
cnQpKTsKIAotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZExpdGVyYWwoIkNPTlNPTEUgTUVTU0FHRTogIik7CisgICAgU3RyaW5nQnVpbGRlciBzdHJp
bmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiQ09OU09MRSBNRVNT
QUdFOiAiKTsKICAgICBpZiAobGluZU51bWJlcikgewotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJsaW5lICIpOwotICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmROdW1iZXIo
bGluZU51bWJlcik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWls
ZGVyKCktPmFwcGVuZExpdGVyYWwoIjogIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgibGluZSAiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIobGlu
ZU51bWJlcik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiOiAiKTsKICAg
ICB9Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
KG1lc3NhZ2VTdHJpbmcpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWls
ZGVyKCktPmFwcGVuZCgnXG4nKTsKLQorICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1lc3NhZ2VT
dHJpbmcpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2V0U3RhdHVzYmFyVGV4dChXS1N0cmluZ1Jl
ZiBzdGF0dXNiYXJUZXh0KQpAQCAtMTQyNSw5ICsxNDUzLDExIEBAIHZvaWQgSW5qZWN0ZWRCdW5k
bGVQYWdlOjp3aWxsU2V0U3RhdHVzYmFyVGV4dChXS1N0cmluZ1JlZiBzdGF0dXNiYXJUZXh0KQog
ICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVt
cFN0YXR1c0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJVSSBERUxFR0FURSBT
VEFUVVMgQ0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6Iik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHN0YXR1c2JhclRleHQp
KTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQo
J1xuJyk7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiVUkgREVMRUdBVEUgU1RBVFVTIENBTExCQUNLOiBzZXRTdGF0dXNU
ZXh0OiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHN0YXR1c2JhclRl
eHQpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCiB2
b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRBbGVydChXS1N0cmluZ1Jl
ZiBtZXNzYWdlLCBXS0J1bmRsZUZyYW1lUmVmKQpAQCAtMTQzNSw5ICsxNDY1LDExIEBAIHZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlwdEFsZXJ0KFdLU3RyaW5nUmVmIG1l
c3NhZ2UsIFdLQnVuZGxlRnJhCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNU
ZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJBTEVSVDogIik7Ci0gICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5n
KG1lc3NhZ2UpKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmQoJ1xuJyk7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiQUxFUlQ6ICIpOworICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHRvV1RGU3RyaW5nKG1lc3NhZ2UpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgn
XG4nKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkph
dmFTY3JpcHRDb25maXJtKFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLQnVuZGxlRnJhbWVSZWYpCkBA
IC0xNDQ1LDE4ICsxNDc3LDIyIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2
YVNjcmlwdENvbmZpcm0oV0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tCdW5kbGVGCiAgICAgaWYgKCFJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRM
aXRlcmFsKCJDT05GSVJNOiAiKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcobWVzc2FnZSkpOwotICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnXG4nKTsKKyAgICBTdHJpbmdC
dWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJD
T05GSVJNOiAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhtZXNzYWdl
KSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIAogdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaXB0UHJvbXB0KFdLU3RyaW5nUmVm
IG1lc3NhZ2UsIFdLU3RyaW5nUmVmIGRlZmF1bHRWYWx1ZSwgV0tCdW5kbGVGcmFtZVJlZikKIHsK
LSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRl
cmFsKCJQUk9NUFQ6ICIpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWls
ZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyhtZXNzYWdlKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiLCBkZWZhdWx0IHRleHQ6
ICIpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZCh0b1dURlN0cmluZyhkZWZhdWx0VmFsdWUpKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJ1xuJyk7CisgICAgU3RyaW5nQnVpbGRlciBzdHJp
bmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiUFJPTVBUOiAiKTsK
KyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhtZXNzYWdlKSk7CisgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIGRlZmF1bHQgdGV4dDogIik7CisgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoZGVmYXVsdFZhbHVlKSk7CisgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoJ1xuJyk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRl
eHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OmRpZFJlYWNoQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKFdLU2VjdXJpdHlPcmlnaW5S
ZWYgb3JpZ2luLCBpbnQ2NF90IHRvdGFsQnl0ZXNOZWVkZWQpCkBAIC0xNDY4LDExICsxNTA0LDEz
IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWFjaEFwcGxpY2F0aW9uQ2FjaGVPcmln
aW5RdW90YShXS1NlY3VyaXR5T3JpZ2luUmVmCiAgICAgICAgIC8vIGFib3ZlIG9yIGJlbG93IGEg
dGhyZXNob2xkLgogICAgICAgICBpbnQ2NF90IHRydW5jYXRlZFNwYWNlTmVlZGVkID0gKHRvdGFs
Qnl0ZXNOZWVkZWQgLyAxMDAwMCkgKiAxMDAwMDsKIAotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJVSSBERUxFR0FURSBBUFBM
SUNBVElPTiBDQUNIRSBDQUxMQkFDSzogZXhjZWVkZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVv
dGFGb3JTZWN1cml0eU9yaWdpbjoiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHNlY3VyaXR5T3JpZ2luVG9TdHIob3JpZ2luKSk7Ci0g
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExp
dGVyYWwoIiB0b3RhbFNwYWNlTmVlZGVkOn4iKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTnVtYmVyKHRydW5jYXRlZFNwYWNlTmVlZGVk
KTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kKCdcbicpOworICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVUkgREVMRUdBVEUgQVBQTElDQVRJT04gQ0FD
SEUgQ0FMTEJBQ0s6IGV4Y2VlZGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhRm9yU2VjdXJp
dHlPcmlnaW46Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlY3VyaXR5T3JpZ2lu
VG9TdHIob3JpZ2luKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHRv
dGFsU3BhY2VOZWVkZWQ6fiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcih0
cnVuY2F0ZWRTcGFjZU5lZWRlZCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicp
OworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KIAogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkudGVzdFJ1bm5lcigpLT5zaG91bGREaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNo
ZVF1b3RhKCkpCkBAIC0xNDg1LDExICsxNTIzLDEzIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpkaWRSZWFjaEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXS1NlY3VyaXR5T3JpZ2luUmVm
CiB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEV4Y2VlZERhdGFiYXNlUXVvdGEoV0tT
ZWN1cml0eU9yaWdpblJlZiBvcmlnaW4sIFdLU3RyaW5nUmVmIGRhdGFiYXNlTmFtZSwgV0tTdHJp
bmdSZWYgZGF0YWJhc2VEaXNwbGF5TmFtZSwgdWludDY0X3QgY3VycmVudFF1b3RhQnl0ZXMsIHVp
bnQ2NF90IGN1cnJlbnRPcmlnaW5Vc2FnZUJ5dGVzLCB1aW50NjRfdCBjdXJyZW50RGF0YWJhc2VV
c2FnZUJ5dGVzLCB1aW50NjRfdCBleHBlY3RlZFVzYWdlQnl0ZXMpCiB7CiAgICAgaWYgKEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBEYXRhYmFzZUNhbGxi
YWNrcygpKSB7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVy
KCktPmFwcGVuZExpdGVyYWwoIlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNlZWRl
ZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjoiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHNlY3VyaXR5T3JpZ2luVG9TdHIo
b3JpZ2luKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVy
KCktPmFwcGVuZExpdGVyYWwoIiBkYXRhYmFzZToiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKGRhdGFiYXNlTmFt
ZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmQoJ1xuJyk7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJVSSBERUxFR0FURSBEQVRBQkFTRSBDQUxM
QkFDSzogZXhjZWVkZWREYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46Iik7CisgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlY3VyaXR5T3JpZ2luVG9TdHIob3JpZ2luKSk7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGRhdGFiYXNlOiIpOworICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhkYXRhYmFzZU5hbWUpKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQogCiAgICAg
c3RhdGljIGNvbnN0IHVpbnQ2NF90IGRlZmF1bHRRdW90YSA9IDUgKiAxMDI0ICogMTAyNDsKQEAg
LTE1NTksOSArMTU5OSwxMSBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQmVnaW5F
ZGl0aW5nKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2UpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3Vs
ZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hv
dWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZToiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxk
LmdldCgpLCByYW5nZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmQoJ1xuJyk7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVp
bGRlcjsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVH
QVRFOiBzaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlOiIpOworICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQog
ICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRB
bGxvd0VkaXRpbmcoKTsKIH0KQEAgLTE1NzIsOSArMTYxNCwxMSBAQCBib29sIEluamVjdGVkQnVu
ZGxlUGFnZTo6c2hvdWxkRW5kRWRpdGluZyhXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIkVE
SVRJTkcgREVMRUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOiIpOwotICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQocmFuZ2VUb1N0
cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnXG4nKTsKKyAgICAgICAgU3RyaW5n
QnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOiIpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQo
KSwgcmFuZ2UpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKSk7CiAgICAgfQogICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1
bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KQEAgLTE1OTEsMTMgKzE2MzUsMTUgQEAg
Ym9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydE5vZGUoV0tCdW5kbGVOb2RlSGFu
ZGxlUmVmIG5vZGUsIFdLQnVuZGxlUmEKICAgICB9OwogCiAgICAgaWYgKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsK
LSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
TGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hvdWxkSW5zZXJ0Tm9kZToiKTsKLSAgICAgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKGR1bXBQYXRo
KG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgbm9kZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIgcmVwbGFjaW5nRE9NUmFu
Z2U6Iik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCkt
PmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2VUb1JlcGxhY2Up
KTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kTGl0ZXJhbCgiIGdpdmVuQWN0aW9uOiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoaW5zZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0p
OwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBl
bmQoJ1xuJyk7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNl
cnROb2RlOiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkdW1wUGF0aChtX3BhZ2Us
IG1fd29ybGQuZ2V0KCksIG5vZGUpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIgcmVwbGFjaW5nRE9NUmFuZ2U6Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZVRvUmVwbGFjZSkpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBnaXZlbkFjdGlvbjoiKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaW5zZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0pOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAgICB9CiAg
ICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZEFs
bG93RWRpdGluZygpOwogfQpAQCAtMTYxNCwxMyArMTY2MCwxNSBAQCBib29sIEluamVjdGVkQnVu
ZGxlUGFnZTo6c2hvdWxkSW5zZXJ0VGV4dChXS1N0cmluZ1JlZiB0ZXh0LCBXS0J1bmRsZVJhbmdl
SGFuZGxlUgogICAgIH07CiAKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RS
dW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJFRElUSU5H
IERFTEVHQVRFOiBzaG91bGRJbnNlcnRUZXh0OiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcodGV4dCkpOwotICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRl
cmFsKCIgcmVwbGFjaW5nRE9NUmFuZ2U6Iik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5n
ZXQoKSwgcmFuZ2VUb1JlcGxhY2UpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiIGdpdmVuQWN0aW9uOiIpOwotICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoaW5zZXJ0
YWN0aW9uc3RyaW5nW2FjdGlvbl0pOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
c3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJ1xuJyk7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgc3Ry
aW5nQnVpbGRlcjsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5H
IERFTEVHQVRFOiBzaG91bGRJbnNlcnRUZXh0OiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCh0b1dURlN0cmluZyh0ZXh0KSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiIHJlcGxhY2luZ0RPTVJhbmdlOiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2VUb1JlcGxhY2UpKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgZ2l2ZW5BY3Rpb246Iik7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQog
ICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRB
bGxvd0VkaXRpbmcoKTsKIH0KQEAgLTE2MzEsOSArMTY3OSwxMSBAQCBib29sIEluamVjdGVkQnVu
ZGxlUGFnZTo6c2hvdWxkRGVsZXRlUmFuZ2UoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJF
RElUSU5HIERFTEVHQVRFOiBzaG91bGREZWxldGVET01SYW5nZToiKTsKLSAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHJhbmdlVG9TdHIobV9w
YWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJ1xuJyk7CisgICAgICAgIFN0cmluZ0J1aWxk
ZXIgc3RyaW5nQnVpbGRlcjsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJF
RElUSU5HIERFTEVHQVRFOiBzaG91bGREZWxldGVET01SYW5nZToiKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAg
IH0KICAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hv
dWxkQWxsb3dFZGl0aW5nKCk7CiB9CkBAIC0xNjUzLDE1ICsxNzAzLDE3IEBAIGJvb2wgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdLQnVuZGxlUmFuZ2VIYW5k
bGVSZWYgZnJvbVJhCiAgICAgfTsKIAogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIkVE
SVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6Iik7Ci0gICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChyYW5nZVRv
U3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgZnJvbVJhbmdlKSk7Ci0gICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiB0b0RPTVJh
bmdlOiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHRvUmFuZ2UpKTsKLSAg
ICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0
ZXJhbCgiIGFmZmluaXR5OiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmQoYWZmaW5pdHlzdHJpbmdbYWZmaW5pdHldKTsgCi0gICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwo
IiBzdGlsbFNlbGVjdGluZzoiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0
cmluZ0J1aWxkZXIoKS0+YXBwZW5kKGJvb2xzdHJpbmdbc3RpbGxTZWxlY3RpbmddKTsgCi0gICAg
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnXG4n
KTsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVj
dGVkRE9NUmFuZ2U6Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIo
bV9wYWdlLCBtX3dvcmxkLmdldCgpLCBmcm9tUmFuZ2UpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCIgdG9ET01SYW5nZToiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHRvUmFuZ2UpKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgYWZmaW5pdHk6Iik7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKGFmZmluaXR5c3RyaW5nW2FmZmluaXR5XSk7IAorICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBzdGlsbFNlbGVjdGluZzoiKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoYm9vbHN0cmluZ1tzdGlsbFNlbGVjdGluZ10pOyAKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQogICAg
IHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxv
d0VkaXRpbmcoKTsKIH0KQEAgLTE2NzIsMTEgKzE3MjQsMTMgQEAgYm9vbCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OnNob3VsZEFwcGx5U3R5bGUoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmIHN0
eWxlLAogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAg
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVy
YWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEFwcGx5U3R5bGU6Iik7Ci0gICAgICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChzdHlsZURlY1RvU3Ry
KHN0eWxlKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVy
KCktPmFwcGVuZExpdGVyYWwoIiB0b0VsZW1lbnRzSW5ET01SYW5nZToiKTsKLSAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHJhbmdlVG9TdHIo
bV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJ1xuJyk7CisgICAgICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRBcHBseVN0eWxlOiIpOworICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChzdHlsZURlY1RvU3RyKHN0eWxlKSk7CisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiIHRvRWxlbWVudHNJbkRPTVJhbmdlOiIpOworICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2Up
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAg
ICAgfQogICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5z
aG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KQEAgLTE2ODUsNjIgKzE3MzksNzAgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmRpZEJlZ2luRWRpdGluZyhXS1N0cmluZ1JlZiBub3RpZmljYXRpb25O
YW1lKQogewogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmco
KSkKICAgICAgICAgcmV0dXJuOworICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3Vs
ZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogd2Vi
Vmlld0RpZEJlZ2luRWRpdGluZzoiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsK
LSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
KCdcbicpOwotICAgIH0KKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQmVn
aW5FZGl0aW5nOiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlm
aWNhdGlvbk5hbWUpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkp
OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRW5kRWRpdGluZyhXS1N0cmluZ1Jl
ZiBub3RpZmljYXRpb25OYW1lKQogewogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOworICAgIGlmICghSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiRURJVElO
RyBERUxFR0FURTogd2ViVmlld0RpZEVuZEVkaXRpbmc6Iik7Ci0gICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyhub3RpZmlj
YXRpb25OYW1lKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWls
ZGVyKCktPmFwcGVuZCgnXG4nKTsKLSAgICB9CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWls
ZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTog
d2ViVmlld0RpZEVuZEVkaXRpbmc6Iik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZT
dHJpbmcobm90aWZpY2F0aW9uTmFtZSkpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicp
OworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2UoV0tT
dHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSkKIHsKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIUluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJh
Y2tzKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwo
IkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6Iik7Ci0gICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyhub3Rp
ZmljYXRpb25OYW1lKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdC
dWlsZGVyKCktPmFwcGVuZCgnXG4nKTsKLSAgICB9CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FU
RTogd2ViVmlld0RpZENoYW5nZToiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0
cmluZyhub3RpZmljYXRpb25OYW1lKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7
CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50
b1N0cmluZygpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZVNlbGVj
dGlvbihXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1lKQogewogICAgIGlmICghSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOworICAgIGlm
ICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRp
bmdDYWxsYmFja3MoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsK
LSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
TGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjoiKTsK
LSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
KHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCdcbicpOwotICAgIH0KKyAgICBTdHJp
bmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOiIpOworICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKKyAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
b3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCiAjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQogYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnN1cHBvcnRzRnVsbFNjcmVl
bihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tGdWxsU2NyZWVuS2V5Ym9hcmRSZXF1ZXN0VHlw
ZSByZXF1ZXN0VHlwZSkKIHsKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RS
dW5uZXIoKS0+c2hvdWxkRHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgic3VwcG9y
dHNGdWxsU2NyZWVuKCkgPT0gdHJ1ZVxuIik7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5vdXRwdXRUZXh0KCJzdXBwb3J0c0Z1bGxTY3JlZW4oKSA9PSB0cnVlXG4iKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmVudGVyRnVsbFNjcmVl
bkZvckVsZW1lbnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlTm9kZUhhbmRsZVJl
ZiBlbGVtZW50UmVmKQogewogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wRnVsbFNjcmVlbkNhbGxiYWNrcygpKQotICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJlbnRlckZ1
bGxTY3JlZW5Gb3JFbGVtZW50KClcbiIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkub3V0cHV0VGV4dCgiZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCgpXG4iKTsKIAogICAgIGlm
ICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+aGFzQ3VzdG9tRnVsbFNj
cmVlbkJlaGF2aW9yKCkpIHsKICAgICAgICAgV0tCdW5kbGVQYWdlV2lsbEVudGVyRnVsbFNjcmVl
bihwYWdlUmVmKTsKQEAgLTE3NTEsNyArMTgxMyw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdl
OjplbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1
CiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KFdLQnVu
ZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZU5vZGVIYW5kbGVSZWYgZWxlbWVudFJlZikKIHsK
ICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVt
cEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50
KClcbiIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dCgiZXhp
dEZ1bGxTY3JlZW5Gb3JFbGVtZW50KClcbiIpOwogCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5oYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IoKSkgewog
ICAgICAgICBXS0J1bmRsZVBhZ2VXaWxsRXhpdEZ1bGxTY3JlZW4ocGFnZVJlZik7CkBAIC0xNzYy
LDE5ICsxODI0LDE5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpleGl0RnVsbFNjcmVlbkZv
ckVsZW1lbnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuCiB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6YmVnYW5FbnRlckZ1bGxTY3JlZW4oV0tCdW5kbGVQYWdlUmVmLCBXS1JlY3QsIFdL
UmVjdCkKIHsKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiYmVnYW5FbnRlckZ1bGxT
Y3JlZW4oKVxuIik7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0
KCJiZWdhbkVudGVyRnVsbFNjcmVlbigpXG4iKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OmJlZ2FuRXhpdEZ1bGxTY3JlZW4oV0tCdW5kbGVQYWdlUmVmLCBXS1JlY3QsIFdLUmVjdCkK
IHsKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiYmVnYW5FeGl0RnVsbFNjcmVlbigp
XG4iKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoImJlZ2Fu
RXhpdEZ1bGxTY3JlZW4oKVxuIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpjbG9z
ZUZ1bGxTY3JlZW4oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYpCiB7CiAgICAgaWYgKEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJh
Y2tzKCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCkt
PmFwcGVuZExpdGVyYWwoImNsb3NlRnVsbFNjcmVlbigpXG4iKTsKKyAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoImNsb3NlRnVsbFNjcmVlbigpXG4iKTsKIAogICAg
IGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+aGFzQ3VzdG9tRnVs
bFNjcmVlbkJlaGF2aW9yKCkpIHsKICAgICAgICAgV0tCdW5kbGVQYWdlV2lsbEV4aXRGdWxsU2Ny
ZWVuKHBhZ2VSZWYpOwpAQCAtMTc4OCwxNSArMTg1MCwxNSBAQCBzdGF0aWMgYm9vbCBjb21wYXJl
QnlUYXJnZXROYW1lKFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBpdGVtMSwgV0tCdW5k
bGVCYQogICAgIHJldHVybiB0b1NURChhZG9wdFdLKFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRl
bUNvcHlUYXJnZXQoaXRlbTEpKSkgPCB0b1NURChhZG9wdFdLKFdLQnVuZGxlQmFja0ZvcndhcmRM
aXN0SXRlbUNvcHlUYXJnZXQoaXRlbTIpKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGR1bXBCYWNrRm9y
d2FyZExpc3RJdGVtKFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBpdGVtLCB1bnNpZ25l
ZCBpbmRlbnQsIGJvb2wgaXNDdXJyZW50SXRlbSkKK3N0YXRpYyB2b2lkIGR1bXBCYWNrRm9yd2Fy
ZExpc3RJdGVtKFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBpdGVtLCB1bnNpZ25lZCBp
bmRlbnQsIGJvb2wgaXNDdXJyZW50SXRlbSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikK
IHsKICAgICB1bnNpZ25lZCBjb2x1bW4gPSAwOwogICAgIGlmIChpc0N1cnJlbnRJdGVtKSB7Ci0g
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExp
dGVyYWwoImN1cnItPiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoImN1
cnItPiIpOwogICAgICAgICBjb2x1bW4gPSA2OwogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBjb2x1bW47IGkgPCBpbmRlbnQ7IGkrKykKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCcgJyk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCcgJyk7CiAKICAgICBXVEY6OlN0cmluZyB1cmwgPSB0b1dURlN0cmluZyhhZG9wdFdL
KFdLVVJMQ29weVN0cmluZyhhZG9wdFdLKFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbUNvcHlV
UkwoaXRlbSkpLmdldCgpKSkpOwogICAgIGlmIChoYXNQcmVmaXgodXJsLCAiZmlsZToiKSkgewpA
QCAtMTgwNiwyMyArMTg2OCwyMyBAQCBzdGF0aWMgdm9pZCBkdW1wQmFja0ZvcndhcmRMaXN0SXRl
bShXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgaXRlbSwgdW5zaWduZQogICAgICAgICAg
ICAgc3RhcnQgPSAwOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzdGFydCArPSBkaXJlY3Rv
cnlOYW1lLmxlbmd0aCgpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIoZmlsZSB0ZXN0KToiKTsKLSAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHVybC5zdWJzdHJpbmco
c3RhcnQpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIoZmlsZSB0ZXN0
KToiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodXJsLnN1YnN0cmluZyhzdGFydCkp
OwogICAgIH0gZWxzZQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVp
bGRlcigpLT5hcHBlbmQodXJsKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodXJsKTsK
IAogICAgIFdURjo6U3RyaW5nIHRhcmdldCA9IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tCdW5kbGVC
YWNrRm9yd2FyZExpc3RJdGVtQ29weVRhcmdldChpdGVtKSkpOwogICAgIGlmICh0YXJnZXQubGVu
Z3RoKCkpIHsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIo
KS0+YXBwZW5kTGl0ZXJhbCgiIChpbiBmcmFtZSBcIiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodGFyZ2V0KTsKLSAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiXCIp
Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIChpbiBmcmFtZSBcIiIp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0YXJnZXQpOworICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIlwiKSIpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBOZWVk
IFdLQmFja0ZvcndhcmRMaXN0SXRlbUlzVGFyZ2V0SXRlbS4KICAgICBpZiAoV0tCdW5kbGVCYWNr
Rm9yd2FyZExpc3RJdGVtSXNUYXJnZXRJdGVtKGl0ZW0pKQotICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIgICoqbmF2IHRhcmdl
dCoqIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICAqKm5hdiB0YXJn
ZXQqKiIpOwogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+
YXBwZW5kKCdcbicpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogCiAgICAgaWYg
KFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IGtpZHMgPSBhZG9wdFdLKFdLQnVuZGxlQmFja0Zvcndh
cmRMaXN0SXRlbUNvcHlDaGlsZHJlbihpdGVtKSkpIHsKICAgICAgICAgLy8gU29ydCB0byBlbGlt
aW5hdGUgYXJiaXRyYXJ5IHJlc3VsdCBvcmRlcmluZyB3aGljaCBkZWZlYXRzIHJlcHJvZHVjaWJs
ZSB0ZXN0aW5nLgpAQCAtMTgzMiwxMyArMTg5NCwxMyBAQCBzdGF0aWMgdm9pZCBkdW1wQmFja0Zv
cndhcmRMaXN0SXRlbShXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgaXRlbSwgdW5zaWdu
ZQogICAgICAgICAgICAgc29ydGVkS2lkc1tpXSA9IHN0YXRpY19jYXN0PFdLQnVuZGxlQmFja0Zv
cndhcmRMaXN0SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KGtpZHMuZ2V0KCksIGkpKTsK
ICAgICAgICAgc3RhYmxlX3NvcnQoc29ydGVkS2lkcy5iZWdpbigpLCBzb3J0ZWRLaWRzLmVuZCgp
LCBjb21wYXJlQnlUYXJnZXROYW1lKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyArK2kpCi0gICAgICAgICAgICBkdW1wQmFja0ZvcndhcmRMaXN0SXRlbShzb3J0ZWRLaWRz
W2ldLCBpbmRlbnQgKyA0LCBmYWxzZSk7CisgICAgICAgICAgICBkdW1wQmFja0ZvcndhcmRMaXN0
SXRlbShzb3J0ZWRLaWRzW2ldLCBpbmRlbnQgKyA0LCBmYWxzZSwgc3RyaW5nQnVpbGRlcik7CiAg
ICAgfQogfQogCi12b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcEJhY2tGb3J3YXJkTGlzdCgp
Cit2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcEJhY2tGb3J3YXJkTGlzdChTdHJpbmdCdWls
ZGVyJiBzdHJpbmdCdWlsZGVyKQogewotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIlxuPT09PT09PT09PT09PT0gQmFjayBGb3J3YXJk
IExpc3QgPT09PT09PT09PT09PT1cbiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiXG49PT09PT09PT09PT09PSBCYWNrIEZvcndhcmQgTGlzdCA9PT09PT09PT09PT09PVxuIik7
CiAKICAgICBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdFJlZiBsaXN0ID0gV0tCdW5kbGVQYWdlR2V0
QmFja0ZvcndhcmRMaXN0KG1fcGFnZSk7CiAKQEAgLTE4NjcsOSArMTkyOSw5IEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkdW1wQmFja0ZvcndhcmRMaXN0KCkKICAgICB9CiAKICAgICBmb3Ig
KGludCBpID0gaXRlbXNUb1ByaW50LnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKQotICAgICAgICBk
dW1wQmFja0ZvcndhcmRMaXN0SXRlbShpdGVtc1RvUHJpbnRbaV0uZ2V0KCksIDgsIGkgPT0gY3Vy
cmVudEl0ZW1JbmRleCk7CisgICAgICAgIGR1bXBCYWNrRm9yd2FyZExpc3RJdGVtKGl0ZW1zVG9Q
cmludFtpXS5nZXQoKSwgOCwgaSA9PSBjdXJyZW50SXRlbUluZGV4LCBzdHJpbmdCdWlsZGVyKTsK
IAotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExp
dGVyYWwoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4i
KTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKIH0KIAogI2lmICFQTEFURk9STShNQUMp
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlUGFnZS5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZVBhZ2UuaAppbmRleCA3NzA4YTZmMjZmZWQ3YmRlZWFjNDA2N2ZjMTdlNWZj
Zjc0NzZjZTI1Li5kNWI5YzgwNzFkMTI0ODBlNTQzYzQ4YjE0NThlODVmOWIxMjE2MjkzIDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlUGFnZS5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGVQYWdlLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxXZWJLaXQyL1dL
QnVuZGxlUGFnZS5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tCdW5kbGVTY3JpcHRXb3JsZC5oPgog
I2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogbmFtZXNwYWNlIFdUUiB7CiAKQEAgLTUwLDcgKzUxLDcgQEAgcHVibGljOgog
ICAgIHZvaWQgcHJlcGFyZSgpOwogICAgIHZvaWQgcmVzZXRBZnRlclRlc3QoKTsKIAotICAgIHZv
aWQgZHVtcEJhY2tGb3J3YXJkTGlzdCgpOworICAgIHZvaWQgZHVtcEJhY2tGb3J3YXJkTGlzdChX
VEY6OlN0cmluZ0J1aWxkZXImKTsKIAogcHJpdmF0ZToKICAgICAvLyBMb2FkZXIgQ2xpZW50CkBA
IC0xNjksOCArMTcwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZENoYW5nZShXS1N0cmluZ1Jl
ZiBub3RpZmljYXRpb25OYW1lKTsKICAgICB2b2lkIGRpZENoYW5nZVNlbGVjdGlvbihXS1N0cmlu
Z1JlZiBub3RpZmljYXRpb25OYW1lKTsKIAotICAgIHZvaWQgZHVtcEFsbEZyYW1lc1RleHQoKTsK
LSAgICB2b2lkIGR1bXBBbGxGcmFtZVNjcm9sbFBvc2l0aW9ucygpOworICAgIHZvaWQgZHVtcEFs
bEZyYW1lc1RleHQoV1RGOjpTdHJpbmdCdWlsZGVyJik7CisgICAgdm9pZCBkdW1wQWxsRnJhbWVT
Y3JvbGxQb3NpdGlvbnMoV1RGOjpTdHJpbmdCdWlsZGVyJik7CiAKICAgICB2b2lkIHBsYXRmb3Jt
RGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmKTsKIApkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVy
LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5j
cHAKaW5kZXggMTBmY2NjMjNlNDVjYzJjNjZkMDViODI5NDk0OWNlYmVhMGE1ZjZmNi4uMzhjMmFl
MDg1MDBjZTljYjNlMzg1MTZjNzBkYTcyMDVjZjNlMTdlNyAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCkBAIC0xNDksOSAr
MTQ5LDcgQEAgdm9pZCBUZXN0UnVubmVyOjp3YWl0VW50aWxEb25lKCkKIHZvaWQgVGVzdFJ1bm5l
cjo6d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpCiB7CiAgICAgaW52YWxpZGF0ZVdhaXRU
b0R1bXBXYXRjaGRvZ1RpbWVyKCk7Ci0gICAgY29uc3QgY2hhciogbWVzc2FnZSA9ICJGQUlMOiBU
aW1lZCBvdXQgd2FpdGluZyBmb3Igbm90aWZ5RG9uZSB0byBiZSBjYWxsZWRcbiI7Ci0gICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKG1lc3NhZ2UpOwot
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiXG4i
KTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dCgiRkFJTDogVGltZWQg
b3V0IHdhaXRpbmcgZm9yIG5vdGlmeURvbmUgdG8gYmUgY2FsbGVkXG5cbiIpOwogICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5kb25lKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRr
LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyQXRrLmNwcAppbmRleCA1M2U3NmRkNjhiNjlhZjU4ODM2YzFhYTNhOGNh
NjQ4OWZkODA1ZTE5Li5kNzdhYTljYmEyMDc0MTdlZGEzNjkzNTQ0NmIzMTE2NTNkMjljOTZjIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJBdGsuY3BwCkBAIC01NSw3
ICs1NSw3IEBAIHN0YXRpYyB2b2lkIHByaW50QWNjZXNzaWJpbGl0eUV2ZW50KEF0a09iamVjdCog
YWNjZXNzaWJsZSwgY29uc3QgZ2NoYXIqIHNpZ25hbE5hCiAKICAgICBHT3duUHRyPGdjaGFyPiBz
aWduYWxOYW1lQW5kVmFsdWUoc2lnbmFsVmFsdWUgPyBnX3N0cmR1cF9wcmludGYoIiVzID0gJXMi
LCBzaWduYWxOYW1lLCBzaWduYWxWYWx1ZSkgOiBnX3N0cmR1cChzaWduYWxOYW1lKSk7CiAgICAg
R093blB0cjxnY2hhcj4gYWNjZXNzaWJpbGl0eUV2ZW50U3RyaW5nKGdfc3RyZHVwX3ByaW50Zigi
QWNjZXNzaWJpbGl0eSBvYmplY3QgZW1pdHRlZCBcIiVzXCIgLyBOYW1lOiBcIiVzXCIgLyBSb2xl
OiAlZFxuIiwgc2lnbmFsTmFtZUFuZFZhbHVlLmdldCgpLCBvYmplY3ROYW1lLCBvYmplY3RSb2xl
KSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
KGFjY2Vzc2liaWxpdHlFdmVudFN0cmluZy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLm91dHB1dFRleHQoU3RyaW5nOjpmcm9tVVRGOChhY2Nlc3NpYmlsaXR5RXZlbnRTdHJp
bmcuZ2V0KCkpKTsKIH0KIAogc3RhdGljIGdib29sZWFuIGF4T2JqZWN0RXZlbnRMaXN0ZW5lcihH
U2lnbmFsSW52b2NhdGlvbkhpbnQgKnNpZ25hbEhpbnQsIGd1aW50IG51bVBhcmFtVmFsdWVzLCBj
b25zdCBHVmFsdWUgKnBhcmFtVmFsdWVzLCBncG9pbnRlciBkYXRhKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAppbmRleCA4ZjY2Y2MwZGQwNTliMjY4OGIyMTEwODg2
NzVjZDA0ZGI3MTEzOTI5Li5iNzkwYWQzNDYxNjJhOWQ1M2QwMzY2YzQ4ZWY2MTcyOGU5NDFkOTg0
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcApAQCAtMzgsNiAr
MzgsNyBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYv
T3duQXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093bkFycmF5UHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNp
ZiBQTEFURk9STShNQUMpCkBAIC0xOTMsNiArMTk0LDggQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6
aW52b2tlKCkKICAgICB1cGRhdGVMYXlvdXRUeXBlKG1fcGF0aE9yVVJMLmNfc3RyKCkpOwogICAg
IHVwZGF0ZVRpbGVkRHJhd2luZ0ZvckN1cnJlbnRUZXN0KG1fcGF0aE9yVVJMLmNfc3RyKCkpOwog
CisgICAgbV90ZXh0T3V0cHV0LmNsZWFyKCk7CisKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJC
ZWdpblRlc3QiKSk7CiAgICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gYmVn
aW5UZXN0TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7
CiAKQEAgLTI4NCw3ICsyODcsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkdW1wKGNvbnN0IGNo
YXIqIHRleHRUb1N0ZG91dCwgY29uc3QgY2hhciogdGV4dFRvU3RkZXJyLCBibwogCiB2b2lkIFRl
c3RJbnZvY2F0aW9uOjpkdW1wUmVzdWx0cygpCiB7Ci0gICAgZHVtcCh0b1dURlN0cmluZyhtX3Rl
eHRPdXRwdXQuZ2V0KCkpLnV0ZjgoKS5kYXRhKCkpOworICAgIGR1bXAobV90ZXh0T3V0cHV0LnRv
U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBpZiAobV9kdW1wUGl4ZWxzICYmIG1fcGl4
ZWxSZXN1bHQpCiAgICAgICAgIGR1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKG1fcGl4
ZWxSZXN1bHQuZ2V0KCksIG1fcmVwYWludFJlY3RzLmdldCgpKTsKQEAgLTMzNiw5ICszMzksNiBA
QCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRs
ZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKICAgICAgICAgV0tEaWN0aW9u
YXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJl
Zj4obWVzc2FnZUJvZHkpOwogCi0gICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0ZXh0
T3V0cHV0S2V5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUZXh0T3V0
cHV0IikpOwotICAgICAgICBtX3RleHRPdXRwdXQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHRleHRPdXRw
dXRLZXkuZ2V0KCkpKTsKLQogICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGl4ZWxS
ZXN1bHRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJQaXhlbFJl
c3VsdCIpKTsKICAgICAgICAgbV9waXhlbFJlc3VsdCA9IHN0YXRpY19jYXN0PFdLSW1hZ2VSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwaXhlbFJl
c3VsdEtleS5nZXQoKSkpOwogICAgICAgICBBU1NFUlQoIW1fcGl4ZWxSZXN1bHQgfHwgbV9kdW1w
UGl4ZWxzKTsKQEAgLTM1MCw3ICszNTAsMTMgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVj
ZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm5vdGlmeURvbmUoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICAKKworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiVGV4dE91dHB1dCIpKSB7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV1N0cmluZ0dldFR5cGVJRCgpKTsKKyAgICAgICAgV0tTdHJpbmdS
ZWYgdGV4dE91dHB1dCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Cisg
ICAgICAgIG1fdGV4dE91dHB1dC5hcHBlbmQodG9XVEZTdHJpbmcodGV4dE91dHB1dCkpOworICAg
IH0KKwogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUiKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKICAgICAgICAgV0tCb29sZWFu
UmVmIGJlZm9yZVVubG9hZFJldHVyblZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPiht
ZXNzYWdlQm9keSk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZv
Y2F0aW9uLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmgKaW5kZXgg
ZTQ5ZDlmZDBkZTNmZTQ5Y2JmZDhmMTk3MmE2Y2QyY2RlZmU3ZDcxOS4uYjllYWQxNGFhNGMwNTgw
YWYwOWQ4MWFhYmUyNzA1MzllNDYyYTBlZiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0SW52b2NhdGlvbi5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdElu
dm9jYXRpb24uaApAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRl
IDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KIAogbmFtZXNwYWNlIFdUUiB7CiAKQEAgLTY3LDcgKzY5LDcgQEAgcHJpdmF0ZToKICAgICBi
b29sIG1fZ290UmVwYWludDsKICAgICBib29sIG1fZXJyb3I7CiAKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbV90ZXh0T3V0cHV0OworICAgIFN0cmluZ0J1aWxkZXIgbV90ZXh0T3V0cHV0
OwogICAgIFdLUmV0YWluUHRyPFdLSW1hZ2VSZWY+IG1fcGl4ZWxSZXN1bHQ7CiAgICAgV0tSZXRh
aW5QdHI8V0tBcnJheVJlZj4gbV9yZXBhaW50UmVjdHM7CiAgICAgc3RkOjpzdHJpbmcgbV9lcnJv
ck1lc3NhZ2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178439</attachid>
            <date>2012-12-09 14:32:27 -0800</date>
            <delta_ts>2012-12-10 02:45:32 -0800</delta_ts>
            <desc>Fix bad merge</desc>
            <filename>bug-104214-20121209232949.patch</filename>
            <type>text/plain</type>
            <size>84995</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MDg5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjllYzE3OTFmOTRmZTRhOTU2YzY0MjUyYzRiNDQzYWZl
MjBiOWU5ZS4uOGE1MjViMGNmMzhmYjA0OWFhYTA3ZmIwMWE0NDA5YTFhYzkzZTRhNiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMz
IEBACisyMDEyLTEyLTA2ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4K
KworICAgICAgICBbV1RSXSBNb3ZlIHRleHQgb3V0cHV0IGFjY3VtdWxhdGlvbiB0byB0aGUgVUlQ
cm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDQyMTQKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBJbnN0
ZWFkIG9mIGFjY3VtdWxhdGluZyB0ZXh0IG91dHB1dCBpbiB0aGUgSW5qZWN0ZWRCdW5kbGUgYW5k
IHRoZW4gc2VuZGluZyBpdCB0byB0aGUgVUlQcm9jZXNzIAorICAgICAgICBvbmNlIGEgdGVzdCBp
cyBmaW5pc2hlZCwgaW1tZWRpYXRlbHkgc2VuZCBhbnkgdGV4dCBvdXRwdXQgdG8gdGhlIFVJUHJv
Y2Vzcy4gVGhpcyB3aWxsIGFsbG93CisgICAgICAgIFdlYktpdFRlc3RSdW5uZXIgdG8gb3V0cHV0
IHRleHQgZnJvbSB0aGUgVUlQcm9jZXNzIGFzIHdlbGwuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDogUmVtb3ZlIHRoZSBoYW5k
bGluZyBvZiB0aGUgdGV4dCBvdXRwdXQKKyAgICAgICAgU3RyaW5nQnVpbGRlci4gQWRkIGEgbWV0
aG9kIHRvIHNlbmQgb3V0cHV0IHRvIHRoZSBVSVByb2Nlc3MuCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oOgorICAgICAgICAoSW5qZWN0
ZWRCdW5kbGUpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGVQYWdlLmNwcDogQ2hhbmdlIGNvZGUgdGhhdCBhcHBlbmRzIHRvIHRoZSBTdHJp
bmdCdWlsZGVyCisgICAgICAgIHRvIHVzZSB0aGUgbmV3IG91dHB1dFRleHQgbWV0aG9kLgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdl
Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVy
LmNwcDogRGl0dG8uCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9h
dGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJBdGsuY3BwOiBEaXR0by4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdEludm9j
YXRpb246OlRlc3RJbnZvY2F0aW9uKTogSW50aWFsaXplIHRoZSBTdHJpbmdCdWlsZGVyLgorICAg
ICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6aW52b2tlKTogQ2xlYXIgdGhlIFN0cmluZ0J1aWxk
ZXIgd2hlbiBhIG5ldyB0ZXN0cyBzdGFydHMuCisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9u
OjpkdW1wUmVzdWx0cyk6IG1fdGV4dE91dHB1dCBpcyBhIFN0cmluZ0J1aWxkZXIgbm93IHNvIHRo
ZQorICAgICAgICBtZXRob2Qgb2YgcHJpbnRpbmcgdGhlIHRleHQgaXMgc2xpZ2h0bHkgZGlmZmVy
ZW50LgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9t
SW5qZWN0ZWRCdW5kbGUpOiBIYW5kbGUgdGhlIG5ldyBUZXh0T3V0cHV0CisgICAgICAgIG1lc3Nh
Z2UgYnkgYXBwZW5kaW5nIHRoZSByZXN1bHRzIHRvIHRoZSBTdHJpbmdCdWlsZGVyLgorICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uaDoKKyAgICAgICAgKFRlc3RJbnZv
Y2F0aW9uKTogU3dpdGNoIHRoZSB0eXBlIG9mIG1fdGV4dE91dHB1dC4KKwogMjAxMi0xMi0wOSAg
WmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgogCiAgICAgICAgIFJlbW92ZSB0
ZXN0UnVubmVyLmRpc2FibGVJbWFnZUxvYWRpbmcoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAppbmRleCBmYTc5
MzlkM2VkN2YxOGFhOWNkMjE5OWViOTY3NjY4MDkwNWRjMzVlLi4xNGNiYzRjNmEyYWE2OTEwYzdh
YTAyNjIwMjQ2OTBmMjU4ZDcyOTNkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcApAQCAtODYsNyArODYsNiBA
QCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShXS0J1bmRsZVJl
ZiBidW5kbGUsIFdLQnVuZGxlUGFnZVJlZgogdm9pZCBJbmplY3RlZEJ1bmRsZTo6aW5pdGlhbGl6
ZShXS0J1bmRsZVJlZiBidW5kbGUsIFdLVHlwZVJlZiBpbml0aWFsaXphdGlvblVzZXJEYXRhKQog
ewogICAgIG1fYnVuZGxlID0gYnVuZGxlOwotICAgIG1fc3RyaW5nQnVpbGRlciA9IFdURjo6YWRv
cHRQdHIobmV3IFdURjo6U3RyaW5nQnVpbGRlcigpKTsKIAogICAgIFdLQnVuZGxlQ2xpZW50IGNs
aWVudCA9IHsKICAgICAgICAga1dLQnVuZGxlQ2xpZW50Q3VycmVudFZlcnNpb24sCkBAIC0yMTgs
OSArMjE3LDcgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZTo6Ym9vbGVhbkZvcktleShXS0RpY3Rpb25h
cnlSZWYgZGljdGlvbmFyeSwgY29uc3QgY2hhcioga2V5KQogICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB3a0tleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhrZXkp
KTsKICAgICBXS1R5cGVSZWYgdmFsdWUgPSBXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGRpY3Rp
b25hcnksIHdrS2V5LmdldCgpKTsKICAgICBpZiAoV0tHZXRUeXBlSUQodmFsdWUpICE9IFdLQm9v
bGVhbkdldFR5cGVJRCgpKSB7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJh
bCgiQm9vbGVhbiB2YWx1ZSBmb3Iga2V5IFwiIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIoKS0+
YXBwZW5kKGtleSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiXCIg
bm90IGZvdW5kIGluIGRpY3Rpb25hcnlcbiIpOworICAgICAgICBvdXRwdXRUZXh0KG1ha2VTdHJp
bmcoIkJvb2xlYW4gdmFsdWUgZm9yIGtleSIsIGtleSwgIiBub3QgZm91bmQgaW4gZGljdGlvbmFy
eVxuIikpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiBXS0Jvb2xl
YW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHZhbHVlKSk7CkBAIC0yMzIsNyAr
MjI5LDYgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6YmVnaW5UZXN0aW5nKFdLRGljdGlvbmFyeVJl
ZiBzZXR0aW5ncykKIAogICAgIG1fcGl4ZWxSZXN1bHQuY2xlYXIoKTsKICAgICBtX3JlcGFpbnRS
ZWN0cy5jbGVhcigpOwotICAgIG1fc3RyaW5nQnVpbGRlci0+Y2xlYXIoKTsKIAogICAgIG1fdGVz
dFJ1bm5lciA9IFRlc3RSdW5uZXI6OmNyZWF0ZSgpOwogICAgIG1fZ2NDb250cm9sbGVyID0gR0ND
b250cm9sbGVyOjpjcmVhdGUoKTsKQEAgLTI5MiwxMCArMjg4LDYgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZTo6ZG9uZSgpCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGRvbmVNZXNzYWdlTmFt
ZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRG9uZSIpKTsKICAgICBX
S1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBkb25lTWVzc2FnZUJvZHkoQWRvcHRX
SywgV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0ZSgpKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB0ZXh0T3V0cHV0S2V5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJUZXh0T3V0cHV0IikpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0ZXh0T3V0
cHV0KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG1fc3RyaW5nQnVpbGRl
ci0+dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgV0tEaWN0aW9uYXJ5QWRkSXRlbShk
b25lTWVzc2FnZUJvZHkuZ2V0KCksIHRleHRPdXRwdXRLZXkuZ2V0KCksIHRleHRPdXRwdXQuZ2V0
KCkpOwotICAgIAogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwaXhlbFJlc3VsdEtleSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBpeGVsUmVzdWx0IikpOwog
ICAgIFdLRGljdGlvbmFyeUFkZEl0ZW0oZG9uZU1lc3NhZ2VCb2R5LmdldCgpLCBwaXhlbFJlc3Vs
dEtleS5nZXQoKSwgbV9waXhlbFJlc3VsdC5nZXQoKSk7CiAKQEAgLTMyMiwxMyArMzE0LDI0IEBA
IHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmNsb3NlT3RoZXJQYWdlcygpCiAgICAgICAgIFdLQnVuZGxl
UGFnZUNsb3NlKHBhZ2VzVG9DbG9zZVtpXSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRCdW5kbGU6OmR1
bXBCYWNrRm9yd2FyZExpc3RzRm9yQWxsUGFnZXMoKQordm9pZCBJbmplY3RlZEJ1bmRsZTo6ZHVt
cEJhY2tGb3J3YXJkTGlzdHNGb3JBbGxQYWdlcyhTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVy
KQogewogICAgIHNpemVfdCBzaXplID0gbV9wYWdlcy5zaXplKCk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIG1fcGFnZXNbaV0tPmR1bXBCYWNrRm9yd2Fy
ZExpc3QoKTsKKyAgICAgICAgbV9wYWdlc1tpXS0+ZHVtcEJhY2tGb3J3YXJkTGlzdChzdHJpbmdC
dWlsZGVyKTsKIH0KLSAgICAKKwordm9pZCBJbmplY3RlZEJ1bmRsZTo6b3V0cHV0VGV4dChjb25z
dCBTdHJpbmcmIG91dHB1dCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBUZXN0aW5nKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKG91dHB1dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlRleHRPdXRwdXQiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKG91dHB1dC51dGY4KCkuZGF0YSgpKSk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShtX2J1
bmRsZSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKK30KKwogdm9pZCBJ
bmplY3RlZEJ1bmRsZTo6cG9zdE5ld0JlZm9yZVVubG9hZFJldHVyblZhbHVlKGJvb2wgdmFsdWUp
CiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSIpKTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuaAppbmRleCA0MTQ2OWVjNzk2ZTkyNWE4NTBjNjQ4MTZmYzU2MTJhN2Q5MDkxODc4
Li4zOTVkMjA0NTZkNGFkY2FiN2M0MzBjMGMxZDAwN2Q2MjZmMGNlZjMwIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5o
CkBAIC0zMywxNiArMzMsMTIgQEAKICNpbmNsdWRlICJUZXh0SW5wdXRDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRy
Lmg+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCi0jaW5jbHVkZSA8c3N0cmVhbT4KLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFz
cyBTdHJpbmdCdWlsZGVyOwotfQotCiBuYW1lc3BhY2UgV1RSIHsKIAogY2xhc3MgSW5qZWN0ZWRC
dW5kbGVQYWdlOwpAQCAtNjcsMTAgKzYzLDkgQEAgcHVibGljOgogICAgIHNpemVfdCBwYWdlQ291
bnQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VzLnNpemUoKTsgfQogICAgIHZvaWQgY2xvc2VPdGhl
clBhZ2VzKCk7CiAKLSAgICB2b2lkIGR1bXBCYWNrRm9yd2FyZExpc3RzRm9yQWxsUGFnZXMoKTsK
KyAgICB2b2lkIGR1bXBCYWNrRm9yd2FyZExpc3RzRm9yQWxsUGFnZXMoU3RyaW5nQnVpbGRlciYp
OwogCiAgICAgdm9pZCBkb25lKCk7Ci0gICAgV1RGOjpTdHJpbmdCdWlsZGVyKiBzdHJpbmdCdWls
ZGVyKCkgeyByZXR1cm4gbV9zdHJpbmdCdWlsZGVyLmdldCgpOyB9CiAgICAgdm9pZCBzZXRQaXhl
bFJlc3VsdChXS0ltYWdlUmVmIGltYWdlKSB7IG1fcGl4ZWxSZXN1bHQgPSBpbWFnZTsgfQogICAg
IHZvaWQgc2V0UmVwYWludFJlY3RzKFdLQXJyYXlSZWYgcmVjdHMpIHsgbV9yZXBhaW50UmVjdHMg
PSByZWN0czsgfQogCkBAIC04Miw2ICs3Nyw3IEBAIHB1YmxpYzoKICAgICBib29sIHNob3VsZER1
bXBQaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX2R1bXBQaXhlbHM7IH0KICAgICBib29sIHVzZVdh
aXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkgY29uc3QgeyByZXR1cm4gbV91c2VXYWl0VG9EdW1wV2F0
Y2hkb2dUaW1lcjsgfQogICAgIAorICAgIHZvaWQgb3V0cHV0VGV4dChjb25zdCBTdHJpbmcmKTsK
ICAgICB2b2lkIHBvc3ROZXdCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZShib29sKTsKICAgICB2b2lk
IHBvc3RBZGRDaHJvbWVJbnB1dEZpZWxkKCk7CiAgICAgdm9pZCBwb3N0UmVtb3ZlQ2hyb21lSW5w
dXRGaWVsZCgpOwpAQCAtMTQ0LDggKzE0MCw2IEBAIHByaXZhdGU6CiAKICAgICBXS0J1bmRsZUZy
YW1lUmVmIG1fdG9wTG9hZGluZ0ZyYW1lOwogCi0gICAgT3duUHRyPFdURjo6U3RyaW5nQnVpbGRl
cj4gbV9zdHJpbmdCdWlsZGVyOwotICAgIAogICAgIGVudW0gU3RhdGUgewogICAgICAgICBJZGxl
LAogICAgICAgICBUZXN0aW5nLApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCmluZGV4IGY3ZjMxMGFj
MjIzNDdhODNjNjk1YTE3ZDgxNDRmNzc2MDViOThkNzYuLjEwMTAyMDBlOTQ0M2JiYjBmNDUzYmQx
NTIxOWVjMWQ0MDhiNDk1NWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAKQEAgLTEwNCw3ICsx
MDQsNyBAQCBzdGF0aWMgV1RGOjpTdHJpbmcgZHVtcFBhdGgoSlNHbG9iYWxDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIG5vZGVWYWx1ZSkKIAogICAgIEpTVmFsdWVSZWYgcGFyZW50Tm9k
ZSA9IHByb3BlcnR5VmFsdWUoY29udGV4dCwgbm9kZVZhbHVlLCAicGFyZW50Tm9kZSIpOwogCi0g
ICAgV1RGOjpTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgU3RyaW5nQnVpbGRlciBz
dHJpbmdCdWlsZGVyOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vZGVO
YW1lKSk7CiAKICAgICBpZiAocGFyZW50Tm9kZSAmJiBKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwg
cGFyZW50Tm9kZSkpIHsKQEAgLTE1Myw3ICsxNTMsNyBAQCBzdGF0aWMgV1RGOjpTdHJpbmcgcmFu
Z2VUb1N0cihXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3Js
ZAogICAgIGludCBzdGFydE9mZnNldCA9IHByb3BlcnR5VmFsdWVJbnQoY29udGV4dCwgcmFuZ2VP
YmplY3QsICJzdGFydE9mZnNldCIpOwogICAgIGludCBlbmRPZmZzZXQgPSBwcm9wZXJ0eVZhbHVl
SW50KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAiZW5kT2Zmc2V0Iik7CiAKLSAgICBXVEY6OlN0cmlu
Z0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJyYW5nZSBmcm9tICIpOwogICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKHN0YXJ0T2Zmc2V0KTsKICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiBvZiAiKTsKQEAgLTE4OSwxNCArMTg5LDE0IEBAIHN0YXRpYyBXVEY6
OlN0cmluZyBzdHlsZURlY1RvU3RyKFdLQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvblJlZiBzdHls
ZSkKICAgICAvLyBEdW1wUmVuZGVyVHJlZSBjYWxscyAtW0RPTUNTU1N0eWxlRGVjbGFyYXRpb24g
ZGVzY3JpcHRpb25dLCB3aGljaCBqdXN0IGR1bXBzIGNsYXNzIG5hbWUgYW5kIG9iamVjdCBhZGRy
ZXNzLgogICAgIC8vIE5vIGV4aXN0aW5nIHRlc3RzIGFjdHVhbGx5IGhpdCB0aGlzIGNvZGUgcGF0
aCBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIGJlY2F1c2UgV2ViQ29yZSBkb2Vzbid0IGNh
bGwKICAgICAvLyB0aGUgZWRpdGluZyBjbGllbnQgaWYgdGhlIHN0eWxpbmcgb3BlcmF0aW9uIHNv
dXJjZSBpcyBDb21tYW5kRnJvbURPTSBvciBDb21tYW5kRnJvbURPTVdpdGhVc2VySW50ZXJmYWNl
LgotICAgIFdURjo6U3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIFN0cmluZ0J1aWxk
ZXIgc3RyaW5nQnVpbGRlcjsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjxET01D
U1NTdHlsZURlY2xhcmF0aW9uIEFERFJFU1M+Iik7CiAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKTsKIH0KIAogc3RhdGljIFdURjo6U3RyaW5nIHNlY3VyaXR5T3JpZ2luVG9TdHIo
V0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4pCiB7Ci0gICAgV1RGOjpTdHJpbmdCdWlsZGVyIHN0
cmluZ0J1aWxkZXI7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCd7Jyk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJp
bmcoYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weVByb3RvY29sKG9yaWdpbikpKSk7CiAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwpAQCAtMjExLDcgKzIxMSw3IEBAIHN0
YXRpYyBXVEY6OlN0cmluZyBzZWN1cml0eU9yaWdpblRvU3RyKFdLU2VjdXJpdHlPcmlnaW5SZWYg
b3JpZ2luKQogc3RhdGljIFdURjo6U3RyaW5nIGZyYW1lVG9TdHIoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZShBZG9wdFdLLCBXS0J1
bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKLSAgICBXVEY6OlN0cmluZ0J1aWxkZXIgc3RyaW5n
QnVpbGRlcjsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgaWYgKFdLQnVu
ZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkpIHsKICAgICAgICAgaWYgKCFXS1N0cmluZ0lzRW1w
dHkobmFtZS5nZXQoKSkpIHsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgibWFpbiBmcmFtZSBcIiIpOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIHN0YXRpYyBpbmxpbmUgV1RG
OjpTdHJpbmcgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJlZiBmaWxlVXJsKQogICAg
ICAgICByZXR1cm4gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoZmlsZVVybCkp
KTsKIAogICAgIFN0cmluZyBwYXRoU3RyaW5nID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENv
cHlQYXRoKGZpbGVVcmwpKSk7Ci0gICAgV1RGOjpTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogCiAgICAgLy8gUmVtb3ZlIHRoZSBs
ZWFkaW5nIHBhdGggZnJvbSBmaWxlIHVybHMuCiAgICAgY29uc3Qgc2l6ZV90IGluZGV4QmFzZU5h
bWUgPSBwYXRoU3RyaW5nLnJldmVyc2VGaW5kKGRpdmlkZXIpOwpAQCAtMjg0LDEyICsyODQsMTIg
QEAgc3RhdGljIGlubGluZSBXVEY6OlN0cmluZyB1cmxTdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tV
UkxSZWYgZmlsZVVybCkKIAogc3RhdGljIEhhc2hNYXA8dWludDY0X3QsIFN0cmluZz4gYXNzaWdu
ZWRVcmxzQ2FjaGU7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wUmVzb3VyY2VVUkwodWludDY0
X3QgaWRlbnRpZmllcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBkdW1wUmVzb3VyY2VVUkwodWludDY0
X3QgaWRlbnRpZmllciwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKICAgICBpZiAo
YXNzaWduZWRVcmxzQ2FjaGUuY29udGFpbnMoaWRlbnRpZmllcikpCi0gICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChhc3NpZ25lZFVybHNDYWNo
ZS5nZXQoaWRlbnRpZmllcikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChhc3NpZ25l
ZFVybHNDYWNoZS5nZXQoaWRlbnRpZmllcikpOwogICAgIGVsc2UKLSAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiPHVua25vd24+
Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPHVua25vd24+Iik7CiB9
CiAKIEluamVjdGVkQnVuZGxlUGFnZTo6SW5qZWN0ZWRCdW5kbGVQYWdlKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlKQpAQCAtNDUzLDY2ICs0NTMsNzYgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJl
c2V0QWZ0ZXJUZXN0KCkKIC8vIExvYWRlciBDbGllbnQgQ2FsbGJhY2tzCiAKIC8vIFN0cmluZyBv
dXRwdXQgbXVzdCBiZSBpZGVudGljYWwgdG8gLVtXZWJGcmFtZSBfZHJ0X2Rlc2NyaXB0aW9uU3Vp
dGFibGVGb3JUZXN0UmVzdWx0XS4KLXN0YXRpYyB2b2lkIGR1bXBGcmFtZURlc2NyaXB0aW9uU3Vp
dGFibGVGb3JUZXN0UmVzdWx0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCitzdGF0aWMgdm9pZCBk
dW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS0J1bmRsZUZyYW1lUmVm
IGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewogICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBuYW1lKEFkb3B0V0ssIFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkp
OwogICAgIGlmIChXS0J1bmRsZUZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKSB7CiAgICAgICAgIGlm
IChXS1N0cmluZ0lzRW1wdHkobmFtZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIm1haW4gZnJhbWUi
KTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgibWFpbiBmcmFtZSIp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgibWFpbiBmcmFtZSBc
IiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmQodG9XVEZTdHJpbmcobmFtZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJyInKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJtYWluIGZyYW1lIFwiIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHRvV1RGU3RyaW5nKG5hbWUpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJyIn
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRW1wdHkobmFt
ZS5nZXQoKSkpIHsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxk
ZXIoKS0+YXBwZW5kTGl0ZXJhbCgiZnJhbWUgKGFub255bW91cykiKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmcmFtZSAoYW5vbnltb3VzKSIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIo
KS0+YXBwZW5kTGl0ZXJhbCgiZnJhbWUgXCIiKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcobmFtZSkpOwotICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnIicpOworICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiZnJhbWUgXCIiKTsKKyAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCh0b1dURlN0cmluZyhuYW1lKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJyIn
KTsKK30KKworc3RhdGljIHZvaWQgZHVtcExvYWRFdmVudChXS0J1bmRsZUZyYW1lUmVmIGZyYW1l
LCBjb25zdCBjaGFyKiBldmVudE5hbWUpCit7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWls
ZGVyOworICAgIGR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1l
LCBzdHJpbmdCdWlsZGVyKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtICIp
OworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGV2ZW50TmFtZSk7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoJ1xuJyk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQo
c3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGR1bXBS
ZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tVUkxSZXF1ZXN0UmVmIHJl
cXVlc3QpCitzdGF0aWMgaW5saW5lIHZvaWQgZHVtcFJlcXVlc3REZXNjcmlwdGlvblN1aXRhYmxl
Rm9yVGVzdFJlc3VsdChXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgU3RyaW5nQnVpbGRlciYgc3Ry
aW5nQnVpbGRlcikKIHsKICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhX
S1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4g
Zmlyc3RQYXJ0eSA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weUZpcnN0UGFydHlGb3JDb29raWVz
KHJlcXVlc3QpKTsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaHR0cE1ldGhvZCA9IGFk
b3B0V0soV0tVUkxSZXF1ZXN0Q29weUhUVFBNZXRob2QocmVxdWVzdCkpOwogCi0gICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiPE5TVVJM
UmVxdWVzdCBVUkwgIik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxk
ZXIoKS0+YXBwZW5kKHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsLmdldCgpKSk7Ci0gICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgi
LCBtYWluIGRvY3VtZW50IFVSTCAiKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmQodXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZpcnN0UGFydHku
Z2V0KCkpKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmRMaXRlcmFsKCIsIGh0dHAgbWV0aG9kICIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiPE5TVVJMUmVxdWVzdCBVUkwgIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
cGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1cmwuZ2V0KCkpKTsKKyAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiwgbWFpbiBkb2N1bWVudCBVUkwgIik7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQodXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZpcnN0UGFydHkuZ2V0KCkpKTsKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgaHR0cCBtZXRob2QgIik7CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VtcHR5KGh0dHBNZXRob2QuZ2V0KCkpKQotICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIobm9uZSkiKTsK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIobm9uZSkiKTsKICAgICBlbHNl
Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZCh0b1dURlN0cmluZyhodHRwTWV0aG9kKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHRvV1RGU3RyaW5nKGh0dHBNZXRob2QpKTsKIAotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnPicpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCc+Jyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wUmVzcG9uc2VEZXNjcmlwdGlvblN1
aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKQorc3RhdGljIGlu
bGluZSB2b2lkIGR1bXBSZXNwb25zZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdL
VVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7
CiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNv
cHlVUkwocmVzcG9uc2UpKTsKICAgICBpZiAoIXVybCkgewotICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIobnVsbCkiKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIobnVsbCkiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmRMaXRlcmFsKCI8TlNVUkxSZXNwb25zZSAiKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQocGF0aFN1aXRhYmxlRm9yVGVzdFJlc3Vs
dCh1cmwuZ2V0KCkpKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRl
cigpLT5hcHBlbmRMaXRlcmFsKCIsIGh0dHAgc3RhdHVzIGNvZGUgIik7Ci0gICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTnVtYmVyKFdLVVJMUmVzcG9u
c2VIVFRQU3RhdHVzQ29kZShyZXNwb25zZSkpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnPicpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiPE5TVVJMUmVzcG9uc2UgIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocGF0
aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1cmwuZ2V0KCkpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIiwgaHR0cCBzdGF0dXMgY29kZSAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZE51bWJlcihXS1VSTFJlc3BvbnNlSFRUUFN0YXR1c0NvZGUocmVzcG9uc2UpKTsKKyAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnPicpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHVtcEVy
cm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tFcnJvclJlZiBlcnJvcikKK3N0
YXRpYyBpbmxpbmUgdm9pZCBkdW1wRXJyb3JEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3Vs
dChXS0Vycm9yUmVmIGVycm9yLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQogewogICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvckRvbWFpbiA9IGFkb3B0V0soV0tFcnJvckNv
cHlEb21haW4oZXJyb3IpKTsKICAgICBpbnQgZXJyb3JDb2RlID0gV0tFcnJvckdldEVycm9yQ29k
ZShlcnJvcik7CkBAIC01MjYsMjAgKzUzNiwyMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcEVy
cm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tFcnJvclJlZiBlcnJvcikKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhlcnJvckRvbWFpbi5nZXQoKSwgIldl
YktpdFBvbGljeUVycm9yIikpCiAgICAgICAgIGVycm9yRG9tYWluID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0RXJyb3JEb21haW4iKSk7CiAKLSAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCI8TlNF
cnJvciBkb21haW4gIik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxk
ZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKGVycm9yRG9tYWluKSk7Ci0gICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiLCBjb2RlICIpOwot
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZE51bWJl
cihlcnJvckNvZGUpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPE5TRXJyb3Ig
ZG9tYWluICIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGVycm9yRG9t
YWluKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIGNvZGUgIik7CisgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIoZXJyb3JDb2RlKTsKIAogICAgIFdLUmV0YWluUHRy
PFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdLRXJyb3JDb3B5RmFpbGluZ1VSTChlcnJvcikpOwog
ICAgIGlmICh1cmwuZ2V0KCkpIHsKICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVy
bFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpOwotICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIs
IGZhaWxpbmcgVVJMIFwiIik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKLSAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCciJyk7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBmYWlsaW5nIFVSTCBcIiIpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJyInKTsKICAgICB9CiAKLSAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJz4nKTsKKyAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgnPicpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkU3RhcnRQ
cm92aXNpb25hbExvYWRGb3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVGcmFt
ZVJlZiBmcmFtZSwgV0tUeXBlUmVmKiwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKQEAgLTU3OCwy
OCArNTg4LDI5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlSW50ZW50Rm9y
RnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlCiAgICAgc3RhdGljX2Nhc3Q8SW5q
ZWN0ZWRCdW5kbGVQYWdlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpLT5tX2N1cnJl
bnRJbnRlbnRSZXF1ZXN0ID0gaW50ZW50UmVxdWVzdDsKICAgICBXS1JldGFpblB0cjxXS0J1bmRs
ZUludGVudFJlZj4gaW50ZW50KEFkb3B0V0ssIFdLQnVuZGxlSW50ZW50UmVxdWVzdENvcHlJbnRl
bnQoaW50ZW50UmVxdWVzdCkpOwogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmlu
Z0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiUmVjZWl2ZWQgV2ViIEludGVudDogYWN0aW9uPSIp
OworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIlJlY2VpdmVkIFdlYiBJbnRlbnQ6IGFjdGlvbj0iKTsKICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gd2tBY3Rpb24oQWRvcHRXSywgV0tCdW5kbGVJbnRlbnRDb3B5QWN0
aW9uKGludGVudC5nZXQoKSkpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdC
dWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyh3a0FjdGlvbi5nZXQoKSkpOwotICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiB0eXBl
PSIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHdrQWN0aW9uLmdldCgp
KSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgdHlwZT0iKTsKICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUeXBlKEFkb3B0V0ssIFdLQnVuZGxlSW50ZW50Q29weVR5
cGUoaW50ZW50LmdldCgpKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1
aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHdrVHlwZS5nZXQoKSkpOwotICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnXG4nKTsKKyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh3a1R5cGUuZ2V0KCkpKTsKKyAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgnXG4nKTsKIAogICAgIGNvbnN0IHNpemVfdCBudW1NZXNzYWdlUG9ydHMg
PSBXS0J1bmRsZUludGVudE1lc3NhZ2VQb3J0Q291bnQoaW50ZW50LmdldCgpKTsKICAgICBpZiAo
bnVtTWVzc2FnZVBvcnRzKSB7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIkhhdmUgIik7Ci0gICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZE51bWJlcihudW1NZXNzYWdlUG9y
dHMpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmRMaXRlcmFsKCIgcG9ydHNcbiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIkhhdmUgIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKG51bU1l
c3NhZ2VQb3J0cyk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHBvcnRz
XG4iKTsKICAgICB9CiAKICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tTZXJ2aWNlVXJsKEFk
b3B0V0ssIFdLQnVuZGxlSW50ZW50Q29weVNlcnZpY2UoaW50ZW50LmdldCgpKSk7CiAgICAgaWYg
KHdrU2VydmljZVVybCkgewogICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tTZXJ2
aWNlKEFkb3B0V0ssIFdLVVJMQ29weVN0cmluZyh3a1NlcnZpY2VVcmwuZ2V0KCkpKTsKICAgICAg
ICAgaWYgKHdrU2VydmljZSAmJiAhV0tTdHJpbmdJc0VtcHR5KHdrU2VydmljZS5nZXQoKSkpIHsK
LSAgICAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZExpdGVyYWwoIkV4cGxpY2l0IGludGVudCBzZXJ2aWNlOiAiKTsKLSAgICAgICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmlu
Zyh3a1NlcnZpY2UuZ2V0KCkpKTsKLSAgICAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnXG4nKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiRXhwbGljaXQgaW50ZW50IHNlcnZpY2U6ICIpOworICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcod2tTZXJ2aWNlLmdldCgpKSk7Cisg
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtNjA5LDQ0ICs2MjAsNDggQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2Vp
dmVJbnRlbnRGb3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGUKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG51bUV4dHJhS2V5czsgKytpKSB7CiAgICAgICAgIFdLU3RyaW5n
UmVmIHdrS2V5ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRl
eCh3a0V4dHJhS2V5cy5nZXQoKSwgaSkpOwogICAgICAgICBXS1N0cmluZ1JlZiB3a1ZhbHVlID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkod2tFeHRy
YXMuZ2V0KCksIHdrS2V5KSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIkV4dHJhc1siKTsKLSAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHdrS2V5
KSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZExpdGVyYWwoIl0gPSAiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0
cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHdrVmFsdWUpKTsKLSAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCdcbicpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkV4dHJhc1siKTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcod2tLZXkpKTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCJdID0gIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHRvV1RGU3RyaW5nKHdrVmFsdWUpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xu
Jyk7CiAgICAgfQogCiAgICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gd2tTdWdnZXN0aW9ucyhB
ZG9wdFdLLCBXS0J1bmRsZUludGVudENvcHlTdWdnZXN0aW9ucyhpbnRlbnQuZ2V0KCkpKTsKICAg
ICBjb25zdCBzaXplX3QgbnVtU3VnZ2VzdGlvbnMgPSBXS0FycmF5R2V0U2l6ZSh3a1N1Z2dlc3Rp
b25zLmdldCgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVN1Z2dlc3Rpb25zOyAr
K2kpIHsKICAgICAgICAgV0tTdHJpbmdSZWYgd2tTdWdnZXN0aW9uID0gc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3a1N1Z2dlc3Rpb25zLmdldCgpLCBpKSk7
Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZExpdGVyYWwoIkhhdmUgc3VnZ2VzdGlvbiAiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHdrU3VnZ2VzdGlvbikp
OwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBl
bmQoJ1xuJyk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiSGF2ZSBzdWdn
ZXN0aW9uICIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh3a1N1
Z2dlc3Rpb24pKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgfQor
CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50
b1N0cmluZygpKTsKICNlbmRpZgogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6cmVnaXN0
ZXJJbnRlbnRTZXJ2aWNlRm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJh
bWVSZWYgZnJhbWUsIFdLSW50ZW50U2VydmljZUluZm9SZWYgc2VydmljZUluZm8sIFdLVHlwZVJl
ZiogdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAjaWYgRU5BQkxFKFdFQl9J
TlRFTlRTX1RBRykKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmRMaXRlcmFsKCJSZWdpc3RlcmVkIFdlYiBJbnRlbnQgU2VydmljZTogYWN0aW9uPSIp
OworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIlJlZ2lzdGVyZWQgV2ViIEludGVudCBTZXJ2aWNlOiBhY3Rpb249Iik7CiAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrQWN0aW9uKEFkb3B0V0ssIFdLSW50ZW50U2Vy
dmljZUluZm9Db3B5QWN0aW9uKHNlcnZpY2VJbmZvKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHdrQWN0aW9uLmdldCgp
KSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
TGl0ZXJhbCgiIHR5cGU9Iik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmco
d2tBY3Rpb24uZ2V0KCkpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB0eXBl
PSIpOwogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a1R5cGUoQWRvcHRXSywgV0tJbnRl
bnRTZXJ2aWNlSW5mb0NvcHlUeXBlKHNlcnZpY2VJbmZvKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHdrVHlwZS5nZXQo
KSkpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZExpdGVyYWwoIiB0aXRsZT0iKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmlu
Zyh3a1R5cGUuZ2V0KCkpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB0aXRs
ZT0iKTsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUaXRsZShBZG9wdFdLLCBXS0lu
dGVudFNlcnZpY2VJbmZvQ29weVRpdGxlKHNlcnZpY2VJbmZvKSk7Ci0gICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHdrVGl0bGUu
Z2V0KCkpKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmRMaXRlcmFsKCIgdXJsPSIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3Ry
aW5nKHdrVGl0bGUuZ2V0KCkpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB1
cmw9Iik7CiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrVXJsKEFkb3B0V0ssIFdLSW50ZW50
U2VydmljZUluZm9Db3B5SHJlZihzZXJ2aWNlSW5mbykpOwogICAgIGlmICh3a1VybCkKLSAgICAg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RG
U3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHdrVXJsLmdldCgpKSkpKTsKLSAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIgZGlz
cG9zaXRpb249Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGFk
b3B0V0soV0tVUkxDb3B5U3RyaW5nKHdrVXJsLmdldCgpKSkpKTsKKyAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiBkaXNwb3NpdGlvbj0iKTsKICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gd2tEaXNwb3NpdGlvbihBZG9wdFdLLCBXS0ludGVudFNlcnZpY2VJbmZvQ29weURpc3Bv
c2l0aW9uKHNlcnZpY2VJbmZvKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmlu
Z0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHdrRGlzcG9zaXRpb24uZ2V0KCkpKTsKLSAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJ1xuJyk7
CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcod2tEaXNwb3NpdGlvbi5nZXQo
KSkpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAjZW5kaWYK
IH0KIApAQCAtNzQ3LDE5ICs3NjIsMTQgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFN0
YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKIAogICAg
IHBsYXRmb3JtRGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShmcmFtZSk7CiAKLSAgICBp
ZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1l
TG9hZENhbGxiYWNrcygpKSB7Ci0gICAgICAgIGR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVG
b3JUZXN0UmVzdWx0KGZyYW1lKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0
cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiIC0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRG
b3JGcmFtZVxuIik7Ci0gICAgfQorICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVz
dFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgICAgIGR1bXBM
b2FkRXZlbnQoZnJhbWUsICJkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lIik7CiAKICAg
ICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50b3BMb2FkaW5nRnJhbWUoKSkKICAgICAg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnNldFRvcExvYWRpbmdGcmFtZShmcmFtZSk7CiAK
LSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkU3Rv
cFByb3Zpc2lvbmFsRnJhbWVMb2FkcygpKSB7Ci0gICAgICAgIGR1bXBGcmFtZURlc2NyaXB0aW9u
U3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiIC0gc3RvcHBpbmcgbG9hZCBp
biBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lIGNhbGxiYWNrXG4iKTsKLSAgICAgICAg
V0tCdW5kbGVGcmFtZVN0b3BMb2FkaW5nKGZyYW1lKTsKLSAgICB9CisgICAgaWYgKEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZFN0b3BQcm92aXNpb25hbEZyYW1l
TG9hZHMoKSkKKyAgICAgICAgZHVtcExvYWRFdmVudChmcmFtZSwgInN0b3BwaW5nIGxvYWQgaW4g
ZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSBjYWxsYmFjayIpOwogfQogCiB2b2lkIElu
amVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxM
b2FkRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKQEAgLTc3MCw4ICs3ODAsNyBAQCB2
b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlz
aW9uYWxMb2FkRm9yRnJhbWUoV0tCdQogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChm
cmFtZSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kTGl0ZXJhbCgiIC0gZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2Fk
Rm9yRnJhbWVcbiIpOworICAgIGR1bXBMb2FkRXZlbnQoZnJhbWUsICJkaWRSZWNlaXZlU2VydmVy
UmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZSIpOwogfQogCiB2b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6ZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lKFdLQnVu
ZGxlRnJhbWVSZWYgZnJhbWUsIFdLRXJyb3JSZWYpCkBAIC03NzksMTAgKzc4OCw4IEBAIHZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJh
bWUoV0tCdW5kbGVGcmFtZVJlCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNU
ZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7
Ci0gICAgICAgIGR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1l
KTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kTGl0ZXJhbCgiIC0gZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvclxuIik7Ci0gICAg
fQorICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRE
dW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgICAgIGR1bXBMb2FkRXZlbnQoZnJhbWUsICJk
aWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yIik7CiAKICAgICBmcmFtZURpZENoYW5nZUxv
Y2F0aW9uKGZyYW1lKTsKIH0KQEAgLTc5NSw4ICs4MDIsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiAgICAg
aWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJh
bWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGR1bXBGcmFtZURlc2Ny
aXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIgLSBkaWRDb21taXRMb2Fk
Rm9yRnJhbWVcbiIpOworICAgIGR1bXBMb2FkRXZlbnQoZnJhbWUsICJkaWRDb21taXRMb2FkRm9y
RnJhbWUiKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZpbmlzaFByb2dyZXNz
KCkKQEAgLTgwNyw0NiArODEzLDQ3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5p
c2hQcm9ncmVzcygpCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5l
cigpLT5zaG91bGREdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZExpdGVyYWwoInBvc3RQcm9ncmVzc0ZpbmlzaGVkTm90aWZpY2F0aW9uXG4iKTsKKyAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dCgicG9zdFByb2dyZXNzRmluaXNoZWROb3Rp
ZmljYXRpb25cbiIpOwogfQogCiBlbnVtIEZyYW1lTmFtZVBvbGljeSB7IFNob3VsZE5vdEluY2x1
ZGVGcmFtZU5hbWUsIFNob3VsZEluY2x1ZGVGcmFtZU5hbWUgfTsKIAotc3RhdGljIHZvaWQgZHVt
cEZyYW1lU2Nyb2xsUG9zaXRpb24oV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgRnJhbWVOYW1lUG9s
aWN5IHNob3VsZEluY2x1ZGVGcmFtZU5hbWUgPSBTaG91bGROb3RJbmNsdWRlRnJhbWVOYW1lKQor
c3RhdGljIHZvaWQgZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oV0tCdW5kbGVGcmFtZVJlZiBmcmFt
ZSwgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlciwgRnJhbWVOYW1lUG9saWN5IHNob3VsZElu
Y2x1ZGVGcmFtZU5hbWUgPSBTaG91bGROb3RJbmNsdWRlRnJhbWVOYW1lKQogewogICAgIGRvdWJs
ZSB4ID0gbnVtZXJpY1dpbmRvd1Byb3BlcnR5VmFsdWUoZnJhbWUsICJwYWdlWE9mZnNldCIpOwog
ICAgIGRvdWJsZSB5ID0gbnVtZXJpY1dpbmRvd1Byb3BlcnR5VmFsdWUoZnJhbWUsICJwYWdlWU9m
ZnNldCIpOwotICAgIGlmIChmYWJzKHgpID4gMC4wMDAwMDAwMSB8fCBmYWJzKHkpID4gMC4wMDAw
MDAwMSkgewotICAgICAgICBpZiAoc2hvdWxkSW5jbHVkZUZyYW1lTmFtZSkgewotICAgICAgICAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWUoQWRvcHRXSywgV0tCdW5kbGVGcmFtZUNv
cHlOYW1lKGZyYW1lKSk7Ci0gICAgICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJmcmFtZSAnIik7Ci0gICAgICAgICAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmco
bmFtZSkpOwotICAgICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxk
ZXIoKS0+YXBwZW5kTGl0ZXJhbCgiJyAiKTsKLSAgICAgICAgfQotICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJzY3JvbGxlZCB0
byAiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+
YXBwZW5kKFdURjo6U3RyaW5nOjpudW1iZXIoeCkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJywnKTsKLSAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKFdURjo6U3RyaW5nOjpudW1i
ZXIoeSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmQoJ1xuJyk7CisgICAgaWYgKGZhYnMoeCkgPD0gMC4wMDAwMDAwMSAmJiBmYWJzKHkp
IDw9IDAuMDAwMDAwMDEpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzaG91bGRJbmNsdWRl
RnJhbWVOYW1lKSB7CisgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lKEFkb3B0
V0ssIFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpOworICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoImZyYW1lICciKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
dG9XVEZTdHJpbmcobmFtZSkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IicgIik7CiAgICAgfQorICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgic2Nyb2xsZWQg
dG8gIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoV1RGOjpTdHJpbmc6Om51bWJlcih4KSk7
CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJywnKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChXVEY6OlN0cmluZzo6bnVtYmVyKHkpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4n
KTsKIH0KIAotc3RhdGljIHZvaWQgZHVtcERlc2NlbmRhbnRGcmFtZVNjcm9sbFBvc2l0aW9ucyhX
S0J1bmRsZUZyYW1lUmVmIGZyYW1lKQorc3RhdGljIHZvaWQgZHVtcERlc2NlbmRhbnRGcmFtZVNj
cm9sbFBvc2l0aW9ucyhXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZGVyJiBzdHJp
bmdCdWlsZGVyKQogewogICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IGNoaWxkRnJhbWVzKEFk
b3B0V0ssIFdLQnVuZGxlRnJhbWVDb3B5Q2hpbGRGcmFtZXMoZnJhbWUpKTsKICAgICBzaXplX3Qg
c2l6ZSA9IFdLQXJyYXlHZXRTaXplKGNoaWxkRnJhbWVzLmdldCgpKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBXS0J1bmRsZUZyYW1lUmVmIHN1YmZy
YW1lID0gc3RhdGljX2Nhc3Q8V0tCdW5kbGVGcmFtZVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4
KGNoaWxkRnJhbWVzLmdldCgpLCBpKSk7Ci0gICAgICAgIGR1bXBGcmFtZVNjcm9sbFBvc2l0aW9u
KHN1YmZyYW1lLCBTaG91bGRJbmNsdWRlRnJhbWVOYW1lKTsKLSAgICAgICAgZHVtcERlc2NlbmRh
bnRGcmFtZVNjcm9sbFBvc2l0aW9ucyhzdWJmcmFtZSk7CisgICAgICAgIGR1bXBGcmFtZVNjcm9s
bFBvc2l0aW9uKHN1YmZyYW1lLCBzdHJpbmdCdWlsZGVyLCBTaG91bGRJbmNsdWRlRnJhbWVOYW1l
KTsKKyAgICAgICAgZHVtcERlc2NlbmRhbnRGcmFtZVNjcm9sbFBvc2l0aW9ucyhzdWJmcmFtZSwg
c3RyaW5nQnVpbGRlcik7CiAgICAgfQogfQogCi12b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVt
cEFsbEZyYW1lU2Nyb2xsUG9zaXRpb25zKCkKK3ZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1w
QWxsRnJhbWVTY3JvbGxQb3NpdGlvbnMoU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsK
ICAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKG1f
cGFnZSk7Ci0gICAgZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oZnJhbWUpOwotICAgIGR1bXBEZXNj
ZW5kYW50RnJhbWVTY3JvbGxQb3NpdGlvbnMoZnJhbWUpOworICAgIGR1bXBGcmFtZVNjcm9sbFBv
c2l0aW9uKGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKKyAgICBkdW1wRGVzY2VuZGFudEZyYW1lU2Ny
b2xsUG9zaXRpb25zKGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKIH0KIAogc3RhdGljIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiB0b0pTKGNvbnN0IGNoYXIqIHN0cmluZykKQEAgLTg3Myw3ICs4ODAs
NyBAQCBzdGF0aWMgYm9vbCBoYXNEb2N1bWVudEVsZW1lbnQoV0tCdW5kbGVGcmFtZVJlZiBmcmFt
ZSkKICAgICByZXR1cm4gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBkb2N1bWVudEVsZW1lbnRW
YWx1ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGR1bXBGcmFtZVRleHQoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSkKK3N0YXRpYyB2b2lkIGR1bXBGcmFtZVRleHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwg
U3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKICAgICAvLyBJZiB0aGUgZnJhbWUgZG9l
c24ndCBoYXZlIGEgZG9jdW1lbnQgZWxlbWVudCwgaXRzIGlubmVyIHRleHQgd2lsbCBiZSBhbiBl
bXB0eSBzdHJpbmcsIHNvCiAgICAgLy8gd2UnbGwgZW5kIHVwIGp1c3QgYXBwZW5kaW5nIGEgc2lu
Z2xlIG5ld2xpbmUgYmVsb3cuIEJ1dCBEdW1wUmVuZGVyVHJlZSBkb2Vzbid0IGFwcGVuZApAQCAt
ODgyLDMwICs4ODksMzIgQEAgc3RhdGljIHZvaWQgZHVtcEZyYW1lVGV4dChXS0J1bmRsZUZyYW1l
UmVmIGZyYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gdGV4dChBZG9wdFdLLCBXS0J1bmRsZUZyYW1lQ29weUlubmVyVGV4dChmcmFtZSkpOwotICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0
cmluZyh0ZXh0KSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIo
KS0+YXBwZW5kKCdcbicpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHRl
eHQpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKIH0KIAotc3RhdGljIHZvaWQg
ZHVtcERlc2NlbmRhbnRGcmFtZXNUZXh0KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCitzdGF0aWMg
dm9pZCBkdW1wRGVzY2VuZGFudEZyYW1lc1RleHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3Ry
aW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKIHsKICAgICBXS1JldGFpblB0cjxXS0FycmF5UmVm
PiBjaGlsZEZyYW1lcyhBZG9wdFdLLCBXS0J1bmRsZUZyYW1lQ29weUNoaWxkRnJhbWVzKGZyYW1l
KSk7CiAgICAgc2l6ZV90IHNpemUgPSBXS0FycmF5R2V0U2l6ZShjaGlsZEZyYW1lcy5nZXQoKSk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgV0tCdW5k
bGVGcmFtZVJlZiBzdWJmcmFtZSA9IHN0YXRpY19jYXN0PFdLQnVuZGxlRnJhbWVSZWY+KFdLQXJy
YXlHZXRJdGVtQXRJbmRleChjaGlsZEZyYW1lcy5nZXQoKSwgaSkpOwogICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gc3ViZnJhbWVOYW1lKEFkb3B0V0ssIFdLQnVuZGxlRnJhbWVDb3B5
TmFtZShzdWJmcmFtZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJcbi0tLS0tLS0tXG5GcmFtZTogJyIpOwotICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZT
dHJpbmcoc3ViZnJhbWVOYW1lKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
dHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIidcbi0tLS0tLS0tXG4iKTsKLSAgICAgICAg
ZHVtcEZyYW1lVGV4dChzdWJmcmFtZSk7Ci0gICAgICAgIGR1bXBEZXNjZW5kYW50RnJhbWVzVGV4
dChzdWJmcmFtZSk7CisKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcbi0t
LS0tLS0tXG5GcmFtZTogJyIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0
cmluZyhzdWJmcmFtZU5hbWUpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCInXG4tLS0tLS0tLVxuIik7CisKKyAgICAgICAgZHVtcEZyYW1lVGV4dChzdWJmcmFtZSwgc3Ry
aW5nQnVpbGRlcik7CisgICAgICAgIGR1bXBEZXNjZW5kYW50RnJhbWVzVGV4dChzdWJmcmFtZSwg
c3RyaW5nQnVpbGRlcik7CiAgICAgfQogfQogCi12b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVt
cEFsbEZyYW1lc1RleHQoKQordm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBBbGxGcmFtZXNU
ZXh0KFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7CiAgICAgV0tCdW5kbGVGcmFtZVJl
ZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2UpOwotICAgIGR1bXBGcmFt
ZVRleHQoZnJhbWUpOwotICAgIGR1bXBEZXNjZW5kYW50RnJhbWVzVGV4dChmcmFtZSk7CisgICAg
ZHVtcEZyYW1lVGV4dChmcmFtZSwgc3RyaW5nQnVpbGRlcik7CisgICAgZHVtcERlc2NlbmRhbnRG
cmFtZXNUZXh0KGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmR1bXAoKQpAQCAtOTIzLDI3ICs5MzIsMjkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OmR1bXAoKQogICAgIGlmICh1cmwuZmluZCgiZHVtcEFzVGV4dC8iKSAhPSBXVEY6Om5vdEZv
dW5kKQogICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5kdW1w
QXNUZXh0KGZhbHNlKTsKIAorICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKwogICAg
IHN3aXRjaCAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+d2hhdFRvRHVt
cCgpKSB7CiAgICAgY2FzZSBUZXN0UnVubmVyOjpSZW5kZXJUcmVlOiB7CiAgICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB0ZXh0KEFkb3B0V0ssIFdLQnVuZGxlUGFnZUNvcHlSZW5kZXJU
cmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihtX3BhZ2UpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHRleHQpKTsK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcodGV4dCkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgY2FzZSBUZXN0UnVubmVyOjpNYWluRnJhbWVUZXh0OgotICAg
ICAgICBkdW1wRnJhbWVUZXh0KFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2UpKTsKKyAg
ICAgICAgZHVtcEZyYW1lVGV4dChXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKSwgc3Ry
aW5nQnVpbGRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGVzdFJ1bm5lcjo6QWxsRnJh
bWVzVGV4dDoKLSAgICAgICAgZHVtcEFsbEZyYW1lc1RleHQoKTsKKyAgICAgICAgZHVtcEFsbEZy
YW1lc1RleHQoc3RyaW5nQnVpbGRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGlm
IChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wQWxsRnJh
bWVTY3JvbGxQb3NpdGlvbnMoKSkKLSAgICAgICAgZHVtcEFsbEZyYW1lU2Nyb2xsUG9zaXRpb25z
KCk7CisgICAgICAgIGR1bXBBbGxGcmFtZVNjcm9sbFBvc2l0aW9ucyhzdHJpbmdCdWlsZGVyKTsK
ICAgICBlbHNlIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24oKSkKLSAgICAgICAgZHVtcEZyYW1lU2Nyb2xs
UG9zaXRpb24oV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKG1fcGFnZSkpOworICAgICAgICBkdW1w
RnJhbWVTY3JvbGxQb3NpdGlvbihXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKSwgc3Ry
aW5nQnVpbGRlcik7CiAKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcEJhY2tGb3J3YXJkTGlzdHNGb3JBbGxXaW5kb3dzKCkpCi0gICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5kdW1wQmFja0ZvcndhcmRMaXN0c0ZvckFsbFBhZ2Vz
KCk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5kdW1wQmFja0ZvcndhcmRMaXN0
c0ZvckFsbFBhZ2VzKHN0cmluZ0J1aWxkZXIpOwogCiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5zaG91bGREdW1wUGl4ZWxzKCkgJiYgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcFBpeGVscygpKSB7CiAgICAgICAgIFdLU25hcHNob3RPcHRp
b25zIG9wdGlvbnMgPSBrV0tTbmFwc2hvdE9wdGlvbnNTaGFyZWFibGUgfCBrV0tTbmFwc2hvdE9w
dGlvbnNJblZpZXdDb29yZGluYXRlczsKQEAgLTk1NSw2ICs5NjYsNyBAQCB2b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6ZHVtcCgpCiAgICAgICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
c2V0UmVwYWludFJlY3RzKGFkb3B0V0soV0tCdW5kbGVQYWdlQ29weVRyYWNrZWRSZXBhaW50UmVj
dHMobV9wYWdlKSkuZ2V0KCkpOwogICAgIH0KIAorICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLmRvbmUoKTsKIH0KIApAQCAtOTYzLDEwICs5NzUsOCBAQCB2b2lkIEluamVj
dGVkQnVuZGxlUGFnZTo6ZGlkRmluaXNoTG9hZEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJh
bWUpCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RS
dW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7Ci0gICAgICAgIGR1bXBG
cmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lKTsKLSAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiIC0g
ZGlkRmluaXNoTG9hZEZvckZyYW1lXG4iKTsKLSAgICB9CisgICAgaWYgKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkK
KyAgICAgICAgZHVtcExvYWRFdmVudChmcmFtZSwgImRpZEZpbmlzaExvYWRGb3JGcmFtZSIpOwog
CiAgICAgZnJhbWVEaWRDaGFuZ2VMb2NhdGlvbihmcmFtZSwgLypzaG91bGREdW1wKi8gdHJ1ZSk7
CiB9CkBAIC05NzYsMTAgKzk4Niw4IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGYWls
TG9hZFdpdGhFcnJvckZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLCiAgICAgaWYg
KCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hv
dWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7Ci0gICAgICAgIGR1bXBGcmFtZURlc2NyaXB0
aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiIC0gZGlkRmFpbExvYWRX
aXRoRXJyb3JcbiIpOwotICAgIH0KKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgICAgICBkdW1w
TG9hZEV2ZW50KGZyYW1lLCAiZGlkRmFpbExvYWRXaXRoRXJyb3IiKTsKIAogICAgIGZyYW1lRGlk
Q2hhbmdlTG9jYXRpb24oZnJhbWUpOwogfQpAQCAtOTg5LDE5ICs5OTcsMjEgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKFdLU3RyaW5nUmVmIHRpdGxl
LCBXS0J1bmRsZUZyYW0KICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RS
dW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVp
bGRlcjsKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hv
dWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7Ci0gICAgICAgIGR1bXBGcmFtZURlc2NyaXB0
aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiIC0gZGlkUmVjZWl2ZVRp
dGxlOiAiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIo
KS0+YXBwZW5kKHRvV1RGU3RyaW5nKHRpdGxlKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnXG4nKTsKKyAgICAgICAgZHVtcEZyYW1l
RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJhbWUsIHN0cmluZ0J1aWxkZXIpOwor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIGRpZFJlY2VpdmVUaXRsZTog
Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHRpdGxlKSk7Cisg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgIH0KIAotICAgIGlmICghSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFRpdGxlQ2hhbmdl
cygpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50
ZXN0UnVubmVyKCktPnNob3VsZER1bXBUaXRsZUNoYW5nZXMoKSkgeworICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIlRJVExFIENIQU5HRUQ6ICciKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcodGl0bGUpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCInXG4iKTsKKyAgICB9CiAKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJUSVRMRSBDSEFOR0VEOiAnIik7
Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRv
V1RGU3RyaW5nKHRpdGxlKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1
aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiJ1xuIik7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmRpZENsZWFyV2luZG93Rm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCkKQEAgLTEwMzksOCArMTA0OSw3IEBA
IHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDYW5jZWxDbGllbnRSZWRpcmVjdEZvckZyYW1l
KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0
KGZyYW1lKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmRMaXRlcmFsKCIgLSBkaWRDYW5jZWxDbGllbnRSZWRpcmVjdEZvckZyYW1lXG4iKTsKKyAg
ICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAiZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3RGb3JGcmFtZSIp
OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVj
dEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLVVJMUmVmIHVybCwgZG91YmxlIGRl
bGF5LCBkb3VibGUgZGF0ZSkKQEAgLTEwNTEsMTAgKzEwNjAsMTIgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OndpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RGb3JGcmFtZShXS0J1bmRsZUZyYW1l
UmVmIGZyYW0KICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCkt
PnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
ZHVtcEZyYW1lRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJhbWUpOwotICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiAt
IHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTDogIik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1
bHQodXJsKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+
YXBwZW5kTGl0ZXJhbCgiIFxuIik7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwor
ICAgIGR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGZyYW1lLCBzdHJp
bmdCdWlsZGVyKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIHdpbGxQZXJm
b3JtQ2xpZW50UmVkaXJlY3RUb1VSTDogIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocGF0
aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1cmwpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIiBcbiIpOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpk
aWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwg
V0tTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZSB0eXBlKQpAQCAtMTA2NiwxNyArMTA3NywxNyBA
QCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUo
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tz
KCkpIHsKLSAgICAgICAgZHVtcEZyYW1lRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQo
ZnJhbWUpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmRMaXRlcmFsKCIgLSBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZVxuIik7Ci0g
ICAgfQorICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgICAgIGR1bXBMb2FkRXZlbnQoZnJhbWUs
ICJkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZSIpOwogCiAgICAgdW5zaWduZWQgcGVuZGlu
Z0ZyYW1lVW5sb2FkRXZlbnRzID0gV0tCdW5kbGVGcmFtZUdldFBlbmRpbmdVbmxvYWRDb3VudChm
cmFtZSk7CiAgICAgaWYgKHBlbmRpbmdGcmFtZVVubG9hZEV2ZW50cykgewotICAgICAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoZnJhbWVUb1N0cihm
cmFtZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmRMaXRlcmFsKCIgLSBoYXMgIik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZE51bWJlcihwZW5kaW5nRnJhbWVVbmxvYWRFdmVu
dHMpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmRMaXRlcmFsKCIgb251bmxvYWQgaGFuZGxlcihzKVxuIik7CisgICAgICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZnJhbWVU
b1N0cihmcmFtZSkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIGhh
cyAiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIocGVuZGluZ0ZyYW1lVW5s
b2FkRXZlbnRzKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgb251bmxv
YWQgaGFuZGxlcihzKVxuIik7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRw
dXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQogfQogCkBAIC0xMDg1LDI4
ICsxMDk2LDI2IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRIYW5kbGVPbmxvYWRFdmVu
dHNGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogICAgIGlmICghSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxv
YWRDYWxsYmFja3MoKSkgewotICAgICAgICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9y
VGVzdFJlc3VsdChmcmFtZSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiAtIGRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZy
YW1lXG4iKTsKLSAgICB9CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICAgICAgZHVtcExvYWRF
dmVudChmcmFtZSwgImRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lIik7CiB9CiAKIHZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50Rm9yRnJhbWUoV0tC
dW5kbGVGcmFtZVJlZiBmcmFtZSkKIHsKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQotICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJk
aWREaXNwbGF5SW5zZWN1cmVDb250ZW50XG4iKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLm91dHB1dFRleHQoImRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnRcbiIpOwogfQogCiB2
b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUnVuSW5zZWN1cmVDb250ZW50Rm9yRnJhbWUoV0tC
dW5kbGVGcmFtZVJlZiBmcmFtZSkKIHsKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQotICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJk
aWRSdW5JbnNlY3VyZUNvbnRlbnRcbiIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkub3V0cHV0VGV4dCgiZGlkUnVuSW5zZWN1cmVDb250ZW50XG4iKTsKIH0KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmRpZERldGVjdFhTU0ZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJh
bWUpCiB7CiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiZGlkRGV0ZWN0WFNTXG4iKTsK
KyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoImRpZERldGVjdFhT
U1xuIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRJbml0aWF0ZUxvYWRGb3JS
ZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJhbWVSZWYsIHVpbnQ2NF90IGlkZW50
aWZpZXIsIFdLVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBib29sKQpAQCAtMTEzNywxMiArMTE0Niwx
NCBAQCBXS1VSTFJlcXVlc3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RG
b3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYsIFdLQgogewogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuaXNUZXN0UnVubmluZygpCiAgICAgICAgICYmIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkgewot
ICAgICAgICBkdW1wUmVzb3VyY2VVUkwoaWRlbnRpZmllcik7Ci0gICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiAtIHdpbGxTZW5k
UmVxdWVzdCAiKTsKLSAgICAgICAgZHVtcFJlcXVlc3REZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVz
dFJlc3VsdChyZXF1ZXN0KTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmlu
Z0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiIHJlZGlyZWN0UmVzcG9uc2UgIik7Ci0gICAgICAg
IGR1bXBSZXNwb25zZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KHJlc3BvbnNlKTsK
LSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
KCdcbicpOworICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgICAgIGR1
bXBSZXNvdXJjZVVSTChpZGVudGlmaWVyLCBzdHJpbmdCdWlsZGVyKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSB3aWxsU2VuZFJlcXVlc3QgIik7CisgICAgICAgIGR1
bXBSZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdCwgc3RyaW5n
QnVpbGRlcik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHJlZGlyZWN0
UmVzcG9uc2UgIik7CisgICAgICAgIGR1bXBSZXNwb25zZURlc2NyaXB0aW9uU3VpdGFibGVGb3JU
ZXN0UmVzdWx0KHJlc3BvbnNlLCBzdHJpbmdCdWlsZGVyKTsKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoJ1xuJyk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRU
ZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQogCiAgICAgaWYgKEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkgJiYgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnRlc3RSdW5uZXIoKS0+d2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoKSkKQEAgLTExNTAs
NyArMTE2MSw3IEBAIFdLVVJMUmVxdWVzdFJlZiBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZW5k
UmVxdWVzdEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiwgV0tCCiAKICAgICBXS1JldGFpblB0cjxX
S1VSTFJlZj4gcmVkaXJlY3RVUkwgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5VVJMKHJlc3Bv
bnNlKSk7CiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkg
JiYgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+d2lsbFNlbmRSZXF1ZXN0
UmV0dXJuc051bGxPblJlZGlyZWN0KCkgJiYgcmVkaXJlY3RVUkwpIHsKLSAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiUmV0dXJu
aW5nIG51bGwgZm9yIHRoaXMgcmVkaXJlY3RcbiIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkub3V0cHV0VGV4dCgiUmV0dXJuaW5nIG51bGwgZm9yIHRoaXMgcmVkaXJlY3RcbiIp
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTExNzQsOSArMTE4NSwxMSBAQCBXS1VS
TFJlcXVlc3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShX
S0J1bmRsZVBhZ2VSZWYsIFdLQgogICAgICAgICAgICAgbWFpbkZyYW1lSXNFeHRlcm5hbCA9IGlz
SFRUUE9ySFRUUFNTY2hlbWUobWFpbkZyYW1lU2NoZW1lLmdldCgpKSAmJiAhaXNMb2NhbEhvc3Qo
bWFpbkZyYW1lSG9zdC5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFtYWluRnJhbWVJ
c0V4dGVybmFsKSB7Ci0gICAgICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJCbG9ja2VkIGFjY2VzcyB0byBleHRlcm5hbCBVUkwg
Iik7Ci0gICAgICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmQodG9XVEZTdHJpbmcodXJsU3RyaW5nKSk7Ci0gICAgICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJ1xuJyk7CisgICAgICAgICAg
ICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIkJsb2NrZWQgYWNjZXNzIHRvIGV4dGVybmFsIFVSTCAiKTsKKyAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykpOworICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTkxLDEwICsxMjA0
LDEyIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlUmVzcG9uc2VGb3JSZXNv
dXJjZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgZHVtcFJlc291cmNlVVJMKGlkZW50aWZpZXIp
OwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBl
bmRMaXRlcmFsKCIgLSBkaWRSZWNlaXZlUmVzcG9uc2UgIik7Ci0gICAgICAgIGR1bXBSZXNwb25z
ZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KHJlc3BvbnNlKTsKLSAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCdcbicpOworICAg
ICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgICAgIGR1bXBSZXNvdXJjZVVS
TChpZGVudGlmaWVyLCBzdHJpbmdCdWlsZGVyKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIgLSBkaWRSZWNlaXZlUmVzcG9uc2UgIik7CisgICAgICAgIGR1bXBSZXNwb25z
ZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KHJlc3BvbnNlLCBzdHJpbmdCdWlsZGVy
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAg
ICAgfQogCiAKQEAgLTEyMDUsMTAgKzEyMjAsMTIgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OmRpZFJlY2VpdmVSZXNwb25zZUZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGUK
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENv
cHlMYXN0UGF0aENvbXBvbmVudCh1cmwuZ2V0KCkpKTsKICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWltZVR5cGVTdHJpbmcgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5TUlNRVR5cGUo
cmVzcG9uc2UpKTsKIAotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVy
KCktPmFwcGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIgaGFzIE1JTUUgdHlwZSAi
KTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQo
dG9XVEZTdHJpbmcobWltZVR5cGVTdHJpbmcpKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJ1xuJyk7CisgICAgU3RyaW5nQnVpbGRlciBzdHJp
bmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmlu
ZykpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGhhcyBNSU1FIHR5cGUgIik7
CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcobWltZVR5cGVTdHJpbmcpKTsK
KyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIElu
amVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGhGb3JSZXNvdXJjZShXS0J1
bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJhbWVSZWYsIHVpbnQ2NF90LCB1aW50NjRfdCkKQEAgLTEy
MjMsOCArMTI0MCwxMCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmluaXNoTG9hZEZv
clJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVGcmFtZQogICAgIGlmICghSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENh
bGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkdW1wUmVzb3VyY2VVUkwoaWRlbnRp
Zmllcik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kTGl0ZXJhbCgiIC0gZGlkRmluaXNoTG9hZGluZ1xuIik7CisgICAgU3RyaW5nQnVpbGRlciBz
dHJpbmdCdWlsZGVyOworICAgIGR1bXBSZXNvdXJjZVVSTChpZGVudGlmaWVyLCBzdHJpbmdCdWls
ZGVyKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIGRpZEZpbmlzaExvYWRp
bmdcbiIpOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGYWls
TG9hZEZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVGcmFtZVJlZiwgdWludDY0
X3QgaWRlbnRpZmllciwgV0tFcnJvclJlZiBlcnJvcikKQEAgLTEyMzUsMTEgKzEyNTQsMTMgQEAg
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZhaWxMb2FkRm9yUmVzb3VyY2UoV0tCdW5kbGVQ
YWdlUmVmLCBXS0J1bmRsZUZyYW1lUmUKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgZHVtcFJlc291cmNlVVJMKGlkZW50aWZpZXIpOwotICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiAtIGRp
ZEZhaWxMb2FkaW5nV2l0aEVycm9yOiAiKTsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxk
ZXI7CisgICAgZHVtcFJlc291cmNlVVJMKGlkZW50aWZpZXIsIHN0cmluZ0J1aWxkZXIpOworICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6
ICIpOwogCi0gICAgZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZXJy
b3IpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZCgnXG4nKTsKKyAgICBkdW1wRXJyb3JEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChl
cnJvciwgc3RyaW5nQnVpbGRlcik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Cisg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0
cmluZygpKTsKIH0KIAogYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZENhY2hlUmVzcG9u
c2UoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lUmVmLCB1aW50NjRfdCBpZGVudGlmaWVy
KQpAQCAtMTI1MCw4ICsxMjcxLDEwIEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRD
YWNoZVJlc3BvbnNlKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVGcmFtZVJlZiwKICAgICBpZiAo
IUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBXaWxsQ2Fj
aGVSZXNwb25zZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZE51bWJlcihpZGVudGlmaWVyKTsKLSAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFs
KCIgLSB3aWxsQ2FjaGVSZXNwb25zZTogY2FsbGVkXG4iKTsKKyAgICBTdHJpbmdCdWlsZGVyIHN0
cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIoaWRlbnRpZmllcik7
CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSB3aWxsQ2FjaGVSZXNwb25zZTog
Y2FsbGVkXG4iKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogCiAgICAgLy8gVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMg
dGhlIGNhY2hlIHRoZSByZXNwb25zZS4KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyOTEsMjQgKzEz
MTQsMjYgQEAgV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS0IKICAgICBXS1JldGFpblB0cjxXS1VSTFJl
Zj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsU2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUo
dXJsLmdldCgpKSk7CiAKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRl
cigpLT5hcHBlbmRMaXRlcmFsKCJQb2xpY3kgZGVsZWdhdGU6IGF0dGVtcHQgdG8gbG9hZCAiKTsK
KyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJQb2xpY3kgZGVsZWdhdGU6IGF0dGVtcHQgdG8gbG9hZCAiKTsKICAgICBpZiAo
aXNMb2NhbEZpbGVTY2hlbWUodXJsU2NoZW1lLmdldCgpKSkgewogICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gZmlsZW5hbWUgPSBhZG9wdFdLKFdLVVJMQ29weUxhc3RQYXRoQ29tcG9u
ZW50KHVybC5nZXQoKSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcoZmlsZW5hbWUpKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoZmlsZW5hbWUpKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENv
cHlTdHJpbmcodXJsLmdldCgpKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
dHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcodXJsU3RyaW5nKSk7CiAgICAgfQotICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwo
IiB3aXRoIG5hdmlnYXRpb24gdHlwZSBcJyIpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyhOYXZpZ2F0aW9uVHlwZVRvU3Ry
aW5nKFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdldE5hdmlnYXRpb25UeXBlKG5hdmlnYXRpb25B
Y3Rpb24pKSkpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCkt
PmFwcGVuZExpdGVyYWwoIlwnIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIg
d2l0aCBuYXZpZ2F0aW9uIHR5cGUgXCciKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dU
RlN0cmluZyhOYXZpZ2F0aW9uVHlwZVRvU3RyaW5nKFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdl
dE5hdmlnYXRpb25UeXBlKG5hdmlnYXRpb25BY3Rpb24pKSkpOworICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiXCciKTsKICAgICBXS0J1bmRsZUhpdFRlc3RSZXN1bHRSZWYgaGl0VGVz
dFJlc3VsdFJlZiA9IFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkNvcHlIaXRUZXN0UmVzdWx0KG5h
dmlnYXRpb25BY3Rpb24pOwogICAgIGlmIChoaXRUZXN0UmVzdWx0UmVmKSB7Ci0gICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiBv
cmlnaW5hdGluZyBmcm9tICIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmQoZHVtcFBhdGgobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBXS0J1
bmRsZUhpdFRlc3RSZXN1bHRDb3B5Tm9kZUhhbmRsZShoaXRUZXN0UmVzdWx0UmVmKSkpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBvcmlnaW5hdGluZyBmcm9tICIpOwor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkdW1wUGF0aChtX3BhZ2UsIG1fd29ybGQuZ2V0
KCksIFdLQnVuZGxlSGl0VGVzdFJlc3VsdENvcHlOb2RlSGFuZGxlKGhpdFRlc3RSZXN1bHRSZWYp
KSk7CiAgICAgfQogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIo
KS0+YXBwZW5kKCdcbicpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KSk7CiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+bm90aWZ5RG9u
ZSgpOwogCiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPmlz
UG9saWN5RGVsZWdhdGVQZXJtaXNzaXZlKCkpCkBAIC0xMzI0LDEwICsxMzQ5LDEyIEBAIFdLQnVu
ZGxlUGFnZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBvbGljeUZvck5l
d1dpbmRvd0FjdGlvbihXS0J1CiBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0ZWRCdW5k
bGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JSZXNwb25zZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tC
dW5kbGVGcmFtZVJlZiwgV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSwgV0tVUkxSZXF1ZXN0UmVm
LCBXS1R5cGVSZWYqKQogewogICAgIGlmIChXS1VSTFJlc3BvbnNlSXNBdHRhY2htZW50KHJlc3Bv
bnNlKSkgeworICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBmaWxlbmFtZSA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNv
cHlTdWdnZXN0ZWRGaWxlbmFtZShyZXNwb25zZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJQb2xpY3kgZGVsZWdhdGU6
IHJlc291cmNlIGlzIGFuIGF0dGFjaG1lbnQsIHN1Z2dlc3RlZCBmaWxlIG5hbWUgXCciKTsKLSAg
ICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRv
V1RGU3RyaW5nKGZpbGVuYW1lKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
dHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIlwnXG4iKTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCJQb2xpY3kgZGVsZWdhdGU6IHJlc291cmNlIGlzIGFuIGF0dGFj
aG1lbnQsIHN1Z2dlc3RlZCBmaWxlIG5hbWUgXCciKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQodG9XVEZTdHJpbmcoZmlsZW5hbWUpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJcJ1xuIik7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRw
dXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQogCiAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1pbWVUeXBlID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weU1JTUVU
eXBlKHJlc3BvbnNlKSk7CkBAIC0xNDA2LDE1ICsxNDMzLDE2IEBAIHZvaWQgSW5qZWN0ZWRCdW5k
bGVQYWdlOjp3aWxsQWRkTWVzc2FnZVRvQ29uc29sZShXS1N0cmluZ1JlZiBtZXNzYWdlLCB1aW50
MzJfdCBsCiAgICAgICAgIC8vIEZJWE1FOiBUaGUgY29kZSBiZWxvdyBkb2VzIG5vdCBoYW5kbGUg
YWRkaXRpb25hbCB0ZXh0IGFmdGVyIHVybCBub3IgbXVsdGlwbGUgdXJscy4gVGhpcyBtYXRjaGVz
IER1bXBSZW5kZXJUcmVlIGltcGxlbWVudGF0aW9uLgogICAgICAgICBtZXNzYWdlU3RyaW5nID0g
bWVzc2FnZVN0cmluZy5zdWJzdHJpbmcoMCwgZmlsZVByb3RvY29sU3RhcnQpICsgbGFzdEZpbGVV
UkxQYXRoQ29tcG9uZW50KG1lc3NhZ2VTdHJpbmcuc3Vic3RyaW5nKGZpbGVQcm90b2NvbFN0YXJ0
KSk7CiAKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBl
bmRMaXRlcmFsKCJDT05TT0xFIE1FU1NBR0U6ICIpOworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5n
QnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkNPTlNPTEUgTUVTU0FH
RTogIik7CiAgICAgaWYgKGxpbmVOdW1iZXIpIHsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgibGluZSAiKTsKLSAgICAgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTnVtYmVyKGxp
bmVOdW1iZXIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRl
cigpLT5hcHBlbmRMaXRlcmFsKCI6ICIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoImxpbmUgIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKGxpbmVO
dW1iZXIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjogIik7CiAgICAg
fQotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCht
ZXNzYWdlU3RyaW5nKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRl
cigpLT5hcHBlbmQoJ1xuJyk7Ci0KKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtZXNzYWdlU3Ry
aW5nKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCiB2
b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0YXR1c2JhclRleHQoV0tTdHJpbmdSZWYg
c3RhdHVzYmFyVGV4dCkKQEAgLTE0MjUsOSArMTQ1MywxMSBAQCB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6d2lsbFNldFN0YXR1c2JhclRleHQoV0tTdHJpbmdSZWYgc3RhdHVzYmFyVGV4dCkKICAg
ICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBT
dGF0dXNDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiVUkgREVMRUdBVEUgU1RB
VFVTIENBTExCQUNLOiBzZXRTdGF0dXNUZXh0OiIpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyhzdGF0dXNiYXJUZXh0KSk7
Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCdc
bicpOworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3RhdHVzVGV4
dDoiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhzdGF0dXNiYXJUZXh0
KSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIAogdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaXB0QWxlcnQoV0tTdHJpbmdSZWYg
bWVzc2FnZSwgV0tCdW5kbGVGcmFtZVJlZikKQEAgLTE0MzUsOSArMTQ2NSwxMSBAQCB2b2lkIElu
amVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRBbGVydChXS1N0cmluZ1JlZiBtZXNz
YWdlLCBXS0J1bmRsZUZyYQogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVz
dFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiQUxFUlQ6ICIpOwotICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyht
ZXNzYWdlKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+
YXBwZW5kKCdcbicpOworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkFMRVJUOiAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCh0b1dURlN0cmluZyhtZXNzYWdlKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xu
Jyk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZh
U2NyaXB0Q29uZmlybShXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0J1bmRsZUZyYW1lUmVmKQpAQCAt
MTQ0NSwxOCArMTQ3NywyMiBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFT
Y3JpcHRDb25maXJtKFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLQnVuZGxlRgogICAgIGlmICghSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0
ZXJhbCgiQ09ORklSTTogIik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1
aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKG1lc3NhZ2UpKTsKLSAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJ1xuJyk7CisgICAgU3RyaW5nQnVp
bGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiQ09O
RklSTTogIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcobWVzc2FnZSkp
OworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlwdFByb21wdChXS1N0cmluZ1JlZiBt
ZXNzYWdlLCBXS1N0cmluZ1JlZiBkZWZhdWx0VmFsdWUsIFdLQnVuZGxlRnJhbWVSZWYpCiB7Ci0g
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJh
bCgiUFJPTVBUOiAiKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRl
cigpLT5hcHBlbmQodG9XVEZTdHJpbmcobWVzc2FnZSkpOwotICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiwgZGVmYXVsdCB0ZXh0OiAi
KTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQo
dG9XVEZTdHJpbmcoZGVmYXVsdFZhbHVlKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCdcbicpOworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5n
QnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlBST01QVDogIik7Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcobWVzc2FnZSkpOworICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBkZWZhdWx0IHRleHQ6ICIpOworICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGRlZmF1bHRWYWx1ZSkpOworICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCdcbicpOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0
KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpkaWRSZWFjaEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXS1NlY3VyaXR5T3JpZ2luUmVm
IG9yaWdpbiwgaW50NjRfdCB0b3RhbEJ5dGVzTmVlZGVkKQpAQCAtMTQ2OCwxMSArMTUwNCwxMyBA
QCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVhY2hBcHBsaWNhdGlvbkNhY2hlT3JpZ2lu
UXVvdGEoV0tTZWN1cml0eU9yaWdpblJlZgogICAgICAgICAvLyBhYm92ZSBvciBiZWxvdyBhIHRo
cmVzaG9sZC4KICAgICAgICAgaW50NjRfdCB0cnVuY2F0ZWRTcGFjZU5lZWRlZCA9ICh0b3RhbEJ5
dGVzTmVlZGVkIC8gMTAwMDApICogMTAwMDA7CiAKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiVUkgREVMRUdBVEUgQVBQTElD
QVRJT04gQ0FDSEUgQ0FMTEJBQ0s6IGV4Y2VlZGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3Rh
Rm9yU2VjdXJpdHlPcmlnaW46Iik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
dHJpbmdCdWlsZGVyKCktPmFwcGVuZChzZWN1cml0eU9yaWdpblRvU3RyKG9yaWdpbikpOwotICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRl
cmFsKCIgdG90YWxTcGFjZU5lZWRlZDp+Iik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZE51bWJlcih0cnVuY2F0ZWRTcGFjZU5lZWRlZCk7
Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZCgnXG4nKTsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlVJIERFTEVHQVRFIEFQUExJQ0FUSU9OIENBQ0hF
IENBTExCQUNLOiBleGNlZWRlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YUZvclNlY3VyaXR5
T3JpZ2luOiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZWN1cml0eU9yaWdpblRv
U3RyKG9yaWdpbikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB0b3Rh
bFNwYWNlTmVlZGVkOn4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIodHJ1
bmNhdGVkU3BhY2VOZWVkZWQpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsK
KyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpKTsKICAgICB9CiAKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnRlc3RSdW5uZXIoKS0+c2hvdWxkRGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVR
dW90YSgpKQpAQCAtMTQ4NSwxMSArMTUyMywxMyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6
ZGlkUmVhY2hBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoV0tTZWN1cml0eU9yaWdpblJlZgog
dWludDY0X3QgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRFeGNlZWREYXRhYmFzZVF1b3RhKFdLU2Vj
dXJpdHlPcmlnaW5SZWYgb3JpZ2luLCBXS1N0cmluZ1JlZiBkYXRhYmFzZU5hbWUsIFdLU3RyaW5n
UmVmIGRhdGFiYXNlRGlzcGxheU5hbWUsIHVpbnQ2NF90IGN1cnJlbnRRdW90YUJ5dGVzLCB1aW50
NjRfdCBjdXJyZW50T3JpZ2luVXNhZ2VCeXRlcywgdWludDY0X3QgY3VycmVudERhdGFiYXNlVXNh
Z2VCeXRlcywgdWludDY0X3QgZXhwZWN0ZWRVc2FnZUJ5dGVzKQogewogICAgIGlmIChJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRGF0YWJhc2VDYWxsYmFj
a3MoKSkgewotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmRMaXRlcmFsKCJVSSBERUxFR0FURSBEQVRBQkFTRSBDQUxMQkFDSzogZXhjZWVkZWRE
YXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46Iik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChzZWN1cml0eU9yaWdpblRvU3RyKG9y
aWdpbikpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmRMaXRlcmFsKCIgZGF0YWJhc2U6Iik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyhkYXRhYmFzZU5hbWUp
KTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kKCdcbicpOworICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJB
Q0s6IGV4Y2VlZGVkRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luOiIpOworICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChzZWN1cml0eU9yaWdpblRvU3RyKG9yaWdpbikpOworICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBkYXRhYmFzZToiKTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoZGF0YWJhc2VOYW1lKSk7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KIAogICAgIHN0
YXRpYyBjb25zdCB1aW50NjRfdCBkZWZhdWx0UXVvdGEgPSA1ICogMTAyNCAqIDEwMjQ7CkBAIC0x
NTU5LDkgKzE1OTksMTEgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEJlZ2luRWRp
dGluZyhXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRE
dW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6Iik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5n
ZXQoKSwgcmFuZ2UpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1
aWxkZXIoKS0+YXBwZW5kKCdcbicpOworICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxk
ZXI7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FU
RTogc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZToiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSk7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KICAg
ICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxs
b3dFZGl0aW5nKCk7CiB9CkBAIC0xNTcyLDkgKzE2MTQsMTEgQEAgYm9vbCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OnNob3VsZEVuZEVkaXRpbmcoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJFRElU
SU5HIERFTEVHQVRFOiBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZToiKTsKLSAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHJhbmdlVG9TdHIo
bV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJ1xuJyk7CisgICAgICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZToiKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCks
IHJhbmdlKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCkpOwogICAgIH0KICAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CkBAIC0xNTkxLDEzICsxNjM1LDE1IEBAIGJv
b2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRJbnNlcnROb2RlKFdLQnVuZGxlTm9kZUhhbmRs
ZVJlZiBub2RlLCBXS0J1bmRsZVJhCiAgICAgfTsKIAogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0g
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExp
dGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEluc2VydE5vZGU6Iik7Ci0gICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChkdW1wUGF0aCht
X3BhZ2UsIG1fd29ybGQuZ2V0KCksIG5vZGUpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiIHJlcGxhY2luZ0RPTVJhbmdl
OiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlVG9SZXBsYWNlKSk7
Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZExpdGVyYWwoIiBnaXZlbkFjdGlvbjoiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dKTsK
LSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
KCdcbicpOworICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hvdWxkSW5zZXJ0
Tm9kZToiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgobV9wYWdlLCBt
X3dvcmxkLmdldCgpLCBub2RlKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiIHJlcGxhY2luZ0RPTVJhbmdlOiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChy
YW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2VUb1JlcGxhY2UpKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgZ2l2ZW5BY3Rpb246Iik7CisgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQogICAg
IHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxv
d0VkaXRpbmcoKTsKIH0KQEAgLTE2MTQsMTMgKzE2NjAsMTUgQEAgYm9vbCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OnNob3VsZEluc2VydFRleHQoV0tTdHJpbmdSZWYgdGV4dCwgV0tCdW5kbGVSYW5nZUhh
bmRsZVIKICAgICB9OwogCiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiRURJVElORyBE
RUxFR0FURTogc2hvdWxkSW5zZXJ0VGV4dDoiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHRleHQpKTsKLSAgICAg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJh
bCgiIHJlcGxhY2luZ0RPTVJhbmdlOiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0
KCksIHJhbmdlVG9SZXBsYWNlKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
dHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIiBnaXZlbkFjdGlvbjoiKTsKLSAgICAgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKGluc2VydGFj
dGlvbnN0cmluZ1thY3Rpb25dKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0
cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCdcbicpOworICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmlu
Z0J1aWxkZXI7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBE
RUxFR0FURTogc2hvdWxkSW5zZXJ0VGV4dDoiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQodG9XVEZTdHJpbmcodGV4dCkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIiByZXBsYWNpbmdET01SYW5nZToiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
cmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlVG9SZXBsYWNlKSk7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGdpdmVuQWN0aW9uOiIpOworICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpbnNlcnRhY3Rpb25zdHJpbmdbYWN0aW9uXSk7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KICAg
ICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxs
b3dFZGl0aW5nKCk7CiB9CkBAIC0xNjMxLDkgKzE2NzksMTEgQEAgYm9vbCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OnNob3VsZERlbGV0ZVJhbmdlKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2UpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50
ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiRURJ
VElORyBERUxFR0FURTogc2hvdWxkRGVsZXRlRE9NUmFuZ2U6Iik7Ci0gICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChyYW5nZVRvU3RyKG1fcGFn
ZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCdcbicpOworICAgICAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJ
VElORyBERUxFR0FURTogc2hvdWxkRGVsZXRlRE9NUmFuZ2U6Iik7CisgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAgICB9
CiAgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3Vs
ZEFsbG93RWRpdGluZygpOwogfQpAQCAtMTY1MywxNSArMTcwMywxNyBAQCBib29sIEluamVjdGVk
QnVuZGxlUGFnZTo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXS0J1bmRsZVJhbmdlSGFuZGxl
UmVmIGZyb21SYQogICAgIH07CiAKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJFRElU
SU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOiIpOwotICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQocmFuZ2VUb1N0
cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIGZyb21SYW5nZSkpOwotICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIgdG9ET01SYW5n
ZToiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+
YXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCB0b1JhbmdlKSk7Ci0gICAg
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVy
YWwoIiBhZmZpbml0eToiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmlu
Z0J1aWxkZXIoKS0+YXBwZW5kKGFmZmluaXR5c3RyaW5nW2FmZmluaXR5XSk7IAotICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCIg
c3RpbGxTZWxlY3Rpbmc6Iik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZChib29sc3RyaW5nW3N0aWxsU2VsZWN0aW5nXSk7IAotICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJ1xuJyk7
CisgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3Rl
ZERPTVJhbmdlOiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1f
cGFnZSwgbV93b3JsZC5nZXQoKSwgZnJvbVJhbmdlKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiIHRvRE9NUmFuZ2U6Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCB0b1JhbmdlKSk7CisgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGFmZmluaXR5OiIpOworICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChhZmZpbml0eXN0cmluZ1thZmZpbml0eV0pOyAKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgc3RpbGxTZWxlY3Rpbmc6Iik7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKGJvb2xzdHJpbmdbc3RpbGxTZWxlY3RpbmddKTsgCisgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KICAgICBy
ZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dF
ZGl0aW5nKCk7CiB9CkBAIC0xNjcyLDExICsxNzI0LDEzIEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpzaG91bGRBcHBseVN0eWxlKFdLQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvblJlZiBzdHls
ZSwKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFs
KCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRBcHBseVN0eWxlOiIpOwotICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoc3R5bGVEZWNUb1N0cihz
dHlsZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmRMaXRlcmFsKCIgdG9FbGVtZW50c0luRE9NUmFuZ2U6Iik7Ci0gICAgICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChyYW5nZVRvU3RyKG1f
cGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCdcbicpOworICAgICAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
RURJVElORyBERUxFR0FURTogc2hvdWxkQXBwbHlTdHlsZToiKTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoc3R5bGVEZWNUb1N0cihzdHlsZSkpOworICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiB0b0VsZW1lbnRzSW5ET01SYW5nZToiKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAg
IH0KICAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hv
dWxkQWxsb3dFZGl0aW5nKCk7CiB9CkBAIC0xNjg1LDYyICsxNzM5LDcwIEBAIHZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpkaWRCZWdpbkVkaXRpbmcoV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFt
ZSkKIHsKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkp
CiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRE
dW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZp
ZXdEaWRCZWdpbkVkaXRpbmc6Iik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
dHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyhub3RpZmljYXRpb25OYW1lKSk7Ci0g
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgn
XG4nKTsKLSAgICB9CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEJlZ2lu
RWRpdGluZzoiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhub3RpZmlj
YXRpb25OYW1lKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsK
IH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEVuZEVkaXRpbmcoV0tTdHJpbmdSZWYg
bm90aWZpY2F0aW9uTmFtZSkKIHsKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5p
c1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIUluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIkVESVRJTkcg
REVMRUdBVEU6IHdlYlZpZXdEaWRFbmRFZGl0aW5nOiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcobm90aWZpY2F0
aW9uTmFtZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRl
cigpLT5hcHBlbmQoJ1xuJyk7Ci0gICAgfQorICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRl
cjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHdl
YlZpZXdEaWRFbmRFZGl0aW5nOiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3Ry
aW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsK
KyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlKFdLU3Ry
aW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCiB7CiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNr
cygpKQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJF
RElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOiIpOwotICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcobm90aWZp
Y2F0aW9uTmFtZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVp
bGRlcigpLT5hcHBlbmQoJ1xuJyk7Ci0gICAgfQorICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVp
bGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6
IHdlYlZpZXdEaWRDaGFuZ2U6Iik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJp
bmcobm90aWZpY2F0aW9uTmFtZSkpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwor
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2VTZWxlY3Rp
b24oV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSkKIHsKICAgICBpZiAoIUluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAo
IUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5n
Q2FsbGJhY2tzKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0g
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExp
dGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246Iik7Ci0g
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0
b1dURlN0cmluZyhub3RpZmljYXRpb25OYW1lKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnXG4nKTsKLSAgICB9CisgICAgU3RyaW5n
QnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjoiKTsKKyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhub3RpZmljYXRpb25OYW1lKSk7CisgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91
dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIAogI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzdXBwb3J0c0Z1bGxTY3JlZW4o
V0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLRnVsbFNjcmVlbktleWJvYXJkUmVxdWVzdFR5cGUg
cmVxdWVzdFR5cGUpCiB7CiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoInN1cHBvcnRz
RnVsbFNjcmVlbigpID09IHRydWVcbiIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkub3V0cHV0VGV4dCgic3VwcG9ydHNGdWxsU2NyZWVuKCkgPT0gdHJ1ZVxuIik7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjplbnRlckZ1bGxTY3JlZW5G
b3JFbGVtZW50KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZU5vZGVIYW5kbGVSZWYg
ZWxlbWVudFJlZikKIHsKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiZW50ZXJGdWxs
U2NyZWVuRm9yRWxlbWVudCgpXG4iKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
Lm91dHB1dFRleHQoImVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoKVxuIik7CiAKICAgICBpZiAo
IUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPmhhc0N1c3RvbUZ1bGxTY3Jl
ZW5CZWhhdmlvcigpKSB7CiAgICAgICAgIFdLQnVuZGxlUGFnZVdpbGxFbnRlckZ1bGxTY3JlZW4o
cGFnZVJlZik7CkBAIC0xNzUxLDcgKzE4MTMsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6
ZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdQog
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChXS0J1bmRs
ZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGVsZW1lbnRSZWYpCiB7CiAg
ICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBG
dWxsU2NyZWVuQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
dHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoImV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudCgp
XG4iKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoImV4aXRG
dWxsU2NyZWVuRm9yRWxlbWVudCgpXG4iKTsKIAogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnRlc3RSdW5uZXIoKS0+aGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKCkpIHsKICAg
ICAgICAgV0tCdW5kbGVQYWdlV2lsbEV4aXRGdWxsU2NyZWVuKHBhZ2VSZWYpOwpAQCAtMTc2Miwx
OSArMTgyNCwxOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZXhpdEZ1bGxTY3JlZW5Gb3JF
bGVtZW50KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bgogdm9pZCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmJlZ2FuRW50ZXJGdWxsU2NyZWVuKFdLQnVuZGxlUGFnZVJlZiwgV0tSZWN0LCBXS1Jl
Y3QpCiB7CiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoImJlZ2FuRW50ZXJGdWxsU2Ny
ZWVuKClcbiIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dCgi
YmVnYW5FbnRlckZ1bGxTY3JlZW4oKVxuIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpiZWdhbkV4aXRGdWxsU2NyZWVuKFdLQnVuZGxlUGFnZVJlZiwgV0tSZWN0LCBXS1JlY3QpCiB7
CiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1
bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoImJlZ2FuRXhpdEZ1bGxTY3JlZW4oKVxu
Iik7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KCJiZWdhbkV4
aXRGdWxsU2NyZWVuKClcbiIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6Y2xvc2VG
dWxsU2NyZWVuKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQogewogICAgIGlmIChJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnVsbFNjcmVlbkNhbGxiYWNr
cygpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmRMaXRlcmFsKCJjbG9zZUZ1bGxTY3JlZW4oKVxuIik7CisgICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KCJjbG9zZUZ1bGxTY3JlZW4oKVxuIik7CiAKICAgICBp
ZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPmhhc0N1c3RvbUZ1bGxT
Y3JlZW5CZWhhdmlvcigpKSB7CiAgICAgICAgIFdLQnVuZGxlUGFnZVdpbGxFeGl0RnVsbFNjcmVl
bihwYWdlUmVmKTsKQEAgLTE3ODgsMTUgKzE4NTAsMTUgQEAgc3RhdGljIGJvb2wgY29tcGFyZUJ5
VGFyZ2V0TmFtZShXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgaXRlbTEsIFdLQnVuZGxl
QmEKICAgICByZXR1cm4gdG9TVEQoYWRvcHRXSyhXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1D
b3B5VGFyZ2V0KGl0ZW0xKSkpIDwgdG9TVEQoYWRvcHRXSyhXS0J1bmRsZUJhY2tGb3J3YXJkTGlz
dEl0ZW1Db3B5VGFyZ2V0KGl0ZW0yKSkpOwogfQogCi1zdGF0aWMgdm9pZCBkdW1wQmFja0Zvcndh
cmRMaXN0SXRlbShXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgaXRlbSwgdW5zaWduZWQg
aW5kZW50LCBib29sIGlzQ3VycmVudEl0ZW0pCitzdGF0aWMgdm9pZCBkdW1wQmFja0ZvcndhcmRM
aXN0SXRlbShXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgaXRlbSwgdW5zaWduZWQgaW5k
ZW50LCBib29sIGlzQ3VycmVudEl0ZW0sIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCiB7
CiAgICAgdW5zaWduZWQgY29sdW1uID0gMDsKICAgICBpZiAoaXNDdXJyZW50SXRlbSkgewotICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRl
cmFsKCJjdXJyLT4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJjdXJy
LT4iKTsKICAgICAgICAgY29sdW1uID0gNjsKICAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
Y29sdW1uOyBpIDwgaW5kZW50OyBpKyspCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnICcpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgnICcpOwogCiAgICAgV1RGOjpTdHJpbmcgdXJsID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhX
S1VSTENvcHlTdHJpbmcoYWRvcHRXSyhXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5VVJM
KGl0ZW0pKS5nZXQoKSkpKTsKICAgICBpZiAoaGFzUHJlZml4KHVybCwgImZpbGU6IikpIHsKQEAg
LTE4MDYsMjMgKzE4NjgsMjMgQEAgc3RhdGljIHZvaWQgZHVtcEJhY2tGb3J3YXJkTGlzdEl0ZW0o
V0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0ZW0sIHVuc2lnbmUKICAgICAgICAgICAg
IHN0YXJ0ID0gMDsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc3RhcnQgKz0gZGlyZWN0b3J5
TmFtZS5sZW5ndGgoKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1
aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiKGZpbGUgdGVzdCk6Iik7Ci0gICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh1cmwuc3Vic3RyaW5nKHN0
YXJ0KSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKGZpbGUgdGVzdCk6
Iik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHVybC5zdWJzdHJpbmcoc3RhcnQpKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxk
ZXIoKS0+YXBwZW5kKHVybCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHVybCk7CiAK
ICAgICBXVEY6OlN0cmluZyB0YXJnZXQgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLQnVuZGxlQmFj
a0ZvcndhcmRMaXN0SXRlbUNvcHlUYXJnZXQoaXRlbSkpKTsKICAgICBpZiAodGFyZ2V0Lmxlbmd0
aCgpKSB7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCkt
PmFwcGVuZExpdGVyYWwoIiAoaW4gZnJhbWUgXCIiKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRhcmdldCk7Ci0gICAgICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZExpdGVyYWwoIlwiKSIp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAoaW4gZnJhbWUgXCIiKTsK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodGFyZ2V0KTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCJcIikiKTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogTmVlZCBX
S0JhY2tGb3J3YXJkTGlzdEl0ZW1Jc1RhcmdldEl0ZW0uCiAgICAgaWYgKFdLQnVuZGxlQmFja0Zv
cndhcmRMaXN0SXRlbUlzVGFyZ2V0SXRlbShpdGVtKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kTGl0ZXJhbCgiICAqKm5hdiB0YXJnZXQq
KiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAgKipuYXYgdGFyZ2V0
KioiKTsKIAotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZCgnXG4nKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKIAogICAgIGlmIChX
S1JldGFpblB0cjxXS0FycmF5UmVmPiBraWRzID0gYWRvcHRXSyhXS0J1bmRsZUJhY2tGb3J3YXJk
TGlzdEl0ZW1Db3B5Q2hpbGRyZW4oaXRlbSkpKSB7CiAgICAgICAgIC8vIFNvcnQgdG8gZWxpbWlu
YXRlIGFyYml0cmFyeSByZXN1bHQgb3JkZXJpbmcgd2hpY2ggZGVmZWF0cyByZXByb2R1Y2libGUg
dGVzdGluZy4KQEAgLTE4MzIsMTMgKzE4OTQsMTMgQEAgc3RhdGljIHZvaWQgZHVtcEJhY2tGb3J3
YXJkTGlzdEl0ZW0oV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0ZW0sIHVuc2lnbmUK
ICAgICAgICAgICAgIHNvcnRlZEtpZHNbaV0gPSBzdGF0aWNfY2FzdDxXS0J1bmRsZUJhY2tGb3J3
YXJkTGlzdEl0ZW1SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChraWRzLmdldCgpLCBpKSk7CiAg
ICAgICAgIHN0YWJsZV9zb3J0KHNvcnRlZEtpZHMuYmVnaW4oKSwgc29ydGVkS2lkcy5lbmQoKSwg
Y29tcGFyZUJ5VGFyZ2V0TmFtZSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKQotICAgICAgICAgICAgZHVtcEJhY2tGb3J3YXJkTGlzdEl0ZW0oc29ydGVkS2lkc1tp
XSwgaW5kZW50ICsgNCwgZmFsc2UpOworICAgICAgICAgICAgZHVtcEJhY2tGb3J3YXJkTGlzdEl0
ZW0oc29ydGVkS2lkc1tpXSwgaW5kZW50ICsgNCwgZmFsc2UsIHN0cmluZ0J1aWxkZXIpOwogICAg
IH0KIH0KIAotdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBCYWNrRm9yd2FyZExpc3QoKQor
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBCYWNrRm9yd2FyZExpc3QoU3RyaW5nQnVpbGRl
ciYgc3RyaW5nQnVpbGRlcikKIHsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmRMaXRlcmFsKCJcbj09PT09PT09PT09PT09IEJhY2sgRm9yd2FyZCBM
aXN0ID09PT09PT09PT09PT09XG4iKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IlxuPT09PT09PT09PT09PT0gQmFjayBGb3J3YXJkIExpc3QgPT09PT09PT09PT09PT1cbiIpOwog
CiAgICAgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RSZWYgbGlzdCA9IFdLQnVuZGxlUGFnZUdldEJh
Y2tGb3J3YXJkTGlzdChtX3BhZ2UpOwogCkBAIC0xODY3LDkgKzE5MjksOSBAQCB2b2lkIEluamVj
dGVkQnVuZGxlUGFnZTo6ZHVtcEJhY2tGb3J3YXJkTGlzdCgpCiAgICAgfQogCiAgICAgZm9yIChp
bnQgaSA9IGl0ZW1zVG9QcmludC5zaXplKCkgLSAxOyBpID49IDA7IGktLSkKLSAgICAgICAgZHVt
cEJhY2tGb3J3YXJkTGlzdEl0ZW0oaXRlbXNUb1ByaW50W2ldLmdldCgpLCA4LCBpID09IGN1cnJl
bnRJdGVtSW5kZXgpOworICAgICAgICBkdW1wQmFja0ZvcndhcmRMaXN0SXRlbShpdGVtc1RvUHJp
bnRbaV0uZ2V0KCksIDgsIGkgPT0gY3VycmVudEl0ZW1JbmRleCwgc3RyaW5nQnVpbGRlcik7CiAK
LSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmRMaXRl
cmFsKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7
CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCI9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CiB9CiAKICNpZiAhUExBVEZPUk0oTUFDKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZVBhZ2UuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGVQYWdlLmgKaW5kZXggNzcwOGE2ZjI2ZmVkN2JkZWVhYzQwNjdmYzE3ZTVmY2Y3
NDc2Y2UyNS4uZDViOWM4MDcxZDEyNDgwZTU0M2M0OGIxNDU4ZTg1ZjliMTIxNjI5MyAxMDA2NDQK
LS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZVBhZ2UuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlUGFnZS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0J1
bmRsZVBhZ2UuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLQnVuZGxlU2NyaXB0V29ybGQuaD4KICNp
bmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXVFIgewogCkBAIC01MCw3ICs1MSw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHByZXBhcmUoKTsKICAgICB2b2lkIHJlc2V0QWZ0ZXJUZXN0KCk7CiAKLSAgICB2b2lk
IGR1bXBCYWNrRm9yd2FyZExpc3QoKTsKKyAgICB2b2lkIGR1bXBCYWNrRm9yd2FyZExpc3QoV1RG
OjpTdHJpbmdCdWlsZGVyJik7CiAKIHByaXZhdGU6CiAgICAgLy8gTG9hZGVyIENsaWVudApAQCAt
MTY5LDggKzE3MCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRDaGFuZ2UoV0tTdHJpbmdSZWYg
bm90aWZpY2F0aW9uTmFtZSk7CiAgICAgdm9pZCBkaWRDaGFuZ2VTZWxlY3Rpb24oV0tTdHJpbmdS
ZWYgbm90aWZpY2F0aW9uTmFtZSk7CiAKLSAgICB2b2lkIGR1bXBBbGxGcmFtZXNUZXh0KCk7Ci0g
ICAgdm9pZCBkdW1wQWxsRnJhbWVTY3JvbGxQb3NpdGlvbnMoKTsKKyAgICB2b2lkIGR1bXBBbGxG
cmFtZXNUZXh0KFdURjo6U3RyaW5nQnVpbGRlciYpOworICAgIHZvaWQgZHVtcEFsbEZyYW1lU2Ny
b2xsUG9zaXRpb25zKFdURjo6U3RyaW5nQnVpbGRlciYpOwogCiAgICAgdm9pZCBwbGF0Zm9ybURp
ZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZik7CiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5j
cHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3Bw
CmluZGV4IDEwZmNjYzIzZTQ1Y2MyYzY2ZDA1YjgyOTQ5NDljZWJlYTBhNWY2ZjYuLjM4YzJhZTA4
NTAwY2U5Y2IzZTM4NTE2YzcwZGE3MjA1Y2YzZTE3ZTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcApAQCAtMTQ5LDkgKzE0
OSw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6d2FpdFVudGlsRG9uZSgpCiB2b2lkIFRlc3RSdW5uZXI6
OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKQogewogICAgIGludmFsaWRhdGVXYWl0VG9E
dW1wV2F0Y2hkb2dUaW1lcigpOwotICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAiRkFJTDogVGlt
ZWQgb3V0IHdhaXRpbmcgZm9yIG5vdGlmeURvbmUgdG8gYmUgY2FsbGVkXG4iOwotICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChtZXNzYWdlKTsKLSAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlxuIik7
CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoIkZBSUw6IFRpbWVkIG91
dCB3YWl0aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNhbGxlZFxuXG4iKTsKICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuZG9uZSgpOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5j
cHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlckF0ay5jcHAKaW5kZXggNTNlNzZkZDY4YjY5YWY1ODgzNmMxYWEzYThjYTY0
ODlmZDgwNWUxOS4uZDc3YWE5Y2JhMjA3NDE3ZWRhMzY5MzU0NDZiMzExNjUzZDI5Yzk2YyAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXJBdGsuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRrLmNwcApAQCAtNTUsNyAr
NTUsNyBAQCBzdGF0aWMgdm9pZCBwcmludEFjY2Vzc2liaWxpdHlFdmVudChBdGtPYmplY3QqIGFj
Y2Vzc2libGUsIGNvbnN0IGdjaGFyKiBzaWduYWxOYQogCiAgICAgR093blB0cjxnY2hhcj4gc2ln
bmFsTmFtZUFuZFZhbHVlKHNpZ25hbFZhbHVlID8gZ19zdHJkdXBfcHJpbnRmKCIlcyA9ICVzIiwg
c2lnbmFsTmFtZSwgc2lnbmFsVmFsdWUpIDogZ19zdHJkdXAoc2lnbmFsTmFtZSkpOwogICAgIEdP
d25QdHI8Z2NoYXI+IGFjY2Vzc2liaWxpdHlFdmVudFN0cmluZyhnX3N0cmR1cF9wcmludGYoIkFj
Y2Vzc2liaWxpdHkgb2JqZWN0IGVtaXR0ZWQgXCIlc1wiIC8gTmFtZTogXCIlc1wiIC8gUm9sZTog
JWRcbiIsIHNpZ25hbE5hbWVBbmRWYWx1ZS5nZXQoKSwgb2JqZWN0TmFtZSwgb2JqZWN0Um9sZSkp
OwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChh
Y2Nlc3NpYmlsaXR5RXZlbnRTdHJpbmcuZ2V0KCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5vdXRwdXRUZXh0KFN0cmluZzo6ZnJvbVVURjgoYWNjZXNzaWJpbGl0eUV2ZW50U3RyaW5n
LmdldCgpKSk7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiBheE9iamVjdEV2ZW50TGlzdGVuZXIoR1Np
Z25hbEludm9jYXRpb25IaW50ICpzaWduYWxIaW50LCBndWludCBudW1QYXJhbVZhbHVlcywgY29u
c3QgR1ZhbHVlICpwYXJhbVZhbHVlcywgZ3BvaW50ZXIgZGF0YSkKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKaW5kZXggOGY2NmNjMGRkMDU5YjI2ODhiMjExMDg4Njc1
Y2QwNGRiNzExMzkyOS4uYjc5MGFkMzQ2MTYyYTlkNTNkMDM2NmM0OGVmNjE3MjhlOTQxZDk4NCAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKQEAgLTM4LDYgKzM4
LDcgQEAKICNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL093
bkFycmF5UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25BcnJheVB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYg
UExBVEZPUk0oTUFDKQpAQCAtMTkzLDYgKzE5NCw4IEBAIHZvaWQgVGVzdEludm9jYXRpb246Omlu
dm9rZSgpCiAgICAgdXBkYXRlTGF5b3V0VHlwZShtX3BhdGhPclVSTC5jX3N0cigpKTsKICAgICB1
cGRhdGVUaWxlZERyYXdpbmdGb3JDdXJyZW50VGVzdChtX3BhdGhPclVSTC5jX3N0cigpKTsKIAor
ICAgIG1fdGV4dE91dHB1dC5jbGVhcigpOworCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQmVn
aW5UZXN0IikpOwogICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGJlZ2lu
VGVzdE1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwog
CkBAIC0yODQsNyArMjg3LDcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZHVtcChjb25zdCBjaGFy
KiB0ZXh0VG9TdGRvdXQsIGNvbnN0IGNoYXIqIHRleHRUb1N0ZGVyciwgYm8KIAogdm9pZCBUZXN0
SW52b2NhdGlvbjo6ZHVtcFJlc3VsdHMoKQogewotICAgIGR1bXAodG9XVEZTdHJpbmcobV90ZXh0
T3V0cHV0LmdldCgpKS51dGY4KCkuZGF0YSgpKTsKKyAgICBkdW1wKG1fdGV4dE91dHB1dC50b1N0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgaWYgKG1fZHVtcFBpeGVscyAmJiBtX3BpeGVs
UmVzdWx0KQogICAgICAgICBkdW1wUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChtX3BpeGVs
UmVzdWx0LmdldCgpLCBtX3JlcGFpbnRSZWN0cy5nZXQoKSk7CkBAIC0zMzYsOSArMzM5LDYgQEAg
dm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUo
V0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7CiAgICAgICAgIFdLRGljdGlvbmFy
eVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+
KG1lc3NhZ2VCb2R5KTsKIAotICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGV4dE91
dHB1dEtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGV4dE91dHB1
dCIpKTsKLSAgICAgICAgbV90ZXh0T3V0cHV0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB0ZXh0T3V0cHV0
S2V5LmdldCgpKSk7Ci0KICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHBpeGVsUmVz
dWx0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGl4ZWxSZXN1
bHQiKSk7CiAgICAgICAgIG1fcGl4ZWxSZXN1bHQgPSBzdGF0aWNfY2FzdDxXS0ltYWdlUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgcGl4ZWxSZXN1
bHRLZXkuZ2V0KCkpKTsKICAgICAgICAgQVNTRVJUKCFtX3BpeGVsUmVzdWx0IHx8IG1fZHVtcFBp
eGVscyk7CkBAIC0zNTAsNyArMzUwLDEzIEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2Vp
dmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5ub3RpZnlEb25lKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgCisKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlRleHRPdXRwdXQiKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdTdHJpbmdHZXRUeXBlSUQoKSk7CisgICAgICAgIFdLU3RyaW5nUmVm
IHRleHRPdXRwdXQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAg
ICAgICBtX3RleHRPdXRwdXQuYXBwZW5kKHRvV1RGU3RyaW5nKHRleHRPdXRwdXQpKTsKKyAgICB9
CisKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkJl
Zm9yZVVubG9hZFJldHVyblZhbHVlIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CiAgICAgICAgIFdLQm9vbGVhblJl
ZiBiZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVz
c2FnZUJvZHkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2Nh
dGlvbi5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5oCmluZGV4IGU0
OWQ5ZmQwZGUzZmU0OWNiZmQ4ZjE5NzJhNmNkMmNkZWZlN2Q3MTkuLmI5ZWFkMTRhYTRjMDU4MGFm
MDlkODFhYWJlMjcwNTM5ZTQ2MmEwZWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdEludm9jYXRpb24uaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZv
Y2F0aW9uLmgKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8
V2ViS2l0Mi9XS1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKIG5hbWVzcGFjZSBXVFIgewogCkBAIC02Nyw3ICs2OSw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2dvdFJlcGFpbnQ7CiAgICAgYm9vbCBtX2Vycm9yOwogCi0gICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1fdGV4dE91dHB1dDsKKyAgICBTdHJpbmdCdWlsZGVyIG1fdGV4dE91dHB1dDsK
ICAgICBXS1JldGFpblB0cjxXS0ltYWdlUmVmPiBtX3BpeGVsUmVzdWx0OwogICAgIFdLUmV0YWlu
UHRyPFdLQXJyYXlSZWY+IG1fcmVwYWludFJlY3RzOwogICAgIHN0ZDo6c3RyaW5nIG1fZXJyb3JN
ZXNzYWdlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>