<?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>98928</bug_id>
          
          <creation_ts>2012-10-10 11:07:27 -0700</creation_ts>
          <short_desc>JSC: A reliable topCallFrame</short_desc>
          <delta_ts>2012-10-23 05:06:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>99872</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>fmalita</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>levin+threading</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>mifenton</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>pdr</cc>
    
    <cc>schenney</cc>
    
    <cc>tkent</cc>
    
    <cc>tmpsantos</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>739136</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-10 11:07:27 -0700</bug_when>
    <thetext>Fix the topCallFrame pointer usage so that it is reliable and more accurate.

&lt;rdar://problem/11721461&gt;
&lt;rdar://problem/11721462&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739236</commentid>
    <comment_count>1</comment_count>
      <attachid>168058</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-10 12:59:59 -0700</bug_when>
    <thetext>Created attachment 168058
preliminary</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739272</commentid>
    <comment_count>2</comment_count>
      <attachid>168058</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-10-10 13:45:24 -0700</bug_when>
    <thetext>Comment on attachment 168058
preliminary

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

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:365
&gt; +            const size_t stackRedZoneSize = 16 * 1024;
&gt; +            return m_stack.recursionCheck(stackRedZoneSize)

Should we just change s_defaultAvailabilityDelta to 16kB?

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:731
&gt; +    if (checker.isInRedZone() || (m_reentryDepth &gt;= MaxSmallThreadReentryDepth &amp;&amp; m_reentryDepth &gt;= callFrame-&gt;globalData().maxReentryDepth))

Since you&apos;re using a precise check, you should remove m_reentryDepth and its associated less precise checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739363</commentid>
    <comment_count>3</comment_count>
      <attachid>168058</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-10 16:03:54 -0700</bug_when>
    <thetext>Comment on attachment 168058
preliminary

Attachment 168058 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14260200

New failing tests:
fast/js/global-recursion-on-full-stack.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741770</commentid>
    <comment_count>4</comment_count>
      <attachid>168631</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-14 23:35:32 -0700</bug_when>
    <thetext>Created attachment 168631
Draft 1.

(In reply to comment #2)
&gt; &gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:365
&gt; &gt; +            const size_t stackRedZoneSize = 16 * 1024;
&gt; &gt; +            return m_stack.recursionCheck(stackRedZoneSize)
&gt; 
&gt; Should we just change s_defaultAvailabilityDelta to 16kB?

I&apos;ve changed this to 32kB to be consistent with the estimated worst case in the Interpreter loop entry points.  Will run some more test for this value.

&gt; &gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:731
&gt; &gt; +    if (checker.isInRedZone() || (m_reentryDepth &gt;= MaxSmallThreadReentryDepth &amp;&amp; m_reentryDepth &gt;= callFrame-&gt;globalData().maxReentryDepth))
&gt; 
&gt; Since you&apos;re using a precise check, you should remove m_reentryDepth and its associated less precise checks.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741795</commentid>
    <comment_count>5</comment_count>
      <attachid>168631</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-15 00:09:41 -0700</bug_when>
    <thetext>Comment on attachment 168631
Draft 1.

Attachment 168631 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14293628</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741823</commentid>
    <comment_count>6</comment_count>
      <attachid>168631</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-15 00:42:09 -0700</bug_when>
    <thetext>Comment on attachment 168631
Draft 1.

Attachment 168631 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14298633

New failing tests:
fast/xmlhttprequest/xmlhttprequest-recursive-sync-event.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746061</commentid>
    <comment_count>7</comment_count>
      <attachid>169560</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-18 23:41:48 -0700</bug_when>
    <thetext>Created attachment 169560
Draft 2: not ready for review yet, just testing fix for ews reported issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746156</commentid>
    <comment_count>8</comment_count>
      <attachid>169560</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-19 02:25:48 -0700</bug_when>
    <thetext>Comment on attachment 169560
Draft 2: not ready for review yet, just testing fix for ews reported issues.

Attachment 169560 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14464369

New failing tests:
svg/foreignObject/viewport-foreignobject-crash.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748116</commentid>
    <comment_count>9</comment_count>
      <attachid>170034</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-22 17:29:15 -0700</bug_when>
    <thetext>Created attachment 170034
Fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748144</commentid>
    <comment_count>10</comment_count>
      <attachid>170034</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-22 17:59:10 -0700</bug_when>
    <thetext>Comment on attachment 170034
Fix.

Win EWS bot is happy.  It&apos;s ready for a review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748247</commentid>
    <comment_count>11</comment_count>
      <attachid>170034</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-10-22 21:25:00 -0700</bug_when>
    <thetext>Comment on attachment 170034
Fix.

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

r=me

&gt; Source/JavaScriptCore/jit/JITStubs.cpp:2145
&gt; +    callFrame-&gt;setCodeBlock(0);

Why did you need to do this? Your ChangeLog doesn&apos;t say.

&gt; Source/JavaScriptCore/jit/JITStubs.cpp:2227
&gt; +    callFrame-&gt;setCodeBlock(0);

Why did you need to do this? Your ChangeLog doesn&apos;t say.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748308</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-22 23:36:20 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 170034 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170034&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JITStubs.cpp:2145
&gt; &gt; +    callFrame-&gt;setCodeBlock(0);
&gt; 
&gt; Why did you need to do this? Your ChangeLog doesn&apos;t say.
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JITStubs.cpp:2227
&gt; &gt; +    callFrame-&gt;setCodeBlock(0);
&gt; 
&gt; Why did you need to do this? Your ChangeLog doesn&apos;t say.

These were done in the jitCompileFor() and lazyLinkFor() JIT stub helper functions.  Both of these functions were called from JIT stub functions which in turn were called by JIT glue trampoline code which are trying to call a callee function (for call or construct), but the callee needs to be linked or JIT compiled.  In both cases, a call frame has been pushed and partially initialized.  It is expected that the prologue of the callee will handle the initialization of the frame&apos;s codeBlock field.

But this these cases, the callee is not known yet (which is why we&apos;re doing a link and JIT compile), and hence has not been called yet.  But these JIT stub helpers will do work that may trigger a GC.  The GC will scan the JSStack and step on an uninitialized codeBlock pointer.  Hence, we initialize the codeBlock pointer to be 0 here to keep the GC happy.

I will capture the above in comments in the code before I land the change.  Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748316</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-10-23 00:13:52 -0700</bug_when>
    <thetext>Landed in r132182: &lt;http://trac.webkit.org/changeset/132182&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748449</commentid>
    <comment_count>14</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-10-23 03:17:21 -0700</bug_when>
    <thetext>I&apos;m afraid this patch caused a regression. Some API tests are asserting on EFL.

http://build.webkit.org/builders/EFL%20Linux%2064-bit%20Debug%20WK2/builds/4926/steps/API%20tests/logs/stdio

ASSERTION FAILED: (requiredCapacity &gt;= 0) &amp;&amp; (requiredCapacity &lt; size)
/home/buildslave-1/webkit-buildslave/efl-linux-64-debug-wk2/build/Source/JavaScriptCore/interpreter/Interpreter.cpp(195) : JSC::Interpreter::StackPolicy::StackPolicy(JSC::Interpreter&amp;, const WTF::StackBounds&amp;)
1   0x2b94f7b3393e JSC::Interpreter::StackPolicy::StackPolicy(JSC::Interpreter&amp;, WTF::StackBounds const&amp;)
2   0x2b94f7b36bb4 JSC::Interpreter::execute(JSC::ProgramExecutable*, JSC::ExecState*, JSC::JSObject*)
3   0x2b94f7bf69fc JSC::evaluate(JSC::ExecState*, JSC::SourceCode const&amp;, JSC::JSValue, JSC::JSValue*)
4   0x2b94f26ba4dd WebCore::JSMainThreadExecState::evaluate(JSC::ExecState*, JSC::SourceCode const&amp;, JSC::JSValue, JSC::JSValue*)
5   0x2b94f26d7234 WebCore::ScriptController::evaluateInWorld(WebCore::ScriptSourceCode const&amp;, WebCore::DOMWrapperWorld*)
6   0x2b94f26d7336 WebCore::ScriptController::evaluate(WebCore::ScriptSourceCode const&amp;)
7   0x2b94f1c58347 WebCore::ScriptElement::executeScript(WebCore::ScriptSourceCode const&amp;)
8   0x2b94f1c57b9f WebCore::ScriptElement::prepareScript(WTF::TextPosition const&amp;, WebCore::ScriptElement::LegacyTypeSupport)
9   0x2b94f1e491f8 WebCore::HTMLScriptRunner::runScript(WebCore::Element*, WTF::TextPosition const&amp;)
10  0x2b94f1e48845 WebCore::HTMLScriptRunner::execute(WTF::PassRefPtr&lt;WebCore::Element&gt;, WTF::TextPosition const&amp;)
11  0x2b94f1e39b6b WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder()
12  0x2b94f1e39c1d WebCore::HTMLDocumentParser::canTakeNextToken(WebCore::HTMLDocumentParser::SynchronousMode, WebCore::PumpSession&amp;)
13  0x2b94f1e3a030 WebCore::HTMLDocumentParser::pumpTokenizer(WebCore::HTMLDocumentParser::SynchronousMode)
14  0x2b94f1e39a18 WebCore::HTMLDocumentParser::pumpTokenizerIfPossible(WebCore::HTMLDocumentParser::SynchronousMode)
15  0x2b94f1e3a5c2 WebCore::HTMLDocumentParser::append(WebCore::SegmentedString const&amp;)
16  0x2b94f1b6531d WebCore::DecodedDataDocumentParser::flush(WebCore::DocumentWriter*)
17  0x2b94f1fb272f WebCore::DocumentWriter::end()
18  0x2b94f1f9f6b1 WebCore::DocumentLoader::finishedLoading()
19  0x2b94f1fdbfb9 WebCore::MainResourceLoader::didFinishLoading(double)
20  0x2b94f1feeda5 WebCore::ResourceLoader::didFinishLoading(WebCore::ResourceHandle*, double)
21  0x2b94f2b3a14a
22  0x2b94f66b9775
23  0x2b94f66ce8dd g_simple_async_result_complete
24  0x2b94f66ce978
25  0x2b94f6381e53 g_main_context_dispatch
26  0x2b94f54bd16e
27  0x2b94f54b6dc9
28  0x2b94f54b7955
29  0x2b94f54b7c57 ecore_main_loop_begin
30  0x2b94f2b1cee9 WebCore::RunLoop::run()
31  0x2b94eec5cb88 WebProcessMainEfl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748515</commentid>
    <comment_count>15</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-10-23 05:06:10 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; I&apos;m afraid this patch caused a regression. Some API tests are asserting on EFL.
&gt; 
&gt; http://build.webkit.org/builders/EFL%20Linux%2064-bit%20Debug%20WK2/builds/4926/steps/API%20tests/logs/stdio
&gt; 
&gt; ASSERTION FAILED: (requiredCapacity &gt;= 0) &amp;&amp; (requiredCapacity &lt; size)
&gt; /home/buildslave-1/webkit-buildslave/efl-linux-64-debug-wk2/build/Source/JavaScriptCore/interpreter/Interpreter.cpp(195) : JSC::Interpreter::StackPolicy::StackPolicy(JSC::Interpreter&amp;, const WTF::StackBounds&amp;)
&gt; 1   0x2b94f7b3393e JSC::Interpreter::StackPolicy::StackPolicy(JSC::Interpreter&amp;, WTF::StackBounds const&amp;)
&gt; 2   0x2b94f7b36bb4 JSC::Interpreter::execute(JSC::ProgramExecutable*, JSC::ExecState*, JSC::JSObject*)
&gt; 3   0x2b94f7bf69fc JSC::evaluate(JSC::ExecState*, JSC::SourceCode const&amp;, JSC::JSValue, JSC::JSValue*)
&gt; 4   0x2b94f26ba4dd WebCore::JSMainThreadExecState::evaluate(JSC::ExecState*, JSC::SourceCode const&amp;, JSC::JSValue, JSC::JSValue*)
&gt; 5   0x2b94f26d7234 WebCore::ScriptController::evaluateInWorld(WebCore::ScriptSourceCode const&amp;, WebCore::DOMWrapperWorld*)
&gt; 6   0x2b94f26d7336 WebCore::ScriptController::evaluate(WebCore::ScriptSourceCode const&amp;)
&gt; 7   0x2b94f1c58347 WebCore::ScriptElement::executeScript(WebCore::ScriptSourceCode const&amp;)
&gt; 8   0x2b94f1c57b9f WebCore::ScriptElement::prepareScript(WTF::TextPosition const&amp;, WebCore::ScriptElement::LegacyTypeSupport)
&gt; 9   0x2b94f1e491f8 WebCore::HTMLScriptRunner::runScript(WebCore::Element*, WTF::TextPosition const&amp;)
&gt; 10  0x2b94f1e48845 WebCore::HTMLScriptRunner::execute(WTF::PassRefPtr&lt;WebCore::Element&gt;, WTF::TextPosition const&amp;)
&gt; 11  0x2b94f1e39b6b WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder()
&gt; 12  0x2b94f1e39c1d WebCore::HTMLDocumentParser::canTakeNextToken(WebCore::HTMLDocumentParser::SynchronousMode, WebCore::PumpSession&amp;)
&gt; 13  0x2b94f1e3a030 WebCore::HTMLDocumentParser::pumpTokenizer(WebCore::HTMLDocumentParser::SynchronousMode)
&gt; 14  0x2b94f1e39a18 WebCore::HTMLDocumentParser::pumpTokenizerIfPossible(WebCore::HTMLDocumentParser::SynchronousMode)
&gt; 15  0x2b94f1e3a5c2 WebCore::HTMLDocumentParser::append(WebCore::SegmentedString const&amp;)
&gt; 16  0x2b94f1b6531d WebCore::DecodedDataDocumentParser::flush(WebCore::DocumentWriter*)
&gt; 17  0x2b94f1fb272f WebCore::DocumentWriter::end()
&gt; 18  0x2b94f1f9f6b1 WebCore::DocumentLoader::finishedLoading()
&gt; 19  0x2b94f1fdbfb9 WebCore::MainResourceLoader::didFinishLoading(double)
&gt; 20  0x2b94f1feeda5 WebCore::ResourceLoader::didFinishLoading(WebCore::ResourceHandle*, double)
&gt; 21  0x2b94f2b3a14a
&gt; 22  0x2b94f66b9775
&gt; 23  0x2b94f66ce8dd g_simple_async_result_complete
&gt; 24  0x2b94f66ce978
&gt; 25  0x2b94f6381e53 g_main_context_dispatch
&gt; 26  0x2b94f54bd16e
&gt; 27  0x2b94f54b6dc9
&gt; 28  0x2b94f54b7955
&gt; 29  0x2b94f54b7c57 ecore_main_loop_begin
&gt; 30  0x2b94f2b1cee9 WebCore::RunLoop::run()
&gt; 31  0x2b94eec5cb88 WebProcessMainEfl

Actually looks like the crash was caused by the depends of this bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168058</attachid>
            <date>2012-10-10 12:59:59 -0700</date>
            <delta_ts>2012-10-14 23:35:32 -0700</delta_ts>
            <desc>preliminary</desc>
            <filename>bug-98928.patch</filename>
            <type>text/plain</type>
            <size>61155</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwOTQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBA
CisyMDEyLTEwLTEwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBN
YWtlIHRvcENhbGxGcmFtZSByZWxpYWJsZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk4OTI4LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIC0gVk0gZW50cnkgcG9pbnRzIGFuZCB0aGUgR0Mgbm93IHVzZXMg
dG9wQ2FsbEZyYW1lLgorICAgICAgICAtIFRoZSBjYWxsZXJGcmFtZSB2YWx1ZSBpbiBDYWxsRnJh
bWVzIGFyZSBub3cgYWx3YXlzIHRoZSBwcmV2aW91cworICAgICAgICAgIGZyYW1lIG9uIHRoZSBz
dGFjaywgZXhjZXB0IGZvciB0aGUgZmlyc3QgZnJhbWUgd2hpY2ggaGFzIGEKKyAgICAgICAgICBj
YWxsZXJGcmFtZSBvZiAwIChub3QgY291bnRpbmcgdGhlIEhvc3RDYWxsRnJhbWVGbGFnKS4KKyAg
ICAgICAgICBIZW5jZSwgd2UgY2FuIG5vdyB0cmF2ZXJzZSBldmVyeSBzdGFjayBmcmFtZSBvbiB0
aGUgc3RhY2sgYWxsIHRoZQorICAgICAgICAgIGJhY2sgdG8gdGhlIGZpcnN0IGZyYW1lLgorICAg
ICAgICAtIEdsb2JhbEV4ZWMncyB3aWxsIG5vIGxvbmdlciBiZSB1c2VkIGFzIHRoZSBjYWxsZXJG
cmFtZSB2YWx1ZXMgaW4KKyAgICAgICAgICBjYWxsIGZyYW1lcy4KKworICAgICAgICAqIGJ5dGVj
b2RlL1NhbXBsaW5nVG9vbC5oOgorICAgICAgICAoU2FtcGxpbmdUb29sKToKKyAgICAgICAgKEpT
Qzo6U2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkOjpDYWxsUmVjb3JkKToKKyAgICAgICAgKiBieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXROb2RlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OnByZXBhcmVGb3JFeHRlcm5hbENhbGwpOgorICAgICAgICAqIGludGVycHJldGVy
L0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmNhbGxlckZyYW1lTm9GbGFn
cyk6CisgICAgICAgIChFeGVjU3RhdGUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmFyZ0lu
ZGV4Rm9yUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmdldEFyZ3VtZW50VW5z
YWZlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWVDbG9zdXJlLmg6CisgICAgICAg
IChDYWxsRnJhbWVDbG9zdXJlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpldmFsKToKKyAgICAgICAgKEpTQzo6
SW50ZXJwcmV0ZXI6OkludGVycHJldGVyKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnRo
cm93RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAg
ICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwpOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpw
cmVwYXJlRm9yUmVwZWF0Q2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjplbmRSZXBl
YXRDYWxsKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKE5hdGl2ZVN0YWNrQ2hlY2tlcik6CisgICAgICAgIChKU0M6OkludGVy
cHJldGVyOjpOYXRpdmVTdGFja0NoZWNrZXI6Ok5hdGl2ZVN0YWNrQ2hlY2tlcik6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpOYXRpdmVTdGFja0NoZWNrZXI6On5OYXRpdmVTdGFja0NoZWNr
ZXIpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6TmF0aXZlU3RhY2tDaGVja2VyOjppc0lu
UmVkWm9uZSk6CisgICAgICAgIChJbnRlcnByZXRlcik6CisgICAgICAgICogaW50ZXJwcmV0ZXIv
SlNTdGFjay5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OkpTU3RhY2spOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6Z3Jvd1Nsb3dDYXNlKToKKyAgICAgICAgKEpT
Qzo6SlNTdGFjazo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAoSlNDOjpKU1N0
YWNrOjphbGxvd1VzZU9mU3RhY2tPdmVyZmxvd1Jlc2VydmUpOgorICAgICAgICAoSlNDOjpKU1N0
YWNrOjpkaXNhbGxvd1VzZU9mU3RhY2tPdmVyZmxvd1Jlc2VydmUpOgorICAgICAgICAoSlNDOjpK
U1N0YWNrOjpTdGFja092ZXJmbG93UmVzZXJ2ZUVuYWJsZXI6OlN0YWNrT3ZlcmZsb3dSZXNlcnZl
RW5hYmxlcik6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OlN0YWNrT3ZlcmZsb3dSZXNlcnZlRW5h
Ymxlcjo6flN0YWNrT3ZlcmZsb3dSZXNlcnZlRW5hYmxlcik6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvSlNTdGFjay5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTU3RhY2spOgorICAgICAg
ICAoU3RhY2tPdmVyZmxvd1Jlc2VydmVFbmFibGVyKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6
aW5zdGFsbEZlbmNlKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6dmFsaWRhdGVGZW5jZSk6Cisg
ICAgICAgIChKU0M6OkpTU3RhY2s6Omluc3RhbGxUcmFwc0FmdGVyRnJhbWUpOgorICAgICAgICAq
IGludGVycHJldGVyL0pTU3RhY2tJbmxpbmVkLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6SlNTdGFjazo6Z2V0VG9wT2ZGcmFtZSk6CisgICAgICAgIChKU0M6OkpTU3Rh
Y2s6OmdldFRvcE9mU3RhY2spOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjpnZXRTdGFydE9mRnJh
bWUpOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjpwdXNoRnJhbWUpOgorICAgICAgICAoSlNDOjpK
U1N0YWNrOjpwb3BGcmFtZSk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OmdlbmVyYXRlRmVuY2VW
YWx1ZSk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6Omluc3RhbGxGZW5jZSk6CisgICAgICAgIChK
U0M6OkpTU3RhY2s6OnZhbGlkYXRlRmVuY2UpOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjppbnN0
YWxsVHJhcHNBZnRlckZyYW1lKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAg
ICAoSlNDOjpqaXRDb21waWxlRm9yKToKKyAgICAgICAgKEpTQzo6bGF6eUxpbmtGb3IpOgorICAg
ICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9FeGNl
cHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6dGhyb3dTdGFja092ZXJmbG93RXJyb3Ip
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgorCiAyMDEyLTEwLTEwICBCYWxhenMgS2lsdmFkeSAg
PGtpbHZhZHliQGhvbWVqaW5uaS5jb20+CiAKICAgICAgICAgUmVnaXN0ZXJGaWxlIHRvIEpTU3Rh
Y2sgcmVuYW1lIGZpeCBmb3IgYSBzdHJ1Y3QgbWVtYmVyLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAkocmV2aXNpb24gMTMwOTM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzAsMTcgKzIzMCwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBTYW1w
bGluZ1Rvb2wgewogICAgIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIHN0cnVjdCBDYWxsUmVjb3Jk
OwotICAgICAgICBmcmllbmQgY2xhc3MgSG9zdENhbGxSZWNvcmQ7CiAgICAgICAgIAogI2lmIEVO
QUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGNsYXNzIENhbGxSZWNvcmQgewogICAgICAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FsbFJlY29yZCk7CiAgICAgICAgIHB1YmxpYzoK
LSAgICAgICAgICAgIENhbGxSZWNvcmQoU2FtcGxpbmdUb29sKiBzYW1wbGluZ1Rvb2wpCisgICAg
ICAgICAgICBDYWxsUmVjb3JkKFNhbXBsaW5nVG9vbCogc2FtcGxpbmdUb29sLCBib29sIGlzSG9z
dENhbGwgPSBmYWxzZSkKICAgICAgICAgICAgICAgICA6IG1fc2FtcGxpbmdUb29sKHNhbXBsaW5n
VG9vbCkKICAgICAgICAgICAgICAgICAsIG1fc2F2ZWRTYW1wbGUoc2FtcGxpbmdUb29sLT5tX3Nh
bXBsZSkKICAgICAgICAgICAgICAgICAsIG1fc2F2ZWRDb2RlQmxvY2soc2FtcGxpbmdUb29sLT5t
X2NvZGVCbG9jaykKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNIb3N0Y2Fs
bCkKKyAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmdUb29sLT5tX3NhbXBsZSB8PSAweDE7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIH5DYWxsUmVjb3JkKCkKQEAgLTI1NCwzMiArMjU1
LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaW50cHRyX3QgbV9zYXZlZFNhbXBs
ZTsKICAgICAgICAgICAgIENvZGVCbG9jayogbV9zYXZlZENvZGVCbG9jazsKICAgICAgICAgfTsK
LSAgICAgICAgCi0gICAgICAgIGNsYXNzIEhvc3RDYWxsUmVjb3JkIDogcHVibGljIENhbGxSZWNv
cmQgewotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBIb3N0Q2FsbFJlY29yZChTYW1wbGlu
Z1Rvb2wqIHNhbXBsaW5nVG9vbCkKLSAgICAgICAgICAgICAgICA6IENhbGxSZWNvcmQoc2FtcGxp
bmdUb29sKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNhbXBsaW5nVG9vbC0+bV9z
YW1wbGUgfD0gMHgxOwotICAgICAgICAgICAgfQotICAgICAgICB9OwogI2Vsc2UKICAgICAgICAg
Y2xhc3MgQ2FsbFJlY29yZCB7CiAgICAgICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDYWxs
UmVjb3JkKTsKICAgICAgICAgcHVibGljOgotICAgICAgICAgICAgQ2FsbFJlY29yZChTYW1wbGlu
Z1Rvb2wqKQorICAgICAgICAgICAgQ2FsbFJlY29yZChTYW1wbGluZ1Rvb2wqLCBib29sID0gZmFs
c2UpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07Ci0KLSAgICAgICAg
Y2xhc3MgSG9zdENhbGxSZWNvcmQgOiBwdWJsaWMgQ2FsbFJlY29yZCB7Ci0gICAgICAgIHB1Ymxp
YzoKLSAgICAgICAgICAgIEhvc3RDYWxsUmVjb3JkKFNhbXBsaW5nVG9vbCogc2FtcGxpbmdUb29s
KQotICAgICAgICAgICAgICAgIDogQ2FsbFJlY29yZChzYW1wbGluZ1Rvb2wpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0jZW5kaWYgICAgICAgIAorI2VuZGlmCiAK
ICAgICAgICAgU2FtcGxpbmdUb29sKEludGVycHJldGVyKiBpbnRlcnByZXRlcikKICAgICAgICAg
ICAgIDogbV9pbnRlcnByZXRlcihpbnRlcnByZXRlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlz
aW9uIDEzMDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzYxLDcgKzM2MSw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgLy8gTm9kZTo6ZW1pdENvZGUgYXNzdW1lcyB0aGF0IGRzdCwg
aWYgcHJvdmlkZWQsIGlzIGVpdGhlciBhIGxvY2FsIG9yIGEgcmVmZXJlbmNlZCB0ZW1wb3Jhcnku
CiAgICAgICAgICAgICBBU1NFUlQoIWRzdCB8fCBkc3QgPT0gaWdub3JlZFJlc3VsdCgpIHx8ICFk
c3QtPmlzVGVtcG9yYXJ5KCkgfHwgZHN0LT5yZWZDb3VudCgpKTsKICAgICAgICAgICAgIGFkZExp
bmVJbmZvKG4tPmxpbmVObygpKTsKLSAgICAgICAgICAgIHJldHVybiBtX3N0YWNrLnJlY3Vyc2lv
bkNoZWNrKCkKKyAgICAgICAgICAgIGNvbnN0IHNpemVfdCBzdGFja1JlZFpvbmVTaXplID0gMTYg
KiAxMDI0OworICAgICAgICAgICAgcmV0dXJuIG1fc3RhY2sucmVjdXJzaW9uQ2hlY2soc3RhY2tS
ZWRab25lU2l6ZSkKICAgICAgICAgICAgICAgICA/IG4tPmVtaXRCeXRlY29kZSgqdGhpcywgZHN0
KQogICAgICAgICAgICAgICAgIDogZW1pdFRocm93RXhwcmVzc2lvblRvb0RlZXBFeGNlcHRpb24o
KTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCShyZXZpc2lvbiAxMzA5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTE2LDEyICsxMTE2LDE2IEBA
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmUKIAogRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5U3RydWN0dXJlKSk7Cisg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNBcnJheTo6Y3JlYXRlKGdsb2JhbERhdGEsIGFycmF5U3RydWN0
dXJlKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJy
YXlXaXRoU2l6ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGlu
dDMyX3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQXJyYXk6OmNyZWF0
ZShleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5U3RydWN0dXJlLCBzaXplKSk7CisgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNBcnJheTo6Y3JlYXRlKGdsb2JhbERhdGEsIGFycmF5U3RydWN0dXJlLCBzaXpl
KSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlC
dWZmZXIoRXhlY1N0YXRlKiBleGVjLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBzaXplKQpAQCAtMTE1
NiwyMCArMTE2MCwyNCBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0
CiAKIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBcmd1bWVudHMoRXhlY1N0
YXRlKiBleGVjKQogeworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2Jh
bERhdGEoKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBl
eGVjKTsKICAgICAvLyBOQjogVGhpcyBuZWVkcyB0byBiZSBleGNlZWRpbmdseSBjYXJlZnVsIHdp
dGggdG9wIGNhbGwgZnJhbWUgdHJhY2tpbmcsIHNpbmNlIGl0CiAgICAgLy8gbWF5IGJlIGNhbGxl
ZCBmcm9tIE9TUiBleGl0LCB3aGlsZSB0aGUgc3RhdGUgb2YgdGhlIGNhbGwgc3RhY2sgaXMgYml6
YXJyZS4KLSAgICBBcmd1bWVudHMqIHJlc3VsdCA9IEFyZ3VtZW50czo6Y3JlYXRlKGV4ZWMtPmds
b2JhbERhdGEoKSwgZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0
aW9uKTsKKyAgICBBcmd1bWVudHMqIHJlc3VsdCA9IEFyZ3VtZW50czo6Y3JlYXRlKGdsb2JhbERh
dGEsIGV4ZWMpOworICAgIEFTU0VSVCghZ2xvYmFsRGF0YS5leGNlcHRpb24pOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVJbmxp
bmVkQXJndW1lbnRzKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUpCiB7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEs
IGV4ZWMpOwogICAgIC8vIE5COiBUaGlzIG5lZWRzIHRvIGJlIGV4Y2VlZGluZ2x5IGNhcmVmdWwg
d2l0aCB0b3AgY2FsbCBmcmFtZSB0cmFja2luZywgc2luY2UgaXQKICAgICAvLyBtYXkgYmUgY2Fs
bGVkIGZyb20gT1NSIGV4aXQsIHdoaWxlIHRoZSBzdGF0ZSBvZiB0aGUgY2FsbCBzdGFjayBpcyBi
aXphcnJlLgotICAgIEFyZ3VtZW50cyogcmVzdWx0ID0gQXJndW1lbnRzOjpjcmVhdGUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBleGVjLCBpbmxpbmVDYWxsRnJhbWUpOwotICAgIEFTU0VSVCghZXhlYy0+
Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbik7CisgICAgQXJndW1lbnRzKiByZXN1bHQgPSBBcmd1bWVu
dHM6OmNyZWF0ZShnbG9iYWxEYXRhLCBleGVjLCBpbmxpbmVDYWxsRnJhbWUpOworICAgIEFTU0VS
VCghZ2xvYmFsRGF0YS5leGNlcHRpb24pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlz
aW9uIDEzMDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTg0OCw2ICsxODQ4LDEzIEBAIHB1YmxpYzoKICNpZiAh
ZGVmaW5lZChOREVCVUcpICYmICFDUFUoQVJNKQogICAgIHZvaWQgcHJlcGFyZUZvckV4dGVybmFs
Q2FsbCgpCiAgICAgeworICAgICAgICAvLyBXZSdyZSBhYm91dCB0byBjYWxsIG91dCB0byBhICJu
YXRpdmUiIGhlbHBlciBmdW5jdGlvbi4gVGhlIGhlbHBlcgorICAgICAgICAvLyBmdW5jdGlvbiBp
cyBleHBlY3RlZCB0byBzZXQgdG9wQ2FsbEZyYW1lIGl0c2VsZiB3aXRoIHRoZSBFeGVjU3RhdGUK
KyAgICAgICAgLy8gdGhhdCBpcyBwYXNzZWQgdG8gaXQuCisgICAgICAgIC8vIFdlIGV4cGxpY2l0
bHkgdHJhc2ggdG9wQ2FsbEZyYW1lIGhlcmUgc28gdGhhdCB3ZSdsbCBrbm93IGlmIHNvbWUgb2YK
KyAgICAgICAgLy8gdGhlIGhlbHBlciBmdW5jdGlvbnMgYXJlIG5vdCBzZXR0aW5nIHRvcENhbGxG
cmFtZSB3aGVuIHRoZXkgc2hvdWxkCisgICAgICAgIC8vIGJlIGRvaW5nIHNvLiBOb3RlOiB0aGUg
cHJldmlvdXMgdmFsdWUgaW4gdG9wY2FsbEZyYW1lIHdhcyBub3QgdmFsaWQKKyAgICAgICAgLy8g
dmFsaWQgYW55d2F5IHNpbmNlIGl0IHdhcyBub3QgYmVpbmcgdXBkYXRlZCBieSBKSVQnZWQgY29k
ZSBieSBkZXNpZ24uCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2Yodm9p
ZCopIC8gNDsgaSsrKQogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoMHhi
YWRiZWVmKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJm1faml0Lmdsb2JhbERhdGEoKS0+dG9w
Q2FsbEZyYW1lKSArIGkgKiA0KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAxMzA5MzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI1Niw2ICsyNTYsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIAogICAgICAgICBDb2Rl
QmxvY2sqIHNvbWVDb2RlQmxvY2tGb3JQb3NzaWJseUlubGluZWRDb2RlKCkgeyByZXR1cm4gY29k
ZUJsb2NrKCk7IH0KICNlbmRpZgorICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lTm9GbGFn
cygpIHsgcmV0dXJuIGNhbGxlckZyYW1lKCktPnJlbW92ZUhvc3RDYWxsRnJhbWVGbGFnKCk7IH0K
ICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhpcyB0byBnZXQgdGhlIHRydWUgY2FsbCBmcmFt
ZSAoYWNjb3VudGVkIGZvciBpbmxpbmluZyBhbmQgYW55CiAgICAgICAgIC8vIG90aGVyIG9wdGlt
aXphdGlvbnMpLCB3aGVuIHlvdSBoYXZlIGVudGVyZWQgaW50byBWTSBjb2RlIHRocm91Z2ggb25l
CkBAIC0yODEsNiArMjgyLDM2IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgRXhlY1N0YXRl
KCk7CiAgICAgICAgIH5FeGVjU3RhdGUoKTsKIAorICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGFy
ZSBmb3IgaW50ZXJuYWwgdXNlIGluIGRlYnVnZ2luZyBhbmQgdmVyaWZpY2F0aW9uCisgICAgICAg
IC8vIGNvZGUgb25seSBhbmQgbm90IG1lYW50IGFzIGFuIEFQSSBmb3IgZ2VuZXJhbCB1c2FnZToK
KworICAgICAgICBzaXplX3QgYXJnSW5kZXhGb3JSZWdpc3RlcihSZWdpc3RlciogcmVnKQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBUaGUgcmVnaXN0ZXIgYXQgJ29mZnNldCcgbnVtYmVyIG9m
IHNsb3RzIGZyb20gdGhlIGZyYW1lIHBvaW50ZXIKKyAgICAgICAgICAgIC8vIGkuZS4KKyAgICAg
ICAgICAgIC8vICAgICAgIHJlZyA9IGZyYW1lW29mZnNldF07CisgICAgICAgICAgICAvLyAgID09
PiByZWcgPSBmcmFtZSArIG9mZnNldDsKKyAgICAgICAgICAgIC8vICAgPT0+IG9mZnNldCA9IHJl
ZyAtIGZyYW1lOworICAgICAgICAgICAgaW50IG9mZnNldCA9IHJlZyAtIHRoaXMtPnJlZ2lzdGVy
cygpOworCisgICAgICAgICAgICAvLyBUaGUgb2Zmc2V0IGlzIGRlZmluZWQgKGJhc2VkIG9uIGFy
Z3VtZW50T2Zmc2V0KCkpIHRvIGJlOgorICAgICAgICAgICAgLy8gICAgICAgb2Zmc2V0ID0gc19m
aXJzdEFyZ3VtZW50T2Zmc2V0IC0gYXJnSW5kZXg7CisgICAgICAgICAgICAvLyBIZW5jZToKKyAg
ICAgICAgICAgIC8vICAgICAgIGFyZ0luZGV4ID0gc19maXJzdEFyZ3VtZW50T2Zmc2V0IC0gb2Zm
c2V0OworICAgICAgICAgICAgc2l6ZV90IGFyZ0luZGV4ID0gc19maXJzdEFyZ3VtZW50T2Zmc2V0
IC0gb2Zmc2V0OworICAgICAgICAgICAgcmV0dXJuIGFyZ0luZGV4OworICAgICAgICB9CisKKyAg
ICAgICAgSlNWYWx1ZSBnZXRBcmd1bWVudFVuc2FmZShzaXplX3QgYXJnSW5kZXgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIFVzZXIgYmV3YXJlISBUaGlzIG1ldGhvZCBkb2VzIG5vdCB2ZXJp
ZnkgdGhhdCB0aGVyZSBpcyBhIHZhbGlkCisgICAgICAgICAgICAvLyBhcmd1bWVudCBhdCB0aGUg
c3BlY2lmaWVkIGFyZ0luZGV4LiBUaGlzIGlzIHVzZWQgZm9yIGRlYnVnZ2luZworICAgICAgICAg
ICAgLy8gYW5kIHZlcmlmaWNhdGlvbiBjb2RlIG9ubHkuIFRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQg
dG8ga25vdyB3aGF0CisgICAgICAgICAgICAvLyBoZS9zaGUgaXMgZG9pbmcgd2hlbiBjYWxsaW5n
IHRoaXMgbWV0aG9kLgorICAgICAgICAgICAgcmV0dXJuIHRoaXNbYXJndW1lbnRPZmZzZXQoYXJn
SW5kZXgpXS5qc1ZhbHVlKCk7CisgICAgICAgIH0KKworICAgICAgICBmcmllbmQgY2xhc3MgSlNT
dGFjazsKICAgICAgICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwogICAgIH07CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVDbG9zdXJlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUNs
b3N1cmUuaAkocmV2aXNpb24gMTMwOTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZUNsb3N1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBA
QCBzdHJ1Y3QgQ2FsbEZyYW1lQ2xvc3VyZSB7CiAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb247CiAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGU7CiAgICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhOwotICAgIFJlZ2lzdGVyKiBvbGRFbmQ7CiAgICAgSlNTY29wZSogc2Nv
cGU7CiAgICAgaW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsKICAgICBpbnQgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDEzMDkzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJKU05hbWVTY29wZS5oIgogI2luY2x1ZGUg
IkpTTm90QW5PYmplY3QuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCisj
aW5jbHVkZSAiSlNTdGFja0lubGluZWQuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1
ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiTExJbnRDTG9vcC5oIgpAQCAtODgsMzMgKzg5
LDYgQEAgc3RhdGljIGludCBkZXB0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgSgogICAgIHJldHVy
biBzYy0+bG9jYWxEZXB0aCgpOwogfQogCi1BTFdBWVNfSU5MSU5FIENhbGxGcmFtZSogSW50ZXJw
cmV0ZXI6OnNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKENvZGVCbG9jayogbmV3Q29kZUJsb2Nr
LCBKU1N0YWNrKiBzdGFjaywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHNpemVfdCByZWdpc3Rlck9m
ZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQotewotICAgIC8vIFRoaXMgZW5z
dXJlcyBlbm91Z2ggc3BhY2UgZm9yIHRoZSB3b3JzdCBjYXNlIHNjZW5hcmlvIG9mIHplcm8gYXJn
dW1lbnRzIHBhc3NlZCBieSB0aGUgY2FsbGVyLgotICAgIGlmICghc3RhY2stPmdyb3coY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lzdGVyT2Zmc2V0ICsgbmV3Q29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCkgKyBuZXdDb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPj0gbmV3Q29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHsKLSAgICAgICAgUmVnaXN0ZXIqIG5ld0NhbGxGcmFt
ZSA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldDsKLSAgICAgICAgcmV0
dXJuIENhbGxGcmFtZTo6Y3JlYXRlKG5ld0NhbGxGcmFtZSk7Ci0gICAgfQotCi0gICAgLy8gVG9v
IGZldyBhcmd1bWVudHMgLS0gY29weSBhcmd1bWVudHMsIHRoZW4gZmlsbCBpbiBtaXNzaW5nIGFy
Z3VtZW50cyB3aXRoIHVuZGVmaW5lZC4KLSAgICBzaXplX3QgZGVsdGEgPSBuZXdDb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSAtIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwotICAgIENhbGxG
cmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3Rl
cnMoKSArIHJlZ2lzdGVyT2Zmc2V0ICsgZGVsdGEpOwotCi0gICAgUmVnaXN0ZXIqIGRzdCA9ICZu
ZXdDYWxsRnJhbWUtPnVuY2hlY2tlZFIoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSk7
Ci0gICAgUmVnaXN0ZXIqIGVuZCA9IGRzdCAtIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwot
ICAgIGZvciAoIDsgZHN0ICE9IGVuZDsgLS1kc3QpCi0gICAgICAgICpkc3QgPSAqKGRzdCAtIGRl
bHRhKTsKLQotICAgIGVuZCAtPSBkZWx0YTsKLSAgICBmb3IgKCA7IGRzdCAhPSBlbmQ7IC0tZHN0
KQotICAgICAgICAqZHN0ID0ganNVbmRlZmluZWQoKTsKLQotICAgIHJldHVybiBuZXdDYWxsRnJh
bWU7Ci19Ci0KIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBpZiAo
IWNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKQpAQCAtMTYzLDcgKzEzNyw3IEBAIEpTVmFsdWUg
ZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxl
ckZyYW1lLT50aGlzVmFsdWUoKTsKICAgICBBU1NFUlQoaXNWYWxpZFRoaXNPYmplY3QodGhpc1Zh
bHVlLCBjYWxsRnJhbWUpKTsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKS5pbnRlcnByZXRlcjsKLSAgICByZXR1cm4gaW50ZXJwcmV0ZXItPmV4
ZWN1dGUoZXZhbCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUsIGNhbGxlclNjb3BlQ2hhaW4sIGNhbGxG
cmFtZS0+cmVnaXN0ZXJzKCkgLSBpbnRlcnByZXRlci0+c3RhY2soKS5iZWdpbigpICsgMSArIEpT
U3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUpOworICAgIHJldHVybiBpbnRlcnByZXRlci0+ZXhl
Y3V0ZShldmFsLCBjYWxsRnJhbWUsIHRoaXNWYWx1ZSwgY2FsbGVyU2NvcGVDaGFpbik7CiB9CiAK
IENhbGxGcmFtZSogbG9hZFZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU3RhY2sqIHN0
YWNrLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSBhcmd1bWVudHMsIGludCBmaXJzdEZyZWVS
ZWdpc3RlcikKQEAgLTI0NCw5ICsyMTgsMTEgQEAgQ2FsbEZyYW1lKiBsb2FkVmFyYXJncyhDYWxs
RnJhbWUqIGNhbGxGcgogICAgIHJldHVybiBuZXdDYWxsRnJhbWU7CiB9CiAKLUludGVycHJldGVy
OjpJbnRlcnByZXRlcigpCitJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQogICAgIDogbV9zYW1wbGVFbnRyeURlcHRoKDApCiAgICAgLCBtX3JlZW50cnlE
ZXB0aCgwKQorICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX3N0YWNrKGds
b2JhbERhdGEpCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICwgbV9pbml0aWFsaXplZChmYWxz
ZSkKICNlbmRpZgpAQCAtNjkyLDI2ICs2NjgsMTMgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZv
KiBJbnRlcnByZXRlcjo6dAogICAgICAgICBpZiAoIXVud2luZENhbGxGcmFtZShjYWxsRnJhbWUs
IGV4Y2VwdGlvblZhbHVlLCBieXRlY29kZU9mZnNldCwgY29kZUJsb2NrKSkgewogICAgICAgICAg
ICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJs
ZWRQcm9maWxlcigpKQogICAgICAgICAgICAgICAgIHByb2ZpbGVyLT5leGNlcHRpb25VbndpbmQo
Y2FsbEZyYW1lKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLnRvcENhbGxG
cmFtZSA9IGNhbGxGcmFtZTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAg
fQotICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLnRvcENhbGxGcmFtZSA9IGNhbGxGcmFtZTsK
IAogICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5l
bmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXItPmV4Y2VwdGlvblVud2luZChjYWxs
RnJhbWUpOwogCi0gICAgLy8gU2hyaW5rIHRoZSBKUyBzdGFjaywgaW4gY2FzZSBzdGFjayBvdmVy
ZmxvdyBtYWRlIGl0IGh1Z2UuCi0gICAgUmVnaXN0ZXIqIGhpZ2hXYXRlck1hcmsgPSAwOwotICAg
IGZvciAoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZTsgY2FsbGVyRnJhbWU7IGNh
bGxlckZyYW1lID0gY2FsbGVyRnJhbWUtPmNhbGxlckZyYW1lKCktPnJlbW92ZUhvc3RDYWxsRnJh
bWVGbGFnKCkpIHsKLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+
Y29kZUJsb2NrKCk7Ci0gICAgICAgIGlmICghY29kZUJsb2NrKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIFJlZ2lzdGVyKiBjYWxsZXJIaWdoV2F0ZXJNYXJrID0gY2FsbGVyRnJhbWUt
PnJlZ2lzdGVycygpICsgY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKLSAgICAgICAg
aGlnaFdhdGVyTWFyayA9IG1heChoaWdoV2F0ZXJNYXJrLCBjYWxsZXJIaWdoV2F0ZXJNYXJrKTsK
LSAgICB9Ci0gICAgbV9zdGFjay5zaHJpbmsoaGlnaFdhdGVyTWFyayk7Ci0KICAgICAvLyBVbndp
bmQgdGhlIHNjb3BlIGNoYWluIHdpdGhpbiB0aGUgZXhjZXB0aW9uIGhhbmRsZXIncyBjYWxsIGZy
YW1lLgogICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwogICAgIGludCBz
Y29wZURlbHRhID0gMDsKQEAgLTc2NCw3ICs3MjcsOCBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpl
eGVjdXRlKFByb2dyYW1FeGVjCiAgICAgaWYgKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmlzQ29s
bGVjdG9yQnVzeSgpKQogICAgICAgICBDUkFTSCgpOwogCi0gICAgaWYgKG1fcmVlbnRyeURlcHRo
ID49IE1heFNtYWxsVGhyZWFkUmVlbnRyeURlcHRoICYmIG1fcmVlbnRyeURlcHRoID49IGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLm1heFJlZW50cnlEZXB0aCkKKyAgICBJbnRlcnByZXRlcjo6TmF0
aXZlU3RhY2tDaGVja2VyIGNoZWNrZXI7CisgICAgaWYgKGNoZWNrZXIuaXNJblJlZFpvbmUoKSB8
fCAobV9yZWVudHJ5RGVwdGggPj0gTWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGggJiYgbV9yZWVu
dHJ5RGVwdGggPj0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkubWF4UmVlbnRyeURlcHRoKSkKICAg
ICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZy
YW1lKSk7CiAKICAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGUgInByb2dyYW0iIGlzIGFjdHVhbGx5
IGp1c3QgYSBKU09OIG9iamVjdC4gSWYgc28sCkBAIC04NzksMjAgKzg0MywxNyBAQCBmYWlsZWRK
U09OUDoKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dFcnJvcihjYWxsRnJhbWUs
IGVycm9yKSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAmcHJvZ3JhbS0+Z2VuZXJhdGVk
Qnl0ZWNvZGUoKTsKIAotICAgIC8vIFJlc2VydmUgc3RhY2sgc3BhY2UgZm9yIHRoaXMgaW52b2Nh
dGlvbjoKLSAgICBSZWdpc3Rlciogb2xkRW5kID0gbV9zdGFjay5lbmQoKTsKLSAgICBSZWdpc3Rl
ciogbmV3RW5kID0gb2xkRW5kICsgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgKyBKU1N0YWNr
OjpDYWxsRnJhbWVIZWFkZXJTaXplICsgY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsK
LSAgICBpZiAoIW1fc3RhY2suZ3JvdyhuZXdFbmQpKQotICAgICAgICByZXR1cm4gY2hlY2tlZFJl
dHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpKTsKLQogICAgIC8vIFB1c2gg
dGhlIGNhbGwgZnJhbWUgZm9yIHRoaXMgaW52b2NhdGlvbjoKLSAgICBDYWxsRnJhbWUqIG5ld0Nh
bGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKG9sZEVuZCArIGNvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSk7CisgICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCk7CiAgICAgQVNTRVJUKGNvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpID09IDEpOyAvLyAxIHBhcmFtZXRlciBmb3IgJ3RoaXMnLgot
ICAgIG5ld0NhbGxGcmFtZS0+aW5pdChjb2RlQmxvY2ssIDAsIHNjb3BlLCBDYWxsRnJhbWU6Om5v
Q2FsbGVyKCksIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCAwKTsKKyAgICBDYWxsRnJhbWUq
IG5ld0NhbGxGcmFtZSA9IG1fc3RhY2sucHVzaEZyYW1lKGNhbGxGcmFtZSwgY29kZUJsb2NrLCBz
Y29wZSwgMSwgMCk7CisgICAgaWYgKFVOTElLRUxZKCFuZXdDYWxsRnJhbWUpKQorICAgICAgICBy
ZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpKTsK
KworICAgIC8vIFNldCB0aGUgYXJndW1lbnRzIGZvciB0aGUgY2FsbGVlOgogICAgIG5ld0NhbGxG
cmFtZS0+c2V0VGhpc1ZhbHVlKHRoaXNPYmopOwotICAgIFRvcENhbGxGcmFtZVNldHRlciB0b3BD
YWxsRnJhbWUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG5ld0NhbGxGcmFtZSk7CiAKLSAgICBp
ZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZW5hYmxlZFBy
b2ZpbGVyKCkpCisgICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9IGdsb2JhbERhdGEuZW5hYmxl
ZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT53aWxsRXhlY3V0ZShjYWxsRnJhbWUsIHBy
b2dyYW0tPnNvdXJjZVVSTCgpLCBwcm9ncmFtLT5saW5lTm8oKSk7CiAKICAgICAvLyBFeGVjdXRl
IHRoZSBjb2RlOgpAQCAtOTEzLDcgKzg3NCw3IEBAIGZhaWxlZEpTT05QOgogICAgIGlmIChQcm9m
aWxlciogcHJvZmlsZXIgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIo
KSkKICAgICAgICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBwcm9ncmFtLT5zb3Vy
Y2VVUkwoKSwgcHJvZ3JhbS0+bGluZU5vKCkpOwogCi0gICAgbV9zdGFjay5zaHJpbmsob2xkRW5k
KTsKKyAgICBtX3N0YWNrLnBvcEZyYW1lKG5ld0NhbGxGcmFtZSk7CiAKICAgICByZXR1cm4gY2hl
Y2tlZFJldHVybihyZXN1bHQpOwogfQpAQCAtOTI2LDg5ICs4ODcsNjggQEAgSlNWYWx1ZSBJbnRl
cnByZXRlcjo6ZXhlY3V0ZUNhbGwoQ2FsbEZyYQogICAgIGlmIChjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKS5pc0NvbGxlY3RvckJ1c3koKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAg
aWYgKG1fcmVlbnRyeURlcHRoID49IE1heFNtYWxsVGhyZWFkUmVlbnRyeURlcHRoICYmIG1fcmVl
bnRyeURlcHRoID49IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLm1heFJlZW50cnlEZXB0aCkKKyAg
ICBJbnRlcnByZXRlcjo6TmF0aXZlU3RhY2tDaGVja2VyIGNoZWNrZXI7CisgICAgaWYgKGNoZWNr
ZXIuaXNJblJlZFpvbmUoKSB8fCAobV9yZWVudHJ5RGVwdGggPj0gTWF4U21hbGxUaHJlYWRSZWVu
dHJ5RGVwdGggJiYgbV9yZWVudHJ5RGVwdGggPj0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkubWF4
UmVlbnRyeURlcHRoKSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092
ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7CiAKLSAgICBSZWdpc3Rlciogb2xkRW5kID0gbV9zdGFj
ay5lbmQoKTsKLSAgICBBU1NFUlQoY2FsbEZyYW1lLT5mcmFtZUV4dGVudCgpIDw9IG9sZEVuZCB8
fCBjYWxsRnJhbWUgPT0gY2FsbEZyYW1lLT5zY29wZSgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpKTsKLSAgICBpbnQgYXJnQ291bnQgPSAxICsgYXJncy5zaXplKCk7IC8vIGltcGxpY2l0
ICJ0aGlzIiBwYXJhbWV0ZXIKLSAgICBzaXplX3QgcmVnaXN0ZXJPZmZzZXQgPSBhcmdDb3VudCAr
IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgYm9vbCBpc0pTQ2FsbCA9IChjYWxs
VHlwZSA9PSBDYWxsVHlwZUpTKTsKKyAgICBKU1Njb3BlKiBzY29wZTsKKyAgICBDb2RlQmxvY2sq
IG5ld0NvZGVCbG9jazsKKyAgICBzaXplX3QgYXJnc0NvdW50ID0gMSArIGFyZ3Muc2l6ZSgpOyAv
LyBpbXBsaWNpdCAidGhpcyIgcGFyYW1ldGVyCiAKLSAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFt
ZSA9IENhbGxGcmFtZTo6Y3JlYXRlKG9sZEVuZCArIHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICBpZiAo
IW1fc3RhY2suZ3JvdyhuZXdDYWxsRnJhbWUtPnJlZ2lzdGVycygpKSkKLSAgICAgICAgcmV0dXJu
IGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7Ci0KLSAg
ICBuZXdDYWxsRnJhbWUtPnNldFRoaXNWYWx1ZSh0aGlzVmFsdWUpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkKLSAgICAgICAgbmV3Q2FsbEZyYW1lLT5zZXRB
cmd1bWVudChpLCBhcmdzLmF0KGkpKTsKLQotICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpT
KSB7Ci0gICAgICAgIEpTU2NvcGUqIGNhbGxEYXRhU2NvcGUgPSBjYWxsRGF0YS5qcy5zY29wZTsK
LQotICAgICAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoKmNh
bGxEYXRhU2NvcGUtPmdsb2JhbERhdGEoKSwgY2FsbERhdGFTY29wZS0+Z2xvYmFsT2JqZWN0KCkp
OworICAgIGlmIChpc0pTQ2FsbCkKKyAgICAgICAgc2NvcGUgPSBjYWxsRGF0YS5qcy5zY29wZTsK
KyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlSG9zdCk7Cisg
ICAgICAgIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOworICAgIH0KKyAgICBEeW5hbWljR2xv
YmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoKnNjb3BlLT5nbG9iYWxEYXRhKCksIHNj
b3BlLT5nbG9iYWxPYmplY3QoKSk7CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVFcnJvciA9
IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvckNhbGwoY2FsbEZyYW1l
LCBjYWxsRGF0YVNjb3BlKTsKKyAgICBpZiAoaXNKU0NhbGwpIHsKKyAgICAgICAgLy8gQ29tcGls
ZSB0aGUgY2FsbGVlOgorICAgICAgICBKU09iamVjdCogY29tcGlsZUVycm9yID0gY2FsbERhdGEu
anMuZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yQ2FsbChjYWxsRnJhbWUsIHNjb3BlKTsK
ICAgICAgICAgaWYgKFVOTElLRUxZKCEhY29tcGlsZUVycm9yKSkgewotICAgICAgICAgICAgbV9z
dGFjay5zaHJpbmsob2xkRW5kKTsKICAgICAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRo
cm93RXJyb3IoY2FsbEZyYW1lLCBjb21waWxlRXJyb3IpKTsKICAgICAgICAgfQorICAgICAgICBu
ZXdDb2RlQmxvY2sgPSAmY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRC
eXRlY29kZUZvckNhbGwoKTsKKyAgICAgICAgQVNTRVJUKCEhbmV3Q29kZUJsb2NrKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgbmV3Q29kZUJsb2NrID0gMDsKIAotICAgICAgICBDb2RlQmxvY2sqIG5l
d0NvZGVCbG9jayA9ICZjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEJ5
dGVjb2RlRm9yQ2FsbCgpOwotICAgICAgICBuZXdDYWxsRnJhbWUgPSBzbGlkZVJlZ2lzdGVyV2lu
ZG93Rm9yQ2FsbChuZXdDb2RlQmxvY2ssICZtX3N0YWNrLCBuZXdDYWxsRnJhbWUsIDAsIGFyZ0Nv
dW50KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFuZXdDYWxsRnJhbWUpKSB7Ci0gICAgICAgICAg
ICBtX3N0YWNrLnNocmluayhvbGRFbmQpOwotICAgICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1
cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBuZXdDYWxsRnJhbWUtPmluaXQobmV3Q29kZUJsb2NrLCAwLCBjYWxsRGF0YVNjb3BlLCBj
YWxsRnJhbWUtPmFkZEhvc3RDYWxsRnJhbWVGbGFnKCksIGFyZ0NvdW50LCBmdW5jdGlvbik7Cisg
ICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBtX3N0YWNrLnB1c2hGcmFtZShjYWxsRnJhbWUs
IG5ld0NvZGVCbG9jaywgc2NvcGUsIGFyZ3NDb3VudCwgZnVuY3Rpb24pOworICAgIGlmIChVTkxJ
S0VMWSghbmV3Q2FsbEZyYW1lKSkKKyAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dT
dGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7CiAKLSAgICAgICAgVG9wQ2FsbEZyYW1lU2V0
dGVyIHRvcENhbGxGcmFtZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbmV3Q2FsbEZyYW1lKTsK
KyAgICAvLyBTZXQgdGhlIGFyZ3VtZW50cyBmb3IgdGhlIGNhbGxlZToKKyAgICBuZXdDYWxsRnJh
bWUtPnNldFRoaXNWYWx1ZSh0aGlzVmFsdWUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YXJncy5zaXplKCk7ICsraSkKKyAgICAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCBh
cmdzLmF0KGkpKTsKIAotICAgICAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCkuZW5hYmxlZFByb2ZpbGVyKCkpCi0gICAgICAgICAgICBwcm9maWxlci0+
d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7CisgICAgaWYgKFByb2ZpbGVyKiBwcm9m
aWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQorICAgICAg
ICBwcm9maWxlci0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7CiAKLSAgICAgICAg
SlNWYWx1ZSByZXN1bHQ7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFNhbXBsaW5nVG9vbDo6Q2Fs
bFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxlci5nZXQoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQ7
CisgICAgeworICAgICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2FsbFJlY29yZChtX3Nh
bXBsZXIuZ2V0KCksICFpc0pTQ2FsbCk7CisgICAgICAgIG1fcmVlbnRyeURlcHRoKys7CiAKLSAg
ICAgICAgICAgIG1fcmVlbnRyeURlcHRoKys7ICAKKyAgICAgICAgLy8gRXhlY3V0ZSB0aGUgY29k
ZToKKyAgICAgICAgaWYgKGlzSlNDYWxsKSB7CiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAg
ICAgICAgICAgIHJlc3VsdCA9IExMSW50OjpDTG9vcDo6ZXhlY3V0ZShuZXdDYWxsRnJhbWUsIGxs
aW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKTsKICNlbGlmIEVOQUJMRShKSVQpCi0gICAg
ICAgICAgICByZXN1bHQgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRl
ZEpJVENvZGVGb3JDYWxsKCkuZXhlY3V0ZSgmbV9zdGFjaywgbmV3Q2FsbEZyYW1lLCBjYWxsRGF0
YVNjb3BlLT5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgcmVzdWx0ID0gY2FsbERhdGEuanMu
ZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmV4ZWN1dGUoJm1f
c3RhY2ssIG5ld0NhbGxGcmFtZSwgc2NvcGUtPmdsb2JhbERhdGEoKSk7CiAjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBKU1ZhbHVlOjpk
ZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKG5ld0NhbGxGcmFtZSkpOwogCi0gICAgICAg
ICAgICBtX3JlZW50cnlEZXB0aC0tOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFByb2ZpbGVy
KiBwcm9maWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQot
ICAgICAgICAgICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7Ci0K
LSAgICAgICAgbV9zdGFjay5zaHJpbmsob2xkRW5kKTsKLSAgICAgICAgcmV0dXJuIGNoZWNrZWRS
ZXR1cm4ocmVzdWx0KTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVI
b3N0KTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKLSAgICBuZXdD
YWxsRnJhbWUtPmluaXQoMCwgMCwgc2NvcGUsIGNhbGxGcmFtZS0+YWRkSG9zdENhbGxGcmFtZUZs
YWcoKSwgYXJnQ291bnQsIGZ1bmN0aW9uKTsKLQotICAgIFRvcENhbGxGcmFtZVNldHRlciB0b3BD
YWxsRnJhbWUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG5ld0NhbGxGcmFtZSk7Ci0KLSAgICBE
eW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoKnNjb3BlLT5nbG9iYWxE
YXRhKCksIHNjb3BlLT5nbG9iYWxPYmplY3QoKSk7Ci0KLSAgICBpZiAoUHJvZmlsZXIqIHByb2Zp
bGVyID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZW5hYmxlZFByb2ZpbGVyKCkpCi0gICAgICAg
IHByb2ZpbGVyLT53aWxsRXhlY3V0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsKLQotICAgIEpTVmFs
dWUgcmVzdWx0OwotICAgIHsKLSAgICAgICAgU2FtcGxpbmdUb29sOjpIb3N0Q2FsbFJlY29yZCBj
YWxsUmVjb3JkKG1fc2FtcGxlci5nZXQoKSk7Ci0gICAgICAgIHJlc3VsdCA9IEpTVmFsdWU6OmRl
Y29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24obmV3Q2FsbEZyYW1lKSk7CisgICAgICAgIG1f
cmVlbnRyeURlcHRoLS07CiAgICAgfQogCiAgICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9IGNh
bGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9maWxl
ci0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsKIAotICAgIG1fc3RhY2suc2hyaW5r
KG9sZEVuZCk7CisgICAgbV9zdGFjay5wb3BGcmFtZShuZXdDYWxsRnJhbWUpOwogICAgIHJldHVy
biBjaGVja2VkUmV0dXJuKHJlc3VsdCk7CiB9CiAKQEAgLTEwMjEsOTAgKzk2MSw3MSBAQCBKU09i
amVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoCiAgICAgaWYgKGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAgICByZXR1cm4gY2hlY2tlZFJl
dHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpKTsKIAotICAgIGlmIChtX3Jl
ZW50cnlEZXB0aCA+PSBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCAmJiBtX3JlZW50cnlEZXB0
aCA+PSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5tYXhSZWVudHJ5RGVwdGgpCisgICAgSW50ZXJw
cmV0ZXI6Ok5hdGl2ZVN0YWNrQ2hlY2tlciBjaGVja2VyOworICAgIGlmIChjaGVja2VyLmlzSW5S
ZWRab25lKCkgfHwgKG1fcmVlbnRyeURlcHRoID49IE1heFNtYWxsVGhyZWFkUmVlbnRyeURlcHRo
ICYmIG1fcmVlbnRyeURlcHRoID49IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLm1heFJlZW50cnlE
ZXB0aCkpCiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vy
cm9yKGNhbGxGcmFtZSkpOwogCi0gICAgUmVnaXN0ZXIqIG9sZEVuZCA9IG1fc3RhY2suZW5kKCk7
Ci0gICAgaW50IGFyZ0NvdW50ID0gMSArIGFyZ3Muc2l6ZSgpOyAvLyBpbXBsaWNpdCAidGhpcyIg
cGFyYW1ldGVyCi0gICAgc2l6ZV90IHJlZ2lzdGVyT2Zmc2V0ID0gYXJnQ291bnQgKyBKU1N0YWNr
OjpDYWxsRnJhbWVIZWFkZXJTaXplOwotCi0gICAgaWYgKCFtX3N0YWNrLmdyb3cob2xkRW5kICsg
cmVnaXN0ZXJPZmZzZXQpKQotICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNr
T3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpKTsKLQotICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1l
ID0gQ2FsbEZyYW1lOjpjcmVhdGUob2xkRW5kICsgcmVnaXN0ZXJPZmZzZXQpOwotICAgIG5ld0Nh
bGxGcmFtZS0+c2V0VGhpc1ZhbHVlKGpzVW5kZWZpbmVkKCkpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkKLSAgICAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1
bWVudChpLCBhcmdzLmF0KGkpKTsKKyAgICBib29sIGlzSlNDb25zdHJ1Y3QgPSAoY29uc3RydWN0
VHlwZSA9PSBDb25zdHJ1Y3RUeXBlSlMpOworICAgIEpTU2NvcGUqIHNjb3BlOworICAgIENvZGVC
bG9jayogbmV3Q29kZUJsb2NrOworICAgIHNpemVfdCBhcmdzQ291bnQgPSAxICsgYXJncy5zaXpl
KCk7IC8vIGltcGxpY2l0ICJ0aGlzIiBwYXJhbWV0ZXIKIAotICAgIGlmIChjb25zdHJ1Y3RUeXBl
ID09IENvbnN0cnVjdFR5cGVKUykgewotICAgICAgICBKU1Njb3BlKiBjb25zdHJ1Y3REYXRhU2Nv
cGUgPSBjb25zdHJ1Y3REYXRhLmpzLnNjb3BlOworICAgIGlmIChpc0pTQ29uc3RydWN0KQorICAg
ICAgICBzY29wZSA9IGNvbnN0cnVjdERhdGEuanMuc2NvcGU7CisgICAgZWxzZSB7CisgICAgICAg
IEFTU0VSVChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVIb3N0KTsKKyAgICAgICAgc2Nv
cGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7CisgICAgfQogCi0gICAgICAgIER5bmFtaWNHbG9iYWxP
YmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZSgqY29uc3RydWN0RGF0YVNjb3BlLT5nbG9iYWxE
YXRhKCksIGNvbnN0cnVjdERhdGFTY29wZS0+Z2xvYmFsT2JqZWN0KCkpOworICAgIER5bmFtaWNH
bG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZSgqc2NvcGUtPmdsb2JhbERhdGEoKSwg
c2NvcGUtPmdsb2JhbE9iamVjdCgpKTsKIAotICAgICAgICBKU09iamVjdCogY29tcGlsZUVycm9y
ID0gY29uc3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3JDb25zdHJ1
Y3QoY2FsbEZyYW1lLCBjb25zdHJ1Y3REYXRhU2NvcGUpOworICAgIGlmIChpc0pTQ29uc3RydWN0
KSB7CisgICAgICAgIC8vIENvbXBpbGUgdGhlIGNhbGxlZToKKyAgICAgICAgSlNPYmplY3QqIGNv
bXBpbGVFcnJvciA9IGNvbnN0cnVjdERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxl
Rm9yQ29uc3RydWN0KGNhbGxGcmFtZSwgc2NvcGUpOwogICAgICAgICBpZiAoVU5MSUtFTFkoISFj
b21waWxlRXJyb3IpKSB7Ci0gICAgICAgICAgICBtX3N0YWNrLnNocmluayhvbGRFbmQpOwogICAg
ICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dFcnJvcihjYWxsRnJhbWUsIGNvbXBp
bGVFcnJvcikpOwogICAgICAgICB9CisgICAgICAgIG5ld0NvZGVCbG9jayA9ICZjb25zdHJ1Y3RE
YXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDb25zdHJ1Y3Qo
KTsKKyAgICAgICAgQVNTRVJUKCEhbmV3Q29kZUJsb2NrKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
bmV3Q29kZUJsb2NrID0gMDsKIAotICAgICAgICBDb2RlQmxvY2sqIG5ld0NvZGVCbG9jayA9ICZj
b25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JD
b25zdHJ1Y3QoKTsKLSAgICAgICAgbmV3Q2FsbEZyYW1lID0gc2xpZGVSZWdpc3RlcldpbmRvd0Zv
ckNhbGwobmV3Q29kZUJsb2NrLCAmbV9zdGFjaywgbmV3Q2FsbEZyYW1lLCAwLCBhcmdDb3VudCk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWSghbmV3Q2FsbEZyYW1lKSkgewotICAgICAgICAgICAgbV9z
dGFjay5zaHJpbmsob2xkRW5kKTsKLSAgICAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRo
cm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
bmV3Q2FsbEZyYW1lLT5pbml0KG5ld0NvZGVCbG9jaywgMCwgY29uc3RydWN0RGF0YVNjb3BlLCBj
YWxsRnJhbWUtPmFkZEhvc3RDYWxsRnJhbWVGbGFnKCksIGFyZ0NvdW50LCBjb25zdHJ1Y3Rvcik7
CisgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBtX3N0YWNrLnB1c2hGcmFtZShjYWxsRnJh
bWUsIG5ld0NvZGVCbG9jaywgc2NvcGUsIGFyZ3NDb3VudCwgY29uc3RydWN0b3IpOworICAgIGlm
IChVTkxJS0VMWSghbmV3Q2FsbEZyYW1lKSkKKyAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4o
dGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7CiAKLSAgICAgICAgVG9wQ2FsbEZy
YW1lU2V0dGVyIHRvcENhbGxGcmFtZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbmV3Q2FsbEZy
YW1lKTsKKyAgICAvLyBTZXQgdGhlIGFyZ3VtZW50cyBmb3IgdGhlIGNhbGxlZToKKyAgICBuZXdD
YWxsRnJhbWUtPnNldFRoaXNWYWx1ZShqc1VuZGVmaW5lZCgpKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIG5ld0NhbGxGcmFtZS0+c2V0QXJn
dW1lbnQoaSwgYXJncy5hdChpKSk7CiAKLSAgICAgICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9
IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQotICAgICAgICAgICAg
cHJvZmlsZXItPndpbGxFeGVjdXRlKGNhbGxGcmFtZSwgY29uc3RydWN0b3IpOworICAgIGlmIChQ
cm9maWxlciogcHJvZmlsZXIgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmls
ZXIoKSkKKyAgICAgICAgcHJvZmlsZXItPndpbGxFeGVjdXRlKGNhbGxGcmFtZSwgY29uc3RydWN0
b3IpOwogCi0gICAgICAgIEpTVmFsdWUgcmVzdWx0OwotICAgICAgICB7Ci0gICAgICAgICAgICBT
YW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIuZ2V0KCkpOworICAg
IEpTVmFsdWUgcmVzdWx0OworICAgIHsKKyAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3Jk
IGNhbGxSZWNvcmQobV9zYW1wbGVyLmdldCgpLCAhaXNKU0NvbnN0cnVjdCk7CisgICAgICAgIG1f
cmVlbnRyeURlcHRoKys7CiAKLSAgICAgICAgICAgIG1fcmVlbnRyeURlcHRoKys7ICAKKyAgICAg
ICAgLy8gRXhlY3V0ZSB0aGUgY29kZS4KKyAgICAgICAgaWYgKGlzSlNDb25zdHJ1Y3QpIHsKICNp
ZiBFTkFCTEUoTExJTlRfQ19MT09QKQogICAgICAgICAgICAgcmVzdWx0ID0gTExJbnQ6OkNMb29w
OjpleGVjdXRlKG5ld0NhbGxGcmFtZSwgbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9s
b2d1ZSk7CiAjZWxpZiBFTkFCTEUoSklUKQotICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0
RGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3Qo
KS5leGVjdXRlKCZtX3N0YWNrLCBuZXdDYWxsRnJhbWUsIGNvbnN0cnVjdERhdGFTY29wZS0+Z2xv
YmFsRGF0YSgpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdERhdGEuanMuZnVuY3Rp
b25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCkuZXhlY3V0ZSgmbV9z
dGFjaywgbmV3Q2FsbEZyYW1lLCBzY29wZS0+Z2xvYmFsRGF0YSgpKTsKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQotICAgICAgICAgICAgbV9yZWVudHJ5RGVwdGgtLTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZShjb25zdHJ1Y3REYXRhLm5hdGl2
ZS5mdW5jdGlvbihuZXdDYWxsRnJhbWUpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChQcm9m
aWxlciogcHJvZmlsZXIgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIo
KSkKLSAgICAgICAgICAgIHByb2ZpbGVyLT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwgY29uc3RydWN0
b3IpOwotCi0gICAgICAgIG1fc3RhY2suc2hyaW5rKG9sZEVuZCk7Ci0gICAgICAgIGlmIChjYWxs
RnJhbWUtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIEFT
U0VSVChyZXN1bHQuaXNPYmplY3QoKSk7Ci0gICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKGFz
T2JqZWN0KHJlc3VsdCkpOwotICAgIH0KLQotICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlID09IENv
bnN0cnVjdFR5cGVIb3N0KTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUo
KTsKLSAgICBuZXdDYWxsRnJhbWUtPmluaXQoMCwgMCwgc2NvcGUsIGNhbGxGcmFtZS0+YWRkSG9z
dENhbGxGcmFtZUZsYWcoKSwgYXJnQ291bnQsIGNvbnN0cnVjdG9yKTsKLQotICAgIFRvcENhbGxG
cmFtZVNldHRlciB0b3BDYWxsRnJhbWUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG5ld0NhbGxG
cmFtZSk7Ci0KLSAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUo
KnNjb3BlLT5nbG9iYWxEYXRhKCksIHNjb3BlLT5nbG9iYWxPYmplY3QoKSk7Ci0KLSAgICBpZiAo
UHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZW5hYmxlZFByb2Zp
bGVyKCkpCi0gICAgICAgIHByb2ZpbGVyLT53aWxsRXhlY3V0ZShjYWxsRnJhbWUsIGNvbnN0cnVj
dG9yKTsKLQotICAgIEpTVmFsdWUgcmVzdWx0OwotICAgIHsKLSAgICAgICAgU2FtcGxpbmdUb29s
OjpIb3N0Q2FsbFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxlci5nZXQoKSk7Ci0gICAgICAgIHJl
c3VsdCA9IEpTVmFsdWU6OmRlY29kZShjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihuZXdD
YWxsRnJhbWUpKTsKKyAgICAgICAgbV9yZWVudHJ5RGVwdGgtLTsKICAgICB9CiAKICAgICBpZiAo
UHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZW5hYmxlZFByb2Zp
bGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwgY29uc3RydWN0
b3IpOwogCi0gICAgbV9zdGFjay5zaHJpbmsob2xkRW5kKTsKKyAgICBtX3N0YWNrLnBvcEZyYW1l
KG5ld0NhbGxGcmFtZSk7CisKICAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgQVNTRVJUKHJlc3VsdC5pc09iamVjdCgpKTsKQEAgLTExMTgs
MzcgKzEwMzksMzUgQEAgQ2FsbEZyYW1lQ2xvc3VyZSBJbnRlcnByZXRlcjo6cHJlcGFyZUZvcgog
ICAgIGlmIChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSkKICAgICAg
ICAgcmV0dXJuIENhbGxGcmFtZUNsb3N1cmUoKTsKIAotICAgIGlmIChtX3JlZW50cnlEZXB0aCA+
PSBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCAmJiBtX3JlZW50cnlEZXB0aCA+PSBjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKS5tYXhSZWVudHJ5RGVwdGgpIHsKLSAgICAgICAgdGhyb3dTdGFja092
ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKLSAgICAgICAgcmV0dXJuIENhbGxGcmFtZUNsb3N1cmUo
KTsKLSAgICB9Ci0KLSAgICBSZWdpc3Rlciogb2xkRW5kID0gbV9zdGFjay5lbmQoKTsKLSAgICBz
aXplX3QgcmVnaXN0ZXJPZmZzZXQgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIEpTU3Rh
Y2s6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0KLSAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9
IENhbGxGcmFtZTo6Y3JlYXRlKG9sZEVuZCArIHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICBpZiAoIW1f
c3RhY2suZ3JvdyhuZXdDYWxsRnJhbWUtPnJlZ2lzdGVycygpKSkgeworICAgIEludGVycHJldGVy
OjpOYXRpdmVTdGFja0NoZWNrZXIgY2hlY2tlcjsKKyAgICBpZiAoY2hlY2tlci5pc0luUmVkWm9u
ZSgpIHx8IChtX3JlZW50cnlEZXB0aCA+PSBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCAmJiBt
X3JlZW50cnlEZXB0aCA+PSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5tYXhSZWVudHJ5RGVwdGgp
KSB7CiAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CiAgICAgICAg
IHJldHVybiBDYWxsRnJhbWVDbG9zdXJlKCk7CiAgICAgfQogCisgICAgLy8gQ29tcGlsZSB0aGUg
Y2FsbGVlOgogICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGls
ZUZvckNhbGwoY2FsbEZyYW1lLCBzY29wZSk7CiAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgIHRo
cm93RXJyb3IoY2FsbEZyYW1lLCBlcnJvcik7Ci0gICAgICAgIG1fc3RhY2suc2hyaW5rKG9sZEVu
ZCk7CiAgICAgICAgIHJldHVybiBDYWxsRnJhbWVDbG9zdXJlKCk7CiAgICAgfQotICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gJmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVG
b3JDYWxsKCk7CisgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sgPSAmZnVuY3Rpb25FeGVjdXRh
YmxlLT5nZW5lcmF0ZWRCeXRlY29kZUZvckNhbGwoKTsKKworICAgIHNpemVfdCBhcmdzQ291bnQg
PSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKworICAgIENhbGxGcmFtZSogbmV3Q2FsbEZy
YW1lID0gbV9zdGFjay5wdXNoRnJhbWUoY2FsbEZyYW1lLCBuZXdDb2RlQmxvY2ssIHNjb3BlLCBh
cmdzQ291bnQsIGZ1bmN0aW9uKTsgIAorICAgIGlmIChVTkxJS0VMWSghbmV3Q2FsbEZyYW1lKSkg
eworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOworICAgICAgICBy
ZXR1cm4gQ2FsbEZyYW1lQ2xvc3VyZSgpOworICAgIH0KIAotICAgIG5ld0NhbGxGcmFtZSA9IHNs
aWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKGNvZGVCbG9jaywgJm1fc3RhY2ssIG5ld0NhbGxGcmFt
ZSwgMCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIGlmIChVTkxJS0VMWSghbmV3
Q2FsbEZyYW1lKSkgewogICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUp
OwotICAgICAgICBtX3N0YWNrLnNocmluayhvbGRFbmQpOwogICAgICAgICByZXR1cm4gQ2FsbEZy
YW1lQ2xvc3VyZSgpOwogICAgIH0KLSAgICBuZXdDYWxsRnJhbWUtPmluaXQoY29kZUJsb2NrLCAw
LCBzY29wZSwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1lRmxhZygpLCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgZnVuY3Rpb24pOyAgCi0gICAgc2NvcGUtPmdsb2JhbERhdGEoKS0+dG9w
Q2FsbEZyYW1lID0gbmV3Q2FsbEZyYW1lOwotICAgIENhbGxGcmFtZUNsb3N1cmUgcmVzdWx0ID0g
eyBjYWxsRnJhbWUsIG5ld0NhbGxGcmFtZSwgZnVuY3Rpb24sIGZ1bmN0aW9uRXhlY3V0YWJsZSwg
c2NvcGUtPmdsb2JhbERhdGEoKSwgb2xkRW5kLCBzY29wZSwgY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCksIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIH07CisKKyAgICAvLyBSZXR1cm4gdGhl
IHN1Y2Nlc3NmdWwgY2xvc3VyZToKKyAgICBDYWxsRnJhbWVDbG9zdXJlIHJlc3VsdCA9IHsgY2Fs
bEZyYW1lLCBuZXdDYWxsRnJhbWUsIGZ1bmN0aW9uLCBmdW5jdGlvbkV4ZWN1dGFibGUsIHNjb3Bl
LT5nbG9iYWxEYXRhKCksIHNjb3BlLCBuZXdDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgfTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0x
MTU5LDEyICsxMDc4LDI1IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoQ2FsbEZyYW1l
Q2wKICAgICBBU1NFUlQoIWNsb3N1cmUub2xkQ2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuaXNDb2xs
ZWN0b3JCdXN5KCkpOwogICAgIGlmIChjbG9zdXJlLm9sZENhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CisKKyAgICBtX3N0
YWNrLnZhbGlkYXRlRmVuY2UoY2xvc3VyZS5uZXdDYWxsRnJhbWUsICJCRUZPUkUiKTsKICAgICBj
bG9zdXJlLnJlc2V0Q2FsbEZyYW1lKCk7CisgICAgbV9zdGFjay52YWxpZGF0ZUZlbmNlKGNsb3N1
cmUubmV3Q2FsbEZyYW1lLCAiU1RFUCAxIik7CisKICAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVy
ID0gY2xvc3VyZS5vbGRDYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIoKSkK
ICAgICAgICAgcHJvZmlsZXItPndpbGxFeGVjdXRlKGNsb3N1cmUub2xkQ2FsbEZyYW1lLCBjbG9z
dXJlLmZ1bmN0aW9uKTsKIAorICAgIC8vIFRoZSBjb2RlIGV4ZWN1dGlvbiBiZWxvdyBtYXkgcHVz
aCBtb3JlIGZyYW1lcyBhbmQgcG9pbnQgdGhlIHRvcENhbGxGcmFtZQorICAgIC8vIHRvIHRob3Nl
IG5ld2VyIGZyYW1lcywgb3IgaXQgbWF5IHBvcCB0byB0aGUgdG9wIGZyYW1lIHRvIHRoZSBjYWxs
ZXIgb2YKKyAgICAvLyB0aGUgY3VycmVudCByZXBlYXQgZnJhbWUsIG9yIGl0IG1heSBsZWF2ZSB0
aGUgdG9wIGZyYW1lIHBvaW50aW5nIHRvIHRoZQorICAgIC8vIGN1cnJlbnQgcmVwZWF0IGZyYW1l
LgorICAgIC8vCisgICAgLy8gSGVuY2UsIHdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIHRvcENhbGxG
cmFtZSBoZXJlIG91cnNlbHZlcyBiZWZvcmUKKyAgICAvLyByZXBlYXRpbmcgdGhpcyBjYWxsIG9u
IGEgc2Vjb25kIGNhbGxiYWNrIGZ1bmN0aW9uLgorCiAgICAgVG9wQ2FsbEZyYW1lU2V0dGVyIHRv
cENhbGxGcmFtZSgqY2xvc3VyZS5nbG9iYWxEYXRhLCBjbG9zdXJlLm5ld0NhbGxGcmFtZSk7CiAK
KyAgICAvLyBFeGVjdXRlIHRoZSBjb2RlOgogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIHsKICAg
ICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVyLmdldCgp
KTsKQEAgLTExODAsMTYgKzExMTIsMTcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShD
YWxsRnJhbWVDbAogCiAgICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9IGNsb3N1cmUub2xkQ2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCkuZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVy
LT5kaWRFeGVjdXRlKGNsb3N1cmUub2xkQ2FsbEZyYW1lLCBjbG9zdXJlLmZ1bmN0aW9uKTsKKwor
ICAgIG1fc3RhY2sudmFsaWRhdGVGZW5jZShjbG9zdXJlLm5ld0NhbGxGcmFtZSwgIkFGVEVSIik7
CiAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4ocmVzdWx0KTsKIH0KIAogdm9pZCBJbnRlcnByZXRl
cjo6ZW5kUmVwZWF0Q2FsbChDYWxsRnJhbWVDbG9zdXJlJiBjbG9zdXJlKQogewotICAgIGNsb3N1
cmUuZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lID0gY2xvc3VyZS5vbGRDYWxsRnJhbWU7Ci0gICAg
bV9zdGFjay5zaHJpbmsoY2xvc3VyZS5vbGRFbmQpOworICAgIG1fc3RhY2sucG9wRnJhbWUoY2xv
c3VyZS5uZXdDYWxsRnJhbWUpOwogfQogCi1KU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2
YWxFeGVjdXRhYmxlKiBldmFsLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFs
dWUsIEpTU2NvcGUqIHNjb3BlLCBpbnQgZ2xvYmFsUmVnaXN0ZXJPZmZzZXQpCitKU1ZhbHVlIElu
dGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhYmxlKiBldmFsLCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTU2NvcGUqIHNjb3BlKQogewogICAgIFNhbXBsaW5n
U2NvcGUgc2FtcGxpbmdTY29wZSh0aGlzKTsKICAgICAKQEAgLTEyMDEsOSArMTEzNCwxMSBAQCBK
U1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhCiAKICAgICBEeW5hbWljR2xv
YmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoKnNjb3BlLT5nbG9iYWxEYXRhKCksIHNj
b3BlLT5nbG9iYWxPYmplY3QoKSk7CiAKLSAgICBpZiAobV9yZWVudHJ5RGVwdGggPj0gTWF4U21h
bGxUaHJlYWRSZWVudHJ5RGVwdGggJiYgbV9yZWVudHJ5RGVwdGggPj0gY2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCkubWF4UmVlbnRyeURlcHRoKQorICAgIEludGVycHJldGVyOjpOYXRpdmVTdGFja0No
ZWNrZXIgY2hlY2tlcjsKKyAgICBpZiAoY2hlY2tlci5pc0luUmVkWm9uZSgpIHx8IChtX3JlZW50
cnlEZXB0aCA+PSBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCAmJiBtX3JlZW50cnlEZXB0aCA+
PSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5tYXhSZWVudHJ5RGVwdGgpKQogICAgICAgICByZXR1
cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpKTsKIAor
ICAgIC8vIENvbXBpbGUgdGhlIGNhbGxlZToKICAgICBKU09iamVjdCogY29tcGlsZUVycm9yID0g
ZXZhbC0+Y29tcGlsZShjYWxsRnJhbWUsIHNjb3BlKTsKICAgICBpZiAoVU5MSUtFTFkoISFjb21w
aWxlRXJyb3IpKQogICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd0Vycm9yKGNhbGxG
cmFtZSwgY29tcGlsZUVycm9yKSk7CkBAIC0xMjQzLDI2ICsxMTc4LDIyIEBAIEpTVmFsdWUgSW50
ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICAgICAgfQogICAgIH0KIAotICAgIFJl
Z2lzdGVyKiBvbGRFbmQgPSBtX3N0YWNrLmVuZCgpOwotICAgIFJlZ2lzdGVyKiBuZXdFbmQgPSBt
X3N0YWNrLmJlZ2luKCkgKyBnbG9iYWxSZWdpc3Rlck9mZnNldCArIGNvZGVCbG9jay0+bV9udW1D
YWxsZWVSZWdpc3RlcnM7Ci0gICAgaWYgKCFtX3N0YWNrLmdyb3cobmV3RW5kKSkKKyAgICAvLyBQ
dXNoIHRoZSBmcmFtZToKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0g
MSk7IC8vIDEgcGFyYW1ldGVyIGZvciAndGhpcycuCisgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJh
bWUgPSBtX3N0YWNrLnB1c2hGcmFtZShjYWxsRnJhbWUsIGNvZGVCbG9jaywgc2NvcGUsIDEsIDAp
OworICAgIGlmIChVTkxJS0VMWSghbmV3Q2FsbEZyYW1lKSkKICAgICAgICAgcmV0dXJuIGNoZWNr
ZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7CiAKLSAgICBDYWxs
RnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKG1fc3RhY2suYmVnaW4oKSAr
IGdsb2JhbFJlZ2lzdGVyT2Zmc2V0KTsKLQotICAgIEFTU0VSVChjb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSA9PSAxKTsgLy8gMSBwYXJhbWV0ZXIgZm9yICd0aGlzJy4KLSAgICBuZXdDYWxsRnJh
bWUtPmluaXQoY29kZUJsb2NrLCAwLCBzY29wZSwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1l
RmxhZygpLCBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgMCk7CisgICAgLy8gU2V0IHRoZSBh
cmd1bWVudHMgZm9yIHRoZSBjYWxsZWU6CiAgICAgbmV3Q2FsbEZyYW1lLT5zZXRUaGlzVmFsdWUo
dGhpc1ZhbHVlKTsKIAotICAgIFRvcENhbGxGcmFtZVNldHRlciB0b3BDYWxsRnJhbWUoY2FsbEZy
YW1lLT5nbG9iYWxEYXRhKCksIG5ld0NhbGxGcmFtZSk7Ci0KICAgICBpZiAoUHJvZmlsZXIqIHBy
b2ZpbGVyID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAg
ICAgIHByb2ZpbGVyLT53aWxsRXhlY3V0ZShjYWxsRnJhbWUsIGV2YWwtPnNvdXJjZVVSTCgpLCBl
dmFsLT5saW5lTm8oKSk7CiAKKyAgICAvLyBFeGVjdXRlIHRoZSBjb2RlOgogICAgIEpTVmFsdWUg
cmVzdWx0OwogICAgIHsKICAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxSZWNv
cmQobV9zYW1wbGVyLmdldCgpKTsKLQogICAgICAgICBtX3JlZW50cnlEZXB0aCsrOwogICAgICAg
ICAKICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQpAQCAtMTI3Niw3ICsxMjA3LDcgQEAgSlNWYWx1
ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogICAgIGlmIChQcm9maWxlciogcHJv
ZmlsZXIgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAg
ICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBldmFsLT5zb3VyY2VVUkwoKSwgZXZh
bC0+bGluZU5vKCkpOwogCi0gICAgbV9zdGFjay5zaHJpbmsob2xkRW5kKTsKKyAgICBtX3N0YWNr
LnBvcEZyYW1lKG5ld0NhbGxGcmFtZSk7CiAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4ocmVzdWx0
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmgJKHJldmlzaW9uIDEzMDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBA
CiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ4LDYgKzQ5LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgY2xhc3MgRXZhbEV4ZWN1dGFibGU7CiAgICAgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiAg
ICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOworICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAg
ICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKICAgICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
CiAgICAgY2xhc3MgUHJvZ3JhbUV4ZWN1dGFibGU7CkBAIC0xODQsNyArMTg2LDI2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
ICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIHB1YmxpYzoKLSAgICAgICAgSW50ZXJwcmV0
ZXIoKTsKKyAgICAgICAgY2xhc3MgTmF0aXZlU3RhY2tDaGVja2VyIHsKKyAgICAgICAgcHVibGlj
OgorICAgICAgICAgICAgTmF0aXZlU3RhY2tDaGVja2VyKCkKKyAgICAgICAgICAgICAgICA6IHN0
YWNrKHd0ZlRocmVhZERhdGEoKS5zdGFjaygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICB+TmF0aXZlU3RhY2tDaGVja2VyKCkgeyB9CisK
KyAgICAgICAgICAgIGJvb2wgaXNJblJlZFpvbmUoKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNvbnN0IHNpemVfdCByZWRab25lU2l6ZSA9IDMwICogMTAyNDsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gKCFzdGFjay5yZWN1cnNpb25DaGVjayhyZWRab25lU2l6ZSkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBXVEY6OlN0YWNr
Qm91bmRzJiBzdGFjazsKKyAgICAgICAgfTsKKworICAgICAgICBJbnRlcnByZXRlcihKU0dsb2Jh
bERhdGEgJik7CiAgICAgICAgIH5JbnRlcnByZXRlcigpOwogICAgICAgICAKICAgICAgICAgdm9p
ZCBpbml0aWFsaXplKGJvb2wgY2FuVXNlSklUKTsKQEAgLTIxOCw3ICsyMzksNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgSlNWYWx1ZSBleGVjdXRlQ2FsbChDYWxsRnJhbWUqLCBKU09iamVj
dCogZnVuY3Rpb24sIENhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBjb25zdCBBcmdMaXN0Jik7CiAgICAgICAgIEpTT2JqZWN0KiBleGVjdXRlQ29uc3RydWN0KENh
bGxGcmFtZSosIEpTT2JqZWN0KiBmdW5jdGlvbiwgQ29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3Ry
dWN0RGF0YSYsIGNvbnN0IEFyZ0xpc3QmKTsKICAgICAgICAgSlNWYWx1ZSBleGVjdXRlKEV2YWxF
eGVjdXRhYmxlKiwgQ2FsbEZyYW1lKiwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTU2NvcGUqKTsKLSAg
ICAgICAgSlNWYWx1ZSBleGVjdXRlKEV2YWxFeGVjdXRhYmxlKiwgQ2FsbEZyYW1lKiwgSlNWYWx1
ZSB0aGlzVmFsdWUsIEpTU2NvcGUqLCBpbnQgZ2xvYmFsUmVnaXN0ZXJPZmZzZXQpOwogCiAgICAg
ICAgIEpTVmFsdWUgcmV0cmlldmVBcmd1bWVudHNGcm9tVk1Db2RlKENhbGxGcmFtZSosIEpTRnVu
Y3Rpb24qKSBjb25zdDsKICAgICAgICAgSlNWYWx1ZSByZXRyaWV2ZUNhbGxlckZyb21WTUNvZGUo
Q2FsbEZyYW1lKiwgSlNGdW5jdGlvbiopIGNvbnN0OwpAQCAtMjQ5LDggKzI2OSw2IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIE5FVkVSX0lOTElORSBib29sIHVud2luZENhbGxGcmFtZShD
YWxsRnJhbWUqJiwgSlNWYWx1ZSwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sq
Jik7CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgQ2FsbEZyYW1lKiBzbGlkZVJlZ2lz
dGVyV2luZG93Rm9yQ2FsbChDb2RlQmxvY2sqLCBKU1N0YWNrKiwgQ2FsbEZyYW1lKiwgc2l6ZV90
IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJnYyk7Ci0KICAgICAgICAgc3RhdGljIENhbGxGcmFtZSog
ZmluZEZ1bmN0aW9uQ2FsbEZyYW1lRnJvbVZNQ29kZShDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKik7
CiAKICAgICAgICAgdm9pZCBkdW1wUmVnaXN0ZXJzKENhbGxGcmFtZSopOwpAQCAtMjYzLDYgKzI4
MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGludCBtX3JlZW50cnlEZXB0aDsKIAor
ICAgICAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKICAgICAgICAgSlNTdGFjayBtX3N0
YWNrOwogICAgICAgICAKICNpZiBFTkFCTEUoQ09NUFVURURfR09UT19PUENPREVTKSAmJiBFTkFC
TEUoTExJTlQpCkBAIC0yODEsMTEgKzMwMCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBy
ZXR1cm4gIXRoaXNWYWx1ZS5pc09iamVjdCgpIHx8IHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhl
YykgPT0gdGhpc1ZhbHVlOwogICAgIH0KIAotICAgIGlubGluZSBKU1ZhbHVlIEludGVycHJldGVy
OjpleGVjdXRlKEV2YWxFeGVjdXRhYmxlKiBldmFsLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIEpTU2NvcGUqIHNjb3BlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGV4
ZWN1dGUoZXZhbCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUsIHNjb3BlLCBtX3N0YWNrLnNpemUoKSAr
IDEgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplKTsKLSAgICB9Ci0KICAgICBKU1ZhbHVl
IGV2YWwoQ2FsbEZyYW1lKik7CiAgICAgQ2FsbEZyYW1lKiBsb2FkVmFyYXJncyhDYWxsRnJhbWUq
LCBKU1N0YWNrKiwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgYXJndW1lbnRzLCBpbnQgZmly
c3RGcmVlUmVnaXN0ZXIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSlNTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0pTU3RhY2suY3BwCShyZXZpc2lvbiAxMzA5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKKyNpbmNs
dWRlICJKU1N0YWNrSW5saW5lZC5oIgogCiAjaW5jbHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIK
ICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAtNDIsNiArNDMsMjAgQEAgc3RhdGljIE11dGV4
JiBzdGFja1N0YXRpc3RpY3NNdXRleCgpCiAgICAgcmV0dXJuIHN0YXRpY011dGV4OwogfSAgICAK
ICAgICAKK0pTU3RhY2s6OkpTU3RhY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qg
Y2FwYWNpdHkpCisgICAgOiBtX2VuZCgwKQorICAgICwgbV90b3BDYWxsRnJhbWUoZ2xvYmFsRGF0
YS50b3BDYWxsRnJhbWUpCit7CisgICAgQVNTRVJUKGNhcGFjaXR5ICYmIGlzUGFnZUFsaWduZWQo
Y2FwYWNpdHkpKTsKKworICAgIG1fcmVzZXJ2YXRpb24gPSBQYWdlUmVzZXJ2YXRpb246OnJlc2Vy
dmUocm91bmRVcEFsbG9jYXRpb25TaXplKGNhcGFjaXR5ICogc2l6ZW9mKFJlZ2lzdGVyKSwgY29t
bWl0U2l6ZSksIE9TQWxsb2NhdG9yOjpKU1ZNU3RhY2tQYWdlcyk7CisgICAgbV9lbmQgPSBzdGF0
aWNfY2FzdDxSZWdpc3Rlcio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsKKyAgICBtX2NvbW1pdEVu
ZCA9IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOworCisgICAg
ZGlzYWxsb3dVc2VPZlN0YWNrT3ZlcmZsb3dSZXNlcnZlKCk7CisgICAgbV90b3BDYWxsRnJhbWUg
PSAwOworfQorCiBKU1N0YWNrOjp+SlNTdGFjaygpCiB7CiAgICAgdm9pZCogYmFzZSA9IG1fcmVz
ZXJ2YXRpb24uYmFzZSgpOwpAQCAtNTIsMTUgKzY3LDIyIEBAIEpTU3RhY2s6On5KU1N0YWNrKCkK
IAogYm9vbCBKU1N0YWNrOjpncm93U2xvd0Nhc2UoUmVnaXN0ZXIqIG5ld0VuZCkKIHsKKyAgICAv
LyBJZiB3ZSBoYXZlIGFscmVhZHkgY29tbWl0dGVkIGVub3VnaCBtZW1vcnkgdG8gc2F0aXNmeSB0
aGlzIHJlcXVlc3QsCisgICAgLy8ganVzdCB1cGRhdGUgdGhlIGVuZCBwb2ludGVyIGFuZCByZXR1
cm4uCiAgICAgaWYgKG5ld0VuZCA8PSBtX2NvbW1pdEVuZCkgewogICAgICAgICBtX2VuZCA9IG5l
d0VuZDsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgLy8gQ29tcHV0ZSB0aGUg
Y2h1bmsgc2l6ZSBvZiBhZGRpdGlvbmFsIG1lbW9yeSB0byBjb21taXQsIGFuZCBzZWUgaWYgd2UK
KyAgICAvLyBoYXZlIGl0IGlzIHN0aWxsIHdpdGhpbiBvdXIgYnVkZ2V0LiBJZiBub3QsIHdlJ2xs
IGZhaWwgdG8gZ3JvdyBhbmQKKyAgICAvLyByZXR1cm4gZmFsc2UuCiAgICAgbG9uZyBkZWx0YSA9
IHJvdW5kVXBBbGxvY2F0aW9uU2l6ZShyZWludGVycHJldF9jYXN0PGNoYXIqPihuZXdFbmQpIC0g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9jb21taXRFbmQpLCBjb21taXRTaXplKTsKLSAgICBp
ZiAocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9jb21taXRFbmQpICsgZGVsdGEgPiBzdGF0aWNf
Y2FzdDxjaGFyKj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpICsgbV9yZXNlcnZhdGlvbi5zaXplKCkp
CisgICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fY29tbWl0RW5kKSArIGRlbHRhID4g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV91c2VhYmxlRW5kKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgZ3Jvd3RoIGlzIHN0aWxsIHdpdGhpbiBvdXIg
YnVkZ2V0LiBHbyBhaGVhZCBhbmQgY29tbWl0CisgICAgLy8gaXQgYW5kIHJldHVybiB0cnVlLgog
ICAgIG1fcmVzZXJ2YXRpb24uY29tbWl0KG1fY29tbWl0RW5kLCBkZWx0YSk7CiAgICAgYWRkVG9D
b21taXR0ZWRCeXRlQ291bnQoZGVsdGEpOwogICAgIG1fY29tbWl0RW5kID0gcmVpbnRlcnByZXRf
Y2FzdF9wdHI8UmVnaXN0ZXIqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihtX2NvbW1pdEVuZCkg
KyBkZWx0YSk7CkBAIC03MCwxMiArOTIsMTIgQEAgYm9vbCBKU1N0YWNrOjpncm93U2xvd0Nhc2Uo
UmVnaXN0ZXIqIG5ldwogCiB2b2lkIEpTU3RhY2s6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENv
bnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKIHsKLSAgICBjb25zZXJ2YXRpdmVS
b290cy5hZGQoYmVnaW4oKSwgZW5kKCkpOworICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdp
bigpLCBnZXRUb3BPZlN0YWNrKCkpOwogfQogCiB2b2lkIEpTU3RhY2s6OmdhdGhlckNvbnNlcnZh
dGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywgSklUU3R1YlJv
dXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcywgREZHQ29kZUJsb2NrcyYgZGZnQ29kZUJsb2NrcykK
IHsKLSAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZW5kKCksIGppdFN0dWJSb3V0
aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCks
IGdldFRvcE9mU3RhY2soKSwgaml0U3R1YlJvdXRpbmVzLCBkZmdDb2RlQmxvY2tzKTsKIH0KIAog
dm9pZCBKU1N0YWNrOjpyZWxlYXNlRXhjZXNzQ2FwYWNpdHkoKQpAQCAtMTA0LDQgKzEyNiwzNSBA
QCB2b2lkIEpTU3RhY2s6OmFkZFRvQ29tbWl0dGVkQnl0ZUNvdW50KGxvCiAgICAgY29tbWl0dGVk
Qnl0ZXNDb3VudCArPSBieXRlQ291bnQ7CiB9CiAKK3ZvaWQgSlNTdGFjazo6YWxsb3dVc2VPZlN0
YWNrT3ZlcmZsb3dSZXNlcnZlKCkKK3sKKyAgICBjaGFyKiByZXNlcnZhdGlvbkVuZCA9IHN0YXRp
Y19jYXN0PGNoYXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSkgKyBtX3Jlc2VydmF0aW9uLnNpemUo
KTsKKyAgICBtX3VzZWFibGVFbmQgPSByZWludGVycHJldF9jYXN0PFJlZ2lzdGVyKj4ocmVzZXJ2
YXRpb25FbmQpOworfQorCit2b2lkIEpTU3RhY2s6OmRpc2FsbG93VXNlT2ZTdGFja092ZXJmbG93
UmVzZXJ2ZSgpCit7CisgICAgY2hhciogcmVzZXJ2YXRpb25FbmQgPSBzdGF0aWNfY2FzdDxjaGFy
Kj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpICsgbV9yZXNlcnZhdGlvbi5zaXplKCk7CisgICAgY2hh
ciogdXNlYWJsZUVuZCA9IHJlc2VydmF0aW9uRW5kIC0gY29tbWl0U2l6ZTsKKyAgICBBU1NFUlQo
dXNlYWJsZUVuZCA+IHN0YXRpY19jYXN0PGNoYXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSkpOwor
ICAgIG1fdXNlYWJsZUVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPih1c2VhYmxlRW5k
KTsKKworICAgIGlmIChtX2VuZCA+IG1fdXNlYWJsZUVuZCkgeworICAgICAgICBBU1NFUlQobV90
b3BDYWxsRnJhbWUtPmZyYW1lRXh0ZW50KCkgPCBtX3VzZWFibGVFbmQpOworICAgICAgICBzaHJp
bmsobV91c2VhYmxlRW5kKTsKKyAgICB9Cit9CisKKworSlNTdGFjazo6U3RhY2tPdmVyZmxvd1Jl
c2VydmVFbmFibGVyOjpTdGFja092ZXJmbG93UmVzZXJ2ZUVuYWJsZXIoRXhlY1N0YXRlKiBleGVj
KQorICAgIDogbV9zdGFjayhleGVjLT5pbnRlcnByZXRlcigpLT5zdGFjaygpKQoreworICAgIG1f
c3RhY2suYWxsb3dVc2VPZlN0YWNrT3ZlcmZsb3dSZXNlcnZlKCk7Cit9CisKK0pTU3RhY2s6OlN0
YWNrT3ZlcmZsb3dSZXNlcnZlRW5hYmxlcjo6flN0YWNrT3ZlcmZsb3dSZXNlcnZlRW5hYmxlcigp
Cit7CisgICAgbV9zdGFjay5kaXNhbGxvd1VzZU9mU3RhY2tPdmVyZmxvd1Jlc2VydmUoKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSlNTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9KU1N0YWNrLmgJKHJldmlzaW9uIDEzMDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwx
NyBAQAogI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2YXRpb24uaD4KICNpbmNsdWRlIDx3dGYvVk1U
YWdzLmg+CiAKKyNpZiAhZGVmaW5lZChOREVCVUcpICYmICFkZWZpbmVkKEVOQUJMRV9ERUJVR19K
U1NUQUNLKQorI2RlZmluZSBFTkFCTEVfREVCVUdfSlNTVEFDSyAxCisjZW5kaWYKKwogbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKICAgICBjbGFzcyBERkdD
b2RlQmxvY2tzOworICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBKSVRTdHViUm91dGlu
ZVNldDsKKyAgICBjbGFzcyBKU0dsb2JhbERhdGE7CiAgICAgY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwogCiAgICAgY2xhc3MgSlNTdGFjayB7CkBAIC02MSw3ICs2Nyw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAvLyBBbGxvdyA4ayBvZiBleGNlc3MgcmVnaXN0ZXJzIGJlZm9yZSB3
ZSBzdGFydCB0cnlpbmcgdG8gcmVhcCB0aGUgc3RhY2sKICAgICAgICAgc3RhdGljIGNvbnN0IHB0
cmRpZmZfdCBtYXhFeGNlc3NDYXBhY2l0eSA9IDggKiAxMDI0OwogCi0gICAgICAgIEpTU3RhY2so
c2l6ZV90IGNhcGFjaXR5ID0gZGVmYXVsdENhcGFjaXR5KTsKKyAgICAgICAgSlNTdGFjayhKU0ds
b2JhbERhdGEmLCBzaXplX3QgY2FwYWNpdHkgPSBkZWZhdWx0Q2FwYWNpdHkpOwogICAgICAgICB+
SlNTdGFjaygpOwogICAgICAgICAKICAgICAgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290
cyhDb25zZXJ2YXRpdmVSb290cyYpOwpAQCAtNzIsNyArNzgsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBlbmQoKSAtIGJlZ2luKCk7IH0K
IAogICAgICAgICBib29sIGdyb3coUmVnaXN0ZXIqKTsKLSAgICAgICAgdm9pZCBzaHJpbmsoUmVn
aXN0ZXIqKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBzaXplX3QgY29tbWl0dGVkQnl0ZUNv
dW50KCk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKTsKQEAgLTgy
LDI3ICs4Nyw1NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAmbV9lbmQ7
CiAgICAgICAgIH0KIAorICAgICAgICBSZWdpc3RlciogZ2V0VG9wT2ZGcmFtZShDYWxsRnJhbWUq
KTsKKyAgICAgICAgUmVnaXN0ZXIqIGdldFN0YXJ0T2ZGcmFtZShDYWxsRnJhbWUqKTsKKyAgICAg
ICAgUmVnaXN0ZXIqIGdldFRvcE9mU3RhY2soKTsKKworICAgICAgICBDYWxsRnJhbWUqIHB1c2hG
cmFtZShDYWxsRnJhbWUqIGNhbGxlckZyYW1lLCBjbGFzcyBDb2RlQmxvY2sqLAorICAgICAgICAg
ICAgSlNTY29wZSosIGludCBhcmdzQ291bnQsIEpTT2JqZWN0KiBjYWxsZWUpOworCisgICAgICAg
IHZvaWQgcG9wRnJhbWUoQ2FsbEZyYW1lKik7CisKKyAgICAgICAgdm9pZCBhbGxvd1VzZU9mU3Rh
Y2tPdmVyZmxvd1Jlc2VydmUoKTsKKyAgICAgICAgdm9pZCBkaXNhbGxvd1VzZU9mU3RhY2tPdmVy
Zmxvd1Jlc2VydmUoKTsKKworICAgICAgICBjbGFzcyBTdGFja092ZXJmbG93UmVzZXJ2ZUVuYWJs
ZXIgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBTdGFja092ZXJmbG93UmVzZXJ2ZUVu
YWJsZXIoRXhlY1N0YXRlKik7CisgICAgICAgICAgICB+U3RhY2tPdmVyZmxvd1Jlc2VydmVFbmFi
bGVyKCk7CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKU1N0YWNrJiBtX3N0YWNrOwor
ICAgICAgICB9OworCisjaWYgRU5BQkxFKERFQlVHX0pTU1RBQ0spCisgICAgICAgIHZvaWQgaW5z
dGFsbEZlbmNlKENhbGxGcmFtZSosIGNvbnN0IGNoYXIgKmZ1bmN0aW9uID0gIiIsIGludCBsaW5l
Tm8gPSAwKTsKKyAgICAgICAgdm9pZCB2YWxpZGF0ZUZlbmNlKENhbGxGcmFtZSosIGNvbnN0IGNo
YXIgKmZ1bmN0aW9uID0gIiIsIGludCBsaW5lTm8gPSAwKTsKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBGZW5jZVNpemUgPSA0OworI2Vsc2UgLy8gIUVOQUJMRShERUJVR19KU1NUQUNLKQorICAg
ICAgICB2b2lkIGluc3RhbGxGZW5jZShDYWxsRnJhbWUqLCBjb25zdCBjaGFyKiA9ICIiLCBpbnQg
PSAwKSB7IH0KKyAgICAgICAgdm9pZCB2YWxpZGF0ZUZlbmNlKENhbGxGcmFtZSosIGNvbnN0IGNo
YXIqID0gIiIsIGludCA9IDApIHsgfQorI2VuZGlmIC8vICFFTkFCTEUoREVCVUdfSlNTVEFDSykK
KwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiAKKyAgICAgICAgdm9pZCBzaHJpbmsoUmVnaXN0ZXIqKTsKKworI2lmIEVOQUJMRShERUJV
R19KU1NUQUNLKQorICAgICAgICBzdGF0aWMgSlNWYWx1ZSBnZW5lcmF0ZUZlbmNlVmFsdWUoc2l6
ZV90IGFyZ0luZGV4KTsKKyAgICAgICAgdm9pZCBpbnN0YWxsVHJhcHNBZnRlckZyYW1lKENhbGxG
cmFtZSopOworI2Vsc2UKKyAgICAgICAgdm9pZCBpbnN0YWxsVHJhcHNBZnRlckZyYW1lKENhbGxG
cmFtZSopIHsgfQorI2VuZGlmCisKICAgICAgICAgYm9vbCBncm93U2xvd0Nhc2UoUmVnaXN0ZXIq
KTsKICAgICAgICAgdm9pZCByZWxlYXNlRXhjZXNzQ2FwYWNpdHkoKTsKICAgICAgICAgdm9pZCBh
ZGRUb0NvbW1pdHRlZEJ5dGVDb3VudChsb25nKTsKICAgICAgICAgUmVnaXN0ZXIqIG1fZW5kOwog
ICAgICAgICBSZWdpc3RlciogbV9jb21taXRFbmQ7CisgICAgICAgIFJlZ2lzdGVyKiBtX3VzZWFi
bGVFbmQ7CiAgICAgICAgIFBhZ2VSZXNlcnZhdGlvbiBtX3Jlc2VydmF0aW9uOworICAgICAgICBD
YWxsRnJhbWUqJiBtX3RvcENhbGxGcmFtZTsKICAgICB9OwogCi0gICAgaW5saW5lIEpTU3RhY2s6
OkpTU3RhY2soc2l6ZV90IGNhcGFjaXR5KQotICAgICAgICA6IG1fZW5kKDApCi0gICAgewotICAg
ICAgICBBU1NFUlQoY2FwYWNpdHkgJiYgaXNQYWdlQWxpZ25lZChjYXBhY2l0eSkpOwotCi0gICAg
ICAgIG1fcmVzZXJ2YXRpb24gPSBQYWdlUmVzZXJ2YXRpb246OnJlc2VydmUocm91bmRVcEFsbG9j
YXRpb25TaXplKGNhcGFjaXR5ICogc2l6ZW9mKFJlZ2lzdGVyKSwgY29tbWl0U2l6ZSksIE9TQWxs
b2NhdG9yOjpKU1ZNU3RhY2tQYWdlcyk7Ci0gICAgICAgIG1fZW5kID0gc3RhdGljX2Nhc3Q8UmVn
aXN0ZXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7Ci0gICAgICAgIG1fY29tbWl0RW5kID0gc3Rh
dGljX2Nhc3Q8UmVnaXN0ZXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7Ci0gICAgfQotCiAgICAg
aW5saW5lIHZvaWQgSlNTdGFjazo6c2hyaW5rKFJlZ2lzdGVyKiBuZXdFbmQpCiAgICAgewogICAg
ICAgICBpZiAobmV3RW5kID49IG1fZW5kKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0pTU3RhY2tJbmxpbmVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2tJbmxpbmVkLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFja0lubGluZWQuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBKU1N0YWNrSW5saW5lZF9oCisjZGVmaW5lIEpTU3RhY2tJbmxp
bmVkX2gKKworI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgor
I2luY2x1ZGUgIkpTU3RhY2suaCIKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKKworaW5saW5lIFJlZ2lzdGVyKiBKU1N0YWNrOjpnZXRUb3BPZkZyYW1l
KENhbGxGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKFVOTElLRUxZKCFmcmFtZSkpCisgICAgICAg
IHJldHVybiBiZWdpbigpOworICAgIHJldHVybiBmcmFtZS0+ZnJhbWVFeHRlbnQoKTsKK30KKwor
aW5saW5lIFJlZ2lzdGVyKiBKU1N0YWNrOjpnZXRUb3BPZlN0YWNrKCkKK3sKKyAgICByZXR1cm4g
Z2V0VG9wT2ZGcmFtZShtX3RvcENhbGxGcmFtZSk7Cit9CisKK2lubGluZSBSZWdpc3RlciogSlNT
dGFjazo6Z2V0U3RhcnRPZkZyYW1lKENhbGxGcmFtZSogZnJhbWUpCit7CisgICAgQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSA9IGZyYW1lLT5jYWxsZXJGcmFtZU5vRmxhZ3MoKTsKKyAgICByZXR1cm4g
Z2V0VG9wT2ZGcmFtZShjYWxsZXJGcmFtZSk7Cit9CisKK2lubGluZSBDYWxsRnJhbWUqIEpTU3Rh
Y2s6OnB1c2hGcmFtZShDYWxsRnJhbWUqIGNhbGxlckZyYW1lLAorICAgIGNsYXNzIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwgaW50IGFyZ3NDb3VudCwgSlNPYmplY3QqIGNh
bGxlZSkKK3sKKyAgICBBU1NFUlQoISFzY29wZSk7CisgICAgUmVnaXN0ZXIqIG9sZEVuZCA9IGdl
dFRvcE9mU3RhY2soKTsKKworICAgIC8vIEVuc3VyZSB0aGF0IHdlIGhhdmUgZW5vdWdoIHNwYWNl
IGZvciB0aGUgcGFyYW1ldGVyczoKKyAgICBzaXplX3QgcGFkZGVkQXJnc0NvdW50ID0gYXJnc0Nv
dW50OworICAgIGlmIChjb2RlQmxvY2spIHsKKyAgICAgICAgc2l6ZV90IG51bVBhcmFtZXRlcnMg
PSBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICAgICAgaWYgKHBhZGRlZEFyZ3NDb3Vu
dCA8IG51bVBhcmFtZXRlcnMpCisgICAgICAgICAgICBwYWRkZWRBcmdzQ291bnQgPSBudW1QYXJh
bWV0ZXJzOworICAgIH0KKworICAgIFJlZ2lzdGVyKiBuZXdDYWxsRnJhbWVTbG90ID0gb2xkRW5k
ICsgcGFkZGVkQXJnc0NvdW50ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyNpZiBF
TkFCTEUoREVCVUdfSlNTVEFDSykKKyAgICBuZXdDYWxsRnJhbWVTbG90ICs9IEpTU3RhY2s6OkZl
bmNlU2l6ZTsKKyNlbmRpZgorICAgIFJlZ2lzdGVyKiBuZXdFbmQgPSBuZXdDYWxsRnJhbWVTbG90
OworICAgIGlmICghIWNvZGVCbG9jaykKKyAgICAgICAgbmV3RW5kICs9IGNvZGVCbG9jay0+bV9u
dW1DYWxsZWVSZWdpc3RlcnM7CisKKyAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIHRoZSBuZWVk
ZWQgc3RhY2sgY2FwYWNpdHkgdG8gcHVzaCB0aGUgbmV3IGZyYW1lOgorICAgIGlmICghZ3Jvdyhu
ZXdFbmQpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIENvbXB1dGUgdGhlIGFkZHJlc3Mg
b2YgdGhlIG5ldyBmcmFtZSBmb3IgdGhpcyBpbnZvY2F0aW9uOgorICAgIENhbGxGcmFtZSogbmV3
Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUobmV3Q2FsbEZyYW1lU2xvdCk7CisgICAgQVNT
RVJUKCEhbmV3Q2FsbEZyYW1lKTsKKworICAgIC8vIFRoZSBjYWxsZXIgZnJhbWUgc2hvdWxkIGFs
d2F5cyBiZSB0aGUgcmVhbCBwcmV2aW91cyBmcmFtZSBvbiB0aGUgc3RhY2ssCisgICAgLy8gYW5k
IG5vdCBhIHBvdGVudGlhbCBHbG9iYWxFeGVjIHRoYXQgd2FzIHBhc3NlZCBpbi4gUG9pbnQgY2Fs
bGVyRnJhbWUgdG8KKyAgICAvLyB0aGUgdG9wIGZyYW1lIG9uIHRoZSBzdGFjay4KKyAgICBjYWxs
ZXJGcmFtZSA9IG1fdG9wQ2FsbEZyYW1lOworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUg
aGVhZGVyOgorICAgIG5ld0NhbGxGcmFtZS0+aW5pdChjb2RlQmxvY2ssIDAsIHNjb3BlLAorICAg
ICAgICBjYWxsZXJGcmFtZS0+YWRkSG9zdENhbGxGcmFtZUZsYWcoKSwgYXJnc0NvdW50LCBjYWxs
ZWUpOworCisgICAgQVNTRVJUKCEhbmV3Q2FsbEZyYW1lLT5zY29wZSgpKTsKKworICAgIC8vIFBh
ZCBhZGRpdGlvbmFsIGFyZ3MgaWYgbmVlZGVkOgorICAgIC8vIE5vdGU6IHdlIG5lZWQgdG8gc3Vi
dHJhY3QgMSBmcm9tIGFyZ3NDb3VudCBhbmQgcGFkZGVkQXJnc0NvdW50IHRvCisgICAgLy8gZXhj
bHVkZSB0aGUgdGhpcyBwb2ludGVyLgorICAgIGZvciAoc2l6ZV90IGkgPSBhcmdzQ291bnQtMTsg
aSA8IHBhZGRlZEFyZ3NDb3VudC0xOyArK2kpCisgICAgICAgIG5ld0NhbGxGcmFtZS0+c2V0QXJn
dW1lbnQoaSwganNVbmRlZmluZWQoKSk7CisKKyAgICBpbnN0YWxsRmVuY2UobmV3Q2FsbEZyYW1l
LCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKyAgICB2YWxpZGF0ZUZlbmNlKG5ld0NhbGxGcmFt
ZSwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisgICAgaW5zdGFsbFRyYXBzQWZ0ZXJGcmFtZShu
ZXdDYWxsRnJhbWUpOworCisgICAgLy8gUHVzaCB0aGUgbmV3IGZyYW1lOgorICAgIG1fdG9wQ2Fs
bEZyYW1lID0gbmV3Q2FsbEZyYW1lOworCisgICAgcmV0dXJuIG5ld0NhbGxGcmFtZTsKK30KKwor
aW5saW5lIHZvaWQgSlNTdGFjazo6cG9wRnJhbWUoQ2FsbEZyYW1lKiBmcmFtZSkKK3sKKyAgICB2
YWxpZGF0ZUZlbmNlKGZyYW1lLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKyAgICBDYWxsRnJh
bWUqIGNhbGxlckZyYW1lID0gZnJhbWUtPmNhbGxlckZyYW1lTm9GbGFncygpOworCisgICAgLy8g
UG9wIHRvIHRoZSBjYWxsZXI6CisgICAgbV90b3BDYWxsRnJhbWUgPSBjYWxsZXJGcmFtZTsKKwor
ICAgIC8vIElmIHdlIGFyZSBwb3BwaW5nIHRoZSB2ZXJ5IGZpcnN0IGZyYW1lIGZyb20gdGhlIHN0
YWNrIGkuZS4gbm8gbW9yZQorICAgIC8vIGZyYW1lcyBiZWZvcmUgdGhpcywgdGhlbiB3ZSBjYW4g
bm93IHNhZmVseSBzaHJpbmsgdGhlIHN0YWNrLiBJbgorICAgIC8vIHRoaXMgY2FzZSwgd2UncmUg
c2hyaW5raW5nIGFsbCB0aGUgd2F5IHRvIHRoZSBiZWdpbm5pbmcgc2luY2UgdGhlcmUKKyAgICAv
LyBhcmUgbm8gbW9yZSBmcmFtZXMgb24gdGhlIHN0YWNrLgorICAgIGlmICghY2FsbGVyRnJhbWUp
CisgICAgICAgIHNocmluayhiZWdpbigpKTsKKworICAgIGluc3RhbGxUcmFwc0FmdGVyRnJhbWUo
Y2FsbGVyRnJhbWUpOworfQorCisKKyNpZiBFTkFCTEUoREVCVUdfSlNTVEFDSykKK2lubGluZSBK
U1ZhbHVlIEpTU3RhY2s6OmdlbmVyYXRlRmVuY2VWYWx1ZShzaXplX3QgYXJnSW5kZXgpCit7Cisg
ICAgdW5zaWduZWQgZmVuY2VCaXRzID0gMHhmYWNlYmFkMCB8ICgoYXJnSW5kZXgrMSkgJiAweGYp
OworICAgIEpTVmFsdWUgZmVuY2VWYWx1ZSA9IEpTVmFsdWUoZmVuY2VCaXRzKTsKKyAgICByZXR1
cm4gZmVuY2VWYWx1ZTsKK30KKworaW5saW5lIHZvaWQgSlNTdGFjazo6aW5zdGFsbEZlbmNlKENh
bGxGcmFtZSogZnJhbWUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBpbnQgbGluZU5vKQoreworICAg
IFVOVVNFRF9QQVJBTShmdW5jdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGxpbmVObyk7CisgICAg
UmVnaXN0ZXIqIHN0YXJ0T2ZGcmFtZSA9IGdldFN0YXJ0T2ZGcmFtZShmcmFtZSk7CisKKyAgICAv
LyBUaGUgbGFzdCBhcmdJbmRleCBpcyBhdDoKKyAgICBzaXplX3QgbWF4SW5kZXggPSBmcmFtZS0+
YXJnSW5kZXhGb3JSZWdpc3RlcihzdGFydE9mRnJhbWUpICsgMTsKKyAgICBzaXplX3Qgc3RhcnRJ
bmRleCA9IG1heEluZGV4IC0gRmVuY2VTaXplOworICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydElu
ZGV4OyBpIDwgbWF4SW5kZXg7ICsraSkgeworICAgICAgICBKU1ZhbHVlIGZlbmNlVmFsdWUgPSBn
ZW5lcmF0ZUZlbmNlVmFsdWUoaSk7CisgICAgICAgIGZyYW1lLT5zZXRBcmd1bWVudChpLCBmZW5j
ZVZhbHVlKTsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIEpTU3RhY2s6OnZhbGlkYXRlRmVuY2Uo
Q2FsbEZyYW1lKiBmcmFtZSwgY29uc3QgY2hhciAqZnVuY3Rpb24sIGludCBsaW5lTm8pCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0obGluZU5vKTsKKyAg
ICBBU1NFUlQoISFmcmFtZS0+c2NvcGUoKSk7CisgICAgUmVnaXN0ZXIqIHN0YXJ0T2ZGcmFtZSA9
IGdldFN0YXJ0T2ZGcmFtZShmcmFtZSk7CisgICAgc2l6ZV90IG1heEluZGV4ID0gZnJhbWUtPmFy
Z0luZGV4Rm9yUmVnaXN0ZXIoc3RhcnRPZkZyYW1lKSArIDE7CisgICAgc2l6ZV90IHN0YXJ0SW5k
ZXggPSBtYXhJbmRleCAtIEZlbmNlU2l6ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRl
eDsgaSA8IG1heEluZGV4OyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSBmZW5jZVZhbHVlID0gZ2Vu
ZXJhdGVGZW5jZVZhbHVlKGkpOworICAgICAgICBKU1ZhbHVlIGFjdHVhbFZhbHVlID0gZnJhbWUt
PmdldEFyZ3VtZW50VW5zYWZlKGkpOworICAgICAgICBBU1NFUlQoZmVuY2VWYWx1ZSA9PSBhY3R1
YWxWYWx1ZSk7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBKU1N0YWNrOjppbnN0YWxsVHJhcHNB
ZnRlckZyYW1lKENhbGxGcmFtZSogZnJhbWUpCit7CisgICAgUmVnaXN0ZXIqIHRvcE9mRnJhbWUg
PSBnZXRUb3BPZkZyYW1lKGZyYW1lKTsKKyAgICBjb25zdCBpbnQgc2l6ZU9mVHJhcCA9IDY0Owor
ICAgIGludDMyX3QqIHN0YXJ0T2ZUcmFwID0gcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90Kj4odG9w
T2ZGcmFtZSk7CisgICAgaW50MzJfdCogZW5kT2ZUcmFwID0gc3RhcnRPZlRyYXAgKyBzaXplT2ZU
cmFwOworICAgIGludDMyX3QqIGVuZE9mQ29tbWl0ZWRNZW1vcnkgPSByZWludGVycHJldF9jYXN0
PGludDMyX3QqPihtX2NvbW1pdEVuZCk7CisKKyAgICAvLyBNYWtlIHN1cmUgd2UncmUgbm90IGV4
Y2VlZGluZyB0aGUgYW1vdW50IG9mIGF2YWlsYWJsZSBtZW1vcnkgdG8gd3JpdGUgdG86CisgICAg
aWYgKGVuZE9mVHJhcCA+IGVuZE9mQ29tbWl0ZWRNZW1vcnkpCisgICAgICAgIGVuZE9mVHJhcCA9
IGVuZE9mQ29tbWl0ZWRNZW1vcnk7CisKKyAgICAvLyBMYXkgdGhlIHRyYXBzOgorICAgIGludDMy
X3QqIHAgPSBzdGFydE9mVHJhcDsKKyAgICB3aGlsZSAocCA8IGVuZE9mVHJhcCkKKyAgICAgICAg
KnArKyA9IDB4YWJhZGNhZmU7Cit9CisjZW5kaWYgLy8gRU5BQkxFKERFQlVHX0pTU1RBQ0spCisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNTdGFja0lubGluZWRfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEzMDkzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTQxLDYgKzIxNDEsOCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX25l
d19mCiAKIGlubGluZSB2b2lkKiBqaXRDb21waWxlRm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CisgICAgY2FsbEZyYW1lLT5zZXRDb2RlQmxv
Y2soMCk7CisKICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
Y2FsbEZyYW1lLT5jYWxsZWUoKSk7CiAgICAgQVNTRVJUKCFmdW5jdGlvbi0+aXNIb3N0RnVuY3Rp
b24oKSk7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmpz
RXhlY3V0YWJsZSgpOwpAQCAtMjIyMSw2ICsyMjIzLDggQEAgaW5saW5lIHZvaWQqIGxhenlMaW5r
Rm9yKENhbGxGcmFtZSogY2FsbAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKICAgICBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9ICZjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNv
ZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oY2FsbEZyYW1lLT5yZXR1cm5QQygpKTsKIAorICAg
IGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKDApOworCiAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9z
dEZ1bmN0aW9uKCkpCiAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRD
b2RlRm9yKGtpbmQpLmFkZHJlc3NGb3JDYWxsKCk7CiAgICAgZWxzZSB7CkBAIC0yMjk3LDcgKzIz
MDEsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAKICAgICBF
bmNvZGVkSlNWYWx1ZSByZXR1cm5WYWx1ZTsKICAgICB7Ci0gICAgICAgIFNhbXBsaW5nVG9vbDo6
SG9zdENhbGxSZWNvcmQgY2FsbFJlY29yZChDVElfU0FNUExFUik7CisgICAgICAgIFNhbXBsaW5n
VG9vbDo6Q2FsbFJlY29yZCBjYWxsUmVjb3JkKENUSV9TQU1QTEVSLCB0cnVlKTsKICAgICAgICAg
cmV0dXJuVmFsdWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oY2FsbEZyYW1lKTsKICAgICB9
CiAKQEAgLTI0MDUsNyArMjQwOSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1Zh
bHVlLCBvcF8KIAogICAgIEVuY29kZWRKU1ZhbHVlIHJldHVyblZhbHVlOwogICAgIHsKLSAgICAg
ICAgU2FtcGxpbmdUb29sOjpIb3N0Q2FsbFJlY29yZCBjYWxsUmVjb3JkKENUSV9TQU1QTEVSKTsK
KyAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxSZWNvcmQoQ1RJX1NBTVBMRVIs
IHRydWUpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0
aW9uKGNhbGxGcmFtZSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAkocmV2aXNpb24gMTMwOTM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2Myw2ICsxNjMsNyBAQCBKU09iamVjdCogdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKEV4ZWNTdGF0CiAKIEpTT2JqZWN0KiB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3Rh
dGUqIGV4ZWMpCiB7CisgICAgSlNTdGFjazo6U3RhY2tPdmVyZmxvd1Jlc2VydmVFbmFibGVyIGVu
YWJsZVN0YWNrT3ZlcmZsb3dSZXNlcnZlKGV4ZWMpOwogICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMTMw
OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTk4LDcgKzE5OCw3IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxE
YXRhKEdsb2JhbERhdGFUeXAKICNlbmRpZgogICAgICwgbV9pbkRlZmluZU93blByb3BlcnR5KGZh
bHNlKQogewotICAgIGludGVycHJldGVyID0gbmV3IEludGVycHJldGVyOworICAgIGludGVycHJl
dGVyID0gbmV3IEludGVycHJldGVyKCp0aGlzKTsKIAogICAgIC8vIE5lZWQgdG8gYmUgY2FyZWZ1
bCB0byBrZWVwIGV2ZXJ5dGhpbmcgY29uc2lzdGVudCBoZXJlCiAgICAgSlNMb2NrSG9sZGVyIGxv
Y2sodGhpcyk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzA5NDIpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0xMC0xMCAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSB0b3BDYWxsRnJhbWUgcmVs
aWFibGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
ODkyOC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZS1iYXNlbGluZSBzb21lIHRlc3RzIHRvIG1hdGNoIHRoZSBuZXcgc3RhY2sgZHVtcCByZXN1bHRz
LgorCisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvY29uc29sZS1yZXNvdXJjZS1lcnJv
cnMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2NzcC1pbmpl
Y3RlZC1jb250ZW50LXdhcm5pbmctY29udGFpbnMtc3RhY2t0cmFjZS1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvY3NwLWlubGluZS13YXJuaW5nLWNvbnRhaW5z
LXN0YWNrdHJhY2UtZXhwZWN0ZWQudHh0OgorCiAyMDEyLTEwLTEwICBKdWxpZW4gQ2hhZmZyYWl4
ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgQ2hyb21pdW0g
Z2FyZGVuaW5nLgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvY29uc29s
ZS1yZXNvdXJjZS1lcnJvcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUtcmVzb3VyY2UtZXJyb3JzLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMTMwOTM1KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3Iv
Y29uc29sZS1yZXNvdXJjZS1lcnJvcnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00
LDUgKzQsNSBAQCBUZXN0cyB0aGF0IGVycm9ycyB0byBsb2FkIGEgcmVzb3VyY2UgY2F1CiBHRVQg
aHR0cDovLzEyNy4wLjAuMTo4MDAwL2luc3BlY3Rvci9taXNzaW5nLmNzcyA0MDQgKE5vdCBGb3Vu
ZCkgY29uc29sZS1yZXNvdXJjZS1lcnJvcnMtaWZyYW1lLmh0bWw6MyBjb25zb2xlLW1lc3NhZ2Ug
Y29uc29sZS1lcnJvci1sZXZlbAogR0VUIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3Iv
bm9uLWV4aXN0ZW50LWlmcmFtZS5odG1sIDQwNCAoTm90IEZvdW5kKSBub24tZXhpc3RlbnQtaWZy
YW1lLmh0bWw6MSBjb25zb2xlLW1lc3NhZ2UgY29uc29sZS1lcnJvci1sZXZlbAogR0VUIGh0dHA6
Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3Ivbm9uLWV4aXN0ZW50LXNjcmlwdC5qcyA0MDQgKE5v
dCBGb3VuZCkgY29uc29sZS1yZXNvdXJjZS1lcnJvcnMtaWZyYW1lLmh0bWw6NCBjb25zb2xlLW1l
c3NhZ2UgY29uc29sZS1lcnJvci1sZXZlbAotR0VUIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNw
ZWN0b3Ivbm9uLWV4aXN0ZW50LXhociA0MDQgKE5vdCBGb3VuZCkgW25hdGl2ZSBjb2RlXToxc2Vu
ZCBbbmF0aXZlIGNvZGVdOjFsb2FkWEhSIGNvbnNvbGUtcmVzb3VyY2UtZXJyb3JzLmh0bWw6MThw
ZXJmb3JtQWN0aW9ucyBjb25zb2xlLXJlc291cmNlLWVycm9ycy5odG1sOjEwZXZhbCBjb2RlZXZh
bCBbbmF0aXZlIGNvZGVdOjFldmFsdWF0ZSBbbmF0aXZlIGNvZGVdOjFfZXZhbHVhdGVPbl9ldmFs
dWF0ZUFuZFdyYXBldmFsdWF0ZShhbm9ueW1vdXMgZnVuY3Rpb24pIFtuYXRpdmUgY29kZV06MSBj
b25zb2xlLW1lc3NhZ2UgY29uc29sZS1lcnJvci1sZXZlbAorR0VUIGh0dHA6Ly8xMjcuMC4wLjE6
ODAwMC9pbnNwZWN0b3Ivbm9uLWV4aXN0ZW50LXhociA0MDQgKE5vdCBGb3VuZCkgW25hdGl2ZSBj
b2RlXToxc2VuZCBbbmF0aXZlIGNvZGVdOjFsb2FkWEhSIGNvbnNvbGUtcmVzb3VyY2UtZXJyb3Jz
Lmh0bWw6MThwZXJmb3JtQWN0aW9ucyBjb25zb2xlLXJlc291cmNlLWVycm9ycy5odG1sOjEwZXZh
bCBjb2RlZXZhbCBbbmF0aXZlIGNvZGVdOjFldmFsdWF0ZSBbbmF0aXZlIGNvZGVdOjFfZXZhbHVh
dGVPbl9ldmFsdWF0ZUFuZFdyYXBldmFsdWF0ZSBjb25zb2xlLW1lc3NhZ2UgY29uc29sZS1lcnJv
ci1sZXZlbAogCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9jc3AtaW5q
ZWN0ZWQtY29udGVudC13YXJuaW5nLWNvbnRhaW5zLXN0YWNrdHJhY2UtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2NzcC1pbmplY3Rl
ZC1jb250ZW50LXdhcm5pbmctY29udGFpbnMtc3RhY2t0cmFjZS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDEzMDkzNSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2NzcC1pbmpl
Y3RlZC1jb250ZW50LXdhcm5pbmctY29udGFpbnMtc3RhY2t0cmFjZS1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTE0LDUgKzE0LDQgQEAgU3RhY2sgVHJhY2U6CiAgICAgNCkgKGludGVy
bmFsIHNjcmlwdCkgLyBfZXZhbHVhdGVPbiAvIChsaW5lIG51bWJlcikgLyAoY29sdW1uIG51bWJl
cikKICAgICA1KSAoaW50ZXJuYWwgc2NyaXB0KSAvIF9ldmFsdWF0ZUFuZFdyYXAgLyAobGluZSBu
dW1iZXIpIC8gKGNvbHVtbiBudW1iZXIpCiAgICAgNikgKGludGVybmFsIHNjcmlwdCkgLyBldmFs
dWF0ZSAvIChsaW5lIG51bWJlcikgLyAoY29sdW1uIG51bWJlcikKLSAgICA3KSBbbmF0aXZlIGNv
ZGVdIC8gIC8gMCAvIDAKIApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3Iv
Y3NwLWlubGluZS13YXJuaW5nLWNvbnRhaW5zLXN0YWNrdHJhY2UtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2NzcC1pbmxpbmUtd2Fy
bmluZy1jb250YWlucy1zdGFja3RyYWNlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTMwOTM1KQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvY3NwLWlubGluZS13YXJuaW5nLWNv
bnRhaW5zLXN0YWNrdHJhY2UtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNCw1ICsx
NCw0IEBAIFN0YWNrIFRyYWNlOgogICAgIDUpIChpbnRlcm5hbCBzY3JpcHQpIC8gX2V2YWx1YXRl
T24gLyAobGluZSBudW1iZXIpIC8gKGNvbHVtbiBudW1iZXIpCiAgICAgNikgKGludGVybmFsIHNj
cmlwdCkgLyBfZXZhbHVhdGVBbmRXcmFwIC8gKGxpbmUgbnVtYmVyKSAvIChjb2x1bW4gbnVtYmVy
KQogICAgIDcpIChpbnRlcm5hbCBzY3JpcHQpIC8gZXZhbHVhdGUgLyAobGluZSBudW1iZXIpIC8g
KGNvbHVtbiBudW1iZXIpCi0gICAgOCkgW25hdGl2ZSBjb2RlXSAvICAvIDAgLyAwCiAK
</data>
<flag name="commit-queue"
          id="180977"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168631</attachid>
            <date>2012-10-14 23:35:32 -0700</date>
            <delta_ts>2012-10-18 23:41:48 -0700</delta_ts>
            <desc>Draft 1.</desc>
            <filename>bug-98928.patch</filename>
            <type>text/plain</type>
            <size>86676</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxMjkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMyBA
QAorMjAxMi0xMC0xNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
TWFrZSB0b3BDYWxsRnJhbWUgcmVsaWFibGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05ODkyOC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAtIFZNIGVudHJ5IHBvaW50cyBhbmQgdGhlIEdDIG5vdyB1c2Vz
IHRvcENhbGxGcmFtZS4KKyAgICAgICAgLSBUaGUgY2FsbGVyRnJhbWUgdmFsdWUgaW4gQ2FsbEZy
YW1lcyBhcmUgbm93IGFsd2F5cyB0aGUgcHJldmlvdXMKKyAgICAgICAgICBmcmFtZSBvbiB0aGUg
c3RhY2ssIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IGZyYW1lIHdoaWNoIGhhcyBhCisgICAgICAgICAg
Y2FsbGVyRnJhbWUgb2YgMCAobm90IGNvdW50aW5nIHRoZSBIb3N0Q2FsbEZyYW1lRmxhZykuCisg
ICAgICAgICAgSGVuY2UsIHdlIGNhbiBub3cgdHJhdmVyc2UgZXZlcnkgc3RhY2sgZnJhbWUgb24g
dGhlIHN0YWNrIGFsbCB0aGUKKyAgICAgICAgICBiYWNrIHRvIHRoZSBmaXJzdCBmcmFtZS4KKyAg
ICAgICAgLSBXZSBub3cgcmVzZXJ2ZSBzb21lIHNwYWNlIG9uIHRoZSBKU1N0YWNrIHRvIGVuc3Vy
ZSB0aGF0IHdlJ2xsCisgICAgICAgICAgaGF2ZSBlbm91Z2ggcm9vbSB0byBkbyBleGNlcHRpb24g
aGFuZGxpbmcgd29yaywgZXNwZWNpYWxseSBpbiB0aGUKKyAgICAgICAgICBjYXNlIG9mIFN0YWNr
T3ZlcmZsb3dFcnJvcnMuCisgICAgICAgIC0gR2xvYmFsRXhlYydzIHdpbGwgbm8gbG9uZ2VyIGJl
IHVzZWQgYXMgdGhlIGNhbGxlckZyYW1lIHZhbHVlcyBpbgorICAgICAgICAgIGNhbGwgZnJhbWVz
LgorICAgICAgICAtIEFkZGVkIGZlbmNlcyBhbmQgdHJhcHMgZm9yIGRlYnVnZ2luZyB0aGUgSlNT
dGFjayBpbiBkZWJ1ZyBidWlsZHMuCisgICAgICAgIC0gQ2hhbmdlZCBuYXRpdmUgc3RhY2sgcmVj
dXJzaW9uIGNoZWNrcyB0byBiZSBiYXNlZCBvbiBTdGFja0JvdW5kcworICAgICAgICAgIGluc3Rl
YWQgb2YgdGhlIGludGVycHJldGVyIHJlZW50cnkgZGVwdGguCisgICAgICAgIC0gUmVtb3ZlZCB0
aGUgdXNlIG9mIFRocmVhZFN0YWNrVHlwZSBmb3IgZGV0ZXJtaW5pbmcgaG93IHdlIGRvIG91cgor
ICAgICAgICAgIHJlY3Vyc2lvbiBjaGVjay4gV2Ugd2lsbCBub3cgYWxsb3cgYXMgbXVjaCBzdGFj
ayBzcGFjZSB0byBiZSB1c2VkCisgICAgICAgICAgYXMgd2FzIGFsbG9jYXRlZCBieSB0aGUgT1Mu
CisKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0UmVmLmNwcDoKKyAgICAgICAgKEpTQ29udGV4dEdy
b3VwQ3JlYXRlKToKKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXApOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLm9yZGVyOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWY6CisgICAgICAgICogYnl0ZWNv
ZGUvU2FtcGxpbmdUb29sLmg6CisgICAgICAgIChTYW1wbGluZ1Rvb2wpOgorICAgICAgICAoSlND
OjpTYW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQ6OkNhbGxSZWNvcmQpOgorICAgICAgICAqIGJ5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdE5vZGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5v
ZGVJbkNvbmRpdGlvbkNvbnRleHQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6cHJlcGFyZUZvckV4dGVybmFsQ2FsbCk6CisgICAgICAgICogaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6Y2FsbGVyRnJhbWVO
b0ZsYWdzKToKKyAgICAgICAgKEV4ZWNTdGF0ZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6
YXJnSW5kZXhGb3JSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6Z2V0QXJndW1l
bnRVbnNhZmUpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZUNsb3N1cmUuaDoKKyAg
ICAgICAgKENhbGxGcmFtZUNsb3N1cmUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OmV2YWwpOgorICAgICAgICAo
SlNDOjpJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6dGhyb3dFeGNlcHRpb24pOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OnByZXBhcmVGb3JSZXBlYXRDYWxsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmVu
ZFJlcGVhdENhbGwpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmg6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSW50ZXJwcmV0ZXIpOgorICAgICAgICAqIGludGVycHJldGVy
L0pTU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjpKU1N0YWNrKToKKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6Omdyb3dTbG93Q2FzZSk6CisgICAgICAgIChK
U0M6OkpTU3RhY2s6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKEpTQzo6SlNT
dGFjazo6YWxsb3dVc2VPZkV4Y2VwdGlvblJlc2VydmUpOgorICAgICAgICAoSlNDOjpKU1N0YWNr
OjpkaXNhbGxvd1VzZU9mRXhjZXB0aW9uUmVzZXJ2ZSk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6
OkV4Y2VwdGlvblJlc2VydmVFbmFibGVyOjpFeGNlcHRpb25SZXNlcnZlRW5hYmxlcik6CisgICAg
ICAgIChKU0M6OkpTU3RhY2s6OkV4Y2VwdGlvblJlc2VydmVFbmFibGVyOjp+RXhjZXB0aW9uUmVz
ZXJ2ZUVuYWJsZXIpOgorICAgICAgICAqIGludGVycHJldGVyL0pTU3RhY2suaDoKKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChKU1N0YWNrKToKKyAgICAgICAgKEV4Y2VwdGlvblJlc2VydmVFbmFi
bGVyKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6aW5zdGFsbEZlbmNlKToKKyAgICAgICAgKEpT
Qzo6SlNTdGFjazo6dmFsaWRhdGVGZW5jZSk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6Omluc3Rh
bGxUcmFwc0FmdGVyRnJhbWUpOgorICAgICAgICAqIGludGVycHJldGVyL0pTU3RhY2tJbmxpbmVk
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6Z2V0VG9w
T2ZGcmFtZSk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OmdldFRvcE9mU3RhY2spOgorICAgICAg
ICAoSlNDOjpKU1N0YWNrOjpnZXRTdGFydE9mRnJhbWUpOgorICAgICAgICAoSlNDOjpKU1N0YWNr
OjpwdXNoRnJhbWUpOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjpwb3BGcmFtZSk6CisgICAgICAg
IChKU0M6OkpTU3RhY2s6OmdlbmVyYXRlRmVuY2VWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTU3Rh
Y2s6Omluc3RhbGxGZW5jZSk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OnZhbGlkYXRlRmVuY2Up
OgorICAgICAgICAoSlNDOjpKU1N0YWNrOjppbnN0YWxsVHJhcHNBZnRlckZyYW1lKToKKyAgICAg
ICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpqaXRDb21waWxlRm9yKToKKyAg
ICAgICAgKEpTQzo6bGF6eUxpbmtGb3IpOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5D
VElPTik6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGpzY21haW4pOgorICAgICAgICAq
IHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpjYW5SZWN1cnNlKToKKyAg
ICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjp0aHJv
d1N0YWNrT3ZlcmZsb3dFcnJvcik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuY3Bw
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4dEdyb3VwKToKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxEYXRhOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmNyZWF0ZUxl
YWtlZCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2UpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1JlY3Vyc2lvbkNoZWNrZXIu
aDoKKyAgICAgICAgKEpTQzo6U3RyaW5nUmVjdXJzaW9uQ2hlY2tlcjo6cGVyZm9ybUNoZWNrKToK
KyAgICAgICAgKiB0ZXN0UmVnRXhwLmNwcDoKKyAgICAgICAgKHJlYWxNYWluKToKKwogMjAxMi0x
MC0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBzaG91
bGQgaGFuZGxlIHBvbHltb3JwaGljIGFycmF5IG1vZGVzIGJ5IGVhZ2VybHkgdHJhbnNmb3JtaW5n
IGFycmF5cyBpbnRvIHRoZSBtb3N0IGdlbmVyYWwgYXBwbGljYWJsZSBmb3JtCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUub3JkZXIKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLm9yZGVyCShyZXZpc2lvbiAxMzEyNjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUub3JkZXIJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCBfSlNHbG9iYWxDb250ZXh0Q3JlYXRlCiBfX1pOM0pT
QzZKU0xvY2s0bG9ja0VOU18xNEpTTG9ja0JlaGF2aW9yRQogX19aTjNKU0NMMTdjcmVhdGVKU0xv
Y2tDb3VudEV2CiBfX1pOM0pTQzEySlNHbG9iYWxEYXRhMTRzaGFyZWRJbnN0YW5jZUV2Ci1fX1pO
M0pTQzEySlNHbG9iYWxEYXRhQzJFTlMwXzE0R2xvYmFsRGF0YVR5cGVFTlNfMTVUaHJlYWRTdGFj
a1R5cGVFCitfX1pOM0pTQzEySlNHbG9iYWxEYXRhQzJFTlMwXzE0R2xvYmFsRGF0YVR5cGVFTlNf
OEhlYXBUeXBlRQogX19aTjNKU0MyMWNyZWF0ZUlkZW50aWZpZXJUYWJsZUV2CiBfX1pOM0pTQzE3
Q29tbW9uSWRlbnRpZmllcnNDMUVQTlNfMTJKU0dsb2JhbERhdGFFCiBfX1pOM0pTQzE3Q29tbW9u
SWRlbnRpZmllcnNDMkVQTlNfMTJKU0dsb2JhbERhdGFFCkBAIC00NDAsNyArNDQwLDcgQEAgX19a
TjNXVEY2c3RydG9kRVBLY1BQYwogX19aTjNXVEYxMFN0cmluZ0ltcGwyMmNvbnRhaW5zT25seVdo
aXRlc3BhY2VFdgogX19aTjNXVEYxMFN0cmluZ0ltcGwxMXJldmVyc2VGaW5kRVBTMF9qCiBfX1pO
M1dURjE3ZXF1YWxJZ25vcmluZ0Nhc2VFUE5TXzEwU3RyaW5nSW1wbEVTMV8KLV9fWk4zSlNDMTJK
U0dsb2JhbERhdGExMmNyZWF0ZUxlYWtlZEVOU18xNVRocmVhZFN0YWNrVHlwZUUKK19fWk4zSlND
MTJKU0dsb2JhbERhdGExMmNyZWF0ZUxlYWtlZEVOU184SGVhcFR5cGVFCiBfX1pOM0pTQzI0SlNP
YmplY3RXaXRoR2xvYmFsT2JqZWN0QzJFUk5TXzEySlNHbG9iYWxEYXRhRVBOU18xNEpTR2xvYmFs
T2JqZWN0RVBOU185U3RydWN0dXJlRQogX19aTjNKU0M4ZXZhbHVhdGVFUE5TXzlFeGVjU3RhdGVF
UE5TXzE0U2NvcGVDaGFpbk5vZGVFUktOU18xMFNvdXJjZUNvZGVFTlNfN0pTVmFsdWVFCiBfX1pO
M0pTQzE3UHJvZ3JhbUV4ZWN1dGFibGVDMUVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwU291cmNlQ29k
ZUUKQEAgLTE3MDcsNyArMTcwNyw3IEBAIF9fWk4zSlNDOEpTUGFyc2VyMjFwYXJzZURvV2hpbGVT
dGF0ZW1lbnQKIF9fWk4zSlNDTDE2bWF0aFByb3RvRnVuY01pbkVQTlNfOUV4ZWNTdGF0ZUUKIF9f
Wk4zSlNDTDIxYXJyYXlQcm90b0Z1bmNSZXZlcnNlRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0Mx
N1Byb2dyYW1FeGVjdXRhYmxlMTN2aXNpdENoaWxkcmVuRVJOU185TWFya1N0YWNrRQotX19aTjNK
U0MxMkpTR2xvYmFsRGF0YTE4Y3JlYXRlQ29udGV4dEdyb3VwRU5TXzE1VGhyZWFkU3RhY2tUeXBl
RQorX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE4Y3JlYXRlQ29udGV4dEdyb3VwRU5TXzhIZWFwVHlw
ZUUKIF9fWk4zSlNDMTJKU0dsb2JhbERhdGEyMmNsZWFyQnVpbHRpblN0cnVjdHVyZXNFdgogX19a
TjNKU0M0SGVhcDdkZXN0cm95RXYKIF9fWk4zSlNDOUpJVFRodW5rczIyY2xlYXJIb3N0RnVuY3Rp
b25TdHVic0V2CkBAIC0xODQyLDcgKzE4NDIsNyBAQCBfSlNPYmplY3RIYXNQcm9wZXJ0eQogX0pT
T2JqZWN0R2V0UHJvdG90eXBlCiBfX1pOM0pTQzhKU09iamVjdDE1dW53cmFwcGVkT2JqZWN0RXYK
IF9fWk4zSlNDMTFjcmVhdGVFcnJvckVQTlNfOUV4ZWNTdGF0ZUVSS05TXzdVU3RyaW5nRQotX19a
TjNKU0MxMkpTR2xvYmFsRGF0YTZjcmVhdGVFTlNfMTVUaHJlYWRTdGFja1R5cGVFCitfX1pOM0pT
QzEySlNHbG9iYWxEYXRhNmNyZWF0ZUVOU184SGVhcFR5cGVFCiBfX1pOM0pTQzhKU09iamVjdDE3
cHV0RGlyZWN0RnVuY3Rpb25FUE5TXzlFeGVjU3RhdGVFUE5TXzEwSlNGdW5jdGlvbkVqCiBfX1pO
M0pTQzEySlNHbG9iYWxEYXRhMTNzdGFydFNhbXBsaW5nRXYKIF9fWk4zSlNDMTFJbnRlcnByZXRl
cjEzc3RhcnRTYW1wbGluZ0V2CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMTMx
MjY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc0Niw3ICs3NDYsNyBAQCBpbnQganNjbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAg
Ly8gTm90ZSB0aGF0IHRoZSBvcHRpb25zIHBhcnNpbmcgY2FuIGFmZmVjdCBKU0dsb2JhbERhdGEg
Y3JlYXRpb24sIGFuZCB0aHVzCiAgICAgLy8gY29tZXMgZmlyc3QuCiAgICAgQ29tbWFuZExpbmUg
b3B0aW9ucyhhcmdjLCBhcmd2KTsKLSAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBnbG9iYWxEYXRh
ID0gSlNHbG9iYWxEYXRhOjpjcmVhdGUoVGhyZWFkU3RhY2tUeXBlTGFyZ2UsIExhcmdlSGVhcCk7
CisgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3Jl
YXRlKExhcmdlSGVhcCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YS5nZXQoKSk7
CiAgICAgaW50IHJlc3VsdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RSZWdF
eHAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0UmVnRXhwLmNw
cAkocmV2aXNpb24gMTMxMjY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RSZWdFeHAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTgsNyArNDk4LDcgQEAgc3RhdGljIHZvaWQgcGFyc2VB
cmd1bWVudHMoaW50IGFyZ2MsIGNoYQogCiBpbnQgcmVhbE1haW4oaW50IGFyZ2MsIGNoYXIqKiBh
cmd2KQogewotICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IGdsb2JhbERhdGEgPSBKU0dsb2JhbERh
dGE6OmNyZWF0ZShUaHJlYWRTdGFja1R5cGVMYXJnZSwgTGFyZ2VIZWFwKTsKKyAgICBSZWZQdHI8
SlNHbG9iYWxEYXRhPiBnbG9iYWxEYXRhID0gSlNHbG9iYWxEYXRhOjpjcmVhdGUoTGFyZ2VIZWFw
KTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhLmdldCgpKTsKIAogICAgIENvbW1h
bmRMaW5lIG9wdGlvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRl
eHRSZWYuY3BwCShyZXZpc2lvbiAxMzEyNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ29udGV4dFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIEpTQ29udGV4dEdyb3VwUmVmIEpTQ29udGV4dEdyb3VwQ3JlYXRlKCkK
IHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0gICAgcmV0dXJuIHRvUmVmKEpTR2xvYmFs
RGF0YTo6Y3JlYXRlQ29udGV4dEdyb3VwKFRocmVhZFN0YWNrVHlwZVNtYWxsKS5sZWFrUmVmKCkp
OworICAgIHJldHVybiB0b1JlZihKU0dsb2JhbERhdGE6OmNyZWF0ZUNvbnRleHRHcm91cCgpLmxl
YWtSZWYoKSk7CiB9CiAKIEpTQ29udGV4dEdyb3VwUmVmIEpTQ29udGV4dEdyb3VwUmV0YWluKEpT
Q29udGV4dEdyb3VwUmVmIGdyb3VwKQpAQCAtODksNyArODksNyBAQCBKU0dsb2JhbENvbnRleHRS
ZWYgSlNHbG9iYWxDb250ZXh0Q3JlYXRlCiB7CiAgICAgaW5pdGlhbGl6ZVRocmVhZGluZygpOwog
Ci0gICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IGdyb3VwID8gUGFzc1JlZlB0
cjxKU0dsb2JhbERhdGE+KHRvSlMoZ3JvdXApKSA6IEpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4
dEdyb3VwKFRocmVhZFN0YWNrVHlwZVNtYWxsKTsKKyAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBn
bG9iYWxEYXRhID0gZ3JvdXAgPyBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4odG9KUyhncm91cCkp
IDogSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3JvdXAoKTsKIAogICAgIEFQSUVudHJ5U2hp
bSBlbnRyeVNoaW0oZ2xvYmFsRGF0YS5nZXQoKSwgZmFsc2UpOwogICAgIGdsb2JhbERhdGEtPm1h
a2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRl
Zgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkocmV2aXNpb24gMTMxMjY0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTExOCwxMiArMTE4LDEy
IEBAIEVYUE9SVFMKICAgICA/Y29udmVydFVURjhUb1VURjE2QFVuaWNvZGVAV1RGQEBZQT9BVzRD
b252ZXJzaW9uUmVzdWx0QDEyQFBBUEJEUEJEUEFQQV9XUEFfV19OQFoKICAgICA/Y29weUJhY2tp
bmdTdG9yZUBKU09iamVjdEBKU0NAQFNBWFBBVkpTQ2VsbEAyQEFBVkNvcHlWaXNpdG9yQDJAQFoK
ICAgICA/Y3JlYXRlQEpTRnVuY3Rpb25ASlNDQEBTQVBBVjEyQFBBVkV4ZWNTdGF0ZUAyQFBBVkpT
R2xvYmFsT2JqZWN0QDJASEFCVlN0cmluZ0BXVEZAQFA2SV9KMEBaVzRJbnRyaW5zaWNAMkAzQFoK
LSAgICA/Y3JlYXRlQEpTR2xvYmFsRGF0YUBKU0NAQFNBP0FWPyRQYXNzUmVmUHRyQFZKU0dsb2Jh
bERhdGFASlNDQEBAV1RGQEBXNFRocmVhZFN0YWNrVHlwZUAyQFc0SGVhcFR5cGVAMkBAWgorICAg
ID9jcmVhdGVASlNHbG9iYWxEYXRhQEpTQ0BAU0E/QVY/JFBhc3NSZWZQdHJAVkpTR2xvYmFsRGF0
YUBKU0NAQEBXVEZAQFc0SGVhcFR5cGVAMkBAWgogICAgID9jcmVhdGVAUmVnRXhwQEpTQ0BAU0FQ
QVYxMkBBQVZKU0dsb2JhbERhdGFAMkBBQlZTdHJpbmdAV1RGQEBXNFJlZ0V4cEZsYWdzQDJAQFoK
ICAgICA/Y3JlYXRlRW1wdHlTdHJpbmdAU21hbGxTdHJpbmdzQEpTQ0BAQUFFWFBBVkpTR2xvYmFs
RGF0YUAyQEBaCiAgICAgP2NyZWF0ZUVycm9yQEpTQ0BAWUFQQVZKU09iamVjdEAxQFBBVkV4ZWNT
dGF0ZUAxQEFCVlN0cmluZ0BXVEZAQEBaCiAgICAgP2NyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9u
RXhjZXB0aW9uQEpTQ0BAWUFQQVZKU09iamVjdEAxQFBBVkpTR2xvYmFsRGF0YUAxQEBaCi0gICAg
P2NyZWF0ZUxlYWtlZEBKU0dsb2JhbERhdGFASlNDQEBTQT9BVj8kUGFzc1JlZlB0ckBWSlNHbG9i
YWxEYXRhQEpTQ0BAQFdURkBAVzRUaHJlYWRTdGFja1R5cGVAMkBXNEhlYXBUeXBlQDJAQFoKKyAg
ICA/Y3JlYXRlTGVha2VkQEpTR2xvYmFsRGF0YUBKU0NAQFNBP0FWPyRQYXNzUmVmUHRyQFZKU0ds
b2JhbERhdGFASlNDQEBAV1RGQEBXNEhlYXBUeXBlQDJAQFoKICAgICA/Y3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3JASlNDQEBZQVBBVkpTT2JqZWN0QDFAUEFWRXhlY1N0YXRlQDFAQFoKICAg
ICA/Y3JlYXRlUmFuZ2VFcnJvckBKU0NAQFlBUEFWSlNPYmplY3RAMUBQQVZFeGVjU3RhdGVAMUBB
QlZTdHJpbmdAV1RGQEBAWgogICAgID9jcmVhdGVSZWZlcmVuY2VFcnJvckBKU0NAQFlBUEFWSlNP
YmplY3RAMUBQQVZFeGVjU3RhdGVAMUBBQlZTdHJpbmdAV1RGQEBAWgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAkocmV2aXNpb24gMTMxMjY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzAsMTcgKzIzMCwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFz
cyBTYW1wbGluZ1Rvb2wgewogICAgIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIHN0cnVjdCBDYWxs
UmVjb3JkOwotICAgICAgICBmcmllbmQgY2xhc3MgSG9zdENhbGxSZWNvcmQ7CiAgICAgICAgIAog
I2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGNsYXNzIENhbGxSZWNvcmQgewog
ICAgICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FsbFJlY29yZCk7CiAgICAgICAgIHB1
YmxpYzoKLSAgICAgICAgICAgIENhbGxSZWNvcmQoU2FtcGxpbmdUb29sKiBzYW1wbGluZ1Rvb2wp
CisgICAgICAgICAgICBDYWxsUmVjb3JkKFNhbXBsaW5nVG9vbCogc2FtcGxpbmdUb29sLCBib29s
IGlzSG9zdENhbGwgPSBmYWxzZSkKICAgICAgICAgICAgICAgICA6IG1fc2FtcGxpbmdUb29sKHNh
bXBsaW5nVG9vbCkKICAgICAgICAgICAgICAgICAsIG1fc2F2ZWRTYW1wbGUoc2FtcGxpbmdUb29s
LT5tX3NhbXBsZSkKICAgICAgICAgICAgICAgICAsIG1fc2F2ZWRDb2RlQmxvY2soc2FtcGxpbmdU
b29sLT5tX2NvZGVCbG9jaykKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNI
b3N0Y2FsbCkKKyAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmdUb29sLT5tX3NhbXBsZSB8PSAw
eDE7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIH5DYWxsUmVjb3JkKCkKQEAgLTI1NCwz
MiArMjU1LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaW50cHRyX3QgbV9zYXZl
ZFNhbXBsZTsKICAgICAgICAgICAgIENvZGVCbG9jayogbV9zYXZlZENvZGVCbG9jazsKICAgICAg
ICAgfTsKLSAgICAgICAgCi0gICAgICAgIGNsYXNzIEhvc3RDYWxsUmVjb3JkIDogcHVibGljIENh
bGxSZWNvcmQgewotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBIb3N0Q2FsbFJlY29yZChT
YW1wbGluZ1Rvb2wqIHNhbXBsaW5nVG9vbCkKLSAgICAgICAgICAgICAgICA6IENhbGxSZWNvcmQo
c2FtcGxpbmdUb29sKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNhbXBsaW5nVG9v
bC0+bV9zYW1wbGUgfD0gMHgxOwotICAgICAgICAgICAgfQotICAgICAgICB9OwogI2Vsc2UKICAg
ICAgICAgY2xhc3MgQ2FsbFJlY29yZCB7CiAgICAgICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShDYWxsUmVjb3JkKTsKICAgICAgICAgcHVibGljOgotICAgICAgICAgICAgQ2FsbFJlY29yZChT
YW1wbGluZ1Rvb2wqKQorICAgICAgICAgICAgQ2FsbFJlY29yZChTYW1wbGluZ1Rvb2wqLCBib29s
ID0gZmFsc2UpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07Ci0KLSAg
ICAgICAgY2xhc3MgSG9zdENhbGxSZWNvcmQgOiBwdWJsaWMgQ2FsbFJlY29yZCB7Ci0gICAgICAg
IHB1YmxpYzoKLSAgICAgICAgICAgIEhvc3RDYWxsUmVjb3JkKFNhbXBsaW5nVG9vbCogc2FtcGxp
bmdUb29sKQotICAgICAgICAgICAgICAgIDogQ2FsbFJlY29yZChzYW1wbGluZ1Rvb2wpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0jZW5kaWYgICAgICAgIAorI2Vu
ZGlmCiAKICAgICAgICAgU2FtcGxpbmdUb29sKEludGVycHJldGVyKiBpbnRlcnByZXRlcikKICAg
ICAgICAgICAgIDogbV9pbnRlcnByZXRlcihpbnRlcnByZXRlcikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDEzMTI2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzYxLDcgKzM2MSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgLy8gTm9kZTo6ZW1pdENvZGUgYXNzdW1lcyB0aGF0
IGRzdCwgaWYgcHJvdmlkZWQsIGlzIGVpdGhlciBhIGxvY2FsIG9yIGEgcmVmZXJlbmNlZCB0ZW1w
b3JhcnkuCiAgICAgICAgICAgICBBU1NFUlQoIWRzdCB8fCBkc3QgPT0gaWdub3JlZFJlc3VsdCgp
IHx8ICFkc3QtPmlzVGVtcG9yYXJ5KCkgfHwgZHN0LT5yZWZDb3VudCgpKTsKICAgICAgICAgICAg
IGFkZExpbmVJbmZvKG4tPmxpbmVObygpKTsKLSAgICAgICAgICAgIHJldHVybiBtX3N0YWNrLnJl
Y3Vyc2lvbkNoZWNrKCkKKyAgICAgICAgICAgIHJldHVybiBtX3N0YWNrLmlzU2FmZVRvUmVjdXJz
ZSgpCiAgICAgICAgICAgICAgICAgPyBuLT5lbWl0Qnl0ZWNvZGUoKnRoaXMsIGRzdCkKICAgICAg
ICAgICAgICAgICA6IGVtaXRUaHJvd0V4cHJlc3Npb25Ub29EZWVwRXhjZXB0aW9uKCk7CiAgICAg
ICAgIH0KQEAgLTM3NCw3ICszNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0Tm9kZUluQ29uZGl0aW9uQ29udGV4dChFeHByZXNzaW9uTm9kZSogbiwgTGFiZWwqIHRydWVU
YXJnZXQsIExhYmVsKiBmYWxzZVRhcmdldCwgYm9vbCBmYWxsVGhyb3VnaE1lYW5zVHJ1ZSkKICAg
ICAgICAgewogICAgICAgICAgICAgYWRkTGluZUluZm8obi0+bGluZU5vKCkpOwotICAgICAgICAg
ICAgaWYgKG1fc3RhY2sucmVjdXJzaW9uQ2hlY2soKSkKKyAgICAgICAgICAgIGlmIChtX3N0YWNr
LmlzU2FmZVRvUmVjdXJzZSgpKQogICAgICAgICAgICAgICAgIG4tPmVtaXRCeXRlY29kZUluQ29u
ZGl0aW9uQ29udGV4dCgqdGhpcywgdHJ1ZVRhcmdldCwgZmFsc2VUYXJnZXQsIGZhbGxUaHJvdWdo
TWVhbnNUcnVlKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBlbWl0VGhyb3dF
eHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlvbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMzEyNjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYy
LDIwICsxMTYyLDI0IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBY3QK
IAogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFyZ3VtZW50cyhFeGVjU3Rh
dGUqIGV4ZWMpCiB7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFs
RGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4
ZWMpOwogICAgIC8vIE5COiBUaGlzIG5lZWRzIHRvIGJlIGV4Y2VlZGluZ2x5IGNhcmVmdWwgd2l0
aCB0b3AgY2FsbCBmcmFtZSB0cmFja2luZywgc2luY2UgaXQKICAgICAvLyBtYXkgYmUgY2FsbGVk
IGZyb20gT1NSIGV4aXQsIHdoaWxlIHRoZSBzdGF0ZSBvZiB0aGUgY2FsbCBzdGFjayBpcyBiaXph
cnJlLgotICAgIEFyZ3VtZW50cyogcmVzdWx0ID0gQXJndW1lbnRzOjpjcmVhdGUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRp
b24pOworICAgIEFyZ3VtZW50cyogcmVzdWx0ID0gQXJndW1lbnRzOjpjcmVhdGUoZ2xvYmFsRGF0
YSwgZXhlYyk7CisgICAgQVNTRVJUKCFnbG9iYWxEYXRhLmV4Y2VwdGlvbik7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUlubGlu
ZWRBcmd1bWVudHMoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSkKIHsKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9i
YWxEYXRhKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwg
ZXhlYyk7CiAgICAgLy8gTkI6IFRoaXMgbmVlZHMgdG8gYmUgZXhjZWVkaW5nbHkgY2FyZWZ1bCB3
aXRoIHRvcCBjYWxsIGZyYW1lIHRyYWNraW5nLCBzaW5jZSBpdAogICAgIC8vIG1heSBiZSBjYWxs
ZWQgZnJvbSBPU1IgZXhpdCwgd2hpbGUgdGhlIHN0YXRlIG9mIHRoZSBjYWxsIHN0YWNrIGlzIGJp
emFycmUuCi0gICAgQXJndW1lbnRzKiByZXN1bHQgPSBBcmd1bWVudHM6OmNyZWF0ZShleGVjLT5n
bG9iYWxEYXRhKCksIGV4ZWMsIGlubGluZUNhbGxGcmFtZSk7Ci0gICAgQVNTRVJUKCFleGVjLT5n
bG9iYWxEYXRhKCkuZXhjZXB0aW9uKTsKKyAgICBBcmd1bWVudHMqIHJlc3VsdCA9IEFyZ3VtZW50
czo6Y3JlYXRlKGdsb2JhbERhdGEsIGV4ZWMsIGlubGluZUNhbGxGcmFtZSk7CisgICAgQVNTRVJU
KCFnbG9iYWxEYXRhLmV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNp
b24gMTMxMjY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODY4LDYgKzE4NjgsMTMgQEAgcHVibGljOgogI2lmICFk
ZWZpbmVkKE5ERUJVRykgJiYgIUNQVShBUk0pCiAgICAgdm9pZCBwcmVwYXJlRm9yRXh0ZXJuYWxD
YWxsKCkKICAgICB7CisgICAgICAgIC8vIFdlJ3JlIGFib3V0IHRvIGNhbGwgb3V0IHRvIGEgIm5h
dGl2ZSIgaGVscGVyIGZ1bmN0aW9uLiBUaGUgaGVscGVyCisgICAgICAgIC8vIGZ1bmN0aW9uIGlz
IGV4cGVjdGVkIHRvIHNldCB0b3BDYWxsRnJhbWUgaXRzZWxmIHdpdGggdGhlIEV4ZWNTdGF0ZQor
ICAgICAgICAvLyB0aGF0IGlzIHBhc3NlZCB0byBpdC4KKyAgICAgICAgLy8gV2UgZXhwbGljaXRs
eSB0cmFzaCB0b3BDYWxsRnJhbWUgaGVyZSBzbyB0aGF0IHdlJ2xsIGtub3cgaWYgc29tZSBvZgor
ICAgICAgICAvLyB0aGUgaGVscGVyIGZ1bmN0aW9ucyBhcmUgbm90IHNldHRpbmcgdG9wQ2FsbEZy
YW1lIHdoZW4gdGhleSBzaG91bGQKKyAgICAgICAgLy8gYmUgZG9pbmcgc28uIE5vdGU6IHRoZSBw
cmV2aW91cyB2YWx1ZSBpbiB0b3BjYWxsRnJhbWUgd2FzIG5vdCB2YWxpZAorICAgICAgICAvLyBh
bnl3YXkgc2luY2UgaXQgd2FzIG5vdCBiZWluZyB1cGRhdGVkIGJ5IEpJVCdlZCBjb2RlIGJ5IGRl
c2lnbi4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZih2b2lkKikgLyA0
OyBpKyspCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMigweGJhZGJlZWYp
LCByZWludGVycHJldF9jYXN0PGNoYXIqPigmbV9qaXQuZ2xvYmFsRGF0YSgpLT50b3BDYWxsRnJh
bWUpICsgaSAqIDQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDEzMTI2NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDYg
KzI1Niw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgCiAgICAgICAgIENvZGVCbG9jayog
c29tZUNvZGVCbG9ja0ZvclBvc3NpYmx5SW5saW5lZENvZGUoKSB7IHJldHVybiBjb2RlQmxvY2so
KTsgfQogI2VuZGlmCisgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWVOb0ZsYWdzKCkgeyBy
ZXR1cm4gY2FsbGVyRnJhbWUoKS0+cmVtb3ZlSG9zdENhbGxGcmFtZUZsYWcoKTsgfQogICAgICAg
ICAKICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGdldCB0aGUgdHJ1ZSBjYWxsIGZyYW1lIChhY2Nv
dW50ZWQgZm9yIGlubGluaW5nIGFuZCBhbnkKICAgICAgICAgLy8gb3RoZXIgb3B0aW1pemF0aW9u
cyksIHdoZW4geW91IGhhdmUgZW50ZXJlZCBpbnRvIFZNIGNvZGUgdGhyb3VnaCBvbmUKQEAgLTI4
MSw2ICsyODIsMzYgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBFeGVjU3RhdGUoKTsKICAg
ICAgICAgfkV4ZWNTdGF0ZSgpOwogCisgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIGZvciBp
bnRlcm5hbCB1c2UgaW4gZGVidWdnaW5nIGFuZCB2ZXJpZmljYXRpb24KKyAgICAgICAgLy8gY29k
ZSBvbmx5IGFuZCBub3QgbWVhbnQgYXMgYW4gQVBJIGZvciBnZW5lcmFsIHVzYWdlOgorCisgICAg
ICAgIHNpemVfdCBhcmdJbmRleEZvclJlZ2lzdGVyKFJlZ2lzdGVyKiByZWcpCisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIFRoZSByZWdpc3RlciBhdCAnb2Zmc2V0JyBudW1iZXIgb2Ygc2xvdHMg
ZnJvbSB0aGUgZnJhbWUgcG9pbnRlcgorICAgICAgICAgICAgLy8gaS5lLgorICAgICAgICAgICAg
Ly8gICAgICAgcmVnID0gZnJhbWVbb2Zmc2V0XTsKKyAgICAgICAgICAgIC8vICAgPT0+IHJlZyA9
IGZyYW1lICsgb2Zmc2V0OworICAgICAgICAgICAgLy8gICA9PT4gb2Zmc2V0ID0gcmVnIC0gZnJh
bWU7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gcmVnIC0gdGhpcy0+cmVnaXN0ZXJzKCk7CisK
KyAgICAgICAgICAgIC8vIFRoZSBvZmZzZXQgaXMgZGVmaW5lZCAoYmFzZWQgb24gYXJndW1lbnRP
ZmZzZXQoKSkgdG8gYmU6CisgICAgICAgICAgICAvLyAgICAgICBvZmZzZXQgPSBzX2ZpcnN0QXJn
dW1lbnRPZmZzZXQgLSBhcmdJbmRleDsKKyAgICAgICAgICAgIC8vIEhlbmNlOgorICAgICAgICAg
ICAgLy8gICAgICAgYXJnSW5kZXggPSBzX2ZpcnN0QXJndW1lbnRPZmZzZXQgLSBvZmZzZXQ7Cisg
ICAgICAgICAgICBzaXplX3QgYXJnSW5kZXggPSBzX2ZpcnN0QXJndW1lbnRPZmZzZXQgLSBvZmZz
ZXQ7CisgICAgICAgICAgICByZXR1cm4gYXJnSW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBK
U1ZhbHVlIGdldEFyZ3VtZW50VW5zYWZlKHNpemVfdCBhcmdJbmRleCkKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gVXNlciBiZXdhcmUhIFRoaXMgbWV0aG9kIGRvZXMgbm90IHZlcmlmeSB0aGF0
IHRoZXJlIGlzIGEgdmFsaWQKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50IGF0IHRoZSBzcGVjaWZp
ZWQgYXJnSW5kZXguIFRoaXMgaXMgdXNlZCBmb3IgZGVidWdnaW5nCisgICAgICAgICAgICAvLyBh
bmQgdmVyaWZpY2F0aW9uIGNvZGUgb25seS4gVGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBrbm93
IHdoYXQKKyAgICAgICAgICAgIC8vIGhlL3NoZSBpcyBkb2luZyB3aGVuIGNhbGxpbmcgdGhpcyBt
ZXRob2QuCisgICAgICAgICAgICByZXR1cm4gdGhpc1thcmd1bWVudE9mZnNldChhcmdJbmRleCld
LmpzVmFsdWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZyaWVuZCBjbGFzcyBKU1N0YWNrOwog
ICAgICAgICBmcmllbmQgY2xhc3MgVk1JbnNwZWN0b3I7CiAgICAgfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUNsb3N1cmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lQ2xvc3VyZS5o
CShyZXZpc2lvbiAxMzEyNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lQ2xvc3VyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBAIHN0cnVj
dCBDYWxsRnJhbWVDbG9zdXJlIHsKICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbjsKICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZTsKICAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGE7Ci0gICAgUmVnaXN0ZXIqIG9sZEVuZDsKICAgICBKU1Njb3BlKiBzY29wZTsKICAg
ICBpbnQgcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOwogICAgIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTMxMjY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIkpTTmFtZVNjb3BlLmgiCiAjaW5jbHVkZSAiSlNOb3RB
bk9iamVjdC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKKyNpbmNsdWRl
ICJKU1N0YWNrSW5saW5lZC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiSlNX
aXRoU2NvcGUuaCIKICNpbmNsdWRlICJMTEludENMb29wLmgiCkBAIC02Niw2ICs2Nyw3IEBACiAj
aW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtODgsMzMgKzkwLDYg
QEAgc3RhdGljIGludCBkZXB0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgSgogICAgIHJldHVybiBz
Yy0+bG9jYWxEZXB0aCgpOwogfQogCi1BTFdBWVNfSU5MSU5FIENhbGxGcmFtZSogSW50ZXJwcmV0
ZXI6OnNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKENvZGVCbG9jayogbmV3Q29kZUJsb2NrLCBK
U1N0YWNrKiBzdGFjaywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHNpemVfdCByZWdpc3Rlck9mZnNl
dCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQotewotICAgIC8vIFRoaXMgZW5zdXJl
cyBlbm91Z2ggc3BhY2UgZm9yIHRoZSB3b3JzdCBjYXNlIHNjZW5hcmlvIG9mIHplcm8gYXJndW1l
bnRzIHBhc3NlZCBieSB0aGUgY2FsbGVyLgotICAgIGlmICghc3RhY2stPmdyb3coY2FsbEZyYW1l
LT5yZWdpc3RlcnMoKSArIHJlZ2lzdGVyT2Zmc2V0ICsgbmV3Q29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCkgKyBuZXdDb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPj0gbmV3Q29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCkpIHsKLSAgICAgICAgUmVnaXN0ZXIqIG5ld0NhbGxGcmFtZSA9
IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldDsKLSAgICAgICAgcmV0dXJu
IENhbGxGcmFtZTo6Y3JlYXRlKG5ld0NhbGxGcmFtZSk7Ci0gICAgfQotCi0gICAgLy8gVG9vIGZl
dyBhcmd1bWVudHMgLS0gY29weSBhcmd1bWVudHMsIHRoZW4gZmlsbCBpbiBtaXNzaW5nIGFyZ3Vt
ZW50cyB3aXRoIHVuZGVmaW5lZC4KLSAgICBzaXplX3QgZGVsdGEgPSBuZXdDb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSAtIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwotICAgIENhbGxGcmFt
ZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMo
KSArIHJlZ2lzdGVyT2Zmc2V0ICsgZGVsdGEpOwotCi0gICAgUmVnaXN0ZXIqIGRzdCA9ICZuZXdD
YWxsRnJhbWUtPnVuY2hlY2tlZFIoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSk7Ci0g
ICAgUmVnaXN0ZXIqIGVuZCA9IGRzdCAtIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwotICAg
IGZvciAoIDsgZHN0ICE9IGVuZDsgLS1kc3QpCi0gICAgICAgICpkc3QgPSAqKGRzdCAtIGRlbHRh
KTsKLQotICAgIGVuZCAtPSBkZWx0YTsKLSAgICBmb3IgKCA7IGRzdCAhPSBlbmQ7IC0tZHN0KQot
ICAgICAgICAqZHN0ID0ganNVbmRlZmluZWQoKTsKLQotICAgIHJldHVybiBuZXdDYWxsRnJhbWU7
Ci19Ci0KIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBpZiAoIWNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKQpAQCAtMTYzLDcgKzEzOCw3IEBAIEpTVmFsdWUgZXZh
bChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxlckZy
YW1lLT50aGlzVmFsdWUoKTsKICAgICBBU1NFUlQoaXNWYWxpZFRoaXNPYmplY3QodGhpc1ZhbHVl
LCBjYWxsRnJhbWUpKTsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKS5pbnRlcnByZXRlcjsKLSAgICByZXR1cm4gaW50ZXJwcmV0ZXItPmV4ZWN1
dGUoZXZhbCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUsIGNhbGxlclNjb3BlQ2hhaW4sIGNhbGxGcmFt
ZS0+cmVnaXN0ZXJzKCkgLSBpbnRlcnByZXRlci0+c3RhY2soKS5iZWdpbigpICsgMSArIEpTU3Rh
Y2s6OkNhbGxGcmFtZUhlYWRlclNpemUpOworICAgIHJldHVybiBpbnRlcnByZXRlci0+ZXhlY3V0
ZShldmFsLCBjYWxsRnJhbWUsIHRoaXNWYWx1ZSwgY2FsbGVyU2NvcGVDaGFpbik7CiB9CiAKIENh
bGxGcmFtZSogbG9hZFZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU3RhY2sqIHN0YWNr
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSBhcmd1bWVudHMsIGludCBmaXJzdEZyZWVSZWdp
c3RlcikKQEAgLTI0NCw5ICsyMTksMTAgQEAgQ2FsbEZyYW1lKiBsb2FkVmFyYXJncyhDYWxsRnJh
bWUqIGNhbGxGcgogICAgIHJldHVybiBuZXdDYWxsRnJhbWU7CiB9CiAKLUludGVycHJldGVyOjpJ
bnRlcnByZXRlcigpCitJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQogICAgIDogbV9zYW1wbGVFbnRyeURlcHRoKDApCi0gICAgLCBtX3JlZW50cnlEZXB0
aCgwKQorICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX3N0YWNrKGdsb2Jh
bERhdGEpCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICwgbV9pbml0aWFsaXplZChmYWxzZSkK
ICNlbmRpZgpAQCAtNjkyLDI2ICs2NjgsMTMgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJ
bnRlcnByZXRlcjo6dAogICAgICAgICBpZiAoIXVud2luZENhbGxGcmFtZShjYWxsRnJhbWUsIGV4
Y2VwdGlvblZhbHVlLCBieXRlY29kZU9mZnNldCwgY29kZUJsb2NrKSkgewogICAgICAgICAgICAg
aWYgKFByb2ZpbGVyKiBwcm9maWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQ
cm9maWxlcigpKQogICAgICAgICAgICAgICAgIHByb2ZpbGVyLT5leGNlcHRpb25VbndpbmQoY2Fs
bEZyYW1lKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLnRvcENhbGxGcmFt
ZSA9IGNhbGxGcmFtZTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQot
ICAgIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLnRvcENhbGxGcmFtZSA9IGNhbGxGcmFtZTsKIAog
ICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5lbmFi
bGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXItPmV4Y2VwdGlvblVud2luZChjYWxsRnJh
bWUpOwogCi0gICAgLy8gU2hyaW5rIHRoZSBKUyBzdGFjaywgaW4gY2FzZSBzdGFjayBvdmVyZmxv
dyBtYWRlIGl0IGh1Z2UuCi0gICAgUmVnaXN0ZXIqIGhpZ2hXYXRlck1hcmsgPSAwOwotICAgIGZv
ciAoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZTsgY2FsbGVyRnJhbWU7IGNhbGxl
ckZyYW1lID0gY2FsbGVyRnJhbWUtPmNhbGxlckZyYW1lKCktPnJlbW92ZUhvc3RDYWxsRnJhbWVG
bGFnKCkpIHsKLSAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29k
ZUJsb2NrKCk7Ci0gICAgICAgIGlmICghY29kZUJsb2NrKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIFJlZ2lzdGVyKiBjYWxsZXJIaWdoV2F0ZXJNYXJrID0gY2FsbGVyRnJhbWUtPnJl
Z2lzdGVycygpICsgY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKLSAgICAgICAgaGln
aFdhdGVyTWFyayA9IG1heChoaWdoV2F0ZXJNYXJrLCBjYWxsZXJIaWdoV2F0ZXJNYXJrKTsKLSAg
ICB9Ci0gICAgbV9zdGFjay5zaHJpbmsoaGlnaFdhdGVyTWFyayk7Ci0KICAgICAvLyBVbndpbmQg
dGhlIHNjb3BlIGNoYWluIHdpdGhpbiB0aGUgZXhjZXB0aW9uIGhhbmRsZXIncyBjYWxsIGZyYW1l
LgogICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwogICAgIGludCBzY29w
ZURlbHRhID0gMDsKQEAgLTc1OCwxOSArNzIxLDIyIEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4
ZWN1dGUoUHJvZ3JhbUV4ZWMKICAgICBTYW1wbGluZ1Njb3BlIHNhbXBsaW5nU2NvcGUodGhpcyk7
CiAgICAgCiAgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7CisgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gKnNjb3BlLT5nbG9iYWxEYXRhKCk7CisKICAgICBBU1NF
UlQoaXNWYWxpZFRoaXNPYmplY3QodGhpc09iaiwgY2FsbEZyYW1lKSk7Ci0gICAgQVNTRVJUKCFz
Y29wZS0+Z2xvYmFsRGF0YSgpLT5leGNlcHRpb24pOwotICAgIEFTU0VSVCghY2FsbEZyYW1lLT5n
bG9iYWxEYXRhKCkuaXNDb2xsZWN0b3JCdXN5KCkpOwotICAgIGlmIChjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSkKKyAgICBBU1NFUlQoIWdsb2JhbERhdGEuZXhjZXB0
aW9uKTsKKyAgICBBU1NFUlQoIWdsb2JhbERhdGEuaXNDb2xsZWN0b3JCdXN5KCkpOworICAgIGlm
IChnbG9iYWxEYXRhLmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAgICBDUkFTSCgpOwogCi0gICAg
aWYgKG1fcmVlbnRyeURlcHRoID49IE1heFNtYWxsVGhyZWFkUmVlbnRyeURlcHRoICYmIG1fcmVl
bnRyeURlcHRoID49IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLm1heFJlZW50cnlEZXB0aCkKKyAg
ICBjb25zdCBTdGFja0JvdW5kcyYgbmF0aXZlU3RhY2sgPSB3dGZUaHJlYWREYXRhKCkuc3RhY2so
KTsKKyAgICBpZiAoIW5hdGl2ZVN0YWNrLmlzU2FmZVRvUmVjdXJzZSgpKQogICAgICAgICByZXR1
cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpKTsKIAog
ICAgIC8vIEZpcnN0IGNoZWNrIGlmIHRoZSAicHJvZ3JhbSIgaXMgYWN0dWFsbHkganVzdCBhIEpT
T04gb2JqZWN0LiBJZiBzbywKICAgICAvLyB3ZSdsbCBoYW5kbGUgdGhlIEpTT04gb2JqZWN0IGhl
cmUuIEVsc2UsIHdlJ2xsIGhhbmRsZSByZWFsIEpTIGNvZGUKICAgICAvLyBiZWxvdyBhdCBmYWls
ZWRKU09OUC4KLSAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUo
KnNjb3BlLT5nbG9iYWxEYXRhKCksIHNjb3BlLT5nbG9iYWxPYmplY3QoKSk7CisgICAgRHluYW1p
Y0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKGdsb2JhbERhdGEsIHNjb3BlLT5n
bG9iYWxPYmplY3QoKSk7CiAgICAgVmVjdG9yPEpTT05QRGF0YT4gSlNPTlBEYXRhOwogICAgIGJv
b2wgcGFyc2VSZXN1bHQ7CiAgICAgY29uc3QgU3RyaW5nIHByb2dyYW1Tb3VyY2UgPSBwcm9ncmFt
LT5zb3VyY2UoKS50b1N0cmluZygpOwpAQCAtODc5LDIwICs4NDUsMTYgQEAgZmFpbGVkSlNPTlA6
CiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93RXJyb3IoY2FsbEZyYW1lLCBlcnJv
cikpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gJnByb2dyYW0tPmdlbmVyYXRlZEJ5dGVj
b2RlKCk7CiAKLSAgICAvLyBSZXNlcnZlIHN0YWNrIHNwYWNlIGZvciB0aGlzIGludm9jYXRpb246
Ci0gICAgUmVnaXN0ZXIqIG9sZEVuZCA9IG1fc3RhY2suZW5kKCk7Ci0gICAgUmVnaXN0ZXIqIG5l
d0VuZCA9IG9sZEVuZCArIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpICsgSlNTdGFjazo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZSArIGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7Ci0gICAg
aWYgKCFtX3N0YWNrLmdyb3cobmV3RW5kKSkKLSAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4o
dGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7Ci0KICAgICAvLyBQdXNoIHRoZSBj
YWxsIGZyYW1lIGZvciB0aGlzIGludm9jYXRpb246Ci0gICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJh
bWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShvbGRFbmQgKyBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUpOwogICAgIEFTU0VSVChjb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSA9PSAxKTsgLy8gMSBwYXJhbWV0ZXIgZm9yICd0aGlzJy4KLSAgICBu
ZXdDYWxsRnJhbWUtPmluaXQoY29kZUJsb2NrLCAwLCBzY29wZSwgQ2FsbEZyYW1lOjpub0NhbGxl
cigpLCBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgMCk7CisgICAgQ2FsbEZyYW1lKiBuZXdD
YWxsRnJhbWUgPSBtX3N0YWNrLnB1c2hGcmFtZShjYWxsRnJhbWUsIGNvZGVCbG9jaywgc2NvcGUs
IDEsIDApOworICAgIGlmIChVTkxJS0VMWSghbmV3Q2FsbEZyYW1lKSkKKyAgICAgICAgcmV0dXJu
IGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7CisKKyAg
ICAvLyBTZXQgdGhlIGFyZ3VtZW50cyBmb3IgdGhlIGNhbGxlZToKICAgICBuZXdDYWxsRnJhbWUt
PnNldFRoaXNWYWx1ZSh0aGlzT2JqKTsKLSAgICBUb3BDYWxsRnJhbWVTZXR0ZXIgdG9wQ2FsbEZy
YW1lKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBuZXdDYWxsRnJhbWUpOwogCi0gICAgaWYgKFBy
b2ZpbGVyKiBwcm9maWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxl
cigpKQorICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBnbG9iYWxEYXRhLmVuYWJsZWRQcm9m
aWxlcigpKQogICAgICAgICBwcm9maWxlci0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBwcm9ncmFt
LT5zb3VyY2VVUkwoKSwgcHJvZ3JhbS0+bGluZU5vKCkpOwogCiAgICAgLy8gRXhlY3V0ZSB0aGUg
Y29kZToKQEAgLTkwMCwyMTEgKzg2MiwxNjQgQEAgZmFpbGVkSlNPTlA6CiAgICAgewogICAgICAg
ICBTYW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIuZ2V0KCkpOwog
Ci0gICAgICAgIG1fcmVlbnRyeURlcHRoKys7CiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAg
ICAgICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKG5ld0NhbGxGcmFtZSwgbGxpbnRf
cHJvZ3JhbV9wcm9sb2d1ZSk7CiAjZWxpZiBFTkFCTEUoSklUKQotICAgICAgICByZXN1bHQgPSBw
cm9ncmFtLT5nZW5lcmF0ZWRKSVRDb2RlKCkuZXhlY3V0ZSgmbV9zdGFjaywgbmV3Q2FsbEZyYW1l
LCBzY29wZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgcmVzdWx0ID0gcHJvZ3JhbS0+Z2VuZXJh
dGVkSklUQ29kZSgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgJmdsb2JhbERhdGEp
OwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KLSAgICAgICAgbV9yZWVudHJ5RGVwdGgtLTsKICAg
ICB9CiAKLSAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCkuZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9IGdsb2Jh
bERhdGEuZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT5kaWRFeGVjdXRlKGNh
bGxGcmFtZSwgcHJvZ3JhbS0+c291cmNlVVJMKCksIHByb2dyYW0tPmxpbmVObygpKTsKIAotICAg
IG1fc3RhY2suc2hyaW5rKG9sZEVuZCk7CisgICAgbV9zdGFjay5wb3BGcmFtZShuZXdDYWxsRnJh
bWUpOwogCiAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4ocmVzdWx0KTsKIH0KIAogSlNWYWx1ZSBJ
bnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiBm
dW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CisgICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCk7CiAgICAgQVNTRVJUKGlzVmFs
aWRUaGlzT2JqZWN0KHRoaXNWYWx1ZSwgY2FsbEZyYW1lKSk7CiAgICAgQVNTRVJUKCFjYWxsRnJh
bWUtPmhhZEV4Y2VwdGlvbigpKTsKLSAgICBBU1NFUlQoIWNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LmlzQ29sbGVjdG9yQnVzeSgpKTsKLSAgICBpZiAoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuaXND
b2xsZWN0b3JCdXN5KCkpCisgICAgQVNTRVJUKCFnbG9iYWxEYXRhLmlzQ29sbGVjdG9yQnVzeSgp
KTsKKyAgICBpZiAoZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1c3koKSkKICAgICAgICAgcmV0dXJu
IGpzTnVsbCgpOwogCi0gICAgaWYgKG1fcmVlbnRyeURlcHRoID49IE1heFNtYWxsVGhyZWFkUmVl
bnRyeURlcHRoICYmIG1fcmVlbnRyeURlcHRoID49IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLm1h
eFJlZW50cnlEZXB0aCkKKyAgICBjb25zdCBTdGFja0JvdW5kcyYgbmF0aXZlU3RhY2sgPSB3dGZU
aHJlYWREYXRhKCkuc3RhY2soKTsKKyAgICBpZiAoIW5hdGl2ZVN0YWNrLmlzU2FmZVRvUmVjdXJz
ZSgpKQogICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJv
cihjYWxsRnJhbWUpKTsKIAotICAgIFJlZ2lzdGVyKiBvbGRFbmQgPSBtX3N0YWNrLmVuZCgpOwot
ICAgIEFTU0VSVChjYWxsRnJhbWUtPmZyYW1lRXh0ZW50KCkgPD0gb2xkRW5kIHx8IGNhbGxGcmFt
ZSA9PSBjYWxsRnJhbWUtPnNjb3BlKCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpOwot
ICAgIGludCBhcmdDb3VudCA9IDEgKyBhcmdzLnNpemUoKTsgLy8gaW1wbGljaXQgInRoaXMiIHBh
cmFtZXRlcgotICAgIHNpemVfdCByZWdpc3Rlck9mZnNldCA9IGFyZ0NvdW50ICsgSlNTdGFjazo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLQotICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2Fs
bEZyYW1lOjpjcmVhdGUob2xkRW5kICsgcmVnaXN0ZXJPZmZzZXQpOwotICAgIGlmICghbV9zdGFj
ay5ncm93KG5ld0NhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpKQotICAgICAgICByZXR1cm4gY2hlY2tl
ZFJldHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpKTsKLQotICAgIG5ld0Nh
bGxGcmFtZS0+c2V0VGhpc1ZhbHVlKHRoaXNWYWx1ZSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBhcmdzLnNpemUoKTsgKytpKQotICAgICAgICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50
KGksIGFyZ3MuYXQoaSkpOwotCi0gICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpIHsKLSAg
ICAgICAgSlNTY29wZSogY2FsbERhdGFTY29wZSA9IGNhbGxEYXRhLmpzLnNjb3BlOworICAgIGJv
b2wgaXNKU0NhbGwgPSAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUyk7CisgICAgSlNTY29wZSogc2Nv
cGU7CisgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2s7CisgICAgc2l6ZV90IGFyZ3NDb3VudCA9
IDEgKyBhcmdzLnNpemUoKTsgLy8gaW1wbGljaXQgInRoaXMiIHBhcmFtZXRlcgogCi0gICAgICAg
IER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZSgqY2FsbERhdGFTY29w
ZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRGF0YVNjb3BlLT5nbG9iYWxPYmplY3QoKSk7CisgICAgaWYg
KGlzSlNDYWxsKQorICAgICAgICBzY29wZSA9IGNhbGxEYXRhLmpzLnNjb3BlOworICAgIGVsc2Ug
eworICAgICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVIb3N0KTsKKyAgICAgICAgc2Nv
cGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7CisgICAgfQorICAgIER5bmFtaWNHbG9iYWxPYmplY3RT
Y29wZSBnbG9iYWxPYmplY3RTY29wZShnbG9iYWxEYXRhLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkp
OwogCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBjYWxsRGF0YS5qcy5mdW5jdGlv
bkV4ZWN1dGFibGUtPmNvbXBpbGVGb3JDYWxsKGNhbGxGcmFtZSwgY2FsbERhdGFTY29wZSk7Cisg
ICAgaWYgKGlzSlNDYWxsKSB7CisgICAgICAgIC8vIENvbXBpbGUgdGhlIGNhbGxlZToKKyAgICAg
ICAgSlNPYmplY3QqIGNvbXBpbGVFcnJvciA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJs
ZS0+Y29tcGlsZUZvckNhbGwoY2FsbEZyYW1lLCBzY29wZSk7CiAgICAgICAgIGlmIChVTkxJS0VM
WSghIWNvbXBpbGVFcnJvcikpIHsKLSAgICAgICAgICAgIG1fc3RhY2suc2hyaW5rKG9sZEVuZCk7
CiAgICAgICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd0Vycm9yKGNhbGxGcmFtZSwg
Y29tcGlsZUVycm9yKSk7CiAgICAgICAgIH0KKyAgICAgICAgbmV3Q29kZUJsb2NrID0gJmNhbGxE
YXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDYWxsKCk7Cisg
ICAgICAgIEFTU0VSVCghIW5ld0NvZGVCbG9jayk7CisgICAgfSBlbHNlCisgICAgICAgIG5ld0Nv
ZGVCbG9jayA9IDA7CiAKLSAgICAgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sgPSAmY2FsbERh
dGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29kZUZvckNhbGwoKTsKLSAg
ICAgICAgbmV3Q2FsbEZyYW1lID0gc2xpZGVSZWdpc3RlcldpbmRvd0ZvckNhbGwobmV3Q29kZUJs
b2NrLCAmbV9zdGFjaywgbmV3Q2FsbEZyYW1lLCAwLCBhcmdDb3VudCk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWSghbmV3Q2FsbEZyYW1lKSkgewotICAgICAgICAgICAgbV9zdGFjay5zaHJpbmsob2xk
RW5kKTsKLSAgICAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxv
d0Vycm9yKGNhbGxGcmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbmV3Q2FsbEZyYW1lLT5p
bml0KG5ld0NvZGVCbG9jaywgMCwgY2FsbERhdGFTY29wZSwgY2FsbEZyYW1lLT5hZGRIb3N0Q2Fs
bEZyYW1lRmxhZygpLCBhcmdDb3VudCwgZnVuY3Rpb24pOworICAgIENhbGxGcmFtZSogbmV3Q2Fs
bEZyYW1lID0gbV9zdGFjay5wdXNoRnJhbWUoY2FsbEZyYW1lLCBuZXdDb2RlQmxvY2ssIHNjb3Bl
LCBhcmdzQ291bnQsIGZ1bmN0aW9uKTsKKyAgICBpZiAoVU5MSUtFTFkoIW5ld0NhbGxGcmFtZSkp
CisgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNh
bGxGcmFtZSkpOwogCi0gICAgICAgIFRvcENhbGxGcmFtZVNldHRlciB0b3BDYWxsRnJhbWUoY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCksIG5ld0NhbGxGcmFtZSk7CisgICAgLy8gU2V0IHRoZSBhcmd1
bWVudHMgZm9yIHRoZSBjYWxsZWU6CisgICAgbmV3Q2FsbEZyYW1lLT5zZXRUaGlzVmFsdWUodGhp
c1ZhbHVlKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpCisg
ICAgICAgIG5ld0NhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgYXJncy5hdChpKSk7CiAKLSAgICAg
ICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJs
ZWRQcm9maWxlcigpKQotICAgICAgICAgICAgcHJvZmlsZXItPndpbGxFeGVjdXRlKGNhbGxGcmFt
ZSwgZnVuY3Rpb24pOworICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBnbG9iYWxEYXRhLmVu
YWJsZWRQcm9maWxlcigpKQorICAgICAgICBwcm9maWxlci0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1l
LCBmdW5jdGlvbik7CiAKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIFNhbXBsaW5nVG9vbDo6Q2FsbFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxlci5nZXQo
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQ7CisgICAgeworICAgICAgICBTYW1wbGluZ1Rvb2w6OkNh
bGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIuZ2V0KCksICFpc0pTQ2FsbCk7CiAKLSAgICAg
ICAgICAgIG1fcmVlbnRyeURlcHRoKys7ICAKKyAgICAgICAgLy8gRXhlY3V0ZSB0aGUgY29kZToK
KyAgICAgICAgaWYgKGlzSlNDYWxsKSB7CiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAg
ICAgICAgIHJlc3VsdCA9IExMSW50OjpDTG9vcDo6ZXhlY3V0ZShuZXdDYWxsRnJhbWUsIGxsaW50
X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKTsKICNlbGlmIEVOQUJMRShKSVQpCi0gICAgICAg
ICAgICByZXN1bHQgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJ
VENvZGVGb3JDYWxsKCkuZXhlY3V0ZSgmbV9zdGFjaywgbmV3Q2FsbEZyYW1lLCBjYWxsRGF0YVNj
b3BlLT5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgcmVzdWx0ID0gY2FsbERhdGEuanMuZnVu
Y3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmV4ZWN1dGUoJm1fc3Rh
Y2ssIG5ld0NhbGxGcmFtZSwgJmdsb2JhbERhdGEpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0K
LSAgICAgICAgICAgIG1fcmVlbnRyeURlcHRoLS07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
UHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZW5hYmxlZFByb2Zp
bGVyKCkpCi0gICAgICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGZ1bmN0
aW9uKTsKLQotICAgICAgICBtX3N0YWNrLnNocmluayhvbGRFbmQpOwotICAgICAgICByZXR1cm4g
Y2hlY2tlZFJldHVybihyZXN1bHQpOwotICAgIH0KLQotICAgIEFTU0VSVChjYWxsVHlwZSA9PSBD
YWxsVHlwZUhvc3QpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwot
ICAgIG5ld0NhbGxGcmFtZS0+aW5pdCgwLCAwLCBzY29wZSwgY2FsbEZyYW1lLT5hZGRIb3N0Q2Fs
bEZyYW1lRmxhZygpLCBhcmdDb3VudCwgZnVuY3Rpb24pOwotCi0gICAgVG9wQ2FsbEZyYW1lU2V0
dGVyIHRvcENhbGxGcmFtZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbmV3Q2FsbEZyYW1lKTsK
LQotICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZSgqc2NvcGUt
Pmdsb2JhbERhdGEoKSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpKTsKLQotICAgIGlmIChQcm9maWxl
ciogcHJvZmlsZXIgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIoKSkK
LSAgICAgICAgcHJvZmlsZXItPndpbGxFeGVjdXRlKGNhbGxGcmFtZSwgZnVuY3Rpb24pOwotCi0g
ICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgewotICAgICAgICBTYW1wbGluZ1Rvb2w6Okhvc3RDYWxs
UmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVyLmdldCgpKTsKLSAgICAgICAgcmVzdWx0ID0gSlNW
YWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihuZXdDYWxsRnJhbWUpKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERh
dGEubmF0aXZlLmZ1bmN0aW9uKG5ld0NhbGxGcmFtZSkpOwogICAgIH0KIAotICAgIGlmIChQcm9m
aWxlciogcHJvZmlsZXIgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIo
KSkKKyAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gZ2xvYmFsRGF0YS5lbmFibGVkUHJvZmls
ZXIoKSkKICAgICAgICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7
CiAKLSAgICBtX3N0YWNrLnNocmluayhvbGRFbmQpOworICAgIG1fc3RhY2sucG9wRnJhbWUobmV3
Q2FsbEZyYW1lKTsKICAgICByZXR1cm4gY2hlY2tlZFJldHVybihyZXN1bHQpOwogfQogCiBKU09i
amVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlLCBjb25z
dCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewor
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpOwog
ICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAgQVNTRVJUKCFjYWxs
RnJhbWUtPmdsb2JhbERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSk7CisgICAgQVNTRVJUKCFnbG9i
YWxEYXRhLmlzQ29sbGVjdG9yQnVzeSgpKTsKICAgICAvLyBXZSB0aHJvdyBpbiB0aGlzIGNhc2Ug
YmVjYXVzZSB3ZSBoYXZlIHRvIHJldHVybiBzb21ldGhpbmcgInZhbGlkIiBidXQgd2UncmUKICAg
ICAvLyBhbHJlYWR5IGluIGFuIGludmFsaWQgc3RhdGUuCi0gICAgaWYgKGNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpLmlzQ29sbGVjdG9yQnVzeSgpKQorICAgIGlmIChnbG9iYWxEYXRhLmlzQ29sbGVj
dG9yQnVzeSgpKQogICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZs
b3dFcnJvcihjYWxsRnJhbWUpKTsKIAotICAgIGlmIChtX3JlZW50cnlEZXB0aCA+PSBNYXhTbWFs
bFRocmVhZFJlZW50cnlEZXB0aCAmJiBtX3JlZW50cnlEZXB0aCA+PSBjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKS5tYXhSZWVudHJ5RGVwdGgpCisgICAgY29uc3QgU3RhY2tCb3VuZHMmIG5hdGl2ZVN0
YWNrID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCk7CisgICAgaWYgKCFuYXRpdmVTdGFjay5pc1Nh
ZmVUb1JlY3Vyc2UoKSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092
ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7CiAKLSAgICBSZWdpc3Rlciogb2xkRW5kID0gbV9zdGFj
ay5lbmQoKTsKLSAgICBpbnQgYXJnQ291bnQgPSAxICsgYXJncy5zaXplKCk7IC8vIGltcGxpY2l0
ICJ0aGlzIiBwYXJhbWV0ZXIKLSAgICBzaXplX3QgcmVnaXN0ZXJPZmZzZXQgPSBhcmdDb3VudCAr
IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgYm9vbCBpc0pTQ29uc3RydWN0ID0g
KGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUpTKTsKKyAgICBKU1Njb3BlKiBzY29wZTsK
KyAgICBDb2RlQmxvY2sqIG5ld0NvZGVCbG9jazsKKyAgICBzaXplX3QgYXJnc0NvdW50ID0gMSAr
IGFyZ3Muc2l6ZSgpOyAvLyBpbXBsaWNpdCAidGhpcyIgcGFyYW1ldGVyCiAKLSAgICBpZiAoIW1f
c3RhY2suZ3JvdyhvbGRFbmQgKyByZWdpc3Rlck9mZnNldCkpCi0gICAgICAgIHJldHVybiBjaGVj
a2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwotCi0gICAgQ2Fs
bEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShvbGRFbmQgKyByZWdpc3Rl
ck9mZnNldCk7Ci0gICAgbmV3Q2FsbEZyYW1lLT5zZXRUaGlzVmFsdWUoanNVbmRlZmluZWQoKSk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQotICAgICAgICBu
ZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGFyZ3MuYXQoaSkpOwotCi0gICAgaWYgKGNvbnN0
cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUpTKSB7Ci0gICAgICAgIEpTU2NvcGUqIGNvbnN0cnVj
dERhdGFTY29wZSA9IGNvbnN0cnVjdERhdGEuanMuc2NvcGU7CisgICAgaWYgKGlzSlNDb25zdHJ1
Y3QpCisgICAgICAgIHNjb3BlID0gY29uc3RydWN0RGF0YS5qcy5zY29wZTsKKyAgICBlbHNlIHsK
KyAgICAgICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUhvc3QpOworICAg
ICAgICBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKKyAgICB9CiAKLSAgICAgICAgRHluYW1p
Y0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKCpjb25zdHJ1Y3REYXRhU2NvcGUt
Pmdsb2JhbERhdGEoKSwgY29uc3RydWN0RGF0YVNjb3BlLT5nbG9iYWxPYmplY3QoKSk7CisgICAg
RHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKGdsb2JhbERhdGEsIHNj
b3BlLT5nbG9iYWxPYmplY3QoKSk7CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVFcnJvciA9
IGNvbnN0cnVjdERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yQ29uc3RydWN0
KGNhbGxGcmFtZSwgY29uc3RydWN0RGF0YVNjb3BlKTsKKyAgICBpZiAoaXNKU0NvbnN0cnVjdCkg
eworICAgICAgICAvLyBDb21waWxlIHRoZSBjYWxsZWU6CisgICAgICAgIEpTT2JqZWN0KiBjb21w
aWxlRXJyb3IgPSBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZv
ckNvbnN0cnVjdChjYWxsRnJhbWUsIHNjb3BlKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCEhY29t
cGlsZUVycm9yKSkgewotICAgICAgICAgICAgbV9zdGFjay5zaHJpbmsob2xkRW5kKTsKICAgICAg
ICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93RXJyb3IoY2FsbEZyYW1lLCBjb21waWxl
RXJyb3IpKTsKICAgICAgICAgfQorICAgICAgICBuZXdDb2RlQmxvY2sgPSAmY29uc3RydWN0RGF0
YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEJ5dGVjb2RlRm9yQ29uc3RydWN0KCk7
CisgICAgICAgIEFTU0VSVCghIW5ld0NvZGVCbG9jayk7CisgICAgfSBlbHNlCisgICAgICAgIG5l
d0NvZGVCbG9jayA9IDA7CiAKLSAgICAgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sgPSAmY29u
c3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEJ5dGVjb2RlRm9yQ29u
c3RydWN0KCk7Ci0gICAgICAgIG5ld0NhbGxGcmFtZSA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JD
YWxsKG5ld0NvZGVCbG9jaywgJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgMCwgYXJnQ291bnQpOwot
ICAgICAgICBpZiAoVU5MSUtFTFkoIW5ld0NhbGxGcmFtZSkpIHsKLSAgICAgICAgICAgIG1fc3Rh
Y2suc2hyaW5rKG9sZEVuZCk7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJv
d1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIG5l
d0NhbGxGcmFtZS0+aW5pdChuZXdDb2RlQmxvY2ssIDAsIGNvbnN0cnVjdERhdGFTY29wZSwgY2Fs
bEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1lRmxhZygpLCBhcmdDb3VudCwgY29uc3RydWN0b3IpOwor
ICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gbV9zdGFjay5wdXNoRnJhbWUoY2FsbEZyYW1l
LCBuZXdDb2RlQmxvY2ssIHNjb3BlLCBhcmdzQ291bnQsIGNvbnN0cnVjdG9yKTsKKyAgICBpZiAo
VU5MSUtFTFkoIW5ld0NhbGxGcmFtZSkpCisgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRo
cm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwogCi0gICAgICAgIFRvcENhbGxGcmFt
ZVNldHRlciB0b3BDYWxsRnJhbWUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG5ld0NhbGxGcmFt
ZSk7CisgICAgLy8gU2V0IHRoZSBhcmd1bWVudHMgZm9yIHRoZSBjYWxsZWU6CisgICAgbmV3Q2Fs
bEZyYW1lLT5zZXRUaGlzVmFsdWUoanNVbmRlZmluZWQoKSk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQorICAgICAgICBuZXdDYWxsRnJhbWUtPnNldEFyZ3Vt
ZW50KGksIGFyZ3MuYXQoaSkpOwogCi0gICAgICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIoKSkKLSAgICAgICAgICAgIHBy
b2ZpbGVyLT53aWxsRXhlY3V0ZShjYWxsRnJhbWUsIGNvbnN0cnVjdG9yKTsKKyAgICBpZiAoUHJv
ZmlsZXIqIHByb2ZpbGVyID0gZ2xvYmFsRGF0YS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICAgICAg
cHJvZmlsZXItPndpbGxFeGVjdXRlKGNhbGxGcmFtZSwgY29uc3RydWN0b3IpOwogCi0gICAgICAg
IEpTVmFsdWUgcmVzdWx0OwotICAgICAgICB7Ci0gICAgICAgICAgICBTYW1wbGluZ1Rvb2w6OkNh
bGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIuZ2V0KCkpOworICAgIEpTVmFsdWUgcmVzdWx0
OworICAgIHsKKyAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxSZWNvcmQobV9z
YW1wbGVyLmdldCgpLCAhaXNKU0NvbnN0cnVjdCk7CiAKLSAgICAgICAgICAgIG1fcmVlbnRyeURl
cHRoKys7ICAKKyAgICAgICAgLy8gRXhlY3V0ZSB0aGUgY29kZS4KKyAgICAgICAgaWYgKGlzSlND
b25zdHJ1Y3QpIHsKICNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQogICAgICAgICAgICAgcmVzdWx0
ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKG5ld0NhbGxGcmFtZSwgbGxpbnRfZnVuY3Rpb25fZm9y
X2NvbnN0cnVjdF9wcm9sb2d1ZSk7CiAjZWxpZiBFTkFCTEUoSklUKQotICAgICAgICAgICAgcmVz
dWx0ID0gY29uc3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENv
ZGVGb3JDb25zdHJ1Y3QoKS5leGVjdXRlKCZtX3N0YWNrLCBuZXdDYWxsRnJhbWUsIGNvbnN0cnVj
dERhdGFTY29wZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVj
dERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0
KCkuZXhlY3V0ZSgmbV9zdGFjaywgbmV3Q2FsbEZyYW1lLCAmZ2xvYmFsRGF0YSk7CiAjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKLSAgICAgICAgICAgIG1fcmVlbnRyeURlcHRoLS07CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICByZXN1bHQgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0
YS5uYXRpdmUuZnVuY3Rpb24obmV3Q2FsbEZyYW1lKSk7CiAgICAgICAgIH0KLQotICAgICAgICBp
ZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZW5hYmxlZFBy
b2ZpbGVyKCkpCi0gICAgICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGNv
bnN0cnVjdG9yKTsKLQotICAgICAgICBtX3N0YWNrLnNocmluayhvbGRFbmQpOwotICAgICAgICBp
ZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICBBU1NFUlQocmVzdWx0LmlzT2JqZWN0KCkpOwotICAgICAgICByZXR1cm4gY2hlY2tlZFJl
dHVybihhc09iamVjdChyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoY29uc3RydWN0VHlw
ZSA9PSBDb25zdHJ1Y3RUeXBlSG9zdCk7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUt
PnNjb3BlKCk7Ci0gICAgbmV3Q2FsbEZyYW1lLT5pbml0KDAsIDAsIHNjb3BlLCBjYWxsRnJhbWUt
PmFkZEhvc3RDYWxsRnJhbWVGbGFnKCksIGFyZ0NvdW50LCBjb25zdHJ1Y3Rvcik7Ci0KLSAgICBU
b3BDYWxsRnJhbWVTZXR0ZXIgdG9wQ2FsbEZyYW1lKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBu
ZXdDYWxsRnJhbWUpOwotCi0gICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVj
dFNjb3BlKCpzY29wZS0+Z2xvYmFsRGF0YSgpLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkpOwotCi0g
ICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJs
ZWRQcm9maWxlcigpKQotICAgICAgICBwcm9maWxlci0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBj
b25zdHJ1Y3Rvcik7Ci0KLSAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICB7Ci0gICAgICAgIFNhbXBs
aW5nVG9vbDo6SG9zdENhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIuZ2V0KCkpOwotICAg
ICAgICByZXN1bHQgPSBKU1ZhbHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rp
b24obmV3Q2FsbEZyYW1lKSk7CiAgICAgfQogCi0gICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9
IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQorICAgIGlmIChQcm9m
aWxlciogcHJvZmlsZXIgPSBnbG9iYWxEYXRhLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBw
cm9maWxlci0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGNvbnN0cnVjdG9yKTsKIAotICAgIG1fc3Rh
Y2suc2hyaW5rKG9sZEVuZCk7CisgICAgbV9zdGFjay5wb3BGcmFtZShuZXdDYWxsRnJhbWUpOwor
CiAgICAgaWYgKGNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIEFTU0VSVChyZXN1bHQuaXNPYmplY3QoKSk7CkBAIC0xMTEzLDk3ICsxMDI4LDExMyBAQCBK
U09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoCiAKIENhbGxGcmFtZUNsb3N1
cmUgSW50ZXJwcmV0ZXI6OnByZXBhcmVGb3JSZXBlYXRDYWxsKEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY3Rpb25FeGVjdXRhYmxlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNGdW5jdGlvbiogZnVu
Y3Rpb24sIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgSlNTY29wZSogc2NvcGUpCiB7
Ci0gICAgQVNTRVJUKCFzY29wZS0+Z2xvYmFsRGF0YSgpLT5leGNlcHRpb24pOworICAgIEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSA9ICpzY29wZS0+Z2xvYmFsRGF0YSgpOworICAgIEFTU0VSVCgh
Z2xvYmFsRGF0YS5leGNlcHRpb24pOwogICAgIAotICAgIGlmIChjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKS5pc0NvbGxlY3RvckJ1c3koKSkKKyAgICBpZiAoZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1
c3koKSkKICAgICAgICAgcmV0dXJuIENhbGxGcmFtZUNsb3N1cmUoKTsKIAotICAgIGlmIChtX3Jl
ZW50cnlEZXB0aCA+PSBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCAmJiBtX3JlZW50cnlEZXB0
aCA+PSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5tYXhSZWVudHJ5RGVwdGgpIHsKLSAgICAgICAg
dGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKLSAgICAgICAgcmV0dXJuIENhbGxG
cmFtZUNsb3N1cmUoKTsKLSAgICB9Ci0KLSAgICBSZWdpc3Rlciogb2xkRW5kID0gbV9zdGFjay5l
bmQoKTsKLSAgICBzaXplX3QgcmVnaXN0ZXJPZmZzZXQgPSBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0KLSAgICBDYWxsRnJhbWUqIG5l
d0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKG9sZEVuZCArIHJlZ2lzdGVyT2Zmc2V0KTsK
LSAgICBpZiAoIW1fc3RhY2suZ3JvdyhuZXdDYWxsRnJhbWUtPnJlZ2lzdGVycygpKSkgeworICAg
IGNvbnN0IFN0YWNrQm91bmRzJiBuYXRpdmVTdGFjayA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygp
OworICAgIGlmICghbmF0aXZlU3RhY2suaXNTYWZlVG9SZWN1cnNlKCkpIHsKICAgICAgICAgdGhy
b3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgcmV0dXJuIENhbGxGcmFt
ZUNsb3N1cmUoKTsKICAgICB9CiAKKyAgICAvLyBDb21waWxlIHRoZSBjYWxsZWU6CiAgICAgSlNP
YmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yQ2FsbChjYWxsRnJh
bWUsIHNjb3BlKTsKICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgdGhyb3dFcnJvcihjYWxsRnJh
bWUsIGVycm9yKTsKLSAgICAgICAgbV9zdGFjay5zaHJpbmsob2xkRW5kKTsKICAgICAgICAgcmV0
dXJuIENhbGxGcmFtZUNsb3N1cmUoKTsKICAgICB9Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSAmZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29kZUZvckNhbGwoKTsKKyAgICBD
b2RlQmxvY2sqIG5ld0NvZGVCbG9jayA9ICZmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEJ5
dGVjb2RlRm9yQ2FsbCgpOworCisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzOworCisgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBtX3N0YWNrLnB1
c2hGcmFtZShjYWxsRnJhbWUsIG5ld0NvZGVCbG9jaywgc2NvcGUsIGFyZ3NDb3VudCwgZnVuY3Rp
b24pOyAgCisgICAgaWYgKFVOTElLRUxZKCFuZXdDYWxsRnJhbWUpKSB7CisgICAgICAgIHRocm93
U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CisgICAgICAgIHJldHVybiBDYWxsRnJhbWVD
bG9zdXJlKCk7CisgICAgfQogCi0gICAgbmV3Q2FsbEZyYW1lID0gc2xpZGVSZWdpc3RlcldpbmRv
d0ZvckNhbGwoY29kZUJsb2NrLCAmbV9zdGFjaywgbmV3Q2FsbEZyYW1lLCAwLCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyk7CiAgICAgaWYgKFVOTElLRUxZKCFuZXdDYWxsRnJhbWUpKSB7CiAg
ICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7Ci0gICAgICAgIG1fc3Rh
Y2suc2hyaW5rKG9sZEVuZCk7CiAgICAgICAgIHJldHVybiBDYWxsRnJhbWVDbG9zdXJlKCk7CiAg
ICAgfQotICAgIG5ld0NhbGxGcmFtZS0+aW5pdChjb2RlQmxvY2ssIDAsIHNjb3BlLCBjYWxsRnJh
bWUtPmFkZEhvc3RDYWxsRnJhbWVGbGFnKCksIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBm
dW5jdGlvbik7ICAKLSAgICBzY29wZS0+Z2xvYmFsRGF0YSgpLT50b3BDYWxsRnJhbWUgPSBuZXdD
YWxsRnJhbWU7Ci0gICAgQ2FsbEZyYW1lQ2xvc3VyZSByZXN1bHQgPSB7IGNhbGxGcmFtZSwgbmV3
Q2FsbEZyYW1lLCBmdW5jdGlvbiwgZnVuY3Rpb25FeGVjdXRhYmxlLCBzY29wZS0+Z2xvYmFsRGF0
YSgpLCBvbGRFbmQsIHNjb3BlLCBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgfTsKKworICAgIC8vIFJldHVybiB0aGUgc3VjY2Vzc2Z1bCBjbG9z
dXJlOgorICAgIENhbGxGcmFtZUNsb3N1cmUgcmVzdWx0ID0geyBjYWxsRnJhbWUsIG5ld0NhbGxG
cmFtZSwgZnVuY3Rpb24sIGZ1bmN0aW9uRXhlY3V0YWJsZSwgJmdsb2JhbERhdGEsIHNjb3BlLCBu
ZXdDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
fTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRl
KENhbGxGcmFtZUNsb3N1cmUmIGNsb3N1cmUpIAogeworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9ICpjbG9zdXJlLmdsb2JhbERhdGE7CiAgICAgU2FtcGxpbmdTY29wZSBzYW1wbGluZ1Nj
b3BlKHRoaXMpOwogICAgIAotICAgIEFTU0VSVCghY2xvc3VyZS5vbGRDYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSk7Ci0gICAgaWYgKGNsb3N1cmUub2xkQ2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCkuaXNDb2xsZWN0b3JCdXN5KCkpCisgICAgQVNTRVJUKCFnbG9iYWxEYXRh
LmlzQ29sbGVjdG9yQnVzeSgpKTsKKyAgICBpZiAoZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1c3ko
KSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworCisgICAgbV9zdGFjay52YWxpZGF0ZUZlbmNl
KGNsb3N1cmUubmV3Q2FsbEZyYW1lLCAiQkVGT1JFIik7CiAgICAgY2xvc3VyZS5yZXNldENhbGxG
cmFtZSgpOwotICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBjbG9zdXJlLm9sZENhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQorICAgIG1fc3RhY2sudmFsaWRhdGVG
ZW5jZShjbG9zdXJlLm5ld0NhbGxGcmFtZSwgIlNURVAgMSIpOworCisgICAgaWYgKFByb2ZpbGVy
KiBwcm9maWxlciA9IGdsb2JhbERhdGEuZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2Zp
bGVyLT53aWxsRXhlY3V0ZShjbG9zdXJlLm9sZENhbGxGcmFtZSwgY2xvc3VyZS5mdW5jdGlvbik7
CiAKLSAgICBUb3BDYWxsRnJhbWVTZXR0ZXIgdG9wQ2FsbEZyYW1lKCpjbG9zdXJlLmdsb2JhbERh
dGEsIGNsb3N1cmUubmV3Q2FsbEZyYW1lKTsKKyAgICAvLyBUaGUgY29kZSBleGVjdXRpb24gYmVs
b3cgbWF5IHB1c2ggbW9yZSBmcmFtZXMgYW5kIHBvaW50IHRoZSB0b3BDYWxsRnJhbWUKKyAgICAv
LyB0byB0aG9zZSBuZXdlciBmcmFtZXMsIG9yIGl0IG1heSBwb3AgdG8gdGhlIHRvcCBmcmFtZSB0
byB0aGUgY2FsbGVyIG9mCisgICAgLy8gdGhlIGN1cnJlbnQgcmVwZWF0IGZyYW1lLCBvciBpdCBt
YXkgbGVhdmUgdGhlIHRvcCBmcmFtZSBwb2ludGluZyB0byB0aGUKKyAgICAvLyBjdXJyZW50IHJl
cGVhdCBmcmFtZS4KKyAgICAvLworICAgIC8vIEhlbmNlLCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRo
ZSB0b3BDYWxsRnJhbWUgaGVyZSBvdXJzZWx2ZXMgYmVmb3JlCisgICAgLy8gcmVwZWF0aW5nIHRo
aXMgY2FsbCBvbiBhIHNlY29uZCBjYWxsYmFjayBmdW5jdGlvbi4KKworICAgIFRvcENhbGxGcmFt
ZVNldHRlciB0b3BDYWxsRnJhbWUoZ2xvYmFsRGF0YSwgY2xvc3VyZS5uZXdDYWxsRnJhbWUpOwog
CisgICAgLy8gRXhlY3V0ZSB0aGUgY29kZToKICAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICB7CiAg
ICAgICAgIFNhbXBsaW5nVG9vbDo6Q2FsbFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxlci5nZXQo
KSk7CiAgICAgICAgIAotICAgICAgICBtX3JlZW50cnlEZXB0aCsrOyAgCiAjaWYgRU5BQkxFKExM
SU5UX0NfTE9PUCkKICAgICAgICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKGNsb3N1
cmUubmV3Q2FsbEZyYW1lLCBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSk7CiAjZWxp
ZiBFTkFCTEUoSklUKQotICAgICAgICByZXN1bHQgPSBjbG9zdXJlLmZ1bmN0aW9uRXhlY3V0YWJs
ZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5leGVjdXRlKCZtX3N0YWNrLCBjbG9zdXJlLm5l
d0NhbGxGcmFtZSwgY2xvc3VyZS5nbG9iYWxEYXRhKTsKKyAgICAgICAgcmVzdWx0ID0gY2xvc3Vy
ZS5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkuZXhlY3V0ZSgm
bV9zdGFjaywgY2xvc3VyZS5uZXdDYWxsRnJhbWUsICZnbG9iYWxEYXRhKTsKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQotICAgICAgICBtX3JlZW50cnlEZXB0aC0tOwogICAgIH0KIAotICAgIGlmIChQ
cm9maWxlciogcHJvZmlsZXIgPSBjbG9zdXJlLm9sZENhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVu
YWJsZWRQcm9maWxlcigpKQorICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBnbG9iYWxEYXRh
LmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShjbG9zdXJl
Lm9sZENhbGxGcmFtZSwgY2xvc3VyZS5mdW5jdGlvbik7CisKKyAgICBtX3N0YWNrLnZhbGlkYXRl
RmVuY2UoY2xvc3VyZS5uZXdDYWxsRnJhbWUsICJBRlRFUiIpOwogICAgIHJldHVybiBjaGVja2Vk
UmV0dXJuKHJlc3VsdCk7CiB9CiAKIHZvaWQgSW50ZXJwcmV0ZXI6OmVuZFJlcGVhdENhbGwoQ2Fs
bEZyYW1lQ2xvc3VyZSYgY2xvc3VyZSkKIHsKLSAgICBjbG9zdXJlLmdsb2JhbERhdGEtPnRvcENh
bGxGcmFtZSA9IGNsb3N1cmUub2xkQ2FsbEZyYW1lOwotICAgIG1fc3RhY2suc2hyaW5rKGNsb3N1
cmUub2xkRW5kKTsKKyAgICBtX3N0YWNrLnBvcEZyYW1lKGNsb3N1cmUubmV3Q2FsbEZyYW1lKTsK
IH0KIAotSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YWJsZSogZXZhbCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1Njb3BlKiBzY29wZSwg
aW50IGdsb2JhbFJlZ2lzdGVyT2Zmc2V0KQorSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShF
dmFsRXhlY3V0YWJsZSogZXZhbCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBKU1Njb3BlKiBzY29wZSkKIHsKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSAq
c2NvcGUtPmdsb2JhbERhdGEoKTsKICAgICBTYW1wbGluZ1Njb3BlIHNhbXBsaW5nU2NvcGUodGhp
cyk7CiAgICAgCisgICAgQVNTRVJUKHNjb3BlLT5nbG9iYWxEYXRhKCkgPT0gJmNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpKTsKICAgICBBU1NFUlQoaXNWYWxpZFRoaXNPYmplY3QodGhpc1ZhbHVlLCBj
YWxsRnJhbWUpKTsKLSAgICBBU1NFUlQoIXNjb3BlLT5nbG9iYWxEYXRhKCktPmV4Y2VwdGlvbik7
Ci0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSk7
Ci0gICAgaWYgKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmlzQ29sbGVjdG9yQnVzeSgpKQorICAg
IEFTU0VSVCghZ2xvYmFsRGF0YS5leGNlcHRpb24pOworICAgIEFTU0VSVCghZ2xvYmFsRGF0YS5p
c0NvbGxlY3RvckJ1c3koKSk7CisgICAgaWYgKGdsb2JhbERhdGEuaXNDb2xsZWN0b3JCdXN5KCkp
CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29w
ZSBnbG9iYWxPYmplY3RTY29wZSgqc2NvcGUtPmdsb2JhbERhdGEoKSwgc2NvcGUtPmdsb2JhbE9i
amVjdCgpKTsKKyAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUo
Z2xvYmFsRGF0YSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpKTsKIAotICAgIGlmIChtX3JlZW50cnlE
ZXB0aCA+PSBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCAmJiBtX3JlZW50cnlEZXB0aCA+PSBj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKS5tYXhSZWVudHJ5RGVwdGgpCisgICAgY29uc3QgU3RhY2tC
b3VuZHMmIG5hdGl2ZVN0YWNrID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCk7CisgICAgaWYgKCFu
YXRpdmVTdGFjay5pc1NhZmVUb1JlY3Vyc2UoKSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1
cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7CiAKKyAgICAvLyBDb21waWxl
IHRoZSBjYWxsZWU6CiAgICAgSlNPYmplY3QqIGNvbXBpbGVFcnJvciA9IGV2YWwtPmNvbXBpbGUo
Y2FsbEZyYW1lLCBzY29wZSk7CiAgICAgaWYgKFVOTElLRUxZKCEhY29tcGlsZUVycm9yKSkKICAg
ICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dFcnJvcihjYWxsRnJhbWUsIGNvbXBpbGVF
cnJvcikpOwpAQCAtMTIyNiw3ICsxMTU3LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0
ZShFdmFsRXhlY3V0YQogICAgICAgICAgICAgdmFyaWFibGVPYmplY3QgPSBzY29wZTsKICAgICAg
ICAgfQogICAgICAgICAvLyBTY29wZSBmb3IgQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIKLSAg
ICAgICAgQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIgb3B0aW1pemVyKGNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpLCB2YXJpYWJsZU9iamVjdCk7CisgICAgICAgIEJhdGNoZWRUcmFuc2l0aW9uT3B0
aW1pemVyIG9wdGltaXplcihnbG9iYWxEYXRhLCB2YXJpYWJsZU9iamVjdCk7CiAKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVZhcmlhYmxlczsgKytpKSB7CiAgICAgICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+dmFyaWFibGUoaSk7CkBAIC0x
MjQzLDQwICsxMTc0LDM0IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1
dGEKICAgICAgICAgfQogICAgIH0KIAotICAgIFJlZ2lzdGVyKiBvbGRFbmQgPSBtX3N0YWNrLmVu
ZCgpOwotICAgIFJlZ2lzdGVyKiBuZXdFbmQgPSBtX3N0YWNrLmJlZ2luKCkgKyBnbG9iYWxSZWdp
c3Rlck9mZnNldCArIGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7Ci0gICAgaWYgKCFt
X3N0YWNrLmdyb3cobmV3RW5kKSkKKyAgICAvLyBQdXNoIHRoZSBmcmFtZToKKyAgICBBU1NFUlQo
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gMSk7IC8vIDEgcGFyYW1ldGVyIGZvciAndGhp
cycuCisgICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBtX3N0YWNrLnB1c2hGcmFtZShjYWxs
RnJhbWUsIGNvZGVCbG9jaywgc2NvcGUsIDEsIDApOworICAgIGlmIChVTkxJS0VMWSghbmV3Q2Fs
bEZyYW1lKSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93
RXJyb3IoY2FsbEZyYW1lKSk7CiAKLSAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxG
cmFtZTo6Y3JlYXRlKG1fc3RhY2suYmVnaW4oKSArIGdsb2JhbFJlZ2lzdGVyT2Zmc2V0KTsKLQot
ICAgIEFTU0VSVChjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA9PSAxKTsgLy8gMSBwYXJhbWV0
ZXIgZm9yICd0aGlzJy4KLSAgICBuZXdDYWxsRnJhbWUtPmluaXQoY29kZUJsb2NrLCAwLCBzY29w
ZSwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1lRmxhZygpLCBjb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSwgMCk7CisgICAgLy8gU2V0IHRoZSBhcmd1bWVudHMgZm9yIHRoZSBjYWxsZWU6CiAg
ICAgbmV3Q2FsbEZyYW1lLT5zZXRUaGlzVmFsdWUodGhpc1ZhbHVlKTsKIAotICAgIFRvcENhbGxG
cmFtZVNldHRlciB0b3BDYWxsRnJhbWUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG5ld0NhbGxG
cmFtZSk7Ci0KLSAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCkuZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9IGds
b2JhbERhdGEuZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT53aWxsRXhlY3V0
ZShjYWxsRnJhbWUsIGV2YWwtPnNvdXJjZVVSTCgpLCBldmFsLT5saW5lTm8oKSk7CiAKKyAgICAv
LyBFeGVjdXRlIHRoZSBjb2RlOgogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIHsKICAgICAgICAg
U2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVyLmdldCgpKTsKLQot
ICAgICAgICBtX3JlZW50cnlEZXB0aCsrOwogICAgICAgICAKICNpZiBFTkFCTEUoTExJTlRfQ19M
T09QKQogICAgICAgICByZXN1bHQgPSBMTEludDo6Q0xvb3A6OmV4ZWN1dGUobmV3Q2FsbEZyYW1l
LCBsbGludF9ldmFsX3Byb2xvZ3VlKTsKICNlbGlmIEVOQUJMRShKSVQpCi0gICAgICAgIHJlc3Vs
dCA9IGV2YWwtPmdlbmVyYXRlZEpJVENvZGUoKS5leGVjdXRlKCZtX3N0YWNrLCBuZXdDYWxsRnJh
bWUsIHNjb3BlLT5nbG9iYWxEYXRhKCkpOworICAgICAgICByZXN1bHQgPSBldmFsLT5nZW5lcmF0
ZWRKSVRDb2RlKCkuZXhlY3V0ZSgmbV9zdGFjaywgbmV3Q2FsbEZyYW1lLCAmZ2xvYmFsRGF0YSk7
CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKLSAgICAgICAgbV9yZWVudHJ5RGVwdGgtLTsKICAgICB9
CiAKLSAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCku
ZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9IGdsb2JhbERh
dGEuZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT5kaWRFeGVjdXRlKGNhbGxG
cmFtZSwgZXZhbC0+c291cmNlVVJMKCksIGV2YWwtPmxpbmVObygpKTsKIAotICAgIG1fc3RhY2su
c2hyaW5rKG9sZEVuZCk7CisgICAgbV9zdGFjay5wb3BGcmFtZShuZXdDYWxsRnJhbWUpOwogICAg
IHJldHVybiBjaGVja2VkUmV0dXJuKHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCShyZXZpc2lvbiAxMzEyNjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBF
dmFsRXhlY3V0YWJsZTsKICAgICBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKICAgICBjbGFzcyBGdW5j
dGlvbkV4ZWN1dGFibGU7CisgICAgY2xhc3MgSlNHbG9iYWxEYXRhOwogICAgIGNsYXNzIEpTR2xv
YmFsT2JqZWN0OwogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBjbGFzcyBQ
cm9ncmFtRXhlY3V0YWJsZTsKQEAgLTE3MCwyMSArMTcxLDE0IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB9CiAgICAgfTsKIAotICAgIC8vIFdlIHVzZSBhIHNtYWxsZXIgcmVlbnRyYW5jeSBs
aW1pdCBvbiBpUGhvbmUgYmVjYXVzZSBvZiB0aGUgaGlnaCBhbW91bnQgb2YKLSAgICAvLyBzdGFj
ayBzcGFjZSByZXF1aXJlZCBvbiB0aGUgd2ViIHRocmVhZC4KLSNpZiBQTEFURk9STShJT1MpCi0g
ICAgZW51bSB7IE1heExhcmdlVGhyZWFkUmVlbnRyeURlcHRoID0gNjQsIE1heFNtYWxsVGhyZWFk
UmVlbnRyeURlcHRoID0gMTYgfTsKLSNlbHNlCi0gICAgZW51bSB7IE1heExhcmdlVGhyZWFkUmVl
bnRyeURlcHRoID0gMjU2LCBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCA9IDE2IH07Ci0jZW5k
aWYgLy8gUExBVEZPUk0oSU9TKQotCiAgICAgY2xhc3MgSW50ZXJwcmV0ZXIgewogICAgICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgZnJpZW5kIGNsYXNzIENhY2hlZENhbGw7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBKSVQ7CiAgICAgcHVibGljOgotICAgICAgICBJbnRlcnByZXRlcigpOworCisg
ICAgICAgIEludGVycHJldGVyKEpTR2xvYmFsRGF0YSAmKTsKICAgICAgICAgfkludGVycHJldGVy
KCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIGluaXRpYWxpemUoYm9vbCBjYW5Vc2VKSVQpOwpA
QCAtMjE4LDcgKzIxMiw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlIGV4ZWN1
dGVDYWxsKENhbGxGcmFtZSosIEpTT2JqZWN0KiBmdW5jdGlvbiwgQ2FsbFR5cGUsIGNvbnN0IENh
bGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKICAgICAgICAgSlNP
YmplY3QqIGV4ZWN1dGVDb25zdHJ1Y3QoQ2FsbEZyYW1lKiwgSlNPYmplY3QqIGZ1bmN0aW9uLCBD
b25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiwgY29uc3QgQXJnTGlzdCYpOwogICAg
ICAgICBKU1ZhbHVlIGV4ZWN1dGUoRXZhbEV4ZWN1dGFibGUqLCBDYWxsRnJhbWUqLCBKU1ZhbHVl
IHRoaXNWYWx1ZSwgSlNTY29wZSopOwotICAgICAgICBKU1ZhbHVlIGV4ZWN1dGUoRXZhbEV4ZWN1
dGFibGUqLCBDYWxsRnJhbWUqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNTY29wZSosIGludCBnbG9i
YWxSZWdpc3Rlck9mZnNldCk7CiAKICAgICAgICAgSlNWYWx1ZSByZXRyaWV2ZUFyZ3VtZW50c0Zy
b21WTUNvZGUoQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiopIGNvbnN0OwogICAgICAgICBKU1ZhbHVl
IHJldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZShDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKikgY29uc3Q7
CkBAIC0yNDksOCArMjQyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgTkVWRVJfSU5M
SU5FIGJvb2wgdW53aW5kQ2FsbEZyYW1lKENhbGxGcmFtZSomLCBKU1ZhbHVlLCB1bnNpZ25lZCYg
Ynl0ZWNvZGVPZmZzZXQsIENvZGVCbG9jayomKTsKIAotICAgICAgICBzdGF0aWMgQUxXQVlTX0lO
TElORSBDYWxsRnJhbWUqIHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKENvZGVCbG9jayosIEpT
U3RhY2sqLCBDYWxsRnJhbWUqLCBzaXplX3QgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmdjKTsKLQog
ICAgICAgICBzdGF0aWMgQ2FsbEZyYW1lKiBmaW5kRnVuY3Rpb25DYWxsRnJhbWVGcm9tVk1Db2Rl
KENhbGxGcmFtZSosIEpTRnVuY3Rpb24qKTsKIAogICAgICAgICB2b2lkIGR1bXBSZWdpc3RlcnMo
Q2FsbEZyYW1lKik7CkBAIC0yNjEsOCArMjUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGludCBtX3NhbXBsZUVudHJ5RGVwdGg7CiAgICAgICAgIE93blB0cjxTYW1wbGluZ1Rvb2w+IG1f
c2FtcGxlcjsKIAotICAgICAgICBpbnQgbV9yZWVudHJ5RGVwdGg7Ci0KKyAgICAgICAgSlNHbG9i
YWxEYXRhJiBtX2dsb2JhbERhdGE7CiAgICAgICAgIEpTU3RhY2sgbV9zdGFjazsKICAgICAgICAg
CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykgJiYgRU5BQkxFKExMSU5UKQpAQCAt
MjgxLDExICsyNzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuICF0aGlzVmFs
dWUuaXNPYmplY3QoKSB8fCB0aGlzVmFsdWUudG9UaGlzT2JqZWN0KGV4ZWMpID09IHRoaXNWYWx1
ZTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFs
RXhlY3V0YWJsZSogZXZhbCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVl
LCBKU1Njb3BlKiBzY29wZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBleGVjdXRlKGV2YWwsIGNh
bGxGcmFtZSwgdGhpc1ZhbHVlLCBzY29wZSwgbV9zdGFjay5zaXplKCkgKyAxICsgSlNTdGFjazo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZSk7Ci0gICAgfQotCiAgICAgSlNWYWx1ZSBldmFsKENhbGxGcmFt
ZSopOwogICAgIENhbGxGcmFtZSogbG9hZFZhcmFyZ3MoQ2FsbEZyYW1lKiwgSlNTdGFjayosIEpT
VmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgaW50IGZpcnN0RnJlZVJlZ2lzdGVy
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNr
LmNwcAkocmV2aXNpb24gMTMxMjY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0pTU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1N0YWNrLmgiCisjaW5jbHVkZSAiSlNTdGFja0lu
bGluZWQuaCIKIAogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCiAjaW5jbHVkZSAiSW50
ZXJwcmV0ZXIuaCIKQEAgLTQyLDYgKzQzLDIzIEBAIHN0YXRpYyBNdXRleCYgc3RhY2tTdGF0aXN0
aWNzTXV0ZXgoKQogICAgIHJldHVybiBzdGF0aWNNdXRleDsKIH0gICAgCiAgICAgCitKU1N0YWNr
OjpKU1N0YWNrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IGNhcGFjaXR5KQorICAg
IDogbV9lbmQoMCkKKyAgICAsIG1fdG9wQ2FsbEZyYW1lKGdsb2JhbERhdGEudG9wQ2FsbEZyYW1l
KQoreworICAgIEFTU0VSVChjYXBhY2l0eSAmJiBpc1BhZ2VBbGlnbmVkKGNhcGFjaXR5KSk7CisK
KyAgICBtX3Jlc2VydmF0aW9uID0gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlKHJvdW5kVXBBbGxv
Y2F0aW9uU2l6ZShjYXBhY2l0eSAqIHNpemVvZihSZWdpc3RlciksIGNvbW1pdFNpemUpLCBPU0Fs
bG9jYXRvcjo6SlNWTVN0YWNrUGFnZXMpOworICAgIG1fZW5kID0gc3RhdGljX2Nhc3Q8UmVnaXN0
ZXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7CisgICAgbV9jb21taXRFbmQgPSBzdGF0aWNfY2Fz
dDxSZWdpc3Rlcio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsKKworICAgIGNoYXIqIHJlc2VydmF0
aW9uRW5kID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKSArIG1fcmVz
ZXJ2YXRpb24uc2l6ZSgpOworICAgIGNoYXIqIHVzZWFibGVFbmQgPSByZXNlcnZhdGlvbkVuZCAt
IGNvbW1pdFNpemU7CisgICAgZGlzYWxsb3dVc2VPZkV4Y2VwdGlvblJlc2VydmUocmVpbnRlcnBy
ZXRfY2FzdDxSZWdpc3Rlcio+KHVzZWFibGVFbmQpKTsKKworICAgIG1fdG9wQ2FsbEZyYW1lID0g
MDsKK30KKwogSlNTdGFjazo6fkpTU3RhY2soKQogewogICAgIHZvaWQqIGJhc2UgPSBtX3Jlc2Vy
dmF0aW9uLmJhc2UoKTsKQEAgLTUyLDE1ICs3MCwyMiBAQCBKU1N0YWNrOjp+SlNTdGFjaygpCiAK
IGJvb2wgSlNTdGFjazo6Z3Jvd1Nsb3dDYXNlKFJlZ2lzdGVyKiBuZXdFbmQpCiB7CisgICAgLy8g
SWYgd2UgaGF2ZSBhbHJlYWR5IGNvbW1pdHRlZCBlbm91Z2ggbWVtb3J5IHRvIHNhdGlzZnkgdGhp
cyByZXF1ZXN0LAorICAgIC8vIGp1c3QgdXBkYXRlIHRoZSBlbmQgcG9pbnRlciBhbmQgcmV0dXJu
LgogICAgIGlmIChuZXdFbmQgPD0gbV9jb21taXRFbmQpIHsKICAgICAgICAgbV9lbmQgPSBuZXdF
bmQ7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIC8vIENvbXB1dGUgdGhlIGNo
dW5rIHNpemUgb2YgYWRkaXRpb25hbCBtZW1vcnkgdG8gY29tbWl0LCBhbmQgc2VlIGlmIHdlCisg
ICAgLy8gaGF2ZSBpdCBpcyBzdGlsbCB3aXRoaW4gb3VyIGJ1ZGdldC4gSWYgbm90LCB3ZSdsbCBm
YWlsIHRvIGdyb3cgYW5kCisgICAgLy8gcmV0dXJuIGZhbHNlLgogICAgIGxvbmcgZGVsdGEgPSBy
b3VuZFVwQWxsb2NhdGlvblNpemUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obmV3RW5kKSAtIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fY29tbWl0RW5kKSwgY29tbWl0U2l6ZSk7Ci0gICAgaWYg
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fY29tbWl0RW5kKSArIGRlbHRhID4gc3RhdGljX2Nh
c3Q8Y2hhcio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKSArIG1fcmVzZXJ2YXRpb24uc2l6ZSgpKQor
ICAgIGlmIChyZWludGVycHJldF9jYXN0PGNoYXIqPihtX2NvbW1pdEVuZCkgKyBkZWx0YSA+IHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fdXNlYWJsZUVuZCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAorICAgIC8vIE90aGVyd2lzZSwgdGhlIGdyb3d0aCBpcyBzdGlsbCB3aXRoaW4gb3VyIGJ1
ZGdldC4gR28gYWhlYWQgYW5kIGNvbW1pdAorICAgIC8vIGl0IGFuZCByZXR1cm4gdHJ1ZS4KICAg
ICBtX3Jlc2VydmF0aW9uLmNvbW1pdChtX2NvbW1pdEVuZCwgZGVsdGEpOwogICAgIGFkZFRvQ29t
bWl0dGVkQnl0ZUNvdW50KGRlbHRhKTsKICAgICBtX2NvbW1pdEVuZCA9IHJlaW50ZXJwcmV0X2Nh
c3RfcHRyPFJlZ2lzdGVyKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9jb21taXRFbmQpICsg
ZGVsdGEpOwpAQCAtNzAsMTIgKzk1LDEyIEBAIGJvb2wgSlNTdGFjazo6Z3Jvd1Nsb3dDYXNlKFJl
Z2lzdGVyKiBuZXcKIAogdm9pZCBKU1N0YWNrOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25z
ZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCiB7Ci0gICAgY29uc2VydmF0aXZlUm9v
dHMuYWRkKGJlZ2luKCksIGVuZCgpKTsKKyAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4o
KSwgZ2V0VG9wT2ZTdGFjaygpKTsKIH0KIAogdm9pZCBKU1N0YWNrOjpnYXRoZXJDb25zZXJ2YXRp
dmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMsIEpJVFN0dWJSb3V0
aW5lU2V0JiBqaXRTdHViUm91dGluZXMsIERGR0NvZGVCbG9ja3MmIGRmZ0NvZGVCbG9ja3MpCiB7
Ci0gICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCksIGVuZCgpLCBqaXRTdHViUm91dGlu
ZXMsIGRmZ0NvZGVCbG9ja3MpOworICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBn
ZXRUb3BPZlN0YWNrKCksIGppdFN0dWJSb3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7CiB9CiAKIHZv
aWQgSlNTdGFjazo6cmVsZWFzZUV4Y2Vzc0NhcGFjaXR5KCkKQEAgLTEwNCw0ICsxMjksMzYgQEAg
dm9pZCBKU1N0YWNrOjphZGRUb0NvbW1pdHRlZEJ5dGVDb3VudChsbwogICAgIGNvbW1pdHRlZEJ5
dGVzQ291bnQgKz0gYnl0ZUNvdW50OwogfQogCitSZWdpc3RlciogSlNTdGFjazo6YWxsb3dVc2VP
ZkV4Y2VwdGlvblJlc2VydmUoKQoreworICAgIFJlZ2lzdGVyKiBvbGRVc2VhYmxlRW5kID0gbV91
c2VhYmxlRW5kOworICAgIGNoYXIqIHJlc2VydmF0aW9uRW5kID0gc3RhdGljX2Nhc3Q8Y2hhcio+
KG1fcmVzZXJ2YXRpb24uYmFzZSgpKSArIG1fcmVzZXJ2YXRpb24uc2l6ZSgpOworICAgIG1fdXNl
YWJsZUVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPihyZXNlcnZhdGlvbkVuZCk7Cisg
ICAgcmV0dXJuIG9sZFVzZWFibGVFbmQ7Cit9CisKK3ZvaWQgSlNTdGFjazo6ZGlzYWxsb3dVc2VP
ZkV4Y2VwdGlvblJlc2VydmUoUmVnaXN0ZXIqIG9sZFVzZWFibGVFbmQpCit7CisgICAgQVNTRVJU
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9sZFVzZWFibGVFbmQpID4gc3RhdGljX2Nhc3Q8Y2hh
cio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKSk7CisgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KG9sZFVzZWFibGVFbmQpIDwgc3RhdGljX2Nhc3Q8Y2hhcio+KG1fcmVzZXJ2YXRpb24u
YmFzZSgpKSArIG1fcmVzZXJ2YXRpb24uc2l6ZSgpKTsKKyAgICBtX3VzZWFibGVFbmQgPSBvbGRV
c2VhYmxlRW5kOworCisgICAgaWYgKG1fZW5kID4gbV91c2VhYmxlRW5kKSB7CisgICAgICAgIEFT
U0VSVChtX3RvcENhbGxGcmFtZS0+ZnJhbWVFeHRlbnQoKSA8IG1fdXNlYWJsZUVuZCk7CisgICAg
ICAgIHNocmluayhtX3VzZWFibGVFbmQpOworICAgIH0KK30KKworCitKU1N0YWNrOjpFeGNlcHRp
b25SZXNlcnZlRW5hYmxlcjo6RXhjZXB0aW9uUmVzZXJ2ZUVuYWJsZXIoRXhlY1N0YXRlKiBleGVj
KQorICAgIDogbV9zdGFjayhleGVjLT5pbnRlcnByZXRlcigpLT5zdGFjaygpKQoreworICAgIG1f
b2xkVXNlYWJsZUVuZCA9IG1fc3RhY2suYWxsb3dVc2VPZkV4Y2VwdGlvblJlc2VydmUoKTsKK30K
KworSlNTdGFjazo6RXhjZXB0aW9uUmVzZXJ2ZUVuYWJsZXI6On5FeGNlcHRpb25SZXNlcnZlRW5h
YmxlcigpCit7CisgICAgbV9zdGFjay5kaXNhbGxvd1VzZU9mRXhjZXB0aW9uUmVzZXJ2ZShtX29s
ZFVzZWFibGVFbmQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaAkocmV2aXNpb24gMTMxMjY0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsMTUgKzMxLDIyIEBACiAKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgi
CiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2Uu
aD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFnZVJlc2Vy
dmF0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ZNVGFncy5oPgogCisjaWYgIWRlZmluZWQoTkRFQlVH
KSAmJiAhZGVmaW5lZChFTkFCTEVfREVCVUdfSlNTVEFDSykKKyNkZWZpbmUgRU5BQkxFX0RFQlVH
X0pTU1RBQ0sgMQorI2VuZGlmCisKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQ29uc2Vy
dmF0aXZlUm9vdHM7CiAgICAgY2xhc3MgREZHQ29kZUJsb2NrczsKKyAgICBjbGFzcyBFeGVjU3Rh
dGU7CiAgICAgY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CisgICAgY2xhc3MgSlNHbG9iYWxEYXRh
OwogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIGNsYXNzIEpTU3RhY2sg
ewpAQCAtNjEsNyArNjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gQWxsb3cgOGsg
b2YgZXhjZXNzIHJlZ2lzdGVycyBiZWZvcmUgd2Ugc3RhcnQgdHJ5aW5nIHRvIHJlYXAgdGhlIHN0
YWNrCiAgICAgICAgIHN0YXRpYyBjb25zdCBwdHJkaWZmX3QgbWF4RXhjZXNzQ2FwYWNpdHkgPSA4
ICogMTAyNDsKIAotICAgICAgICBKU1N0YWNrKHNpemVfdCBjYXBhY2l0eSA9IGRlZmF1bHRDYXBh
Y2l0eSk7CisgICAgICAgIEpTU3RhY2soSlNHbG9iYWxEYXRhJiwgc2l6ZV90IGNhcGFjaXR5ID0g
ZGVmYXVsdENhcGFjaXR5KTsKICAgICAgICAgfkpTU3RhY2soKTsKICAgICAgICAgCiAgICAgICAg
IHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKQEAgLTcy
LDcgKzc5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gZW5kKCkgLSBiZWdpbigpOyB9CiAKICAgICAgICAgYm9vbCBncm93KFJlZ2lzdGVy
Kik7Ci0gICAgICAgIHZvaWQgc2hyaW5rKFJlZ2lzdGVyKik7CiAgICAgICAgIAogICAgICAgICBz
dGF0aWMgc2l6ZV90IGNvbW1pdHRlZEJ5dGVDb3VudCgpOwogICAgICAgICBzdGF0aWMgdm9pZCBp
bml0aWFsaXplVGhyZWFkaW5nKCk7CkBAIC04MiwyNiArODgsNTggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICByZXR1cm4gJm1fZW5kOwogICAgICAgICB9CiAKKyAgICAgICAgUmVnaXN0
ZXIqIGdldFRvcE9mRnJhbWUoQ2FsbEZyYW1lKik7CisgICAgICAgIFJlZ2lzdGVyKiBnZXRTdGFy
dE9mRnJhbWUoQ2FsbEZyYW1lKik7CisgICAgICAgIFJlZ2lzdGVyKiBnZXRUb3BPZlN0YWNrKCk7
CisKKyAgICAgICAgQ2FsbEZyYW1lKiBwdXNoRnJhbWUoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwg
Y2xhc3MgQ29kZUJsb2NrKiwKKyAgICAgICAgICAgIEpTU2NvcGUqLCBpbnQgYXJnc0NvdW50LCBK
U09iamVjdCogY2FsbGVlKTsKKworICAgICAgICB2b2lkIHBvcEZyYW1lKENhbGxGcmFtZSopOwor
CisgICAgICAgIGNsYXNzIEV4Y2VwdGlvblJlc2VydmVFbmFibGVyIHsKKyAgICAgICAgcHVibGlj
OgorICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgRXhjZXB0aW9uUmVzZXJ2ZUVuYWJsZXIo
RXhlY1N0YXRlKik7CisgICAgICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB+RXhjZXB0aW9uUmVz
ZXJ2ZUVuYWJsZXIoKTsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpTU3RhY2smIG1f
c3RhY2s7CisgICAgICAgICAgICBSZWdpc3RlciogbV9vbGRVc2VhYmxlRW5kOworICAgICAgICB9
OworCisjaWYgRU5BQkxFKERFQlVHX0pTU1RBQ0spCisgICAgICAgIHZvaWQgaW5zdGFsbEZlbmNl
KENhbGxGcmFtZSosIGNvbnN0IGNoYXIgKmZ1bmN0aW9uID0gIiIsIGludCBsaW5lTm8gPSAwKTsK
KyAgICAgICAgdm9pZCB2YWxpZGF0ZUZlbmNlKENhbGxGcmFtZSosIGNvbnN0IGNoYXIgKmZ1bmN0
aW9uID0gIiIsIGludCBsaW5lTm8gPSAwKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBGZW5j
ZVNpemUgPSA0OworI2Vsc2UgLy8gIUVOQUJMRShERUJVR19KU1NUQUNLKQorICAgICAgICB2b2lk
IGluc3RhbGxGZW5jZShDYWxsRnJhbWUqLCBjb25zdCBjaGFyKiA9ICIiLCBpbnQgPSAwKSB7IH0K
KyAgICAgICAgdm9pZCB2YWxpZGF0ZUZlbmNlKENhbGxGcmFtZSosIGNvbnN0IGNoYXIqID0gIiIs
IGludCA9IDApIHsgfQorI2VuZGlmIC8vICFFTkFCTEUoREVCVUdfSlNTVEFDSykKKwogICAgIHBy
aXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisjaWYg
RU5BQkxFKERFQlVHX0pTU1RBQ0spCisgICAgICAgIHN0YXRpYyBKU1ZhbHVlIGdlbmVyYXRlRmVu
Y2VWYWx1ZShzaXplX3QgYXJnSW5kZXgpOworICAgICAgICB2b2lkIGluc3RhbGxUcmFwc0FmdGVy
RnJhbWUoQ2FsbEZyYW1lKik7CisjZWxzZQorICAgICAgICB2b2lkIGluc3RhbGxUcmFwc0FmdGVy
RnJhbWUoQ2FsbEZyYW1lKikgeyB9CisjZW5kaWYKIAogICAgICAgICBib29sIGdyb3dTbG93Q2Fz
ZShSZWdpc3RlciopOworICAgICAgICB2b2lkIHNocmluayhSZWdpc3RlciopOwogICAgICAgICB2
b2lkIHJlbGVhc2VFeGNlc3NDYXBhY2l0eSgpOwogICAgICAgICB2b2lkIGFkZFRvQ29tbWl0dGVk
Qnl0ZUNvdW50KGxvbmcpOworCisgICAgICAgIFJlZ2lzdGVyKiBhbGxvd1VzZU9mRXhjZXB0aW9u
UmVzZXJ2ZSgpOworICAgICAgICB2b2lkIGRpc2FsbG93VXNlT2ZFeGNlcHRpb25SZXNlcnZlKFJl
Z2lzdGVyKiBvbGRVc2VhYmxlRW5kKTsKKwogICAgICAgICBSZWdpc3RlciogbV9lbmQ7CiAgICAg
ICAgIFJlZ2lzdGVyKiBtX2NvbW1pdEVuZDsKKyAgICAgICAgUmVnaXN0ZXIqIG1fdXNlYWJsZUVu
ZDsKICAgICAgICAgUGFnZVJlc2VydmF0aW9uIG1fcmVzZXJ2YXRpb247Ci0gICAgfTsKLQotICAg
IGlubGluZSBKU1N0YWNrOjpKU1N0YWNrKHNpemVfdCBjYXBhY2l0eSkKLSAgICAgICAgOiBtX2Vu
ZCgwKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGNhcGFjaXR5ICYmIGlzUGFnZUFsaWduZWQoY2Fw
YWNpdHkpKTsKKyAgICAgICAgQ2FsbEZyYW1lKiYgbV90b3BDYWxsRnJhbWU7CiAKLSAgICAgICAg
bV9yZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZShyb3VuZFVwQWxsb2NhdGlv
blNpemUoY2FwYWNpdHkgKiBzaXplb2YoUmVnaXN0ZXIpLCBjb21taXRTaXplKSwgT1NBbGxvY2F0
b3I6OkpTVk1TdGFja1BhZ2VzKTsKLSAgICAgICAgbV9lbmQgPSBzdGF0aWNfY2FzdDxSZWdpc3Rl
cio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsKLSAgICAgICAgbV9jb21taXRFbmQgPSBzdGF0aWNf
Y2FzdDxSZWdpc3Rlcio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsKLSAgICB9CisgICAgICAgIGZy
aWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisgICAgICAgIGZyaWVuZCBjbGFzcyBT
dGFja092ZXJmbG93UmVzZXJ2ZUVuYWJsZXI7CisgICAgfTsKIAogICAgIGlubGluZSB2b2lkIEpT
U3RhY2s6OnNocmluayhSZWdpc3RlciogbmV3RW5kKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrSW5saW5lZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrSW5saW5lZC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2tJbmxpbmVk
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNTdGFja0lubGluZWRfaAorI2RlZmlu
ZSBKU1N0YWNrSW5saW5lZF9oCisKKyNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJD
b2RlQmxvY2suaCIKKyNpbmNsdWRlICJKU1N0YWNrLmgiCisjaW5jbHVkZSA8d3RmL1VudXNlZFBh
cmFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisKK2lubGluZSBSZWdpc3RlciogSlNTdGFjazo6
Z2V0VG9wT2ZGcmFtZShDYWxsRnJhbWUqIGZyYW1lKQoreworICAgIGlmIChVTkxJS0VMWSghZnJh
bWUpKQorICAgICAgICByZXR1cm4gYmVnaW4oKTsKKyAgICByZXR1cm4gZnJhbWUtPmZyYW1lRXh0
ZW50KCk7Cit9CisKK2lubGluZSBSZWdpc3RlciogSlNTdGFjazo6Z2V0VG9wT2ZTdGFjaygpCit7
CisgICAgcmV0dXJuIGdldFRvcE9mRnJhbWUobV90b3BDYWxsRnJhbWUpOworfQorCitpbmxpbmUg
UmVnaXN0ZXIqIEpTU3RhY2s6OmdldFN0YXJ0T2ZGcmFtZShDYWxsRnJhbWUqIGZyYW1lKQorewor
ICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBmcmFtZS0+Y2FsbGVyRnJhbWVOb0ZsYWdzKCk7
CisgICAgcmV0dXJuIGdldFRvcE9mRnJhbWUoY2FsbGVyRnJhbWUpOworfQorCitpbmxpbmUgQ2Fs
bEZyYW1lKiBKU1N0YWNrOjpwdXNoRnJhbWUoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwKKyAgICBj
bGFzcyBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNTY29wZSogc2NvcGUsIGludCBhcmdzQ291bnQs
IEpTT2JqZWN0KiBjYWxsZWUpCit7CisgICAgQVNTRVJUKCEhc2NvcGUpOworICAgIFJlZ2lzdGVy
KiBvbGRFbmQgPSBnZXRUb3BPZlN0YWNrKCk7CisKKyAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZl
IGVub3VnaCBzcGFjZSBmb3IgdGhlIHBhcmFtZXRlcnM6CisgICAgc2l6ZV90IHBhZGRlZEFyZ3ND
b3VudCA9IGFyZ3NDb3VudDsKKyAgICBpZiAoY29kZUJsb2NrKSB7CisgICAgICAgIHNpemVfdCBu
dW1QYXJhbWV0ZXJzID0gY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CisgICAgICAgIGlmIChw
YWRkZWRBcmdzQ291bnQgPCBudW1QYXJhbWV0ZXJzKQorICAgICAgICAgICAgcGFkZGVkQXJnc0Nv
dW50ID0gbnVtUGFyYW1ldGVyczsKKyAgICB9CisKKyAgICBSZWdpc3RlciogbmV3Q2FsbEZyYW1l
U2xvdCA9IG9sZEVuZCArIHBhZGRlZEFyZ3NDb3VudCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
clNpemU7CisjaWYgRU5BQkxFKERFQlVHX0pTU1RBQ0spCisgICAgbmV3Q2FsbEZyYW1lU2xvdCAr
PSBKU1N0YWNrOjpGZW5jZVNpemU7CisjZW5kaWYKKyAgICBSZWdpc3RlciogbmV3RW5kID0gbmV3
Q2FsbEZyYW1lU2xvdDsKKyAgICBpZiAoISFjb2RlQmxvY2spCisgICAgICAgIG5ld0VuZCArPSBj
b2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOworCisgICAgLy8gRW5zdXJlIHRoYXQgd2Ug
aGF2ZSB0aGUgbmVlZGVkIHN0YWNrIGNhcGFjaXR5IHRvIHB1c2ggdGhlIG5ldyBmcmFtZToKKyAg
ICBpZiAoIWdyb3cobmV3RW5kKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBDb21wdXRl
IHRoZSBhZGRyZXNzIG9mIHRoZSBuZXcgZnJhbWUgZm9yIHRoaXMgaW52b2NhdGlvbjoKKyAgICBD
YWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKG5ld0NhbGxGcmFtZVNs
b3QpOworICAgIEFTU0VSVCghIW5ld0NhbGxGcmFtZSk7CisKKyAgICAvLyBUaGUgY2FsbGVyIGZy
YW1lIHNob3VsZCBhbHdheXMgYmUgdGhlIHJlYWwgcHJldmlvdXMgZnJhbWUgb24gdGhlIHN0YWNr
LAorICAgIC8vIGFuZCBub3QgYSBwb3RlbnRpYWwgR2xvYmFsRXhlYyB0aGF0IHdhcyBwYXNzZWQg
aW4uIFBvaW50IGNhbGxlckZyYW1lIHRvCisgICAgLy8gdGhlIHRvcCBmcmFtZSBvbiB0aGUgc3Rh
Y2suCisgICAgY2FsbGVyRnJhbWUgPSBtX3RvcENhbGxGcmFtZTsKKworICAgIC8vIEluaXRpYWxp
emUgdGhlIGZyYW1lIGhlYWRlcjoKKyAgICBuZXdDYWxsRnJhbWUtPmluaXQoY29kZUJsb2NrLCAw
LCBzY29wZSwKKyAgICAgICAgY2FsbGVyRnJhbWUtPmFkZEhvc3RDYWxsRnJhbWVGbGFnKCksIGFy
Z3NDb3VudCwgY2FsbGVlKTsKKworICAgIEFTU0VSVCghIW5ld0NhbGxGcmFtZS0+c2NvcGUoKSk7
CisKKyAgICAvLyBQYWQgYWRkaXRpb25hbCBhcmdzIGlmIG5lZWRlZDoKKyAgICAvLyBOb3RlOiB3
ZSBuZWVkIHRvIHN1YnRyYWN0IDEgZnJvbSBhcmdzQ291bnQgYW5kIHBhZGRlZEFyZ3NDb3VudCB0
bworICAgIC8vIGV4Y2x1ZGUgdGhlIHRoaXMgcG9pbnRlci4KKyAgICBmb3IgKHNpemVfdCBpID0g
YXJnc0NvdW50LTE7IGkgPCBwYWRkZWRBcmdzQ291bnQtMTsgKytpKQorICAgICAgICBuZXdDYWxs
RnJhbWUtPnNldEFyZ3VtZW50KGksIGpzVW5kZWZpbmVkKCkpOworCisgICAgaW5zdGFsbEZlbmNl
KG5ld0NhbGxGcmFtZSwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisgICAgdmFsaWRhdGVGZW5j
ZShuZXdDYWxsRnJhbWUsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworICAgIGluc3RhbGxUcmFw
c0FmdGVyRnJhbWUobmV3Q2FsbEZyYW1lKTsKKworICAgIC8vIFB1c2ggdGhlIG5ldyBmcmFtZToK
KyAgICBtX3RvcENhbGxGcmFtZSA9IG5ld0NhbGxGcmFtZTsKKworICAgIHJldHVybiBuZXdDYWxs
RnJhbWU7Cit9CisKK2lubGluZSB2b2lkIEpTU3RhY2s6OnBvcEZyYW1lKENhbGxGcmFtZSogZnJh
bWUpCit7CisgICAgdmFsaWRhdGVGZW5jZShmcmFtZSwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7
CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGZyYW1lLT5jYWxsZXJGcmFtZU5vRmxhZ3Mo
KTsKKworICAgIC8vIFBvcCB0byB0aGUgY2FsbGVyOgorICAgIG1fdG9wQ2FsbEZyYW1lID0gY2Fs
bGVyRnJhbWU7CisKKyAgICAvLyBJZiB3ZSBhcmUgcG9wcGluZyB0aGUgdmVyeSBmaXJzdCBmcmFt
ZSBmcm9tIHRoZSBzdGFjayBpLmUuIG5vIG1vcmUKKyAgICAvLyBmcmFtZXMgYmVmb3JlIHRoaXMs
IHRoZW4gd2UgY2FuIG5vdyBzYWZlbHkgc2hyaW5rIHRoZSBzdGFjay4gSW4KKyAgICAvLyB0aGlz
IGNhc2UsIHdlJ3JlIHNocmlua2luZyBhbGwgdGhlIHdheSB0byB0aGUgYmVnaW5uaW5nIHNpbmNl
IHRoZXJlCisgICAgLy8gYXJlIG5vIG1vcmUgZnJhbWVzIG9uIHRoZSBzdGFjay4KKyAgICBpZiAo
IWNhbGxlckZyYW1lKQorICAgICAgICBzaHJpbmsoYmVnaW4oKSk7CisKKyAgICBpbnN0YWxsVHJh
cHNBZnRlckZyYW1lKGNhbGxlckZyYW1lKTsKK30KKworCisjaWYgRU5BQkxFKERFQlVHX0pTU1RB
Q0spCitpbmxpbmUgSlNWYWx1ZSBKU1N0YWNrOjpnZW5lcmF0ZUZlbmNlVmFsdWUoc2l6ZV90IGFy
Z0luZGV4KQoreworICAgIHVuc2lnbmVkIGZlbmNlQml0cyA9IDB4ZmFjZWJhZDAgfCAoKGFyZ0lu
ZGV4KzEpICYgMHhmKTsKKyAgICBKU1ZhbHVlIGZlbmNlVmFsdWUgPSBKU1ZhbHVlKGZlbmNlQml0
cyk7CisgICAgcmV0dXJuIGZlbmNlVmFsdWU7Cit9CisKKy8vIFRoZSBKU1N0YWNrIGZlbmNlcyBt
ZWNoYW5pc20gd29ya3MgYXMgZm9sbG93czoKKy8vIDEuIEEgZmVuY2UgaXMgYSBudW1iZXIgKEpT
U3RhY2s6OkZlbmNlU2l6ZSkgb2YgSlNWYWx1ZXMgdGhhdCBhcmUgaW5pdGlhbGl6ZWQKKy8vICAg
IHdpdGggdmFsdWVzIGdlbmVyYXRlZCBieSBKU1N0YWNrOjpnZW5lcmF0ZUZlbmNlVmFsdWUoKS4K
Ky8vIDIuIFdoZW4gcHVzaEZyYW1lKCkgaXMgY2FsbGVkLCB0aGUgZmVuY2UgaXMgaW5zdGFsbGVk
IGFmdGVyIHRoZSBtYXggZXh0ZW50CisvLyAgICBvZiB0aGUgcHJldmlvdXMgdG9wQ2FsbEZyYW1l
IGFuZCB0aGUgbGFzdCBhcmcgb2YgdGhlIG5ldyBmcmFtZToKKy8vCisvLyAgICAgICAgICAgICAg
ICAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy8vICAgICAg
ICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAor
Ly8gICAgICAgICAgICAgICAgICAgICB8IEZyYW1lIEhlYWRlciBvZiBwcmV2aW91cyBmcmFtZSAg
ICAgICB8CisvLyAgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLXwKKy8vICAgIHRvcENhbGxGcmFtZSAtLT4gfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfAorLy8gICAgICAgICAgICAgICAgICAgICB8IExvY2FscyBv
ZiBwcmV2aW91cyBmcmFtZSAgICAgICAgICAgICB8CisvLyAgICAgICAgICAgICAgICAgICAgIHwt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKy8vICAgICAgICAgICAgICAg
ICAgICAgfCAqKiogdGhlIEZlbmNlICoqKiAgICAgICAgICAgICAgICAgICAgfAorLy8gICAgICAg
ICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Cisv
LyAgICAgICAgICAgICAgICAgICAgIHwgQXJncyBvZiBuZXcgZnJhbWUgICAgICAgICAgICAgICAg
ICAgIHwKKy8vICAgICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tfAorLy8gICAgICAgICAgICAgICAgICAgICB8IEZyYW1lIEhlYWRlciBvZiBu
ZXcgZnJhbWUgICAgICAgICAgICB8CisvLyAgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKy8vICAgICAgICAgICBmcmFtZSAtLT4gfCBM
b2NhbHMgb2YgbmV3IGZyYW1lICAgICAgICAgICAgICAgICAgfAorLy8gICAgICAgICAgICAgICAg
ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisvLworLy8gMy4g
SW4gcG9wRnJhbWUoKSBhbmQgZWxzZXdoZXJlLCB3ZSBjYW4gY2FsbCBKU1N0YWNrOjp2YWxpZGF0
ZUZlbmNlKCkgdG8KKy8vICAgIGFzc2VydCB0aGF0IHRoZSBmZW5jZSBjb250YWlucyB0aGUgdmFs
dWVzIHdlIGV4cGVjdC4KKworaW5saW5lIHZvaWQgSlNTdGFjazo6aW5zdGFsbEZlbmNlKENhbGxG
cmFtZSogZnJhbWUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBpbnQgbGluZU5vKQoreworICAgIFVO
VVNFRF9QQVJBTShmdW5jdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGxpbmVObyk7CisgICAgUmVn
aXN0ZXIqIHN0YXJ0T2ZGcmFtZSA9IGdldFN0YXJ0T2ZGcmFtZShmcmFtZSk7CisKKyAgICAvLyBU
aGUgbGFzdCBhcmdJbmRleCBpcyBhdDoKKyAgICBzaXplX3QgbWF4SW5kZXggPSBmcmFtZS0+YXJn
SW5kZXhGb3JSZWdpc3RlcihzdGFydE9mRnJhbWUpICsgMTsKKyAgICBzaXplX3Qgc3RhcnRJbmRl
eCA9IG1heEluZGV4IC0gRmVuY2VTaXplOworICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4
OyBpIDwgbWF4SW5kZXg7ICsraSkgeworICAgICAgICBKU1ZhbHVlIGZlbmNlVmFsdWUgPSBnZW5l
cmF0ZUZlbmNlVmFsdWUoaSk7CisgICAgICAgIGZyYW1lLT5zZXRBcmd1bWVudChpLCBmZW5jZVZh
bHVlKTsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIEpTU3RhY2s6OnZhbGlkYXRlRmVuY2UoQ2Fs
bEZyYW1lKiBmcmFtZSwgY29uc3QgY2hhciAqZnVuY3Rpb24sIGludCBsaW5lTm8pCit7CisgICAg
VU5VU0VEX1BBUkFNKGZ1bmN0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0obGluZU5vKTsKKyAgICBB
U1NFUlQoISFmcmFtZS0+c2NvcGUoKSk7CisgICAgUmVnaXN0ZXIqIHN0YXJ0T2ZGcmFtZSA9IGdl
dFN0YXJ0T2ZGcmFtZShmcmFtZSk7CisgICAgc2l6ZV90IG1heEluZGV4ID0gZnJhbWUtPmFyZ0lu
ZGV4Rm9yUmVnaXN0ZXIoc3RhcnRPZkZyYW1lKSArIDE7CisgICAgc2l6ZV90IHN0YXJ0SW5kZXgg
PSBtYXhJbmRleCAtIEZlbmNlU2l6ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsg
aSA8IG1heEluZGV4OyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSBmZW5jZVZhbHVlID0gZ2VuZXJh
dGVGZW5jZVZhbHVlKGkpOworICAgICAgICBKU1ZhbHVlIGFjdHVhbFZhbHVlID0gZnJhbWUtPmdl
dEFyZ3VtZW50VW5zYWZlKGkpOworICAgICAgICBBU1NFUlQoZmVuY2VWYWx1ZSA9PSBhY3R1YWxW
YWx1ZSk7CisgICAgfQorfQorCisvLyBXaGVuIGRlYnVnZ2luZyB0aGUgSlNTdGFjaywgd2UgaW5z
dGFsbCBiYWQgdmFsdWVzIGFmdGVyIHRoZSBleHRlbnQgb2YgdGhlCisvLyB0b3BDYWxsRnJhbWUg
YXQgdGhlIGVuZCBvZiBwdXNoRnJhbWUoKSBhbmQgcG9wRnJhbWUoKS4gVGhlIGludGVudGlvbiBp
cworLy8gdG8gdHJpZ2dlciBjcmFzaGVzIGluIHRoZSBldmVudCB0aGF0IG1lbW9yeSBpbiB0aGlz
IHN1cHBvc2VkbHkgdW51c2VkCisvLyByZWdpb24gaXMgcmVhZCBhbmQgY29uc3VtZWQgd2l0aG91
dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24uIEFmdGVyIHRoZSB0cmFwCisvLyB3b3JkcyBhcmUgaW5z
dGFsbGVkLCB0aGUgc3RhY2sgbG9va3MgbGlrZSB0aGlzOgorLy8KKy8vICAgICAgICAgICAgICAg
ICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgfAorLy8gICAgICAgICAgICAgICAg
ICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisvLyAgICAgICAgICAgICAgICAg
ICAgIHwgRnJhbWUgSGVhZGVyIG9mIGZyYW1lICAgICAgIHwKKy8vICAgICAgICAgICAgICAgICAg
ICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorLy8gICAgdG9wQ2FsbEZyYW1lIC0t
PiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisvLyAgICAgICAgICAgICAgICAgICAg
IHwgTG9jYWxzIG9mIGZyYW1lICAgICAgICAgICAgIHwKKy8vICAgICAgICAgICAgICAgICAgICAg
fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorLy8gICAgICAgICAgICAgICAgICAgICB8
ICoqKiBUcmFwIHdvcmRzICoqKiAgICAgICAgICB8CisvLyAgICAgICAgICAgICAgICAgICAgIHwt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKy8vICAgICAgICAgICAgICAgICAgICAgfCBV
bnVzZWQgc3BhY2UgLi4uICAgICAgICAgICAgfAorLy8gICAgICAgICAgICAgICAgICAgICB8IC4u
LiAgICAgICAgICAgICAgICAgICAgICAgICB8CisKK2lubGluZSB2b2lkIEpTU3RhY2s6Omluc3Rh
bGxUcmFwc0FmdGVyRnJhbWUoQ2FsbEZyYW1lKiBmcmFtZSkKK3sKKyAgICBSZWdpc3RlciogdG9w
T2ZGcmFtZSA9IGdldFRvcE9mRnJhbWUoZnJhbWUpOworICAgIGNvbnN0IGludCBzaXplT2ZUcmFw
ID0gNjQ7CisgICAgaW50MzJfdCogc3RhcnRPZlRyYXAgPSByZWludGVycHJldF9jYXN0PGludDMy
X3QqPih0b3BPZkZyYW1lKTsKKyAgICBpbnQzMl90KiBlbmRPZlRyYXAgPSBzdGFydE9mVHJhcCAr
IHNpemVPZlRyYXA7CisgICAgaW50MzJfdCogZW5kT2ZDb21taXRlZE1lbW9yeSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8aW50MzJfdCo+KG1fY29tbWl0RW5kKTsKKworICAgIC8vIE1ha2Ugc3VyZSB3ZSdy
ZSBub3QgZXhjZWVkaW5nIHRoZSBhbW91bnQgb2YgYXZhaWxhYmxlIG1lbW9yeSB0byB3cml0ZSB0
bzoKKyAgICBpZiAoZW5kT2ZUcmFwID4gZW5kT2ZDb21taXRlZE1lbW9yeSkKKyAgICAgICAgZW5k
T2ZUcmFwID0gZW5kT2ZDb21taXRlZE1lbW9yeTsKKworICAgIC8vIExheSB0aGUgdHJhcHM6Cisg
ICAgaW50MzJfdCogcCA9IHN0YXJ0T2ZUcmFwOworICAgIHdoaWxlIChwIDwgZW5kT2ZUcmFwKQor
ICAgICAgICAqcCsrID0gMHhhYmFkY2FmZTsgLy8gQSBiYWQgd29yZCB0byB0cmlnZ2VyIGEgY3Jh
c2ggaWYgZGVyZWYnZWQuCit9CisjZW5kaWYgLy8gRU5BQkxFKERFQlVHX0pTU1RBQ0spCisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNTdGFja0lubGluZWRfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEzMTI2NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTQxLDYgKzIxNDEsOCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX25ld19m
CiAKIGlubGluZSB2b2lkKiBqaXRDb21waWxlRm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CisgICAgY2FsbEZyYW1lLT5zZXRDb2RlQmxvY2so
MCk7CisKICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2Fs
bEZyYW1lLT5jYWxsZWUoKSk7CiAgICAgQVNTRVJUKCFmdW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24o
KSk7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmpzRXhl
Y3V0YWJsZSgpOwpAQCAtMjIyMSw2ICsyMjIzLDggQEAgaW5saW5lIHZvaWQqIGxhenlMaW5rRm9y
KENhbGxGcmFtZSogY2FsbAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKICAgICBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbyA9ICZjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVC
bG9jaygpLT5nZXRDYWxsTGlua0luZm8oY2FsbEZyYW1lLT5yZXR1cm5QQygpKTsKIAorICAgIGNh
bGxGcmFtZS0+c2V0Q29kZUJsb2NrKDApOworCiAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1
bmN0aW9uKCkpCiAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2Rl
Rm9yKGtpbmQpLmFkZHJlc3NGb3JDYWxsKCk7CiAgICAgZWxzZSB7CkBAIC0yMjk3LDcgKzIzMDEs
NyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAKICAgICBFbmNv
ZGVkSlNWYWx1ZSByZXR1cm5WYWx1ZTsKICAgICB7Ci0gICAgICAgIFNhbXBsaW5nVG9vbDo6SG9z
dENhbGxSZWNvcmQgY2FsbFJlY29yZChDVElfU0FNUExFUik7CisgICAgICAgIFNhbXBsaW5nVG9v
bDo6Q2FsbFJlY29yZCBjYWxsUmVjb3JkKENUSV9TQU1QTEVSLCB0cnVlKTsKICAgICAgICAgcmV0
dXJuVmFsdWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oY2FsbEZyYW1lKTsKICAgICB9CiAK
QEAgLTI0MDUsNyArMjQwOSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVl
LCBvcF8KIAogICAgIEVuY29kZWRKU1ZhbHVlIHJldHVyblZhbHVlOwogICAgIHsKLSAgICAgICAg
U2FtcGxpbmdUb29sOjpIb3N0Q2FsbFJlY29yZCBjYWxsUmVjb3JkKENUSV9TQU1QTEVSKTsKKyAg
ICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxSZWNvcmQoQ1RJX1NBTVBMRVIsIHRy
dWUpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9u
KGNhbGxGcmFtZSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFy
c2VyLmgJKHJldmlzaW9uIDEzMTI2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4Miw3ICs4ODIsNyBAQCBwcml2YXRlOgogICAg
IAogICAgIGJvb2wgY2FuUmVjdXJzZSgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9zdGFjay5y
ZWN1cnNpb25DaGVjaygpOworICAgICAgICByZXR1cm4gbV9zdGFjay5pc1NhZmVUb1JlY3Vyc2Uo
KTsKICAgICB9CiAgICAgCiAgICAgaW50IGxhc3RUb2tlbkVuZCgpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAko
cmV2aXNpb24gMTMxMjY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0
aW9uSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Myw2ICsxNjMsNyBAQCBKU09iamVj
dCogdGhyb3dPdXRPZk1lbW9yeUVycm9yKEV4ZWNTdGF0CiAKIEpTT2JqZWN0KiB0aHJvd1N0YWNr
T3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNTdGFjazo6RXhjZXB0aW9u
UmVzZXJ2ZUVuYWJsZXIgZW5hYmxlUmVzZXJ2ZShleGVjKTsKICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYykpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9u
IDEzMTI2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBzdGF0aWMgYm9vbCBlbmFibGVB
c3NlbWJsZXIoRXhlY3V0YWJsZUFsCiB9CiAjZW5kaWYgLy8gRU5BQkxFKCFBU1NFTUJMRVIpCiAK
LUpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBl
LCBUaHJlYWRTdGFja1R5cGUgdGhyZWFkU3RhY2tUeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKK0pT
R2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlLCBI
ZWFwVHlwZSBoZWFwVHlwZSkKICAgICA6CiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKICAgICAgIGV4
ZWN1dGFibGVBbGxvY2F0b3IoKnRoaXMpLApAQCAtMTcxLDcgKzE3MSw2IEBAIEpTR2xvYmFsRGF0
YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICNlbmRpZgogICAgICwgZHluYW1pY0dsb2Jh
bE9iamVjdCgwKQogICAgICwgY2FjaGVkVVRDT2Zmc2V0KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6cXVpZXRfTmFOKCkpCi0gICAgLCBtYXhSZWVudHJ5RGVwdGgodGhyZWFkU3RhY2tUeXBl
ID09IFRocmVhZFN0YWNrVHlwZVNtYWxsID8gTWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGggOiBN
YXhMYXJnZVRocmVhZFJlZW50cnlEZXB0aCkKICAgICAsIG1fZW5hYmxlZFByb2ZpbGVyKDApCiAg
ICAgLCBtX3JlZ0V4cENhY2hlKG5ldyBSZWdFeHBDYWNoZSh0aGlzKSkKICNpZiBFTkFCTEUoUkVH
RVhQX1RSQUNJTkcpCkBAIC0xOTgsNyArMTk3LDcgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERh
dGEoR2xvYmFsRGF0YVR5cAogI2VuZGlmCiAgICAgLCBtX2luRGVmaW5lT3duUHJvcGVydHkoZmFs
c2UpCiB7Ci0gICAgaW50ZXJwcmV0ZXIgPSBuZXcgSW50ZXJwcmV0ZXI7CisgICAgaW50ZXJwcmV0
ZXIgPSBuZXcgSW50ZXJwcmV0ZXIoKnRoaXMpOwogCiAgICAgLy8gTmVlZCB0byBiZSBjYXJlZnVs
IHRvIGtlZXAgZXZlcnl0aGluZyBjb25zaXN0ZW50IGhlcmUKICAgICBKU0xvY2tIb2xkZXIgbG9j
ayh0aGlzKTsKQEAgLTMxMCwxOSArMzA5LDE5IEBAIEpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0
YSgpCiAjZW5kaWYKIH0KIAotUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IEpTR2xvYmFsRGF0YTo6
Y3JlYXRlQ29udGV4dEdyb3VwKFRocmVhZFN0YWNrVHlwZSB0eXBlLCBIZWFwVHlwZSBoZWFwVHlw
ZSkKK1Bhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBKU0dsb2JhbERhdGE6OmNyZWF0ZUNvbnRleHRH
cm91cChIZWFwVHlwZSBoZWFwVHlwZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpTR2xv
YmFsRGF0YShBUElDb250ZXh0R3JvdXAsIHR5cGUsIGhlYXBUeXBlKSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBKU0dsb2JhbERhdGEoQVBJQ29udGV4dEdyb3VwLCBoZWFwVHlwZSkpOwogfQog
Ci1QYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGUoVGhyZWFkU3Rh
Y2tUeXBlIHR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQorUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+
IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKEhlYXBUeXBlIGhlYXBUeXBlKQogewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKERlZmF1bHQsIHR5cGUsIGhlYXBUeXBlKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBKU0dsb2JhbERhdGEoRGVmYXVsdCwgaGVhcFR5cGUpKTsKIH0K
IAotUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IEpTR2xvYmFsRGF0YTo6Y3JlYXRlTGVha2VkKFRo
cmVhZFN0YWNrVHlwZSB0eXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKK1Bhc3NSZWZQdHI8SlNHbG9i
YWxEYXRhPiBKU0dsb2JhbERhdGE6OmNyZWF0ZUxlYWtlZChIZWFwVHlwZSBoZWFwVHlwZSkKIHsK
LSAgICByZXR1cm4gY3JlYXRlKHR5cGUsIGhlYXBUeXBlKTsKKyAgICByZXR1cm4gY3JlYXRlKGhl
YXBUeXBlKTsKIH0KIAogYm9vbCBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlRXhpc3RzKCkK
QEAgLTMzNSw3ICszMzQsNyBAQCBKU0dsb2JhbERhdGEmIEpTR2xvYmFsRGF0YTo6c2hhcmVkSW5z
dGFuCiAgICAgR2xvYmFsSlNMb2NrIGdsb2JhbExvY2s7CiAgICAgSlNHbG9iYWxEYXRhKiYgaW5z
dGFuY2UgPSBzaGFyZWRJbnN0YW5jZUludGVybmFsKCk7CiAgICAgaWYgKCFpbnN0YW5jZSkgewot
ICAgICAgICBpbnN0YW5jZSA9IGFkb3B0UmVmKG5ldyBKU0dsb2JhbERhdGEoQVBJU2hhcmVkLCBU
aHJlYWRTdGFja1R5cGVTbWFsbCwgU21hbGxIZWFwKSkubGVha1JlZigpOworICAgICAgICBpbnN0
YW5jZSA9IGFkb3B0UmVmKG5ldyBKU0dsb2JhbERhdGEoQVBJU2hhcmVkLCBTbWFsbEhlYXApKS5s
ZWFrUmVmKCk7CiAgICAgICAgIGluc3RhbmNlLT5tYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFk
cygpOwogICAgIH0KICAgICByZXR1cm4gKmluc3RhbmNlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDEzMTI2NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDQsMTEgKzEwNCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBkb3VibGUgaW5j
cmVtZW50OwogICAgIH07CiAKLSAgICBlbnVtIFRocmVhZFN0YWNrVHlwZSB7Ci0gICAgICAgIFRo
cmVhZFN0YWNrVHlwZUxhcmdlLAotICAgICAgICBUaHJlYWRTdGFja1R5cGVTbWFsbAotICAgIH07
Ci0KICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKIApA
QCAtMTY0LDkgKzE1OSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgYm9vbCBz
aGFyZWRJbnN0YW5jZUV4aXN0cygpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
SlNHbG9iYWxEYXRhJiBzaGFyZWRJbnN0YW5jZSgpOwogCi0gICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gY3JlYXRlKFRocmVhZFN0YWNrVHlw
ZSwgSGVhcFR5cGUgPSBTbWFsbEhlYXApOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IGNyZWF0ZUxlYWtlZChUaHJlYWRTdGFja1R5cGUs
IEhlYXBUeXBlID0gU21hbGxIZWFwKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNHbG9i
YWxEYXRhPiBjcmVhdGVDb250ZXh0R3JvdXAoVGhyZWFkU3RhY2tUeXBlLCBIZWFwVHlwZSA9IFNt
YWxsSGVhcCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPEpT
R2xvYmFsRGF0YT4gY3JlYXRlKEhlYXBUeXBlID0gU21hbGxIZWFwKTsKKyAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBjcmVhdGVMZWFrZWQo
SGVhcFR5cGUgPSBTbWFsbEhlYXApOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0dsb2Jh
bERhdGE+IGNyZWF0ZUNvbnRleHRHcm91cChIZWFwVHlwZSA9IFNtYWxsSGVhcCk7CiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIH5KU0dsb2JhbERhdGEoKTsKIAogICAgICAgICB2b2lkIG1ha2VV
c2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCkgeyBoZWFwLm1hY2hpbmVUaHJlYWRzKCkubWFrZVVz
YWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKTsgfQpAQCAtMjgyLDYgKzI3Nyw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBPd25QdHI8UGFyc2VyQXJlbmE+IHBhcnNlckFyZW5hOwogICAgICAg
ICBPd25QdHI8S2V5d29yZHM+IGtleXdvcmRzOwogICAgICAgICBJbnRlcnByZXRlciogaW50ZXJw
cmV0ZXI7CisgICAgICAgIFN0YWNrQm91bmRzIG5hdGl2ZVN0YWNrOworCiAjaWYgRU5BQkxFKEpJ
VCkKICAgICAgICAgT3duUHRyPEpJVFRodW5rcz4gaml0U3R1YnM7CiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBnZXRDVElTdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKQEAgLTM0
Niw4ICszNDMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3RyaW5nIGNhY2hlZERhdGVT
dHJpbmc7CiAgICAgICAgIGRvdWJsZSBjYWNoZWREYXRlU3RyaW5nVmFsdWU7CiAKLSAgICAgICAg
aW50IG1heFJlZW50cnlEZXB0aDsKLQogICAgICAgICBQcm9maWxlciogbV9lbmFibGVkUHJvZmls
ZXI7CiAgICAgICAgIFJlZ0V4cENhY2hlKiBtX3JlZ0V4cENhY2hlOwogICAgICAgICBCdW1wUG9p
bnRlckFsbG9jYXRvciBtX3JlZ0V4cEFsbG9jYXRvcjsKQEAgLTQ0Nyw3ICs0NDIsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOwogICAgICAgICAKLSAgICAgICAgSlNHbG9iYWxEYXRhKEdsb2JhbERhdGFU
eXBlLCBUaHJlYWRTdGFja1R5cGUsIEhlYXBUeXBlKTsKKyAgICAgICAgSlNHbG9iYWxEYXRhKEds
b2JhbERhdGFUeXBlLCBIZWFwVHlwZSk7CiAgICAgICAgIHN0YXRpYyBKU0dsb2JhbERhdGEqJiBz
aGFyZWRJbnN0YW5jZUludGVybmFsKCk7CiAgICAgICAgIHZvaWQgY3JlYXRlTmF0aXZlVGh1bmso
KTsKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuaAkocmV2aXNpb24gMTMx
MjY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUmVjdXJzaW9uQ2hl
Y2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIFN0cmluZ1Jl
Y3Vyc2lvbkNoZWNrZXJfaAogCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlIDx3
dGYvV1RGVGhyZWFkRGF0YS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDUsOCArNDYsOCBA
QCBwcml2YXRlOgogCiBpbmxpbmUgSlNWYWx1ZSBTdHJpbmdSZWN1cnNpb25DaGVja2VyOjpwZXJm
b3JtQ2hlY2soKQogewotICAgIGludCBzaXplID0gbV9leGVjLT5nbG9iYWxEYXRhKCkuc3RyaW5n
UmVjdXJzaW9uQ2hlY2tWaXNpdGVkT2JqZWN0cy5zaXplKCk7Ci0gICAgaWYgKHNpemUgPj0gTWF4
U21hbGxUaHJlYWRSZWVudHJ5RGVwdGggJiYgc2l6ZSA+PSBtX2V4ZWMtPmdsb2JhbERhdGEoKS5t
YXhSZWVudHJ5RGVwdGgpCisgICAgY29uc3QgU3RhY2tCb3VuZHMmIG5hdGl2ZVN0YWNrID0gd3Rm
VGhyZWFkRGF0YSgpLnN0YWNrKCk7CisgICAgaWYgKCFuYXRpdmVTdGFjay5pc1NhZmVUb1JlY3Vy
c2UoKSkKICAgICAgICAgcmV0dXJuIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKCk7CiAgICAgYm9v
bCBhbHJlYWR5VmlzaXRlZCA9ICFtX2V4ZWMtPmdsb2JhbERhdGEoKS5zdHJpbmdSZWN1cnNpb25D
aGVja1Zpc2l0ZWRPYmplY3RzLmFkZChtX3RoaXNPYmplY3QpLmlzTmV3RW50cnk7CiAgICAgaWYg
KGFscmVhZHlWaXNpdGVkKQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTI5MCkKKysrIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMTAtMTQgIE1h
cmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisKKyAgICAgICAgTWFrZSB0b3BDYWxsRnJh
bWUgcmVsaWFibGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05ODkyOC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAtIFJlbmFtZWQgU3RhY2tCb3VuZHM6OnJlY3Vyc2lvbkNoZWNrKCkgdG8gaXNTYWZlVG9S
ZWN1cnNlKCkuCisKKyAgICAgICAgKiB3dGYvU3RhY2tCb3VuZHMuaDoKKyAgICAgICAgKFN0YWNr
Qm91bmRzKToKKyAgICAgICAgKFdURjo6U3RhY2tCb3VuZHM6OmlzU2FmZVRvUmVjdXJzZSk6CisK
IDIwMTItMTAtMTIgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBNb3ZlIFFEYXRhU3RyZWFtIGZ1bmN0aW9ucyBpbnRvIEhpc3RvcnlJdGVtUXQuY3BwCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL1N0YWNrQm91bmRzLmgJKHJldmlzaW9uIDEzMTI2NCkKKysrIFNvdXJjZS9XVEYvd3Rm
L1N0YWNrQm91bmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDkgQEAKIG5hbWVzcGFj
ZSBXVEYgewogCiBjbGFzcyBTdGFja0JvdW5kcyB7Ci0gICAgLy8gcmVjdXJzaW9uQ2hlY2soKSAv
IHJlY3Vyc2lvbkxpbWl0KCkgdGVzdHMgKGJ5IGRlZmF1bHQpCisgICAgLy8gaXNTYWZlVG9SZWN1
cnNlKCkgLyByZWN1cnNpb25MaW1pdCgpIHRlc3RzIChieSBkZWZhdWx0KQogICAgIC8vIHRoYXQg
d2UgYXJlIGF0IGxlYXN0IHRoaXMgZmFyIGZyb20gdGhlIGVuZCBvZiB0aGUgc3RhY2suCi0gICAg
Y29uc3Qgc3RhdGljIHNpemVfdCBzX2RlZmF1bHRBdmFpbGFiaWxpdHlEZWx0YSA9IDQwOTY7Cisg
ICAgY29uc3Qgc3RhdGljIHNpemVfdCBzX2RlZmF1bHRBdmFpbGFiaWxpdHlEZWx0YSA9IDMyICog
MTAyNDsKIAogcHVibGljOgogICAgIFN0YWNrQm91bmRzKCkKQEAgLTcwLDcgKzcwLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgOiBzdGF0aWNfY2FzdDxjaGFyKj4obV9ib3VuZCkgLSBtaW5BdmFp
bGFibGVEZWx0YTsKICAgICB9CiAKLSAgICBib29sIHJlY3Vyc2lvbkNoZWNrKHNpemVfdCBtaW5B
dmFpbGFibGVEZWx0YSA9IHNfZGVmYXVsdEF2YWlsYWJpbGl0eURlbHRhKSBjb25zdAorICAgIGJv
b2wgaXNTYWZlVG9SZWN1cnNlKHNpemVfdCBtaW5BdmFpbGFibGVEZWx0YSA9IHNfZGVmYXVsdEF2
YWlsYWJpbGl0eURlbHRhKSBjb25zdAogICAgIHsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OwogICAgICAgICByZXR1cm4gaXNHcm93aW5nRG93bndhcmQoKQpJbmRleDogU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2
aXNpb24gMTMxMjkwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMTAtMTQgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUu
Y29tPgorCisgICAgICAgIE1ha2UgdG9wQ2FsbEZyYW1lIHJlbGlhYmxlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg5MjguCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBFbnN1cmUgdGhhdCB3ZSBoYXZl
IGVub3VnaCBKU1N0YWNrIHNwYWNlIGZvciBoYW5kbGluZyBleGNlcHRpb25zLgorCisgICAgICAg
ICogRm9yd2FyZGluZ0hlYWRlcnMvaW50ZXJwcmV0ZXIvSlNTdGFjay5oOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJv
bGxlcjo6ZXZhbHVhdGVJbldvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3Jp
cHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xs
ZXI6OldvcmtlclNjcmlwdENvbnRyb2xsZXIpOgorCiAyMDEyLTEwLTEyICBJbHlhIFRpa2hvbm92
c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBOTUkg
cmVtb3ZlIGhhbmQgbWFkZSBvYmplY3QgYnVpbGRlcnMgd2l0aCBhdXRvbWF0aWMgYnVpbGRlci4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2ludGVycHJldGVyL0pTU3Rh
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9pbnRl
cnByZXRlci9KU1N0YWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9pbnRlcnByZXRlci9KU1N0YWNrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9KU1N0YWNrX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0Rf
SlNTdGFja19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdGFjay5oPgorI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJ
KHJldmlzaW9uIDEzMTI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSw3ICsxODEsNyBAQCBKU0dsb2JhbERh
dGEqIEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHCiAgICAgc3RhdGljIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSA9IDA7CiAgICAgaWYgKCFnbG9iYWxEYXRhKSB7CiAgICAgICAgIFNjcmlwdENv
bnRyb2xsZXI6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKLSAgICAgICAgZ2xvYmFsRGF0YSA9IEpT
R2xvYmFsRGF0YTo6Y3JlYXRlTGVha2VkKFRocmVhZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXAp
LmxlYWtSZWYoKTsKKyAgICAgICAgZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3JlYXRlTGVh
a2VkKExhcmdlSGVhcCkubGVha1JlZigpOwogICAgICAgICBnbG9iYWxEYXRhLT50aW1lb3V0Q2hl
Y2tlci5zZXRUaW1lb3V0SW50ZXJ2YWwoMTAwMDApOyAvLyAxMCBzZWNvbmRzCiAjaWZuZGVmIE5E
RUJVRwogICAgICAgICBnbG9iYWxEYXRhLT5leGNsdXNpdmVUaHJlYWQgPSBjdXJyZW50VGhyZWFk
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9s
bGVyLmNwcAkocmV2aXNpb24gMTMxMjY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAKICNp
bmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNpbmNsdWRlIDxkZWJ1Z2dlci9EZWJ1Z2dlci5oPgog
I2luY2x1ZGUgPGhlYXAvU3Ryb25nSW5saW5lcy5oPgorI2luY2x1ZGUgPGludGVycHJldGVyL0pT
U3RhY2suaD4KICNpbmNsdWRlIDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNpbmNs
dWRlIDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5o
PgpAQCAtMTQ0LDYgKzE0NSw3IEBAIFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1
YXRlSW4KICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEV2YWx1YXRlU2NyaXB0KGNv
b2tpZSk7CiAKICAgICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikgeworICAgICAgICBKU1N0YWNr
OjpFeGNlcHRpb25SZXNlcnZlRW5hYmxlciBlbmFibGVSZXNlcnZlKGV4ZWMpOwogICAgICAgICBy
ZXBvcnRFeGNlcHRpb24oZXhlYywgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CiAgICAgICAgIG1fc291
cmNlVVJMID0gc2F2ZWRTb3VyY2VVUkw7CiAgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEzMTI2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3
ICs1NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdv
cmtlclNjcmlwdENvbnRyb2xsZXI6OldvcmtlclNjcmlwdENvbnRyb2xsZXIoV29ya2VyQ29udGV4
dCogd29ya2VyQ29udGV4dCkKLSAgICA6IG1fZ2xvYmFsRGF0YShKU0dsb2JhbERhdGE6OmNyZWF0
ZShUaHJlYWRTdGFja1R5cGVTbWFsbCkpCisgICAgOiBtX2dsb2JhbERhdGEoSlNHbG9iYWxEYXRh
OjpjcmVhdGUoKSkKICAgICAsIG1fd29ya2VyQ29udGV4dCh3b3JrZXJDb250ZXh0KQogICAgICwg
bV93b3JrZXJDb250ZXh0V3JhcHBlcigqbV9nbG9iYWxEYXRhKQogICAgICwgbV9leGVjdXRpb25G
b3JiaWRkZW4oZmFsc2UpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzEyOTApCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0xMC0xNCAg
TWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSB0b3BDYWxsRnJh
bWUgcmVsaWFibGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05ODkyOC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAtIFJlLWJhc2VsaW5lIHNvbWUgdGVzdHMgdG8gbWF0Y2ggdGhlIG5ldyBzdGFjayBkdW1w
IHJlc3VsdHMuCisKKyAgICAgICAgKiBmYXN0L2pzL2dsb2JhbC1yZWN1cnNpb24tb24tZnVsbC1z
dGFjay1leHBlY3RlZC50eHQ6CisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvY29uc29s
ZS1yZXNvdXJjZS1lcnJvcnMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGh0dHAvdGVzdHMvaW5z
cGVjdG9yL2NzcC1pbmplY3RlZC1jb250ZW50LXdhcm5pbmctY29udGFpbnMtc3RhY2t0cmFjZS1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvY3NwLWlubGluZS13
YXJuaW5nLWNvbnRhaW5zLXN0YWNrdHJhY2UtZXhwZWN0ZWQudHh0OgorCiAyMDEyLTEwLTE0ICBT
aGlueWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21p
dW1dIFVucmV2aWV3ZWQgZ2FyZGVuaW5nLCBUZXN0RXhwZWN0YXRpb25zIHVwZGF0ZWQuCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2dsb2JhbC1yZWN1cnNpb24tb24tZnVsbC1zdGFjay1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9nbG9iYWwtcmVjdXJz
aW9uLW9uLWZ1bGwtc3RhY2stZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxMzEyNjQpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2pzL2dsb2JhbC1yZWN1cnNpb24tb24tZnVsbC1zdGFjay1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzIEBACi1DT05TT0xFIE1FU1NBR0U6IAorQ09O
U09MRSBNRVNTQUdFOiBSYW5nZUVycm9yOiBNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRl
ZC4KIFRoaXMgdGVzdHMgZ2xvYmFsIGNvZGUgcmVjdXJzaW9uIHdoZW4gdGhlIEpTIHN0YWNrIGlz
IGZ1bGwuCiBQQVNTOiBFbnRlcmluZyBnbG9iYWwgY29kZSB3aXRoIGEgZnVsbCBKUyBzdGFjayBk
aWQgbm90IGNyYXNoLCBhbmQgZGlkIG5vdCBhbGxvdyBjb250aW51ZWQgcmVjdXJzaW9uLgpJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvY29uc29sZS1yZXNvdXJjZS1lcnJv
cnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL2NvbnNvbGUtcmVzb3VyY2UtZXJyb3JzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTMx
MjY0KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvY29uc29sZS1yZXNvdXJj
ZS1lcnJvcnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDUgKzQsNSBAQCBUZXN0
cyB0aGF0IGVycm9ycyB0byBsb2FkIGEgcmVzb3VyY2UgY2F1CiBHRVQgaHR0cDovLzEyNy4wLjAu
MTo4MDAwL2luc3BlY3Rvci9taXNzaW5nLmNzcyA0MDQgKE5vdCBGb3VuZCkgY29uc29sZS1yZXNv
dXJjZS1lcnJvcnMtaWZyYW1lLmh0bWw6MyBjb25zb2xlLW1lc3NhZ2UgY29uc29sZS1lcnJvci1s
ZXZlbAogR0VUIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3Ivbm9uLWV4aXN0ZW50LWlm
cmFtZS5odG1sIDQwNCAoTm90IEZvdW5kKSBub24tZXhpc3RlbnQtaWZyYW1lLmh0bWw6MSBjb25z
b2xlLW1lc3NhZ2UgY29uc29sZS1lcnJvci1sZXZlbAogR0VUIGh0dHA6Ly8xMjcuMC4wLjE6ODAw
MC9pbnNwZWN0b3Ivbm9uLWV4aXN0ZW50LXNjcmlwdC5qcyA0MDQgKE5vdCBGb3VuZCkgY29uc29s
ZS1yZXNvdXJjZS1lcnJvcnMtaWZyYW1lLmh0bWw6NCBjb25zb2xlLW1lc3NhZ2UgY29uc29sZS1l
cnJvci1sZXZlbAotR0VUIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3Ivbm9uLWV4aXN0
ZW50LXhociA0MDQgKE5vdCBGb3VuZCkgW25hdGl2ZSBjb2RlXToxc2VuZCBbbmF0aXZlIGNvZGVd
OjFsb2FkWEhSIGNvbnNvbGUtcmVzb3VyY2UtZXJyb3JzLmh0bWw6MThwZXJmb3JtQWN0aW9ucyBj
b25zb2xlLXJlc291cmNlLWVycm9ycy5odG1sOjEwZXZhbCBjb2RlZXZhbCBbbmF0aXZlIGNvZGVd
OjFldmFsdWF0ZSBbbmF0aXZlIGNvZGVdOjFfZXZhbHVhdGVPbl9ldmFsdWF0ZUFuZFdyYXBldmFs
dWF0ZShhbm9ueW1vdXMgZnVuY3Rpb24pIFtuYXRpdmUgY29kZV06MSBjb25zb2xlLW1lc3NhZ2Ug
Y29uc29sZS1lcnJvci1sZXZlbAorR0VUIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3Iv
bm9uLWV4aXN0ZW50LXhociA0MDQgKE5vdCBGb3VuZCkgW25hdGl2ZSBjb2RlXToxc2VuZCBbbmF0
aXZlIGNvZGVdOjFsb2FkWEhSIGNvbnNvbGUtcmVzb3VyY2UtZXJyb3JzLmh0bWw6MThwZXJmb3Jt
QWN0aW9ucyBjb25zb2xlLXJlc291cmNlLWVycm9ycy5odG1sOjEwZXZhbCBjb2RlZXZhbCBbbmF0
aXZlIGNvZGVdOjFldmFsdWF0ZSBbbmF0aXZlIGNvZGVdOjFfZXZhbHVhdGVPbl9ldmFsdWF0ZUFu
ZFdyYXBldmFsdWF0ZSBjb25zb2xlLW1lc3NhZ2UgY29uc29sZS1lcnJvci1sZXZlbAogCkluZGV4
OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9jc3AtaW5qZWN0ZWQtY29udGVudC13
YXJuaW5nLWNvbnRhaW5zLXN0YWNrdHJhY2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2NzcC1pbmplY3RlZC1jb250ZW50LXdhcm5p
bmctY29udGFpbnMtc3RhY2t0cmFjZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDEzMTI2NCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2NzcC1pbmplY3RlZC1jb250ZW50LXdh
cm5pbmctY29udGFpbnMtc3RhY2t0cmFjZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTE0LDUgKzE0LDQgQEAgU3RhY2sgVHJhY2U6CiAgICAgNCkgKGludGVybmFsIHNjcmlwdCkgLyBf
ZXZhbHVhdGVPbiAvIChsaW5lIG51bWJlcikgLyAoY29sdW1uIG51bWJlcikKICAgICA1KSAoaW50
ZXJuYWwgc2NyaXB0KSAvIF9ldmFsdWF0ZUFuZFdyYXAgLyAobGluZSBudW1iZXIpIC8gKGNvbHVt
biBudW1iZXIpCiAgICAgNikgKGludGVybmFsIHNjcmlwdCkgLyBldmFsdWF0ZSAvIChsaW5lIG51
bWJlcikgLyAoY29sdW1uIG51bWJlcikKLSAgICA3KSBbbmF0aXZlIGNvZGVdIC8gIC8gMCAvIDAK
IApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvY3NwLWlubGluZS13YXJu
aW5nLWNvbnRhaW5zLXN0YWNrdHJhY2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2NzcC1pbmxpbmUtd2FybmluZy1jb250YWlucy1z
dGFja3RyYWNlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTMxMjY0KQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9pbnNwZWN0b3IvY3NwLWlubGluZS13YXJuaW5nLWNvbnRhaW5zLXN0YWNrdHJh
Y2UtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNCw1ICsxNCw0IEBAIFN0YWNrIFRy
YWNlOgogICAgIDUpIChpbnRlcm5hbCBzY3JpcHQpIC8gX2V2YWx1YXRlT24gLyAobGluZSBudW1i
ZXIpIC8gKGNvbHVtbiBudW1iZXIpCiAgICAgNikgKGludGVybmFsIHNjcmlwdCkgLyBfZXZhbHVh
dGVBbmRXcmFwIC8gKGxpbmUgbnVtYmVyKSAvIChjb2x1bW4gbnVtYmVyKQogICAgIDcpIChpbnRl
cm5hbCBzY3JpcHQpIC8gZXZhbHVhdGUgLyAobGluZSBudW1iZXIpIC8gKGNvbHVtbiBudW1iZXIp
Ci0gICAgOCkgW25hdGl2ZSBjb2RlXSAvICAvIDAgLyAwCiAK
</data>
<flag name="commit-queue"
          id="181670"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169560</attachid>
            <date>2012-10-18 23:41:48 -0700</date>
            <delta_ts>2012-10-22 17:29:15 -0700</delta_ts>
            <desc>Draft 2: not ready for review yet, just testing fix for ews reported issues.</desc>
            <filename>bug-98928.patch</filename>
            <type>text/plain</type>
            <size>133320</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5vcmRlcgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUub3JkZXIJKHJldmlz
aW9uIDEzMTg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5vcmRl
cgkod29ya2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIF9KU0dsb2JhbENvbnRleHRDcmVh
dGUKIF9fWk4zSlNDNkpTTG9jazRsb2NrRU5TXzE0SlNMb2NrQmVoYXZpb3JFCiBfX1pOM0pTQ0wx
N2NyZWF0ZUpTTG9ja0NvdW50RXYKIF9fWk4zSlNDMTJKU0dsb2JhbERhdGExNHNoYXJlZEluc3Rh
bmNlRXYKLV9fWk4zSlNDMTJKU0dsb2JhbERhdGFDMkVOUzBfMTRHbG9iYWxEYXRhVHlwZUVOU18x
NVRocmVhZFN0YWNrVHlwZUUKK19fWk4zSlNDMTJKU0dsb2JhbERhdGFDMkVOUzBfMTRHbG9iYWxE
YXRhVHlwZUVOU184SGVhcFR5cGVFCiBfX1pOM0pTQzIxY3JlYXRlSWRlbnRpZmllclRhYmxlRXYK
IF9fWk4zSlNDMTdDb21tb25JZGVudGlmaWVyc0MxRVBOU18xMkpTR2xvYmFsRGF0YUUKIF9fWk4z
SlNDMTdDb21tb25JZGVudGlmaWVyc0MyRVBOU18xMkpTR2xvYmFsRGF0YUUKQEAgLTQ0MCw3ICs0
NDAsNyBAQCBfX1pOM1dURjZzdHJ0b2RFUEtjUFBjCiBfX1pOM1dURjEwU3RyaW5nSW1wbDIyY29u
dGFpbnNPbmx5V2hpdGVzcGFjZUV2CiBfX1pOM1dURjEwU3RyaW5nSW1wbDExcmV2ZXJzZUZpbmRF
UFMwX2oKIF9fWk4zV1RGMTdlcXVhbElnbm9yaW5nQ2FzZUVQTlNfMTBTdHJpbmdJbXBsRVMxXwot
X19aTjNKU0MxMkpTR2xvYmFsRGF0YTEyY3JlYXRlTGVha2VkRU5TXzE1VGhyZWFkU3RhY2tUeXBl
RQorX19aTjNKU0MxMkpTR2xvYmFsRGF0YTEyY3JlYXRlTGVha2VkRU5TXzhIZWFwVHlwZUUKIF9f
Wk4zSlNDMjRKU09iamVjdFdpdGhHbG9iYWxPYmplY3RDMkVSTlNfMTJKU0dsb2JhbERhdGFFUE5T
XzE0SlNHbG9iYWxPYmplY3RFUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzhldmFsdWF0ZUVQTlNf
OUV4ZWNTdGF0ZUVQTlNfMTRTY29wZUNoYWluTm9kZUVSS05TXzEwU291cmNlQ29kZUVOU183SlNW
YWx1ZUUKIF9fWk4zSlNDMTdQcm9ncmFtRXhlY3V0YWJsZUMxRVBOU185RXhlY1N0YXRlRVJLTlNf
MTBTb3VyY2VDb2RlRQpAQCAtMTcwNyw3ICsxNzA3LDcgQEAgX19aTjNKU0M4SlNQYXJzZXIyMXBh
cnNlRG9XaGlsZVN0YXRlbWVudAogX19aTjNKU0NMMTZtYXRoUHJvdG9GdW5jTWluRVBOU185RXhl
Y1N0YXRlRQogX19aTjNKU0NMMjFhcnJheVByb3RvRnVuY1JldmVyc2VFUE5TXzlFeGVjU3RhdGVF
CiBfX1pOM0pTQzE3UHJvZ3JhbUV4ZWN1dGFibGUxM3Zpc2l0Q2hpbGRyZW5FUk5TXzlNYXJrU3Rh
Y2tFCi1fX1pOM0pTQzEySlNHbG9iYWxEYXRhMThjcmVhdGVDb250ZXh0R3JvdXBFTlNfMTVUaHJl
YWRTdGFja1R5cGVFCitfX1pOM0pTQzEySlNHbG9iYWxEYXRhMThjcmVhdGVDb250ZXh0R3JvdXBF
TlNfOEhlYXBUeXBlRQogX19aTjNKU0MxMkpTR2xvYmFsRGF0YTIyY2xlYXJCdWlsdGluU3RydWN0
dXJlc0V2CiBfX1pOM0pTQzRIZWFwN2Rlc3Ryb3lFdgogX19aTjNKU0M5SklUVGh1bmtzMjJjbGVh
ckhvc3RGdW5jdGlvblN0dWJzRXYKQEAgLTE4NDIsNyArMTg0Miw3IEBAIF9KU09iamVjdEhhc1By
b3BlcnR5CiBfSlNPYmplY3RHZXRQcm90b3R5cGUKIF9fWk4zSlNDOEpTT2JqZWN0MTV1bndyYXBw
ZWRPYmplY3RFdgogX19aTjNKU0MxMWNyZWF0ZUVycm9yRVBOU185RXhlY1N0YXRlRVJLTlNfN1VT
dHJpbmdFCi1fX1pOM0pTQzEySlNHbG9iYWxEYXRhNmNyZWF0ZUVOU18xNVRocmVhZFN0YWNrVHlw
ZUUKK19fWk4zSlNDMTJKU0dsb2JhbERhdGE2Y3JlYXRlRU5TXzhIZWFwVHlwZUUKIF9fWk4zSlND
OEpTT2JqZWN0MTdwdXREaXJlY3RGdW5jdGlvbkVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTBKU0Z1bmN0
aW9uRWoKIF9fWk4zSlNDMTJKU0dsb2JhbERhdGExM3N0YXJ0U2FtcGxpbmdFdgogX19aTjNKU0Mx
MUludGVycHJldGVyMTNzdGFydFNhbXBsaW5nRXYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShy
ZXZpc2lvbiAxMzE4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzQ2LDcgKzc0Niw3IEBAIGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKICAgICAvLyBOb3RlIHRoYXQgdGhlIG9wdGlvbnMgcGFyc2luZyBjYW4gYWZmZWN0IEpT
R2xvYmFsRGF0YSBjcmVhdGlvbiwgYW5kIHRodXMKICAgICAvLyBjb21lcyBmaXJzdC4KICAgICBD
b21tYW5kTGluZSBvcHRpb25zKGFyZ2MsIGFyZ3YpOwotICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+
IGdsb2JhbERhdGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0ZShUaHJlYWRTdGFja1R5cGVMYXJnZSwg
TGFyZ2VIZWFwKTsKKyAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBnbG9iYWxEYXRhID0gSlNHbG9i
YWxEYXRhOjpjcmVhdGUoTGFyZ2VIZWFwKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxE
YXRhLmdldCgpKTsKICAgICBpbnQgcmVzdWx0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdFJlZ0V4cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RSZWdFeHAuY3BwCShyZXZpc2lvbiAxMzE4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdFJlZ0V4cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5OCw3ICs0OTgsNyBAQCBzdGF0aWMg
dm9pZCBwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhCiAKIGludCByZWFsTWFpbihpbnQgYXJn
YywgY2hhcioqIGFyZ3YpCiB7Ci0gICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9
IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKFRocmVhZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOwor
ICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IGdsb2JhbERhdGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0
ZShMYXJnZUhlYXApOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEuZ2V0KCkpOwog
CiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDb250ZXh0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ29udGV4dFJlZi5jcHAJKHJldmlzaW9uIDEzMTg1OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQs
NyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogSlNDb250ZXh0R3JvdXBSZWYgSlNDb250ZXh0R3Jv
dXBDcmVhdGUoKQogewogICAgIGluaXRpYWxpemVUaHJlYWRpbmcoKTsKLSAgICByZXR1cm4gdG9S
ZWYoSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3JvdXAoVGhyZWFkU3RhY2tUeXBlU21hbGwp
LmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIHRvUmVmKEpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4
dEdyb3VwKCkubGVha1JlZigpKTsKIH0KIAogSlNDb250ZXh0R3JvdXBSZWYgSlNDb250ZXh0R3Jv
dXBSZXRhaW4oSlNDb250ZXh0R3JvdXBSZWYgZ3JvdXApCkBAIC04OSw3ICs4OSw3IEBAIEpTR2xv
YmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRleHRDcmVhdGUKIHsKICAgICBpbml0aWFsaXplVGhy
ZWFkaW5nKCk7CiAKLSAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBnbG9iYWxEYXRhID0gZ3JvdXAg
PyBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4odG9KUyhncm91cCkpIDogSlNHbG9iYWxEYXRhOjpj
cmVhdGVDb250ZXh0R3JvdXAoVGhyZWFkU3RhY2tUeXBlU21hbGwpOworICAgIFJlZlB0cjxKU0ds
b2JhbERhdGE+IGdsb2JhbERhdGEgPSBncm91cCA/IFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPih0
b0pTKGdyb3VwKSkgOiBKU0dsb2JhbERhdGE6OmNyZWF0ZUNvbnRleHRHcm91cCgpOwogCiAgICAg
QVBJRW50cnlTaGltIGVudHJ5U2hpbShnbG9iYWxEYXRhLmdldCgpLCBmYWxzZSk7CiAgICAgZ2xv
YmFsRGF0YS0+bWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCShyZXZpc2lv
biAxMzE4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMTAs
NiArMTAsOCBAQCBFWFBPUlRTCiAgICAgPz8wRHJvcEFsbExvY2tzQEpTTG9ja0BKU0NAQFFBRUBQ
QVZFeGVjU3RhdGVAMkBAWgogICAgID8/MERyb3BBbGxMb2Nrc0BKU0xvY2tASlNDQEBRQUVAUEFW
SlNHbG9iYWxEYXRhQDJAQFoKICAgICA/PzBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGVASlNDQEBR
QUVAQUFWSlNHbG9iYWxEYXRhQDFAUEFWSlNHbG9iYWxPYmplY3RAMUBAWiAKKyAgICA/PzBFcnJv
clN0YWNrUmVzZXJ2ZUVuYWJsZXJASlNTdGFja0BKU0NAQFFBRUBQQVZFeGVjU3RhdGVAMkBAWgor
ICAgID8/MUVycm9yU3RhY2tSZXNlcnZlRW5hYmxlckBKU1N0YWNrQEpTQ0BAUUFFQFhaCiAgICAg
Pz8wSW50ZXJuYWxGdW5jdGlvbkBKU0NAQElBRUBQQVZKU0dsb2JhbE9iamVjdEAxQFBBVlN0cnVj
dHVyZUAxQEBaCiAgICAgPz8wSlNHbG9iYWxPYmplY3RASlNDQEBJQUVAQUFWSlNHbG9iYWxEYXRh
QDFAUEFWU3RydWN0dXJlQDFAUEJVR2xvYmFsT2JqZWN0TWV0aG9kVGFibGVAMUBAWgogICAgID8/
MEpTTG9ja0hvbGRlckBKU0NAQFFBRUBBQVZKU0dsb2JhbERhdGFAMUBAWgpAQCAtMTE4LDEzICsx
MjAsMTMgQEAgRVhQT1JUUwogICAgID9jb252ZXJ0VVRGOFRvVVRGMTZAVW5pY29kZUBXVEZAQFlB
P0FXNENvbnZlcnNpb25SZXN1bHRAMTJAUEFQQkRQQkRQQVBBX1dQQV9XX05AWgogICAgID9jb3B5
QmFja2luZ1N0b3JlQEpTT2JqZWN0QEpTQ0BAU0FYUEFWSlNDZWxsQDJAQUFWQ29weVZpc2l0b3JA
MkBAWgogICAgID9jcmVhdGVASlNGdW5jdGlvbkBKU0NAQFNBUEFWMTJAUEFWRXhlY1N0YXRlQDJA
UEFWSlNHbG9iYWxPYmplY3RAMkBIQUJWU3RyaW5nQFdURkBAUDZJX0owQFpXNEludHJpbnNpY0Ay
QDNAWgotICAgID9jcmVhdGVASlNHbG9iYWxEYXRhQEpTQ0BAU0E/QVY/JFBhc3NSZWZQdHJAVkpT
R2xvYmFsRGF0YUBKU0NAQEBXVEZAQFc0VGhyZWFkU3RhY2tUeXBlQDJAVzRIZWFwVHlwZUAyQEBa
CisgICAgP2NyZWF0ZUBKU0dsb2JhbERhdGFASlNDQEBTQT9BVj8kUGFzc1JlZlB0ckBWSlNHbG9i
YWxEYXRhQEpTQ0BAQFdURkBAVzRIZWFwVHlwZUAyQEBaCiAgICAgP2NyZWF0ZUBPcGFxdWVKU1N0
cmluZ0BAU0E/QVY/JFBhc3NSZWZQdHJAVU9wYXF1ZUpTU3RyaW5nQEBAV1RGQEBBQlZTdHJpbmdA
M0BAWgogICAgID9jcmVhdGVAUmVnRXhwQEpTQ0BAU0FQQVYxMkBBQVZKU0dsb2JhbERhdGFAMkBB
QlZTdHJpbmdAV1RGQEBXNFJlZ0V4cEZsYWdzQDJAQFoKICAgICA/Y3JlYXRlRW1wdHlTdHJpbmdA
U21hbGxTdHJpbmdzQEpTQ0BAQUFFWFBBVkpTR2xvYmFsRGF0YUAyQEBaCiAgICAgP2NyZWF0ZUVy
cm9yQEpTQ0BAWUFQQVZKU09iamVjdEAxQFBBVkV4ZWNTdGF0ZUAxQEFCVlN0cmluZ0BXVEZAQEBa
CiAgICAgP2NyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uQEpTQ0BAWUFQQVZKU09i
amVjdEAxQFBBVkpTR2xvYmFsRGF0YUAxQEBaCi0gICAgP2NyZWF0ZUxlYWtlZEBKU0dsb2JhbERh
dGFASlNDQEBTQT9BVj8kUGFzc1JlZlB0ckBWSlNHbG9iYWxEYXRhQEpTQ0BAQFdURkBAVzRUaHJl
YWRTdGFja1R5cGVAMkBXNEhlYXBUeXBlQDJAQFoKKyAgICA/Y3JlYXRlTGVha2VkQEpTR2xvYmFs
RGF0YUBKU0NAQFNBP0FWPyRQYXNzUmVmUHRyQFZKU0dsb2JhbERhdGFASlNDQEBAV1RGQEBXNEhl
YXBUeXBlQDJAQFoKICAgICA/Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3JASlNDQEBZQVBB
VkpTT2JqZWN0QDFAUEFWRXhlY1N0YXRlQDFAQFoKICAgICA/Y3JlYXRlUmFuZ2VFcnJvckBKU0NA
QFlBUEFWSlNPYmplY3RAMUBQQVZFeGVjU3RhdGVAMUBBQlZTdHJpbmdAV1RGQEBAWgogICAgID9j
cmVhdGVSZWZlcmVuY2VFcnJvckBKU0NAQFlBUEFWSlNPYmplY3RAMUBQQVZFeGVjU3RhdGVAMUBB
QlZTdHJpbmdAV1RGQEBAWgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nh
bXBsaW5nVG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TYW1wbGluZ1Rvb2wuaAkocmV2aXNpb24gMTMxODU5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsMTcgKzIz
MCwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBTYW1wbGluZ1Rvb2wgewogICAgIHB1
YmxpYzoKICAgICAgICAgZnJpZW5kIHN0cnVjdCBDYWxsUmVjb3JkOwotICAgICAgICBmcmllbmQg
Y2xhc3MgSG9zdENhbGxSZWNvcmQ7CiAgICAgICAgIAogI2lmIEVOQUJMRShPUENPREVfU0FNUExJ
TkcpCiAgICAgICAgIGNsYXNzIENhbGxSZWNvcmQgewogICAgICAgICAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ2FsbFJlY29yZCk7CiAgICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIENhbGxS
ZWNvcmQoU2FtcGxpbmdUb29sKiBzYW1wbGluZ1Rvb2wpCisgICAgICAgICAgICBDYWxsUmVjb3Jk
KFNhbXBsaW5nVG9vbCogc2FtcGxpbmdUb29sLCBib29sIGlzSG9zdENhbGwgPSBmYWxzZSkKICAg
ICAgICAgICAgICAgICA6IG1fc2FtcGxpbmdUb29sKHNhbXBsaW5nVG9vbCkKICAgICAgICAgICAg
ICAgICAsIG1fc2F2ZWRTYW1wbGUoc2FtcGxpbmdUb29sLT5tX3NhbXBsZSkKICAgICAgICAgICAg
ICAgICAsIG1fc2F2ZWRDb2RlQmxvY2soc2FtcGxpbmdUb29sLT5tX2NvZGVCbG9jaykKICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNIb3N0Y2FsbCkKKyAgICAgICAgICAgICAg
ICAgICAgc2FtcGxpbmdUb29sLT5tX3NhbXBsZSB8PSAweDE7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIH5DYWxsUmVjb3JkKCkKQEAgLTI1NCwzMiArMjU1LDE1IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgaW50cHRyX3QgbV9zYXZlZFNhbXBsZTsKICAgICAgICAgICAgIENv
ZGVCbG9jayogbV9zYXZlZENvZGVCbG9jazsKICAgICAgICAgfTsKLSAgICAgICAgCi0gICAgICAg
IGNsYXNzIEhvc3RDYWxsUmVjb3JkIDogcHVibGljIENhbGxSZWNvcmQgewotICAgICAgICBwdWJs
aWM6Ci0gICAgICAgICAgICBIb3N0Q2FsbFJlY29yZChTYW1wbGluZ1Rvb2wqIHNhbXBsaW5nVG9v
bCkKLSAgICAgICAgICAgICAgICA6IENhbGxSZWNvcmQoc2FtcGxpbmdUb29sKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHNhbXBsaW5nVG9vbC0+bV9zYW1wbGUgfD0gMHgxOwotICAg
ICAgICAgICAgfQotICAgICAgICB9OwogI2Vsc2UKICAgICAgICAgY2xhc3MgQ2FsbFJlY29yZCB7
CiAgICAgICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDYWxsUmVjb3JkKTsKICAgICAgICAg
cHVibGljOgotICAgICAgICAgICAgQ2FsbFJlY29yZChTYW1wbGluZ1Rvb2wqKQorICAgICAgICAg
ICAgQ2FsbFJlY29yZChTYW1wbGluZ1Rvb2wqLCBib29sID0gZmFsc2UpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH07Ci0KLSAgICAgICAgY2xhc3MgSG9zdENhbGxSZWNv
cmQgOiBwdWJsaWMgQ2FsbFJlY29yZCB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIEhv
c3RDYWxsUmVjb3JkKFNhbXBsaW5nVG9vbCogc2FtcGxpbmdUb29sKQotICAgICAgICAgICAgICAg
IDogQ2FsbFJlY29yZChzYW1wbGluZ1Rvb2wpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH07Ci0jZW5kaWYgICAgICAgIAorI2VuZGlmCiAKICAgICAgICAgU2FtcGxpbmdU
b29sKEludGVycHJldGVyKiBpbnRlcnByZXRlcikKICAgICAgICAgICAgIDogbV9pbnRlcnByZXRl
cihpbnRlcnByZXRlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDEzMTg1OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMzExLDcgKzMxMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgLy8gTm9kZTo6ZW1pdENvZGUgYXNzdW1lcyB0aGF0IGRzdCwgaWYgcHJvdmlkZWQsIGlzIGVp
dGhlciBhIGxvY2FsIG9yIGEgcmVmZXJlbmNlZCB0ZW1wb3JhcnkuCiAgICAgICAgICAgICBBU1NF
UlQoIWRzdCB8fCBkc3QgPT0gaWdub3JlZFJlc3VsdCgpIHx8ICFkc3QtPmlzVGVtcG9yYXJ5KCkg
fHwgZHN0LT5yZWZDb3VudCgpKTsKICAgICAgICAgICAgIGFkZExpbmVJbmZvKG4tPmxpbmVObygp
KTsKLSAgICAgICAgICAgIHJldHVybiBtX3N0YWNrLnJlY3Vyc2lvbkNoZWNrKCkKKyAgICAgICAg
ICAgIHJldHVybiBtX3N0YWNrLmlzU2FmZVRvUmVjdXJzZSgpCiAgICAgICAgICAgICAgICAgPyBu
LT5lbWl0Qnl0ZWNvZGUoKnRoaXMsIGRzdCkKICAgICAgICAgICAgICAgICA6IGVtaXRUaHJvd0V4
cHJlc3Npb25Ub29EZWVwRXhjZXB0aW9uKCk7CiAgICAgICAgIH0KQEAgLTMyNCw3ICszMjQsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0Tm9kZUluQ29uZGl0aW9uQ29udGV4
dChFeHByZXNzaW9uTm9kZSogbiwgTGFiZWwqIHRydWVUYXJnZXQsIExhYmVsKiBmYWxzZVRhcmdl
dCwgYm9vbCBmYWxsVGhyb3VnaE1lYW5zVHJ1ZSkKICAgICAgICAgewogICAgICAgICAgICAgYWRk
TGluZUluZm8obi0+bGluZU5vKCkpOwotICAgICAgICAgICAgaWYgKG1fc3RhY2sucmVjdXJzaW9u
Q2hlY2soKSkKKyAgICAgICAgICAgIGlmIChtX3N0YWNrLmlzU2FmZVRvUmVjdXJzZSgpKQogICAg
ICAgICAgICAgICAgIG4tPmVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29udGV4dCgqdGhpcywgdHJ1
ZVRhcmdldCwgZmFsc2VUYXJnZXQsIGZhbGxUaHJvdWdoTWVhbnNUcnVlKTsKICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICBlbWl0VGhyb3dFeHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlv
bigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAxMzE4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTY1LDIwICsxMTY1LDI0IEBAIEpTQ2VsbCog
REZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBY3QKIAogSlNDZWxsKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkNyZWF0ZUFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOwogICAgIC8vIE5COiBUaGlzIG5l
ZWRzIHRvIGJlIGV4Y2VlZGluZ2x5IGNhcmVmdWwgd2l0aCB0b3AgY2FsbCBmcmFtZSB0cmFja2lu
Zywgc2luY2UgaXQKICAgICAvLyBtYXkgYmUgY2FsbGVkIGZyb20gT1NSIGV4aXQsIHdoaWxlIHRo
ZSBzdGF0ZSBvZiB0aGUgY2FsbCBzdGFjayBpcyBiaXphcnJlLgotICAgIEFyZ3VtZW50cyogcmVz
dWx0ID0gQXJndW1lbnRzOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjKTsKLSAgICBB
U1NFUlQoIWV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24pOworICAgIEFyZ3VtZW50cyogcmVz
dWx0ID0gQXJndW1lbnRzOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgQVNTRVJUKCFn
bG9iYWxEYXRhLmV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogSlNDZWxsKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUlubGluZWRBcmd1bWVudHMoCiAgICAgRXhlY1N0
YXRlKiBleGVjLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKIHsKKyAgICBKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgLy8gTkI6IFRoaXMg
bmVlZHMgdG8gYmUgZXhjZWVkaW5nbHkgY2FyZWZ1bCB3aXRoIHRvcCBjYWxsIGZyYW1lIHRyYWNr
aW5nLCBzaW5jZSBpdAogICAgIC8vIG1heSBiZSBjYWxsZWQgZnJvbSBPU1IgZXhpdCwgd2hpbGUg
dGhlIHN0YXRlIG9mIHRoZSBjYWxsIHN0YWNrIGlzIGJpemFycmUuCi0gICAgQXJndW1lbnRzKiBy
ZXN1bHQgPSBBcmd1bWVudHM6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMsIGlubGlu
ZUNhbGxGcmFtZSk7Ci0gICAgQVNTRVJUKCFleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uKTsK
KyAgICBBcmd1bWVudHMqIHJlc3VsdCA9IEFyZ3VtZW50czo6Y3JlYXRlKGdsb2JhbERhdGEsIGV4
ZWMsIGlubGluZUNhbGxGcmFtZSk7CisgICAgQVNTRVJUKCFnbG9iYWxEYXRhLmV4Y2VwdGlvbik7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTMxODU5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTI1LDYgKzE5MjUsMTMgQEAgcHVibGljOgogI2lmICFkZWZpbmVkKE5ERUJVRykgJiYgIUNQVShB
Uk0pCiAgICAgdm9pZCBwcmVwYXJlRm9yRXh0ZXJuYWxDYWxsKCkKICAgICB7CisgICAgICAgIC8v
IFdlJ3JlIGFib3V0IHRvIGNhbGwgb3V0IHRvIGEgIm5hdGl2ZSIgaGVscGVyIGZ1bmN0aW9uLiBU
aGUgaGVscGVyCisgICAgICAgIC8vIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIHNldCB0b3BDYWxs
RnJhbWUgaXRzZWxmIHdpdGggdGhlIEV4ZWNTdGF0ZQorICAgICAgICAvLyB0aGF0IGlzIHBhc3Nl
ZCB0byBpdC4KKyAgICAgICAgLy8gV2UgZXhwbGljaXRseSB0cmFzaCB0b3BDYWxsRnJhbWUgaGVy
ZSBzbyB0aGF0IHdlJ2xsIGtub3cgaWYgc29tZSBvZgorICAgICAgICAvLyB0aGUgaGVscGVyIGZ1
bmN0aW9ucyBhcmUgbm90IHNldHRpbmcgdG9wQ2FsbEZyYW1lIHdoZW4gdGhleSBzaG91bGQKKyAg
ICAgICAgLy8gYmUgZG9pbmcgc28uIE5vdGU6IHRoZSBwcmV2aW91cyB2YWx1ZSBpbiB0b3BjYWxs
RnJhbWUgd2FzIG5vdCB2YWxpZAorICAgICAgICAvLyBhbnl3YXkgc2luY2UgaXQgd2FzIG5vdCBi
ZWluZyB1cGRhdGVkIGJ5IEpJVCdlZCBjb2RlIGJ5IGRlc2lnbi4KICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemVvZih2b2lkKikgLyA0OyBpKyspCiAgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKFRydXN0ZWRJbW0zMigweGJhZGJlZWYpLCByZWludGVycHJldF9jYXN0PGNoYXIq
PigmbV9qaXQuZ2xvYmFsRGF0YSgpLT50b3BDYWxsRnJhbWUpICsgaSAqIDQpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9u
IDEzMTg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5o
IgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRl
IDx3dGYvU3RhY2tTdGF0cy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNTgsNiArNTksNyBA
QCB2b2lkIFNsb3RWaXNpdG9yOjpyZXNldCgpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChD
b25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCiB7CisgICAgU3RhY2tTdGF0czo6
cHJvYmUoKTsKICAgICBKU0NlbGwqKiByb290cyA9IGNvbnNlcnZhdGl2ZVJvb3RzLnJvb3RzKCk7
CiAgICAgc2l6ZV90IHNpemUgPSBjb25zZXJ2YXRpdmVSb290cy5zaXplKCk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCkBAIC02Niw2ICs2OCw3IEBAIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZChDb25zZXJ2YXRpdmVSb28KIAogQUxXQVlTX0lOTElORSBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBKU0NlbGwqIGNlbGwp
CiB7CisgICAgU3RhY2tTdGF0czo6cHJvYmUoKTsKICNpZiBFTkFCTEUoU0lNUExFX0hFQVBfUFJP
RklMSU5HKQogICAgIG1fdmlzaXRlZFR5cGVDb3VudHMuY291bnQoY2VsbCk7CiAjZW5kaWYKQEAg
LTkyLDYgKzk1LDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKAog
CiB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKIHsKKyAgICBTdGFja1N0
YXRzOjpwcm9iZSgpOwogICAgIC8vIE5PVEU6IEJlY2F1c2Ugd2UgcmUtdHJ5IG9mdGVuLCB3ZSBj
YW4gYWZmb3JkIHRvIGJlIGNvbnNlcnZhdGl2ZSwgYW5kCiAgICAgLy8gYXNzdW1lIHRoYXQgZG9u
YXRpbmcgaXMgbm90IHByb2ZpdGFibGUuCiAKQEAgLTExOSw2ICsxMjMsNyBAQCB2b2lkIFNsb3RW
aXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4o
KQogeworICAgIFN0YWNrU3RhdHM6OnByb2JlKCk7CiAgICAgQVNTRVJUKG1faXNJblBhcmFsbGVs
TW9kZSk7CiAgICAKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCkBAIC0xNDQsNiArMTQ5LDcgQEAg
dm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21T
aGFyZWQoU2hhcmVkRHJhaW5Nb2RlIHNoYXJlZERyYWluTW9kZSkKIHsKKyAgICBTdGFja1N0YXRz
Ojpwcm9iZSgpOwogICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1vZGUpOwogICAgIAogICAgIEFT
U0VSVChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpKTsKQEAgLTIyMSw2ICsyMjcsNyBAQCB2
b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkCiAKIHZvaWQgU2xvdFZpc2l0
b3I6Om1lcmdlT3BhcXVlUm9vdHMoKQogeworICAgIFN0YWNrU3RhdHM6OnByb2JlKCk7CiAgICAg
QVNTRVJUKCFtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7IC8vIFNob3VsZCBvbmx5IGJlIGNhbGxl
ZCB3aGVuIG9wYXF1ZSByb290cyBhcmUgbm9uLWVtcHR5LgogICAgIHsKICAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fc2hhcmVkLm1fb3BhcXVlUm9vdHNMb2NrKTsKQEAgLTI3Niw2ICsyODMs
NyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmludGVybmFsCiAgICAgLy8gYXMg
aXQgY2FuIGNoYW5nZSB0aGUgSlNWYWx1ZSBwb2ludGVkIHRvIGJlIHRoZSBhcmd1bWVudCB3aGVu
IHRoZSBvcmlnaW5hbCBKU1ZhbHVlCiAgICAgLy8gaXMgYSBzdHJpbmcgdGhhdCBjb250YWlucyB0
aGUgc2FtZSBjb250ZW50cyBhcyBhbm90aGVyIHN0cmluZy4KIAorICAgIFN0YWNrU3RhdHM6OnBy
b2JlKCk7CiAgICAgQVNTRVJUKHNsb3QpOwogICAgIEpTVmFsdWUgdmFsdWUgPSAqc2xvdDsKICAg
ICBBU1NFUlQodmFsdWUpOwpAQCAtMzA5LDEyICszMTcsMTQgQEAgQUxXQVlTX0lOTElORSB2b2lk
IFNsb3RWaXNpdG9yOjppbnRlcm5hbAogCiB2b2lkIFNsb3RWaXNpdG9yOjpoYXJ2ZXN0V2Vha1Jl
ZmVyZW5jZXMoKQogeworICAgIFN0YWNrU3RhdHM6OnByb2JlKCk7CiAgICAgZm9yIChXZWFrUmVm
ZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV9zaGFyZWQubV93ZWFrUmVmZXJlbmNlSGFydmVz
dGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KCkpCiAgICAgICAg
IGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoKnRoaXMpOwogfQogCiB2b2lkIFNsb3RWaXNp
dG9yOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCkKIHsKKyAgICBTdGFja1N0YXRz
Ojpwcm9iZSgpOwogICAgIHdoaWxlIChtX3NoYXJlZC5tX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJz
Lmhhc05leHQoKSkKICAgICAgICAgbV9zaGFyZWQubV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5y
ZW1vdmVOZXh0KCktPmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCk7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAxMzE4
NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1Niw2ICsyNTYsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAg
IAogICAgICAgICBDb2RlQmxvY2sqIHNvbWVDb2RlQmxvY2tGb3JQb3NzaWJseUlubGluZWRDb2Rl
KCkgeyByZXR1cm4gY29kZUJsb2NrKCk7IH0KICNlbmRpZgorICAgICAgICBDYWxsRnJhbWUqIGNh
bGxlckZyYW1lTm9GbGFncygpIHsgcmV0dXJuIGNhbGxlckZyYW1lKCktPnJlbW92ZUhvc3RDYWxs
RnJhbWVGbGFnKCk7IH0KICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhpcyB0byBnZXQgdGhl
IHRydWUgY2FsbCBmcmFtZSAoYWNjb3VudGVkIGZvciBpbmxpbmluZyBhbmQgYW55CiAgICAgICAg
IC8vIG90aGVyIG9wdGltaXphdGlvbnMpLCB3aGVuIHlvdSBoYXZlIGVudGVyZWQgaW50byBWTSBj
b2RlIHRocm91Z2ggb25lCkBAIC0yODEsNiArMjgyLDM2IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAg
ICAgICAgRXhlY1N0YXRlKCk7CiAgICAgICAgIH5FeGVjU3RhdGUoKTsKIAorICAgICAgICAvLyBU
aGUgZm9sbG93aW5nIGFyZSBmb3IgaW50ZXJuYWwgdXNlIGluIGRlYnVnZ2luZyBhbmQgdmVyaWZp
Y2F0aW9uCisgICAgICAgIC8vIGNvZGUgb25seSBhbmQgbm90IG1lYW50IGFzIGFuIEFQSSBmb3Ig
Z2VuZXJhbCB1c2FnZToKKworICAgICAgICBzaXplX3QgYXJnSW5kZXhGb3JSZWdpc3RlcihSZWdp
c3RlciogcmVnKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGUgcmVnaXN0ZXIgYXQgJ29m
ZnNldCcgbnVtYmVyIG9mIHNsb3RzIGZyb20gdGhlIGZyYW1lIHBvaW50ZXIKKyAgICAgICAgICAg
IC8vIGkuZS4KKyAgICAgICAgICAgIC8vICAgICAgIHJlZyA9IGZyYW1lW29mZnNldF07CisgICAg
ICAgICAgICAvLyAgID09PiByZWcgPSBmcmFtZSArIG9mZnNldDsKKyAgICAgICAgICAgIC8vICAg
PT0+IG9mZnNldCA9IHJlZyAtIGZyYW1lOworICAgICAgICAgICAgaW50IG9mZnNldCA9IHJlZyAt
IHRoaXMtPnJlZ2lzdGVycygpOworCisgICAgICAgICAgICAvLyBUaGUgb2Zmc2V0IGlzIGRlZmlu
ZWQgKGJhc2VkIG9uIGFyZ3VtZW50T2Zmc2V0KCkpIHRvIGJlOgorICAgICAgICAgICAgLy8gICAg
ICAgb2Zmc2V0ID0gc19maXJzdEFyZ3VtZW50T2Zmc2V0IC0gYXJnSW5kZXg7CisgICAgICAgICAg
ICAvLyBIZW5jZToKKyAgICAgICAgICAgIC8vICAgICAgIGFyZ0luZGV4ID0gc19maXJzdEFyZ3Vt
ZW50T2Zmc2V0IC0gb2Zmc2V0OworICAgICAgICAgICAgc2l6ZV90IGFyZ0luZGV4ID0gc19maXJz
dEFyZ3VtZW50T2Zmc2V0IC0gb2Zmc2V0OworICAgICAgICAgICAgcmV0dXJuIGFyZ0luZGV4Owor
ICAgICAgICB9CisKKyAgICAgICAgSlNWYWx1ZSBnZXRBcmd1bWVudFVuc2FmZShzaXplX3QgYXJn
SW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFVzZXIgYmV3YXJlISBUaGlzIG1ldGhv
ZCBkb2VzIG5vdCB2ZXJpZnkgdGhhdCB0aGVyZSBpcyBhIHZhbGlkCisgICAgICAgICAgICAvLyBh
cmd1bWVudCBhdCB0aGUgc3BlY2lmaWVkIGFyZ0luZGV4LiBUaGlzIGlzIHVzZWQgZm9yIGRlYnVn
Z2luZworICAgICAgICAgICAgLy8gYW5kIHZlcmlmaWNhdGlvbiBjb2RlIG9ubHkuIFRoZSBjYWxs
ZXIgaXMgZXhwZWN0ZWQgdG8ga25vdyB3aGF0CisgICAgICAgICAgICAvLyBoZS9zaGUgaXMgZG9p
bmcgd2hlbiBjYWxsaW5nIHRoaXMgbWV0aG9kLgorICAgICAgICAgICAgcmV0dXJuIHRoaXNbYXJn
dW1lbnRPZmZzZXQoYXJnSW5kZXgpXS5qc1ZhbHVlKCk7CisgICAgICAgIH0KKworICAgICAgICBm
cmllbmQgY2xhc3MgSlNTdGFjazsKICAgICAgICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwog
ICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWVDbG9zdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZUNsb3N1cmUuaAkocmV2aXNpb24gMTMxODU5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUNsb3N1cmUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsNiBAQCBzdHJ1Y3QgQ2FsbEZyYW1lQ2xvc3VyZSB7CiAgICAgSlNGdW5jdGlv
biogZnVuY3Rpb247CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGU7
CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOwotICAgIFJlZ2lzdGVyKiBvbGRFbmQ7CiAg
ICAgSlNTY29wZSogc2NvcGU7CiAgICAgaW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsK
ICAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDEz
MTg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJKU05hbWVTY29w
ZS5oIgogI2luY2x1ZGUgIkpTTm90QW5PYmplY3QuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNTdGFja0lubGluZWQuaCIKICNpbmNsdWRlICJKU1N0
cmluZy5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiTExJbnRDTG9vcC5o
IgpAQCAtNjUsNyArNjYsOSBAQAogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKICNpbmNsdWRl
IDxsaW1pdHMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRz
Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWRE
YXRhLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgRU5BQkxF
KEpJVCkKQEAgLTg4LDMzICs5MSw2IEBAIHN0YXRpYyBpbnQgZGVwdGgoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEoKICAgICByZXR1cm4gc2MtPmxvY2FsRGVwdGgoKTsKIH0KIAotQUxXQVlTX0lOTElO
RSBDYWxsRnJhbWUqIEludGVycHJldGVyOjpzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChDb2Rl
QmxvY2sqIG5ld0NvZGVCbG9jaywgSlNTdGFjayogc3RhY2ssIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBzaXplX3QgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykK
LXsKLSAgICAvLyBUaGlzIGVuc3VyZXMgZW5vdWdoIHNwYWNlIGZvciB0aGUgd29yc3QgY2FzZSBz
Y2VuYXJpbyBvZiB6ZXJvIGFyZ3VtZW50cyBwYXNzZWQgYnkgdGhlIGNhbGxlci4KLSAgICBpZiAo
IXN0YWNrLT5ncm93KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldCArIG5l
d0NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpICsgbmV3Q29kZUJsb2NrLT5tX251bUNhbGxlZVJl
Z2lzdGVycykpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzID49IG5ld0NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB7Ci0gICAgICAgIFJl
Z2lzdGVyKiBuZXdDYWxsRnJhbWUgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgcmVnaXN0ZXJP
ZmZzZXQ7Ci0gICAgICAgIHJldHVybiBDYWxsRnJhbWU6OmNyZWF0ZShuZXdDYWxsRnJhbWUpOwot
ICAgIH0KLQotICAgIC8vIFRvbyBmZXcgYXJndW1lbnRzIC0tIGNvcHkgYXJndW1lbnRzLCB0aGVu
IGZpbGwgaW4gbWlzc2luZyBhcmd1bWVudHMgd2l0aCB1bmRlZmluZWQuCi0gICAgc2l6ZV90IGRl
bHRhID0gbmV3Q29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgLSBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpczsKLSAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRl
KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldCArIGRlbHRhKTsKLQotICAg
IFJlZ2lzdGVyKiBkc3QgPSAmbmV3Q2FsbEZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZTo6dGhp
c0FyZ3VtZW50T2Zmc2V0KCkpOwotICAgIFJlZ2lzdGVyKiBlbmQgPSBkc3QgLSBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpczsKLSAgICBmb3IgKCA7IGRzdCAhPSBlbmQ7IC0tZHN0KQotICAgICAg
ICAqZHN0ID0gKihkc3QgLSBkZWx0YSk7Ci0KLSAgICBlbmQgLT0gZGVsdGE7Ci0gICAgZm9yICgg
OyBkc3QgIT0gZW5kOyAtLWRzdCkKLSAgICAgICAgKmRzdCA9IGpzVW5kZWZpbmVkKCk7Ci0KLSAg
ICByZXR1cm4gbmV3Q2FsbEZyYW1lOwotfQotCiBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiB7CiAgICAgaWYgKCFjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSkKQEAgLTE2Myw3
ICsxMzksNyBAQCBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBjYWxsZXJGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgQVNTRVJUKGlzVmFs
aWRUaGlzT2JqZWN0KHRoaXNWYWx1ZSwgY2FsbEZyYW1lKSk7CiAgICAgSW50ZXJwcmV0ZXIqIGlu
dGVycHJldGVyID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuaW50ZXJwcmV0ZXI7Ci0gICAgcmV0
dXJuIGludGVycHJldGVyLT5leGVjdXRlKGV2YWwsIGNhbGxGcmFtZSwgdGhpc1ZhbHVlLCBjYWxs
ZXJTY29wZUNoYWluLCBjYWxsRnJhbWUtPnJlZ2lzdGVycygpIC0gaW50ZXJwcmV0ZXItPnN0YWNr
KCkuYmVnaW4oKSArIDEgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplKTsKKyAgICByZXR1
cm4gaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUsIGNhbGxl
clNjb3BlQ2hhaW4pOwogfQogCiBDYWxsRnJhbWUqIGxvYWRWYXJhcmdzKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBKU1N0YWNrKiBzdGFjaywgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgYXJndW1l
bnRzLCBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIpCkBAIC0yNDQsOSArMjIwLDEwIEBAIENhbGxGcmFt
ZSogbG9hZFZhcmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnIKICAgICByZXR1cm4gbmV3Q2FsbEZyYW1l
OwogfQogCi1JbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIoKQorSW50ZXJwcmV0ZXI6OkludGVycHJl
dGVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICA6IG1fc2FtcGxlRW50cnlEZXB0aCgw
KQotICAgICwgbV9yZWVudHJ5RGVwdGgoMCkKKyAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRh
KQorICAgICwgbV9zdGFjayhnbG9iYWxEYXRhKQogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAs
IG1faW5pdGlhbGl6ZWQoZmFsc2UpCiAjZW5kaWYKQEAgLTY4MCwyNiArNjU3LDEzIEBAIE5FVkVS
X0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnQKICAgICAgICAgaWYgKCF1bndpbmRD
YWxsRnJhbWUoY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwgYnl0ZWNvZGVPZmZzZXQsIGNvZGVC
bG9jaykpIHsKICAgICAgICAgICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgICAgICAgICBwcm9maWxl
ci0+ZXhjZXB0aW9uVW53aW5kKGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPmds
b2JhbERhdGEoKS50b3BDYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgfQogICAgIH0KLSAgICBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS50b3BDYWxs
RnJhbWUgPSBjYWxsRnJhbWU7CiAKICAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZy
YW1lLT5nbG9iYWxEYXRhKCkuZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT5l
eGNlcHRpb25VbndpbmQoY2FsbEZyYW1lKTsKIAotICAgIC8vIFNocmluayB0aGUgSlMgc3RhY2ss
IGluIGNhc2Ugc3RhY2sgb3ZlcmZsb3cgbWFkZSBpdCBodWdlLgotICAgIFJlZ2lzdGVyKiBoaWdo
V2F0ZXJNYXJrID0gMDsKLSAgICBmb3IgKENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJh
bWU7IGNhbGxlckZyYW1lOyBjYWxsZXJGcmFtZSA9IGNhbGxlckZyYW1lLT5jYWxsZXJGcmFtZSgp
LT5yZW1vdmVIb3N0Q2FsbEZyYW1lRmxhZygpKSB7Ci0gICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwotICAgICAgICBpZiAoIWNvZGVCbG9jaykK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBSZWdpc3RlciogY2FsbGVySGlnaFdhdGVy
TWFyayA9IGNhbGxlckZyYW1lLT5yZWdpc3RlcnMoKSArIGNvZGVCbG9jay0+bV9udW1DYWxsZWVS
ZWdpc3RlcnM7Ci0gICAgICAgIGhpZ2hXYXRlck1hcmsgPSBtYXgoaGlnaFdhdGVyTWFyaywgY2Fs
bGVySGlnaFdhdGVyTWFyayk7Ci0gICAgfQotICAgIG1fc3RhY2suc2hyaW5rKGhpZ2hXYXRlck1h
cmspOwotCiAgICAgLy8gVW53aW5kIHRoZSBzY29wZSBjaGFpbiB3aXRoaW4gdGhlIGV4Y2VwdGlv
biBoYW5kbGVyJ3MgY2FsbCBmcmFtZS4KICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+
c2NvcGUoKTsKICAgICBpbnQgc2NvcGVEZWx0YSA9IDA7CkBAIC03NDYsMTkgKzcxMCwyMyBAQCBK
U1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1FeGVjCiAgICAgU2FtcGxpbmdTY29w
ZSBzYW1wbGluZ1Njb3BlKHRoaXMpOwogICAgIAogICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZy
YW1lLT5zY29wZSgpOworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9ICpzY29wZS0+Z2xv
YmFsRGF0YSgpOworCiAgICAgQVNTRVJUKGlzVmFsaWRUaGlzT2JqZWN0KHRoaXNPYmosIGNhbGxG
cmFtZSkpOwotICAgIEFTU0VSVCghc2NvcGUtPmdsb2JhbERhdGEoKS0+ZXhjZXB0aW9uKTsKLSAg
ICBBU1NFUlQoIWNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmlzQ29sbGVjdG9yQnVzeSgpKTsKLSAg
ICBpZiAoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuaXNDb2xsZWN0b3JCdXN5KCkpCisgICAgQVNT
RVJUKCFnbG9iYWxEYXRhLmV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCFnbG9iYWxEYXRhLmlzQ29s
bGVjdG9yQnVzeSgpKTsKKyAgICBpZiAoZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1c3koKSkKICAg
ICAgICAgQ1JBU0goKTsKIAotICAgIGlmIChtX3JlZW50cnlEZXB0aCA+PSBNYXhTbWFsbFRocmVh
ZFJlZW50cnlEZXB0aCAmJiBtX3JlZW50cnlEZXB0aCA+PSBjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KS5tYXhSZWVudHJ5RGVwdGgpCisgICAgU3RhY2tTdGF0czo6Q2hlY2tQb2ludCBzdGFja0NoZWNr
UG9pbnQ7CisgICAgY29uc3QgU3RhY2tCb3VuZHMmIG5hdGl2ZVN0YWNrID0gd3RmVGhyZWFkRGF0
YSgpLnN0YWNrKCk7CisgICAgaWYgKCFuYXRpdmVTdGFjay5pc1NhZmVUb1JlY3Vyc2UoKSkKICAg
ICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZy
YW1lKSk7CiAKICAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGUgInByb2dyYW0iIGlzIGFjdHVhbGx5
IGp1c3QgYSBKU09OIG9iamVjdC4gSWYgc28sCiAgICAgLy8gd2UnbGwgaGFuZGxlIHRoZSBKU09O
IG9iamVjdCBoZXJlLiBFbHNlLCB3ZSdsbCBoYW5kbGUgcmVhbCBKUyBjb2RlCiAgICAgLy8gYmVs
b3cgYXQgZmFpbGVkSlNPTlAuCi0gICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9i
amVjdFNjb3BlKCpzY29wZS0+Z2xvYmFsRGF0YSgpLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkpOwor
ICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZShnbG9iYWxEYXRh
LCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkpOwogICAgIFZlY3RvcjxKU09OUERhdGE+IEpTT05QRGF0
YTsKICAgICBib29sIHBhcnNlUmVzdWx0OwogICAgIGNvbnN0IFN0cmluZyBwcm9ncmFtU291cmNl
ID0gcHJvZ3JhbS0+c291cmNlKCkudG9TdHJpbmcoKTsKQEAgLTg2NywyMCArODM1LDE2IEBAIGZh
aWxlZEpTT05QOgogICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd0Vycm9yKGNhbGxG
cmFtZSwgZXJyb3IpKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICZwcm9ncmFtLT5nZW5l
cmF0ZWRCeXRlY29kZSgpOwogCi0gICAgLy8gUmVzZXJ2ZSBzdGFjayBzcGFjZSBmb3IgdGhpcyBp
bnZvY2F0aW9uOgotICAgIFJlZ2lzdGVyKiBvbGRFbmQgPSBtX3N0YWNrLmVuZCgpOwotICAgIFJl
Z2lzdGVyKiBuZXdFbmQgPSBvbGRFbmQgKyBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSArIEpT
U3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0
ZXJzOwotICAgIGlmICghbV9zdGFjay5ncm93KG5ld0VuZCkpCi0gICAgICAgIHJldHVybiBjaGVj
a2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwotCiAgICAgLy8g
UHVzaCB0aGUgY2FsbCBmcmFtZSBmb3IgdGhpcyBpbnZvY2F0aW9uOgotICAgIENhbGxGcmFtZSog
bmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUob2xkRW5kICsgY29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCkgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplKTsKICAgICBBU1NFUlQo
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gMSk7IC8vIDEgcGFyYW1ldGVyIGZvciAndGhp
cycuCi0gICAgbmV3Q2FsbEZyYW1lLT5pbml0KGNvZGVCbG9jaywgMCwgc2NvcGUsIENhbGxGcmFt
ZTo6bm9DYWxsZXIoKSwgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIDApOworICAgIENhbGxG
cmFtZSogbmV3Q2FsbEZyYW1lID0gbV9zdGFjay5wdXNoRnJhbWUoY2FsbEZyYW1lLCBjb2RlQmxv
Y2ssIHNjb3BlLCAxLCAwKTsKKyAgICBpZiAoVU5MSUtFTFkoIW5ld0NhbGxGcmFtZSkpCisgICAg
ICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFt
ZSkpOworCisgICAgLy8gU2V0IHRoZSBhcmd1bWVudHMgZm9yIHRoZSBjYWxsZWU6CiAgICAgbmV3
Q2FsbEZyYW1lLT5zZXRUaGlzVmFsdWUodGhpc09iaik7Ci0gICAgVG9wQ2FsbEZyYW1lU2V0dGVy
IHRvcENhbGxGcmFtZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbmV3Q2FsbEZyYW1lKTsKIAot
ICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5lbmFi
bGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gZ2xvYmFsRGF0YS5l
bmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXItPndpbGxFeGVjdXRlKGNhbGxGcmFt
ZSwgcHJvZ3JhbS0+c291cmNlVVJMKCksIHByb2dyYW0tPmxpbmVObygpKTsKIAogICAgIC8vIEV4
ZWN1dGUgdGhlIGNvZGU6CkBAIC04ODgsMjExICs4NTIsMTY2IEBAIGZhaWxlZEpTT05QOgogICAg
IHsKICAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVy
LmdldCgpKTsKIAotICAgICAgICBtX3JlZW50cnlEZXB0aCsrOwogI2lmIEVOQUJMRShMTElOVF9D
X0xPT1ApCiAgICAgICAgIHJlc3VsdCA9IExMSW50OjpDTG9vcDo6ZXhlY3V0ZShuZXdDYWxsRnJh
bWUsIGxsaW50X3Byb2dyYW1fcHJvbG9ndWUpOwogI2VsaWYgRU5BQkxFKEpJVCkKLSAgICAgICAg
cmVzdWx0ID0gcHJvZ3JhbS0+Z2VuZXJhdGVkSklUQ29kZSgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5l
d0NhbGxGcmFtZSwgc2NvcGUtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIHJlc3VsdCA9IHByb2dy
YW0tPmdlbmVyYXRlZEpJVENvZGUoKS5leGVjdXRlKCZtX3N0YWNrLCBuZXdDYWxsRnJhbWUsICZn
bG9iYWxEYXRhKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi0gICAgICAgIG1fcmVlbnRyeURl
cHRoLS07CiAgICAgfQogCi0gICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9IGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQorICAgIGlmIChQcm9maWxlciogcHJvZmls
ZXIgPSBnbG9iYWxEYXRhLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9maWxlci0+ZGlk
RXhlY3V0ZShjYWxsRnJhbWUsIHByb2dyYW0tPnNvdXJjZVVSTCgpLCBwcm9ncmFtLT5saW5lTm8o
KSk7CiAKLSAgICBtX3N0YWNrLnNocmluayhvbGRFbmQpOworICAgIG1fc3RhY2sucG9wRnJhbWUo
bmV3Q2FsbEZyYW1lKTsKIAogICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHJlc3VsdCk7CiB9CiAK
IEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBK
U09iamVjdCogZnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2Fs
bERhdGEsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeworICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpOwogICAgIEFT
U0VSVChpc1ZhbGlkVGhpc09iamVjdCh0aGlzVmFsdWUsIGNhbGxGcmFtZSkpOwogICAgIEFTU0VS
VCghY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmds
b2JhbERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSk7Ci0gICAgaWYgKGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpLmlzQ29sbGVjdG9yQnVzeSgpKQorICAgIEFTU0VSVCghZ2xvYmFsRGF0YS5pc0NvbGxl
Y3RvckJ1c3koKSk7CisgICAgaWYgKGdsb2JhbERhdGEuaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAg
ICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIGlmIChtX3JlZW50cnlEZXB0aCA+PSBNYXhTbWFs
bFRocmVhZFJlZW50cnlEZXB0aCAmJiBtX3JlZW50cnlEZXB0aCA+PSBjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKS5tYXhSZWVudHJ5RGVwdGgpCisgICAgU3RhY2tTdGF0czo6Q2hlY2tQb2ludCBzdGFj
a0NoZWNrUG9pbnQ7CisgICAgY29uc3QgU3RhY2tCb3VuZHMmIG5hdGl2ZVN0YWNrID0gd3RmVGhy
ZWFkRGF0YSgpLnN0YWNrKCk7CisgICAgaWYgKCFuYXRpdmVTdGFjay5pc1NhZmVUb1JlY3Vyc2Uo
KSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3Io
Y2FsbEZyYW1lKSk7CiAKLSAgICBSZWdpc3Rlciogb2xkRW5kID0gbV9zdGFjay5lbmQoKTsKLSAg
ICBBU1NFUlQoY2FsbEZyYW1lLT5mcmFtZUV4dGVudCgpIDw9IG9sZEVuZCB8fCBjYWxsRnJhbWUg
PT0gY2FsbEZyYW1lLT5zY29wZSgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKLSAg
ICBpbnQgYXJnQ291bnQgPSAxICsgYXJncy5zaXplKCk7IC8vIGltcGxpY2l0ICJ0aGlzIiBwYXJh
bWV0ZXIKLSAgICBzaXplX3QgcmVnaXN0ZXJPZmZzZXQgPSBhcmdDb3VudCArIEpTU3RhY2s6OkNh
bGxGcmFtZUhlYWRlclNpemU7Ci0KLSAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxG
cmFtZTo6Y3JlYXRlKG9sZEVuZCArIHJlZ2lzdGVyT2Zmc2V0KTsKLSAgICBpZiAoIW1fc3RhY2su
Z3JvdyhuZXdDYWxsRnJhbWUtPnJlZ2lzdGVycygpKSkKLSAgICAgICAgcmV0dXJuIGNoZWNrZWRS
ZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7Ci0KLSAgICBuZXdDYWxs
RnJhbWUtPnNldFRoaXNWYWx1ZSh0aGlzVmFsdWUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYXJncy5zaXplKCk7ICsraSkKLSAgICAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudChp
LCBhcmdzLmF0KGkpKTsKLQotICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKSB7Ci0gICAg
ICAgIEpTU2NvcGUqIGNhbGxEYXRhU2NvcGUgPSBjYWxsRGF0YS5qcy5zY29wZTsKKyAgICBib29s
IGlzSlNDYWxsID0gKGNhbGxUeXBlID09IENhbGxUeXBlSlMpOworICAgIEpTU2NvcGUqIHNjb3Bl
OworICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrOworICAgIHNpemVfdCBhcmdzQ291bnQgPSAx
ICsgYXJncy5zaXplKCk7IC8vIGltcGxpY2l0ICJ0aGlzIiBwYXJhbWV0ZXIKIAotICAgICAgICBE
eW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoKmNhbGxEYXRhU2NvcGUt
Pmdsb2JhbERhdGEoKSwgY2FsbERhdGFTY29wZS0+Z2xvYmFsT2JqZWN0KCkpOworICAgIGlmIChp
c0pTQ2FsbCkKKyAgICAgICAgc2NvcGUgPSBjYWxsRGF0YS5qcy5zY29wZTsKKyAgICBlbHNlIHsK
KyAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlSG9zdCk7CisgICAgICAgIHNjb3Bl
ID0gY2FsbEZyYW1lLT5zY29wZSgpOworICAgIH0KKyAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2Nv
cGUgZ2xvYmFsT2JqZWN0U2NvcGUoZ2xvYmFsRGF0YSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpKTsK
IAotICAgICAgICBKU09iamVjdCogY29tcGlsZUVycm9yID0gY2FsbERhdGEuanMuZnVuY3Rpb25F
eGVjdXRhYmxlLT5jb21waWxlRm9yQ2FsbChjYWxsRnJhbWUsIGNhbGxEYXRhU2NvcGUpOworICAg
IGlmIChpc0pTQ2FsbCkgeworICAgICAgICAvLyBDb21waWxlIHRoZSBjYWxsZWU6CisgICAgICAg
IEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUt
PmNvbXBpbGVGb3JDYWxsKGNhbGxGcmFtZSwgc2NvcGUpOwogICAgICAgICBpZiAoVU5MSUtFTFko
ISFjb21waWxlRXJyb3IpKSB7Ci0gICAgICAgICAgICBtX3N0YWNrLnNocmluayhvbGRFbmQpOwog
ICAgICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dFcnJvcihjYWxsRnJhbWUsIGNv
bXBpbGVFcnJvcikpOwogICAgICAgICB9CisgICAgICAgIG5ld0NvZGVCbG9jayA9ICZjYWxsRGF0
YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEJ5dGVjb2RlRm9yQ2FsbCgpOworICAg
ICAgICBBU1NFUlQoISFuZXdDb2RlQmxvY2spOworICAgIH0gZWxzZQorICAgICAgICBuZXdDb2Rl
QmxvY2sgPSAwOwogCi0gICAgICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0gJmNhbGxEYXRh
LmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDYWxsKCk7Ci0gICAg
ICAgIG5ld0NhbGxGcmFtZSA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKG5ld0NvZGVCbG9j
aywgJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgMCwgYXJnQ291bnQpOwotICAgICAgICBpZiAoVU5M
SUtFTFkoIW5ld0NhbGxGcmFtZSkpIHsKLSAgICAgICAgICAgIG1fc3RhY2suc2hyaW5rKG9sZEVu
ZCk7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZsb3dF
cnJvcihjYWxsRnJhbWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIG5ld0NhbGxGcmFtZS0+aW5p
dChuZXdDb2RlQmxvY2ssIDAsIGNhbGxEYXRhU2NvcGUsIGNhbGxGcmFtZS0+YWRkSG9zdENhbGxG
cmFtZUZsYWcoKSwgYXJnQ291bnQsIGZ1bmN0aW9uKTsKKyAgICBDYWxsRnJhbWUqIG5ld0NhbGxG
cmFtZSA9IG1fc3RhY2sucHVzaEZyYW1lKGNhbGxGcmFtZSwgbmV3Q29kZUJsb2NrLCBzY29wZSwg
YXJnc0NvdW50LCBmdW5jdGlvbik7CisgICAgaWYgKFVOTElLRUxZKCFuZXdDYWxsRnJhbWUpKQor
ICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxs
RnJhbWUpKTsKIAotICAgICAgICBUb3BDYWxsRnJhbWVTZXR0ZXIgdG9wQ2FsbEZyYW1lKGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLCBuZXdDYWxsRnJhbWUpOworICAgIC8vIFNldCB0aGUgYXJndW1l
bnRzIGZvciB0aGUgY2FsbGVlOgorICAgIG5ld0NhbGxGcmFtZS0+c2V0VGhpc1ZhbHVlKHRoaXNW
YWx1ZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQorICAg
ICAgICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGFyZ3MuYXQoaSkpOwogCi0gICAgICAg
IGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5lbmFibGVk
UHJvZmlsZXIoKSkKLSAgICAgICAgICAgIHByb2ZpbGVyLT53aWxsRXhlY3V0ZShjYWxsRnJhbWUs
IGZ1bmN0aW9uKTsKKyAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gZ2xvYmFsRGF0YS5lbmFi
bGVkUHJvZmlsZXIoKSkKKyAgICAgICAgcHJvZmlsZXItPndpbGxFeGVjdXRlKGNhbGxGcmFtZSwg
ZnVuY3Rpb24pOwogCi0gICAgICAgIEpTVmFsdWUgcmVzdWx0OwotICAgICAgICB7Ci0gICAgICAg
ICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIuZ2V0KCkp
OworICAgIEpTVmFsdWUgcmVzdWx0OworICAgIHsKKyAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxs
UmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVyLmdldCgpLCAhaXNKU0NhbGwpOwogCi0gICAgICAg
ICAgICBtX3JlZW50cnlEZXB0aCsrOyAgCisgICAgICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGU6Cisg
ICAgICAgIGlmIChpc0pTQ2FsbCkgewogI2lmIEVOQUJMRShMTElOVF9DX0xPT1ApCiAgICAgICAg
ICAgICByZXN1bHQgPSBMTEludDo6Q0xvb3A6OmV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBsbGludF9m
dW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSk7CiAjZWxpZiBFTkFCTEUoSklUKQotICAgICAgICAg
ICAgcmVzdWx0ID0gY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRD
b2RlRm9yQ2FsbCgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgY2FsbERhdGFTY29w
ZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxEYXRhLmpzLmZ1bmN0
aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS5leGVjdXRlKCZtX3N0YWNr
LCBuZXdDYWxsRnJhbWUsICZnbG9iYWxEYXRhKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi0g
ICAgICAgICAgICBtX3JlZW50cnlEZXB0aC0tOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFBy
b2ZpbGVyKiBwcm9maWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxl
cigpKQotICAgICAgICAgICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBmdW5jdGlv
bik7Ci0KLSAgICAgICAgbV9zdGFjay5zaHJpbmsob2xkRW5kKTsKLSAgICAgICAgcmV0dXJuIGNo
ZWNrZWRSZXR1cm4ocmVzdWx0KTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2Fs
bFR5cGVIb3N0KTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKLSAg
ICBuZXdDYWxsRnJhbWUtPmluaXQoMCwgMCwgc2NvcGUsIGNhbGxGcmFtZS0+YWRkSG9zdENhbGxG
cmFtZUZsYWcoKSwgYXJnQ291bnQsIGZ1bmN0aW9uKTsKLQotICAgIFRvcENhbGxGcmFtZVNldHRl
ciB0b3BDYWxsRnJhbWUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG5ld0NhbGxGcmFtZSk7Ci0K
LSAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoKnNjb3BlLT5n
bG9iYWxEYXRhKCksIHNjb3BlLT5nbG9iYWxPYmplY3QoKSk7Ci0KLSAgICBpZiAoUHJvZmlsZXIq
IHByb2ZpbGVyID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZW5hYmxlZFByb2ZpbGVyKCkpCi0g
ICAgICAgIHByb2ZpbGVyLT53aWxsRXhlY3V0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsKLQotICAg
IEpTVmFsdWUgcmVzdWx0OwotICAgIHsKLSAgICAgICAgU2FtcGxpbmdUb29sOjpIb3N0Q2FsbFJl
Y29yZCBjYWxsUmVjb3JkKG1fc2FtcGxlci5nZXQoKSk7Ci0gICAgICAgIHJlc3VsdCA9IEpTVmFs
dWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24obmV3Q2FsbEZyYW1lKSk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRh
Lm5hdGl2ZS5mdW5jdGlvbihuZXdDYWxsRnJhbWUpKTsKICAgICB9CiAKLSAgICBpZiAoUHJvZmls
ZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZW5hYmxlZFByb2ZpbGVyKCkp
CisgICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9IGdsb2JhbERhdGEuZW5hYmxlZFByb2ZpbGVy
KCkpCiAgICAgICAgIHByb2ZpbGVyLT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwgZnVuY3Rpb24pOwog
Ci0gICAgbV9zdGFjay5zaHJpbmsob2xkRW5kKTsKKyAgICBtX3N0YWNrLnBvcEZyYW1lKG5ld0Nh
bGxGcmFtZSk7CiAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4ocmVzdWx0KTsKIH0KIAogSlNPYmpl
Y3QqIEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBK
U09iamVjdCogY29uc3RydWN0b3IsIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSwgY29uc3Qg
Q29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKKyAg
ICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsKICAg
ICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpOwotICAgIEFTU0VSVCghY2FsbEZy
YW1lLT5nbG9iYWxEYXRhKCkuaXNDb2xsZWN0b3JCdXN5KCkpOworICAgIEFTU0VSVCghZ2xvYmFs
RGF0YS5pc0NvbGxlY3RvckJ1c3koKSk7CiAgICAgLy8gV2UgdGhyb3cgaW4gdGhpcyBjYXNlIGJl
Y2F1c2Ugd2UgaGF2ZSB0byByZXR1cm4gc29tZXRoaW5nICJ2YWxpZCIgYnV0IHdlJ3JlCiAgICAg
Ly8gYWxyZWFkeSBpbiBhbiBpbnZhbGlkIHN0YXRlLgotICAgIGlmIChjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSkKKyAgICBpZiAoZ2xvYmFsRGF0YS5pc0NvbGxlY3Rv
ckJ1c3koKSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93
RXJyb3IoY2FsbEZyYW1lKSk7CiAKLSAgICBpZiAobV9yZWVudHJ5RGVwdGggPj0gTWF4U21hbGxU
aHJlYWRSZWVudHJ5RGVwdGggJiYgbV9yZWVudHJ5RGVwdGggPj0gY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCkubWF4UmVlbnRyeURlcHRoKQorICAgIFN0YWNrU3RhdHM6OkNoZWNrUG9pbnQgc3RhY2tD
aGVja1BvaW50OworICAgIGNvbnN0IFN0YWNrQm91bmRzJiBuYXRpdmVTdGFjayA9IHd0ZlRocmVh
ZERhdGEoKS5zdGFjaygpOworICAgIGlmICghbmF0aXZlU3RhY2suaXNTYWZlVG9SZWN1cnNlKCkp
CiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNh
bGxGcmFtZSkpOwogCi0gICAgUmVnaXN0ZXIqIG9sZEVuZCA9IG1fc3RhY2suZW5kKCk7Ci0gICAg
aW50IGFyZ0NvdW50ID0gMSArIGFyZ3Muc2l6ZSgpOyAvLyBpbXBsaWNpdCAidGhpcyIgcGFyYW1l
dGVyCi0gICAgc2l6ZV90IHJlZ2lzdGVyT2Zmc2V0ID0gYXJnQ291bnQgKyBKU1N0YWNrOjpDYWxs
RnJhbWVIZWFkZXJTaXplOworICAgIGJvb2wgaXNKU0NvbnN0cnVjdCA9IChjb25zdHJ1Y3RUeXBl
ID09IENvbnN0cnVjdFR5cGVKUyk7CisgICAgSlNTY29wZSogc2NvcGU7CisgICAgQ29kZUJsb2Nr
KiBuZXdDb2RlQmxvY2s7CisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IDEgKyBhcmdzLnNpemUoKTsg
Ly8gaW1wbGljaXQgInRoaXMiIHBhcmFtZXRlcgogCi0gICAgaWYgKCFtX3N0YWNrLmdyb3cob2xk
RW5kICsgcmVnaXN0ZXJPZmZzZXQpKQotICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJv
d1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpKTsKLQotICAgIENhbGxGcmFtZSogbmV3Q2Fs
bEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUob2xkRW5kICsgcmVnaXN0ZXJPZmZzZXQpOwotICAg
IG5ld0NhbGxGcmFtZS0+c2V0VGhpc1ZhbHVlKGpzVW5kZWZpbmVkKCkpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkKLSAgICAgICAgbmV3Q2FsbEZyYW1lLT5z
ZXRBcmd1bWVudChpLCBhcmdzLmF0KGkpKTsKLQotICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENv
bnN0cnVjdFR5cGVKUykgewotICAgICAgICBKU1Njb3BlKiBjb25zdHJ1Y3REYXRhU2NvcGUgPSBj
b25zdHJ1Y3REYXRhLmpzLnNjb3BlOworICAgIGlmIChpc0pTQ29uc3RydWN0KQorICAgICAgICBz
Y29wZSA9IGNvbnN0cnVjdERhdGEuanMuc2NvcGU7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VS
VChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVIb3N0KTsKKyAgICAgICAgc2NvcGUgPSBj
YWxsRnJhbWUtPnNjb3BlKCk7CisgICAgfQogCi0gICAgICAgIER5bmFtaWNHbG9iYWxPYmplY3RT
Y29wZSBnbG9iYWxPYmplY3RTY29wZSgqY29uc3RydWN0RGF0YVNjb3BlLT5nbG9iYWxEYXRhKCks
IGNvbnN0cnVjdERhdGFTY29wZS0+Z2xvYmFsT2JqZWN0KCkpOworICAgIER5bmFtaWNHbG9iYWxP
YmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZShnbG9iYWxEYXRhLCBzY29wZS0+Z2xvYmFsT2Jq
ZWN0KCkpOwogCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBjb25zdHJ1Y3REYXRh
LmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvckNvbnN0cnVjdChjYWxsRnJhbWUsIGNv
bnN0cnVjdERhdGFTY29wZSk7CisgICAgaWYgKGlzSlNDb25zdHJ1Y3QpIHsKKyAgICAgICAgLy8g
Q29tcGlsZSB0aGUgY2FsbGVlOgorICAgICAgICBKU09iamVjdCogY29tcGlsZUVycm9yID0gY29u
c3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3JDb25zdHJ1Y3QoY2Fs
bEZyYW1lLCBzY29wZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghIWNvbXBpbGVFcnJvcikpIHsK
LSAgICAgICAgICAgIG1fc3RhY2suc2hyaW5rKG9sZEVuZCk7CiAgICAgICAgICAgICByZXR1cm4g
Y2hlY2tlZFJldHVybih0aHJvd0Vycm9yKGNhbGxGcmFtZSwgY29tcGlsZUVycm9yKSk7CiAgICAg
ICAgIH0KKyAgICAgICAgbmV3Q29kZUJsb2NrID0gJmNvbnN0cnVjdERhdGEuanMuZnVuY3Rpb25F
eGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29kZUZvckNvbnN0cnVjdCgpOworICAgICAgICBBU1NF
UlQoISFuZXdDb2RlQmxvY2spOworICAgIH0gZWxzZQorICAgICAgICBuZXdDb2RlQmxvY2sgPSAw
OwogCi0gICAgICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0gJmNvbnN0cnVjdERhdGEuanMu
ZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29kZUZvckNvbnN0cnVjdCgpOwotICAg
ICAgICBuZXdDYWxsRnJhbWUgPSBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChuZXdDb2RlQmxv
Y2ssICZtX3N0YWNrLCBuZXdDYWxsRnJhbWUsIDAsIGFyZ0NvdW50KTsKLSAgICAgICAgaWYgKFVO
TElLRUxZKCFuZXdDYWxsRnJhbWUpKSB7Ci0gICAgICAgICAgICBtX3N0YWNrLnNocmluayhvbGRF
bmQpOwotICAgICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93
RXJyb3IoY2FsbEZyYW1lKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBuZXdDYWxsRnJhbWUtPmlu
aXQobmV3Q29kZUJsb2NrLCAwLCBjb25zdHJ1Y3REYXRhU2NvcGUsIGNhbGxGcmFtZS0+YWRkSG9z
dENhbGxGcmFtZUZsYWcoKSwgYXJnQ291bnQsIGNvbnN0cnVjdG9yKTsKKyAgICBDYWxsRnJhbWUq
IG5ld0NhbGxGcmFtZSA9IG1fc3RhY2sucHVzaEZyYW1lKGNhbGxGcmFtZSwgbmV3Q29kZUJsb2Nr
LCBzY29wZSwgYXJnc0NvdW50LCBjb25zdHJ1Y3Rvcik7CisgICAgaWYgKFVOTElLRUxZKCFuZXdD
YWxsRnJhbWUpKQorICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZs
b3dFcnJvcihjYWxsRnJhbWUpKTsKIAotICAgICAgICBUb3BDYWxsRnJhbWVTZXR0ZXIgdG9wQ2Fs
bEZyYW1lKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBuZXdDYWxsRnJhbWUpOworICAgIC8vIFNl
dCB0aGUgYXJndW1lbnRzIGZvciB0aGUgY2FsbGVlOgorICAgIG5ld0NhbGxGcmFtZS0+c2V0VGhp
c1ZhbHVlKGpzVW5kZWZpbmVkKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJncy5z
aXplKCk7ICsraSkKKyAgICAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCBhcmdzLmF0
KGkpKTsKIAotICAgICAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCkuZW5hYmxlZFByb2ZpbGVyKCkpCi0gICAgICAgICAgICBwcm9maWxlci0+d2lsbEV4
ZWN1dGUoY2FsbEZyYW1lLCBjb25zdHJ1Y3Rvcik7CisgICAgaWYgKFByb2ZpbGVyKiBwcm9maWxl
ciA9IGdsb2JhbERhdGEuZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgICAgIHByb2ZpbGVyLT53aWxs
RXhlY3V0ZShjYWxsRnJhbWUsIGNvbnN0cnVjdG9yKTsKIAotICAgICAgICBKU1ZhbHVlIHJlc3Vs
dDsKLSAgICAgICAgewotICAgICAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxS
ZWNvcmQobV9zYW1wbGVyLmdldCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdDsKKyAgICB7CisgICAg
ICAgIFNhbXBsaW5nVG9vbDo6Q2FsbFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxlci5nZXQoKSwg
IWlzSlNDb25zdHJ1Y3QpOwogCi0gICAgICAgICAgICBtX3JlZW50cnlEZXB0aCsrOyAgCisgICAg
ICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGUuCisgICAgICAgIGlmIChpc0pTQ29uc3RydWN0KSB7CiAj
aWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAgICAgICAgIHJlc3VsdCA9IExMSW50OjpDTG9v
cDo6ZXhlY3V0ZShuZXdDYWxsRnJhbWUsIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJv
bG9ndWUpOwogI2VsaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVj
dERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0
KCkuZXhlY3V0ZSgmbV9zdGFjaywgbmV3Q2FsbEZyYW1lLCBjb25zdHJ1Y3REYXRhU2NvcGUtPmds
b2JhbERhdGEoKSk7CisgICAgICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0
aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpLmV4ZWN1dGUoJm1f
c3RhY2ssIG5ld0NhbGxGcmFtZSwgJmdsb2JhbERhdGEpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQp
Ci0gICAgICAgICAgICBtX3JlZW50cnlEZXB0aC0tOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0
aW9uKG5ld0NhbGxGcmFtZSkpOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFByb2ZpbGVyKiBw
cm9maWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQotICAg
ICAgICAgICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBjb25zdHJ1Y3Rvcik7Ci0K
LSAgICAgICAgbV9zdGFjay5zaHJpbmsob2xkRW5kKTsKLSAgICAgICAgaWYgKGNhbGxGcmFtZS0+
aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgQVNTRVJUKHJl
c3VsdC5pc09iamVjdCgpKTsKLSAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4oYXNPYmplY3Qo
cmVzdWx0KSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0
VHlwZUhvc3QpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwotICAg
IG5ld0NhbGxGcmFtZS0+aW5pdCgwLCAwLCBzY29wZSwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZy
YW1lRmxhZygpLCBhcmdDb3VudCwgY29uc3RydWN0b3IpOwotCi0gICAgVG9wQ2FsbEZyYW1lU2V0
dGVyIHRvcENhbGxGcmFtZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbmV3Q2FsbEZyYW1lKTsK
LQotICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZSgqc2NvcGUt
Pmdsb2JhbERhdGEoKSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpKTsKLQotICAgIGlmIChQcm9maWxl
ciogcHJvZmlsZXIgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIoKSkK
LSAgICAgICAgcHJvZmlsZXItPndpbGxFeGVjdXRlKGNhbGxGcmFtZSwgY29uc3RydWN0b3IpOwot
Ci0gICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgewotICAgICAgICBTYW1wbGluZ1Rvb2w6Okhvc3RD
YWxsUmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVyLmdldCgpKTsKLSAgICAgICAgcmVzdWx0ID0g
SlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKG5ld0NhbGxGcmFt
ZSkpOwogICAgIH0KIAotICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBjYWxsRnJhbWUtPmds
b2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVy
ID0gZ2xvYmFsRGF0YS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXItPmRpZEV4
ZWN1dGUoY2FsbEZyYW1lLCBjb25zdHJ1Y3Rvcik7CiAKLSAgICBtX3N0YWNrLnNocmluayhvbGRF
bmQpOworICAgIG1fc3RhY2sucG9wRnJhbWUobmV3Q2FsbEZyYW1lKTsKKwogICAgIGlmIChjYWxs
RnJhbWUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gMDsKICAgICBBU1NFUlQocmVz
dWx0LmlzT2JqZWN0KCkpOwpAQCAtMTEwMSw5NyArMTAyMCwxMTYgQEAgSlNPYmplY3QqIEludGVy
cHJldGVyOjpleGVjdXRlQ29uc3RydWN0KAogCiBDYWxsRnJhbWVDbG9zdXJlIEludGVycHJldGVy
OjpwcmVwYXJlRm9yUmVwZWF0Q2FsbChGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0
YWJsZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBpbnQgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIEpTU2NvcGUqIHNjb3BlKQogewotICAgIEFTU0VSVCgh
c2NvcGUtPmdsb2JhbERhdGEoKS0+ZXhjZXB0aW9uKTsKKyAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSAqc2NvcGUtPmdsb2JhbERhdGEoKTsKKyAgICBBU1NFUlQoIWdsb2JhbERhdGEuZXhj
ZXB0aW9uKTsKICAgICAKLSAgICBpZiAoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuaXNDb2xsZWN0
b3JCdXN5KCkpCisgICAgaWYgKGdsb2JhbERhdGEuaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAg
IHJldHVybiBDYWxsRnJhbWVDbG9zdXJlKCk7CiAKLSAgICBpZiAobV9yZWVudHJ5RGVwdGggPj0g
TWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGggJiYgbV9yZWVudHJ5RGVwdGggPj0gY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCkubWF4UmVlbnRyeURlcHRoKSB7Ci0gICAgICAgIHRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yKGNhbGxGcmFtZSk7Ci0gICAgICAgIHJldHVybiBDYWxsRnJhbWVDbG9zdXJlKCk7
Ci0gICAgfQotCi0gICAgUmVnaXN0ZXIqIG9sZEVuZCA9IG1fc3RhY2suZW5kKCk7Ci0gICAgc2l6
ZV90IHJlZ2lzdGVyT2Zmc2V0ID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBKU1N0YWNr
OjpDYWxsRnJhbWVIZWFkZXJTaXplOwotCi0gICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUgPSBD
YWxsRnJhbWU6OmNyZWF0ZShvbGRFbmQgKyByZWdpc3Rlck9mZnNldCk7Ci0gICAgaWYgKCFtX3N0
YWNrLmdyb3cobmV3Q2FsbEZyYW1lLT5yZWdpc3RlcnMoKSkpIHsKKyAgICBTdGFja1N0YXRzOjpD
aGVja1BvaW50IHN0YWNrQ2hlY2tQb2ludDsKKyAgICBjb25zdCBTdGFja0JvdW5kcyYgbmF0aXZl
U3RhY2sgPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKKyAgICBpZiAoIW5hdGl2ZVN0YWNrLmlz
U2FmZVRvUmVjdXJzZSgpKSB7CiAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxG
cmFtZSk7CiAgICAgICAgIHJldHVybiBDYWxsRnJhbWVDbG9zdXJlKCk7CiAgICAgfQogCisgICAg
Ly8gQ29tcGlsZSB0aGUgY2FsbGVlOgogICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+Y29tcGlsZUZvckNhbGwoY2FsbEZyYW1lLCBzY29wZSk7CiAgICAgaWYgKGVycm9y
KSB7CiAgICAgICAgIHRocm93RXJyb3IoY2FsbEZyYW1lLCBlcnJvcik7Ci0gICAgICAgIG1fc3Rh
Y2suc2hyaW5rKG9sZEVuZCk7CiAgICAgICAgIHJldHVybiBDYWxsRnJhbWVDbG9zdXJlKCk7CiAg
ICAgfQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gJmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2Vu
ZXJhdGVkQnl0ZWNvZGVGb3JDYWxsKCk7CisgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sgPSAm
ZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29kZUZvckNhbGwoKTsKKworICAgIHNp
emVfdCBhcmdzQ291bnQgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKworICAgIENhbGxG
cmFtZSogbmV3Q2FsbEZyYW1lID0gbV9zdGFjay5wdXNoRnJhbWUoY2FsbEZyYW1lLCBuZXdDb2Rl
QmxvY2ssIHNjb3BlLCBhcmdzQ291bnQsIGZ1bmN0aW9uKTsgIAorICAgIGlmIChVTkxJS0VMWSgh
bmV3Q2FsbEZyYW1lKSkgeworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJh
bWUpOworICAgICAgICByZXR1cm4gQ2FsbEZyYW1lQ2xvc3VyZSgpOworICAgIH0KIAotICAgIG5l
d0NhbGxGcmFtZSA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKGNvZGVCbG9jaywgJm1fc3Rh
Y2ssIG5ld0NhbGxGcmFtZSwgMCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIGlm
IChVTkxJS0VMWSghbmV3Q2FsbEZyYW1lKSkgewogICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dF
cnJvcihjYWxsRnJhbWUpOwotICAgICAgICBtX3N0YWNrLnNocmluayhvbGRFbmQpOwogICAgICAg
ICByZXR1cm4gQ2FsbEZyYW1lQ2xvc3VyZSgpOwogICAgIH0KLSAgICBuZXdDYWxsRnJhbWUtPmlu
aXQoY29kZUJsb2NrLCAwLCBzY29wZSwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1lRmxhZygp
LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgZnVuY3Rpb24pOyAgCi0gICAgc2NvcGUtPmds
b2JhbERhdGEoKS0+dG9wQ2FsbEZyYW1lID0gbmV3Q2FsbEZyYW1lOwotICAgIENhbGxGcmFtZUNs
b3N1cmUgcmVzdWx0ID0geyBjYWxsRnJhbWUsIG5ld0NhbGxGcmFtZSwgZnVuY3Rpb24sIGZ1bmN0
aW9uRXhlY3V0YWJsZSwgc2NvcGUtPmdsb2JhbERhdGEoKSwgb2xkRW5kLCBzY29wZSwgY29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCksIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIH07CisKKyAg
ICAvLyBSZXR1cm4gdGhlIHN1Y2Nlc3NmdWwgY2xvc3VyZToKKyAgICBDYWxsRnJhbWVDbG9zdXJl
IHJlc3VsdCA9IHsgY2FsbEZyYW1lLCBuZXdDYWxsRnJhbWUsIGZ1bmN0aW9uLCBmdW5jdGlvbkV4
ZWN1dGFibGUsICZnbG9iYWxEYXRhLCBzY29wZSwgbmV3Q29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCksIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIH07CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShDYWxsRnJhbWVDbG9zdXJlJiBjbG9zdXJl
KSAKIHsKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSAqY2xvc3VyZS5nbG9iYWxEYXRh
OwogICAgIFNhbXBsaW5nU2NvcGUgc2FtcGxpbmdTY29wZSh0aGlzKTsKICAgICAKLSAgICBBU1NF
UlQoIWNsb3N1cmUub2xkQ2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuaXNDb2xsZWN0b3JCdXN5KCkp
OwotICAgIGlmIChjbG9zdXJlLm9sZENhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmlzQ29sbGVjdG9y
QnVzeSgpKQorICAgIEFTU0VSVCghZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1c3koKSk7CisgICAg
aWYgKGdsb2JhbERhdGEuaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIHJldHVybiBqc051bGwo
KTsKKworICAgIFN0YWNrU3RhdHM6OkNoZWNrUG9pbnQgc3RhY2tDaGVja1BvaW50OworICAgIG1f
c3RhY2sudmFsaWRhdGVGZW5jZShjbG9zdXJlLm5ld0NhbGxGcmFtZSwgIkJFRk9SRSIpOwogICAg
IGNsb3N1cmUucmVzZXRDYWxsRnJhbWUoKTsKLSAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0g
Y2xvc3VyZS5vbGRDYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIoKSkKKyAg
ICBtX3N0YWNrLnZhbGlkYXRlRmVuY2UoY2xvc3VyZS5uZXdDYWxsRnJhbWUsICJTVEVQIDEiKTsK
KworICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBnbG9iYWxEYXRhLmVuYWJsZWRQcm9maWxl
cigpKQogICAgICAgICBwcm9maWxlci0+d2lsbEV4ZWN1dGUoY2xvc3VyZS5vbGRDYWxsRnJhbWUs
IGNsb3N1cmUuZnVuY3Rpb24pOwogCi0gICAgVG9wQ2FsbEZyYW1lU2V0dGVyIHRvcENhbGxGcmFt
ZSgqY2xvc3VyZS5nbG9iYWxEYXRhLCBjbG9zdXJlLm5ld0NhbGxGcmFtZSk7CisgICAgLy8gVGhl
IGNvZGUgZXhlY3V0aW9uIGJlbG93IG1heSBwdXNoIG1vcmUgZnJhbWVzIGFuZCBwb2ludCB0aGUg
dG9wQ2FsbEZyYW1lCisgICAgLy8gdG8gdGhvc2UgbmV3ZXIgZnJhbWVzLCBvciBpdCBtYXkgcG9w
IHRvIHRoZSB0b3AgZnJhbWUgdG8gdGhlIGNhbGxlciBvZgorICAgIC8vIHRoZSBjdXJyZW50IHJl
cGVhdCBmcmFtZSwgb3IgaXQgbWF5IGxlYXZlIHRoZSB0b3AgZnJhbWUgcG9pbnRpbmcgdG8gdGhl
CisgICAgLy8gY3VycmVudCByZXBlYXQgZnJhbWUuCisgICAgLy8KKyAgICAvLyBIZW5jZSwgd2Ug
bmVlZCB0byBwcmVzZXJ2ZSB0aGUgdG9wQ2FsbEZyYW1lIGhlcmUgb3Vyc2VsdmVzIGJlZm9yZQor
ICAgIC8vIHJlcGVhdGluZyB0aGlzIGNhbGwgb24gYSBzZWNvbmQgY2FsbGJhY2sgZnVuY3Rpb24u
CisKKyAgICBUb3BDYWxsRnJhbWVTZXR0ZXIgdG9wQ2FsbEZyYW1lKGdsb2JhbERhdGEsIGNsb3N1
cmUubmV3Q2FsbEZyYW1lKTsKIAorICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGU6CiAgICAgSlNWYWx1
ZSByZXN1bHQ7CiAgICAgewogICAgICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2FsbFJl
Y29yZChtX3NhbXBsZXIuZ2V0KCkpOwogICAgICAgICAKLSAgICAgICAgbV9yZWVudHJ5RGVwdGgr
KzsgIAogI2lmIEVOQUJMRShMTElOVF9DX0xPT1ApCiAgICAgICAgIHJlc3VsdCA9IExMSW50OjpD
TG9vcDo6ZXhlY3V0ZShjbG9zdXJlLm5ld0NhbGxGcmFtZSwgbGxpbnRfZnVuY3Rpb25fZm9yX2Nh
bGxfcHJvbG9ndWUpOwogI2VsaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgcmVzdWx0ID0gY2xvc3Vy
ZS5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkuZXhlY3V0ZSgm
bV9zdGFjaywgY2xvc3VyZS5uZXdDYWxsRnJhbWUsIGNsb3N1cmUuZ2xvYmFsRGF0YSk7CisgICAg
ICAgIHJlc3VsdCA9IGNsb3N1cmUuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2Rl
Rm9yQ2FsbCgpLmV4ZWN1dGUoJm1fc3RhY2ssIGNsb3N1cmUubmV3Q2FsbEZyYW1lLCAmZ2xvYmFs
RGF0YSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKLSAgICAgICAgbV9yZWVudHJ5RGVwdGgtLTsK
ICAgICB9CiAKLSAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gY2xvc3VyZS5vbGRDYWxsRnJh
bWUtPmdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoUHJvZmlsZXIqIHBy
b2ZpbGVyID0gZ2xvYmFsRGF0YS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXIt
PmRpZEV4ZWN1dGUoY2xvc3VyZS5vbGRDYWxsRnJhbWUsIGNsb3N1cmUuZnVuY3Rpb24pOworCisg
ICAgbV9zdGFjay52YWxpZGF0ZUZlbmNlKGNsb3N1cmUubmV3Q2FsbEZyYW1lLCAiQUZURVIiKTsK
ICAgICByZXR1cm4gY2hlY2tlZFJldHVybihyZXN1bHQpOwogfQogCiB2b2lkIEludGVycHJldGVy
OjplbmRSZXBlYXRDYWxsKENhbGxGcmFtZUNsb3N1cmUmIGNsb3N1cmUpCiB7Ci0gICAgY2xvc3Vy
ZS5nbG9iYWxEYXRhLT50b3BDYWxsRnJhbWUgPSBjbG9zdXJlLm9sZENhbGxGcmFtZTsKLSAgICBt
X3N0YWNrLnNocmluayhjbG9zdXJlLm9sZEVuZCk7CisgICAgbV9zdGFjay5wb3BGcmFtZShjbG9z
dXJlLm5ld0NhbGxGcmFtZSk7CiB9CiAKLUpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZh
bEV4ZWN1dGFibGUqIGV2YWwsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgSlNTY29wZSogc2NvcGUsIGludCBnbG9iYWxSZWdpc3Rlck9mZnNldCkKK0pTVmFsdWUgSW50
ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGFibGUqIGV2YWwsIENhbGxGcmFtZSogY2FsbEZy
YW1lLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNTY29wZSogc2NvcGUpCiB7CisgICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gKnNjb3BlLT5nbG9iYWxEYXRhKCk7CiAgICAgU2FtcGxpbmdTY29w
ZSBzYW1wbGluZ1Njb3BlKHRoaXMpOwogICAgIAorICAgIEFTU0VSVChzY29wZS0+Z2xvYmFsRGF0
YSgpID09ICZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7CiAgICAgQVNTRVJUKGlzVmFsaWRUaGlz
T2JqZWN0KHRoaXNWYWx1ZSwgY2FsbEZyYW1lKSk7Ci0gICAgQVNTRVJUKCFzY29wZS0+Z2xvYmFs
RGF0YSgpLT5leGNlcHRpb24pOwotICAgIEFTU0VSVCghY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCku
aXNDb2xsZWN0b3JCdXN5KCkpOwotICAgIGlmIChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5pc0Nv
bGxlY3RvckJ1c3koKSkKKyAgICBBU1NFUlQoIWdsb2JhbERhdGEuZXhjZXB0aW9uKTsKKyAgICBB
U1NFUlQoIWdsb2JhbERhdGEuaXNDb2xsZWN0b3JCdXN5KCkpOworICAgIGlmIChnbG9iYWxEYXRh
LmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBEeW5h
bWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUoKnNjb3BlLT5nbG9iYWxEYXRh
KCksIHNjb3BlLT5nbG9iYWxPYmplY3QoKSk7CisgICAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3Bl
IGdsb2JhbE9iamVjdFNjb3BlKGdsb2JhbERhdGEsIHNjb3BlLT5nbG9iYWxPYmplY3QoKSk7CiAK
LSAgICBpZiAobV9yZWVudHJ5RGVwdGggPj0gTWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGggJiYg
bV9yZWVudHJ5RGVwdGggPj0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkubWF4UmVlbnRyeURlcHRo
KQorICAgIFN0YWNrU3RhdHM6OkNoZWNrUG9pbnQgc3RhY2tDaGVja1BvaW50OworICAgIGNvbnN0
IFN0YWNrQm91bmRzJiBuYXRpdmVTdGFjayA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygpOworICAg
IGlmICghbmF0aXZlU3RhY2suaXNTYWZlVG9SZWN1cnNlKCkpCiAgICAgICAgIHJldHVybiBjaGVj
a2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwogCisgICAgLy8g
Q29tcGlsZSB0aGUgY2FsbGVlOgogICAgIEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBldmFsLT5j
b21waWxlKGNhbGxGcmFtZSwgc2NvcGUpOwogICAgIGlmIChVTkxJS0VMWSghIWNvbXBpbGVFcnJv
cikpCiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93RXJyb3IoY2FsbEZyYW1lLCBj
b21waWxlRXJyb3IpKTsKQEAgLTEyMTQsNyArMTE1Miw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6
OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICAgICAgICAgIHZhcmlhYmxlT2JqZWN0ID0gc2NvcGU7
CiAgICAgICAgIH0KICAgICAgICAgLy8gU2NvcGUgZm9yIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1p
emVyCi0gICAgICAgIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyIG9wdGltaXplcihjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKSwgdmFyaWFibGVPYmplY3QpOworICAgICAgICBCYXRjaGVkVHJhbnNp
dGlvbk9wdGltaXplciBvcHRpbWl6ZXIoZ2xvYmFsRGF0YSwgdmFyaWFibGVPYmplY3QpOwogCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1WYXJpYWJsZXM7ICsraSkgewogICAg
ICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPnZhcmlhYmxlKGkp
OwpAQCAtMTIzMSw0MCArMTE2OSwzNCBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2
YWxFeGVjdXRhCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWdpc3Rlciogb2xkRW5kID0gbV9z
dGFjay5lbmQoKTsKLSAgICBSZWdpc3RlciogbmV3RW5kID0gbV9zdGFjay5iZWdpbigpICsgZ2xv
YmFsUmVnaXN0ZXJPZmZzZXQgKyBjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwotICAg
IGlmICghbV9zdGFjay5ncm93KG5ld0VuZCkpCisgICAgLy8gUHVzaCB0aGUgZnJhbWU6CisgICAg
QVNTRVJUKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID09IDEpOyAvLyAxIHBhcmFtZXRlciBm
b3IgJ3RoaXMnLgorICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gbV9zdGFjay5wdXNoRnJh
bWUoY2FsbEZyYW1lLCBjb2RlQmxvY2ssIHNjb3BlLCAxLCAwKTsKKyAgICBpZiAoVU5MSUtFTFko
IW5ld0NhbGxGcmFtZSkpCiAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93U3RhY2tP
dmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwogCi0gICAgQ2FsbEZyYW1lKiBuZXdDYWxsRnJhbWUg
PSBDYWxsRnJhbWU6OmNyZWF0ZShtX3N0YWNrLmJlZ2luKCkgKyBnbG9iYWxSZWdpc3Rlck9mZnNl
dCk7Ci0KLSAgICBBU1NFUlQoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gMSk7IC8vIDEg
cGFyYW1ldGVyIGZvciAndGhpcycuCi0gICAgbmV3Q2FsbEZyYW1lLT5pbml0KGNvZGVCbG9jaywg
MCwgc2NvcGUsIGNhbGxGcmFtZS0+YWRkSG9zdENhbGxGcmFtZUZsYWcoKSwgY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCksIDApOworICAgIC8vIFNldCB0aGUgYXJndW1lbnRzIGZvciB0aGUgY2Fs
bGVlOgogICAgIG5ld0NhbGxGcmFtZS0+c2V0VGhpc1ZhbHVlKHRoaXNWYWx1ZSk7CiAKLSAgICBU
b3BDYWxsRnJhbWVTZXR0ZXIgdG9wQ2FsbEZyYW1lKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBu
ZXdDYWxsRnJhbWUpOwotCi0gICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9IGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQorICAgIGlmIChQcm9maWxlciogcHJvZmls
ZXIgPSBnbG9iYWxEYXRhLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9maWxlci0+d2ls
bEV4ZWN1dGUoY2FsbEZyYW1lLCBldmFsLT5zb3VyY2VVUkwoKSwgZXZhbC0+bGluZU5vKCkpOwog
CisgICAgLy8gRXhlY3V0ZSB0aGUgY29kZToKICAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICB7CiAg
ICAgICAgIFNhbXBsaW5nVG9vbDo6Q2FsbFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxlci5nZXQo
KSk7Ci0KLSAgICAgICAgbV9yZWVudHJ5RGVwdGgrKzsKICAgICAgICAgCiAjaWYgRU5BQkxFKExM
SU5UX0NfTE9PUCkKICAgICAgICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKG5ld0Nh
bGxGcmFtZSwgbGxpbnRfZXZhbF9wcm9sb2d1ZSk7CiAjZWxpZiBFTkFCTEUoSklUKQotICAgICAg
ICByZXN1bHQgPSBldmFsLT5nZW5lcmF0ZWRKSVRDb2RlKCkuZXhlY3V0ZSgmbV9zdGFjaywgbmV3
Q2FsbEZyYW1lLCBzY29wZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgcmVzdWx0ID0gZXZhbC0+
Z2VuZXJhdGVkSklUQ29kZSgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgJmdsb2Jh
bERhdGEpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0gICAgICAgIG1fcmVlbnRyeURlcHRoLS07
CiAgICAgfQogCi0gICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQorICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBn
bG9iYWxEYXRhLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0
ZShjYWxsRnJhbWUsIGV2YWwtPnNvdXJjZVVSTCgpLCBldmFsLT5saW5lTm8oKSk7CiAKLSAgICBt
X3N0YWNrLnNocmluayhvbGRFbmQpOworICAgIG1fc3RhY2sucG9wRnJhbWUobmV3Q2FsbEZyYW1l
KTsKICAgICByZXR1cm4gY2hlY2tlZFJldHVybihyZXN1bHQpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24g
MTMxODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
Y2xhc3MgRXZhbEV4ZWN1dGFibGU7CiAgICAgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiAgICAgY2xh
c3MgRnVuY3Rpb25FeGVjdXRhYmxlOworICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICBjbGFz
cyBKU0dsb2JhbE9iamVjdDsKICAgICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAg
Y2xhc3MgUHJvZ3JhbUV4ZWN1dGFibGU7CkBAIC0xNzAsMjEgKzE3MSwxNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgfQogICAgIH07CiAKLSAgICAvLyBXZSB1c2UgYSBzbWFsbGVyIHJlZW50
cmFuY3kgbGltaXQgb24gaVBob25lIGJlY2F1c2Ugb2YgdGhlIGhpZ2ggYW1vdW50IG9mCi0gICAg
Ly8gc3RhY2sgc3BhY2UgcmVxdWlyZWQgb24gdGhlIHdlYiB0aHJlYWQuCi0jaWYgUExBVEZPUk0o
SU9TKQotICAgIGVudW0geyBNYXhMYXJnZVRocmVhZFJlZW50cnlEZXB0aCA9IDY0LCBNYXhTbWFs
bFRocmVhZFJlZW50cnlEZXB0aCA9IDE2IH07Ci0jZWxzZQotICAgIGVudW0geyBNYXhMYXJnZVRo
cmVhZFJlZW50cnlEZXB0aCA9IDI1NiwgTWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGggPSAxNiB9
OwotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKLQogICAgIGNsYXNzIEludGVycHJldGVyIHsKICAg
ICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDYWNo
ZWRDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAg
ICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIHB1YmxpYzoKLSAgICAgICAgSW50ZXJwcmV0ZXIo
KTsKKworICAgICAgICBJbnRlcnByZXRlcihKU0dsb2JhbERhdGEgJik7CiAgICAgICAgIH5JbnRl
cnByZXRlcigpOwogICAgICAgICAKICAgICAgICAgdm9pZCBpbml0aWFsaXplKGJvb2wgY2FuVXNl
SklUKTsKQEAgLTIxOCw3ICsyMTIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNWYWx1
ZSBleGVjdXRlQ2FsbChDYWxsRnJhbWUqLCBKU09iamVjdCogZnVuY3Rpb24sIENhbGxUeXBlLCBj
b25zdCBDYWxsRGF0YSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CiAgICAg
ICAgIEpTT2JqZWN0KiBleGVjdXRlQ29uc3RydWN0KENhbGxGcmFtZSosIEpTT2JqZWN0KiBmdW5j
dGlvbiwgQ29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYsIGNvbnN0IEFyZ0xpc3Qm
KTsKICAgICAgICAgSlNWYWx1ZSBleGVjdXRlKEV2YWxFeGVjdXRhYmxlKiwgQ2FsbEZyYW1lKiwg
SlNWYWx1ZSB0aGlzVmFsdWUsIEpTU2NvcGUqKTsKLSAgICAgICAgSlNWYWx1ZSBleGVjdXRlKEV2
YWxFeGVjdXRhYmxlKiwgQ2FsbEZyYW1lKiwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTU2NvcGUqLCBp
bnQgZ2xvYmFsUmVnaXN0ZXJPZmZzZXQpOwogCiAgICAgICAgIEpTVmFsdWUgcmV0cmlldmVBcmd1
bWVudHNGcm9tVk1Db2RlKENhbGxGcmFtZSosIEpTRnVuY3Rpb24qKSBjb25zdDsKICAgICAgICAg
SlNWYWx1ZSByZXRyaWV2ZUNhbGxlckZyb21WTUNvZGUoQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiop
IGNvbnN0OwpAQCAtMjQ5LDggKzI0Miw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIE5F
VkVSX0lOTElORSBib29sIHVud2luZENhbGxGcmFtZShDYWxsRnJhbWUqJiwgSlNWYWx1ZSwgdW5z
aWduZWQmIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqJik7CiAKLSAgICAgICAgc3RhdGljIEFM
V0FZU19JTkxJTkUgQ2FsbEZyYW1lKiBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChDb2RlQmxv
Y2sqLCBKU1N0YWNrKiwgQ2FsbEZyYW1lKiwgc2l6ZV90IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJn
Yyk7Ci0KICAgICAgICAgc3RhdGljIENhbGxGcmFtZSogZmluZEZ1bmN0aW9uQ2FsbEZyYW1lRnJv
bVZNQ29kZShDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKik7CiAKICAgICAgICAgdm9pZCBkdW1wUmVn
aXN0ZXJzKENhbGxGcmFtZSopOwpAQCAtMjYxLDggKzI1Miw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBpbnQgbV9zYW1wbGVFbnRyeURlcHRoOwogICAgICAgICBPd25QdHI8U2FtcGxpbmdU
b29sPiBtX3NhbXBsZXI7CiAKLSAgICAgICAgaW50IG1fcmVlbnRyeURlcHRoOwotCisgICAgICAg
IEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogICAgICAgICBKU1N0YWNrIG1fc3RhY2s7CiAg
ICAgICAgIAogI2lmIEVOQUJMRShDT01QVVRFRF9HT1RPX09QQ09ERVMpICYmIEVOQUJMRShMTElO
VCkKQEAgLTI4MSwxMSArMjcxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiAh
dGhpc1ZhbHVlLmlzT2JqZWN0KCkgfHwgdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKSA9PSB0
aGlzVmFsdWU7CiAgICAgfQogCi0gICAgaW5saW5lIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1
dGUoRXZhbEV4ZWN1dGFibGUqIGV2YWwsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgSlNTY29wZSogc2NvcGUpCi0gICAgewotICAgICAgICByZXR1cm4gZXhlY3V0ZShl
dmFsLCBjYWxsRnJhbWUsIHRoaXNWYWx1ZSwgc2NvcGUsIG1fc3RhY2suc2l6ZSgpICsgMSArIEpT
U3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUpOwotICAgIH0KLQogICAgIEpTVmFsdWUgZXZhbChD
YWxsRnJhbWUqKTsKICAgICBDYWxsRnJhbWUqIGxvYWRWYXJhcmdzKENhbGxGcmFtZSosIEpTU3Rh
Y2sqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNWYWx1ZSBhcmd1bWVudHMsIGludCBmaXJzdEZyZWVS
ZWdpc3Rlcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0
YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SlNTdGFjay5jcHAJKHJldmlzaW9uIDEzMTg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9KU1N0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNTdGFjay5oIgorI2luY2x1ZGUgIkpT
U3RhY2tJbmxpbmVkLmgiCiAKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogI2luY2x1
ZGUgIkludGVycHJldGVyLmgiCkBAIC00Miw2ICs0MywyMyBAQCBzdGF0aWMgTXV0ZXgmIHN0YWNr
U3RhdGlzdGljc011dGV4KCkKICAgICByZXR1cm4gc3RhdGljTXV0ZXg7CiB9ICAgIAogICAgIAor
SlNTdGFjazo6SlNTdGFjayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBjYXBhY2l0
eSkKKyAgICA6IG1fZW5kKDApCisgICAgLCBtX3RvcENhbGxGcmFtZShnbG9iYWxEYXRhLnRvcENh
bGxGcmFtZSkKK3sKKyAgICBBU1NFUlQoY2FwYWNpdHkgJiYgaXNQYWdlQWxpZ25lZChjYXBhY2l0
eSkpOworCisgICAgbV9yZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZShyb3Vu
ZFVwQWxsb2NhdGlvblNpemUoY2FwYWNpdHkgKiBzaXplb2YoUmVnaXN0ZXIpLCBjb21taXRTaXpl
KSwgT1NBbGxvY2F0b3I6OkpTVk1TdGFja1BhZ2VzKTsKKyAgICBtX2VuZCA9IHN0YXRpY19jYXN0
PFJlZ2lzdGVyKj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOworICAgIG1fY29tbWl0RW5kID0gc3Rh
dGljX2Nhc3Q8UmVnaXN0ZXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7CisKKyAgICBjaGFyKiBy
ZXNlcnZhdGlvbkVuZCA9IHN0YXRpY19jYXN0PGNoYXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSkg
KyBtX3Jlc2VydmF0aW9uLnNpemUoKTsKKyAgICBjaGFyKiB1c2VhYmxlRW5kID0gcmVzZXJ2YXRp
b25FbmQgLSBjb21taXRTaXplOworICAgIGRpc2FibGVFcnJvclN0YWNrUmVzZXJ2ZShyZWludGVy
cHJldF9jYXN0PFJlZ2lzdGVyKj4odXNlYWJsZUVuZCkpOworCisgICAgbV90b3BDYWxsRnJhbWUg
PSAwOworfQorCiBKU1N0YWNrOjp+SlNTdGFjaygpCiB7CiAgICAgdm9pZCogYmFzZSA9IG1fcmVz
ZXJ2YXRpb24uYmFzZSgpOwpAQCAtNTIsMTUgKzcwLDIyIEBAIEpTU3RhY2s6On5KU1N0YWNrKCkK
IAogYm9vbCBKU1N0YWNrOjpncm93U2xvd0Nhc2UoUmVnaXN0ZXIqIG5ld0VuZCkKIHsKKyAgICAv
LyBJZiB3ZSBoYXZlIGFscmVhZHkgY29tbWl0dGVkIGVub3VnaCBtZW1vcnkgdG8gc2F0aXNmeSB0
aGlzIHJlcXVlc3QsCisgICAgLy8ganVzdCB1cGRhdGUgdGhlIGVuZCBwb2ludGVyIGFuZCByZXR1
cm4uCiAgICAgaWYgKG5ld0VuZCA8PSBtX2NvbW1pdEVuZCkgewogICAgICAgICBtX2VuZCA9IG5l
d0VuZDsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgLy8gQ29tcHV0ZSB0aGUg
Y2h1bmsgc2l6ZSBvZiBhZGRpdGlvbmFsIG1lbW9yeSB0byBjb21taXQsIGFuZCBzZWUgaWYgd2UK
KyAgICAvLyBoYXZlIGl0IGlzIHN0aWxsIHdpdGhpbiBvdXIgYnVkZ2V0LiBJZiBub3QsIHdlJ2xs
IGZhaWwgdG8gZ3JvdyBhbmQKKyAgICAvLyByZXR1cm4gZmFsc2UuCiAgICAgbG9uZyBkZWx0YSA9
IHJvdW5kVXBBbGxvY2F0aW9uU2l6ZShyZWludGVycHJldF9jYXN0PGNoYXIqPihuZXdFbmQpIC0g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9jb21taXRFbmQpLCBjb21taXRTaXplKTsKLSAgICBp
ZiAocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9jb21taXRFbmQpICsgZGVsdGEgPiBzdGF0aWNf
Y2FzdDxjaGFyKj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpICsgbV9yZXNlcnZhdGlvbi5zaXplKCkp
CisgICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fY29tbWl0RW5kKSArIGRlbHRhID4g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV91c2VhYmxlRW5kKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgZ3Jvd3RoIGlzIHN0aWxsIHdpdGhpbiBvdXIg
YnVkZ2V0LiBHbyBhaGVhZCBhbmQgY29tbWl0CisgICAgLy8gaXQgYW5kIHJldHVybiB0cnVlLgog
ICAgIG1fcmVzZXJ2YXRpb24uY29tbWl0KG1fY29tbWl0RW5kLCBkZWx0YSk7CiAgICAgYWRkVG9D
b21taXR0ZWRCeXRlQ291bnQoZGVsdGEpOwogICAgIG1fY29tbWl0RW5kID0gcmVpbnRlcnByZXRf
Y2FzdF9wdHI8UmVnaXN0ZXIqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihtX2NvbW1pdEVuZCkg
KyBkZWx0YSk7CkBAIC03MCwxMiArOTUsMTIgQEAgYm9vbCBKU1N0YWNrOjpncm93U2xvd0Nhc2Uo
UmVnaXN0ZXIqIG5ldwogCiB2b2lkIEpTU3RhY2s6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENv
bnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKIHsKLSAgICBjb25zZXJ2YXRpdmVS
b290cy5hZGQoYmVnaW4oKSwgZW5kKCkpOworICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdp
bigpLCBnZXRUb3BPZlN0YWNrKCkpOwogfQogCiB2b2lkIEpTU3RhY2s6OmdhdGhlckNvbnNlcnZh
dGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywgSklUU3R1YlJv
dXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcywgREZHQ29kZUJsb2NrcyYgZGZnQ29kZUJsb2NrcykK
IHsKLSAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZW5kKCksIGppdFN0dWJSb3V0
aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCks
IGdldFRvcE9mU3RhY2soKSwgaml0U3R1YlJvdXRpbmVzLCBkZmdDb2RlQmxvY2tzKTsKIH0KIAog
dm9pZCBKU1N0YWNrOjpyZWxlYXNlRXhjZXNzQ2FwYWNpdHkoKQpAQCAtMTA0LDQgKzEyOSw1MyBA
QCB2b2lkIEpTU3RhY2s6OmFkZFRvQ29tbWl0dGVkQnl0ZUNvdW50KGxvCiAgICAgY29tbWl0dGVk
Qnl0ZXNDb3VudCArPSBieXRlQ291bnQ7CiB9CiAKKy8vIGVuYWJsZUVycm9yU3RhY2tSZXNlcnZl
KCkgYW5kIGRpc2FibGVFcnJvclN0YWNrUmVzZXJ2ZSgpIGFyZSBmb3IgcHJpdmF0ZQorLy8gdXNl
IG9ubHksIGFuZCBpcyBvbmx5IHVzZWQgYnkgdGhlIEVycm9yU3RhY2tSZXNlcnZlRW5hYmxlciBj
bGFzcyB3aGljaAorLy8gZW5zdXJlcyB0aGF0IHRoZXkgYXJlIGNhbGxlZCBpbiBhIHBhaXJlZCBm
YXNoaW9uLgorLy8KKy8vIGVuYWJsZUVycm9yU3RhY2tSZXNlcnZlKCkgYW5kIGRpc2FibGVFcnJv
clN0YWNrUmVzZXJ2ZSgpIGNhbiBiZSBjYWxsZWQKKy8vIGluIGEgbmVzdGVkIGZhc2hpb24gaS5l
LiB3ZSBjYW4gZW5hYmxlLi4uKCkgTiB0aW1lcyBiZWZvcmUgd2UgY2FsbAorLy8gZGlzYWJsZS4u
LigpLCBhcyBsb25nIGFzIHRoZSBudW1iZXIgb2YgZW5hYmxlLi4uKCkgYW5kIGRpc2FibGUuLi4o
KQorLy8gYXJlIHBlcmZlY3RseSBtYXRjaGVkIGkuZS4gZXF1YWwgaW4gbnVtYmVyLiBUaGlzIG1l
YW5zIHRoYXQgdGhlIGNsaWVudCBjYW4KKy8vIGluc3RhbnRpYXRlcyBtdWx0aXBsZSBpbnN0YW5j
ZXMgb2YgRXJyb3JTdGFja1Jlc2VydmVFbmFibGVyLgorLy8KKy8vIFRoZSBmaXJzdCB0aW1lIEVy
cm9yU3RhY2tSZXNlcnZlRW5hYmxlciBpcyBpbnN0YW50aWF0ZWQgb24gdGhlIHN0YWNrLCB0aGUK
Ky8vIGVycm9yIHN0YWNrIHJlc2VydmUgd2lsbCBiZSBlbmFibGVkLiBTdWJzZXF1ZW50IGluc3Rh
bnRpYXRpb25zIG9mCisvLyBFcnJvclN0YWNrUmVzZXJ2ZUVuYWJsZXIgd2lsbCBub3QgYWRkIGFu
eSBhZGRpdGlvbmFsIHN0YWNrIHNwYWNlLiBJZgorLy8gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIEVy
cm9yU3RhY2tSZXNlcnZlRW5hYmxlciBpcyBpbiB1c2UsIHRoZSByZXNlcnZlIHN0YWNrCisvLyBz
cGFjZSB3aWxsIGJlIGFsbG93ZWQgdG8gYmUgdXNlZCB1bnRpbCB0aGUgbGFzdCBpbnN0YW5jZSBv
ZgorLy8gRXJyb3JTdGFja1Jlc2VydmVFbmFibGVyIGlzIGRlc3RydWN0ZWQuCisKK1JlZ2lzdGVy
KiBKU1N0YWNrOjplbmFibGVFcnJvclN0YWNrUmVzZXJ2ZSgpCit7CisgICAgUmVnaXN0ZXIqIG9s
ZExpbWl0ID0gbV91c2VhYmxlRW5kOworICAgIGNoYXIqIHJlc2VydmF0aW9uRW5kID0gc3RhdGlj
X2Nhc3Q8Y2hhcio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKSArIG1fcmVzZXJ2YXRpb24uc2l6ZSgp
OworICAgIG1fdXNlYWJsZUVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPihyZXNlcnZh
dGlvbkVuZCk7CisgICAgcmV0dXJuIG9sZExpbWl0OworfQorCit2b2lkIEpTU3RhY2s6OmRpc2Fi
bGVFcnJvclN0YWNrUmVzZXJ2ZShSZWdpc3Rlciogb2xkTGltaXQpCit7CisgICAgQVNTRVJUKHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9sZExpbWl0KSA+IHN0YXRpY19jYXN0PGNoYXIqPihtX3Jl
c2VydmF0aW9uLmJhc2UoKSkpOworICAgIEFTU0VSVChyZWludGVycHJldF9jYXN0PGNoYXIqPihv
bGRMaW1pdCkgPD0gc3RhdGljX2Nhc3Q8Y2hhcio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKSArIG1f
cmVzZXJ2YXRpb24uc2l6ZSgpKTsKKyAgICBtX3VzZWFibGVFbmQgPSBvbGRMaW1pdDsKKworICAg
IGlmIChtX2VuZCA+IG1fdXNlYWJsZUVuZCkgeworICAgICAgICBBU1NFUlQobV90b3BDYWxsRnJh
bWUtPmZyYW1lRXh0ZW50KCkgPCBtX3VzZWFibGVFbmQpOworICAgICAgICBzaHJpbmsobV91c2Vh
YmxlRW5kKTsKKyAgICB9Cit9CisKKworSlNTdGFjazo6RXJyb3JTdGFja1Jlc2VydmVFbmFibGVy
OjpFcnJvclN0YWNrUmVzZXJ2ZUVuYWJsZXIoRXhlY1N0YXRlKiBleGVjKQorICAgIDogbV9zdGFj
ayhleGVjLT5pbnRlcnByZXRlcigpLT5zdGFjaygpKQoreworICAgIG1fb2xkTGltaXQgPSBtX3N0
YWNrLmVuYWJsZUVycm9yU3RhY2tSZXNlcnZlKCk7Cit9CisKK0pTU3RhY2s6OkVycm9yU3RhY2tS
ZXNlcnZlRW5hYmxlcjo6fkVycm9yU3RhY2tSZXNlcnZlRW5hYmxlcigpCit7CisgICAgbV9zdGFj
ay5kaXNhYmxlRXJyb3JTdGFja1Jlc2VydmUobV9vbGRMaW1pdCk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFj
ay5oCShyZXZpc2lvbiAxMzE4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSlNTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNSArMzEsMjIgQEAKIAogI2luY2x1
ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5oIgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2YXRpb24uaD4KICNpbmNsdWRlIDx3dGYvVk1UYWdz
Lmg+CiAKKyNpZiAhZGVmaW5lZChOREVCVUcpICYmICFkZWZpbmVkKEVOQUJMRV9ERUJVR19KU1NU
QUNLKQorI2RlZmluZSBFTkFCTEVfREVCVUdfSlNTVEFDSyAxCisjZW5kaWYKKwogbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKICAgICBjbGFzcyBERkdDb2Rl
QmxvY2tzOworICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBKSVRTdHViUm91dGluZVNl
dDsKKyAgICBjbGFzcyBKU0dsb2JhbERhdGE7CiAgICAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwogCiAgICAgY2xhc3MgSlNTdGFjayB7CkBAIC02MSw3ICs2OCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAvLyBBbGxvdyA4ayBvZiBleGNlc3MgcmVnaXN0ZXJzIGJlZm9yZSB3ZSBz
dGFydCB0cnlpbmcgdG8gcmVhcCB0aGUgc3RhY2sKICAgICAgICAgc3RhdGljIGNvbnN0IHB0cmRp
ZmZfdCBtYXhFeGNlc3NDYXBhY2l0eSA9IDggKiAxMDI0OwogCi0gICAgICAgIEpTU3RhY2soc2l6
ZV90IGNhcGFjaXR5ID0gZGVmYXVsdENhcGFjaXR5KTsKKyAgICAgICAgSlNTdGFjayhKU0dsb2Jh
bERhdGEmLCBzaXplX3QgY2FwYWNpdHkgPSBkZWZhdWx0Q2FwYWNpdHkpOwogICAgICAgICB+SlNT
dGFjaygpOwogICAgICAgICAKICAgICAgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhD
b25zZXJ2YXRpdmVSb290cyYpOwpAQCAtNzIsNyArNzksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBlbmQoKSAtIGJlZ2luKCk7IH0KIAog
ICAgICAgICBib29sIGdyb3coUmVnaXN0ZXIqKTsKLSAgICAgICAgdm9pZCBzaHJpbmsoUmVnaXN0
ZXIqKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBzaXplX3QgY29tbWl0dGVkQnl0ZUNvdW50
KCk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKTsKQEAgLTgyLDI2
ICs4OCw1NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAmbV9lbmQ7CiAg
ICAgICAgIH0KIAorICAgICAgICBSZWdpc3RlciogZ2V0VG9wT2ZGcmFtZShDYWxsRnJhbWUqKTsK
KyAgICAgICAgUmVnaXN0ZXIqIGdldFN0YXJ0T2ZGcmFtZShDYWxsRnJhbWUqKTsKKyAgICAgICAg
UmVnaXN0ZXIqIGdldFRvcE9mU3RhY2soKTsKKworICAgICAgICBDYWxsRnJhbWUqIHB1c2hGcmFt
ZShDYWxsRnJhbWUqIGNhbGxlckZyYW1lLCBjbGFzcyBDb2RlQmxvY2sqLAorICAgICAgICAgICAg
SlNTY29wZSosIGludCBhcmdzQ291bnQsIEpTT2JqZWN0KiBjYWxsZWUpOworCisgICAgICAgIHZv
aWQgcG9wRnJhbWUoQ2FsbEZyYW1lKik7CisKKyAgICAgICAgY2xhc3MgRXJyb3JTdGFja1Jlc2Vy
dmVFbmFibGVyIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgRXJyb3JTdGFja1Jlc2VydmVFbmFibGVyKEV4ZWNTdGF0ZSopOworICAgICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgfkVycm9yU3RhY2tSZXNlcnZlRW5hYmxlcigpOworICAgICAgICBwcml2
YXRlOgorICAgICAgICAgICAgSlNTdGFjayYgbV9zdGFjazsKKyAgICAgICAgICAgIFJlZ2lzdGVy
KiBtX29sZExpbWl0OworICAgICAgICB9OworCisjaWYgRU5BQkxFKERFQlVHX0pTU1RBQ0spCisg
ICAgICAgIHZvaWQgaW5zdGFsbEZlbmNlKENhbGxGcmFtZSosIGNvbnN0IGNoYXIgKmZ1bmN0aW9u
ID0gIiIsIGludCBsaW5lTm8gPSAwKTsKKyAgICAgICAgdm9pZCB2YWxpZGF0ZUZlbmNlKENhbGxG
cmFtZSosIGNvbnN0IGNoYXIgKmZ1bmN0aW9uID0gIiIsIGludCBsaW5lTm8gPSAwKTsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBGZW5jZVNpemUgPSA0OworI2Vsc2UgLy8gIUVOQUJMRShERUJV
R19KU1NUQUNLKQorICAgICAgICB2b2lkIGluc3RhbGxGZW5jZShDYWxsRnJhbWUqLCBjb25zdCBj
aGFyKiA9ICIiLCBpbnQgPSAwKSB7IH0KKyAgICAgICAgdm9pZCB2YWxpZGF0ZUZlbmNlKENhbGxG
cmFtZSosIGNvbnN0IGNoYXIqID0gIiIsIGludCA9IDApIHsgfQorI2VuZGlmIC8vICFFTkFCTEUo
REVCVUdfSlNTVEFDSykKKwogICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CisjaWYgRU5BQkxFKERFQlVHX0pTU1RBQ0spCisgICAgICAgIHN0
YXRpYyBKU1ZhbHVlIGdlbmVyYXRlRmVuY2VWYWx1ZShzaXplX3QgYXJnSW5kZXgpOworICAgICAg
ICB2b2lkIGluc3RhbGxUcmFwc0FmdGVyRnJhbWUoQ2FsbEZyYW1lKik7CisjZWxzZQorICAgICAg
ICB2b2lkIGluc3RhbGxUcmFwc0FmdGVyRnJhbWUoQ2FsbEZyYW1lKikgeyB9CisjZW5kaWYKIAog
ICAgICAgICBib29sIGdyb3dTbG93Q2FzZShSZWdpc3RlciopOworICAgICAgICB2b2lkIHNocmlu
ayhSZWdpc3RlciopOwogICAgICAgICB2b2lkIHJlbGVhc2VFeGNlc3NDYXBhY2l0eSgpOwogICAg
ICAgICB2b2lkIGFkZFRvQ29tbWl0dGVkQnl0ZUNvdW50KGxvbmcpOworCisgICAgICAgIFJlZ2lz
dGVyKiBlbmFibGVFcnJvclN0YWNrUmVzZXJ2ZSgpOworICAgICAgICB2b2lkIGRpc2FibGVFcnJv
clN0YWNrUmVzZXJ2ZShSZWdpc3Rlciogb2xkTGltaXQpOworCiAgICAgICAgIFJlZ2lzdGVyKiBt
X2VuZDsKICAgICAgICAgUmVnaXN0ZXIqIG1fY29tbWl0RW5kOworICAgICAgICBSZWdpc3Rlciog
bV91c2VhYmxlRW5kOwogICAgICAgICBQYWdlUmVzZXJ2YXRpb24gbV9yZXNlcnZhdGlvbjsKLSAg
ICB9OwotCi0gICAgaW5saW5lIEpTU3RhY2s6OkpTU3RhY2soc2l6ZV90IGNhcGFjaXR5KQotICAg
ICAgICA6IG1fZW5kKDApCi0gICAgewotICAgICAgICBBU1NFUlQoY2FwYWNpdHkgJiYgaXNQYWdl
QWxpZ25lZChjYXBhY2l0eSkpOworICAgICAgICBDYWxsRnJhbWUqJiBtX3RvcENhbGxGcmFtZTsK
IAotICAgICAgICBtX3Jlc2VydmF0aW9uID0gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlKHJvdW5k
VXBBbGxvY2F0aW9uU2l6ZShjYXBhY2l0eSAqIHNpemVvZihSZWdpc3RlciksIGNvbW1pdFNpemUp
LCBPU0FsbG9jYXRvcjo6SlNWTVN0YWNrUGFnZXMpOwotICAgICAgICBtX2VuZCA9IHN0YXRpY19j
YXN0PFJlZ2lzdGVyKj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOwotICAgICAgICBtX2NvbW1pdEVu
ZCA9IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOwotICAgIH0K
KyAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKyAgICB9OwogCiAg
ICAgaW5saW5lIHZvaWQgSlNTdGFjazo6c2hyaW5rKFJlZ2lzdGVyKiBuZXdFbmQpCiAgICAgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2tJbmxpbmVkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2tJ
bmxpbmVkLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSlNTdGFja0lubGluZWQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1N0YWNr
SW5saW5lZF9oCisjZGVmaW5lIEpTU3RhY2tJbmxpbmVkX2gKKworI2luY2x1ZGUgIkNhbGxGcmFt
ZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkpTU3RhY2suaCIKKyNpbmNs
dWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBSZWdp
c3RlciogSlNTdGFjazo6Z2V0VG9wT2ZGcmFtZShDYWxsRnJhbWUqIGZyYW1lKQoreworICAgIGlm
IChVTkxJS0VMWSghZnJhbWUpKQorICAgICAgICByZXR1cm4gYmVnaW4oKTsKKyAgICByZXR1cm4g
ZnJhbWUtPmZyYW1lRXh0ZW50KCk7Cit9CisKK2lubGluZSBSZWdpc3RlciogSlNTdGFjazo6Z2V0
VG9wT2ZTdGFjaygpCit7CisgICAgcmV0dXJuIGdldFRvcE9mRnJhbWUobV90b3BDYWxsRnJhbWUp
OworfQorCitpbmxpbmUgUmVnaXN0ZXIqIEpTU3RhY2s6OmdldFN0YXJ0T2ZGcmFtZShDYWxsRnJh
bWUqIGZyYW1lKQoreworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBmcmFtZS0+Y2FsbGVy
RnJhbWVOb0ZsYWdzKCk7CisgICAgcmV0dXJuIGdldFRvcE9mRnJhbWUoY2FsbGVyRnJhbWUpOwor
fQorCitpbmxpbmUgQ2FsbEZyYW1lKiBKU1N0YWNrOjpwdXNoRnJhbWUoQ2FsbEZyYW1lKiBjYWxs
ZXJGcmFtZSwKKyAgICBjbGFzcyBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNTY29wZSogc2NvcGUs
IGludCBhcmdzQ291bnQsIEpTT2JqZWN0KiBjYWxsZWUpCit7CisgICAgQVNTRVJUKCEhc2NvcGUp
OworICAgIFJlZ2lzdGVyKiBvbGRFbmQgPSBnZXRUb3BPZlN0YWNrKCk7CisKKyAgICAvLyBFbnN1
cmUgdGhhdCB3ZSBoYXZlIGVub3VnaCBzcGFjZSBmb3IgdGhlIHBhcmFtZXRlcnM6CisgICAgc2l6
ZV90IHBhZGRlZEFyZ3NDb3VudCA9IGFyZ3NDb3VudDsKKyAgICBpZiAoY29kZUJsb2NrKSB7Cisg
ICAgICAgIHNpemVfdCBudW1QYXJhbWV0ZXJzID0gY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7
CisgICAgICAgIGlmIChwYWRkZWRBcmdzQ291bnQgPCBudW1QYXJhbWV0ZXJzKQorICAgICAgICAg
ICAgcGFkZGVkQXJnc0NvdW50ID0gbnVtUGFyYW1ldGVyczsKKyAgICB9CisKKyAgICBSZWdpc3Rl
ciogbmV3Q2FsbEZyYW1lU2xvdCA9IG9sZEVuZCArIHBhZGRlZEFyZ3NDb3VudCArIEpTU3RhY2s6
OkNhbGxGcmFtZUhlYWRlclNpemU7CisjaWYgRU5BQkxFKERFQlVHX0pTU1RBQ0spCisgICAgbmV3
Q2FsbEZyYW1lU2xvdCArPSBKU1N0YWNrOjpGZW5jZVNpemU7CisjZW5kaWYKKyAgICBSZWdpc3Rl
ciogbmV3RW5kID0gbmV3Q2FsbEZyYW1lU2xvdDsKKyAgICBpZiAoISFjb2RlQmxvY2spCisgICAg
ICAgIG5ld0VuZCArPSBjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOworCisgICAgLy8g
RW5zdXJlIHRoYXQgd2UgaGF2ZSB0aGUgbmVlZGVkIHN0YWNrIGNhcGFjaXR5IHRvIHB1c2ggdGhl
IG5ldyBmcmFtZToKKyAgICBpZiAoIWdyb3cobmV3RW5kKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICAvLyBDb21wdXRlIHRoZSBhZGRyZXNzIG9mIHRoZSBuZXcgZnJhbWUgZm9yIHRoaXMgaW52
b2NhdGlvbjoKKyAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRl
KG5ld0NhbGxGcmFtZVNsb3QpOworICAgIEFTU0VSVCghIW5ld0NhbGxGcmFtZSk7CisKKyAgICAv
LyBUaGUgY2FsbGVyIGZyYW1lIHNob3VsZCBhbHdheXMgYmUgdGhlIHJlYWwgcHJldmlvdXMgZnJh
bWUgb24gdGhlIHN0YWNrLAorICAgIC8vIGFuZCBub3QgYSBwb3RlbnRpYWwgR2xvYmFsRXhlYyB0
aGF0IHdhcyBwYXNzZWQgaW4uIFBvaW50IGNhbGxlckZyYW1lIHRvCisgICAgLy8gdGhlIHRvcCBm
cmFtZSBvbiB0aGUgc3RhY2suCisgICAgY2FsbGVyRnJhbWUgPSBtX3RvcENhbGxGcmFtZTsKKwor
ICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIGhlYWRlcjoKKyAgICBuZXdDYWxsRnJhbWUtPmlu
aXQoY29kZUJsb2NrLCAwLCBzY29wZSwKKyAgICAgICAgY2FsbGVyRnJhbWUtPmFkZEhvc3RDYWxs
RnJhbWVGbGFnKCksIGFyZ3NDb3VudCwgY2FsbGVlKTsKKworICAgIEFTU0VSVCghIW5ld0NhbGxG
cmFtZS0+c2NvcGUoKSk7CisKKyAgICAvLyBQYWQgYWRkaXRpb25hbCBhcmdzIGlmIG5lZWRlZDoK
KyAgICAvLyBOb3RlOiB3ZSBuZWVkIHRvIHN1YnRyYWN0IDEgZnJvbSBhcmdzQ291bnQgYW5kIHBh
ZGRlZEFyZ3NDb3VudCB0bworICAgIC8vIGV4Y2x1ZGUgdGhlIHRoaXMgcG9pbnRlci4KKyAgICBm
b3IgKHNpemVfdCBpID0gYXJnc0NvdW50LTE7IGkgPCBwYWRkZWRBcmdzQ291bnQtMTsgKytpKQor
ICAgICAgICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGpzVW5kZWZpbmVkKCkpOworCisg
ICAgaW5zdGFsbEZlbmNlKG5ld0NhbGxGcmFtZSwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7Cisg
ICAgdmFsaWRhdGVGZW5jZShuZXdDYWxsRnJhbWUsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOwor
ICAgIGluc3RhbGxUcmFwc0FmdGVyRnJhbWUobmV3Q2FsbEZyYW1lKTsKKworICAgIC8vIFB1c2gg
dGhlIG5ldyBmcmFtZToKKyAgICBtX3RvcENhbGxGcmFtZSA9IG5ld0NhbGxGcmFtZTsKKworICAg
IHJldHVybiBuZXdDYWxsRnJhbWU7Cit9CisKK2lubGluZSB2b2lkIEpTU3RhY2s6OnBvcEZyYW1l
KENhbGxGcmFtZSogZnJhbWUpCit7CisgICAgdmFsaWRhdGVGZW5jZShmcmFtZSwgX19GVU5DVElP
Tl9fLCBfX0xJTkVfXyk7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGZyYW1lLT5jYWxs
ZXJGcmFtZU5vRmxhZ3MoKTsKKworICAgIC8vIFBvcCB0byB0aGUgY2FsbGVyOgorICAgIG1fdG9w
Q2FsbEZyYW1lID0gY2FsbGVyRnJhbWU7CisKKyAgICAvLyBJZiB3ZSBhcmUgcG9wcGluZyB0aGUg
dmVyeSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzdGFjayBpLmUuIG5vIG1vcmUKKyAgICAvLyBmcmFt
ZXMgYmVmb3JlIHRoaXMsIHRoZW4gd2UgY2FuIG5vdyBzYWZlbHkgc2hyaW5rIHRoZSBzdGFjay4g
SW4KKyAgICAvLyB0aGlzIGNhc2UsIHdlJ3JlIHNocmlua2luZyBhbGwgdGhlIHdheSB0byB0aGUg
YmVnaW5uaW5nIHNpbmNlIHRoZXJlCisgICAgLy8gYXJlIG5vIG1vcmUgZnJhbWVzIG9uIHRoZSBz
dGFjay4KKyAgICBpZiAoIWNhbGxlckZyYW1lKQorICAgICAgICBzaHJpbmsoYmVnaW4oKSk7CisK
KyAgICBpbnN0YWxsVHJhcHNBZnRlckZyYW1lKGNhbGxlckZyYW1lKTsKK30KKworCisjaWYgRU5B
QkxFKERFQlVHX0pTU1RBQ0spCitpbmxpbmUgSlNWYWx1ZSBKU1N0YWNrOjpnZW5lcmF0ZUZlbmNl
VmFsdWUoc2l6ZV90IGFyZ0luZGV4KQoreworICAgIHVuc2lnbmVkIGZlbmNlQml0cyA9IDB4ZmFj
ZWJhZDAgfCAoKGFyZ0luZGV4KzEpICYgMHhmKTsKKyAgICBKU1ZhbHVlIGZlbmNlVmFsdWUgPSBK
U1ZhbHVlKGZlbmNlQml0cyk7CisgICAgcmV0dXJuIGZlbmNlVmFsdWU7Cit9CisKKy8vIFRoZSBK
U1N0YWNrIGZlbmNlcyBtZWNoYW5pc20gd29ya3MgYXMgZm9sbG93czoKKy8vIDEuIEEgZmVuY2Ug
aXMgYSBudW1iZXIgKEpTU3RhY2s6OkZlbmNlU2l6ZSkgb2YgSlNWYWx1ZXMgdGhhdCBhcmUgaW5p
dGlhbGl6ZWQKKy8vICAgIHdpdGggdmFsdWVzIGdlbmVyYXRlZCBieSBKU1N0YWNrOjpnZW5lcmF0
ZUZlbmNlVmFsdWUoKS4KKy8vIDIuIFdoZW4gcHVzaEZyYW1lKCkgaXMgY2FsbGVkLCB0aGUgZmVu
Y2UgaXMgaW5zdGFsbGVkIGFmdGVyIHRoZSBtYXggZXh0ZW50CisvLyAgICBvZiB0aGUgcHJldmlv
dXMgdG9wQ2FsbEZyYW1lIGFuZCB0aGUgbGFzdCBhcmcgb2YgdGhlIG5ldyBmcmFtZToKKy8vCisv
LyAgICAgICAgICAgICAgICAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwKKy8vICAgICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tfAorLy8gICAgICAgICAgICAgICAgICAgICB8IEZyYW1lIEhlYWRlciBvZiBw
cmV2aW91cyBmcmFtZSAgICAgICB8CisvLyAgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKy8vICAgIHRvcENhbGxGcmFtZSAtLT4gfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLy8gICAgICAgICAgICAgICAg
ICAgICB8IExvY2FscyBvZiBwcmV2aW91cyBmcmFtZSAgICAgICAgICAgICB8CisvLyAgICAgICAg
ICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKy8v
ICAgICAgICAgICAgICAgICAgICAgfCAqKiogdGhlIEZlbmNlICoqKiAgICAgICAgICAgICAgICAg
ICAgfAorLy8gICAgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS18CisvLyAgICAgICAgICAgICAgICAgICAgIHwgQXJncyBvZiBuZXcgZnJhbWUg
ICAgICAgICAgICAgICAgICAgIHwKKy8vICAgICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorLy8gICAgICAgICAgICAgICAgICAgICB8IEZy
YW1lIEhlYWRlciBvZiBuZXcgZnJhbWUgICAgICAgICAgICB8CisvLyAgICAgICAgICAgICAgICAg
ICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKy8vICAgICAgICAg
ICBmcmFtZSAtLT4gfCBMb2NhbHMgb2YgbmV3IGZyYW1lICAgICAgICAgICAgICAgICAgfAorLy8g
ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisvLworLy8gMy4gSW4gcG9wRnJhbWUoKSBhbmQgZWxzZXdoZXJlLCB3ZSBjYW4gY2FsbCBK
U1N0YWNrOjp2YWxpZGF0ZUZlbmNlKCkgdG8KKy8vICAgIGFzc2VydCB0aGF0IHRoZSBmZW5jZSBj
b250YWlucyB0aGUgdmFsdWVzIHdlIGV4cGVjdC4KKworaW5saW5lIHZvaWQgSlNTdGFjazo6aW5z
dGFsbEZlbmNlKENhbGxGcmFtZSogZnJhbWUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBpbnQgbGlu
ZU5vKQoreworICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGxp
bmVObyk7CisgICAgUmVnaXN0ZXIqIHN0YXJ0T2ZGcmFtZSA9IGdldFN0YXJ0T2ZGcmFtZShmcmFt
ZSk7CisKKyAgICAvLyBUaGUgbGFzdCBhcmdJbmRleCBpcyBhdDoKKyAgICBzaXplX3QgbWF4SW5k
ZXggPSBmcmFtZS0+YXJnSW5kZXhGb3JSZWdpc3RlcihzdGFydE9mRnJhbWUpICsgMTsKKyAgICBz
aXplX3Qgc3RhcnRJbmRleCA9IG1heEluZGV4IC0gRmVuY2VTaXplOworICAgIGZvciAoc2l6ZV90
IGkgPSBzdGFydEluZGV4OyBpIDwgbWF4SW5kZXg7ICsraSkgeworICAgICAgICBKU1ZhbHVlIGZl
bmNlVmFsdWUgPSBnZW5lcmF0ZUZlbmNlVmFsdWUoaSk7CisgICAgICAgIGZyYW1lLT5zZXRBcmd1
bWVudChpLCBmZW5jZVZhbHVlKTsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIEpTU3RhY2s6OnZh
bGlkYXRlRmVuY2UoQ2FsbEZyYW1lKiBmcmFtZSwgY29uc3QgY2hhciAqZnVuY3Rpb24sIGludCBs
aW5lTm8pCit7CisgICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0o
bGluZU5vKTsKKyAgICBBU1NFUlQoISFmcmFtZS0+c2NvcGUoKSk7CisgICAgUmVnaXN0ZXIqIHN0
YXJ0T2ZGcmFtZSA9IGdldFN0YXJ0T2ZGcmFtZShmcmFtZSk7CisgICAgc2l6ZV90IG1heEluZGV4
ID0gZnJhbWUtPmFyZ0luZGV4Rm9yUmVnaXN0ZXIoc3RhcnRPZkZyYW1lKSArIDE7CisgICAgc2l6
ZV90IHN0YXJ0SW5kZXggPSBtYXhJbmRleCAtIEZlbmNlU2l6ZTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gc3RhcnRJbmRleDsgaSA8IG1heEluZGV4OyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSBmZW5j
ZVZhbHVlID0gZ2VuZXJhdGVGZW5jZVZhbHVlKGkpOworICAgICAgICBKU1ZhbHVlIGFjdHVhbFZh
bHVlID0gZnJhbWUtPmdldEFyZ3VtZW50VW5zYWZlKGkpOworICAgICAgICBBU1NFUlQoZmVuY2VW
YWx1ZSA9PSBhY3R1YWxWYWx1ZSk7CisgICAgfQorfQorCisvLyBXaGVuIGRlYnVnZ2luZyB0aGUg
SlNTdGFjaywgd2UgaW5zdGFsbCBiYWQgdmFsdWVzIGFmdGVyIHRoZSBleHRlbnQgb2YgdGhlCisv
LyB0b3BDYWxsRnJhbWUgYXQgdGhlIGVuZCBvZiBwdXNoRnJhbWUoKSBhbmQgcG9wRnJhbWUoKS4g
VGhlIGludGVudGlvbiBpcworLy8gdG8gdHJpZ2dlciBjcmFzaGVzIGluIHRoZSBldmVudCB0aGF0
IG1lbW9yeSBpbiB0aGlzIHN1cHBvc2VkbHkgdW51c2VkCisvLyByZWdpb24gaXMgcmVhZCBhbmQg
Y29uc3VtZWQgd2l0aG91dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24uIEFmdGVyIHRoZSB0cmFwCisv
LyB3b3JkcyBhcmUgaW5zdGFsbGVkLCB0aGUgc3RhY2sgbG9va3MgbGlrZSB0aGlzOgorLy8KKy8v
ICAgICAgICAgICAgICAgICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgfAorLy8g
ICAgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisvLyAg
ICAgICAgICAgICAgICAgICAgIHwgRnJhbWUgSGVhZGVyIG9mIGZyYW1lICAgICAgIHwKKy8vICAg
ICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorLy8gICAg
dG9wQ2FsbEZyYW1lIC0tPiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisvLyAgICAg
ICAgICAgICAgICAgICAgIHwgTG9jYWxzIG9mIGZyYW1lICAgICAgICAgICAgIHwKKy8vICAgICAg
ICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorLy8gICAgICAg
ICAgICAgICAgICAgICB8ICoqKiBUcmFwIHdvcmRzICoqKiAgICAgICAgICB8CisvLyAgICAgICAg
ICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKy8vICAgICAgICAg
ICAgICAgICAgICAgfCBVbnVzZWQgc3BhY2UgLi4uICAgICAgICAgICAgfAorLy8gICAgICAgICAg
ICAgICAgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICB8CisKK2lubGluZSB2b2lk
IEpTU3RhY2s6Omluc3RhbGxUcmFwc0FmdGVyRnJhbWUoQ2FsbEZyYW1lKiBmcmFtZSkKK3sKKyAg
ICBSZWdpc3RlciogdG9wT2ZGcmFtZSA9IGdldFRvcE9mRnJhbWUoZnJhbWUpOworICAgIGNvbnN0
IGludCBzaXplT2ZUcmFwID0gNjQ7CisgICAgaW50MzJfdCogc3RhcnRPZlRyYXAgPSByZWludGVy
cHJldF9jYXN0PGludDMyX3QqPih0b3BPZkZyYW1lKTsKKyAgICBpbnQzMl90KiBlbmRPZlRyYXAg
PSBzdGFydE9mVHJhcCArIHNpemVPZlRyYXA7CisgICAgaW50MzJfdCogZW5kT2ZDb21taXRlZE1l
bW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KG1fY29tbWl0RW5kKTsKKworICAgIC8v
IE1ha2Ugc3VyZSB3ZSdyZSBub3QgZXhjZWVkaW5nIHRoZSBhbW91bnQgb2YgYXZhaWxhYmxlIG1l
bW9yeSB0byB3cml0ZSB0bzoKKyAgICBpZiAoZW5kT2ZUcmFwID4gZW5kT2ZDb21taXRlZE1lbW9y
eSkKKyAgICAgICAgZW5kT2ZUcmFwID0gZW5kT2ZDb21taXRlZE1lbW9yeTsKKworICAgIC8vIExh
eSB0aGUgdHJhcHM6CisgICAgaW50MzJfdCogcCA9IHN0YXJ0T2ZUcmFwOworICAgIHdoaWxlIChw
IDwgZW5kT2ZUcmFwKQorICAgICAgICAqcCsrID0gMHhhYmFkY2FmZTsgLy8gQSBiYWQgd29yZCB0
byB0cmlnZ2VyIGEgY3Jhc2ggaWYgZGVyZWYnZWQuCit9CisjZW5kaWYgLy8gRU5BQkxFKERFQlVH
X0pTU1RBQ0spCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNTdGFja0lubGlu
ZWRfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9u
IDEzMTg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTQyLDYgKzIxNDIsOCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09i
amVjdCosIG9wX25ld19mCiAKIGlubGluZSB2b2lkKiBqaXRDb21waWxlRm9yKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CisgICAgY2FsbEZyYW1l
LT5zZXRDb2RlQmxvY2soMCk7CisKICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5jYWxsZWUoKSk7CiAgICAgQVNTRVJUKCFmdW5jdGlvbi0+
aXNIb3N0RnVuY3Rpb24oKSk7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0g
ZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpOwpAQCAtMjIyMiw2ICsyMjI0LDggQEAgaW5saW5lIHZv
aWQqIGxhenlMaW5rRm9yKENhbGxGcmFtZSogY2FsbAogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gMDsKICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9ICZjYWxsRnJhbWUtPmNhbGxl
ckZyYW1lKCktPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oY2FsbEZyYW1lLT5yZXR1cm5Q
QygpKTsKIAorICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKDApOworCiAgICAgaWYgKGV4ZWN1
dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5n
ZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLmFkZHJlc3NGb3JDYWxsKCk7CiAgICAgZWxzZSB7CkBA
IC0yMjk4LDcgKzIzMDIsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwg
b3BfCiAKICAgICBFbmNvZGVkSlNWYWx1ZSByZXR1cm5WYWx1ZTsKICAgICB7Ci0gICAgICAgIFNh
bXBsaW5nVG9vbDo6SG9zdENhbGxSZWNvcmQgY2FsbFJlY29yZChDVElfU0FNUExFUik7CisgICAg
ICAgIFNhbXBsaW5nVG9vbDo6Q2FsbFJlY29yZCBjYWxsUmVjb3JkKENUSV9TQU1QTEVSLCB0cnVl
KTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oY2FsbEZy
YW1lKTsKICAgICB9CiAKQEAgLTI0MjQsNyArMjQyOCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KEVuY29kZWRKU1ZhbHVlLCBvcF8KIAogICAgIEVuY29kZWRKU1ZhbHVlIHJldHVyblZhbHVlOwog
ICAgIHsKLSAgICAgICAgU2FtcGxpbmdUb29sOjpIb3N0Q2FsbFJlY29yZCBjYWxsUmVjb3JkKENU
SV9TQU1QTEVSKTsKKyAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxSZWNvcmQo
Q1RJX1NBTVBMRVIsIHRydWUpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEu
bmF0aXZlLmZ1bmN0aW9uKGNhbGxGcmFtZSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCShyZXZpc2lvbiAxMzE4NTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5
LDcgQEAKICNkZWZpbmUgZmFpbFdpdGhUb2tlbih0b2spIGRvIHsgaWYgKCFtX2Vycm9yKSB1cGRh
dGVFcnJvck1lc3NhZ2UodG9rKTsgcmV0dXJuIDA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZhaWxX
aXRoTWVzc2FnZShtc2cpIGRvIHsgaWYgKCFtX2Vycm9yKSB1cGRhdGVFcnJvck1lc3NhZ2UobXNn
KTsgcmV0dXJuIDA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZhaWxXaXRoTmFtZUFuZE1lc3NhZ2Uo
YmVmb3JlLCBuYW1lLCBhZnRlcikgZG8geyBpZiAoIW1fZXJyb3IpIHVwZGF0ZUVycm9yV2l0aE5h
bWVBbmRNZXNzYWdlKGJlZm9yZSwgbmFtZSwgYWZ0ZXIpOyByZXR1cm4gMDsgfSB3aGlsZSAoMCkK
KyNkZWZpbmUgZmFpbFdpdGhTdGFja092ZXJmbG93KCkgZG8geyBtX2Vycm9yID0gdHJ1ZTsgbV9o
YXNTdGFja092ZXJmbG93ID0gdHJ1ZTsgcmV0dXJuIDA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZh
aWxJZkZhbHNlKGNvbmQpIGRvIHsgaWYgKCEoY29uZCkpIGZhaWwoKTsgfSB3aGlsZSAoMCkKICNk
ZWZpbmUgZmFpbElmRmFsc2VXaXRoTWVzc2FnZShjb25kLCBtc2cpIGRvIHsgaWYgKCEoY29uZCkp
IGZhaWxXaXRoTWVzc2FnZShtc2cpOyB9IHdoaWxlICgwKQogI2RlZmluZSBmYWlsSWZGYWxzZVdp
dGhOYW1lQW5kTWVzc2FnZShjb25kLCBiZWZvcmUsIG5hbWUsIG1zZykgZG8geyBpZiAoIShjb25k
KSkgZmFpbFdpdGhOYW1lQW5kTWVzc2FnZShiZWZvcmUsIG5hbWUsIG1zZyk7IH0gd2hpbGUgKDAp
CkBAIC01NCw3ICs1NSw3IEBACiAjZGVmaW5lIGNvbnN1bWVPckZhaWwodG9rZW5UeXBlKSBkbyB7
IGlmICghY29uc3VtZSh0b2tlblR5cGUpKSBmYWlsV2l0aFRva2VuKHRva2VuVHlwZSk7IH0gd2hp
bGUgKDApCiAjZGVmaW5lIGNvbnN1bWVPckZhaWxXaXRoRmxhZ3ModG9rZW5UeXBlLCBmbGFncykg
ZG8geyBpZiAoIWNvbnN1bWUodG9rZW5UeXBlLCBmbGFncykpIGZhaWxXaXRoVG9rZW4odG9rZW5U
eXBlKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgbWF0Y2hPckZhaWwodG9rZW5UeXBlKSBkbyB7IGlm
ICghbWF0Y2godG9rZW5UeXBlKSkgZmFpbFdpdGhUb2tlbih0b2tlblR5cGUpOyB9IHdoaWxlICgw
KQotI2RlZmluZSBmYWlsSWZTdGFja092ZXJmbG93KCkgZG8geyBmYWlsSWZGYWxzZVdpdGhNZXNz
YWdlKGNhblJlY3Vyc2UoKSwgIkNvZGUgbmVzdGVkIHRvbyBkZWVwbHkuIik7IH0gd2hpbGUgKDAp
CisjZGVmaW5lIGZhaWxJZlN0YWNrT3ZlcmZsb3coKSBkbyB7IGlmICghY2FuUmVjdXJzZSgpKSBm
YWlsV2l0aFN0YWNrT3ZlcmZsb3coKTsgfSB3aGlsZSAoMCkKIAogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIApAQCAtNjUsNiArNjYsNyBAQCBQYXJzZXI8TGV4ZXJUeXBlPjo6UGFyc2VyKEpTR2xvYmFs
RGF0YSogCiAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAsIG1fc291cmNlKCZz
b3VyY2UpCiAgICAgLCBtX3N0YWNrKHd0ZlRocmVhZERhdGEoKS5zdGFjaygpKQorICAgICwgbV9o
YXNTdGFja092ZXJmbG93KGZhbHNlKQogICAgICwgbV9lcnJvcihmYWxzZSkKICAgICAsIG1fZXJy
b3JNZXNzYWdlKCJQYXJzZSBlcnJvciIpCiAgICAgLCBtX2FsbG93c0luKHRydWUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlzaW9uIDEzMTg1OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4
Miw3ICs4ODIsNyBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgY2FuUmVjdXJzZSgpCiAgICAg
ewotICAgICAgICByZXR1cm4gbV9zdGFjay5yZWN1cnNpb25DaGVjaygpOworICAgICAgICByZXR1
cm4gbV9zdGFjay5pc1NhZmVUb1JlY3Vyc2UoKTsKICAgICB9CiAgICAgCiAgICAgaW50IGxhc3RU
b2tlbkVuZCgpIGNvbnN0CkBAIC04OTYsNiArODk2LDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8
TGV4ZXJUeXBlPiBtX2xleGVyOwogICAgIAogICAgIFN0YWNrQm91bmRzIG1fc3RhY2s7CisgICAg
Ym9vbCBtX2hhc1N0YWNrT3ZlcmZsb3c7CiAgICAgYm9vbCBtX2Vycm9yOwogICAgIFN0cmluZyBt
X2Vycm9yTWVzc2FnZTsKICAgICBKU1Rva2VuIG1fdG9rZW47CkBAIC05ODcsNyArOTg4LDcgQEAg
UGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI8TGV4ZXJUeXBlPgogICAgICAgICAvLyB3ZSBy
YW4gb3V0IG9mIHN0YWNrIHdoaWxlIHBhcnNpbmcuIElmIHdlIHNlZSBhbiBlcnJvciB3aGlsZSBw
YXJzaW5nIGV2YWwgb3IgcHJvZ3JhbQogICAgICAgICAvLyBjb2RlIHdlIGFzc3VtZSB0aGF0IGl0
IHdhcyBhIHN5bnRheCBlcnJvciBzaW5jZSBydW5uaW5nIG91dCBvZiBzdGFjayBpcyBtdWNoIGxl
c3MKICAgICAgICAgLy8gbGlrZWx5LCBhbmQgd2UgYXJlIGN1cnJlbnRseSB1bmFibGUgdG8gZGlz
dGluZ3Vpc2ggYmV0d2VlbiB0aGUgdHdvIGNhc2VzLgotICAgICAgICBpZiAoaXNGdW5jdGlvbkJv
ZHlOb2RlKHN0YXRpY19jYXN0PFBhcnNlZE5vZGUqPigwKSkpCisgICAgICAgIGlmIChpc0Z1bmN0
aW9uQm9keU5vZGUoc3RhdGljX2Nhc3Q8UGFyc2VkTm9kZSo+KDApKSB8fCBtX2hhc1N0YWNrT3Zl
cmZsb3cpCiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgICAgICBlbHNlIGlmIChpc0V2YWxOb2RlPFBhcnNl
ZE5vZGU+KCkpCiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlU3ludGF4RXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgZXJyTXNnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCShyZXZpc2lvbiAxMzE4NTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTYzLDYgKzE2Myw3IEBAIEpTT2JqZWN0KiB0aHJvd091dE9mTWVtb3J5
RXJyb3IoRXhlY1N0YXQKIAogSlNPYmplY3QqIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNT
dGF0ZSogZXhlYykKIHsKKyAgICBKU1N0YWNrOjpFcnJvclN0YWNrUmVzZXJ2ZUVuYWJsZXIgc3Rh
Y2tSZXNlcnZlKGV4ZWMpOwogICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVN0YWNr
T3ZlcmZsb3dFcnJvcihleGVjKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMTMxODU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTMwLDcgKzEzMCw3IEBAIHN0YXRpYyBib29sIGVuYWJsZUFzc2VtYmxlcihFeGVjdXRhYmxl
QWwKIH0KICNlbmRpZiAvLyBFTkFCTEUoIUFTU0VNQkxFUikKIAotSlNHbG9iYWxEYXRhOjpKU0ds
b2JhbERhdGEoR2xvYmFsRGF0YVR5cGUgZ2xvYmFsRGF0YVR5cGUsIFRocmVhZFN0YWNrVHlwZSB0
aHJlYWRTdGFja1R5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQorSlNHbG9iYWxEYXRhOjpKU0dsb2Jh
bERhdGEoR2xvYmFsRGF0YVR5cGUgZ2xvYmFsRGF0YVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQog
ICAgIDoKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgICAgZXhlY3V0YWJsZUFsbG9jYXRvcigq
dGhpcyksCkBAIC0xNzEsNyArMTcxLDYgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xv
YmFsRGF0YVR5cAogI2VuZGlmCiAgICAgLCBkeW5hbWljR2xvYmFsT2JqZWN0KDApCiAgICAgLCBj
YWNoZWRVVENPZmZzZXQoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSkK
LSAgICAsIG1heFJlZW50cnlEZXB0aCh0aHJlYWRTdGFja1R5cGUgPT0gVGhyZWFkU3RhY2tUeXBl
U21hbGwgPyBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCA6IE1heExhcmdlVGhyZWFkUmVlbnRy
eURlcHRoKQogICAgICwgbV9lbmFibGVkUHJvZmlsZXIoMCkKICAgICAsIG1fcmVnRXhwQ2FjaGUo
bmV3IFJlZ0V4cENhY2hlKHRoaXMpKQogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKQEAgLTE5
OCw3ICsxOTcsNyBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAj
ZW5kaWYKICAgICAsIG1faW5EZWZpbmVPd25Qcm9wZXJ0eShmYWxzZSkKIHsKLSAgICBpbnRlcnBy
ZXRlciA9IG5ldyBJbnRlcnByZXRlcjsKKyAgICBpbnRlcnByZXRlciA9IG5ldyBJbnRlcnByZXRl
cigqdGhpcyk7CiAKICAgICAvLyBOZWVkIHRvIGJlIGNhcmVmdWwgdG8ga2VlcCBldmVyeXRoaW5n
IGNvbnNpc3RlbnQgaGVyZQogICAgIEpTTG9ja0hvbGRlciBsb2NrKHRoaXMpOwpAQCAtMzEwLDE5
ICszMDksMTkgQEAgSlNHbG9iYWxEYXRhOjp+SlNHbG9iYWxEYXRhKCkKICNlbmRpZgogfQogCi1Q
YXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3JvdXAo
VGhyZWFkU3RhY2tUeXBlIHR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQorUGFzc1JlZlB0cjxKU0ds
b2JhbERhdGE+IEpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4dEdyb3VwKEhlYXBUeXBlIGhlYXBU
eXBlKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKEFQSUNvbnRleHRH
cm91cCwgdHlwZSwgaGVhcFR5cGUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpTR2xvYmFs
RGF0YShBUElDb250ZXh0R3JvdXAsIGhlYXBUeXBlKSk7CiB9CiAKLVBhc3NSZWZQdHI8SlNHbG9i
YWxEYXRhPiBKU0dsb2JhbERhdGE6OmNyZWF0ZShUaHJlYWRTdGFja1R5cGUgdHlwZSwgSGVhcFR5
cGUgaGVhcFR5cGUpCitQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVh
dGUoSGVhcFR5cGUgaGVhcFR5cGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU0dsb2Jh
bERhdGEoRGVmYXVsdCwgdHlwZSwgaGVhcFR5cGUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEpTR2xvYmFsRGF0YShEZWZhdWx0LCBoZWFwVHlwZSkpOwogfQogCi1QYXNzUmVmUHRyPEpTR2xv
YmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGVMZWFrZWQoVGhyZWFkU3RhY2tUeXBlIHR5cGUs
IEhlYXBUeXBlIGhlYXBUeXBlKQorUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IEpTR2xvYmFsRGF0
YTo6Y3JlYXRlTGVha2VkKEhlYXBUeXBlIGhlYXBUeXBlKQogewotICAgIHJldHVybiBjcmVhdGUo
dHlwZSwgaGVhcFR5cGUpOworICAgIHJldHVybiBjcmVhdGUoaGVhcFR5cGUpOwogfQogCiBib29s
IEpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2VFeGlzdHMoKQpAQCAtMzM1LDcgKzMzNCw3IEBA
IEpTR2xvYmFsRGF0YSYgSlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW4KICAgICBHbG9iYWxKU0xv
Y2sgZ2xvYmFsTG9jazsKICAgICBKU0dsb2JhbERhdGEqJiBpbnN0YW5jZSA9IHNoYXJlZEluc3Rh
bmNlSW50ZXJuYWwoKTsKICAgICBpZiAoIWluc3RhbmNlKSB7Ci0gICAgICAgIGluc3RhbmNlID0g
YWRvcHRSZWYobmV3IEpTR2xvYmFsRGF0YShBUElTaGFyZWQsIFRocmVhZFN0YWNrVHlwZVNtYWxs
LCBTbWFsbEhlYXApKS5sZWFrUmVmKCk7CisgICAgICAgIGluc3RhbmNlID0gYWRvcHRSZWYobmV3
IEpTR2xvYmFsRGF0YShBUElTaGFyZWQsIFNtYWxsSGVhcCkpLmxlYWtSZWYoKTsKICAgICAgICAg
aW5zdGFuY2UtPm1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7CiAgICAgfQogICAgIHJl
dHVybiAqaW5zdGFuY2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuaAkocmV2aXNpb24gMTMxODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxMSArMTA0LDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGRvdWJsZSBpbmNyZW1lbnQ7CiAgICAgfTsKIAot
ICAgIGVudW0gVGhyZWFkU3RhY2tUeXBlIHsKLSAgICAgICAgVGhyZWFkU3RhY2tUeXBlTGFyZ2Us
Ci0gICAgICAgIFRocmVhZFN0YWNrVHlwZVNtYWxsCi0gICAgfTsKLQogI2lmIEVOQUJMRShERkdf
SklUKQogICAgIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwogCkBAIC0xNjQsOSArMTU5LDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBib29sIHNoYXJlZEluc3RhbmNlRXhpc3Rz
KCk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0dsb2JhbERhdGEmIHNoYXJl
ZEluc3RhbmNlKCk7CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWZQ
dHI8SlNHbG9iYWxEYXRhPiBjcmVhdGUoVGhyZWFkU3RhY2tUeXBlLCBIZWFwVHlwZSA9IFNtYWxs
SGVhcCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPEpTR2xv
YmFsRGF0YT4gY3JlYXRlTGVha2VkKFRocmVhZFN0YWNrVHlwZSwgSGVhcFR5cGUgPSBTbWFsbEhl
YXApOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IGNyZWF0ZUNvbnRl
eHRHcm91cChUaHJlYWRTdGFja1R5cGUsIEhlYXBUeXBlID0gU21hbGxIZWFwKTsKKyAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBjcmVhdGUo
SGVhcFR5cGUgPSBTbWFsbEhlYXApOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
UGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IGNyZWF0ZUxlYWtlZChIZWFwVHlwZSA9IFNtYWxsSGVh
cCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gY3JlYXRlQ29udGV4
dEdyb3VwKEhlYXBUeXBlID0gU21hbGxIZWFwKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
fkpTR2xvYmFsRGF0YSgpOwogCiAgICAgICAgIHZvaWQgbWFrZVVzYWJsZUZyb21NdWx0aXBsZVRo
cmVhZHMoKSB7IGhlYXAubWFjaGluZVRocmVhZHMoKS5tYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhy
ZWFkcygpOyB9CkBAIC0yODIsNiArMjc3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE93
blB0cjxQYXJzZXJBcmVuYT4gcGFyc2VyQXJlbmE7CiAgICAgICAgIE93blB0cjxLZXl3b3Jkcz4g
a2V5d29yZHM7CiAgICAgICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlcjsKKyAgICAgICAgU3Rh
Y2tCb3VuZHMgbmF0aXZlU3RhY2s7CisKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBPd25QdHI8
SklUVGh1bmtzPiBqaXRTdHViczsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdldENU
SVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQpAQCAtMzQ2LDggKzM0Myw2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBTdHJpbmcgY2FjaGVkRGF0ZVN0cmluZzsKICAgICAgICAgZG91
YmxlIGNhY2hlZERhdGVTdHJpbmdWYWx1ZTsKIAotICAgICAgICBpbnQgbWF4UmVlbnRyeURlcHRo
OwotCiAgICAgICAgIFByb2ZpbGVyKiBtX2VuYWJsZWRQcm9maWxlcjsKICAgICAgICAgUmVnRXhw
Q2FjaGUqIG1fcmVnRXhwQ2FjaGU7CiAgICAgICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9yIG1fcmVn
RXhwQWxsb2NhdG9yOwpAQCAtNDQ3LDcgKzQ0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHBy
aXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAg
ICAgIAotICAgICAgICBKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cGUsIFRocmVhZFN0YWNrVHlw
ZSwgSGVhcFR5cGUpOworICAgICAgICBKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cGUsIEhlYXBU
eXBlKTsKICAgICAgICAgc3RhdGljIEpTR2xvYmFsRGF0YSomIHNoYXJlZEluc3RhbmNlSW50ZXJu
YWwoKTsKICAgICAgICAgdm9pZCBjcmVhdGVOYXRpdmVUaHVuaygpOwogI2lmIEVOQUJMRShBU1NF
TUJMRVIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAko
cmV2aXNpb24gMTMxODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIE9wdGlvbnM6Omlu
aXRpYWxpemUoKQogI2lmICFFTkFCTEUoWUFSUl9KSVQpCiAgICAgdXNlUmVnRXhwSklUKCkgPSBm
YWxzZTsKICNlbmRpZgotICAgIAorCiAgICAgLy8gRG8gcmFuZ2UgY2hlY2tzIHdoZXJlIG5lZWRl
ZCBhbmQgbWFrZSBjb3JyZWN0aW9ucyB0byB0aGUgb3B0aW9uczoKICAgICBBU1NFUlQodGhyZXNo
b2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSA+PSB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFm
dGVyV2FybVVwKCkpOwogICAgIEFTU0VSVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVw
KCkgPj0gdGhyZXNob2xkRm9yT3B0aW1pemVTb29uKCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuaAkocmV2
aXNpb24gMTMxODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUmVj
dXJzaW9uQ2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw4IEBACiAjZGVmaW5l
IFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXJfaAogCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNp
bmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgorI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSwxMiArNDMsMTQgQEAgcHJpdmF0ZToKICAgICBF
eGVjU3RhdGUqIG1fZXhlYzsKICAgICBKU09iamVjdCogbV90aGlzT2JqZWN0OwogICAgIEpTVmFs
dWUgbV9lYXJseVJldHVyblZhbHVlOworCisgICAgU3RhY2tTdGF0czo6Q2hlY2tQb2ludCBzdGFj
a0NoZWNrcG9pbnQ7CiB9OwogCiBpbmxpbmUgSlNWYWx1ZSBTdHJpbmdSZWN1cnNpb25DaGVja2Vy
OjpwZXJmb3JtQ2hlY2soKQogewotICAgIGludCBzaXplID0gbV9leGVjLT5nbG9iYWxEYXRhKCku
c3RyaW5nUmVjdXJzaW9uQ2hlY2tWaXNpdGVkT2JqZWN0cy5zaXplKCk7Ci0gICAgaWYgKHNpemUg
Pj0gTWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGggJiYgc2l6ZSA+PSBtX2V4ZWMtPmdsb2JhbERh
dGEoKS5tYXhSZWVudHJ5RGVwdGgpCisgICAgY29uc3QgU3RhY2tCb3VuZHMmIG5hdGl2ZVN0YWNr
ID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCk7CisgICAgaWYgKCFuYXRpdmVTdGFjay5pc1NhZmVU
b1JlY3Vyc2UoKSkKICAgICAgICAgcmV0dXJuIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKCk7CiAg
ICAgYm9vbCBhbHJlYWR5VmlzaXRlZCA9ICFtX2V4ZWMtPmdsb2JhbERhdGEoKS5zdHJpbmdSZWN1
cnNpb25DaGVja1Zpc2l0ZWRPYmplY3RzLmFkZChtX3RoaXNPYmplY3QpLmlzTmV3RW50cnk7CiAg
ICAgaWYgKGFscmVhZHlWaXNpdGVkKQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTg1OSkKKysrIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMTAt
MTcgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgdG9wQ2Fs
bEZyYW1lIHJlbGlhYmxlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTg5MjguCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgLSBSZW5hbWVkIFN0YWNrQm91bmRzOjpyZWN1cnNpb25DaGVjaygpIHRvIGlzU2Fm
ZVRvUmVjdXJzZSgpLgorCisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmg6CisgICAgICAgIChT
dGFja0JvdW5kcyk6CisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjppc1NhZmVUb1JlY3Vyc2Up
OgorCiAyMDEyLTEwLTE4ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAg
ICAgICAgIGNvbnZlcnRVVEY4VG9VVEYxNigpIFNob3VsZCBDaGVjayBmb3IgQVNDSUkgSW5wdXQK
SW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTMxODU5KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMjk2LDYgKzI5Niw4IEBACiAJCUYzNTI1RTQ2MTYxOUE0RUUwMDI3OEJD
MSAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMzUyNUU0NTE2MTlBNEVFMDAyNzhCQzEgLyogTWVt
b3J5SW5zdHJ1bWVudGF0aW9uSGFzaE1hcC5oICovOyB9OwogCQlGM0ZCQzcxRTE2MUFGN0JGMDBC
QjRCRDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaENvdW50ZWRTZXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzRkJDNzFEMTYxQUY3QkYwMEJC
NEJENCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoQ291bnRlZFNldC5oICovOyB9OwogCQlG
M0ZCQzcyMDE2MUFGN0NEMDBCQjRCRDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uU2VxdWVuY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzRkJDNzFG
MTYxQUY3Q0QwMEJCNEJENCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25TZXF1ZW5jZS5oICovOyB9
OworCQlGRURBQ0QzRDE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRURBQ0QzQjE2MzBGODNGMDBD
Njk2MzQgLyogU3RhY2tTdGF0cy5jcHAgKi87IH07CisJCUZFREFDRDNFMTYzMEY4M0YwMEM2OTYz
NCAvKiBTdGFja1N0YXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRURBQ0QzQzE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5oICovOyB9Owog
LyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWENvbnRhaW5lckl0
ZW1Qcm94eSBzZWN0aW9uICovCkBAIC01OTQsNiArNTk2LDggQEAKIAkJRjM1MjVFNDUxNjE5QTRF
RTAwMjc4QkMxIC8qIE1lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hNYXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaE1hcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGM0ZCQzcxRDE2MUFGN0JGMDBCQjRCRDQgLyogTWVt
b3J5SW5zdHJ1bWVudGF0aW9uSGFzaENvdW50ZWRTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaENvdW50ZWRTZXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjNGQkM3MUYxNjFBRjdDRDAwQkI0QkQ0IC8qIE1lbW9y
eUluc3RydW1lbnRhdGlvblNlcXVlbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1lbW9yeUluc3RydW1lbnRhdGlvblNlcXVlbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFREFDRDNCMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0YWNrU3RhdHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRURBQ0QzQzE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tT
dGF0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja1N0YXRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9u
ICovCiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KQEAgLTgw
NCw2ICs4MDgsOCBAQAogCQkJCUE4QTQ3MzBEMTUxQTgyNUIwMDQxMjNGRiAvKiBTcGVjdHJ1bS5o
ICovLAogCQkJCUE4QTQ3MzBFMTUxQTgyNUIwMDQxMjNGRiAvKiBTdGFja0JvdW5kcy5jcHAgKi8s
CiAJCQkJQThBNDczMEYxNTFBODI1QjAwNDEyM0ZGIC8qIFN0YWNrQm91bmRzLmggKi8sCisJCQkJ
RkVEQUNEM0IxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuY3BwICovLAorCQkJCUZFREFD
RDNDMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmggKi8sCiAJCQkJQThBNDczMTAxNTFB
ODI1QjAwNDEyM0ZGIC8qIFN0YXRpY0NvbnN0cnVjdG9ycy5oICovLAogCQkJCUE4QTQ3MzExMTUx
QTgyNUIwMDQxMjNGRiAvKiBTdGRMaWJFeHRyYXMuaCAqLywKIAkJCQkxQTZCQjc2ODE2MkYzMDA1
MDBERDE2REIgLyogU3RyZWFtQnVmZmVyLmggKi8sCkBAIC0xMTUwLDYgKzExNTYsNyBAQAogCQkJ
CUE4QTQ3NDI0MTUxQTgyNUIwMDQxMjNGRiAvKiBTaW5nbHlMaW5rZWRMaXN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzQyNjE1MUE4MjVCMDA0MTIzRkYgLyogU3BlY3RydW0uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3NDI4MTUxQTgyNUIwMDQxMjNGRiAvKiBTdGFja0JvdW5kcy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRkVEQUNEM0UxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDI5MTUxQTgyNUIwMDQxMjNGRiAvKiBTdGF0aWND
b25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDJBMTUxQTgyNUIwMDQxMjNG
RiAvKiBTdGRMaWJFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNkJCNzY5MTYyRjMwMDUw
MEREMTZEQiAvKiBTdHJlYW1CdWZmZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTM0MSw2ICsxMzQ4
LDcgQEAKIAkJCQlBOEE0NzQyMTE1MUE4MjVCMDA0MTIzRkYgLyogU0hBMS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOEE0NzQyNTE1MUE4MjVCMDA0MTIzRkYgLyogU2l6ZUxpbWl0cy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBOEE0NzQyNzE1MUE4MjVCMDA0MTIzRkYgLyogU3RhY2tCb3VuZHMu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkVEQUNEM0QxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNr
U3RhdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0M0MxNTFBODI1QjAwNDEyM0ZGIC8q
IFN0cmluZ0J1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MkIxNTFBODI1QjAw
NDEyM0ZGIC8qIFN0cmluZ0V4dHJhcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0MDE1
MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1wbC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
U3RhY2tCb3VuZHMuaAkocmV2aXNpb24gMTMxODU5KQorKysgU291cmNlL1dURi93dGYvU3RhY2tC
b3VuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTUgQEAKIG5hbWVzcGFjZSBXVEYg
ewogCiBjbGFzcyBTdGFja0JvdW5kcyB7Ci0gICAgLy8gcmVjdXJzaW9uQ2hlY2soKSAvIHJlY3Vy
c2lvbkxpbWl0KCkgdGVzdHMgKGJ5IGRlZmF1bHQpCisgICAgLy8gaXNTYWZlVG9SZWN1cnNlKCkg
LyByZWN1cnNpb25MaW1pdCgpIHRlc3RzIChieSBkZWZhdWx0KQogICAgIC8vIHRoYXQgd2UgYXJl
IGF0IGxlYXN0IHRoaXMgZmFyIGZyb20gdGhlIGVuZCBvZiB0aGUgc3RhY2suCi0gICAgY29uc3Qg
c3RhdGljIHNpemVfdCBzX2RlZmF1bHRBdmFpbGFiaWxpdHlEZWx0YSA9IDQwOTY7CisgICAgLy8K
KyAgICAvLyBUaGlzIDY0ayBudW1iZXIgd2FzIHBpY2tlZCBiZWNhdXNlIGEgc2FtcGxpbmcgb2Yg
c3RhY2sgdXNhZ2UgZGlmZmVyZW5jZXMKKyAgICAvLyBiZXR3ZWVuIGNvbnNlY3V0aXZlIGVudHJp
ZXMgaW50byBvbmUgb2YgdGhlIEludGVycHJldGVyOjpleGVjdXRlLi4uKCkKKyAgICAvLyBmdW5j
dGlvbnMgd2FzIHNlZW4gdG8gYmUgYXMgaGlnaCBhcyAyN2suIEhlbmNlLCA2NGsgaXMgY2hvc2Vu
IGFzIGEKKyAgICAvLyBjb25zZXJ2YXRpdmUgYXZhaWxhYmlsaXR5IHZhbHVlIHRoYXQgaXMgbm90
IHRvbyBsYXJnZSBidXQgY29tZm9ydGFibHkKKyAgICAvLyBleGNlZWRzIDI3ayB3aXRoIHNvbWUg
YnVmZmVyIGZvciBlcnJvci4KKyAgICBjb25zdCBzdGF0aWMgc2l6ZV90IHNfZGVmYXVsdEF2YWls
YWJpbGl0eURlbHRhID0gNjQgKiAxMDI0OwogCiBwdWJsaWM6CiAgICAgU3RhY2tCb3VuZHMoKQpA
QCAtNjIsNiArNjgsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY3VycmVudFBvc2l0aW9u
OwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBpc0dyb3dpbmdEb3dud2FyZCgpCisgICAgICAgICAgICA/IHN0YXRpY19jYXN0PGNoYXIqPiht
X29yaWdpbikgLSBzdGF0aWNfY2FzdDxjaGFyKj4obV9ib3VuZCkKKyAgICAgICAgICAgIDogc3Rh
dGljX2Nhc3Q8Y2hhcio+KG1fYm91bmQpIC0gc3RhdGljX2Nhc3Q8Y2hhcio+KG1fb3JpZ2luKTsK
KyAgICB9CisKICAgICB2b2lkKiByZWN1cnNpb25MaW1pdChzaXplX3QgbWluQXZhaWxhYmxlRGVs
dGEgPSBzX2RlZmF1bHRBdmFpbGFiaWxpdHlEZWx0YSkgY29uc3QKICAgICB7CiAgICAgICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKQEAgLTcwLDcgKzgzLDcgQEAgcHVibGljOgogICAgICAgICAgICAg
OiBzdGF0aWNfY2FzdDxjaGFyKj4obV9ib3VuZCkgLSBtaW5BdmFpbGFibGVEZWx0YTsKICAgICB9
CiAKLSAgICBib29sIHJlY3Vyc2lvbkNoZWNrKHNpemVfdCBtaW5BdmFpbGFibGVEZWx0YSA9IHNf
ZGVmYXVsdEF2YWlsYWJpbGl0eURlbHRhKSBjb25zdAorICAgIGJvb2wgaXNTYWZlVG9SZWN1cnNl
KHNpemVfdCBtaW5BdmFpbGFibGVEZWx0YSA9IHNfZGVmYXVsdEF2YWlsYWJpbGl0eURlbHRhKSBj
b25zdAogICAgIHsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICByZXR1cm4g
aXNHcm93aW5nRG93bndhcmQoKQpAQCAtMTA1LDYgKzExOCw4IEBAIHByaXZhdGU6CiAKICAgICB2
b2lkKiBtX29yaWdpbjsKICAgICB2b2lkKiBtX2JvdW5kOworCisgICAgZnJpZW5kIGNsYXNzIFN0
YWNrU3RhdHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1N0YWNrU3RhdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0YWNrU3RhdHMu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvU3RhY2tTdGF0cy5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMzM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdGFja1N0YXRz
LmgiCisKKyNpZiBFTkFCTEUoU1RBQ0tfU1RBVFMpIAorCisjaW5jbHVkZSAiQXNzZXJ0aW9ucy5o
IgorI2luY2x1ZGUgIldURlRocmVhZERhdGEuaCIKKworLy8gRGVmaW5lIHRoZSBmb2xsb3dpbmcg
ZmxhZyBpZiB5b3Ugd2FudCB0byBjb2xsZWN0IHN0YXRzIG9uIGV2ZXJ5IHNpbmdsZQorLy8gY2hl
Y2twb2ludC4gQnkgZGVmYXVsdCwgd2Ugb25seSBsb2cgY2hlY2twb2ludHMgdGhhdCBlc3RhYmxp
c2ggbmV3CisvLyBtYXggdmFsdWVzLgorCisvLyAjZGVmaW5lIEVOQUJMRV9WRVJCT1NFX1NUQUNL
X1NUQVRTIDEKKworCituYW1lc3BhY2UgV1RGIHsKKworRklMRSogU3RhY2tTdGF0czo6c19sb2dG
aWxlID0gMDsKKworLy8gQ2hlY2tQb2ludCBtYW5hZ2VtZW50OgorTXV0ZXgqIFN0YWNrU3RhdHM6
OnNfc2hhcmVkTG9jayA9IDA7CitTdGFja1N0YXRzOjpDaGVja1BvaW50KiBTdGFja1N0YXRzOjpz
X3RvcENoZWNrUG9pbnQgPSAwOworU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCogU3RhY2tT
dGF0czo6c19maXJzdExheW91dENoZWNrUG9pbnQgPSAwOworU3RhY2tTdGF0czo6TGF5b3V0Q2hl
Y2tQb2ludCogU3RhY2tTdGF0czo6c190b3BMYXlvdXRDaGVja1BvaW50ID0gMDsKKworLy8gSGln
aCB3YXRlcm1hcmsgc3RhdHM6CitpbnQgU3RhY2tTdGF0czo6c19tYXhDaGVja1BvaW50RGlmZiA9
IDA7CitpbnQgU3RhY2tTdGF0czo6c19tYXhTdGFja0hlaWdodCA9IDA7CitpbnQgU3RhY2tTdGF0
czo6c19tYXhSZWVudHJ5RGVwdGggPSAwOworCitpbnQgU3RhY2tTdGF0czo6c19tYXhMYXlvdXRD
aGVja1BvaW50RGlmZiA9IDA7CitpbnQgU3RhY2tTdGF0czo6c19tYXhUb3RhbExheW91dENoZWNr
UG9pbnREaWZmID0gMDsKK2ludCBTdGFja1N0YXRzOjpzX21heExheW91dFJlZW50cnlEZXB0aCA9
IDA7CisKKyNkZWZpbmUgU1RBQ0tfU1RBVFNfTE9HX0ZJTEUgIi90bXAvc3RhY2stc3RhdHMubG9n
IgorCisvLyBJbml0aWFsaXplcyBsb2NrcyBhbmQgdGhlIGxvZyBmaWxlLiBTaG91bGQgb25seSBi
ZSBjYWxsZWQgb25jZS4KK3ZvaWQgU3RhY2tTdGF0czo6aW5pdGlhbGl6ZSgpCit7CisgICAgc19z
aGFyZWRMb2NrID0gbmV3IE11dGV4KCk7CisgICAgc19sb2dGaWxlID0gZm9wZW4oU1RBQ0tfU1RB
VFNfTE9HX0ZJTEUsICJhKyIpOworICAgIEFTU0VSVChzX2xvZ0ZpbGUpOworICAgIGlmICghc19s
b2dGaWxlKQorICAgICAgICBleGl0KDI1NSk7IC8vIEJhZG5lc3MuIEFib3J0LiAKKworICAgIGZw
cmludGYoc19sb2dGaWxlLCAiID09PSBGSUxFIG9wZW4gPT09PT09PT1cbiIpOworICAgIGZmbHVz
aChzX2xvZ0ZpbGUpOworfQorCitTdGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0czo6UGVyVGhyZWFk
U3RhdHMoKQoreworICAgIGNvbnN0IFN0YWNrQm91bmRzJiBzdGFjayA9IHd0ZlRocmVhZERhdGEo
KS5zdGFjaygpOworICAgIG1fcmVlbnRyeURlcHRoID0gMDsKKyAgICBtX3N0YWNrU3RhcnQgPSAo
Y2hhciopc3RhY2sub3JpZ2luKCk7CisgICAgbV9jdXJyZW50Q2hlY2tQb2ludCA9IDA7CisKKyAg
ICBGSUxFKiBsb2cgPSBTdGFja1N0YXRzOjpzX2xvZ0ZpbGU7CisgICAgZnByaW50Zihsb2csICIg
PT09IFRIUkVBRCBuZXcgc3RhY2tTdGFydCAlcCA9PT09PT09PVxuIiwgbV9zdGFja1N0YXJ0KTsK
KyAgICBmZmx1c2gobG9nKTsKK30KKworU3RhY2tTdGF0czo6Q2hlY2tQb2ludDo6Q2hlY2tQb2lu
dCgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKCpTdGFja1N0YXRzOjpzX3NoYXJlZExvY2sp
OworICAgIFdURlRocmVhZERhdGEqIHRocmVhZERhdGEgPSBjb25zdF9jYXN0PFdURlRocmVhZERh
dGEqPigmd3RmVGhyZWFkRGF0YSgpKTsKKyAgICBTdGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0cyYg
dCA9IHRocmVhZERhdGEtPnN0YWNrU3RhdHMoKTsKKyAgICBjb25zdCBTdGFja0JvdW5kcyYgc3Rh
Y2sgPSB0aHJlYWREYXRhLT5zdGFjaygpOworCisgICAgYm9vbCBpc0dyb3dpbmdEb3dud2FyZCA9
IHN0YWNrLmlzR3Jvd2luZ0Rvd253YXJkKCk7CisgICAgYm9vbCBuZWVkVG9QcmludCA9IGZhbHNl
OworICAgIGNoYXIqIGN1cnJlbnQgPSByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKTsKKyAg
ICBjaGFyKiBsYXN0ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odC5tX2N1cnJlbnRDaGVja1Bv
aW50KTsKKworICAgIC8vIElmIHRoZXJlIHdhcyBubyBwcmV2aW91cyBjaGVja3BvaW50LCBtZWFz
dXJlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBzdGFjazoKKyAgICBpZiAoIWxhc3QpCisgICAgICAg
IGxhc3QgPSB0Lm1fc3RhY2tTdGFydDsKKworICAgIC8vIFVwZGF0ZSB0aGUgcmVlbnRyeSBkZXB0
aCBzdGF0czoKKyAgICB0Lm1fcmVlbnRyeURlcHRoKys7CisgICAgaWYgKHQubV9yZWVudHJ5RGVw
dGggPiBTdGFja1N0YXRzOjpzX21heFJlZW50cnlEZXB0aCkgeworICAgICAgICBTdGFja1N0YXRz
OjpzX21heFJlZW50cnlEZXB0aCA9IHQubV9yZWVudHJ5RGVwdGg7CisgICAgICAgIG5lZWRUb1By
aW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBVcGRhdGUgdGhlIHN0YWNrIGhlaWdodCBzdGF0
czoKKyAgICBpbnQgaGVpZ2h0ID0gdC5tX3N0YWNrU3RhcnQgLSBjdXJyZW50OworICAgIGlmICgh
aXNHcm93aW5nRG93bndhcmQpCisgICAgICAgIGhlaWdodCA9IC1oZWlnaHQ7CisgICAgaWYgKGhl
aWdodCA+IFN0YWNrU3RhdHM6OnNfbWF4U3RhY2tIZWlnaHQpIHsKKyAgICAgICAgU3RhY2tTdGF0
czo6c19tYXhTdGFja0hlaWdodCA9IGhlaWdodDsKKyAgICAgICAgbmVlZFRvUHJpbnQgPSB0cnVl
OworICAgIH0KKworICAgIC8vIFVwZGF0ZSB0aGUgY2hlY2twb2ludCBkaWZmIHN0YXRzOgorICAg
IGludCBkaWZmID0gbGFzdCAtIGN1cnJlbnQ7CisgICAgaWYgKCFpc0dyb3dpbmdEb3dud2FyZCkK
KyAgICAgICAgZGlmZiA9IC1kaWZmOworICAgIGlmIChkaWZmID4gU3RhY2tTdGF0czo6c19tYXhD
aGVja1BvaW50RGlmZikgeworICAgICAgICBTdGFja1N0YXRzOjpzX21heENoZWNrUG9pbnREaWZm
ID0gZGlmZjsKKyAgICAgICAgbmVlZFRvUHJpbnQgPSB0cnVlOworICAgIH0KKworICAgIC8vIFB1
c2ggdGhpcyBjaGVja3BvaW50OgorICAgIG1fcHJldiA9IHQubV9jdXJyZW50Q2hlY2tQb2ludDsK
KyAgICB0Lm1fY3VycmVudENoZWNrUG9pbnQgPSB0aGlzOworCisgICAgLy8gTG9nIHRoaXMgY2hl
Y2twb2ludCBpZiBuZWVkZWQ6CisjaWYgIUVOQUJMRShWRVJCT1NFX1NUQUNLX1NUQVRTKQorICAg
IGlmIChuZWVkVG9QcmludCkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgQVNTRVJUKFN0YWNrU3Rh
dHM6OnNfbG9nRmlsZSk7CisgICAgICAgIEZJTEUqIGxvZyA9IFN0YWNrU3RhdHM6OnNfbG9nRmls
ZTsKKworICAgICAgICBmcHJpbnRmKGxvZywgIiBDSEVDS1BPSU5UICVwIGRpZmYgJWQvJS4xZmsv
bWF4ICUuMWZrIHwgcmVlbnRyeSAlZC9tYXggJWQgfCBoZWlnaHQgJS4xZmsvbWF4ICUuMWZrIHwg
c3RhY2sgJXAgc2l6ZSAlLjFma1xuIiwKKyAgICAgICAgICAgIHRoaXMsIGRpZmYsIGRpZmYgLyAx
MDI0LjAsIFN0YWNrU3RhdHM6OnNfbWF4Q2hlY2tQb2ludERpZmYgLyAxMDI0LjAsCisgICAgICAg
ICAgICB0Lm1fcmVlbnRyeURlcHRoLCBTdGFja1N0YXRzOjpzX21heFJlZW50cnlEZXB0aCwKKyAg
ICAgICAgICAgIGhlaWdodCAvIDEwMjQuMCwgU3RhY2tTdGF0czo6c19tYXhTdGFja0hlaWdodCAv
IDEwMjQuMCwKKyAgICAgICAgICAgIHN0YWNrLm9yaWdpbigpLCBzdGFjay5zaXplKCkgLyAxMDI0
LjApOworICAgICAgICBmZmx1c2gobG9nKTsKKyAgICB9Cit9CisKK1N0YWNrU3RhdHM6OkNoZWNr
UG9pbnQ6On5DaGVja1BvaW50KCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIoKlN0YWNrU3Rh
dHM6OnNfc2hhcmVkTG9jayk7CisgICAgV1RGVGhyZWFkRGF0YSogdGhyZWFkRGF0YSA9IGNvbnN0
X2Nhc3Q8V1RGVGhyZWFkRGF0YSo+KCZ3dGZUaHJlYWREYXRhKCkpOworICAgIFN0YWNrU3RhdHM6
OlBlclRocmVhZFN0YXRzJiB0ID0gdGhyZWFkRGF0YS0+c3RhY2tTdGF0cygpOworCisgICAgLy8g
UG9wIHRvIHByZXZpb3VzIGNoZWNrcG9pbnQ6CisgICAgdC5tX2N1cnJlbnRDaGVja1BvaW50ID0g
bV9wcmV2OworICAgIC0tdC5tX3JlZW50cnlEZXB0aDsKKworICAgIC8vIExvZyB0aGlzIGNoZWNr
cG9pbnQgaWYgbmVlZGVkOgorI2lmIEVOQUJMRShWRVJCT1NFX1NUQUNLX1NUQVRTKQorICAgIGlm
ICghbV9wcmV2KSB7CisgICAgICAgIEFTU0VSVChTdGFja1N0YXRzOjpzX2xvZ0ZpbGUpOworICAg
ICAgICBGSUxFKiBsb2cgPSBTdGFja1N0YXRzOjpzX2xvZ0ZpbGU7CisgICAgICAgIGNvbnN0IFN0
YWNrQm91bmRzJiBzdGFjayA9IHRocmVhZERhdGEtPnN0YWNrKCk7CisgICAgICAgIGJvb2wgaXNH
cm93aW5nRG93bndhcmQgPSBzdGFjay5pc0dyb3dpbmdEb3dud2FyZCgpOworCisgICAgICAgIGNo
YXIqIGN1cnJlbnQgPSByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKTsKKyAgICAgICAgaW50
IGhlaWdodCA9IHQubV9zdGFja1N0YXJ0IC0gY3VycmVudDsKKworICAgICAgICBpZiAoIWlzR3Jv
d2luZ0Rvd253YXJkKQorICAgICAgICAgICAgaGVpZ2h0ID0gLWhlaWdodDsKKworICAgICAgICBm
cHJpbnRmKGxvZywgIiBQT1AgdG8gJXAgZGlmZiBtYXggJS4xZmsgfCByZWVudHJ5ICVkLyVkIG1h
eCB8IGhlaWdodCAlLjFmay9tYXggJS4xZmsgfCBzdGFjayAlcCBzaXplICUuMWZrKVxuIiwKKyAg
ICAgICAgICAgIHRoaXMsIFN0YWNrU3RhdHM6OnNfbWF4Q2hlY2tQb2ludERpZmYgLyAxMDI0LjAs
CisgICAgICAgICAgICB0Lm1fcmVlbnRyeURlcHRoLCBTdGFja1N0YXRzOjpzX21heFJlZW50cnlE
ZXB0aCwKKyAgICAgICAgICAgIGhlaWdodCAvIDEwMjQuMCwgU3RhY2tTdGF0czo6c19tYXhTdGFj
a0hlaWdodCAvIDEwMjQuMCwKKyAgICAgICAgICAgIHN0YWNrLm9yaWdpbigpLCBzdGFjay5zaXpl
KCkgLyAxMDI0LjApOworICAgICAgICBmZmx1c2gobG9nKTsKKyAgICB9CisjZW5kaWYKK30KKwor
dm9pZCBTdGFja1N0YXRzOjpwcm9iZSgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKCpTdGFj
a1N0YXRzOjpzX3NoYXJlZExvY2spOworICAgIFdURlRocmVhZERhdGEqIHRocmVhZERhdGEgPSBj
b25zdF9jYXN0PFdURlRocmVhZERhdGEqPigmd3RmVGhyZWFkRGF0YSgpKTsKKyAgICBTdGFja1N0
YXRzOjpQZXJUaHJlYWRTdGF0cyYgdCA9IHRocmVhZERhdGEtPnN0YWNrU3RhdHMoKTsKKyAgICBj
b25zdCBTdGFja0JvdW5kcyYgc3RhY2sgPSB0aHJlYWREYXRhLT5zdGFjaygpOworCisgICAgYm9v
bCBpc0dyb3dpbmdEb3dud2FyZCA9IHN0YWNrLmlzR3Jvd2luZ0Rvd253YXJkKCk7CisKKyAgICBi
b29sIG5lZWRUb1ByaW50ID0gZmFsc2U7CisKKyAgICBpbnQgZHVtbXk7CisgICAgY2hhciogY3Vy
cmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZkdW1teSk7CisgICAgY2hhciogbGFzdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHQubV9jdXJyZW50Q2hlY2tQb2ludCk7CisKKyAgICAv
LyBJZiB0aGVyZSB3YXMgbm8gcHJldmlvdXMgY2hlY2twb2ludCwgbWVhc3VyZSBmcm9tIHRoZSBz
dGFydCBvZiB0aGUgc3RhY2s6CisgICAgaWYgKCFsYXN0KQorICAgICAgICBsYXN0ID0gdC5tX3N0
YWNrU3RhcnQ7CisKKyAgICAvLyBXZSBkaWQgbm90IHJlYWNoIGFub3RoZXIgY2hlY2twb2ludCB5
ZXQuIEhlbmNlLCB3ZSBkbyBub3QgdG91Y2ggdGhlCisgICAgLy8gcmVlbnRyeSBzdGF0cy4KKwor
ICAgIC8vIFVwZGF0ZSB0aGUgc3RhY2sgaGVpZ2h0IHN0YXRzOgorICAgIGludCBoZWlnaHQgPSB0
Lm1fc3RhY2tTdGFydCAtIGN1cnJlbnQ7CisgICAgaWYgKCFpc0dyb3dpbmdEb3dud2FyZCkKKyAg
ICAgICAgaGVpZ2h0ID0gLWhlaWdodDsKKyAgICBpZiAoaGVpZ2h0ID4gU3RhY2tTdGF0czo6c19t
YXhTdGFja0hlaWdodCkgeworICAgICAgICBTdGFja1N0YXRzOjpzX21heFN0YWNrSGVpZ2h0ID0g
aGVpZ2h0OworICAgICAgICBuZWVkVG9QcmludCA9IHRydWU7CisgICAgfQorCisgICAgLy8gVXBk
YXRlIHRoZSBjaGVja3BvaW50IGRpZmYgc3RhdHM6CisgICAgaW50IGRpZmYgPSBsYXN0IC0gY3Vy
cmVudDsKKyAgICBpZiAoIWlzR3Jvd2luZ0Rvd253YXJkKQorICAgICAgICBkaWZmID0gLWRpZmY7
CisgICAgaWYgKGRpZmYgPiBTdGFja1N0YXRzOjpzX21heENoZWNrUG9pbnREaWZmKSB7CisgICAg
ICAgIFN0YWNrU3RhdHM6OnNfbWF4Q2hlY2tQb2ludERpZmYgPSBkaWZmOworICAgICAgICBuZWVk
VG9QcmludCA9IHRydWU7CisgICAgfQorCisjaWYgIUVOQUJMRShWRVJCT1NFX1NUQUNLX1NUQVRT
KQorICAgIGlmIChuZWVkVG9QcmludCkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgQVNTRVJUKFN0
YWNrU3RhdHM6OnNfbG9nRmlsZSk7CisgICAgICAgIEZJTEUqIGxvZyA9IFN0YWNrU3RhdHM6OnNf
bG9nRmlsZTsKKworICAgICAgICBmcHJpbnRmKGxvZywgIiBQUk9CRSAlcCBkaWZmICVkLyUuMWZr
L21heCAlLjFmayB8IHJlZW50cnkgJWQvbWF4ICVkIHwgaGVpZ2h0ICUuMWZrL21heCAlLjFmayB8
IHN0YWNrICVwIHNpemUgJS4xZmtcbiIsCisgICAgICAgICAgICBjdXJyZW50LCBkaWZmLCBkaWZm
IC8gMTAyNC4wLCBTdGFja1N0YXRzOjpzX21heENoZWNrUG9pbnREaWZmIC8gMTAyNC4wLAorICAg
ICAgICAgICAgdC5tX3JlZW50cnlEZXB0aCwgU3RhY2tTdGF0czo6c19tYXhSZWVudHJ5RGVwdGgs
CisgICAgICAgICAgICBoZWlnaHQgLyAxMDI0LjAsIFN0YWNrU3RhdHM6OnNfbWF4U3RhY2tIZWln
aHQgLyAxMDI0LjAsCisgICAgICAgICAgICBzdGFjay5vcmlnaW4oKSwgc3RhY2suc2l6ZSgpIC8g
MTAyNC4wKTsKKyAgICAgICAgZmZsdXNoKGxvZyk7CisgICAgfQorfQorCitTdGFja1N0YXRzOjpM
YXlvdXRDaGVja1BvaW50OjpMYXlvdXRDaGVja1BvaW50KCkKK3sKKyAgICAvLyBXaGlsZSBhIGxh
eW91dCBjaGVja3BvaW50IGlzIG5vdCBuZWNlc3NhcmlseSBhIGNoZWNrcG9pbnQgd2hlcmUgd2UK
KyAgICAvLyB3ZSB3aWxsIGRvIGEgcmVjdXJzaW9uIGNoZWNrLCBpdCBpcyBhIGNvbnZlbmllbnQg
c3BvdCBmb3IgZG9pbmcgYQorICAgIC8vIHByb2JlIHRvIG1lYXN1cmUgdGhlIGhlaWdodCBvZiBz
dGFjayB1c2FnZS4KKyAgICAvLworICAgIC8vIFdlJ2xsIGRvIHRoaXMgcHJvYmUgYmVmb3JlIHdl
IGNvbW1lbmNlIHdpdGggdGhlIGxheW91dCBjaGVja3BvaW50LgorICAgIC8vIFRoaXMgaXMgYmVj
YXVzZSB0aGUgcHJvYmUgYWxzbyBsb2NrcyB0aGUgc2hhcmVkTG9jay4gQnkgY2FsbGluZyB0aGUK
KyAgICAvLyBwcm9iZSBmaXJzdCwgd2UgY2FuIGF2b2lkIHJlLWVudGVyaW5nIHRoZSBsb2NrLgor
ICAgIFN0YWNrU3RhdHM6OnByb2JlKCk7CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIoKlN0YWNr
U3RhdHM6OnNfc2hhcmVkTG9jayk7CisgICAgV1RGVGhyZWFkRGF0YSogdGhyZWFkRGF0YSA9IGNv
bnN0X2Nhc3Q8V1RGVGhyZWFkRGF0YSo+KCZ3dGZUaHJlYWREYXRhKCkpOworICAgIFN0YWNrU3Rh
dHM6OlBlclRocmVhZFN0YXRzJiB0ID0gdGhyZWFkRGF0YS0+c3RhY2tTdGF0cygpOworICAgIGNv
bnN0IFN0YWNrQm91bmRzJiBzdGFjayA9IHRocmVhZERhdGEtPnN0YWNrKCk7CisKKyAgICBib29s
IGlzR3Jvd2luZ0Rvd253YXJkID0gc3RhY2suaXNHcm93aW5nRG93bndhcmQoKTsKKworICAgIC8v
IFB1c2ggdGhpcyBjaGVja3BvaW50OgorICAgIG1fcHJldiA9IFN0YWNrU3RhdHM6OnNfdG9wTGF5
b3V0Q2hlY2tQb2ludDsKKyAgICBpZiAobV9wcmV2KQorICAgICAgICBtX2RlcHRoID0gbV9wcmV2
LT5tX2RlcHRoICsgMTsKKyAgICBlbHNlIHsKKyAgICAgICAgU3RhY2tTdGF0czo6c19maXJzdExh
eW91dENoZWNrUG9pbnQgPSB0aGlzOworICAgICAgICBtX2RlcHRoID0gMDsKKyAgICB9CisgICAg
U3RhY2tTdGF0czo6c190b3BMYXlvdXRDaGVja1BvaW50ID0gdGhpczsKKworICAgIC8vIAorICAg
IGNoYXIqIGN1cnJlbnQgPSByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKTsKKyAgICBjaGFy
KiBsYXN0ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9wcmV2KTsKKyAgICBjaGFyKiByb290
ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oU3RhY2tTdGF0czo6c19maXJzdExheW91dENoZWNr
UG9pbnQpOworICAgIGJvb2wgbmVlZFRvUHJpbnQgPSBmYWxzZTsKKworICAgIGludCBkaWZmID0g
bGFzdCAtIGN1cnJlbnQ7CisgICAgaWYgKCFsYXN0KQorICAgICAgICBkaWZmID0gMDsKKyAgICBp
bnQgdG90YWxEaWZmID0gcm9vdCAtIGN1cnJlbnQ7CisgICAgaWYgKCFyb290KQorICAgICAgICB0
b3RhbERpZmYgPSAwOworCisgICAgLy8gVXBkYXRlIHRoZSBzdGFjayBoZWlnaHQgc3RhdHM6Cisg
ICAgaW50IGhlaWdodCA9IHQubV9zdGFja1N0YXJ0IC0gY3VycmVudDsKKyAgICBpZiAoIWlzR3Jv
d2luZ0Rvd253YXJkKQorICAgICAgICBoZWlnaHQgPSAtaGVpZ2h0OworICAgIGlmIChoZWlnaHQg
PiBTdGFja1N0YXRzOjpzX21heFN0YWNrSGVpZ2h0KSB7CisgICAgICAgIFN0YWNrU3RhdHM6OnNf
bWF4U3RhY2tIZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIG5lZWRUb1ByaW50ID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICAvLyBVcGRhdGUgdGhlIGxheW91dCBjaGVja3BvaW50IGRpZmYgc3RhdHM6Cisg
ICAgaWYgKCFpc0dyb3dpbmdEb3dud2FyZCkKKyAgICAgICAgZGlmZiA9IC1kaWZmOworICAgIGlm
IChkaWZmID4gU3RhY2tTdGF0czo6c19tYXhMYXlvdXRDaGVja1BvaW50RGlmZikgeworICAgICAg
ICBTdGFja1N0YXRzOjpzX21heExheW91dENoZWNrUG9pbnREaWZmID0gZGlmZjsKKyAgICAgICAg
bmVlZFRvUHJpbnQgPSB0cnVlOworICAgIH0KKworICAgIC8vIFVwZGF0ZSB0aGUgdG90YWwgbGF5
b3V0IGNoZWNrcG9pbnQgZGlmZiBzdGF0czoKKyAgICBpZiAoIWlzR3Jvd2luZ0Rvd253YXJkKQor
ICAgICAgICB0b3RhbERpZmYgPSAtdG90YWxEaWZmOworICAgIGlmICh0b3RhbERpZmYgPiBTdGFj
a1N0YXRzOjpzX21heFRvdGFsTGF5b3V0Q2hlY2tQb2ludERpZmYpIHsKKyAgICAgICAgU3RhY2tT
dGF0czo6c19tYXhUb3RhbExheW91dENoZWNrUG9pbnREaWZmID0gdG90YWxEaWZmOworICAgICAg
ICBuZWVkVG9QcmludCA9IHRydWU7CisgICAgfQorCisjaWYgIUVOQUJMRShWRVJCT1NFX1NUQUNL
X1NUQVRTKQorICAgIGlmIChuZWVkVG9QcmludCkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgQVNT
RVJUKFN0YWNrU3RhdHM6OnNfbG9nRmlsZSk7CisgICAgICAgIEZJTEUqIGxvZyA9IFN0YWNrU3Rh
dHM6OnNfbG9nRmlsZTsKKworICAgICAgICBmcHJpbnRmKGxvZywgIiBMQVlPVVQgJXAgZGlmZiAl
ZC8lLjFmay9tYXggJS4xZmsgfCByZWVudHJ5ICVkL21heCAlZCB8IGhlaWdodCAlLjFmay9tYXgg
JS4xZmsgfCBzdGFjayAlcCBzaXplICUuMWZrXG4iLAorICAgICAgICAgICAgY3VycmVudCwgZGlm
ZiwgZGlmZiAvIDEwMjQuMCwgU3RhY2tTdGF0czo6c19tYXhMYXlvdXRDaGVja1BvaW50RGlmZiAv
IDEwMjQuMCwKKyAgICAgICAgICAgIG1fZGVwdGgsIFN0YWNrU3RhdHM6OnNfbWF4TGF5b3V0UmVl
bnRyeURlcHRoLAorICAgICAgICAgICAgdG90YWxEaWZmIC8gMTAyNC4wLCBTdGFja1N0YXRzOjpz
X21heFRvdGFsTGF5b3V0Q2hlY2tQb2ludERpZmYgLyAxMDI0LjAsCisgICAgICAgICAgICBzdGFj
ay5vcmlnaW4oKSwgc3RhY2suc2l6ZSgpIC8gMTAyNC4wKTsKKyAgICAgICAgZmZsdXNoKGxvZyk7
CisgICAgfQorfQorCitTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50Ojp+TGF5b3V0Q2hlY2tQ
b2ludCgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKCpTdGFja1N0YXRzOjpzX3NoYXJlZExv
Y2spOworCisgICAgLy8gUG9wIHRvIHRoZSBwcmV2aW91cyBsYXlvdXQgY2hlY2twb2ludDoKKyAg
ICBTdGFja1N0YXRzOjpzX3RvcExheW91dENoZWNrUG9pbnQgPSBtX3ByZXY7CisgICAgaWYgKCFt
X2RlcHRoKQorICAgICAgICBTdGFja1N0YXRzOjpzX2ZpcnN0TGF5b3V0Q2hlY2tQb2ludCA9IDA7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKFNUQUNLX1NUQVRT
KQorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGFja1N0YXRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvU3RhY2tTdGF0cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYv
U3RhY2tTdGF0cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFN0YWNrU3RhdHNfaAor
I2RlZmluZSBTdGFja1N0YXRzX2gKKworLy8gRGVmaW5lIHRoaXMgZmxhZyB0byBlbmFibGUgU3Rh
Y2sgc3RhdHMgY29sbGVjdGlvbi4gVGhpcyBmZWF0dXJlIGlzIHVzZWZ1bAorLy8gZm9yIGdldHRp
bmcgYSBzYW1wbGUgb2YgbmF0aXZlIHN0YWNrIHVzYWdlIHNpemVzLgorLy8KKy8vIEVuYWJsaW5n
IHRoaXMgd2lsbCBjYXVzZSBzdGF0cyB0byBiZSBjb2xsZWN0ZWQgYW5kIHdyaXR0ZW4gdG8gYSBs
b2cgZmlsZSBhdAorLy8gdmFyaW91cyAgaW5zdHJ1bWVudGVkIHBvaW50cyBpbiB0aGUgY29kZS4g
SXQgd2lsbCByZXN1bHQgaW4gbm90aWNlYWJsZQorLy8gcGVyZm9ybWFuY2UgbG9zcy4gSGVuY2Us
IHRoaXMgc2hvdWxkIG9ubHkgYmUgZW5hYmxlIHdoZW4geW91IHdhbnQgdG8gZG8KKy8vIHNvbWUg
c3RhdHMgbG9jYXRpb24gaW4geW91ciBsb2NhbCBidWlsZC4gVGhpcyBjb2RlIGlzIHByb3ZpZGVk
IGhlcmUgYXMgYQorLy8gY29udmVuaWVuY2UgZm9yIGNvbGxlY3RpbmcgdGhhdCBkYXRhLiBJdCBp
cyBub3QgbWVhbnQgdG8gYmUgZW5hYmxlZCBieQorLy8gZGVmYXVsdCBvbiByZWxlYXNlIG9yIGRl
YnVnIGJ1aWxkcy4KKworLy8gI2RlZmluZSBFTkFCTEVfU1RBQ0tfU1RBVFMgMQorCisjaWYgRU5B
QkxFKFNUQUNLX1NUQVRTKSAKKyNpbmNsdWRlICJFeHBvcnRNYWNyb3MuaCIKKyNpbmNsdWRlICJU
aHJlYWRpbmdQcmltaXRpdmVzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorCituYW1l
c3BhY2UgV1RGIHsKKworI2lmICFFTkFCTEUoU1RBQ0tfU1RBVFMpIAorCitjbGFzcyBTdGFja1N0
YXRzIHsKK3B1YmxpYzoKKyAgICAvLyBUaGUgQ2hlY2tQb2ludCBjbGFzcyBpcyBmb3IgbWFya2lu
ZyBjaGVjayBwb2ludHMgY29ycmVzcG9uZGluZworICAgIC8vIGVhY2ggbG9jYXRpb24gaW4gY29k
ZSB3aGVyZSBhIHN0YWNrIHJlY3Vyc2lvbiBjaGVjayBpcyBiZWluZyBkb25lLgorCisgICAgY2xh
c3MgQ2hlY2tQb2ludCB7CisgICAgcHVibGljOgorICAgICAgICBDaGVja1BvaW50KCkgeyB9Cisg
ICAgfTsKKworICAgIGNsYXNzIFBlclRocmVhZFN0YXRzIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFBlclRocmVhZFN0YXRzKCkgeyB9CisgICAgfTsKKworICAgIGNsYXNzIExheW91dENoZWNrUG9p
bnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgTGF5b3V0Q2hlY2tQb2ludCgpIHsgfQorICAgIH07
CisKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCkgeyB9CisgICAgc3RhdGljIHZvaWQgcHJv
YmUoKSB7IH0KK307CisKKyNlbHNlIC8vIEVOQUJMRShTVEFDS19TVEFUUykKKworY2xhc3MgU3Rh
Y2tTdGF0cyB7CitwdWJsaWM6CisgICAgLy8gVGhlIENoZWNrUG9pbnQgY2xhc3MgaXMgZm9yIG1h
cmtpbmcgY2hlY2sgcG9pbnRzIGNvcnJlc3BvbmRpbmcKKyAgICAvLyBlYWNoIGxvY2F0aW9uIGlu
IGNvZGUgd2hlcmUgYSBzdGFjayByZWN1cnNpb24gY2hlY2sgaXMgYmVpbmcgZG9uZS4KKworICAg
IGNsYXNzIENoZWNrUG9pbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgQ2hlY2tQb2ludCgpOwor
ICAgICAgICB+Q2hlY2tQb2ludCgpOworICAgIHByaXZhdGU6CisgICAgICAgIENoZWNrUG9pbnQq
IG1fcHJldjsKKyAgICB9OworCisgICAgY2xhc3MgUGVyVGhyZWFkU3RhdHMgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgUGVyVGhyZWFkU3RhdHMoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIGlu
dCBtX3JlZW50cnlEZXB0aDsKKyAgICAgICAgY2hhciogbV9zdGFja1N0YXJ0OworICAgICAgICBD
aGVja1BvaW50KiBtX2N1cnJlbnRDaGVja1BvaW50OworCisgICAgICAgIGZyaWVuZCBjbGFzcyBD
aGVja1BvaW50OworICAgICAgICBmcmllbmQgY2xhc3MgU3RhY2tTdGF0czsKKyAgICB9OworCisg
ICAgY2xhc3MgTGF5b3V0Q2hlY2tQb2ludCB7CisgICAgcHVibGljOgorICAgICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgTGF5b3V0Q2hlY2tQb2ludCgpOworICAgICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgfkxheW91dENoZWNrUG9pbnQoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIExheW91dENo
ZWNrUG9pbnQqIG1fcHJldjsKKyAgICAgICAgaW50IG1fZGVwdGg7CisgICAgfTsKKworICAgIC8v
IEluaXRpYWxpemVzIGxvY2tzIGFuZCB0aGUgbG9nIGZpbGUuIFNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBvbmNlLgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKKworICAgIC8vIFVzZWQgZm9y
IHByb2JpbmcgdGhlIHN0YWNrIGF0IHBsYWNlcyB3aGVyZSB3ZSBzdXNwZWN0IHRvIGJlIGhpZ2gK
KyAgICAvLyBwb2ludHMgb2Ygc3RhY2sgdXNhZ2UgYnV0IGFyZSBOT1QgY2hlY2sgcG9pbnRzIHdo
ZXJlIHN0YWNrIHJlY3Vyc2lvbgorICAgIC8vIGlzIGNoZWNrZWQuCisgICAgLy8KKyAgICAvLyBU
aGUgbW9yZSBwbGFjZXMgd2hlcmUgd2UgYWRkIHRoaXMgcHJvYmUsIHRoZSBtb3JlIGFjY3VyYXRl
IG91cgorICAgIC8vIHN0YXRzIGRhdGEgd2lsbCBiZS4gSG93ZXZlciwgYWRkaW5nIHRvbyBtYW55
IHByb2JlcyB3aWxsIGFsc28KKyAgICAvLyByZXN1bHQgaW4gdW5uZWNlc3NhcnkgcGVyZm9ybWFu
Y2UgbG9zcy4gU28sIG9ubHkgYWRkIHRoZXNlIHByb2JlcworICAgIC8vIGp1ZGljaW91c2x5IHdo
ZXJlIGFwcHJvcHJpYXRlLgorICAgIHN0YXRpYyB2b2lkIHByb2JlKCk7CisKK3ByaXZhdGU6Cisg
ICAgc3RhdGljIEZJTEUqIHNfbG9nRmlsZTsKKworICAgIC8vIENoZWNrUG9pbnQgbWFuYWdlbWVu
dDoKKyAgICBzdGF0aWMgTXV0ZXgqIHNfc2hhcmVkTG9jazsKKyAgICBzdGF0aWMgQ2hlY2tQb2lu
dCogc190b3BDaGVja1BvaW50OworICAgIHN0YXRpYyBMYXlvdXRDaGVja1BvaW50KiBzX2ZpcnN0
TGF5b3V0Q2hlY2tQb2ludDsKKyAgICBzdGF0aWMgTGF5b3V0Q2hlY2tQb2ludCogc190b3BMYXlv
dXRDaGVja1BvaW50OworCisgICAgLy8gSGlnaCB3YXRlcm1hcmsgc3RhdHM6CisgICAgc3RhdGlj
IGludCBzX21heENoZWNrUG9pbnREaWZmOworICAgIHN0YXRpYyBpbnQgc19tYXhTdGFja0hlaWdo
dDsKKyAgICBzdGF0aWMgaW50IHNfbWF4UmVlbnRyeURlcHRoOworCisgICAgc3RhdGljIGludCBz
X21heExheW91dENoZWNrUG9pbnREaWZmOworICAgIHN0YXRpYyBpbnQgc19tYXhUb3RhbExheW91
dENoZWNrUG9pbnREaWZmOworICAgIHN0YXRpYyBpbnQgc19tYXhMYXlvdXRSZWVudHJ5RGVwdGg7
CisKKyAgICBmcmllbmQgY2xhc3MgQ2hlY2tQb2ludDsKKyAgICBmcmllbmQgY2xhc3MgTGF5b3V0
Q2hlY2tQb2ludDsKK307CisKKyNlbmRpZiAvLyBFTkFCTEUoU1RBQ0tfU1RBVFMpIAorCit9IC8v
IG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpTdGFja1N0YXRzOworCisjZW5kaWYgLy8gU3Rh
Y2tTdGF0c19oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCShyZXZpc2lv
biAxMzE4NTkpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJkdG9hL2NhY2hlZC1wb3dlcnMu
aCIKICNpbmNsdWRlICJIYXNoTWFwLmgiCiAjaW5jbHVkZSAiUmFuZG9tTnVtYmVyU2VlZC5oIgor
I2luY2x1ZGUgIlN0YWNrU3RhdHMuaCIKICNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKICNpbmNs
dWRlICJUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCIKICNpbmNsdWRlICJUaHJlYWRJZGVudGlm
aWVyRGF0YVB0aHJlYWRzLmgiCkBAIC0xMzgsNiArMTM5LDcgQEAgdm9pZCBpbml0aWFsaXplVGhy
ZWFkaW5nKCkKICAgICB0aHJlYWRNYXBNdXRleCgpOwogICAgIGluaXRpYWxpemVSYW5kb21OdW1i
ZXJHZW5lcmF0b3IoKTsKICAgICBUaHJlYWRJZGVudGlmaWVyRGF0YTo6aW5pdGlhbGl6ZU9uY2Uo
KTsKKyAgICBTdGFja1N0YXRzOjppbml0aWFsaXplKCk7CiAgICAgd3RmVGhyZWFkRGF0YSgpOwog
ICAgIHNfZHRvYVA1TXV0ZXggPSBuZXcgTXV0ZXg7CiAgICAgaW5pdGlhbGl6ZURhdGVzKCk7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcAkocmV2aXNpb24gMTMxODU5KQorKysgU291cmNl
L1dURi93dGYvV1RGVGhyZWFkRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDEw
IEBAIFdURlRocmVhZERhdGE6OldURlRocmVhZERhdGEoKQogICAgICwgbV9kZWZhdWx0SWRlbnRp
ZmllclRhYmxlKG5ldyBKU0M6OklkZW50aWZpZXJUYWJsZSgpKQogICAgICwgbV9jdXJyZW50SWRl
bnRpZmllclRhYmxlKG1fZGVmYXVsdElkZW50aWZpZXJUYWJsZSkKICAgICAsIG1fc3RhY2tCb3Vu
ZHMoU3RhY2tCb3VuZHM6OmN1cnJlbnRUaHJlYWRTdGFja0JvdW5kcygpKQorI2lmIEVOQUJMRShT
VEFDS19TVEFUUykKKyAgICAsIG1fc3RhY2tTdGF0cygpCiAjZW5kaWYKKyNlbmRpZiAvLyBVU0Uo
SlNDKQogewogfQogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5oCShyZXZpc2lvbiAxMzE4NTkp
CisrKyBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDYgKzMxLDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja0JvdW5kcy5oPgorI2luY2x1ZGUgPHd0Zi9T
dGFja1N0YXRzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KQEAgLTEw
OCw3ICsxMDksMTQgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3RhY2tCb3Vu
ZHM7CiAgICAgfQorCisjaWYgRU5BQkxFKFNUQUNLX1NUQVRTKQorICAgIFN0YWNrU3RhdHM6OlBl
clRocmVhZFN0YXRzJiBzdGFja1N0YXRzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0YWNr
U3RhdHM7CisgICAgfQogI2VuZGlmCisjZW5kaWYgLy8gVVNFKEpTQykKIAogcHJpdmF0ZToKICAg
ICBBdG9taWNTdHJpbmdUYWJsZSogbV9hdG9taWNTdHJpbmdUYWJsZTsKQEAgLTExOCw3ICsxMjYs
MTAgQEAgcHJpdmF0ZToKICAgICBKU0M6OklkZW50aWZpZXJUYWJsZSogbV9kZWZhdWx0SWRlbnRp
ZmllclRhYmxlOwogICAgIEpTQzo6SWRlbnRpZmllclRhYmxlKiBtX2N1cnJlbnRJZGVudGlmaWVy
VGFibGU7CiAgICAgU3RhY2tCb3VuZHMgbV9zdGFja0JvdW5kczsKKyNpZiBFTkFCTEUoU1RBQ0tf
U1RBVFMpCisgICAgU3RhY2tTdGF0czo6UGVyVGhyZWFkU3RhdHMgbV9zdGFja1N0YXRzOwogI2Vu
ZGlmCisjZW5kaWYgLy8gVVNFKEpTQykKIAogICAgIHN0YXRpYyBXVEZfRVhQT1JUREFUQSBUaHJl
YWRTcGVjaWZpYzxXVEZUaHJlYWREYXRhPiogc3RhdGljRGF0YTsKICAgICBmcmllbmQgV1RGVGhy
ZWFkRGF0YSYgd3RmVGhyZWFkRGF0YSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvaW50ZXJwcmV0ZXIvSlNTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL2ludGVycHJldGVyL0pTU3RhY2suaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2ludGVycHJldGVyL0pTU3RhY2su
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdlYkNvcmVfRldEX0pTU3RhY2tfaAorI2Rl
ZmluZSBXZWJDb3JlX0ZXRF9KU1N0YWNrX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0
YWNrLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmNwcAkocmV2aXNpb24gMTMxODU5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5jbHVkZSAiSlNFeGNlcHRpb25CYXNlLmgi
CiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCisjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvSlNT
dGFjay5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgpAQCAt
MTQ5LDYgKzE1MCw3IEBAIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlMK
ICAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbikpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIEpTU3RhY2s6OkVycm9yU3RhY2tSZXNlcnZlRW5hYmxlciBzdGFj
a1Jlc2VydmUoZXhlYyk7CiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbk9iamVjdCA9
IGV4Y2VwdGlvbi50b09iamVjdChleGVjKTsKICAgICBpbnQgbGluZU51bWJlciA9IGV4Y2VwdGlv
bk9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImxpbmUiKSkudG9JbnQzMihleGVj
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNl
LmNwcAkocmV2aXNpb24gMTMxODU5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw3IEBAIEpTR2xv
YmFsRGF0YSogSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0cKICAgICBzdGF0aWMgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhID0gMDsKICAgICBpZiAoIWdsb2JhbERhdGEpIHsKICAgICAgICAgU2Ny
aXB0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwotICAgICAgICBnbG9iYWxEYXRh
ID0gSlNHbG9iYWxEYXRhOjpjcmVhdGVMZWFrZWQoVGhyZWFkU3RhY2tUeXBlTGFyZ2UsIExhcmdl
SGVhcCkubGVha1JlZigpOworICAgICAgICBnbG9iYWxEYXRhID0gSlNHbG9iYWxEYXRhOjpjcmVh
dGVMZWFrZWQoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CiAgICAgICAgIGdsb2JhbERhdGEtPnRpbWVv
dXRDaGVja2VyLnNldFRpbWVvdXRJbnRlcnZhbCgxMDAwMCk7IC8vIDEwIHNlY29uZHMKICNpZm5k
ZWYgTkRFQlVHCiAgICAgICAgIGdsb2JhbERhdGEtPmV4Y2x1c2l2ZVRocmVhZCA9IGN1cnJlbnRU
aHJlYWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dv
cmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMzE4NTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTUsNyArNTUsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyKFdv
cmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQpCi0gICAgOiBtX2dsb2JhbERhdGEoSlNHbG9iYWxE
YXRhOjpjcmVhdGUoVGhyZWFkU3RhY2tUeXBlU21hbGwpKQorICAgIDogbV9nbG9iYWxEYXRhKEpT
R2xvYmFsRGF0YTo6Y3JlYXRlKCkpCiAgICAgLCBtX3dvcmtlckNvbnRleHQod29ya2VyQ29udGV4
dCkKICAgICAsIG1fd29ya2VyQ29udGV4dFdyYXBwZXIoKm1fZ2xvYmFsRGF0YSkKICAgICAsIG1f
ZXhlY3V0aW9uRm9yYmlkZGVuKGZhbHNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShy
ZXZpc2lvbiAxMzE4NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTI2LDYgKzE5MjYsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVMYXlv
dXQoKQogCiAgICAgdXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogCisgICAgU3RhY2tTdGF0czo6TGF5
b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVja1BvaW50OwogICAgIC8vIE9ubHkgZG8gYSBsYXlvdXQg
aWYgY2hhbmdlcyBoYXZlIG9jY3VycmVkIHRoYXQgbWFrZSBpdCBuZWNlc3NhcnkuICAgICAgCiAg
ICAgRnJhbWVWaWV3KiB2ID0gdmlldygpOwogICAgIGlmICh2ICYmIHJlbmRlcmVyKCkgJiYgKHYt
PmxheW91dFBlbmRpbmcoKSB8fCByZW5kZXJlcigpLT5uZWVkc0xheW91dCgpKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTMxODU5KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM3Myw2ICsxMzczLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5m
b0FmdGVyTAogCiB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXQoKQogeworICAgIFN0YWNrU3RhdHM6
OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAgICBPdmVyZmxvd0V2ZW50RGlz
cGF0Y2hlciBkaXNwYXRjaGVyKHRoaXMpOwogCiAgICAgLy8gVXBkYXRlIG91ciBmaXJzdCBsZXR0
ZXIgaW5mbyBub3cuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAko
cmV2aXNpb24gMTMxODU5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNCw2ICszMTQsNyBAQCB2b2lkIFJlbmRlckJveDo6dXBk
YXRlRnJvbVN0eWxlKCkKIAogdm9pZCBSZW5kZXJCb3g6OmxheW91dCgpCiB7CisgICAgU3RhY2tT
dGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVja1BvaW50OwogICAgIEFTU0VSVChuZWVk
c0xheW91dCgpKTsKIAogICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGlhbG9nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGlhbG9nLmNwcAkocmV2aXNpb24g
MTMxODU5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRpYWxvZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lk
IFJlbmRlckRpYWxvZzo6bGF5b3V0KCkKIHsKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1Bv
aW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhp
cywgdHJ1ZSk7CiAgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwg
dGhpcywgbG9jYXRpb25PZmZzZXQoKSwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigp
IHx8IHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHJl
dmlzaW9uIDEzMTg1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRl
ZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2ICsyMjgsNyBAQCBib29sIFJlbmRl
ckVtYmVkZGVkT2JqZWN0OjpnZXRSZXBsYWNlbWVuCiAKIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmpl
Y3Q6OmxheW91dCgpCiB7CisgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRD
aGVja1BvaW50OwogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKIAogICAgIHVwZGF0ZUxvZ2lj
YWxXaWR0aCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJl
YWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93
VGhyZWFkLmNwcAkocmV2aXNpb24gMTMxODU5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsb3dUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNiArMTMyLDcgQEAg
cHJpdmF0ZToKIAogdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpsYXlvdXQoKQogeworICAgIFN0YWNr
U3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAgICBtX3BhZ2VMb2dp
Y2FsSGVpZ2h0Q2hhbmdlZCA9IG1fcmVnaW9uc0ludmFsaWRhdGVkICYmIGV2ZXJIYWRMYXlvdXQo
KTsKICAgICBpZiAobV9yZWdpb25zSW52YWxpZGF0ZWQpIHsKICAgICAgICAgbV9yZWdpb25zSW52
YWxpZGF0ZWQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
cmFtZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZyYW1lU2V0LmNwcAkocmV2aXNpb24gMTMxODU5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU5LDYgKzQ1OSw3IEBA
IEZyYW1lRWRnZUluZm8gUmVuZGVyRnJhbWVTZXQ6OmVkZ2VJbmZvKCkKIAogdm9pZCBSZW5kZXJG
cmFtZVNldDo6bGF5b3V0KCkKIHsKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxh
eW91dENoZWNrUG9pbnQ7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwogCiAgICAgYm9vbCBk
b0Z1bGxSZXBhaW50ID0gc2VsZk5lZWRzTGF5b3V0KCkgJiYgY2hlY2tGb3JSZXBhaW50RHVyaW5n
TGF5b3V0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySUZyYW1lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySUZyYW1lLmNw
cAkocmV2aXNpb24gMTMxODU5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklG
cmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsNyBAQCB2b2lkIFJlbmRlcklG
cmFtZTo6bGF5b3V0U2VhbWxlc3NseSgpCiAKIHZvaWQgUmVuZGVySUZyYW1lOjpsYXlvdXQoKQog
eworICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAg
ICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAKICAgICBpZiAoaXNTZWFtbGVzcygpKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDEzMTg1
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUzMyw2ICs1MzMsNyBAQCB2b2lkIFJlbmRlckltYWdlOjp1cGRhdGVBbHRUZXh0
KCkKIAogdm9pZCBSZW5kZXJJbWFnZTo6bGF5b3V0KCkKIHsKKyAgICBTdGFja1N0YXRzOjpMYXlv
dXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgUmVuZGVyUmVwbGFjZWQ6OmxheW91
dCgpOwogCiAgICAgLy8gUHJvcGFnYXRlIGNvbnRhaW5lciBzaXplIHRvIGltYWdlIHJlc291cmNl
LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2
aXNpb24gMTMxODU5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsNiArMTcyLDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94
OjpzZWxlY3Rpb25DaGFuZ2VkKCkKIAogdm9pZCBSZW5kZXJMaXN0Qm94OjpsYXlvdXQoKQogewor
ICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAgICBS
ZW5kZXJCbG9jazo6bGF5b3V0KCk7CiAKICAgICBpZiAobV92QmFyKSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHJldmlzaW9uIDEzMTg1OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4Niw2ICsyODYsNyBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjpjb21wdXRlUHJl
ZmVycmVkTG9nCiAKIHZvaWQgUmVuZGVyTGlzdEl0ZW06OmxheW91dCgpCiB7CisgICAgU3RhY2tT
dGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVja1BvaW50OwogICAgIEFTU0VSVChuZWVk
c0xheW91dCgpKTsgCiAKICAgICB1cGRhdGVNYXJrZXJMb2NhdGlvbigpOyAgICAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHJldmlzaW9u
IDEzMTg1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTMwMiw2ICsxMzAyLDcgQEAgdm9pZCBSZW5kZXJMaXN0TWFy
a2VyOjpwYWludChQYWludEluZm8mIAogCiB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OmxheW91dCgp
CiB7CisgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVja1BvaW50Owog
ICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKICAKICAgICBpZiAoaXNJbWFnZSgpKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAJKHJldmlzaW9uIDEzMTg1
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDYgKzU3LDcgQEAgSFRNTE1lZGlhRWxlbWVudCogUmVuZGVyTWVkaWE6Om1l
ZGlhRWxlbQogCiB2b2lkIFJlbmRlck1lZGlhOjpsYXlvdXQoKQogeworICAgIFN0YWNrU3RhdHM6
OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAgICBMYXlvdXRTaXplIG9sZFNp
emUgPSBjb250ZW50Qm94UmVjdCgpLnNpemUoKTsKIAogICAgIFJlbmRlckltYWdlOjpsYXlvdXQo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZp
c2lvbiAxMzE4NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjU4Miw2ICsyNTgyLDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6
OnNjaGVkdWxlUmVsYXlvdXQoKQogCiB2b2lkIFJlbmRlck9iamVjdDo6bGF5b3V0KCkKIHsKKyAg
ICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgQVNT
RVJUKG5lZWRzTGF5b3V0KCkpOwogICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxk
KCk7CiAgICAgd2hpbGUgKGNoaWxkKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCShyZXZpc2lvbiAxMzE4NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNs
dWRlICJUZXh0QWZmaW5pdHkuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4KICNp
bmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAJKHJldmlzaW9uIDEzMTg1
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDgsNiArMjA4LDcgQEAgdm9pZCBSZW5kZXJSZWdpb246OnN0eWxlRGlkQ2hh
bmdlKFN0eWxlRAogCiB2b2lkIFJlbmRlclJlZ2lvbjo6bGF5b3V0KCkKIHsKKyAgICBTdGFja1N0
YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgUmVuZGVyUmVwbGFj
ZWQ6OmxheW91dCgpOwogICAgIGlmIChtX2Zsb3dUaHJlYWQgJiYgaXNWYWxpZCgpKSB7CiAgICAg
ICAgIExheW91dFJlY3Qgb2xkUmVnaW9uUmVjdChmbG93VGhyZWFkUG9ydGlvblJlY3QoKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHJldmlz
aW9uIDEzMTg1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDcgQEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6
c3R5bGVEaWRDaGFuZ2UoU3R5bAogCiB2b2lkIFJlbmRlclJlcGxhY2VkOjpsYXlvdXQoKQogewor
ICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAgICBB
U1NFUlQobmVlZHNMYXlvdXQoKSk7CiAgICAgCiAgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRl
cigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxpY2EuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsaWNhLmNwcAkocmV2aXNpb24gMTMxODU5KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxpY2EuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw2ICs0OCw3IEBAIFJlbmRlclJlcGxpY2E6On5SZW5kZXJSZXBsaWNhKCkKICAgICAK
IHZvaWQgUmVuZGVyUmVwbGljYTo6bGF5b3V0KCkKIHsKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRD
aGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgc2V0RnJhbWVSZWN0KHBhcmVudEJveCgp
LT5ib3JkZXJCb3hSZWN0KCkpOwogICAgIHVwZGF0ZUxheWVyVHJhbnNmb3JtKCk7CiAgICAgc2V0
TmVlZHNMYXlvdXQoZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJ1YnlSdW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSdWJ5UnVuLmNwcAkocmV2aXNpb24gMTMxODU5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnlSdW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNiArMjE3LDcgQEAg
UmVuZGVyUnVieVJ1biogUmVuZGVyUnVieVJ1bjo6c3RhdGljQ3JlYQogCiBSZW5kZXJPYmplY3Qq
IFJlbmRlclJ1YnlSdW46OmxheW91dFNwZWNpYWxFeGNsdWRlZENoaWxkKGJvb2wgcmVsYXlvdXRD
aGlsZHJlbikKIHsKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91dENoZWNr
UG9pbnQ7CiAgICAgLy8gRG9uJ3QgYm90aGVyIHBvc2l0aW9uaW5nIHRoZSBSZW5kZXJSdWJ5UnVu
IHlldC4KICAgICBSZW5kZXJSdWJ5VGV4dCogcnQgPSBydWJ5VGV4dCgpOwogICAgIGlmICghcnQp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBh
cnQuY3BwCShyZXZpc2lvbiAxMzE4NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU2Nyb2xsYmFyUGFydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgUmVu
ZGVyU2Nyb2xsYmFyUGFydDo6flJlbmRlclNjcm9sbGJhclBhcgogCiB2b2lkIFJlbmRlclNjcm9s
bGJhclBhcnQ6OmxheW91dCgpCiB7CisgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBs
YXlvdXRDaGVja1BvaW50OwogICAgIHNldExvY2F0aW9uKExheW91dFBvaW50KCkpOyAvLyBXZSBk
b24ndCB3b3JyeSBhYm91dCBwb3NpdGlvbmluZyBvdXJzZWx2ZXMuIFdlJ3JlIGp1c3QgZGV0ZXJt
aW5pbmcgb3VyIG1pbmltdW0gd2lkdGgvaGVpZ2h0LgogICAgIGlmIChtX3Njcm9sbGJhci0+b3Jp
ZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQogICAgICAgICBsYXlvdXRIb3Jpem9u
dGFsUGFydCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5j
cHAJKHJldmlzaW9uIDEzMTg1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
bGlkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDcgQEAgdm9pZCBSZW5kZXJT
bGlkZXI6OmNvbXB1dGVQcmVmZXJyZWRMb2dpYwogCiB2b2lkIFJlbmRlclNsaWRlcjo6bGF5b3V0
KCkKIHsKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7
CiAgICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gY2FzY2FkZSBhcHBlYXJhbmNlLgogICAgIC8v
IGh0dHA6Ly93ZWJraXQub3JnL2IvNjI1MzUKICAgICBSZW5kZXJCb3gqIHRodW1iQm94ID0gc2xp
ZGVyVGh1bWJFbGVtZW50T2Yobm9kZSgpKS0+cmVuZGVyQm94KCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHJldmlzaW9uIDEzMTg1OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
MSw2ICszNDEsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjpkaXN0cmlidXRlRXh0cmFMb2dpY2FsCiAK
IHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiB7CisgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hl
Y2tQb2ludCBsYXlvdXRDaGVja1BvaW50OwogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKIAog
ICAgIGlmIChzaW1wbGlmaWVkTGF5b3V0KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkocmV2aXNpb24gMTMxODU5KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
MSw2ICsyNDEsNyBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6c2V0Q2VsbExvZ2ljYWxXaWR0CiAK
IHZvaWQgUmVuZGVyVGFibGVDZWxsOjpsYXlvdXQoKQogeworICAgIFN0YWNrU3RhdHM6OkxheW91
dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAgICB1cGRhdGVGaXJzdExldHRlcigpOwog
ICAgIGxheW91dEJsb2NrKGNlbGxXaWR0aENoYW5nZWQoKSk7CiAgICAgc2V0Q2VsbFdpZHRoQ2hh
bmdlZChmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVS
b3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZVJvdy5jcHAJKHJldmlzaW9uIDEzMTg1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVJvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEsNyBAQCB2b2lk
IFJlbmRlclRhYmxlUm93OjphZGRDaGlsZChSZW5kZXJPYmplCiAKIHZvaWQgUmVuZGVyVGFibGVS
b3c6OmxheW91dCgpCiB7CisgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRD
aGVja1BvaW50OwogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKIAogICAgIC8vIFRhYmxlIHJv
d3MgZG8gbm90IGFkZCB0cmFuc2xhdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiAxMzE4NTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzU0LDYgKzM1NCw3IEBAIGludCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNSb3dMb2dp
Y2FsSGUKIAogdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dCgpCiB7CisgICAgU3RhY2tT
dGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVja1BvaW50OwogICAgIEFTU0VSVChuZWVk
c0xheW91dCgpKTsKICAgICBBU1NFUlQoIW5lZWRzQ2VsbFJlY2FsYygpKTsKICAgICBBU1NFUlQo
IXRhYmxlKCktPm5lZWRzU2VjdGlvblJlY2FsYygpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShy
ZXZpc2lvbiAxMzE4NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsOCBAQCBMYXlv
dXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6CiAKIHZvaWQgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQoKQogeworICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNr
UG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKKwogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVtb3Zl
IHRoZSBoZWlnaHQtcmVsYXRlZCBoYWNrcyBpbiBsYXlvdXQoKSBhbmQKICAgICAvLyBzdHlsZURp
ZENoYW5nZSgpLiBXZSBuZWVkIHRoZW0gYmVjYXVzZQogICAgIC8vIC0gQ2VudGVyIHRoZSBpbm5l
ciBlbGVtZW50cyB2ZXJ0aWNhbGx5IGlmIHRoZSBpbnB1dCBoZWlnaHQgaXMgdGFsbGVyIHRoYW4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0VHJhY2tDdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0VHJhY2tDdWUu
Y3BwCShyZXZpc2lvbiAxMzE4NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dFRyYWNrQ3VlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBSZW5kZXJU
ZXh0VHJhY2tDdWU6OlJlbmRlclRleHRUcmFja0N1ZShUCiAKIHZvaWQgUmVuZGVyVGV4dFRyYWNr
Q3VlOjpsYXlvdXQoKQogeworICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0
Q2hlY2tQb2ludDsKICAgICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7CiAKICAgICBMYXlvdXRTdGF0
ZU1haW50YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBsb2NhdGlvbk9mZnNldCgpLCBo
YXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwgc3R5bGUoKS0+aXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VmlkZW8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWRlby5jcHAJKHJldmlzaW9uIDEzMTg1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWRlby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNSw2ICsyMjUsNyBAQCB2b2lkIFJl
bmRlclZpZGVvOjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAKIHZvaWQgUmVuZGVyVmlkZW86Omxh
eW91dCgpCiB7CisgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVja1Bv
aW50OwogICAgIFJlbmRlck1lZGlhOjpsYXlvdXQoKTsKICAgICB1cGRhdGVQbGF5ZXIoKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDEz
MTg1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU2LDYgKzE1Niw3IEBAIHZvaWQgUmVuZGVyVmlldzo6Y2hlY2tMYXlvdXRT
dGF0ZShjb25zdCAKIAogdm9pZCBSZW5kZXJWaWV3OjpsYXlvdXQoKQogeworICAgIFN0YWNrU3Rh
dHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAgICBpZiAoIWRvY3VtZW50
KCktPnBhZ2luYXRlZCgpKQogICAgICAgICBzZXRQYWdlTG9naWNhbEhlaWdodCgwKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHJldmlzaW9uIDEz
MTg1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTEsNiArMjExLDcgQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OnNldFdpZGdl
dChQYXNzUmVmUHRyPAogCiB2b2lkIFJlbmRlcldpZGdldDo6bGF5b3V0KCkKIHsKKyAgICBTdGFj
a1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgQVNTRVJUKG5l
ZWRzTGF5b3V0KCkpOwogCiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAko
cmV2aXNpb24gMTMxODU5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBAIFJlbmRlclNW
R0NvbnRhaW5lcjo6flJlbmRlclNWR0NvbnRhaW5lcigKIAogdm9pZCBSZW5kZXJTVkdDb250YWlu
ZXI6OmxheW91dCgpCiB7CisgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRD
aGVja1BvaW50OwogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKIAogICAgIC8vIFJlbmRlclNW
R1Jvb3QgZGlzYWJsZXMgbGF5b3V0U3RhdGUgZm9yIHRoZSBTVkcgcmVuZGVyaW5nIHRyZWUuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Rm9yZWlnbk9iamVjdC5jcHAJKHJldmlzaW9uIDEzMTg1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMyw2ICsxMjMsNyBAQCB2b2lkIFJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6OmNvbXB1dGVMb2dp
CiAKIHZvaWQgUmVuZGVyU1ZHRm9yZWlnbk9iamVjdDo6bGF5b3V0KCkKIHsKKyAgICBTdGFja1N0
YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgQVNTRVJUKG5lZWRz
TGF5b3V0KCkpOwogICAgIEFTU0VSVCghdmlldygpLT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSk7IC8v
IFJlbmRlclNWR1Jvb3QgZGlzYWJsZXMgbGF5b3V0U3RhdGUgZm9yIHRoZSBTVkcgcmVuZGVyaW5n
IHRyZWUuCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3Jh
ZGllbnRTdG9wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAJKHJldmlzaW9uIDEzMTg1OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjQsNiArNjQsNyBAQCB2b2lkIFJlbmRlclNWR0dyYWRpZW50U3RvcDo6c3R5bGVE
aWRDaGFuCiAKIHZvaWQgUmVuZGVyU1ZHR3JhZGllbnRTdG9wOjpsYXlvdXQoKQogeworICAgIFN0
YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAgICBzZXROZWVk
c0xheW91dChmYWxzZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDEz
MTg1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29u
dGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBSZW5kZXJTVkdIaWRk
ZW5Db250YWluZXI6OlJlbmRlclNWR0hpZGRlCiAKIHZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFp
bmVyOjpsYXlvdXQoKQogeworICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0
Q2hlY2tQb2ludDsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAgICAgU1ZHUmVuZGVyU3Vw
cG9ydDo6bGF5b3V0Q2hpbGRyZW4odGhpcywgc2VsZk5lZWRzTGF5b3V0KCkpOyAKICAgICBzZXRO
ZWVkc0xheW91dChmYWxzZSk7ICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAJKHJldmlzaW9uIDEzMTg1OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OSw2ICs3OSw3IEBAIGJvb2wgUmVuZGVyU1ZHSW1hZ2U6OnVwZGF0ZUltYWdlVmlld3BvcnQK
IAogdm9pZCBSZW5kZXJTVkdJbWFnZTo6bGF5b3V0KCkKIHsKKyAgICBTdGFja1N0YXRzOjpMYXlv
dXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkp
OwogCiAgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50
RHVyaW5nTGF5b3V0KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRh
aW5lci5jcHAJKHJldmlzaW9uIDEzMTg1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2
ICs1NCw3IEBAIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjp+UmVuZGVyU1ZHUmUKIAogdm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6bGF5b3V0KCkKIHsKKyAgICBTdGFja1N0YXRz
OjpMYXlvdXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgLy8gSW52YWxpZGF0ZSBh
bGwgcmVzb3VyY2VzIGlmIG91ciBsYXlvdXQgY2hhbmdlZC4KICAgICBpZiAoZXZlckhhZExheW91
dCgpICYmIHNlbGZOZWVkc0xheW91dCgpKQogICAgICAgICBSZW5kZXJTVkdSb290OjphZGRSZXNv
dXJjZUZvckNsaWVudEludmFsaWRhdGlvbih0aGlzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwCShy
ZXZpc2lvbiAxMzE4NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlTWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBSZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlcjo6flJlbmRlclNWR1Jlc291CiAKIHZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXI6OmxheW91dCgpCiB7CisgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2lu
dCBsYXlvdXRDaGVja1BvaW50OwogICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNlcyBpZiBv
dXIgbGF5b3V0IGNoYW5nZWQuCiAgICAgaWYgKGV2ZXJIYWRMYXlvdXQoKSAmJiBzZWxmTmVlZHNM
YXlvdXQoKSkKICAgICAgICAgUmVuZGVyU1ZHUm9vdDo6YWRkUmVzb3VyY2VGb3JDbGllbnRJbnZh
bGlkYXRpb24odGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUm9vdC5jcHAJKHJldmlzaW9uIDEzMTg1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOCw2ICsy
MTgsNyBAQCBMYXlvdXRVbml0IFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVSZXBsYWNlCiAKIHZvaWQg
UmVuZGVyU1ZHUm9vdDo6bGF5b3V0KCkKIHsKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1Bv
aW50IGxheW91dENoZWNrUG9pbnQ7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwogCiAgICAg
bV9yZXNvdXJjZXNOZWVkaW5nVG9JbnZhbGlkYXRlQ2xpZW50cy5jbGVhcigpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAJKHJldmlz
aW9uIDEzMTg1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hh
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNiArMTQ0LDcgQEAgYm9vbCBSZW5kZXJTVkdT
aGFwZTo6c3Ryb2tlQ29udGFpbnMoY29ucwogCiB2b2lkIFJlbmRlclNWR1NoYXBlOjpsYXlvdXQo
KQogeworICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsK
ICAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJp
bmdMYXlvdXQoKSAmJiBzZWxmTmVlZHNMYXlvdXQoKSk7CiAgICAgU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudCo+KG5vZGUoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkocmV2aXNpb24gMTMxODU5KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ3
LDYgKzM0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVGb250SW5BbGxEZXNjZW4KIAog
dm9pZCBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKQogeworICAgIFN0YWNrU3RhdHM6OkxheW91dENo
ZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAg
ICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5n
TGF5b3V0KCkpOwogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2dsb2JhbC1yZWN1cnNpb24t
b24tZnVsbC1zdGFjay1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9qcy9nbG9iYWwtcmVjdXJzaW9uLW9uLWZ1bGwtc3RhY2stZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAxMzE4NTkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2dsb2JhbC1yZWN1cnNpb24tb24tZnVs
bC1zdGFjay1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzIEBACi1DT05T
T0xFIE1FU1NBR0U6IAorQ09OU09MRSBNRVNTQUdFOiBSYW5nZUVycm9yOiBNYXhpbXVtIGNhbGwg
c3RhY2sgc2l6ZSBleGNlZWRlZC4KIFRoaXMgdGVzdHMgZ2xvYmFsIGNvZGUgcmVjdXJzaW9uIHdo
ZW4gdGhlIEpTIHN0YWNrIGlzIGZ1bGwuCiBQQVNTOiBFbnRlcmluZyBnbG9iYWwgY29kZSB3aXRo
IGEgZnVsbCBKUyBzdGFjayBkaWQgbm90IGNyYXNoLCBhbmQgZGlkIG5vdCBhbGxvdyBjb250aW51
ZWQgcmVjdXJzaW9uLgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvY29u
c29sZS1yZXNvdXJjZS1lcnJvcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUtcmVzb3VyY2UtZXJyb3JzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMTMxODU5KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0
b3IvY29uc29sZS1yZXNvdXJjZS1lcnJvcnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC00LDUgKzQsNSBAQCBUZXN0cyB0aGF0IGVycm9ycyB0byBsb2FkIGEgcmVzb3VyY2UgY2F1CiBH
RVQgaHR0cDovLzEyNy4wLjAuMTo4MDAwL2luc3BlY3Rvci9taXNzaW5nLmNzcyA0MDQgKE5vdCBG
b3VuZCkgY29uc29sZS1yZXNvdXJjZS1lcnJvcnMtaWZyYW1lLmh0bWw6MyBjb25zb2xlLW1lc3Nh
Z2UgY29uc29sZS1lcnJvci1sZXZlbAogR0VUIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0
b3Ivbm9uLWV4aXN0ZW50LWlmcmFtZS5odG1sIDQwNCAoTm90IEZvdW5kKSBub24tZXhpc3RlbnQt
aWZyYW1lLmh0bWw6MSBjb25zb2xlLW1lc3NhZ2UgY29uc29sZS1lcnJvci1sZXZlbAogR0VUIGh0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3Ivbm9uLWV4aXN0ZW50LXNjcmlwdC5qcyA0MDQg
KE5vdCBGb3VuZCkgY29uc29sZS1yZXNvdXJjZS1lcnJvcnMtaWZyYW1lLmh0bWw6NCBjb25zb2xl
LW1lc3NhZ2UgY29uc29sZS1lcnJvci1sZXZlbAotR0VUIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9p
bnNwZWN0b3Ivbm9uLWV4aXN0ZW50LXhociA0MDQgKE5vdCBGb3VuZCkgW25hdGl2ZSBjb2RlXTox
c2VuZCBbbmF0aXZlIGNvZGVdOjFsb2FkWEhSIGNvbnNvbGUtcmVzb3VyY2UtZXJyb3JzLmh0bWw6
MThwZXJmb3JtQWN0aW9ucyBjb25zb2xlLXJlc291cmNlLWVycm9ycy5odG1sOjEwZXZhbCBjb2Rl
ZXZhbCBbbmF0aXZlIGNvZGVdOjFldmFsdWF0ZSBbbmF0aXZlIGNvZGVdOjFfZXZhbHVhdGVPbl9l
dmFsdWF0ZUFuZFdyYXBldmFsdWF0ZShhbm9ueW1vdXMgZnVuY3Rpb24pIFtuYXRpdmUgY29kZV06
MSBjb25zb2xlLW1lc3NhZ2UgY29uc29sZS1lcnJvci1sZXZlbAorR0VUIGh0dHA6Ly8xMjcuMC4w
LjE6ODAwMC9pbnNwZWN0b3Ivbm9uLWV4aXN0ZW50LXhociA0MDQgKE5vdCBGb3VuZCkgW25hdGl2
ZSBjb2RlXToxc2VuZCBbbmF0aXZlIGNvZGVdOjFsb2FkWEhSIGNvbnNvbGUtcmVzb3VyY2UtZXJy
b3JzLmh0bWw6MThwZXJmb3JtQWN0aW9ucyBjb25zb2xlLXJlc291cmNlLWVycm9ycy5odG1sOjEw
ZXZhbCBjb2RlZXZhbCBbbmF0aXZlIGNvZGVdOjFldmFsdWF0ZSBbbmF0aXZlIGNvZGVdOjFfZXZh
bHVhdGVPbl9ldmFsdWF0ZUFuZFdyYXBldmFsdWF0ZSBjb25zb2xlLW1lc3NhZ2UgY29uc29sZS1l
cnJvci1sZXZlbAogCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9jc3At
aW5qZWN0ZWQtY29udGVudC13YXJuaW5nLWNvbnRhaW5zLXN0YWNrdHJhY2UtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2NzcC1pbmpl
Y3RlZC1jb250ZW50LXdhcm5pbmctY29udGFpbnMtc3RhY2t0cmFjZS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDEzMTg1OSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2NzcC1p
bmplY3RlZC1jb250ZW50LXdhcm5pbmctY29udGFpbnMtc3RhY2t0cmFjZS1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTE0LDUgKzE0LDQgQEAgU3RhY2sgVHJhY2U6CiAgICAgNCkgKGlu
dGVybmFsIHNjcmlwdCkgLyBfZXZhbHVhdGVPbiAvIChsaW5lIG51bWJlcikgLyAoY29sdW1uIG51
bWJlcikKICAgICA1KSAoaW50ZXJuYWwgc2NyaXB0KSAvIF9ldmFsdWF0ZUFuZFdyYXAgLyAobGlu
ZSBudW1iZXIpIC8gKGNvbHVtbiBudW1iZXIpCiAgICAgNikgKGludGVybmFsIHNjcmlwdCkgLyBl
dmFsdWF0ZSAvIChsaW5lIG51bWJlcikgLyAoY29sdW1uIG51bWJlcikKLSAgICA3KSBbbmF0aXZl
IGNvZGVdIC8gIC8gMCAvIDAKIApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0
b3IvY3NwLWlubGluZS13YXJuaW5nLWNvbnRhaW5zLXN0YWNrdHJhY2UtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2NzcC1pbmxpbmUt
d2FybmluZy1jb250YWlucy1zdGFja3RyYWNlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTMxODU5
KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvY3NwLWlubGluZS13YXJuaW5n
LWNvbnRhaW5zLXN0YWNrdHJhY2UtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNCw1
ICsxNCw0IEBAIFN0YWNrIFRyYWNlOgogICAgIDUpIChpbnRlcm5hbCBzY3JpcHQpIC8gX2V2YWx1
YXRlT24gLyAobGluZSBudW1iZXIpIC8gKGNvbHVtbiBudW1iZXIpCiAgICAgNikgKGludGVybmFs
IHNjcmlwdCkgLyBfZXZhbHVhdGVBbmRXcmFwIC8gKGxpbmUgbnVtYmVyKSAvIChjb2x1bW4gbnVt
YmVyKQogICAgIDcpIChpbnRlcm5hbCBzY3JpcHQpIC8gZXZhbHVhdGUgLyAobGluZSBudW1iZXIp
IC8gKGNvbHVtbiBudW1iZXIpCi0gICAgOCkgW25hdGl2ZSBjb2RlXSAvICAvIDAgLyAwCiAK
</data>
<flag name="commit-queue"
          id="182935"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170034</attachid>
            <date>2012-10-22 17:29:15 -0700</date>
            <delta_ts>2012-10-22 21:25:00 -0700</delta_ts>
            <desc>Fix.</desc>
            <filename>bug-98928.patch</filename>
            <type>text/plain</type>
            <size>61196</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMyMTYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBA
CisyMDEyLTEwLTIyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBN
YWtlIHRvcENhbGxGcmFtZSByZWxpYWJsZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk4OTI4LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIC0gVk0gZW50cnkgcG9pbnRzIGFuZCB0aGUgR0Mgbm93IHVzZXMg
dG9wQ2FsbEZyYW1lLgorICAgICAgICAtIFRoZSBjYWxsZXJGcmFtZSB2YWx1ZSBpbiBDYWxsRnJh
bWVzIGFyZSBub3cgYWx3YXlzIHRoZSBwcmV2aW91cworICAgICAgICAgIGZyYW1lIG9uIHRoZSBz
dGFjaywgZXhjZXB0IGZvciB0aGUgZmlyc3QgZnJhbWUgd2hpY2ggaGFzIGEKKyAgICAgICAgICBj
YWxsZXJGcmFtZSBvZiAwIChub3QgY291bnRpbmcgdGhlIEhvc3RDYWxsRnJhbWVGbGFnKS4KKyAg
ICAgICAgICBIZW5jZSwgd2UgY2FuIG5vdyB0cmF2ZXJzZSBldmVyeSBmcmFtZSBvbiB0aGUgc3Rh
Y2sgYWxsIHRoZSB3YXkKKyAgICAgICAgICBiYWNrIHRvIHRoZSBmaXJzdCBmcmFtZS4KKyAgICAg
ICAgLSBHbG9iYWxFeGVjJ3Mgd2lsbCBubyBsb25nZXIgYmUgdXNlZCBhcyB0aGUgY2FsbGVyRnJh
bWUgdmFsdWVzIGluCisgICAgICAgICAgY2FsbCBmcmFtZXMuCisgICAgICAgIC0gQWRkZWQgZmVu
Y2VzIGFuZCB0cmFwcyBmb3IgZGVidWdnaW5nIHRoZSBKU1N0YWNrIGluIGRlYnVnIGJ1aWxkcy4K
KworICAgICAgICAqIGJ5dGVjb2RlL1NhbXBsaW5nVG9vbC5oOgorICAgICAgICAoU2FtcGxpbmdU
b29sKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkOjpDYWxsUmVjb3Jk
KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIC0gRml4ZWQgMiBE
RkcgaGVscGVyIGZ1bmN0aW9ucyB0byBmbHVzaCB0b3BDYWxsRnJhbWUgYXMgZXhwZWN0ZWQuCisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnByZXBhcmVGb3JFeHRlcm5hbENhbGwpOgorICAgICAgICAqIGludGVycHJl
dGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmNhbGxlckZyYW1lTm9G
bGFncyk6CisgICAgICAgIChFeGVjU3RhdGUpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmFy
Z0luZGV4Rm9yUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmdldEFyZ3VtZW50
VW5zYWZlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWVDbG9zdXJlLmg6CisgICAg
ICAgIChDYWxsRnJhbWVDbG9zdXJlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpldmFsKToKKyAgICAgICAgKEpT
Qzo6SW50ZXJwcmV0ZXI6OkludGVycHJldGVyKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OnRocm93RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwpOgorICAgICAgICAoSlNDOjpJ
bnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
OjpwcmVwYXJlRm9yUmVwZWF0Q2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjplbmRS
ZXBlYXRDYWxsKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKEludGVycHJldGVyKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9K
U1N0YWNrLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6SlNTdGFjayk6CisgICAgICAgIChK
U0M6OkpTU3RhY2s6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKEpTQzo6SlNT
dGFjazo6ZGlzYWJsZUVycm9yU3RhY2tSZXNlcnZlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9K
U1N0YWNrLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNTdGFjayk6CisgICAgICAgIChK
U0M6OkpTU3RhY2s6Omluc3RhbGxGZW5jZSk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OnZhbGlk
YXRlRmVuY2UpOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjppbnN0YWxsVHJhcHNBZnRlckZyYW1l
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9KU1N0YWNrSW5saW5lcy5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OmdldFRvcE9mRnJhbWUpOgorICAgICAg
ICAoSlNDOjpKU1N0YWNrOjpnZXRUb3BPZlN0YWNrKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6
Z2V0U3RhcnRPZkZyYW1lKToKKyAgICAgICAgKEpTQzo6SlNTdGFjazo6cHVzaEZyYW1lKToKKyAg
ICAgICAgKEpTQzo6SlNTdGFjazo6cG9wRnJhbWUpOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjpn
ZW5lcmF0ZUZlbmNlVmFsdWUpOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjppbnN0YWxsRmVuY2Up
OgorICAgICAgICAoSlNDOjpKU1N0YWNrOjp2YWxpZGF0ZUZlbmNlKToKKyAgICAgICAgKEpTQzo6
SlNTdGFjazo6aW5zdGFsbFRyYXBzQWZ0ZXJGcmFtZSk6CisgICAgICAgICogaml0L0pJVFN0dWJz
LmNwcDoKKyAgICAgICAgKEpTQzo6aml0Q29tcGlsZUZvcik6CisgICAgICAgIChKU0M6OmxhenlM
aW5rRm9yKToKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAq
IHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpK
U0dsb2JhbERhdGEpOgorCiAyMDEyLTEwLTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CiAKICAgICAgICAgREZHOjpBcnJheTo6VW5kZWNpZGVkIHNob3VsZCBiZSBjYWxsZWQgREZH
OjpBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAkocmV2aXNpb24gMTMyMTYyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzAsMTcgKzIzMCwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBTYW1wbGlu
Z1Rvb2wgewogICAgIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIHN0cnVjdCBDYWxsUmVjb3JkOwot
ICAgICAgICBmcmllbmQgY2xhc3MgSG9zdENhbGxSZWNvcmQ7CiAgICAgICAgIAogI2lmIEVOQUJM
RShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGNsYXNzIENhbGxSZWNvcmQgewogICAgICAgICAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FsbFJlY29yZCk7CiAgICAgICAgIHB1YmxpYzoKLSAg
ICAgICAgICAgIENhbGxSZWNvcmQoU2FtcGxpbmdUb29sKiBzYW1wbGluZ1Rvb2wpCisgICAgICAg
ICAgICBDYWxsUmVjb3JkKFNhbXBsaW5nVG9vbCogc2FtcGxpbmdUb29sLCBib29sIGlzSG9zdENh
bGwgPSBmYWxzZSkKICAgICAgICAgICAgICAgICA6IG1fc2FtcGxpbmdUb29sKHNhbXBsaW5nVG9v
bCkKICAgICAgICAgICAgICAgICAsIG1fc2F2ZWRTYW1wbGUoc2FtcGxpbmdUb29sLT5tX3NhbXBs
ZSkKICAgICAgICAgICAgICAgICAsIG1fc2F2ZWRDb2RlQmxvY2soc2FtcGxpbmdUb29sLT5tX2Nv
ZGVCbG9jaykKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNIb3N0Y2FsbCkK
KyAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmdUb29sLT5tX3NhbXBsZSB8PSAweDE7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIH5DYWxsUmVjb3JkKCkKQEAgLTI1NCwzMiArMjU1LDE1
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaW50cHRyX3QgbV9zYXZlZFNhbXBsZTsK
ICAgICAgICAgICAgIENvZGVCbG9jayogbV9zYXZlZENvZGVCbG9jazsKICAgICAgICAgfTsKLSAg
ICAgICAgCi0gICAgICAgIGNsYXNzIEhvc3RDYWxsUmVjb3JkIDogcHVibGljIENhbGxSZWNvcmQg
ewotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBIb3N0Q2FsbFJlY29yZChTYW1wbGluZ1Rv
b2wqIHNhbXBsaW5nVG9vbCkKLSAgICAgICAgICAgICAgICA6IENhbGxSZWNvcmQoc2FtcGxpbmdU
b29sKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNhbXBsaW5nVG9vbC0+bV9zYW1w
bGUgfD0gMHgxOwotICAgICAgICAgICAgfQotICAgICAgICB9OwogI2Vsc2UKICAgICAgICAgY2xh
c3MgQ2FsbFJlY29yZCB7CiAgICAgICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDYWxsUmVj
b3JkKTsKICAgICAgICAgcHVibGljOgotICAgICAgICAgICAgQ2FsbFJlY29yZChTYW1wbGluZ1Rv
b2wqKQorICAgICAgICAgICAgQ2FsbFJlY29yZChTYW1wbGluZ1Rvb2wqLCBib29sID0gZmFsc2Up
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07Ci0KLSAgICAgICAgY2xh
c3MgSG9zdENhbGxSZWNvcmQgOiBwdWJsaWMgQ2FsbFJlY29yZCB7Ci0gICAgICAgIHB1YmxpYzoK
LSAgICAgICAgICAgIEhvc3RDYWxsUmVjb3JkKFNhbXBsaW5nVG9vbCogc2FtcGxpbmdUb29sKQot
ICAgICAgICAgICAgICAgIDogQ2FsbFJlY29yZChzYW1wbGluZ1Rvb2wpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0jZW5kaWYgICAgICAgIAorI2VuZGlmCiAKICAg
ICAgICAgU2FtcGxpbmdUb29sKEludGVycHJldGVyKiBpbnRlcnByZXRlcikKICAgICAgICAgICAg
IDogbV9pbnRlcnByZXRlcihpbnRlcnByZXRlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTMyMTYyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2
NSwyMCArMTE2NSwyNCBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQWN0
CiAKIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBcmd1bWVudHMoRXhlY1N0
YXRlKiBleGVjKQogeworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2Jh
bERhdGEoKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBl
eGVjKTsKICAgICAvLyBOQjogVGhpcyBuZWVkcyB0byBiZSBleGNlZWRpbmdseSBjYXJlZnVsIHdp
dGggdG9wIGNhbGwgZnJhbWUgdHJhY2tpbmcsIHNpbmNlIGl0CiAgICAgLy8gbWF5IGJlIGNhbGxl
ZCBmcm9tIE9TUiBleGl0LCB3aGlsZSB0aGUgc3RhdGUgb2YgdGhlIGNhbGwgc3RhY2sgaXMgYml6
YXJyZS4KLSAgICBBcmd1bWVudHMqIHJlc3VsdCA9IEFyZ3VtZW50czo6Y3JlYXRlKGV4ZWMtPmds
b2JhbERhdGEoKSwgZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0
aW9uKTsKKyAgICBBcmd1bWVudHMqIHJlc3VsdCA9IEFyZ3VtZW50czo6Y3JlYXRlKGdsb2JhbERh
dGEsIGV4ZWMpOworICAgIEFTU0VSVCghZ2xvYmFsRGF0YS5leGNlcHRpb24pOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVJbmxp
bmVkQXJndW1lbnRzKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUpCiB7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEs
IGV4ZWMpOwogICAgIC8vIE5COiBUaGlzIG5lZWRzIHRvIGJlIGV4Y2VlZGluZ2x5IGNhcmVmdWwg
d2l0aCB0b3AgY2FsbCBmcmFtZSB0cmFja2luZywgc2luY2UgaXQKICAgICAvLyBtYXkgYmUgY2Fs
bGVkIGZyb20gT1NSIGV4aXQsIHdoaWxlIHRoZSBzdGF0ZSBvZiB0aGUgY2FsbCBzdGFjayBpcyBi
aXphcnJlLgotICAgIEFyZ3VtZW50cyogcmVzdWx0ID0gQXJndW1lbnRzOjpjcmVhdGUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBleGVjLCBpbmxpbmVDYWxsRnJhbWUpOwotICAgIEFTU0VSVCghZXhlYy0+
Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbik7CisgICAgQXJndW1lbnRzKiByZXN1bHQgPSBBcmd1bWVu
dHM6OmNyZWF0ZShnbG9iYWxEYXRhLCBleGVjLCBpbmxpbmVDYWxsRnJhbWUpOworICAgIEFTU0VS
VCghZ2xvYmFsRGF0YS5leGNlcHRpb24pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlz
aW9uIDEzMjE2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTkyNSw2ICsxOTI1LDE1IEBAIHB1YmxpYzoKICNpZiAh
ZGVmaW5lZChOREVCVUcpICYmICFDUFUoQVJNKQogICAgIHZvaWQgcHJlcGFyZUZvckV4dGVybmFs
Q2FsbCgpCiAgICAgeworICAgICAgICAvLyBXZSdyZSBhYm91dCB0byBjYWxsIG91dCB0byBhICJu
YXRpdmUiIGhlbHBlciBmdW5jdGlvbi4gVGhlIGhlbHBlcgorICAgICAgICAvLyBmdW5jdGlvbiBp
cyBleHBlY3RlZCB0byBzZXQgdG9wQ2FsbEZyYW1lIGl0c2VsZiB3aXRoIHRoZSBFeGVjU3RhdGUK
KyAgICAgICAgLy8gdGhhdCBpcyBwYXNzZWQgdG8gaXQuCisgICAgICAgIC8vCisgICAgICAgIC8v
IFdlIGV4cGxpY2l0bHkgdHJhc2ggdG9wQ2FsbEZyYW1lIGhlcmUgc28gdGhhdCB3ZSdsbCBrbm93
IGlmIHNvbWUgb2YKKyAgICAgICAgLy8gdGhlIGhlbHBlciBmdW5jdGlvbnMgYXJlIG5vdCBzZXR0
aW5nIHRvcENhbGxGcmFtZSB3aGVuIHRoZXkgc2hvdWxkCisgICAgICAgIC8vIGJlIGRvaW5nIHNv
LiBOb3RlOiB0aGUgcHJldmlvdXMgdmFsdWUgaW4gdG9wY2FsbEZyYW1lIHdhcyBub3QgdmFsaWQK
KyAgICAgICAgLy8gYW55d2F5IHNpbmNlIGl0IHdhcyBub3QgYmVpbmcgdXBkYXRlZCBieSBKSVQn
ZWQgY29kZSBieSBkZXNpZ24uCisKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emVvZih2b2lkKikgLyA0OyBpKyspCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJ
bW0zMigweGJhZGJlZWYpLCByZWludGVycHJldF9jYXN0PGNoYXIqPigmbV9qaXQuZ2xvYmFsRGF0
YSgpLT50b3BDYWxsRnJhbWUpICsgaSAqIDQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDEzMjE2MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjU2LDYgKzI1Niw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgCiAgICAg
ICAgIENvZGVCbG9jayogc29tZUNvZGVCbG9ja0ZvclBvc3NpYmx5SW5saW5lZENvZGUoKSB7IHJl
dHVybiBjb2RlQmxvY2soKTsgfQogI2VuZGlmCisgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJh
bWVOb0ZsYWdzKCkgeyByZXR1cm4gY2FsbGVyRnJhbWUoKS0+cmVtb3ZlSG9zdENhbGxGcmFtZUZs
YWcoKTsgfQogICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGdldCB0aGUgdHJ1ZSBj
YWxsIGZyYW1lIChhY2NvdW50ZWQgZm9yIGlubGluaW5nIGFuZCBhbnkKICAgICAgICAgLy8gb3Ro
ZXIgb3B0aW1pemF0aW9ucyksIHdoZW4geW91IGhhdmUgZW50ZXJlZCBpbnRvIFZNIGNvZGUgdGhy
b3VnaCBvbmUKQEAgLTI4MSw2ICsyODIsMzYgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBF
eGVjU3RhdGUoKTsKICAgICAgICAgfkV4ZWNTdGF0ZSgpOwogCisgICAgICAgIC8vIFRoZSBmb2xs
b3dpbmcgYXJlIGZvciBpbnRlcm5hbCB1c2UgaW4gZGVidWdnaW5nIGFuZCB2ZXJpZmljYXRpb24K
KyAgICAgICAgLy8gY29kZSBvbmx5IGFuZCBub3QgbWVhbnQgYXMgYW4gQVBJIGZvciBnZW5lcmFs
IHVzYWdlOgorCisgICAgICAgIHNpemVfdCBhcmdJbmRleEZvclJlZ2lzdGVyKFJlZ2lzdGVyKiBy
ZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSByZWdpc3RlciBhdCAnb2Zmc2V0JyBu
dW1iZXIgb2Ygc2xvdHMgZnJvbSB0aGUgZnJhbWUgcG9pbnRlcgorICAgICAgICAgICAgLy8gaS5l
LgorICAgICAgICAgICAgLy8gICAgICAgcmVnID0gZnJhbWVbb2Zmc2V0XTsKKyAgICAgICAgICAg
IC8vICAgPT0+IHJlZyA9IGZyYW1lICsgb2Zmc2V0OworICAgICAgICAgICAgLy8gICA9PT4gb2Zm
c2V0ID0gcmVnIC0gZnJhbWU7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gcmVnIC0gdGhpcy0+
cmVnaXN0ZXJzKCk7CisKKyAgICAgICAgICAgIC8vIFRoZSBvZmZzZXQgaXMgZGVmaW5lZCAoYmFz
ZWQgb24gYXJndW1lbnRPZmZzZXQoKSkgdG8gYmU6CisgICAgICAgICAgICAvLyAgICAgICBvZmZz
ZXQgPSBzX2ZpcnN0QXJndW1lbnRPZmZzZXQgLSBhcmdJbmRleDsKKyAgICAgICAgICAgIC8vIEhl
bmNlOgorICAgICAgICAgICAgLy8gICAgICAgYXJnSW5kZXggPSBzX2ZpcnN0QXJndW1lbnRPZmZz
ZXQgLSBvZmZzZXQ7CisgICAgICAgICAgICBzaXplX3QgYXJnSW5kZXggPSBzX2ZpcnN0QXJndW1l
bnRPZmZzZXQgLSBvZmZzZXQ7CisgICAgICAgICAgICByZXR1cm4gYXJnSW5kZXg7CisgICAgICAg
IH0KKworICAgICAgICBKU1ZhbHVlIGdldEFyZ3VtZW50VW5zYWZlKHNpemVfdCBhcmdJbmRleCkK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gVXNlciBiZXdhcmUhIFRoaXMgbWV0aG9kIGRvZXMg
bm90IHZlcmlmeSB0aGF0IHRoZXJlIGlzIGEgdmFsaWQKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50
IGF0IHRoZSBzcGVjaWZpZWQgYXJnSW5kZXguIFRoaXMgaXMgdXNlZCBmb3IgZGVidWdnaW5nCisg
ICAgICAgICAgICAvLyBhbmQgdmVyaWZpY2F0aW9uIGNvZGUgb25seS4gVGhlIGNhbGxlciBpcyBl
eHBlY3RlZCB0byBrbm93IHdoYXQKKyAgICAgICAgICAgIC8vIGhlL3NoZSBpcyBkb2luZyB3aGVu
IGNhbGxpbmcgdGhpcyBtZXRob2QuCisgICAgICAgICAgICByZXR1cm4gdGhpc1thcmd1bWVudE9m
ZnNldChhcmdJbmRleCldLmpzVmFsdWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZyaWVuZCBj
bGFzcyBKU1N0YWNrOwogICAgICAgICBmcmllbmQgY2xhc3MgVk1JbnNwZWN0b3I7CiAgICAgfTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUNsb3N1
cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lQ2xvc3VyZS5oCShyZXZpc2lvbiAxMzIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lQ2xvc3VyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3
ICszNCw2IEBAIHN0cnVjdCBDYWxsRnJhbWVDbG9zdXJlIHsKICAgICBKU0Z1bmN0aW9uKiBmdW5j
dGlvbjsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZTsKICAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGE7Ci0gICAgUmVnaXN0ZXIqIG9sZEVuZDsKICAgICBKU1Nj
b3BlKiBzY29wZTsKICAgICBpbnQgcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOwogICAgIGlu
dCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTMyMTYyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIkpTTmFtZVNjb3BlLmgiCiAj
aW5jbHVkZSAiSlNOb3RBbk9iamVjdC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJKU1N0YWNrSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgi
CiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRlICJMTEludENMb29wLmgiCkBAIC0y
MDcsMzMgKzIwOCw2IEBAIHN0YXRpYyBpbnQgZGVwdGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEoK
ICAgICByZXR1cm4gc2MtPmxvY2FsRGVwdGgoKTsKIH0KIAotQUxXQVlTX0lOTElORSBDYWxsRnJh
bWUqIEludGVycHJldGVyOjpzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChDb2RlQmxvY2sqIG5l
d0NvZGVCbG9jaywgSlNTdGFjayogc3RhY2ssIENhbGxGcmFtZSogY2FsbEZyYW1lLCBzaXplX3Qg
cmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKLXsKLSAgICAv
LyBUaGlzIGVuc3VyZXMgZW5vdWdoIHNwYWNlIGZvciB0aGUgd29yc3QgY2FzZSBzY2VuYXJpbyBv
ZiB6ZXJvIGFyZ3VtZW50cyBwYXNzZWQgYnkgdGhlIGNhbGxlci4KLSAgICBpZiAoIXN0YWNrLT5n
cm93KGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldCArIG5ld0NvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpICsgbmV3Q29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycykp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID49IG5ld0NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB7Ci0gICAgICAgIFJlZ2lzdGVyKiBu
ZXdDYWxsRnJhbWUgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgcmVnaXN0ZXJPZmZzZXQ7Ci0g
ICAgICAgIHJldHVybiBDYWxsRnJhbWU6OmNyZWF0ZShuZXdDYWxsRnJhbWUpOwotICAgIH0KLQot
ICAgIC8vIFRvbyBmZXcgYXJndW1lbnRzIC0tIGNvcHkgYXJndW1lbnRzLCB0aGVuIGZpbGwgaW4g
bWlzc2luZyBhcmd1bWVudHMgd2l0aCB1bmRlZmluZWQuCi0gICAgc2l6ZV90IGRlbHRhID0gbmV3
Q29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgLSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsK
LSAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKGNhbGxGcmFt
ZS0+cmVnaXN0ZXJzKCkgKyByZWdpc3Rlck9mZnNldCArIGRlbHRhKTsKLQotICAgIFJlZ2lzdGVy
KiBkc3QgPSAmbmV3Q2FsbEZyYW1lLT51bmNoZWNrZWRSKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50
T2Zmc2V0KCkpOwotICAgIFJlZ2lzdGVyKiBlbmQgPSBkc3QgLSBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpczsKLSAgICBmb3IgKCA7IGRzdCAhPSBlbmQ7IC0tZHN0KQotICAgICAgICAqZHN0ID0g
Kihkc3QgLSBkZWx0YSk7Ci0KLSAgICBlbmQgLT0gZGVsdGE7Ci0gICAgZm9yICggOyBkc3QgIT0g
ZW5kOyAtLWRzdCkKLSAgICAgICAgKmRzdCA9IGpzVW5kZWZpbmVkKCk7Ci0KLSAgICByZXR1cm4g
bmV3Q2FsbEZyYW1lOwotfQotCiBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
CiAgICAgaWYgKCFjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSkKQEAgLTI4Miw3ICsyNTYsNyBA
QCBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBjYWxsZXJGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgQVNTRVJUKGlzVmFsaWRUaGlzT2Jq
ZWN0KHRoaXNWYWx1ZSwgY2FsbEZyYW1lKSk7CiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVy
ID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuaW50ZXJwcmV0ZXI7Ci0gICAgcmV0dXJuIGludGVy
cHJldGVyLT5leGVjdXRlKGV2YWwsIGNhbGxGcmFtZSwgdGhpc1ZhbHVlLCBjYWxsZXJTY29wZUNo
YWluLCBjYWxsRnJhbWUtPnJlZ2lzdGVycygpIC0gaW50ZXJwcmV0ZXItPnN0YWNrKCkuYmVnaW4o
KSArIDEgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplKTsKKyAgICByZXR1cm4gaW50ZXJw
cmV0ZXItPmV4ZWN1dGUoZXZhbCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUsIGNhbGxlclNjb3BlQ2hh
aW4pOwogfQogCiBDYWxsRnJhbWUqIGxvYWRWYXJhcmdzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBK
U1N0YWNrKiBzdGFjaywgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgYXJndW1lbnRzLCBpbnQg
Zmlyc3RGcmVlUmVnaXN0ZXIpCkBAIC0zNjMsOCArMzM3LDkgQEAgQ2FsbEZyYW1lKiBsb2FkVmFy
YXJncyhDYWxsRnJhbWUqIGNhbGxGcgogICAgIHJldHVybiBuZXdDYWxsRnJhbWU7CiB9CiAKLUlu
dGVycHJldGVyOjpJbnRlcnByZXRlcigpCitJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQogICAgIDogbV9zYW1wbGVFbnRyeURlcHRoKDApCisgICAgLCBt
X3N0YWNrKGdsb2JhbERhdGEpCiAgICAgLCBtX2Vycm9ySGFuZGxpbmdNb2RlUmVlbnRyeSgwKQog
I2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCkBAIC03OTks
MjYgKzc3NCwxMyBAQCBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp0CiAg
ICAgICAgIGlmICghdW53aW5kQ2FsbEZyYW1lKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIGJ5
dGVjb2RlT2Zmc2V0LCBjb2RlQmxvY2spKSB7CiAgICAgICAgICAgICBpZiAoUHJvZmlsZXIqIHBy
b2ZpbGVyID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAg
ICAgICAgICAgICAgcHJvZmlsZXItPmV4Y2VwdGlvblVud2luZChjYWxsRnJhbWUpOwotICAgICAg
ICAgICAgY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkudG9wQ2FsbEZyYW1lID0gY2FsbEZyYW1lOwog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9Ci0gICAgY2FsbEZyYW1lLT5n
bG9iYWxEYXRhKCkudG9wQ2FsbEZyYW1lID0gY2FsbEZyYW1lOwogCiAgICAgaWYgKFByb2ZpbGVy
KiBwcm9maWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQog
ICAgICAgICBwcm9maWxlci0+ZXhjZXB0aW9uVW53aW5kKGNhbGxGcmFtZSk7CiAKLSAgICAvLyBT
aHJpbmsgdGhlIEpTIHN0YWNrLCBpbiBjYXNlIHN0YWNrIG92ZXJmbG93IG1hZGUgaXQgaHVnZS4K
LSAgICBSZWdpc3RlciogaGlnaFdhdGVyTWFyayA9IDA7Ci0gICAgZm9yIChDYWxsRnJhbWUqIGNh
bGxlckZyYW1lID0gY2FsbEZyYW1lOyBjYWxsZXJGcmFtZTsgY2FsbGVyRnJhbWUgPSBjYWxsZXJG
cmFtZS0+Y2FsbGVyRnJhbWUoKS0+cmVtb3ZlSG9zdENhbGxGcmFtZUZsYWcoKSkgewotICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICAg
ICAgaWYgKCFjb2RlQmxvY2spCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUmVnaXN0
ZXIqIGNhbGxlckhpZ2hXYXRlck1hcmsgPSBjYWxsZXJGcmFtZS0+cmVnaXN0ZXJzKCkgKyBjb2Rl
QmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwotICAgICAgICBoaWdoV2F0ZXJNYXJrID0gbWF4
KGhpZ2hXYXRlck1hcmssIGNhbGxlckhpZ2hXYXRlck1hcmspOwotICAgIH0KLSAgICBtX3N0YWNr
LnNocmluayhoaWdoV2F0ZXJNYXJrKTsKLQogICAgIC8vIFVud2luZCB0aGUgc2NvcGUgY2hhaW4g
d2l0aGluIHRoZSBleGNlcHRpb24gaGFuZGxlcidzIGNhbGwgZnJhbWUuCiAgICAgSlNTY29wZSog
c2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7CiAgICAgaW50IHNjb3BlRGVsdGEgPSAwOwpAQCAt
ODY1LDEwICs4MjcsMTIgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtRXhl
YwogICAgIFNhbXBsaW5nU2NvcGUgc2FtcGxpbmdTY29wZSh0aGlzKTsKICAgICAKICAgICBKU1Nj
b3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKKyAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSAqc2NvcGUtPmdsb2JhbERhdGEoKTsKKwogICAgIEFTU0VSVChpc1ZhbGlkVGhpc09i
amVjdCh0aGlzT2JqLCBjYWxsRnJhbWUpKTsKLSAgICBBU1NFUlQoIXNjb3BlLT5nbG9iYWxEYXRh
KCktPmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5pc0Nv
bGxlY3RvckJ1c3koKSk7Ci0gICAgaWYgKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmlzQ29sbGVj
dG9yQnVzeSgpKQorICAgIEFTU0VSVCghZ2xvYmFsRGF0YS5leGNlcHRpb24pOworICAgIEFTU0VS
VCghZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1c3koKSk7CisgICAgaWYgKGdsb2JhbERhdGEuaXND
b2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIENSQVNIKCk7CiAKICAgICBTdGFja1N0YXRzOjpDaGVj
a1BvaW50IHN0YWNrQ2hlY2tQb2ludDsKQEAgLTg4MCw3ICs4NDQsNyBAQCBKU1ZhbHVlIEludGVy
cHJldGVyOjpleGVjdXRlKFByb2dyYW1FeGVjCiAgICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhlICJw
cm9ncmFtIiBpcyBhY3R1YWxseSBqdXN0IGEgSlNPTiBvYmplY3QuIElmIHNvLAogICAgIC8vIHdl
J2xsIGhhbmRsZSB0aGUgSlNPTiBvYmplY3QgaGVyZS4gRWxzZSwgd2UnbGwgaGFuZGxlIHJlYWwg
SlMgY29kZQogICAgIC8vIGJlbG93IGF0IGZhaWxlZEpTT05QLgotICAgIER5bmFtaWNHbG9iYWxP
YmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZSgqc2NvcGUtPmdsb2JhbERhdGEoKSwgc2NvcGUt
Pmdsb2JhbE9iamVjdCgpKTsKKyAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2Jq
ZWN0U2NvcGUoZ2xvYmFsRGF0YSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpKTsKICAgICBWZWN0b3I8
SlNPTlBEYXRhPiBKU09OUERhdGE7CiAgICAgYm9vbCBwYXJzZVJlc3VsdDsKICAgICBjb25zdCBT
dHJpbmcgcHJvZ3JhbVNvdXJjZSA9IHByb2dyYW0tPnNvdXJjZSgpLnRvU3RyaW5nKCk7CkBAIC05
ODksMjAgKzk1MywxNiBAQCBmYWlsZWRKU09OUDoKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1
cm4odGhyb3dFcnJvcihjYWxsRnJhbWUsIGVycm9yKSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSAmcHJvZ3JhbS0+Z2VuZXJhdGVkQnl0ZWNvZGUoKTsKIAotICAgIC8vIFJlc2VydmUgc3Rh
Y2sgc3BhY2UgZm9yIHRoaXMgaW52b2NhdGlvbjoKLSAgICBSZWdpc3Rlciogb2xkRW5kID0gbV9z
dGFjay5lbmQoKTsKLSAgICBSZWdpc3RlciogbmV3RW5kID0gb2xkRW5kICsgY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCkgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgY29kZUJsb2Nr
LT5tX251bUNhbGxlZVJlZ2lzdGVyczsKLSAgICBpZiAoIW1fc3RhY2suZ3JvdyhuZXdFbmQpKQot
ICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxs
RnJhbWUpKTsKLQogICAgIC8vIFB1c2ggdGhlIGNhbGwgZnJhbWUgZm9yIHRoaXMgaW52b2NhdGlv
bjoKLSAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKG9sZEVu
ZCArIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID09IDEpOyAvLyAx
IHBhcmFtZXRlciBmb3IgJ3RoaXMnLgotICAgIG5ld0NhbGxGcmFtZS0+aW5pdChjb2RlQmxvY2ss
IDAsIHNjb3BlLCBDYWxsRnJhbWU6Om5vQ2FsbGVyKCksIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpLCAwKTsKKyAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IG1fc3RhY2sucHVzaEZyYW1l
KGNhbGxGcmFtZSwgY29kZUJsb2NrLCBzY29wZSwgMSwgMCk7CisgICAgaWYgKFVOTElLRUxZKCFu
ZXdDYWxsRnJhbWUpKQorICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3Zl
cmZsb3dFcnJvcihjYWxsRnJhbWUpKTsKKworICAgIC8vIFNldCB0aGUgYXJndW1lbnRzIGZvciB0
aGUgY2FsbGVlOgogICAgIG5ld0NhbGxGcmFtZS0+c2V0VGhpc1ZhbHVlKHRoaXNPYmopOwotICAg
IFRvcENhbGxGcmFtZVNldHRlciB0b3BDYWxsRnJhbWUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCks
IG5ld0NhbGxGcmFtZSk7CiAKLSAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCkuZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgaWYgKFByb2ZpbGVyKiBwcm9m
aWxlciA9IGdsb2JhbERhdGEuZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT53
aWxsRXhlY3V0ZShjYWxsRnJhbWUsIHByb2dyYW0tPnNvdXJjZVVSTCgpLCBwcm9ncmFtLT5saW5l
Tm8oKSk7CiAKICAgICAvLyBFeGVjdXRlIHRoZSBjb2RlOgpAQCAtMTAxMywyNCArOTczLDI1IEBA
IGZhaWxlZEpTT05QOgogI2lmIEVOQUJMRShMTElOVF9DX0xPT1ApCiAgICAgICAgIHJlc3VsdCA9
IExMSW50OjpDTG9vcDo6ZXhlY3V0ZShuZXdDYWxsRnJhbWUsIGxsaW50X3Byb2dyYW1fcHJvbG9n
dWUpOwogI2VsaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgcmVzdWx0ID0gcHJvZ3JhbS0+Z2VuZXJh
dGVkSklUQ29kZSgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgc2NvcGUtPmdsb2Jh
bERhdGEoKSk7CisgICAgICAgIHJlc3VsdCA9IHByb2dyYW0tPmdlbmVyYXRlZEpJVENvZGUoKS5l
eGVjdXRlKCZtX3N0YWNrLCBuZXdDYWxsRnJhbWUsICZnbG9iYWxEYXRhKTsKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQogICAgIH0KIAotICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoUHJvZmlsZXIqIHBy
b2ZpbGVyID0gZ2xvYmFsRGF0YS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXIt
PmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBwcm9ncmFtLT5zb3VyY2VVUkwoKSwgcHJvZ3JhbS0+bGlu
ZU5vKCkpOwogCi0gICAgbV9zdGFjay5zaHJpbmsob2xkRW5kKTsKKyAgICBtX3N0YWNrLnBvcEZy
YW1lKG5ld0NhbGxGcmFtZSk7CiAKICAgICByZXR1cm4gY2hlY2tlZFJldHVybihyZXN1bHQpOwog
fQogCiBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSlNPYmplY3QqIGZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEm
IGNhbGxEYXRhLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKKyAg
ICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsKICAg
ICBBU1NFUlQoaXNWYWxpZFRoaXNPYmplY3QodGhpc1ZhbHVlLCBjYWxsRnJhbWUpKTsKICAgICBB
U1NFUlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpOwotICAgIEFTU0VSVCghY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCkuaXNDb2xsZWN0b3JCdXN5KCkpOwotICAgIGlmIChjYWxsRnJhbWUtPmds
b2JhbERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSkKKyAgICBBU1NFUlQoIWdsb2JhbERhdGEuaXND
b2xsZWN0b3JCdXN5KCkpOworICAgIGlmIChnbG9iYWxEYXRhLmlzQ29sbGVjdG9yQnVzeSgpKQog
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICAgICBTdGFja1N0YXRzOjpDaGVja1BvaW50IHN0
YWNrQ2hlY2tQb2ludDsKQEAgLTEwMzksOTMgKzEwMDAsNzIgQEAgSlNWYWx1ZSBJbnRlcnByZXRl
cjo6ZXhlY3V0ZUNhbGwoQ2FsbEZyYQogICAgIGlmICghbmF0aXZlU3RhY2suaXNTYWZlVG9SZWN1
cnNlKHBvbGljeS5yZXF1aXJlZENhcGFjaXR5KCkpKQogICAgICAgICByZXR1cm4gY2hlY2tlZFJl
dHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpKTsKIAotICAgIFJlZ2lzdGVy
KiBvbGRFbmQgPSBtX3N0YWNrLmVuZCgpOwotICAgIEFTU0VSVChjYWxsRnJhbWUtPmZyYW1lRXh0
ZW50KCkgPD0gb2xkRW5kIHx8IGNhbGxGcmFtZSA9PSBjYWxsRnJhbWUtPnNjb3BlKCktPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpOwotICAgIGludCBhcmdDb3VudCA9IDEgKyBhcmdzLnNp
emUoKTsgLy8gaW1wbGljaXQgInRoaXMiIHBhcmFtZXRlcgotICAgIHNpemVfdCByZWdpc3Rlck9m
ZnNldCA9IGFyZ0NvdW50ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLQotICAgIENh
bGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUob2xkRW5kICsgcmVnaXN0
ZXJPZmZzZXQpOwotICAgIGlmICghbV9zdGFjay5ncm93KG5ld0NhbGxGcmFtZS0+cmVnaXN0ZXJz
KCkpKQotICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJv
cihjYWxsRnJhbWUpKTsKLQotICAgIG5ld0NhbGxGcmFtZS0+c2V0VGhpc1ZhbHVlKHRoaXNWYWx1
ZSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQotICAgICAg
ICBuZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGFyZ3MuYXQoaSkpOwotCi0gICAgaWYgKGNh
bGxUeXBlID09IENhbGxUeXBlSlMpIHsKLSAgICAgICAgSlNTY29wZSogY2FsbERhdGFTY29wZSA9
IGNhbGxEYXRhLmpzLnNjb3BlOworICAgIGJvb2wgaXNKU0NhbGwgPSAoY2FsbFR5cGUgPT0gQ2Fs
bFR5cGVKUyk7CisgICAgSlNTY29wZSogc2NvcGU7CisgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxv
Y2s7CisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IDEgKyBhcmdzLnNpemUoKTsgLy8gaW1wbGljaXQg
InRoaXMiIHBhcmFtZXRlcgogCi0gICAgICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9i
YWxPYmplY3RTY29wZSgqY2FsbERhdGFTY29wZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRGF0YVNjb3Bl
LT5nbG9iYWxPYmplY3QoKSk7CisgICAgaWYgKGlzSlNDYWxsKQorICAgICAgICBzY29wZSA9IGNh
bGxEYXRhLmpzLnNjb3BlOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoY2FsbFR5cGUgPT0g
Q2FsbFR5cGVIb3N0KTsKKyAgICAgICAgc2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7CisgICAg
fQorICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZShnbG9iYWxE
YXRhLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkpOwogCi0gICAgICAgIEpTT2JqZWN0KiBjb21waWxl
RXJyb3IgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3JDYWxsKGNh
bGxGcmFtZSwgY2FsbERhdGFTY29wZSk7CisgICAgaWYgKGlzSlNDYWxsKSB7CisgICAgICAgIC8v
IENvbXBpbGUgdGhlIGNhbGxlZToKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVFcnJvciA9IGNh
bGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvckNhbGwoY2FsbEZyYW1lLCBz
Y29wZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghIWNvbXBpbGVFcnJvcikpIHsKLSAgICAgICAg
ICAgIG1fc3RhY2suc2hyaW5rKG9sZEVuZCk7CiAgICAgICAgICAgICByZXR1cm4gY2hlY2tlZFJl
dHVybih0aHJvd0Vycm9yKGNhbGxGcmFtZSwgY29tcGlsZUVycm9yKSk7CiAgICAgICAgIH0KKyAg
ICAgICAgbmV3Q29kZUJsb2NrID0gJmNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2Vu
ZXJhdGVkQnl0ZWNvZGVGb3JDYWxsKCk7CisgICAgICAgIEFTU0VSVCghIW5ld0NvZGVCbG9jayk7
CisgICAgfSBlbHNlCisgICAgICAgIG5ld0NvZGVCbG9jayA9IDA7CiAKLSAgICAgICAgQ29kZUJs
b2NrKiBuZXdDb2RlQmxvY2sgPSAmY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5l
cmF0ZWRCeXRlY29kZUZvckNhbGwoKTsKLSAgICAgICAgbmV3Q2FsbEZyYW1lID0gc2xpZGVSZWdp
c3RlcldpbmRvd0ZvckNhbGwobmV3Q29kZUJsb2NrLCAmbV9zdGFjaywgbmV3Q2FsbEZyYW1lLCAw
LCBhcmdDb3VudCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghbmV3Q2FsbEZyYW1lKSkgewotICAg
ICAgICAgICAgbV9zdGFjay5zaHJpbmsob2xkRW5kKTsKLSAgICAgICAgICAgIHJldHVybiBjaGVj
a2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0KG5ld0NvZGVCbG9jaywgMCwgY2FsbERhdGFT
Y29wZSwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1lRmxhZygpLCBhcmdDb3VudCwgZnVuY3Rp
b24pOworICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gbV9zdGFjay5wdXNoRnJhbWUoY2Fs
bEZyYW1lLCBuZXdDb2RlQmxvY2ssIHNjb3BlLCBhcmdzQ291bnQsIGZ1bmN0aW9uKTsKKyAgICBp
ZiAoVU5MSUtFTFkoIW5ld0NhbGxGcmFtZSkpCisgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJu
KHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwogCi0gICAgICAgIFRvcENhbGxG
cmFtZVNldHRlciB0b3BDYWxsRnJhbWUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG5ld0NhbGxG
cmFtZSk7CisgICAgLy8gU2V0IHRoZSBhcmd1bWVudHMgZm9yIHRoZSBjYWxsZWU6CisgICAgbmV3
Q2FsbEZyYW1lLT5zZXRUaGlzVmFsdWUodGhpc1ZhbHVlKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIG5ld0NhbGxGcmFtZS0+c2V0QXJndW1l
bnQoaSwgYXJncy5hdChpKSk7CiAKLSAgICAgICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9IGNh
bGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQotICAgICAgICAgICAgcHJv
ZmlsZXItPndpbGxFeGVjdXRlKGNhbGxGcmFtZSwgZnVuY3Rpb24pOworICAgIGlmIChQcm9maWxl
ciogcHJvZmlsZXIgPSBnbG9iYWxEYXRhLmVuYWJsZWRQcm9maWxlcigpKQorICAgICAgICBwcm9m
aWxlci0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7CiAKLSAgICAgICAgSlNWYWx1
ZSByZXN1bHQ7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFNhbXBsaW5nVG9vbDo6Q2FsbFJlY29y
ZCBjYWxsUmVjb3JkKG1fc2FtcGxlci5nZXQoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQ7CisgICAg
eworICAgICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIu
Z2V0KCksICFpc0pTQ2FsbCk7CiAKKyAgICAgICAgLy8gRXhlY3V0ZSB0aGUgY29kZToKKyAgICAg
ICAgaWYgKGlzSlNDYWxsKSB7CiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAgICAgICAg
IHJlc3VsdCA9IExMSW50OjpDTG9vcDo6ZXhlY3V0ZShuZXdDYWxsRnJhbWUsIGxsaW50X2Z1bmN0
aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKTsKICNlbGlmIEVOQUJMRShKSVQpCi0gICAgICAgICAgICBy
ZXN1bHQgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVG
b3JDYWxsKCkuZXhlY3V0ZSgmbV9zdGFjaywgbmV3Q2FsbEZyYW1lLCBjYWxsRGF0YVNjb3BlLT5n
bG9iYWxEYXRhKCkpOworICAgICAgICAgICAgcmVzdWx0ID0gY2FsbERhdGEuanMuZnVuY3Rpb25F
eGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5l
d0NhbGxGcmFtZSwgJmdsb2JhbERhdGEpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0gICAgICAg
IH0KLQotICAgICAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCkuZW5hYmxlZFByb2ZpbGVyKCkpCi0gICAgICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0
ZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsKLQotICAgICAgICBtX3N0YWNrLnNocmluayhvbGRFbmQp
OwotICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybihyZXN1bHQpOwotICAgIH0KLQotICAgIEFT
U0VSVChjYWxsVHlwZSA9PSBDYWxsVHlwZUhvc3QpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gY2Fs
bEZyYW1lLT5zY29wZSgpOwotICAgIG5ld0NhbGxGcmFtZS0+aW5pdCgwLCAwLCBzY29wZSwgY2Fs
bEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1lRmxhZygpLCBhcmdDb3VudCwgZnVuY3Rpb24pOwotCi0g
ICAgVG9wQ2FsbEZyYW1lU2V0dGVyIHRvcENhbGxGcmFtZShjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KSwgbmV3Q2FsbEZyYW1lKTsKLQotICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxP
YmplY3RTY29wZSgqc2NvcGUtPmdsb2JhbERhdGEoKSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpKTsK
LQotICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5l
bmFibGVkUHJvZmlsZXIoKSkKLSAgICAgICAgcHJvZmlsZXItPndpbGxFeGVjdXRlKGNhbGxGcmFt
ZSwgZnVuY3Rpb24pOwotCi0gICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgewotICAgICAgICBTYW1w
bGluZ1Rvb2w6Okhvc3RDYWxsUmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVyLmdldCgpKTsKLSAg
ICAgICAgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihu
ZXdDYWxsRnJhbWUpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBKU1Zh
bHVlOjpkZWNvZGUoY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKG5ld0NhbGxGcmFtZSkpOwogICAg
IH0KIAotICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KS5lbmFibGVkUHJvZmlsZXIoKSkKKyAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gZ2xvYmFs
RGF0YS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUoY2Fs
bEZyYW1lLCBmdW5jdGlvbik7CiAKLSAgICBtX3N0YWNrLnNocmluayhvbGRFbmQpOworICAgIG1f
c3RhY2sucG9wRnJhbWUobmV3Q2FsbEZyYW1lKTsKICAgICByZXR1cm4gY2hlY2tlZFJldHVybihy
ZXN1bHQpOwogfQogCiBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgQ29uc3RydWN0VHlwZSBj
b25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogeworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpOwogICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7
Ci0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSk7
CisgICAgQVNTRVJUKCFnbG9iYWxEYXRhLmlzQ29sbGVjdG9yQnVzeSgpKTsKICAgICAvLyBXZSB0
aHJvdyBpbiB0aGlzIGNhc2UgYmVjYXVzZSB3ZSBoYXZlIHRvIHJldHVybiBzb21ldGhpbmcgInZh
bGlkIiBidXQgd2UncmUKICAgICAvLyBhbHJlYWR5IGluIGFuIGludmFsaWQgc3RhdGUuCi0gICAg
aWYgKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmlzQ29sbGVjdG9yQnVzeSgpKQorICAgIGlmIChn
bG9iYWxEYXRhLmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVy
bih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpKTsKIAogICAgIFN0YWNrU3RhdHM6
OkNoZWNrUG9pbnQgc3RhY2tDaGVja1BvaW50OwpAQCAtMTEzNCw4NSArMTA3NCw2NCBAQCBKU09i
amVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoCiAgICAgaWYgKCFuYXRpdmVTdGFj
ay5pc1NhZmVUb1JlY3Vyc2UocG9saWN5LnJlcXVpcmVkQ2FwYWNpdHkoKSkpCiAgICAgICAgIHJl
dHVybiBjaGVja2VkUmV0dXJuKHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSkpOwog
Ci0gICAgUmVnaXN0ZXIqIG9sZEVuZCA9IG1fc3RhY2suZW5kKCk7Ci0gICAgaW50IGFyZ0NvdW50
ID0gMSArIGFyZ3Muc2l6ZSgpOyAvLyBpbXBsaWNpdCAidGhpcyIgcGFyYW1ldGVyCi0gICAgc2l6
ZV90IHJlZ2lzdGVyT2Zmc2V0ID0gYXJnQ291bnQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJT
aXplOwotCi0gICAgaWYgKCFtX3N0YWNrLmdyb3cob2xkRW5kICsgcmVnaXN0ZXJPZmZzZXQpKQot
ICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxs
RnJhbWUpKTsKLQotICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVh
dGUob2xkRW5kICsgcmVnaXN0ZXJPZmZzZXQpOwotICAgIG5ld0NhbGxGcmFtZS0+c2V0VGhpc1Zh
bHVlKGpzVW5kZWZpbmVkKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJncy5zaXpl
KCk7ICsraSkKLSAgICAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCBhcmdzLmF0KGkp
KTsKKyAgICBib29sIGlzSlNDb25zdHJ1Y3QgPSAoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RU
eXBlSlMpOworICAgIEpTU2NvcGUqIHNjb3BlOworICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2Nr
OworICAgIHNpemVfdCBhcmdzQ291bnQgPSAxICsgYXJncy5zaXplKCk7IC8vIGltcGxpY2l0ICJ0
aGlzIiBwYXJhbWV0ZXIKIAotICAgIGlmIChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVK
UykgewotICAgICAgICBKU1Njb3BlKiBjb25zdHJ1Y3REYXRhU2NvcGUgPSBjb25zdHJ1Y3REYXRh
LmpzLnNjb3BlOworICAgIGlmIChpc0pTQ29uc3RydWN0KQorICAgICAgICBzY29wZSA9IGNvbnN0
cnVjdERhdGEuanMuc2NvcGU7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChjb25zdHJ1Y3RU
eXBlID09IENvbnN0cnVjdFR5cGVIb3N0KTsKKyAgICAgICAgc2NvcGUgPSBjYWxsRnJhbWUtPnNj
b3BlKCk7CisgICAgfQogCi0gICAgICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxP
YmplY3RTY29wZSgqY29uc3RydWN0RGF0YVNjb3BlLT5nbG9iYWxEYXRhKCksIGNvbnN0cnVjdERh
dGFTY29wZS0+Z2xvYmFsT2JqZWN0KCkpOworICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBn
bG9iYWxPYmplY3RTY29wZShnbG9iYWxEYXRhLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkpOwogCi0g
ICAgICAgIEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9u
RXhlY3V0YWJsZS0+Y29tcGlsZUZvckNvbnN0cnVjdChjYWxsRnJhbWUsIGNvbnN0cnVjdERhdGFT
Y29wZSk7CisgICAgaWYgKGlzSlNDb25zdHJ1Y3QpIHsKKyAgICAgICAgLy8gQ29tcGlsZSB0aGUg
Y2FsbGVlOgorICAgICAgICBKU09iamVjdCogY29tcGlsZUVycm9yID0gY29uc3RydWN0RGF0YS5q
cy5mdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3JDb25zdHJ1Y3QoY2FsbEZyYW1lLCBzY29w
ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghIWNvbXBpbGVFcnJvcikpIHsKLSAgICAgICAgICAg
IG1fc3RhY2suc2hyaW5rKG9sZEVuZCk7CiAgICAgICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVy
bih0aHJvd0Vycm9yKGNhbGxGcmFtZSwgY29tcGlsZUVycm9yKSk7CiAgICAgICAgIH0KKyAgICAg
ICAgbmV3Q29kZUJsb2NrID0gJmNvbnN0cnVjdERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5n
ZW5lcmF0ZWRCeXRlY29kZUZvckNvbnN0cnVjdCgpOworICAgICAgICBBU1NFUlQoISFuZXdDb2Rl
QmxvY2spOworICAgIH0gZWxzZQorICAgICAgICBuZXdDb2RlQmxvY2sgPSAwOwogCi0gICAgICAg
IENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0gJmNvbnN0cnVjdERhdGEuanMuZnVuY3Rpb25FeGVj
dXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29kZUZvckNvbnN0cnVjdCgpOwotICAgICAgICBuZXdDYWxs
RnJhbWUgPSBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChuZXdDb2RlQmxvY2ssICZtX3N0YWNr
LCBuZXdDYWxsRnJhbWUsIDAsIGFyZ0NvdW50KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFuZXdD
YWxsRnJhbWUpKSB7Ci0gICAgICAgICAgICBtX3N0YWNrLnNocmluayhvbGRFbmQpOwotICAgICAg
ICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZy
YW1lKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBuZXdDYWxsRnJhbWUtPmluaXQobmV3Q29kZUJs
b2NrLCAwLCBjb25zdHJ1Y3REYXRhU2NvcGUsIGNhbGxGcmFtZS0+YWRkSG9zdENhbGxGcmFtZUZs
YWcoKSwgYXJnQ291bnQsIGNvbnN0cnVjdG9yKTsKKyAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFt
ZSA9IG1fc3RhY2sucHVzaEZyYW1lKGNhbGxGcmFtZSwgbmV3Q29kZUJsb2NrLCBzY29wZSwgYXJn
c0NvdW50LCBjb25zdHJ1Y3Rvcik7CisgICAgaWYgKFVOTElLRUxZKCFuZXdDYWxsRnJhbWUpKQor
ICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxs
RnJhbWUpKTsKIAotICAgICAgICBUb3BDYWxsRnJhbWVTZXR0ZXIgdG9wQ2FsbEZyYW1lKGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLCBuZXdDYWxsRnJhbWUpOworICAgIC8vIFNldCB0aGUgYXJndW1l
bnRzIGZvciB0aGUgY2FsbGVlOgorICAgIG5ld0NhbGxGcmFtZS0+c2V0VGhpc1ZhbHVlKGpzVW5k
ZWZpbmVkKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkK
KyAgICAgICAgbmV3Q2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCBhcmdzLmF0KGkpKTsKIAotICAg
ICAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZW5h
YmxlZFByb2ZpbGVyKCkpCi0gICAgICAgICAgICBwcm9maWxlci0+d2lsbEV4ZWN1dGUoY2FsbEZy
YW1lLCBjb25zdHJ1Y3Rvcik7CisgICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9IGdsb2JhbERh
dGEuZW5hYmxlZFByb2ZpbGVyKCkpCisgICAgICAgIHByb2ZpbGVyLT53aWxsRXhlY3V0ZShjYWxs
RnJhbWUsIGNvbnN0cnVjdG9yKTsKIAotICAgICAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICAgICAg
ewotICAgICAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxSZWNvcmQobV9zYW1w
bGVyLmdldCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdDsKKyAgICB7CisgICAgICAgIFNhbXBsaW5n
VG9vbDo6Q2FsbFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxlci5nZXQoKSwgIWlzSlNDb25zdHJ1
Y3QpOwogCisgICAgICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGUuCisgICAgICAgIGlmIChpc0pTQ29u
c3RydWN0KSB7CiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAgICAgICAgIHJlc3VsdCA9
IExMSW50OjpDTG9vcDo6ZXhlY3V0ZShuZXdDYWxsRnJhbWUsIGxsaW50X2Z1bmN0aW9uX2Zvcl9j
b25zdHJ1Y3RfcHJvbG9ndWUpOwogI2VsaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgICAgIHJlc3Vs
dCA9IGNvbnN0cnVjdERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2Rl
Rm9yQ29uc3RydWN0KCkuZXhlY3V0ZSgmbV9zdGFjaywgbmV3Q2FsbEZyYW1lLCBjb25zdHJ1Y3RE
YXRhU2NvcGUtPmdsb2JhbERhdGEoKSk7CisgICAgICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3RE
YXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgp
LmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgJmdsb2JhbERhdGEpOwogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXN1bHQgPSBKU1Zh
bHVlOjpkZWNvZGUoY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24obmV3Q2FsbEZyYW1lKSk7
CiAgICAgICAgIH0KLQotICAgICAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCkuZW5hYmxlZFByb2ZpbGVyKCkpCi0gICAgICAgICAgICBwcm9maWxlci0+
ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGNvbnN0cnVjdG9yKTsKLQotICAgICAgICBtX3N0YWNrLnNo
cmluayhvbGRFbmQpOwotICAgICAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKLSAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBBU1NFUlQocmVzdWx0LmlzT2JqZWN0KCkpOwot
ICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybihhc09iamVjdChyZXN1bHQpKTsKICAgICB9CiAK
LSAgICBBU1NFUlQoY29uc3RydWN0VHlwZSA9PSBDb25zdHJ1Y3RUeXBlSG9zdCk7Ci0gICAgSlNT
Y29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7Ci0gICAgbmV3Q2FsbEZyYW1lLT5pbml0
KDAsIDAsIHNjb3BlLCBjYWxsRnJhbWUtPmFkZEhvc3RDYWxsRnJhbWVGbGFnKCksIGFyZ0NvdW50
LCBjb25zdHJ1Y3Rvcik7Ci0KLSAgICBUb3BDYWxsRnJhbWVTZXR0ZXIgdG9wQ2FsbEZyYW1lKGNh
bGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBuZXdDYWxsRnJhbWUpOwotCi0gICAgRHluYW1pY0dsb2Jh
bE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKCpzY29wZS0+Z2xvYmFsRGF0YSgpLCBzY29w
ZS0+Z2xvYmFsT2JqZWN0KCkpOwotCi0gICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9IGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQotICAgICAgICBwcm9maWxlci0+
d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBjb25zdHJ1Y3Rvcik7Ci0KLSAgICBKU1ZhbHVlIHJlc3Vs
dDsKLSAgICB7Ci0gICAgICAgIFNhbXBsaW5nVG9vbDo6SG9zdENhbGxSZWNvcmQgY2FsbFJlY29y
ZChtX3NhbXBsZXIuZ2V0KCkpOwotICAgICAgICByZXN1bHQgPSBKU1ZhbHVlOjpkZWNvZGUoY29u
c3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24obmV3Q2FsbEZyYW1lKSk7Ci0gICAgfQotCi0gICAg
aWYgKFByb2ZpbGVyKiBwcm9maWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQ
cm9maWxlcigpKQorICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBnbG9iYWxEYXRhLmVuYWJs
ZWRQcm9maWxlcigpKQogICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGNv
bnN0cnVjdG9yKTsKIAotICAgIG1fc3RhY2suc2hyaW5rKG9sZEVuZCk7CisgICAgbV9zdGFjay5w
b3BGcmFtZShuZXdDYWxsRnJhbWUpOworCiAgICAgaWYgKGNhbGxGcmFtZS0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIEFTU0VSVChyZXN1bHQuaXNPYmplY3QoKSk7CkBA
IC0xMjIxLDkgKzExNDAsMTAgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpleGVjdXRlQ29uc3Ry
dWN0KAogCiBDYWxsRnJhbWVDbG9zdXJlIEludGVycHJldGVyOjpwcmVwYXJlRm9yUmVwZWF0Q2Fs
bChGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIEpTU2NvcGUqIHNjb3BlKQogewotICAgIEFTU0VSVCghc2NvcGUtPmdsb2JhbERhdGEoKS0+
ZXhjZXB0aW9uKTsKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSAqc2NvcGUtPmdsb2Jh
bERhdGEoKTsKKyAgICBBU1NFUlQoIWdsb2JhbERhdGEuZXhjZXB0aW9uKTsKICAgICAKLSAgICBp
ZiAoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuaXNDb2xsZWN0b3JCdXN5KCkpCisgICAgaWYgKGds
b2JhbERhdGEuaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIHJldHVybiBDYWxsRnJhbWVDbG9z
dXJlKCk7CiAKICAgICBTdGFja1N0YXRzOjpDaGVja1BvaW50IHN0YWNrQ2hlY2tQb2ludDsKQEAg
LTEyMzQsNTAgKzExNTQsNjAgQEAgQ2FsbEZyYW1lQ2xvc3VyZSBJbnRlcnByZXRlcjo6cHJlcGFy
ZUZvcgogICAgICAgICByZXR1cm4gQ2FsbEZyYW1lQ2xvc3VyZSgpOwogICAgIH0KIAotICAgIFJl
Z2lzdGVyKiBvbGRFbmQgPSBtX3N0YWNrLmVuZCgpOwotICAgIHNpemVfdCByZWdpc3Rlck9mZnNl
dCA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZTsKLQotICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUo
b2xkRW5kICsgcmVnaXN0ZXJPZmZzZXQpOwotICAgIGlmICghbV9zdGFjay5ncm93KG5ld0NhbGxG
cmFtZS0+cmVnaXN0ZXJzKCkpKSB7Ci0gICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNh
bGxGcmFtZSk7Ci0gICAgICAgIHJldHVybiBDYWxsRnJhbWVDbG9zdXJlKCk7Ci0gICAgfQotCisg
ICAgLy8gQ29tcGlsZSB0aGUgY2FsbGVlOgogICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9u
RXhlY3V0YWJsZS0+Y29tcGlsZUZvckNhbGwoY2FsbEZyYW1lLCBzY29wZSk7CiAgICAgaWYgKGVy
cm9yKSB7CiAgICAgICAgIHRocm93RXJyb3IoY2FsbEZyYW1lLCBlcnJvcik7Ci0gICAgICAgIG1f
c3RhY2suc2hyaW5rKG9sZEVuZCk7CiAgICAgICAgIHJldHVybiBDYWxsRnJhbWVDbG9zdXJlKCk7
CiAgICAgfQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gJmZ1bmN0aW9uRXhlY3V0YWJsZS0+
Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDYWxsKCk7CisgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sg
PSAmZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29kZUZvckNhbGwoKTsKKworICAg
IHNpemVfdCBhcmdzQ291bnQgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKworICAgIENh
bGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gbV9zdGFjay5wdXNoRnJhbWUoY2FsbEZyYW1lLCBuZXdD
b2RlQmxvY2ssIHNjb3BlLCBhcmdzQ291bnQsIGZ1bmN0aW9uKTsgIAorICAgIGlmIChVTkxJS0VM
WSghbmV3Q2FsbEZyYW1lKSkgeworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxs
RnJhbWUpOworICAgICAgICByZXR1cm4gQ2FsbEZyYW1lQ2xvc3VyZSgpOworICAgIH0KIAotICAg
IG5ld0NhbGxGcmFtZSA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKGNvZGVCbG9jaywgJm1f
c3RhY2ssIG5ld0NhbGxGcmFtZSwgMCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAg
IGlmIChVTkxJS0VMWSghbmV3Q2FsbEZyYW1lKSkgewogICAgICAgICB0aHJvd1N0YWNrT3ZlcmZs
b3dFcnJvcihjYWxsRnJhbWUpOwotICAgICAgICBtX3N0YWNrLnNocmluayhvbGRFbmQpOwogICAg
ICAgICByZXR1cm4gQ2FsbEZyYW1lQ2xvc3VyZSgpOwogICAgIH0KLSAgICBuZXdDYWxsRnJhbWUt
PmluaXQoY29kZUJsb2NrLCAwLCBzY29wZSwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1lRmxh
ZygpLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgZnVuY3Rpb24pOyAgCi0gICAgc2NvcGUt
Pmdsb2JhbERhdGEoKS0+dG9wQ2FsbEZyYW1lID0gbmV3Q2FsbEZyYW1lOwotICAgIENhbGxGcmFt
ZUNsb3N1cmUgcmVzdWx0ID0geyBjYWxsRnJhbWUsIG5ld0NhbGxGcmFtZSwgZnVuY3Rpb24sIGZ1
bmN0aW9uRXhlY3V0YWJsZSwgc2NvcGUtPmdsb2JhbERhdGEoKSwgb2xkRW5kLCBzY29wZSwgY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIH07CisK
KyAgICAvLyBSZXR1cm4gdGhlIHN1Y2Nlc3NmdWwgY2xvc3VyZToKKyAgICBDYWxsRnJhbWVDbG9z
dXJlIHJlc3VsdCA9IHsgY2FsbEZyYW1lLCBuZXdDYWxsRnJhbWUsIGZ1bmN0aW9uLCBmdW5jdGlv
bkV4ZWN1dGFibGUsICZnbG9iYWxEYXRhLCBzY29wZSwgbmV3Q29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCksIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIH07CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShDYWxsRnJhbWVDbG9zdXJlJiBjbG9z
dXJlKSAKIHsKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSAqY2xvc3VyZS5nbG9iYWxE
YXRhOwogICAgIFNhbXBsaW5nU2NvcGUgc2FtcGxpbmdTY29wZSh0aGlzKTsKICAgICAKLSAgICBB
U1NFUlQoIWNsb3N1cmUub2xkQ2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuaXNDb2xsZWN0b3JCdXN5
KCkpOwotICAgIGlmIChjbG9zdXJlLm9sZENhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmlzQ29sbGVj
dG9yQnVzeSgpKQorICAgIEFTU0VSVCghZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1c3koKSk7Cisg
ICAgaWYgKGdsb2JhbERhdGEuaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIHJldHVybiBqc051
bGwoKTsKIAogICAgIFN0YWNrU3RhdHM6OkNoZWNrUG9pbnQgc3RhY2tDaGVja1BvaW50OworICAg
IG1fc3RhY2sudmFsaWRhdGVGZW5jZShjbG9zdXJlLm5ld0NhbGxGcmFtZSwgIkJFRk9SRSIpOwog
ICAgIGNsb3N1cmUucmVzZXRDYWxsRnJhbWUoKTsKLSAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVy
ID0gY2xvc3VyZS5vbGRDYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmlsZXIoKSkK
KyAgICBtX3N0YWNrLnZhbGlkYXRlRmVuY2UoY2xvc3VyZS5uZXdDYWxsRnJhbWUsICJTVEVQIDEi
KTsKKworICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBnbG9iYWxEYXRhLmVuYWJsZWRQcm9m
aWxlcigpKQogICAgICAgICBwcm9maWxlci0+d2lsbEV4ZWN1dGUoY2xvc3VyZS5vbGRDYWxsRnJh
bWUsIGNsb3N1cmUuZnVuY3Rpb24pOwogCi0gICAgVG9wQ2FsbEZyYW1lU2V0dGVyIHRvcENhbGxG
cmFtZSgqY2xvc3VyZS5nbG9iYWxEYXRhLCBjbG9zdXJlLm5ld0NhbGxGcmFtZSk7CisgICAgLy8g
VGhlIGNvZGUgZXhlY3V0aW9uIGJlbG93IG1heSBwdXNoIG1vcmUgZnJhbWVzIGFuZCBwb2ludCB0
aGUgdG9wQ2FsbEZyYW1lCisgICAgLy8gdG8gdGhvc2UgbmV3ZXIgZnJhbWVzLCBvciBpdCBtYXkg
cG9wIHRvIHRoZSB0b3AgZnJhbWUgdG8gdGhlIGNhbGxlciBvZgorICAgIC8vIHRoZSBjdXJyZW50
IHJlcGVhdCBmcmFtZSwgb3IgaXQgbWF5IGxlYXZlIHRoZSB0b3AgZnJhbWUgcG9pbnRpbmcgdG8g
dGhlCisgICAgLy8gY3VycmVudCByZXBlYXQgZnJhbWUuCisgICAgLy8KKyAgICAvLyBIZW5jZSwg
d2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgdG9wQ2FsbEZyYW1lIGhlcmUgb3Vyc2VsdmVzIGJlZm9y
ZQorICAgIC8vIHJlcGVhdGluZyB0aGlzIGNhbGwgb24gYSBzZWNvbmQgY2FsbGJhY2sgZnVuY3Rp
b24uCisKKyAgICBUb3BDYWxsRnJhbWVTZXR0ZXIgdG9wQ2FsbEZyYW1lKGdsb2JhbERhdGEsIGNs
b3N1cmUubmV3Q2FsbEZyYW1lKTsKIAorICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGU6CiAgICAgSlNW
YWx1ZSByZXN1bHQ7CiAgICAgewogICAgICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxSZWNvcmQgY2Fs
bFJlY29yZChtX3NhbXBsZXIuZ2V0KCkpOwpAQCAtMTI4NSwzMiArMTIxNSwzNSBAQCBKU1ZhbHVl
IEludGVycHJldGVyOjpleGVjdXRlKENhbGxGcmFtZUNsCiAjaWYgRU5BQkxFKExMSU5UX0NfTE9P
UCkKICAgICAgICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKGNsb3N1cmUubmV3Q2Fs
bEZyYW1lLCBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSk7CiAjZWxpZiBFTkFCTEUo
SklUKQotICAgICAgICByZXN1bHQgPSBjbG9zdXJlLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJh
dGVkSklUQ29kZUZvckNhbGwoKS5leGVjdXRlKCZtX3N0YWNrLCBjbG9zdXJlLm5ld0NhbGxGcmFt
ZSwgY2xvc3VyZS5nbG9iYWxEYXRhKTsKKyAgICAgICAgcmVzdWx0ID0gY2xvc3VyZS5mdW5jdGlv
bkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkuZXhlY3V0ZSgmbV9zdGFjaywg
Y2xvc3VyZS5uZXdDYWxsRnJhbWUsICZnbG9iYWxEYXRhKTsKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQogICAgIH0KIAotICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBjbG9zdXJlLm9sZENhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQorICAgIGlmIChQcm9maWxlciog
cHJvZmlsZXIgPSBnbG9iYWxEYXRhLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9maWxl
ci0+ZGlkRXhlY3V0ZShjbG9zdXJlLm9sZENhbGxGcmFtZSwgY2xvc3VyZS5mdW5jdGlvbik7CisK
KyAgICBtX3N0YWNrLnZhbGlkYXRlRmVuY2UoY2xvc3VyZS5uZXdDYWxsRnJhbWUsICJBRlRFUiIp
OwogICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHJlc3VsdCk7CiB9CiAKIHZvaWQgSW50ZXJwcmV0
ZXI6OmVuZFJlcGVhdENhbGwoQ2FsbEZyYW1lQ2xvc3VyZSYgY2xvc3VyZSkKIHsKLSAgICBjbG9z
dXJlLmdsb2JhbERhdGEtPnRvcENhbGxGcmFtZSA9IGNsb3N1cmUub2xkQ2FsbEZyYW1lOwotICAg
IG1fc3RhY2suc2hyaW5rKGNsb3N1cmUub2xkRW5kKTsKKyAgICBtX3N0YWNrLnBvcEZyYW1lKGNs
b3N1cmUubmV3Q2FsbEZyYW1lKTsKIH0KIAotSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShF
dmFsRXhlY3V0YWJsZSogZXZhbCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBKU1Njb3BlKiBzY29wZSwgaW50IGdsb2JhbFJlZ2lzdGVyT2Zmc2V0KQorSlNWYWx1ZSBJ
bnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YWJsZSogZXZhbCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1Njb3BlKiBzY29wZSkKIHsKKyAgICBKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEgPSAqc2NvcGUtPmdsb2JhbERhdGEoKTsKICAgICBTYW1wbGluZ1Nj
b3BlIHNhbXBsaW5nU2NvcGUodGhpcyk7CiAgICAgCisgICAgQVNTRVJUKHNjb3BlLT5nbG9iYWxE
YXRhKCkgPT0gJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKICAgICBBU1NFUlQoaXNWYWxpZFRo
aXNPYmplY3QodGhpc1ZhbHVlLCBjYWxsRnJhbWUpKTsKLSAgICBBU1NFUlQoIXNjb3BlLT5nbG9i
YWxEYXRhKCktPmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KS5pc0NvbGxlY3RvckJ1c3koKSk7Ci0gICAgaWYgKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmlz
Q29sbGVjdG9yQnVzeSgpKQorICAgIEFTU0VSVCghZ2xvYmFsRGF0YS5leGNlcHRpb24pOworICAg
IEFTU0VSVCghZ2xvYmFsRGF0YS5pc0NvbGxlY3RvckJ1c3koKSk7CisgICAgaWYgKGdsb2JhbERh
dGEuaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIER5
bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZSgqc2NvcGUtPmdsb2JhbERh
dGEoKSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpKTsKKyAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2Nv
cGUgZ2xvYmFsT2JqZWN0U2NvcGUoZ2xvYmFsRGF0YSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpKTsK
IAogICAgIFN0YWNrU3RhdHM6OkNoZWNrUG9pbnQgc3RhY2tDaGVja1BvaW50OwogICAgIGNvbnN0
IFN0YWNrQm91bmRzJiBuYXRpdmVTdGFjayA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygpOwpAQCAt
MTMxOCw2ICsxMjUxLDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0
YQogICAgIGlmICghbmF0aXZlU3RhY2suaXNTYWZlVG9SZWN1cnNlKHBvbGljeS5yZXF1aXJlZENh
cGFjaXR5KCkpKQogICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZs
b3dFcnJvcihjYWxsRnJhbWUpKTsKIAorICAgIC8vIENvbXBpbGUgdGhlIGNhbGxlZToKICAgICBK
U09iamVjdCogY29tcGlsZUVycm9yID0gZXZhbC0+Y29tcGlsZShjYWxsRnJhbWUsIHNjb3BlKTsK
ICAgICBpZiAoVU5MSUtFTFkoISFjb21waWxlRXJyb3IpKQogICAgICAgICByZXR1cm4gY2hlY2tl
ZFJldHVybih0aHJvd0Vycm9yKGNhbGxGcmFtZSwgY29tcGlsZUVycm9yKSk7CkBAIC0xMzQwLDcg
KzEyNzQsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhCiAgICAg
ICAgICAgICB2YXJpYWJsZU9iamVjdCA9IHNjb3BlOwogICAgICAgICB9CiAgICAgICAgIC8vIFNj
b3BlIGZvciBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplcgotICAgICAgICBCYXRjaGVkVHJhbnNp
dGlvbk9wdGltaXplciBvcHRpbWl6ZXIoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHZhcmlhYmxl
T2JqZWN0KTsKKyAgICAgICAgQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIgb3B0aW1pemVyKGds
b2JhbERhdGEsIHZhcmlhYmxlT2JqZWN0KTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtVmFyaWFibGVzOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50ID0gY29kZUJsb2NrLT52YXJpYWJsZShpKTsKQEAgLTEzNTcsMjIgKzEyOTEsMTkgQEAg
SlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogICAgICAgICB9CiAgICAg
fQogCi0gICAgUmVnaXN0ZXIqIG9sZEVuZCA9IG1fc3RhY2suZW5kKCk7Ci0gICAgUmVnaXN0ZXIq
IG5ld0VuZCA9IG1fc3RhY2suYmVnaW4oKSArIGdsb2JhbFJlZ2lzdGVyT2Zmc2V0ICsgY29kZUJs
b2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKLSAgICBpZiAoIW1fc3RhY2suZ3JvdyhuZXdFbmQp
KQorICAgIC8vIFB1c2ggdGhlIGZyYW1lOgorICAgIEFTU0VSVChjb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSA9PSAxKTsgLy8gMSBwYXJhbWV0ZXIgZm9yICd0aGlzJy4KKyAgICBDYWxsRnJhbWUq
IG5ld0NhbGxGcmFtZSA9IG1fc3RhY2sucHVzaEZyYW1lKGNhbGxGcmFtZSwgY29kZUJsb2NrLCBz
Y29wZSwgMSwgMCk7CisgICAgaWYgKFVOTElLRUxZKCFuZXdDYWxsRnJhbWUpKQogICAgICAgICBy
ZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpKTsK
IAotICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUobV9zdGFj
ay5iZWdpbigpICsgZ2xvYmFsUmVnaXN0ZXJPZmZzZXQpOwotCi0gICAgQVNTRVJUKGNvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpID09IDEpOyAvLyAxIHBhcmFtZXRlciBmb3IgJ3RoaXMnLgotICAg
IG5ld0NhbGxGcmFtZS0+aW5pdChjb2RlQmxvY2ssIDAsIHNjb3BlLCBjYWxsRnJhbWUtPmFkZEhv
c3RDYWxsRnJhbWVGbGFnKCksIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCAwKTsKKyAgICAv
LyBTZXQgdGhlIGFyZ3VtZW50cyBmb3IgdGhlIGNhbGxlZToKICAgICBuZXdDYWxsRnJhbWUtPnNl
dFRoaXNWYWx1ZSh0aGlzVmFsdWUpOwogCi0gICAgVG9wQ2FsbEZyYW1lU2V0dGVyIHRvcENhbGxG
cmFtZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbmV3Q2FsbEZyYW1lKTsKLQotICAgIGlmIChQ
cm9maWxlciogcHJvZmlsZXIgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5lbmFibGVkUHJvZmls
ZXIoKSkKKyAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gZ2xvYmFsRGF0YS5lbmFibGVkUHJv
ZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXItPndpbGxFeGVjdXRlKGNhbGxGcmFtZSwgZXZhbC0+
c291cmNlVVJMKCksIGV2YWwtPmxpbmVObygpKTsKIAorICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGU6
CiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgewogICAgICAgICBTYW1wbGluZ1Rvb2w6OkNhbGxS
ZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIuZ2V0KCkpOwpAQCAtMTM4MCwxNCArMTMxMSwxNCBA
QCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhCiAjaWYgRU5BQkxFKExM
SU5UX0NfTE9PUCkKICAgICAgICAgcmVzdWx0ID0gTExJbnQ6OkNMb29wOjpleGVjdXRlKG5ld0Nh
bGxGcmFtZSwgbGxpbnRfZXZhbF9wcm9sb2d1ZSk7CiAjZWxpZiBFTkFCTEUoSklUKQotICAgICAg
ICByZXN1bHQgPSBldmFsLT5nZW5lcmF0ZWRKSVRDb2RlKCkuZXhlY3V0ZSgmbV9zdGFjaywgbmV3
Q2FsbEZyYW1lLCBzY29wZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgcmVzdWx0ID0gZXZhbC0+
Z2VuZXJhdGVkSklUQ29kZSgpLmV4ZWN1dGUoJm1fc3RhY2ssIG5ld0NhbGxGcmFtZSwgJmdsb2Jh
bERhdGEpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAgICAgfQogCi0gICAgaWYgKFByb2ZpbGVy
KiBwcm9maWxlciA9IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmVuYWJsZWRQcm9maWxlcigpKQor
ICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSBnbG9iYWxEYXRhLmVuYWJsZWRQcm9maWxlcigp
KQogICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGV2YWwtPnNvdXJjZVVS
TCgpLCBldmFsLT5saW5lTm8oKSk7CiAKLSAgICBtX3N0YWNrLnNocmluayhvbGRFbmQpOworICAg
IG1fc3RhY2sucG9wRnJhbWUobmV3Q2FsbEZyYW1lKTsKICAgICByZXR1cm4gY2hlY2tlZFJldHVy
bihyZXN1bHQpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTMyMTYyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYg
KzQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXZhbEV4ZWN1dGFibGU7CiAgICAg
Y2xhc3MgRXhlY3V0YWJsZUJhc2U7CiAgICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOworICAg
IGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKICAgICBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgY2xhc3MgUHJvZ3JhbUV4ZWN1dGFibGU7CkBA
IC0xODUsNyArMTg2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBJbnRlcnByZXRl
ciYgbV9pbnRlcnByZXRlcjsKICAgICAgICAgfTsKIAotICAgICAgICBJbnRlcnByZXRlcigpOwor
ICAgICAgICBJbnRlcnByZXRlcihKU0dsb2JhbERhdGEgJik7CiAgICAgICAgIH5JbnRlcnByZXRl
cigpOwogICAgICAgICAKICAgICAgICAgdm9pZCBpbml0aWFsaXplKGJvb2wgY2FuVXNlSklUKTsK
QEAgLTIxOSw3ICsyMjAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNWYWx1ZSBleGVj
dXRlQ2FsbChDYWxsRnJhbWUqLCBKU09iamVjdCogZnVuY3Rpb24sIENhbGxUeXBlLCBjb25zdCBD
YWxsRGF0YSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CiAgICAgICAgIEpT
T2JqZWN0KiBleGVjdXRlQ29uc3RydWN0KENhbGxGcmFtZSosIEpTT2JqZWN0KiBmdW5jdGlvbiwg
Q29uc3RydWN0VHlwZSwgY29uc3QgQ29uc3RydWN0RGF0YSYsIGNvbnN0IEFyZ0xpc3QmKTsKICAg
ICAgICAgSlNWYWx1ZSBleGVjdXRlKEV2YWxFeGVjdXRhYmxlKiwgQ2FsbEZyYW1lKiwgSlNWYWx1
ZSB0aGlzVmFsdWUsIEpTU2NvcGUqKTsKLSAgICAgICAgSlNWYWx1ZSBleGVjdXRlKEV2YWxFeGVj
dXRhYmxlKiwgQ2FsbEZyYW1lKiwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTU2NvcGUqLCBpbnQgZ2xv
YmFsUmVnaXN0ZXJPZmZzZXQpOwogCiAgICAgICAgIEpTVmFsdWUgcmV0cmlldmVBcmd1bWVudHNG
cm9tVk1Db2RlKENhbGxGcmFtZSosIEpTRnVuY3Rpb24qKSBjb25zdDsKICAgICAgICAgSlNWYWx1
ZSByZXRyaWV2ZUNhbGxlckZyb21WTUNvZGUoQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiopIGNvbnN0
OwpAQCAtMjYwLDggKzI2MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIE5FVkVSX0lO
TElORSBib29sIHVud2luZENhbGxGcmFtZShDYWxsRnJhbWUqJiwgSlNWYWx1ZSwgdW5zaWduZWQm
IGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqJik7CiAKLSAgICAgICAgc3RhdGljIEFMV0FZU19J
TkxJTkUgQ2FsbEZyYW1lKiBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChDb2RlQmxvY2sqLCBK
U1N0YWNrKiwgQ2FsbEZyYW1lKiwgc2l6ZV90IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJnYyk7Ci0K
ICAgICAgICAgc3RhdGljIENhbGxGcmFtZSogZmluZEZ1bmN0aW9uQ2FsbEZyYW1lRnJvbVZNQ29k
ZShDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKik7CiAKICAgICAgICAgdm9pZCBkdW1wUmVnaXN0ZXJz
KENhbGxGcmFtZSopOwpAQCAtMjkxLDExICsyODksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgcmV0dXJuICF0aGlzVmFsdWUuaXNPYmplY3QoKSB8fCB0aGlzVmFsdWUudG9UaGlzT2JqZWN0
KGV4ZWMpID09IHRoaXNWYWx1ZTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNWYWx1ZSBJbnRlcnBy
ZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YWJsZSogZXZhbCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1Njb3BlKiBzY29wZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBleGVjdXRlKGV2YWwsIGNhbGxGcmFtZSwgdGhpc1ZhbHVlLCBzY29wZSwgbV9zdGFjay5zaXpl
KCkgKyAxICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSk7Ci0gICAgfQotCiAgICAgSlNW
YWx1ZSBldmFsKENhbGxGcmFtZSopOwogICAgIENhbGxGcmFtZSogbG9hZFZhcmFyZ3MoQ2FsbEZy
YW1lKiwgSlNTdGFjayosIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgaW50
IGZpcnN0RnJlZVJlZ2lzdGVyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0pTU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9KU1N0YWNrLmNwcAkocmV2aXNpb24gMTMyMTYyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1N0YWNrLmgiCisj
aW5jbHVkZSAiSlNTdGFja0lubGluZXMuaCIKIAogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3Rz
LmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAgLTQyLDggKzQzLDkgQEAgc3RhdGljIE11
dGV4JiBzdGFja1N0YXRpc3RpY3NNdXRleCgpCiAgICAgcmV0dXJuIHN0YXRpY011dGV4OwogfSAg
ICAKIAotSlNTdGFjazo6SlNTdGFjayhzaXplX3QgY2FwYWNpdHkpCitKU1N0YWNrOjpKU1N0YWNr
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IGNhcGFjaXR5KQogICAgIDogbV9lbmQo
MCkKKyAgICAsIG1fdG9wQ2FsbEZyYW1lKGdsb2JhbERhdGEudG9wQ2FsbEZyYW1lKQogewogICAg
IEFTU0VSVChjYXBhY2l0eSAmJiBpc1BhZ2VBbGlnbmVkKGNhcGFjaXR5KSk7CiAKQEAgLTUyLDYg
KzU0LDggQEAgSlNTdGFjazo6SlNTdGFjayhzaXplX3QgY2FwYWNpdHkpCiAgICAgbV9jb21taXRF
bmQgPSBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsKIAogICAg
IGRpc2FibGVFcnJvclN0YWNrUmVzZXJ2ZSgpOworCisgICAgbV90b3BDYWxsRnJhbWUgPSAwOwog
fQogCiBKU1N0YWNrOjp+SlNTdGFjaygpCkBAIC04OSwxMiArOTMsMTIgQEAgYm9vbCBKU1N0YWNr
Ojpncm93U2xvd0Nhc2UoUmVnaXN0ZXIqIG5ldwogCiB2b2lkIEpTU3RhY2s6OmdhdGhlckNvbnNl
cnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKIHsKLSAg
ICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZW5kKCkpOworICAgIGNvbnNlcnZhdGl2
ZVJvb3RzLmFkZChiZWdpbigpLCBnZXRUb3BPZlN0YWNrKCkpOwogfQogCiB2b2lkIEpTU3RhY2s6
OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVS
b290cywgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcywgREZHQ29kZUJsb2NrcyYg
ZGZnQ29kZUJsb2NrcykKIHsKLSAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZW5k
KCksIGppdFN0dWJSb3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisgICAgY29uc2VydmF0aXZlUm9v
dHMuYWRkKGJlZ2luKCksIGdldFRvcE9mU3RhY2soKSwgaml0U3R1YlJvdXRpbmVzLCBkZmdDb2Rl
QmxvY2tzKTsKIH0KIAogdm9pZCBKU1N0YWNrOjpyZWxlYXNlRXhjZXNzQ2FwYWNpdHkoKQpAQCAt
MTM4LDggKzE0MiwxMCBAQCB2b2lkIEpTU3RhY2s6OmRpc2FibGVFcnJvclN0YWNrUmVzZXJ2ZSgp
CiAgICAgLy8gcGxhY2UuIFRoYXQgbWVhbnMgdGhlIHN0YWNrIHNwYWNlIGJleW9uZCBtX3VzZWFi
bGVFbmQgYmVmb3JlIHdlCiAgICAgLy8gZW5hYmxlZCB0aGUgcmVzZXJ2ZSB3YXMgbm90IHByZXZp
b3VzbHkgaW4gdXNlLiBIZW5jZSwgaXQgaXMgc2FmZSB0bwogICAgIC8vIHNocmluayBiYWNrIHRv
IHRoYXQgbV91c2VhYmxlRW5kLgotICAgIGlmIChtX2VuZCA+IG1fdXNlYWJsZUVuZCkKKyAgICBp
ZiAobV9lbmQgPiBtX3VzZWFibGVFbmQpIHsKKyAgICAgICAgQVNTRVJUKG1fdG9wQ2FsbEZyYW1l
LT5mcmFtZUV4dGVudCgpIDw9IG1fdXNlYWJsZUVuZCk7CiAgICAgICAgIHNocmluayhtX3VzZWFi
bGVFbmQpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmgJKHJldmlzaW9uIDEzMjE2MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDExICszNSwxNyBAQAogI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2YXRpb24uaD4K
ICNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+CiAKKyNpZiAhZGVmaW5lZChOREVCVUcpICYmICFkZWZp
bmVkKEVOQUJMRV9ERUJVR19KU1NUQUNLKQorI2RlZmluZSBFTkFCTEVfREVCVUdfSlNTVEFDSyAx
CisjZW5kaWYKKwogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBDb25zZXJ2YXRpdmVSb290
czsKICAgICBjbGFzcyBERkdDb2RlQmxvY2tzOworICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBj
bGFzcyBKSVRTdHViUm91dGluZVNldDsKKyAgICBjbGFzcyBKU0dsb2JhbERhdGE7CiAgICAgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgY2xhc3MgSlNTdGFjayB7CkBAIC02MSw3
ICs2Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBBbGxvdyA4ayBvZiBleGNlc3Mg
cmVnaXN0ZXJzIGJlZm9yZSB3ZSBzdGFydCB0cnlpbmcgdG8gcmVhcCB0aGUgc3RhY2sKICAgICAg
ICAgc3RhdGljIGNvbnN0IHB0cmRpZmZfdCBtYXhFeGNlc3NDYXBhY2l0eSA9IDggKiAxMDI0Owog
Ci0gICAgICAgIEpTU3RhY2soc2l6ZV90IGNhcGFjaXR5ID0gZGVmYXVsdENhcGFjaXR5KTsKKyAg
ICAgICAgSlNTdGFjayhKU0dsb2JhbERhdGEmLCBzaXplX3QgY2FwYWNpdHkgPSBkZWZhdWx0Q2Fw
YWNpdHkpOwogICAgICAgICB+SlNTdGFjaygpOwogICAgICAgICAKICAgICAgICAgdm9pZCBnYXRo
ZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwpAQCAtNzIsNyArNzgsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBl
bmQoKSAtIGJlZ2luKCk7IH0KIAogICAgICAgICBib29sIGdyb3coUmVnaXN0ZXIqKTsKLSAgICAg
ICAgdm9pZCBzaHJpbmsoUmVnaXN0ZXIqKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBzaXpl
X3QgY29tbWl0dGVkQnl0ZUNvdW50KCk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVU
aHJlYWRpbmcoKTsKQEAgLTgyLDEyICs4NywyOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIHJldHVybiAmbV9lbmQ7CiAgICAgICAgIH0KIAorICAgICAgICBSZWdpc3RlciogZ2V0VG9w
T2ZGcmFtZShDYWxsRnJhbWUqKTsKKyAgICAgICAgUmVnaXN0ZXIqIGdldFN0YXJ0T2ZGcmFtZShD
YWxsRnJhbWUqKTsKKyAgICAgICAgUmVnaXN0ZXIqIGdldFRvcE9mU3RhY2soKTsKKworICAgICAg
ICBDYWxsRnJhbWUqIHB1c2hGcmFtZShDYWxsRnJhbWUqIGNhbGxlckZyYW1lLCBjbGFzcyBDb2Rl
QmxvY2sqLAorICAgICAgICAgICAgSlNTY29wZSosIGludCBhcmdzQ291bnQsIEpTT2JqZWN0KiBj
YWxsZWUpOworCisgICAgICAgIHZvaWQgcG9wRnJhbWUoQ2FsbEZyYW1lKik7CisKICAgICAgICAg
dm9pZCBlbmFibGVFcnJvclN0YWNrUmVzZXJ2ZSgpOwogICAgICAgICB2b2lkIGRpc2FibGVFcnJv
clN0YWNrUmVzZXJ2ZSgpOwogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKKyNpZiBFTkFCTEUoREVCVUdfSlNTVEFDSykKKyAgICAgICAg
dm9pZCBpbnN0YWxsRmVuY2UoQ2FsbEZyYW1lKiwgY29uc3QgY2hhciAqZnVuY3Rpb24gPSAiIiwg
aW50IGxpbmVObyA9IDApOworICAgICAgICB2b2lkIHZhbGlkYXRlRmVuY2UoQ2FsbEZyYW1lKiwg
Y29uc3QgY2hhciAqZnVuY3Rpb24gPSAiIiwgaW50IGxpbmVObyA9IDApOworICAgICAgICBzdGF0
aWMgY29uc3QgaW50IEZlbmNlU2l6ZSA9IDQ7CisjZWxzZSAvLyAhRU5BQkxFKERFQlVHX0pTU1RB
Q0spCisgICAgICAgIHZvaWQgaW5zdGFsbEZlbmNlKENhbGxGcmFtZSosIGNvbnN0IGNoYXIqID0g
IiIsIGludCA9IDApIHsgfQorICAgICAgICB2b2lkIHZhbGlkYXRlRmVuY2UoQ2FsbEZyYW1lKiwg
Y29uc3QgY2hhciogPSAiIiwgaW50ID0gMCkgeyB9CisjZW5kaWYgLy8gIUVOQUJMRShERUJVR19K
U1NUQUNLKQogCisgICAgcHJpdmF0ZToKICAgICAgICAgUmVnaXN0ZXIqIHJlc2VydmF0aW9uRW5k
KCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgY2hhciogYmFzZSA9IHN0YXRpY19jYXN0
PGNoYXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7CkBAIC05NSwxMyArMTE2LDI1IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIq
PihyZXNlcnZhdGlvbkVuZCk7CiAgICAgICAgIH0KIAorI2lmIEVOQUJMRShERUJVR19KU1NUQUNL
KQorICAgICAgICBzdGF0aWMgSlNWYWx1ZSBnZW5lcmF0ZUZlbmNlVmFsdWUoc2l6ZV90IGFyZ0lu
ZGV4KTsKKyAgICAgICAgdm9pZCBpbnN0YWxsVHJhcHNBZnRlckZyYW1lKENhbGxGcmFtZSopOwor
I2Vsc2UKKyAgICAgICAgdm9pZCBpbnN0YWxsVHJhcHNBZnRlckZyYW1lKENhbGxGcmFtZSopIHsg
fQorI2VuZGlmCisKICAgICAgICAgYm9vbCBncm93U2xvd0Nhc2UoUmVnaXN0ZXIqKTsKKyAgICAg
ICAgdm9pZCBzaHJpbmsoUmVnaXN0ZXIqKTsKICAgICAgICAgdm9pZCByZWxlYXNlRXhjZXNzQ2Fw
YWNpdHkoKTsKICAgICAgICAgdm9pZCBhZGRUb0NvbW1pdHRlZEJ5dGVDb3VudChsb25nKTsKKwog
ICAgICAgICBSZWdpc3RlciogbV9lbmQ7CiAgICAgICAgIFJlZ2lzdGVyKiBtX2NvbW1pdEVuZDsK
ICAgICAgICAgUmVnaXN0ZXIqIG1fdXNlYWJsZUVuZDsKICAgICAgICAgUGFnZVJlc2VydmF0aW9u
IG1fcmVzZXJ2YXRpb247CisgICAgICAgIENhbGxGcmFtZSomIG1fdG9wQ2FsbEZyYW1lOworCisg
ICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgfTsKIAogICAg
IGlubGluZSB2b2lkIEpTU3RhY2s6OnNocmluayhSZWdpc3RlciogbmV3RW5kKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2tJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2tJbmxpbmVzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFj
a0lubGluZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1N0YWNrSW5saW5lc19o
CisjZGVmaW5lIEpTU3RhY2tJbmxpbmVzX2gKKworI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkpTU3RhY2suaCIKKyNpbmNsdWRlIDx3dGYv
VW51c2VkUGFyYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBSZWdpc3RlciogSlNT
dGFjazo6Z2V0VG9wT2ZGcmFtZShDYWxsRnJhbWUqIGZyYW1lKQoreworICAgIGlmIChVTkxJS0VM
WSghZnJhbWUpKQorICAgICAgICByZXR1cm4gYmVnaW4oKTsKKyAgICByZXR1cm4gZnJhbWUtPmZy
YW1lRXh0ZW50KCk7Cit9CisKK2lubGluZSBSZWdpc3RlciogSlNTdGFjazo6Z2V0VG9wT2ZTdGFj
aygpCit7CisgICAgcmV0dXJuIGdldFRvcE9mRnJhbWUobV90b3BDYWxsRnJhbWUpOworfQorCitp
bmxpbmUgUmVnaXN0ZXIqIEpTU3RhY2s6OmdldFN0YXJ0T2ZGcmFtZShDYWxsRnJhbWUqIGZyYW1l
KQoreworICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBmcmFtZS0+Y2FsbGVyRnJhbWVOb0Zs
YWdzKCk7CisgICAgcmV0dXJuIGdldFRvcE9mRnJhbWUoY2FsbGVyRnJhbWUpOworfQorCitpbmxp
bmUgQ2FsbEZyYW1lKiBKU1N0YWNrOjpwdXNoRnJhbWUoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSwK
KyAgICBjbGFzcyBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNTY29wZSogc2NvcGUsIGludCBhcmdz
Q291bnQsIEpTT2JqZWN0KiBjYWxsZWUpCit7CisgICAgQVNTRVJUKCEhc2NvcGUpOworICAgIFJl
Z2lzdGVyKiBvbGRFbmQgPSBnZXRUb3BPZlN0YWNrKCk7CisKKyAgICAvLyBFbnN1cmUgdGhhdCB3
ZSBoYXZlIGVub3VnaCBzcGFjZSBmb3IgdGhlIHBhcmFtZXRlcnM6CisgICAgc2l6ZV90IHBhZGRl
ZEFyZ3NDb3VudCA9IGFyZ3NDb3VudDsKKyAgICBpZiAoY29kZUJsb2NrKSB7CisgICAgICAgIHNp
emVfdCBudW1QYXJhbWV0ZXJzID0gY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CisgICAgICAg
IGlmIChwYWRkZWRBcmdzQ291bnQgPCBudW1QYXJhbWV0ZXJzKQorICAgICAgICAgICAgcGFkZGVk
QXJnc0NvdW50ID0gbnVtUGFyYW1ldGVyczsKKyAgICB9CisKKyAgICBSZWdpc3RlciogbmV3Q2Fs
bEZyYW1lU2xvdCA9IG9sZEVuZCArIHBhZGRlZEFyZ3NDb3VudCArIEpTU3RhY2s6OkNhbGxGcmFt
ZUhlYWRlclNpemU7CisjaWYgRU5BQkxFKERFQlVHX0pTU1RBQ0spCisgICAgbmV3Q2FsbEZyYW1l
U2xvdCArPSBKU1N0YWNrOjpGZW5jZVNpemU7CisjZW5kaWYKKyAgICBSZWdpc3RlciogbmV3RW5k
ID0gbmV3Q2FsbEZyYW1lU2xvdDsKKyAgICBpZiAoISFjb2RlQmxvY2spCisgICAgICAgIG5ld0Vu
ZCArPSBjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOworCisgICAgLy8gRW5zdXJlIHRo
YXQgd2UgaGF2ZSB0aGUgbmVlZGVkIHN0YWNrIGNhcGFjaXR5IHRvIHB1c2ggdGhlIG5ldyBmcmFt
ZToKKyAgICBpZiAoIWdyb3cobmV3RW5kKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBD
b21wdXRlIHRoZSBhZGRyZXNzIG9mIHRoZSBuZXcgZnJhbWUgZm9yIHRoaXMgaW52b2NhdGlvbjoK
KyAgICBDYWxsRnJhbWUqIG5ld0NhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKG5ld0NhbGxG
cmFtZVNsb3QpOworICAgIEFTU0VSVCghIW5ld0NhbGxGcmFtZSk7CisKKyAgICAvLyBUaGUgY2Fs
bGVyIGZyYW1lIHNob3VsZCBhbHdheXMgYmUgdGhlIHJlYWwgcHJldmlvdXMgZnJhbWUgb24gdGhl
IHN0YWNrLAorICAgIC8vIGFuZCBub3QgYSBwb3RlbnRpYWwgR2xvYmFsRXhlYyB0aGF0IHdhcyBw
YXNzZWQgaW4uIFBvaW50IGNhbGxlckZyYW1lIHRvCisgICAgLy8gdGhlIHRvcCBmcmFtZSBvbiB0
aGUgc3RhY2suCisgICAgY2FsbGVyRnJhbWUgPSBtX3RvcENhbGxGcmFtZTsKKworICAgIC8vIElu
aXRpYWxpemUgdGhlIGZyYW1lIGhlYWRlcjoKKyAgICBuZXdDYWxsRnJhbWUtPmluaXQoY29kZUJs
b2NrLCAwLCBzY29wZSwKKyAgICAgICAgY2FsbGVyRnJhbWUtPmFkZEhvc3RDYWxsRnJhbWVGbGFn
KCksIGFyZ3NDb3VudCwgY2FsbGVlKTsKKworICAgIEFTU0VSVCghIW5ld0NhbGxGcmFtZS0+c2Nv
cGUoKSk7CisKKyAgICAvLyBQYWQgYWRkaXRpb25hbCBhcmdzIGlmIG5lZWRlZDoKKyAgICAvLyBO
b3RlOiB3ZSBuZWVkIHRvIHN1YnRyYWN0IDEgZnJvbSBhcmdzQ291bnQgYW5kIHBhZGRlZEFyZ3ND
b3VudCB0bworICAgIC8vIGV4Y2x1ZGUgdGhlIHRoaXMgcG9pbnRlci4KKyAgICBmb3IgKHNpemVf
dCBpID0gYXJnc0NvdW50LTE7IGkgPCBwYWRkZWRBcmdzQ291bnQtMTsgKytpKQorICAgICAgICBu
ZXdDYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGpzVW5kZWZpbmVkKCkpOworCisgICAgaW5zdGFs
bEZlbmNlKG5ld0NhbGxGcmFtZSwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisgICAgdmFsaWRh
dGVGZW5jZShuZXdDYWxsRnJhbWUsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworICAgIGluc3Rh
bGxUcmFwc0FmdGVyRnJhbWUobmV3Q2FsbEZyYW1lKTsKKworICAgIC8vIFB1c2ggdGhlIG5ldyBm
cmFtZToKKyAgICBtX3RvcENhbGxGcmFtZSA9IG5ld0NhbGxGcmFtZTsKKworICAgIHJldHVybiBu
ZXdDYWxsRnJhbWU7Cit9CisKK2lubGluZSB2b2lkIEpTU3RhY2s6OnBvcEZyYW1lKENhbGxGcmFt
ZSogZnJhbWUpCit7CisgICAgdmFsaWRhdGVGZW5jZShmcmFtZSwgX19GVU5DVElPTl9fLCBfX0xJ
TkVfXyk7CisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGZyYW1lLT5jYWxsZXJGcmFtZU5v
RmxhZ3MoKTsKKworICAgIC8vIFBvcCB0byB0aGUgY2FsbGVyOgorICAgIG1fdG9wQ2FsbEZyYW1l
ID0gY2FsbGVyRnJhbWU7CisKKyAgICAvLyBJZiB3ZSBhcmUgcG9wcGluZyB0aGUgdmVyeSBmaXJz
dCBmcmFtZSBmcm9tIHRoZSBzdGFjayBpLmUuIG5vIG1vcmUKKyAgICAvLyBmcmFtZXMgYmVmb3Jl
IHRoaXMsIHRoZW4gd2UgY2FuIG5vdyBzYWZlbHkgc2hyaW5rIHRoZSBzdGFjay4gSW4KKyAgICAv
LyB0aGlzIGNhc2UsIHdlJ3JlIHNocmlua2luZyBhbGwgdGhlIHdheSB0byB0aGUgYmVnaW5uaW5n
IHNpbmNlIHRoZXJlCisgICAgLy8gYXJlIG5vIG1vcmUgZnJhbWVzIG9uIHRoZSBzdGFjay4KKyAg
ICBpZiAoIWNhbGxlckZyYW1lKQorICAgICAgICBzaHJpbmsoYmVnaW4oKSk7CisKKyAgICBpbnN0
YWxsVHJhcHNBZnRlckZyYW1lKGNhbGxlckZyYW1lKTsKK30KKworCisjaWYgRU5BQkxFKERFQlVH
X0pTU1RBQ0spCitpbmxpbmUgSlNWYWx1ZSBKU1N0YWNrOjpnZW5lcmF0ZUZlbmNlVmFsdWUoc2l6
ZV90IGFyZ0luZGV4KQoreworICAgIHVuc2lnbmVkIGZlbmNlQml0cyA9IDB4ZmFjZWJhZDAgfCAo
KGFyZ0luZGV4KzEpICYgMHhmKTsKKyAgICBKU1ZhbHVlIGZlbmNlVmFsdWUgPSBKU1ZhbHVlKGZl
bmNlQml0cyk7CisgICAgcmV0dXJuIGZlbmNlVmFsdWU7Cit9CisKKy8vIFRoZSBKU1N0YWNrIGZl
bmNlcyBtZWNoYW5pc20gd29ya3MgYXMgZm9sbG93czoKKy8vIDEuIEEgZmVuY2UgaXMgYSBudW1i
ZXIgKEpTU3RhY2s6OkZlbmNlU2l6ZSkgb2YgSlNWYWx1ZXMgdGhhdCBhcmUgaW5pdGlhbGl6ZWQK
Ky8vICAgIHdpdGggdmFsdWVzIGdlbmVyYXRlZCBieSBKU1N0YWNrOjpnZW5lcmF0ZUZlbmNlVmFs
dWUoKS4KKy8vIDIuIFdoZW4gcHVzaEZyYW1lKCkgaXMgY2FsbGVkLCB0aGUgZmVuY2UgaXMgaW5z
dGFsbGVkIGFmdGVyIHRoZSBtYXggZXh0ZW50CisvLyAgICBvZiB0aGUgcHJldmlvdXMgdG9wQ2Fs
bEZyYW1lIGFuZCB0aGUgbGFzdCBhcmcgb2YgdGhlIG5ldyBmcmFtZToKKy8vCisvLyAgICAgICAg
ICAgICAgICAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy8v
ICAgICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tfAorLy8gICAgICAgICAgICAgICAgICAgICB8IEZyYW1lIEhlYWRlciBvZiBwcmV2aW91cyBm
cmFtZSAgICAgICB8CisvLyAgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLXwKKy8vICAgIHRvcENhbGxGcmFtZSAtLT4gfCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLy8gICAgICAgICAgICAgICAgICAgICB8IExv
Y2FscyBvZiBwcmV2aW91cyBmcmFtZSAgICAgICAgICAgICB8CisvLyAgICAgICAgICAgICAgICAg
ICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKy8vICAgICAgICAg
ICAgICAgICAgICAgfCAqKiogdGhlIEZlbmNlICoqKiAgICAgICAgICAgICAgICAgICAgfAorLy8g
ICAgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS18CisvLyAgICAgICAgICAgICAgICAgICAgIHwgQXJncyBvZiBuZXcgZnJhbWUgICAgICAgICAg
ICAgICAgICAgIHwKKy8vICAgICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tfAorLy8gICAgICAgICAgICAgICAgICAgICB8IEZyYW1lIEhlYWRl
ciBvZiBuZXcgZnJhbWUgICAgICAgICAgICB8CisvLyAgICAgICAgICAgICAgICAgICAgIHwtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKy8vICAgICAgICAgICBmcmFtZSAt
LT4gfCBMb2NhbHMgb2YgbmV3IGZyYW1lICAgICAgICAgICAgICAgICAgfAorLy8gICAgICAgICAg
ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisvLwor
Ly8gMy4gSW4gcG9wRnJhbWUoKSBhbmQgZWxzZXdoZXJlLCB3ZSBjYW4gY2FsbCBKU1N0YWNrOjp2
YWxpZGF0ZUZlbmNlKCkgdG8KKy8vICAgIGFzc2VydCB0aGF0IHRoZSBmZW5jZSBjb250YWlucyB0
aGUgdmFsdWVzIHdlIGV4cGVjdC4KKworaW5saW5lIHZvaWQgSlNTdGFjazo6aW5zdGFsbEZlbmNl
KENhbGxGcmFtZSogZnJhbWUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBpbnQgbGluZU5vKQorewor
ICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGxpbmVObyk7Cisg
ICAgUmVnaXN0ZXIqIHN0YXJ0T2ZGcmFtZSA9IGdldFN0YXJ0T2ZGcmFtZShmcmFtZSk7CisKKyAg
ICAvLyBUaGUgbGFzdCBhcmdJbmRleCBpcyBhdDoKKyAgICBzaXplX3QgbWF4SW5kZXggPSBmcmFt
ZS0+YXJnSW5kZXhGb3JSZWdpc3RlcihzdGFydE9mRnJhbWUpICsgMTsKKyAgICBzaXplX3Qgc3Rh
cnRJbmRleCA9IG1heEluZGV4IC0gRmVuY2VTaXplOworICAgIGZvciAoc2l6ZV90IGkgPSBzdGFy
dEluZGV4OyBpIDwgbWF4SW5kZXg7ICsraSkgeworICAgICAgICBKU1ZhbHVlIGZlbmNlVmFsdWUg
PSBnZW5lcmF0ZUZlbmNlVmFsdWUoaSk7CisgICAgICAgIGZyYW1lLT5zZXRBcmd1bWVudChpLCBm
ZW5jZVZhbHVlKTsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIEpTU3RhY2s6OnZhbGlkYXRlRmVu
Y2UoQ2FsbEZyYW1lKiBmcmFtZSwgY29uc3QgY2hhciAqZnVuY3Rpb24sIGludCBsaW5lTm8pCit7
CisgICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0obGluZU5vKTsK
KyAgICBBU1NFUlQoISFmcmFtZS0+c2NvcGUoKSk7CisgICAgUmVnaXN0ZXIqIHN0YXJ0T2ZGcmFt
ZSA9IGdldFN0YXJ0T2ZGcmFtZShmcmFtZSk7CisgICAgc2l6ZV90IG1heEluZGV4ID0gZnJhbWUt
PmFyZ0luZGV4Rm9yUmVnaXN0ZXIoc3RhcnRPZkZyYW1lKSArIDE7CisgICAgc2l6ZV90IHN0YXJ0
SW5kZXggPSBtYXhJbmRleCAtIEZlbmNlU2l6ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJ
bmRleDsgaSA8IG1heEluZGV4OyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSBmZW5jZVZhbHVlID0g
Z2VuZXJhdGVGZW5jZVZhbHVlKGkpOworICAgICAgICBKU1ZhbHVlIGFjdHVhbFZhbHVlID0gZnJh
bWUtPmdldEFyZ3VtZW50VW5zYWZlKGkpOworICAgICAgICBBU1NFUlQoZmVuY2VWYWx1ZSA9PSBh
Y3R1YWxWYWx1ZSk7CisgICAgfQorfQorCisvLyBXaGVuIGRlYnVnZ2luZyB0aGUgSlNTdGFjaywg
d2UgaW5zdGFsbCBiYWQgdmFsdWVzIGFmdGVyIHRoZSBleHRlbnQgb2YgdGhlCisvLyB0b3BDYWxs
RnJhbWUgYXQgdGhlIGVuZCBvZiBwdXNoRnJhbWUoKSBhbmQgcG9wRnJhbWUoKS4gVGhlIGludGVu
dGlvbiBpcworLy8gdG8gdHJpZ2dlciBjcmFzaGVzIGluIHRoZSBldmVudCB0aGF0IG1lbW9yeSBp
biB0aGlzIHN1cHBvc2VkbHkgdW51c2VkCisvLyByZWdpb24gaXMgcmVhZCBhbmQgY29uc3VtZWQg
d2l0aG91dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24uIEFmdGVyIHRoZSB0cmFwCisvLyB3b3JkcyBh
cmUgaW5zdGFsbGVkLCB0aGUgc3RhY2sgbG9va3MgbGlrZSB0aGlzOgorLy8KKy8vICAgICAgICAg
ICAgICAgICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgfAorLy8gICAgICAgICAg
ICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisvLyAgICAgICAgICAg
ICAgICAgICAgIHwgRnJhbWUgSGVhZGVyIG9mIGZyYW1lICAgICAgIHwKKy8vICAgICAgICAgICAg
ICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorLy8gICAgdG9wQ2FsbEZy
YW1lIC0tPiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisvLyAgICAgICAgICAgICAg
ICAgICAgIHwgTG9jYWxzIG9mIGZyYW1lICAgICAgICAgICAgIHwKKy8vICAgICAgICAgICAgICAg
ICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorLy8gICAgICAgICAgICAgICAg
ICAgICB8ICoqKiBUcmFwIHdvcmRzICoqKiAgICAgICAgICB8CisvLyAgICAgICAgICAgICAgICAg
ICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKy8vICAgICAgICAgICAgICAgICAg
ICAgfCBVbnVzZWQgc3BhY2UgLi4uICAgICAgICAgICAgfAorLy8gICAgICAgICAgICAgICAgICAg
ICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICB8CisKK2lubGluZSB2b2lkIEpTU3RhY2s6
Omluc3RhbGxUcmFwc0FmdGVyRnJhbWUoQ2FsbEZyYW1lKiBmcmFtZSkKK3sKKyAgICBSZWdpc3Rl
ciogdG9wT2ZGcmFtZSA9IGdldFRvcE9mRnJhbWUoZnJhbWUpOworICAgIGNvbnN0IGludCBzaXpl
T2ZUcmFwID0gNjQ7CisgICAgaW50MzJfdCogc3RhcnRPZlRyYXAgPSByZWludGVycHJldF9jYXN0
PGludDMyX3QqPih0b3BPZkZyYW1lKTsKKyAgICBpbnQzMl90KiBlbmRPZlRyYXAgPSBzdGFydE9m
VHJhcCArIHNpemVPZlRyYXA7CisgICAgaW50MzJfdCogZW5kT2ZDb21taXRlZE1lbW9yeSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KG1fY29tbWl0RW5kKTsKKworICAgIC8vIE1ha2Ugc3Vy
ZSB3ZSdyZSBub3QgZXhjZWVkaW5nIHRoZSBhbW91bnQgb2YgYXZhaWxhYmxlIG1lbW9yeSB0byB3
cml0ZSB0bzoKKyAgICBpZiAoZW5kT2ZUcmFwID4gZW5kT2ZDb21taXRlZE1lbW9yeSkKKyAgICAg
ICAgZW5kT2ZUcmFwID0gZW5kT2ZDb21taXRlZE1lbW9yeTsKKworICAgIC8vIExheSB0aGUgdHJh
cHM6CisgICAgaW50MzJfdCogcCA9IHN0YXJ0T2ZUcmFwOworICAgIHdoaWxlIChwIDwgZW5kT2ZU
cmFwKQorICAgICAgICAqcCsrID0gMHhhYmFkY2FmZTsgLy8gQSBiYWQgd29yZCB0byB0cmlnZ2Vy
IGEgY3Jhc2ggaWYgZGVyZWYnZWQuCit9CisjZW5kaWYgLy8gRU5BQkxFKERFQlVHX0pTU1RBQ0sp
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNTdGFja0lubGluZXNfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEzMjE2MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTQyLDYgKzIxNDIsOCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9w
X25ld19mCiAKIGlubGluZSB2b2lkKiBqaXRDb21waWxlRm9yKENhbGxGcmFtZSogY2FsbEZyYW1l
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CisgICAgY2FsbEZyYW1lLT5zZXRDb2Rl
QmxvY2soMCk7CisKICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oY2FsbEZyYW1lLT5jYWxsZWUoKSk7CiAgICAgQVNTRVJUKCFmdW5jdGlvbi0+aXNIb3N0RnVu
Y3Rpb24oKSk7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24t
PmpzRXhlY3V0YWJsZSgpOwpAQCAtMjIyMiw2ICsyMjI0LDggQEAgaW5saW5lIHZvaWQqIGxhenlM
aW5rRm9yKENhbGxGcmFtZSogY2FsbAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKICAg
ICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9ICZjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCkt
PmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oY2FsbEZyYW1lLT5yZXR1cm5QQygpKTsKIAor
ICAgIGNhbGxGcmFtZS0+c2V0Q29kZUJsb2NrKDApOworCiAgICAgaWYgKGV4ZWN1dGFibGUtPmlz
SG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5nZW5lcmF0ZWRK
SVRDb2RlRm9yKGtpbmQpLmFkZHJlc3NGb3JDYWxsKCk7CiAgICAgZWxzZSB7CkBAIC0yMjk4LDcg
KzIzMDIsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAKICAg
ICBFbmNvZGVkSlNWYWx1ZSByZXR1cm5WYWx1ZTsKICAgICB7Ci0gICAgICAgIFNhbXBsaW5nVG9v
bDo6SG9zdENhbGxSZWNvcmQgY2FsbFJlY29yZChDVElfU0FNUExFUik7CisgICAgICAgIFNhbXBs
aW5nVG9vbDo6Q2FsbFJlY29yZCBjYWxsUmVjb3JkKENUSV9TQU1QTEVSLCB0cnVlKTsKICAgICAg
ICAgcmV0dXJuVmFsdWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oY2FsbEZyYW1lKTsKICAg
ICB9CiAKQEAgLTI0MjQsNyArMjQyOCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRK
U1ZhbHVlLCBvcF8KIAogICAgIEVuY29kZWRKU1ZhbHVlIHJldHVyblZhbHVlOwogICAgIHsKLSAg
ICAgICAgU2FtcGxpbmdUb29sOjpIb3N0Q2FsbFJlY29yZCBjYWxsUmVjb3JkKENUSV9TQU1QTEVS
KTsKKyAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxSZWNvcmQoQ1RJX1NBTVBM
RVIsIHRydWUpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1
bmN0aW9uKGNhbGxGcmFtZSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDEzMjE2MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5Nyw3ICsxOTcsNyBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRh
VHlwCiAjZW5kaWYKICAgICAsIG1faW5EZWZpbmVPd25Qcm9wZXJ0eShmYWxzZSkKIHsKLSAgICBp
bnRlcnByZXRlciA9IG5ldyBJbnRlcnByZXRlcjsKKyAgICBpbnRlcnByZXRlciA9IG5ldyBJbnRl
cnByZXRlcigqdGhpcyk7CiAKICAgICAvLyBOZWVkIHRvIGJlIGNhcmVmdWwgdG8ga2VlcCBldmVy
eXRoaW5nIGNvbnNpc3RlbnQgaGVyZQogICAgIEpTTG9ja0hvbGRlciBsb2NrKHRoaXMpOwpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTMyMTYyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMTAtMjIgIE1hcmsgTGFtICA8bWFyay5sYW1A
YXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgdG9wQ2FsbEZyYW1lIHJlbGlhYmxlLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg5MjguCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBSZS1iYXNlbGluZSBz
b21lIHRlc3RzIHRvIG1hdGNoIHRoZSBuZXcgc3RhY2sgZHVtcCByZXN1bHRzLgorCisgICAgICAg
ICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvY29uc29sZS1yZXNvdXJjZS1lcnJvcnMtZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL3N0YWNrdHJhY2VzL2NzcC1pbmpl
Y3RlZC1jb250ZW50LXdhcm5pbmctY29udGFpbnMtc3RhY2t0cmFjZS1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3Ivc3RhY2t0cmFjZXMvY3NwLWlubGluZS13YXJu
aW5nLWNvbnRhaW5zLXN0YWNrdHJhY2UtZXhwZWN0ZWQudHh0OgorCiAyMDEyLTEwLTIyICBEaXJr
IFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIG1v
cmUgQ2hyb21pdW0gTUwgZXhwZWN0YXRpb24gdXBkYXRpbmcuCkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2luc3BlY3Rvci9jb25zb2xlLXJlc291cmNlLWVycm9ycy1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvY29uc29sZS1y
ZXNvdXJjZS1lcnJvcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxMzIxNjIpCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9jb25zb2xlLXJlc291cmNlLWVycm9ycy1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQsNSArNCw1IEBAIFRlc3RzIHRoYXQgZXJyb3JzIHRv
IGxvYWQgYSByZXNvdXJjZSBjYXUKIEdFVCBodHRwOi8vMTI3LjAuMC4xOjgwMDAvaW5zcGVjdG9y
L21pc3NpbmcuY3NzIDQwNCAoTm90IEZvdW5kKSBjb25zb2xlLXJlc291cmNlLWVycm9ycy1pZnJh
bWUuaHRtbDozIGNvbnNvbGUtbWVzc2FnZSBjb25zb2xlLWVycm9yLWxldmVsCiBHRVQgaHR0cDov
LzEyNy4wLjAuMTo4MDAwL2luc3BlY3Rvci9ub24tZXhpc3RlbnQtaWZyYW1lLmh0bWwgNDA0IChO
b3QgRm91bmQpIG5vbi1leGlzdGVudC1pZnJhbWUuaHRtbDoxIGNvbnNvbGUtbWVzc2FnZSBjb25z
b2xlLWVycm9yLWxldmVsCiBHRVQgaHR0cDovLzEyNy4wLjAuMTo4MDAwL2luc3BlY3Rvci9ub24t
ZXhpc3RlbnQtc2NyaXB0LmpzIDQwNCAoTm90IEZvdW5kKSBjb25zb2xlLXJlc291cmNlLWVycm9y
cy1pZnJhbWUuaHRtbDo0IGNvbnNvbGUtbWVzc2FnZSBjb25zb2xlLWVycm9yLWxldmVsCi1HRVQg
aHR0cDovLzEyNy4wLjAuMTo4MDAwL2luc3BlY3Rvci9ub24tZXhpc3RlbnQteGhyIDQwNCAoTm90
IEZvdW5kKSBbbmF0aXZlIGNvZGVdOjFzZW5kIFtuYXRpdmUgY29kZV06MWxvYWRYSFIgY29uc29s
ZS1yZXNvdXJjZS1lcnJvcnMuaHRtbDoxOHBlcmZvcm1BY3Rpb25zIGNvbnNvbGUtcmVzb3VyY2Ut
ZXJyb3JzLmh0bWw6MTBldmFsIGNvZGVldmFsIFtuYXRpdmUgY29kZV06MWV2YWx1YXRlIFtuYXRp
dmUgY29kZV06MV9ldmFsdWF0ZU9uX2V2YWx1YXRlQW5kV3JhcGV2YWx1YXRlKGFub255bW91cyBm
dW5jdGlvbikgW25hdGl2ZSBjb2RlXToxIGNvbnNvbGUtbWVzc2FnZSBjb25zb2xlLWVycm9yLWxl
dmVsCitHRVQgaHR0cDovLzEyNy4wLjAuMTo4MDAwL2luc3BlY3Rvci9ub24tZXhpc3RlbnQteGhy
IDQwNCAoTm90IEZvdW5kKSBbbmF0aXZlIGNvZGVdOjFzZW5kIFtuYXRpdmUgY29kZV06MWxvYWRY
SFIgY29uc29sZS1yZXNvdXJjZS1lcnJvcnMuaHRtbDoxOHBlcmZvcm1BY3Rpb25zIGNvbnNvbGUt
cmVzb3VyY2UtZXJyb3JzLmh0bWw6MTBldmFsIGNvZGVldmFsIFtuYXRpdmUgY29kZV06MWV2YWx1
YXRlIFtuYXRpdmUgY29kZV06MV9ldmFsdWF0ZU9uX2V2YWx1YXRlQW5kV3JhcGV2YWx1YXRlIGNv
bnNvbGUtbWVzc2FnZSBjb25zb2xlLWVycm9yLWxldmVsCiAKSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvaW5zcGVjdG9yL3N0YWNrdHJhY2VzL2NzcC1pbmplY3RlZC1jb250ZW50LXdhcm5p
bmctY29udGFpbnMtc3RhY2t0cmFjZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3Ivc3RhY2t0cmFjZXMvY3NwLWluamVjdGVkLWNvbnRl
bnQtd2FybmluZy1jb250YWlucy1zdGFja3RyYWNlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTMy
MTYyKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3Ivc3RhY2t0cmFjZXMvY3Nw
LWluamVjdGVkLWNvbnRlbnQtd2FybmluZy1jb250YWlucy1zdGFja3RyYWNlLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMTQsNSArMTQsNCBAQCBTdGFjayBUcmFjZToKICAgICA0KSAo
aW50ZXJuYWwgc2NyaXB0KSAvIF9ldmFsdWF0ZU9uIC8gKGxpbmUgbnVtYmVyKSAvIChjb2x1bW4g
bnVtYmVyKQogICAgIDUpIChpbnRlcm5hbCBzY3JpcHQpIC8gX2V2YWx1YXRlQW5kV3JhcCAvIChs
aW5lIG51bWJlcikgLyAoY29sdW1uIG51bWJlcikKICAgICA2KSAoaW50ZXJuYWwgc2NyaXB0KSAv
IGV2YWx1YXRlIC8gKGxpbmUgbnVtYmVyKSAvIChjb2x1bW4gbnVtYmVyKQotICAgIDcpIFtuYXRp
dmUgY29kZV0gLyAgLyAwIC8gMAogCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3Bl
Y3Rvci9zdGFja3RyYWNlcy9jc3AtaW5saW5lLXdhcm5pbmctY29udGFpbnMtc3RhY2t0cmFjZS1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0
b3Ivc3RhY2t0cmFjZXMvY3NwLWlubGluZS13YXJuaW5nLWNvbnRhaW5zLXN0YWNrdHJhY2UtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAxMzIxNjIpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2lu
c3BlY3Rvci9zdGFja3RyYWNlcy9jc3AtaW5saW5lLXdhcm5pbmctY29udGFpbnMtc3RhY2t0cmFj
ZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE0LDUgKzE0LDQgQEAgU3RhY2sgVHJh
Y2U6CiAgICAgNSkgKGludGVybmFsIHNjcmlwdCkgLyBfZXZhbHVhdGVPbiAvIChsaW5lIG51bWJl
cikgLyAoY29sdW1uIG51bWJlcikKICAgICA2KSAoaW50ZXJuYWwgc2NyaXB0KSAvIF9ldmFsdWF0
ZUFuZFdyYXAgLyAobGluZSBudW1iZXIpIC8gKGNvbHVtbiBudW1iZXIpCiAgICAgNykgKGludGVy
bmFsIHNjcmlwdCkgLyBldmFsdWF0ZSAvIChsaW5lIG51bWJlcikgLyAoY29sdW1uIG51bWJlcikK
LSAgICA4KSBbbmF0aXZlIGNvZGVdIC8gIC8gMCAvIDAKIAo=
</data>
<flag name="review"
          id="183521"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>