<?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>11997</bug_id>
          
          <creation_ts>2006-12-27 04:11:28 -0800</creation_ts>
          <short_desc>Ranges are not fixed after mutation (affects Acid3 test 13)</short_desc>
          <delta_ts>2019-02-06 09:03:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>420+</version>
          <rep_platform>All</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>17064</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Rene v Amerongen">rvamerongen</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andrew</cc>
    
    <cc>ap</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>ian</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>39502</commentid>
    <comment_count>0</comment_count>
    <who name="Rene v Amerongen">rvamerongen</who>
    <bug_when>2006-12-27 04:11:28 -0800</bug_when>
    <thetext>When using the supplied code as sample
1. USING: 
&gt;node2.appendChild(rangeAnd2.extractContents());
&gt;rangeAnd2.insertNode(node2);

 you will see that the andRange and the janeDoeRange are damaged and not fixed.
Because of Drosera isn&apos;t really helpfull yet with this, I can&apos;t realy check what is going on, but it looks like janeRange is pointing to &quot;john&quot;&apos;s content and the visual reference is gone ( whatever that is ).

2. USING: 
&gt;rangeAnd2.surroundContents(node2);

 you will see that the  janeDoeRange is damaged and not fixed.
But also here it looks like janeRange is pointing to &quot;john&quot;&apos;s content ( but in another test it did point to somewhere else ).

See about fixing :http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Mutation
About identical results expected see: http://developer.mozilla.org/en/docs/DOM:range.surroundContents

Because some pages are using this, they let safari crash at a later stadium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39503</commentid>
    <comment_count>1</comment_count>
      <attachid>12056</attachid>
    <who name="Rene v Amerongen">rvamerongen</who>
    <bug_when>2006-12-27 04:13:41 -0800</bug_when>
    <thetext>Created attachment 12056
Sample of the error

Sample code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60585</commentid>
    <comment_count>2</comment_count>
      <attachid>17114</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-11-07 12:19:08 -0800</bug_when>
    <thetext>Created attachment 17114
another test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66263</commentid>
    <comment_count>3</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2008-01-05 00:12:54 -0800</bug_when>
    <thetext>The spec may be stupid, but given the spec, it&apos;s not clear this is an error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66269</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-01-05 02:46:42 -0800</bug_when>
    <thetext>Ian, are you saying that the original test case may work correctly in WebKit somehow?

The referenced spec seems pretty clear that ranges should be fixed after mutation, which we never do AFAICT. What am I missing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66406</commentid>
    <comment_count>5</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2008-01-06 15:26:46 -0800</bug_when>
    <thetext>The second test case seems valid.

The first test case expects the &quot;Jane&quot; range to keep being around &quot;Jane&quot;, but as far as I can tell that&apos;s wrong. As soon as you surround the &quot;&amp;&quot;, the text node gets split and as far as i can tell that drops the Jane range on the floor according to the spec. (Seems stupid, and I think we should fix the spec, but that&apos;s another problem.) It does seem that the &amp; part should stay in the range though, yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70111</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-10 12:35:28 -0800</bug_when>
    <thetext>*** Bug 16766 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70135</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-10 14:07:08 -0800</bug_when>
    <thetext>I&apos;m getting started implementing this. It&apos;s fun. The document&apos;s going to keep a set of ranges indexed by their endpoint containers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73108</commentid>
    <comment_count>8</comment_count>
      <attachid>19613</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-08 22:00:29 -0800</bug_when>
    <thetext>Created attachment 19613
work in progress

I&apos;ve made a lot of progress on this. The attached patch includes a test case and fixes all the cases tested in that test case, but there&apos;s still quite a ways to go. Here are some open issues:

    1) Mozilla differs from the DOM Level 2 specification on handling of modifications that intersect the start position of the range. This patch implements the specification rather than matching Mozilla. I haven&apos;t tested IE yet.

    2) One of our existing regression tests fails with this patch because the new automatically-updating ranges break the processContents function; that has to be fixed by making changes to the processContents code.

    3) The test attached covers a lot, but there are many things it does not cover. There are lots of different ways to mutate the DOM and they all should be tested to see if they have the correct behavior when a Range is involved. Including editing operations done with execCommand.

    4) I haven&apos;t done any real performance testing or analysis of this patch. It might slow things down too much, and if so I&apos;ll have to explore various optimizations for the common cases where there are no ranges or very few ranges that don&apos;t intersect many DOM operations.

    5) There are too many new declarations and definitions in Range.h in this patch. The new classes probably should go in a new RangeMutation.h header, since only a couple source files need to see their definitions.

    6) The patch has too much &quot;clean up&quot; mixed in with the substantive change. That probably should be landed first, separately.

The patch *does* fix test 13 in Acid3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73116</commentid>
    <comment_count>9</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-03-09 04:01:04 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=19613) [edit]
&gt; work in progress
&gt; 
&gt; I&apos;ve made a lot of progress on this. The attached patch includes a test case
&gt; and fixes all the cases tested in that test case, but there&apos;s still quite a
&gt; ways to go. Here are some open issues:

I haven&apos;t read the patch yet, but here&apos;s some comments on some of the design issues. (Don&apos;t forget to blog when you land this, per hyatt&apos;s promise...)

&gt;     1) Mozilla differs from the DOM Level 2 specification on handling of
&gt; modifications that intersect the start position of the range. This patch
&gt; implements the specification rather than matching Mozilla. I haven&apos;t tested IE
&gt; yet.

I don&apos;t think IE implements DOM Level 2 Range at all. I think it is probably ok to go with the spec for now, and back off if we learn of a compatibility issue during the dev cycle.

&gt;     2) One of our existing regression tests fails with this patch because the
&gt; new automatically-updating ranges break the processContents function; that has
&gt; to be fixed by making changes to the processContents code.

Clearly we should fix processContents; do you need specific advice on this?

&gt;     3) The test attached covers a lot, but there are many things it does not
&gt; cover. There are lots of different ways to mutate the DOM and they all should
&gt; be tested to see if they have the correct behavior when a Range is involved.
&gt; Including editing operations done with execCommand.

Some other possible weird cases are changes triggered by the parser (innerHTML, initial parse, document.write).

&gt;     4) I haven&apos;t done any real performance testing or analysis of this patch.
&gt; It might slow things down too much, and if so I&apos;ll have to explore various
&gt; optimizations for the common cases where there are no ranges or very few ranges
&gt; that don&apos;t intersect many DOM operations.

For performance testing of DOM operations I&apos;d suggest:
- PLT
- http://www.quirksmode.org/dom/innerhtml.html
- http://webkit.org/perf/slickspeed/

&gt;     5) There are too many new declarations and definitions in Range.h in this
&gt; patch. The new classes probably should go in a new RangeMutation.h header,
&gt; since only a couple source files need to see their definitions.

I&apos;ll have to read the patch to form an opinion. If some of these declarations are for updating possibly-changed Ranges rather than using Ranges, then yes, I think that split would make sense.

&gt;     6) The patch has too much &quot;clean up&quot; mixed in with the substantive change.
&gt; That probably should be landed first, separately.

I agree that separating clean-up that does not alter behavior would be a good idea.

&gt; 
&gt; The patch *does* fix test 13 in Acid3.
&gt; </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73167</commentid>
    <comment_count>10</comment_count>
      <attachid>19626</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-09 21:47:56 -0700</bug_when>
    <thetext>Created attachment 19626
first round of Range improvements for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73249</commentid>
    <comment_count>11</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2008-03-10 15:17:58 -0700</bug_when>
    <thetext>+    RefPtr&lt;Node&gt; container;
+    int posOffset; // to be renamed to offset when we get rid of offset()

Seemed strange to me to call it Position::container, since it can be a text node, which isn&apos;t a container in WebCore parlance.  OTOH the DOM spec refers to a Range&apos;s start and end as being inside &quot;containers&quot;, so perhaps what you&apos;ve done is better than Position::node.


 bool Range::boundaryPointsValid() const
 {
-    return m_startContainer &amp;&amp; m_endContainer &amp;&amp; compareBoundaryPoints(m_startContainer.get(), m_startOffset, m_endContainer.get(), m_endOffset) &lt;= 0;
+    return m_start.container &amp;&amp; compareBoundaryPoints(m_start.container.get(), m_start.offset, m_end.container.get(), m_end.offset) &lt;= 0;
 }

Can m_end.container be null?


-                ProcessingInstruction* pi= static_cast&lt;ProcessingInstruction*&gt;(m_startContainer.get());
+                ProcessingInstruction* pi= static_cast&lt;ProcessingInstruction*&gt;(m_start.container.get());

You could add a space before the &apos;=&apos; here.


Index: WebCore/editing/VisiblePosition.h
===================================================================
--- WebCore/editing/VisiblePosition.h	(revision 30914)
+++ WebCore/editing/VisiblePosition.h	(working copy)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2004 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2004, 2008 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,6 +26,7 @@
 #ifndef VisiblePosition_h
 #define VisiblePosition_h
 
+#include &quot;Node.h&quot;
 #include &quot;Position.h&quot;
 
 namespace WebCore {


Shouldn&apos;t you include Node.h from VisiblePosition.cpp instead?


+        Made constructors private, added create functions.

Why is this necessary, why not just register Range&apos;s with Document::attachRange() inside Range constructors?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73254</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-10 16:10:17 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; +    RefPtr&lt;Node&gt; container;
&gt; 
&gt; Seemed strange to me to call it Position::container, since it can be a text
&gt; node, which isn&apos;t a container in WebCore parlance. OTOH the DOM spec refers to
&gt; a Range&apos;s start and end as being inside &quot;containers&quot;, so perhaps what you&apos;ve
&gt; done is better than Position::node.

Yes, I&apos;m changing the nomenclature here to match DOM Range.

&gt;  bool Range::boundaryPointsValid() const
&gt;  {
&gt; -    return m_startContainer &amp;&amp; m_endContainer &amp;&amp;
&gt; compareBoundaryPoints(m_startContainer.get(), m_startOffset,
&gt; m_endContainer.get(), m_endOffset) &lt;= 0;
&gt; +    return m_start.container &amp;&amp; compareBoundaryPoints(m_start.container.get(),
&gt; m_start.offset, m_end.container.get(), m_end.offset) &lt;= 0;
&gt;  }
&gt; 
&gt; Can m_end.container be null?

It can only be 0 if m_start.container is also 0.

&gt; -                ProcessingInstruction* pi=
&gt; static_cast&lt;ProcessingInstruction*&gt;(m_startContainer.get());
&gt; +                ProcessingInstruction* pi=
&gt; static_cast&lt;ProcessingInstruction*&gt;(m_start.container.get());
&gt; 
&gt; You could add a space before the &apos;=&apos; here.

Will do.

&gt;  #define VisiblePosition_h
&gt; 
&gt; +#include &quot;Node.h&quot;
&gt;  #include &quot;Position.h&quot;
&gt; 
&gt;  namespace WebCore {
&gt;
&gt; Shouldn&apos;t you include Node.h from VisiblePosition.cpp instead?

No, it&apos;s needed in the header, for 

&gt; +        Made constructors private, added create functions.
&gt; 
&gt; Why is this necessary, why not just register Range&apos;s with
&gt; Document::attachRange() inside Range constructors?

It has nothing to do with attachRange(). We&apos;re doing this for all classes that are refcounted to avoid problems with the initial refcount 0. See bug 17257 for details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73379</commentid>
    <comment_count>13</comment_count>
      <attachid>19626</attachid>
    <who name="">mitz</who>
    <bug_when>2008-03-11 14:23:16 -0700</bug_when>
    <thetext>Comment on attachment 19626
first round of Range improvements for review

+    if (m_start.offset == 0)

should be written as:
+    if (!m_start.offset)

I don&apos;t know the motivation for the unsigned -&gt; int changes.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73380</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-11 14:26:00 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; I don&apos;t know the motivation for the unsigned -&gt; int changes.

Trying to be consistent with the other uses in the same class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73709</commentid>
    <comment_count>15</comment_count>
      <attachid>19626</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-14 00:19:51 -0700</bug_when>
    <thetext>Comment on attachment 19626
first round of Range improvements for review

I landed this first round a while ago.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73710</commentid>
    <comment_count>16</comment_count>
      <attachid>19758</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-14 00:23:38 -0700</bug_when>
    <thetext>Created attachment 19758
patch

I resolved all the issues to my satisfaction.

Now the patch needs both review and performance testing, not necessarily in that order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73783</commentid>
    <comment_count>17</comment_count>
      <attachid>19758</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-03-14 13:58:58 -0700</bug_when>
    <thetext>Comment on attachment 19758
patch

As I noted in person,  I think all the classes in RangeDocumentMutation.h should have there own header and implementation files.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73825</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-15 10:27:38 -0700</bug_when>
    <thetext>Committed revision 31075.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502964</commentid>
    <comment_count>19</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:03:25 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>12056</attachid>
            <date>2006-12-27 04:13:41 -0800</date>
            <delta_ts>2006-12-27 04:13:41 -0800</delta_ts>
            <desc>Sample of the error</desc>
            <filename>rangeTestSelection-Bugzila.html</filename>
            <type>text/html</type>
            <size>1972</size>
            <attacher name="Rene v Amerongen">rvamerongen</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFs
Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25h
bC5kdGQiPg0NPGh0bWw+IA08aGVhZD4NCQk8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUi
IGNvbnRlbnQ9InRleHQvaHRtbDtjaGFyc2V0PXV0Zi04IiAvPg0JCTx0aXRsZT5SYW5nZSB0ZXN0
IDI8L3RpdGxlPg0JCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+PCEtLQ0g
LnJlZFNlbGVjdGVkIHsgY29sb3I6IHJlZDsgfQ0tLT48L3N0eWxlPg08c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCI+IA1mdW5jdGlvbiBkb0l0ICgpew0NdmFyIGQgPSBkb2N1bWVudCA7DQ12
YXIgaVRleHQyID0gZC5nZXRFbGVtZW50QnlJZCgnaVRleHQyJykuZmlyc3RDaGlsZDsgDQ12YXIg
cmFuZ2VKYW5lMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7IA0gICAgcmFuZ2VKYW5lMi5zZXRT
dGFydChpVGV4dDIsIDUpOyANICAgIHJhbmdlSmFuZTIuc2V0RW5kKGlUZXh0MiwgMTIpOyANDXZh
ciByYW5nZUFuZDIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOyANICAgIHJhbmdlQW5kMi5zZXRT
dGFydChpVGV4dDIsIDQpOyANICAgIHJhbmdlQW5kMi5zZXRFbmQoaVRleHQyLCA1KTsgDSAgICAg
DXZhciByYW5nZUpvaG4yID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsgDSAgICByYW5nZUpvaG4y
LnNldFN0YXJ0KGlUZXh0MiwgMCk7IA0gICAgcmFuZ2VKb2huMi5zZXRFbmQoaVRleHQyLCA0KTsg
DQ0vLyAnam9obicgJ2FuZCcgJ2phbmVEb2UnIHNlbGVjdGVkIGluIGEgcmFuZ2UNYWxlcnQoJzIg
YmVmb3JlIC0gQ29udGVudDpcblx0JyArICBkLmdldEVsZW1lbnRCeUlkKCJpVGV4dDIiKS5pbm5l
ckhUTUwgKyAnXG5cdHJhbmdlSm9objogJyArIHJhbmdlSm9objIudG9TdHJpbmcoKSArICdcblx0
cmFuZ2VBbmQ6ICcgKyByYW5nZUFuZDIudG9TdHJpbmcoKSArICdcblx0cmFuZ2VKYW5lOiAnICsg
cmFuZ2VKYW5lMi50b1N0cmluZygpKTsgDQ0vLyBjcmVhdGUgYSB0YWcgZm9yICdhbmQnLiB0cnkg
YWxzbyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBzcGFuIHRhZw12YXIgbm9kZTIgPSBkLmNyZWF0ZUVs
ZW1lbnQoImIiKTsgDW5vZGUyLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJyZWRTZWxlY3RlZCIpOw0v
LyBmb2xsb3dpbmcgd29ya3MgTk9UIGZvciBTYWZhcmksIGJ1dCBpdCBkb2VzIGZvciBvcGVyYSBh
bmQgRkYNLy8gICAgICAgcmFuZ2VBbmQyLnN1cnJvdW5kQ29udGVudHMobm9kZTIpOyAvKiBhbHNv
IHRyeSB0aGlzIG9uZSAqLw0vLyBmb2xsb3dpbmcgd29ya3MgZm9yIFNhZmFyaSwgb3BlcmEgYW5k
IEZGDW5vZGUyLmFwcGVuZENoaWxkKHJhbmdlQW5kMi5leHRyYWN0Q29udGVudHMoKSk7DXJhbmdl
QW5kMi5pbnNlcnROb2RlKG5vZGUyKTsNDS8vIGNoZWNrICByYW5nZSdzIGFnYWluLiBBbiBhbGVy
dCBoZXJlIHJhbmdlSmFuZSBzaG91bGQgYmUgJyZqYW5lRG9lJyBvciAnIHN0aWxsICdqYW5lRG9l
Jw1hbGVydCgnMiBhZnRlciAtIENvbnRlbnQ6XG5cdCcgKyAgZC5nZXRFbGVtZW50QnlJZCgiaVRl
eHQyIikuaW5uZXJIVE1MICsgJ1xuXHRyYW5nZUpvaG46ICcgKyByYW5nZUpvaG4yLnRvU3RyaW5n
KCkgKyAnXG5cdHJhbmdlQW5kOiAnICsgcmFuZ2VBbmQyLnRvU3RyaW5nKCkgKyAnXG5cdHJhbmdl
SmFuZTogJyArIHJhbmdlSmFuZTIudG9TdHJpbmcoKSk7DX0NPC9zY3JpcHQ+IA0JPC9oZWFkPiAN
PGJvZHk+IA1Kb2huJkphbmVEb2UNPGJyIC8+DTxkaXYgaWQ9ImlUZXh0MiI+Sm9obiZKYW5lRG9l
PC9kaXY+IA0NPGJyIC8+PGJyIC8+PGJyIC8+DQkJPGJ1dHRvbiBvbmNsaWNrPSJkb0l0KCk7cmV0
dXJuIHRydWU7IiBuYW1lPSJET0lUIiB2YWx1ZT0iIiB0eXBlPSJidXR0b24iPkRvIEl0IGlmIHlv
dSBkYXJlITwvYnV0dG9uPg0JPC9ib2R5PiANPC9odG1sPg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>17114</attachid>
            <date>2007-11-07 12:19:08 -0800</date>
            <delta_ts>2007-11-07 12:19:08 -0800</delta_ts>
            <desc>another test case</desc>
            <filename>range-vs-mutation.html</filename>
            <type>text/html</type>
            <size>406</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">PHNjcmlwdD4KCnZhciBkb2MgPSAobmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKCI8ZGl2
IGlkPSdhJz48ZGl2IGlkPSdiJz4xMjM8L2Rpdj48L2Rpdj4iLCAiYXBwbGljYXRpb24veG1sIik7
Cgp2YXIgYSA9IGRvYy5maXJzdENoaWxkOwp2YXIgYiA9IGEuZmlyc3RDaGlsZDsKdmFyIHJhbmdl
ID0gZG9jLmNyZWF0ZVJhbmdlKCk7CnJhbmdlLnNldFN0YXJ0KGIsIDApOwpyYW5nZS5zZXRFbmQo
YSwgMSk7CgphLnJlbW92ZUNoaWxkKGIpOwoKaWYgKHJhbmdlLnN0YXJ0Q29udGFpbmVyLmdldEF0
dHJpYnV0ZSgiaWQiKSA9PSAiYSIpCiAgICBhbGVydCgiU1VDQ0VTUyIpOwplbHNlCglhbGVydCgi
RkFJTFVSRTogIiArIHJhbmdlLnN0YXJ0Q29udGFpbmVyLmdldEF0dHJpYnV0ZSgiaWQiKSk7Cjwv
c2NyaXB0Pg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19613</attachid>
            <date>2008-03-08 22:00:29 -0800</date>
            <delta_ts>2008-03-14 00:23:38 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>RangePatch.txt</filename>
            <type>text/plain</type>
            <size>142442</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDMwOTA0KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCSh3b3JraW5nIGNvcHkpCkBAIC00MTEsNyArNDExLDcgQEAgX19aTjdXZWJDb3JlNUZyYW1l
QzFFUE5TXzRQYWdlRVBOU18yMUhUTQogX19aTjdXZWJDb3JlNUltYWdlMTBnZXROU0ltYWdlRXYK
IF9fWk43V2ViQ29yZTVJbWFnZTIwbG9hZFBsYXRmb3JtUmVzb3VyY2VFUEtjCiBfX1pON1dlYkNv
cmU1SW1hZ2UyMWdldFRJRkZSZXByZXNlbnRhdGlvbkV2Ci1fX1pON1dlYkNvcmU1UmFuZ2VDMUVQ
TlNfOERvY3VtZW50RVBOU180Tm9kZUVpUzRfaQorX19aTjdXZWJDb3JlNVJhbmdlNmNyZWF0ZUVO
M1dURjEwUGFzc1JlZlB0cklOU184RG9jdW1lbnRFRUVOUzJfSU5TXzROb2RlRUVFaVM2X2kKIF9f
Wk43V2ViQ29yZTVSYW5nZUQxRXYKIF9fWk43V2ViQ29yZTVjYWNoZUV2CiBfX1pON1dlYkNvcmU1
ZXF1YWxFUE5TXzEwU3RyaW5nSW1wbEVQS2MKSW5kZXg6IFdlYkNvcmUvZG9tL0NoYXJhY3RlckRh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCShyZXZp
c2lvbiAzMDkwNCkKKysrIFdlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCwxMCArMzgsMTAgQEAgQ2hhcmFjdGVyRGF0YTo6Q2hhcmFjdGVyRGF0YShEb2N1
bWVudCAqZAogewogfQogCi1DaGFyYWN0ZXJEYXRhOjpDaGFyYWN0ZXJEYXRhKERvY3VtZW50ICpk
b2MsIGNvbnN0IFN0cmluZyAmX3RleHQpCi0gICAgOiBFdmVudFRhcmdldE5vZGUoZG9jKQorQ2hh
cmFjdGVyRGF0YTo6Q2hhcmFjdGVyRGF0YShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCkKKyAgICA6IEV2ZW50VGFyZ2V0Tm9kZShkb2N1bWVudCkKIHsKLSAgICBtX2RhdGEg
PSBfdGV4dC5pbXBsKCkgPyBfdGV4dC5pbXBsKCkgOiBTdHJpbmdJbXBsOjplbXB0eSgpOworICAg
IG1fZGF0YSA9IHRleHQuaW1wbCgpID8gdGV4dC5pbXBsKCkgOiBTdHJpbmdJbXBsOjplbXB0eSgp
OwogfQogCiBDaGFyYWN0ZXJEYXRhOjp+Q2hhcmFjdGVyRGF0YSgpCkBAIC03MywxNyArNzMsMTYg
QEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjpzZXREYXRhKGNvbnN0IFN0cmluZwogICAgIGRvY3VtZW50
KCktPnJlbW92ZU1hcmtlcnModGhpcyk7CiB9CiAKLVN0cmluZyBDaGFyYWN0ZXJEYXRhOjpzdWJz
dHJpbmdEYXRhKCBjb25zdCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IHVuc2lnbmVkIGNvdW50LCBF
eGNlcHRpb25Db2RlJiBlYykKK1N0cmluZyBDaGFyYWN0ZXJEYXRhOjpzdWJzdHJpbmdEYXRhKHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IGVjID0gMDsKICAgICBjaGVja0NoYXJEYXRhT3BlcmF0aW9uKG9mZnNldCwgZWMpOwogICAgIGlm
IChlYykKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCiAgICAgcmV0dXJuIG1fZGF0YS0+c3Vi
c3RyaW5nKG9mZnNldCwgY291bnQpOwogfQogCi12b2lkIENoYXJhY3RlckRhdGE6OmFwcGVuZERh
dGEoIGNvbnN0IFN0cmluZyAmYXJnLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ2hhcmFjdGVy
RGF0YTo6YXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIGFyZywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgZWMgPSAwOwogCkBAIC0xMDgsNyArMTA3LDcgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjph
cHBlbmREYXRhKCBjb25zdCBTdAogICAgIGRpc3BhdGNoTW9kaWZpZWRFdmVudChvbGRTdHIuZ2V0
KCkpOwogfQogCi12b2lkIENoYXJhY3RlckRhdGE6Omluc2VydERhdGEoIGNvbnN0IHVuc2lnbmVk
IG9mZnNldCwgY29uc3QgU3RyaW5nICZhcmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDaGFy
YWN0ZXJEYXRhOjppbnNlcnREYXRhKHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiBhcmcs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKICAgICBjaGVja0NoYXJEYXRhT3Bl
cmF0aW9uKG9mZnNldCwgZWMpOwpAQCAtMTI2LDIzICsxMjUsMjcgQEAgdm9pZCBDaGFyYWN0ZXJE
YXRhOjppbnNlcnREYXRhKCBjb25zdCB1bgogICAgICAgICBhdHRhY2goKTsKICAgICB9IGVsc2Ug
aWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihyZW5kZXJl
cigpKS0+c2V0VGV4dFdpdGhPZmZzZXQobV9kYXRhLCBvZmZzZXQsIDApOwotICAgIAorCiAgICAg
ZGlzcGF0Y2hNb2RpZmllZEV2ZW50KG9sZFN0ci5nZXQoKSk7CiAgICAgCi0gICAgLy8gdXBkYXRl
IHRoZSBtYXJrZXJzIGZvciBzcGVsbCBjaGVja2luZyBhbmQgZ3JhbW1hciBjaGVja2luZwotICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGFyZy5sZW5ndGgoKTsKLSAgICBkb2N1bWVudCgpLT5zaGlmdE1h
cmtlcnModGhpcywgb2Zmc2V0LCBsZW5ndGgpOworICAgIGRvY3VtZW50KCktPnRleHRJbnNlcnRl
ZCh0aGlzLCBvZmZzZXQsIGFyZy5sZW5ndGgoKSk7CiB9CiAKLXZvaWQgQ2hhcmFjdGVyRGF0YTo6
ZGVsZXRlRGF0YSggY29uc3QgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCB1bnNpZ25lZCBjb3VudCwg
RXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIENoYXJhY3RlckRhdGE6OmRlbGV0ZURhdGEodW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMg
PSAwOwogICAgIGNoZWNrQ2hhckRhdGFPcGVyYXRpb24ob2Zmc2V0LCBlYyk7CiAgICAgaWYgKGVj
KQogICAgICAgICByZXR1cm47CiAKKyAgICB1bnNpZ25lZCByZWFsQ291bnQ7CisgICAgaWYgKG9m
ZnNldCArIGNvdW50ID4gbV9kYXRhLT5sZW5ndGgoKSkKKyAgICAgICAgcmVhbENvdW50ID0gbV9k
YXRhLT5sZW5ndGgoKSAtIG9mZnNldDsKKyAgICBlbHNlCisgICAgICAgIHJlYWxDb3VudCA9IGNv
dW50OworCiAgICAgU3RyaW5nIG5ld1N0ciA9IG1fZGF0YTsKLSAgICBuZXdTdHIucmVtb3ZlKG9m
ZnNldCwgY291bnQpOworICAgIG5ld1N0ci5yZW1vdmUob2Zmc2V0LCByZWFsQ291bnQpOwogCiAg
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IG9sZFN0ciA9IG1fZGF0YTsKICAgICBtX2RhdGEgPSBuZXdT
dHIuaW1wbCgpOwpAQCAtMTU1LDEyICsxNTgsMTAgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjpkZWxl
dGVEYXRhKCBjb25zdCB1bgogCiAgICAgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KG9sZFN0ci5nZXQo
KSk7CiAKLSAgICAvLyB1cGRhdGUgdGhlIG1hcmtlcnMgZm9yIHNwZWxsIGNoZWNraW5nIGFuZCBn
cmFtbWFyIGNoZWNraW5nCi0gICAgZG9jdW1lbnQoKS0+cmVtb3ZlTWFya2Vycyh0aGlzLCBvZmZz
ZXQsIGNvdW50KTsKLSAgICBkb2N1bWVudCgpLT5zaGlmdE1hcmtlcnModGhpcywgb2Zmc2V0ICsg
Y291bnQsIC1zdGF0aWNfY2FzdDxpbnQ+KGNvdW50KSk7CisgICAgZG9jdW1lbnQoKS0+dGV4dFJl
bW92ZWQodGhpcywgb2Zmc2V0LCByZWFsQ291bnQpOwogfQogCi12b2lkIENoYXJhY3RlckRhdGE6
OnJlcGxhY2VEYXRhKCBjb25zdCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IHVuc2lnbmVkIGNvdW50
LCBjb25zdCBTdHJpbmcgJmFyZywgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIENoYXJhY3RlckRh
dGE6OnJlcGxhY2VEYXRhKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQsIGNvbnN0IFN0
cmluZyYgYXJnLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7CiAgICAgY2hlY2tD
aGFyRGF0YU9wZXJhdGlvbihvZmZzZXQsIGVjKTsKQEAgLTE2OSw3ICsxNzAsNyBAQCB2b2lkIENo
YXJhY3RlckRhdGE6OnJlcGxhY2VEYXRhKCBjb25zdCB1CiAKICAgICB1bnNpZ25lZCByZWFsQ291
bnQ7CiAgICAgaWYgKG9mZnNldCArIGNvdW50ID4gbV9kYXRhLT5sZW5ndGgoKSkKLSAgICAgICAg
cmVhbENvdW50ID0gbV9kYXRhLT5sZW5ndGgoKS1vZmZzZXQ7CisgICAgICAgIHJlYWxDb3VudCA9
IG1fZGF0YS0+bGVuZ3RoKCkgLSBvZmZzZXQ7CiAgICAgZWxzZQogICAgICAgICByZWFsQ291bnQg
PSBjb3VudDsKIApAQCAtMTg5LDkgKzE5MCw4IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6cmVwbGFj
ZURhdGEoIGNvbnN0IHUKICAgICBkaXNwYXRjaE1vZGlmaWVkRXZlbnQob2xkU3RyLmdldCgpKTsK
ICAgICAKICAgICAvLyB1cGRhdGUgdGhlIG1hcmtlcnMgZm9yIHNwZWxsIGNoZWNraW5nIGFuZCBn
cmFtbWFyIGNoZWNraW5nCi0gICAgaW50IGRpZmYgPSBhcmcubGVuZ3RoKCkgLSBjb3VudDsKLSAg
ICBkb2N1bWVudCgpLT5yZW1vdmVNYXJrZXJzKHRoaXMsIG9mZnNldCwgY291bnQpOwotICAgIGRv
Y3VtZW50KCktPnNoaWZ0TWFya2Vycyh0aGlzLCBvZmZzZXQgKyBjb3VudCwgZGlmZik7CisgICAg
ZG9jdW1lbnQoKS0+dGV4dFJlbW92ZWQodGhpcywgb2Zmc2V0LCByZWFsQ291bnQpOworICAgIGRv
Y3VtZW50KCktPnRleHRJbnNlcnRlZCh0aGlzLCBvZmZzZXQsIGFyZy5sZW5ndGgoKSk7CiB9CiAK
IFN0cmluZyBDaGFyYWN0ZXJEYXRhOjpub2RlVmFsdWUoKSBjb25zdApAQCAtMjAxLDE4ICsyMDEs
MTYgQEAgU3RyaW5nIENoYXJhY3RlckRhdGE6Om5vZGVWYWx1ZSgpIGNvbnN0CiAKIGJvb2wgQ2hh
cmFjdGVyRGF0YTo6Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1f
ZGF0YSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpOwot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiAhbV9kYXRhIHx8IG1fZGF0YS0+Y29udGFpbnNP
bmx5V2hpdGVzcGFjZSgpOwogfQogCi12b2lkIENoYXJhY3RlckRhdGE6OnNldE5vZGVWYWx1ZSgg
Y29uc3QgU3RyaW5nICZfbm9kZVZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ2hhcmFj
dGVyRGF0YTo6c2V0Tm9kZVZhbHVlKGNvbnN0IFN0cmluZyYgbm9kZVZhbHVlLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICAvLyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IHRha2VuIGNh
cmUgb2YgYnkgc2V0RGF0YSgpCi0gICAgc2V0RGF0YShfbm9kZVZhbHVlLCBlYyk7CisgICAgc2V0
RGF0YShub2RlVmFsdWUsIGVjKTsKIH0KIAotdm9pZCBDaGFyYWN0ZXJEYXRhOjpkaXNwYXRjaE1v
ZGlmaWVkRXZlbnQoU3RyaW5nSW1wbCAqcHJldlZhbHVlKQordm9pZCBDaGFyYWN0ZXJEYXRhOjpk
aXNwYXRjaE1vZGlmaWVkRXZlbnQoU3RyaW5nSW1wbCogcHJldlZhbHVlKQogewogICAgIGlmIChw
YXJlbnROb2RlKCkpCiAgICAgICAgIHBhcmVudE5vZGUoKS0+Y2hpbGRyZW5DaGFuZ2VkKCk7CkBA
IC0yMjMsNyArMjIxLDcgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjpkaXNwYXRjaE1vZGlmaWVkRXZl
bgogICAgIGRpc3BhdGNoU3VidHJlZU1vZGlmaWVkRXZlbnQoKTsKIH0KIAotdm9pZCBDaGFyYWN0
ZXJEYXRhOjpjaGVja0NoYXJEYXRhT3BlcmF0aW9uKCBjb25zdCB1bnNpZ25lZCBvZmZzZXQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDaGFyYWN0ZXJEYXRhOjpjaGVja0NoYXJEYXRhT3BlcmF0
aW9uKHVuc2lnbmVkIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwog
CkBAIC0yNDEsOSArMjM5LDkgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjpjaGVja0NoYXJEYXRhT3Bl
cmF0aQogICAgIH0KIH0KIAotaW50IENoYXJhY3RlckRhdGE6Om1heENoYXJhY3Rlck9mZnNldCgp
IGNvbnN0IAoraW50IENoYXJhY3RlckRhdGE6Om1heENoYXJhY3Rlck9mZnNldCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIChpbnQpbGVuZ3RoKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
bGVuZ3RoKCkpOwogfQogCiBib29sIENoYXJhY3RlckRhdGE6OnJlbmRlcmVySXNOZWVkZWQoUmVu
ZGVyU3R5bGUgKnN0eWxlKQpJbmRleDogV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlzaW9uIDMwOTA0
KQorKysgV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5
OCw2ICs2OTgsOCBAQCB2b2lkIENvbnRhaW5lck5vZGU6OnJlbW92ZWRGcm9tVHJlZShib29sCiB2
b2lkIENvbnRhaW5lck5vZGU6OmNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwg
Tm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0
YSkKIHsKICAgICBOb2RlOjpjaGlsZHJlbkNoYW5nZWQoY2hhbmdlZEJ5UGFyc2VyLCBiZWZvcmVD
aGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEpOworICAgIGlmICghY2hhbmdlZEJ5
UGFyc2VyICYmIGNoaWxkQ291bnREZWx0YSkKKyAgICAgICAgZG9jdW1lbnQoKS0+bm9kZUNoaWxk
cmVuQ2hhbmdlZCh0aGlzLCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVs
dGEpOwogICAgIGlmIChkb2N1bWVudCgpLT5oYXNOb2RlTGlzdHMoKSkKICAgICAgICAgbm90aWZ5
Tm9kZUxpc3RzQ2hpbGRyZW5DaGFuZ2VkKCk7CiB9CkBAIC05NzMsNyArOTc1LDcgQEAgc3RhdGlj
IHZvaWQgZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMoTgogICAgIERvY1B0cjxEb2N1bWVudD4g
ZG9jID0gY2hpbGQtPmRvY3VtZW50KCk7CiAKICAgICAvLyB1cGRhdGUgYXV4aWxpYXJ5IGRvYyBp
bmZvIChlLmcuIGl0ZXJhdG9ycykgdG8gbm90ZSB0aGF0IG5vZGUgaXMgYmVpbmcgcmVtb3ZlZAot
ICAgIGRvYy0+bm90aWZ5QmVmb3JlTm9kZVJlbW92YWwoY2hpbGQpOyAvLyAjIyMgdXNlIGV2ZW50
cyBpbnN0ZWFkCisgICAgZG9jLT5ub2RlV2lsbEJlUmVtb3ZlZChjaGlsZCk7CiAKICAgICAvLyBk
aXNwYXRjaCBwcmUtcmVtb3ZhbCBtdXRhdGlvbiBldmVudHMKICAgICBpZiAoYy0+cGFyZW50Tm9k
ZSgpICYmIApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMzA5MDQpCisrKyBXZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OSw2ICszOTksNyBAQCBEb2N1bWVudDo6
fkRvY3VtZW50KCkKICAgICBBU1NFUlQoIXJlbmRlcmVyKCkpOwogICAgIEFTU0VSVCghbV9pblBh
Z2VDYWNoZSk7CiAgICAgQVNTRVJUKCFtX3NhdmVkUmVuZGVyZXIpOworICAgIEFTU0VSVChtX3Jh
bmdlcy5pc0VtcHR5KCkpOwogCiAgICAgcmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKIApAQCAt
MTAwOCw3ICsxMDA5LDcgQEAgU2V0dGluZ3MqIERvY3VtZW50OjpzZXR0aW5ncygpIGNvbnN0CiAK
IFBhc3NSZWZQdHI8UmFuZ2U+IERvY3VtZW50OjpjcmVhdGVSYW5nZSgpCiB7Ci0gICAgcmV0dXJu
IG5ldyBSYW5nZSh0aGlzKTsKKyAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZSh0aGlzKTsKIH0KIAog
UGFzc1JlZlB0cjxOb2RlSXRlcmF0b3I+IERvY3VtZW50OjpjcmVhdGVOb2RlSXRlcmF0b3IoTm9k
ZSogcm9vdCwgdW5zaWduZWQgd2hhdFRvU2hvdywgCkBAIC0yNDAzLDE2ICsyNDA0LDc0IEBAIHZv
aWQgRG9jdW1lbnQ6OmRldGFjaE5vZGVJdGVyYXRvcihOb2RlSXQKICAgICBtX25vZGVJdGVyYXRv
cnMucmVtb3ZlKG5pKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6bm90aWZ5QmVmb3JlTm9kZVJlbW92
YWwoTm9kZSAqbikKK3ZvaWQgRG9jdW1lbnQ6Om5vZGVDaGlsZHJlbkNoYW5nZWQoQ29udGFpbmVy
Tm9kZSogY29udGFpbmVyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmdGVyQ2hhbmdlLCBp
bnQgY2hpbGRDb3VudERlbHRhKQogewotICAgIGlmIChGcmFtZSogZiA9IGZyYW1lKCkpIHsKLSAg
ICAgICAgZi0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5ub2RlV2lsbEJlUmVtb3ZlZChuKTsKLSAg
ICAgICAgZi0+ZHJhZ0NhcmV0Q29udHJvbGxlcigpLT5ub2RlV2lsbEJlUmVtb3ZlZChuKTsKKyAg
ICBOb2RlV2l0aEluZGV4QWZ0ZXIgYmVmb3JlQ2hhbmdlV2l0aEluZGV4KGJlZm9yZUNoYW5nZSk7
CisgICAgUGFyZW50QW5kTm9kZVdpdGhJbmRleEJlZm9yZSBhZnRlckNoYW5nZVdpdGhJbmRleChj
b250YWluZXIsIGFmdGVyQ2hhbmdlKTsKKyAgICBIYXNoU2V0PFJhbmdlKj46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fcmFuZ2VzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxSYW5nZSo+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAg
ICAgKCppdCktPm5vZGVDaGlsZHJlbkNoYW5nZWQoYmVmb3JlQ2hhbmdlV2l0aEluZGV4LCBhZnRl
ckNoYW5nZVdpdGhJbmRleCwgY2hpbGRDb3VudERlbHRhKTsKK30KKwordm9pZCBEb2N1bWVudDo6
bm9kZVdpbGxCZVJlbW92ZWQoTm9kZSogbikKK3sKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8Tm9k
ZUl0ZXJhdG9yKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbm9kZUl0ZXJhdG9ycy5lbmQoKTsK
KyAgICAgICAgZm9yIChIYXNoU2V0PE5vZGVJdGVyYXRvcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fbm9kZUl0ZXJhdG9ycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICAo
Kml0KS0+bm9kZVdpbGxCZVJlbW92ZWQobik7CisgICAgfQorCisgICAgeworICAgICAgICBOb2Rl
V2l0aEluZGV4IG5vZGVXaXRoSW5kZXgobik7CisgICAgICAgIEhhc2hTZXQ8UmFuZ2UqPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9yYW5nZXMuZW5kKCk7CisgICAgICAgIGZvciAoSGFzaFNldDxS
YW5nZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgICAgICgqaXQpLT5ub2RlV2lsbEJlUmVtb3ZlZChub2RlV2l0aEluZGV4
KTsKICAgICB9CiAKLSAgICBIYXNoU2V0PE5vZGVJdGVyYXRvcio+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX25vZGVJdGVyYXRvcnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PE5vZGVJdGVyYXRv
cio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fbm9kZUl0ZXJhdG9ycy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5ub3RpZnlCZWZvcmVOb2RlUmVtb3ZhbChuKTsKKyAg
ICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgeworICAgICAgICBmcmFtZS0+c2Vs
ZWN0aW9uQ29udHJvbGxlcigpLT5ub2RlV2lsbEJlUmVtb3ZlZChuKTsKKyAgICAgICAgZnJhbWUt
PmRyYWdDYXJldENvbnRyb2xsZXIoKS0+bm9kZVdpbGxCZVJlbW92ZWQobik7CisgICAgfQorfQor
Cit2b2lkIERvY3VtZW50Ojp0ZXh0SW5zZXJ0ZWQoQ2hhcmFjdGVyRGF0YSogdGV4dCwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgSGFzaFNldDxSYW5nZSo+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmFuZ2Uq
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
CisgICAgICAgICgqaXQpLT50ZXh0SW5zZXJ0ZWQodGV4dCwgb2Zmc2V0LCBsZW5ndGgpOworCisg
ICAgLy8gVXBkYXRlIHRoZSBtYXJrZXJzIGZvciBzcGVsbGluZyBhbmQgZ3JhbW1hciBjaGVja2lu
Zy4KKyAgICBzaGlmdE1hcmtlcnModGV4dCwgb2Zmc2V0LCBsZW5ndGgpOworfQorCit2b2lkIERv
Y3VtZW50Ojp0ZXh0UmVtb3ZlZChDaGFyYWN0ZXJEYXRhKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBIYXNoU2V0PFJhbmdlKj46OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fcmFuZ2VzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxSYW5nZSo+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAg
KCppdCktPnRleHRSZW1vdmVkKHRleHQsIG9mZnNldCwgbGVuZ3RoKTsKKworICAgIC8vIFVwZGF0
ZSB0aGUgbWFya2VycyBmb3Igc3BlbGxpbmcgYW5kIGdyYW1tYXIgY2hlY2tpbmcuCisgICAgcmVt
b3ZlTWFya2Vycyh0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgc2hpZnRNYXJrZXJzKHRleHQs
IG9mZnNldCArIGxlbmd0aCwgMCAtIGxlbmd0aCk7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OnRleHRO
b2Rlc01lcmdlZChUZXh0KiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpCit7CisgICAgTm9kZVdp
dGhJbmRleCBvbGROb2RlV2l0aEluZGV4KG9sZE5vZGUpOworICAgIEhhc2hTZXQ8UmFuZ2UqPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYW5nZXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJh
bmdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQorICAgICAgICAoKml0KS0+dGV4dE5vZGVzTWVyZ2VkKG9sZE5vZGVXaXRoSW5kZXgsIG9m
ZnNldCk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXBkYXRlIG1hcmtlcnMgZm9yIHNw
ZWxsaW5nIGFuZCBncmFtbWFyIGNoZWNraW5nLgorfQorCit2b2lkIERvY3VtZW50Ojp0ZXh0Tm9k
ZVNwbGl0KFRleHQqIG9sZE5vZGUpCit7CisgICAgSGFzaFNldDxSYW5nZSo+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3Jhbmdlcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmFuZ2UqPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAg
ICAgICgqaXQpLT50ZXh0Tm9kZVNwbGl0KG9sZE5vZGUpOworCisgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHVwZGF0ZSBtYXJrZXJzIGZvciBzcGVsbGluZyBhbmQgZ3JhbW1hciBjaGVja2luZy4K
IH0KIAogRE9NV2luZG93KiBEb2N1bWVudDo6ZGVmYXVsdFZpZXcoKSBjb25zdApAQCAtMjQ1Nyw5
ICsyNTE2LDkgQEAgUGFzc1JlZlB0cjxFdmVudD4gRG9jdW1lbnQ6OmNyZWF0ZUV2ZW50KAogICAg
IHJldHVybiAwOwogfQogCi1DU1NTdHlsZURlY2xhcmF0aW9uICpEb2N1bWVudDo6Z2V0T3ZlcnJp
ZGVTdHlsZShFbGVtZW50ICovKmVsdCovLCBjb25zdCBTdHJpbmcgJi8qcHNldWRvRWx0Ki8pCitD
U1NTdHlsZURlY2xhcmF0aW9uKiBEb2N1bWVudDo6Z2V0T3ZlcnJpZGVTdHlsZShFbGVtZW50Kiwg
Y29uc3QgU3RyaW5nJikKIHsKLSAgICByZXR1cm4gMDsgLy8gIyMjCisgICAgcmV0dXJuIDA7CiB9
CiAKIHZvaWQgRG9jdW1lbnQ6OmhhbmRsZVdpbmRvd0V2ZW50KEV2ZW50ICpldnQsIGJvb2wgdXNl
Q2FwdHVyZSkKQEAgLTM4MjIsNCArMzg4MSwxNiBAQCB2b2lkIERvY3VtZW50OjpzdG9wRGF0YWJh
c2VzKCkKIAogI2VuZGlmCiAKK3ZvaWQgRG9jdW1lbnQ6OmF0dGFjaFJhbmdlKFJhbmdlKiByYW5n
ZSkKK3sKKyAgICBBU1NFUlQoIW1fcmFuZ2VzLmNvbnRhaW5zKHJhbmdlKSk7CisgICAgbV9yYW5n
ZXMuYWRkKHJhbmdlKTsKK30KKwordm9pZCBEb2N1bWVudDo6ZGV0YWNoUmFuZ2UoUmFuZ2UqIHJh
bmdlKQoreworICAgIEFTU0VSVChtX3Jhbmdlcy5jb250YWlucyhyYW5nZSkpOworICAgIG1fcmFu
Z2VzLnJlbW92ZShyYW5nZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAkocmV2aXNpb24gMzA5MDQpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw2ICs1NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBBdHRy
aWJ1dGU7CiAgICAgY2xhc3MgQ0RBVEFTZWN0aW9uOwogICAgIGNsYXNzIENhY2hlZENTU1N0eWxl
U2hlZXQ7CisgICAgY2xhc3MgQ2hhcmFjdGVyRGF0YTsKICAgICBjbGFzcyBDU1NTdHlsZURlY2xh
cmF0aW9uOwogICAgIGNsYXNzIENTU1N0eWxlU2VsZWN0b3I7CiAgICAgY2xhc3MgQ1NTU3R5bGVT
aGVldDsKQEAgLTQ3Miw3ICs0NzMsMTggQEAgcHVibGljOgogCiAgICAgdm9pZCBhdHRhY2hOb2Rl
SXRlcmF0b3IoTm9kZUl0ZXJhdG9yKik7CiAgICAgdm9pZCBkZXRhY2hOb2RlSXRlcmF0b3IoTm9k
ZUl0ZXJhdG9yKik7Ci0gICAgdm9pZCBub3RpZnlCZWZvcmVOb2RlUmVtb3ZhbChOb2RlKik7CisK
KyAgICB2b2lkIGF0dGFjaFJhbmdlKFJhbmdlKik7CisgICAgdm9pZCBkZXRhY2hSYW5nZShSYW5n
ZSopOworCisgICAgdm9pZCBub2RlQ2hpbGRyZW5DaGFuZ2VkKENvbnRhaW5lck5vZGUqIGNvbnRh
aW5lciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291
bnREZWx0YSk7CisgICAgdm9pZCBub2RlV2lsbEJlUmVtb3ZlZChOb2RlKik7CisKKyAgICB2b2lk
IHRleHRJbnNlcnRlZChDaGFyYWN0ZXJEYXRhKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgIHZvaWQgdGV4dFJlbW92ZWQoQ2hhcmFjdGVyRGF0YSosIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIHRleHROb2Rlc01lcmdlZChUZXh0KiBv
bGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpOworICAgIHZvaWQgdGV4dE5vZGVTcGxpdChUZXh0KiBv
bGROb2RlKTsKKwogICAgIERPTVdpbmRvdyogZGVmYXVsdFZpZXcoKSBjb25zdDsKICAgICBQYXNz
UmVmUHRyPEV2ZW50PiBjcmVhdGVFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50VHlwZSwgRXhjZXB0
aW9uQ29kZSYpOwogCkBAIC03NDgsNiArNzYwLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBt
X2RvbXRyZWVfdmVyc2lvbjsKICAgICAKICAgICBIYXNoU2V0PE5vZGVJdGVyYXRvcio+IG1fbm9k
ZUl0ZXJhdG9yczsKKyAgICBIYXNoU2V0PFJhbmdlKj4gbV9yYW5nZXM7CiAKICAgICB1bnNpZ25l
ZCBzaG9ydCBtX2xpc3RlbmVyVHlwZXM7CiAgICAgUmVmUHRyPFN0eWxlU2hlZXRMaXN0PiBtX3N0
eWxlU2hlZXRzOwpAQCAtOTUwLDYgKzk2Myw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNo
U2V0PERhdGFiYXNlKj4gRGF0YWJhc2VTZXQ7CiAgICAgT3duUHRyPERhdGFiYXNlU2V0PiBtX29w
ZW5EYXRhYmFzZVNldDsKICNlbmRpZgorCiAjaWYgVVNFKExPV19CQU5EV0lEVEhfRElTUExBWSkK
ICAgICBib29sIG1faW5Mb3dCYW5kd2lkdGhEaXNwbGF5OwogI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAko
cmV2aXNpb24gMzA5MDQpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIyNyw0ICsxMjI3LDE3IEBAIGJvb2wgRWxlbWVudDo6dmlydHVhbEhhc1RhZ05hbWUo
Y29uc3QgUXUKICAgICByZXR1cm4gaGFzVGFnTmFtZShuYW1lKTsKIH0KIAordm9pZCBFbGVtZW50
Ojpub3JtYWxpemVBdHRyaWJ1dGVzKCkKK3sKKyAgICAvLyBOb3JtYWxpemUgYXR0cmlidXRlcy4K
KyAgICBOYW1lZEF0dHJNYXAqIGF0dHJzID0gYXR0cmlidXRlcyh0cnVlKTsKKyAgICBpZiAoIWF0
dHJzKQorICAgICAgICByZXR1cm47CisgICAgdW5zaWduZWQgbnVtQXR0cnMgPSBhdHRycy0+bGVu
Z3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUF0dHJzOyBpKyspIHsKKyAg
ICAgICAgaWYgKEF0dHIqIGF0dHIgPSBhdHRycy0+YXR0cmlidXRlSXRlbShpKS0+YXR0cigpKQor
ICAgICAgICAgICAgYXR0ci0+bm9ybWFsaXplKCk7CisgICAgfQorfQorCiB9CkluZGV4OiBXZWJD
b3JlL2RvbS9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5oCShy
ZXZpc2lvbiAzMDkwNCkKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTExLDcgKzExMSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgS1VSTCBiYXNlVVJJKCkg
Y29uc3Q7CiAKLSAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZyb20gIHBhcmVudCBjbGFz
c2VzCisgICAgLy8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tIHBhcmVudCBjbGFzc2VzCiAg
ICAgdmlydHVhbCBOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxOb2RlPiBjbG9uZU5vZGUoYm9vbCBkZWVwKTsKICAgICB2aXJ0dWFsIFN0cmluZyBub2Rl
TmFtZSgpIGNvbnN0OwpAQCAtMTIwLDYgKzEyMCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5n
ZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIgPSBmYWxzZSwgTm9kZSogYmVmb3JlQ2hhbmdlID0gMCwg
Tm9kZSogYWZ0ZXJDaGFuZ2UgPSAwLCBpbnQgY2hpbGRDb3VudERlbHRhID0gMCk7CiAKKyAgICB2
b2lkIG5vcm1hbGl6ZUF0dHJpYnV0ZXMoKTsKKwogICAgIHZpcnR1YWwgYm9vbCBpc0lucHV0VHlw
ZUhpZGRlbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBTdHJpbmcgbm9kZU5hbWVQ
cmVzZXJ2aW5nQ2FzZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDMwOTA0KQorKysgV2ViQ29y
ZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw2NSArMjY0LDUyIEBAIHZvaWQg
Tm9kZTo6cmVtb3ZlKEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGRlcmVmKCk7CiB9CiAKLWJvb2wg
Tm9kZTo6aGFzQ2hpbGROb2RlcyggICkgY29uc3QKK2Jvb2wgTm9kZTo6aGFzQ2hpbGROb2Rlcygp
IGNvbnN0CiB7Ci0gIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
Tm9kZTo6bm9ybWFsaXplICgpCit2b2lkIE5vZGU6Om5vcm1hbGl6ZSgpCiB7Ci0gICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgTm9kZSAqY2hpbGQgPSBmaXJzdENoaWxkKCk7CisgICAgLy8g
R28gdGhyb3VnaCB0aGUgc3VidHJlZSBiZW5lYXRoIHVzLCBub3JtYWxpemluZyBhbGwgbm9kZXMu
IFRoaXMgbWVhbnMgdGhhdAorICAgIC8vIGFueSB0d28gYWRqYWNlbnQgdGV4dCBub2RlcyBhcmUg
bWVyZ2VkIHRvZ2V0aGVyLgogCi0gICAgaWYgKGlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAv
LyBOb3JtYWxpemUgYW55IGF0dHJpYnV0ZSBjaGlsZHJlbiB3ZSBtaWdodCBoYXZlIAotICAgICAg
ICBFbGVtZW50ICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCAqPih0aGlzKTsKLSAgICAg
ICAgTmFtZWRBdHRyTWFwICphdHRyTWFwID0gZWxlbWVudC0+YXR0cmlidXRlcygpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKGF0dHJNYXApIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bUF0dHJz
ID0gYXR0ck1hcC0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1BdHRyczsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgQXR0cmli
dXRlICphdHRyaWJ1dGUgPSBhdHRyTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOwotICAgICAgICAgICAg
ICAgIEF0dHIgKmF0dHIgPSBhdHRyaWJ1dGUtPmF0dHIoKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBpZiAoYXR0cikKLSAgICAgICAgICAgICAgICAgICAgYXR0ci0+bm9ybWFs
aXplKCk7CisgICAgTm9kZSogbm9kZSA9IHRoaXM7CisgICAgd2hpbGUgKE5vZGUqIGZpcnN0Q2hp
bGQgPSBub2RlLT5maXJzdENoaWxkKCkpCisgICAgICAgIG5vZGUgPSBmaXJzdENoaWxkOworICAg
IGZvciAoOzsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGVQb3N0T3JkZXIoKSkgeworICAg
ICAgICBOb2RlVHlwZSB0eXBlID0gbm9kZS0+bm9kZVR5cGUoKTsKKyAgICAgICAgaWYgKHR5cGUg
PT0gRUxFTUVOVF9OT0RFKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUp
LT5ub3JtYWxpemVBdHRyaWJ1dGVzKCk7CisKKyAgICAgICAgTm9kZSogZmlyc3RDaGlsZCA9IG5v
ZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgaWYgKGZpcnN0Q2hpbGQgJiYgIWZpcnN0Q2hpbGQt
Pm5leHRTaWJsaW5nKCkgJiYgZmlyc3RDaGlsZC0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgICAg
ICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpOworICAgICAgICAgICAgaWYg
KCF0ZXh0LT5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Cisg
ICAgICAgICAgICAgICAgdGV4dC0+cmVtb3ZlKGVjKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICAvLyBSZWN1cnNpdmVseSBnbyB0aHJvdWdoIHRoZSBzdWJ0cmVl
IGJlbmVhdGggdXMsIG5vcm1hbGl6aW5nIGFsbCBub2Rlcy4gSW4gdGhlIGNhc2UKLSAgICAvLyB3
aGVyZSB0aGVyZSBhcmUgdHdvIGFkamFjZW50IHRleHQgbm9kZXMsIHRoZXkgYXJlIG1lcmdlZCB0
b2dldGhlcgotICAgIHdoaWxlIChjaGlsZCkgewotICAgICAgICBOb2RlICpuZXh0Q2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKTsKLQotICAgICAgICBpZiAobmV4dENoaWxkICYmIGNoaWxkLT5u
b2RlVHlwZSgpID09IFRFWFRfTk9ERSAmJiBuZXh0Q2hpbGQtPm5vZGVUeXBlKCkgPT0gVEVYVF9O
T0RFKSB7Ci0gICAgICAgICAgICAvLyBDdXJyZW50IGNoaWxkIGFuZCB0aGUgbmV4dCBvbmUgYXJl
IGJvdGggdGV4dCBub2Rlcy4uLiBtZXJnZSB0aGVtCi0gICAgICAgICAgICBUZXh0ICpjdXJyZW50
VGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihjaGlsZCk7Ci0gICAgICAgICAgICBUZXh0ICpuZXh0
VGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihuZXh0Q2hpbGQpOwogCi0gICAgICAgICAgICBjdXJy
ZW50VGV4dC0+YXBwZW5kRGF0YShuZXh0VGV4dC0+ZGF0YSgpLGVjKTsKLSAgICAgICAgICAgIGlm
IChlYykKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChub2RlID09IHRoaXMp
CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgbmV4dENoaWxkLT5yZW1vdmUoZWMp
OwotICAgICAgICAgICAgaWYgKGVjKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoaWxkLT5ub3JtYWxpemUoKTsKLSAgICAg
ICAgICAgIGNoaWxkID0gbmV4dENoaWxkOworICAgICAgICBpZiAodHlwZSA9PSBURVhUX05PREUp
IHsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgTm9kZSogbmV4dFNp
YmxpbmcgPSBub2RlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgICAgIGlmICghbmV4dFNp
YmxpbmcgfHwgIW5leHRTaWJsaW5nLT5pc1RleHROb2RlKCkpCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIC8vIEN1cnJlbnQgY2hpbGQgYW5kIHRoZSBuZXh0IG9u
ZSBhcmUgYm90aCB0ZXh0IG5vZGVzLiBNZXJnZSB0aGVtLgorICAgICAgICAgICAgICAgIFRleHQq
IHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZSk7CisgICAgICAgICAgICAgICAgVGV4dCog
bmV4dFRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obmV4dFNpYmxpbmcpOworICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIG9mZnNldCA9IHRleHQtPmxlbmd0aCgpOworICAgICAgICAgICAgICAgIEV4
Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgICAgICAgICAgdGV4dC0+YXBwZW5kRGF0YShuZXh0VGV4
dC0+ZGF0YSgpLCBlYyk7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+dGV4dE5vZGVzTWVy
Z2VkKG5leHRUZXh0LCBvZmZzZXQpOworICAgICAgICAgICAgICAgIG5leHRTaWJsaW5nLT5yZW1v
dmUoZWMpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIC8vIENo
ZWNrIGlmIHdlIGhhdmUgYSBzaW5nbGUgZW1wdHkgdGV4dCBub2RlIGxlZnQgYW5kIHJlbW92ZSBp
dCBpZiBzbwotICAgIGNoaWxkID0gZmlyc3RDaGlsZCgpOwotICAgIGlmIChjaGlsZCAmJiAhY2hp
bGQtPm5leHRTaWJsaW5nKCkgJiYgY2hpbGQtPmlzVGV4dE5vZGUoKSkgewotICAgICAgICBUZXh0
ICp0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KGNoaWxkKTsKLSAgICAgICAgaWYgKHRleHQtPmRh
dGEoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjaGlsZC0+cmVtb3ZlKGVjKTsKLSAgICB9CiB9
CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgTm9kZTo6cHJlZml4KCkgY29uc3QKQEAgLTUxMiw2ICs0
OTksMTYgQEAgTm9kZSAqTm9kZTo6dHJhdmVyc2VOZXh0U2libGluZyhjb25zdCBObwogICAgIHJl
dHVybiAwOwogfQogCitOb2RlKiBOb2RlOjp0cmF2ZXJzZU5leHROb2RlUG9zdE9yZGVyKCkgY29u
c3QKK3sKKyAgICBOb2RlKiBuZXh0ID0gbmV4dFNpYmxpbmcoKTsKKyAgICBpZiAoIW5leHQpCisg
ICAgICAgIHJldHVybiBwYXJlbnROb2RlKCk7CisgICAgd2hpbGUgKE5vZGUqIGZpcnN0Q2hpbGQg
PSBuZXh0LT5maXJzdENoaWxkKCkpCisgICAgICAgIG5leHQgPSBmaXJzdENoaWxkOworICAgIHJl
dHVybiBuZXh0OworfQorCiBOb2RlICpOb2RlOjp0cmF2ZXJzZVByZXZpb3VzTm9kZShjb25zdCBO
b2RlICpzdGF5V2l0aGluKSBjb25zdAogewogICAgIGlmICh0aGlzID09IHN0YXlXaXRoaW4pCklu
ZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5o
CShyZXZpc2lvbiAzMDkwNCkKKysrIFdlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzE3LDcgKzMxNyw3IEBAIHB1YmxpYzoKICAgICAgKi8KICAgICBOb2RlKiB0cmF2ZXJzZU5l
eHROb2RlKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4gPSAwKSBjb25zdDsKICAgICAKLSAgICAvKiBM
aWtlIHRyYXZlcnNlTmV4dE5vZGUsIGJ1dCBza2lwcyBjaGlsZHJlbiBhbmQgc3RhcnRzIHdpdGgg
dGhlIG5leHQgc2libGluZy4gKi8KKyAgICAvLyBMaWtlIHRyYXZlcnNlTmV4dE5vZGUsIGJ1dCBz
a2lwcyBjaGlsZHJlbiBhbmQgc3RhcnRzIHdpdGggdGhlIG5leHQgc2libGluZy4KICAgICBOb2Rl
KiB0cmF2ZXJzZU5leHRTaWJsaW5nKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4gPSAwKSBjb25zdDsK
IAogICAgIC8qKgpAQCAtMzI3LDcgKzMyNywxMCBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgTm9k
ZSogdHJhdmVyc2VQcmV2aW91c05vZGUoY29uc3QgTm9kZSAqIHN0YXlXaXRoaW4gPSAwKSBjb25z
dDsKIAotICAgIC8qIExpa2UgdHJhdmVyc2VQcmV2aW91c05vZGUsIGJ1dCB2aXNpdHMgbm9kZXMg
YmVmb3JlIHRoZWlyIGNoaWxkcmVuLiAqLworICAgIC8vIExpa2UgdHJhdmVyc2VOZXh0Tm9kZSwg
YnV0IHZpc2l0cyBwYXJlbnRzIGFmdGVyIHRoZWlyIGNoaWxkcmVuLgorICAgIE5vZGUqIHRyYXZl
cnNlTmV4dE5vZGVQb3N0T3JkZXIoKSBjb25zdDsKKworICAgIC8vIExpa2UgdHJhdmVyc2VQcmV2
aW91c05vZGUsIGJ1dCB2aXNpdHMgcGFyZW50cyBiZWZvcmUgdGhlaXIgY2hpbGRyZW4uCiAgICAg
Tm9kZSogdHJhdmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoY29uc3QgTm9kZSAqc3RheVdpdGhp
biA9IDApIGNvbnN0OwogICAgIE5vZGUqIHRyYXZlcnNlUHJldmlvdXNTaWJsaW5nUG9zdE9yZGVy
KGNvbnN0IE5vZGUgKnN0YXlXaXRoaW4gPSAwKSBjb25zdDsKIApJbmRleDogV2ViQ29yZS9kb20v
Tm9kZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3Iu
Y3BwCShyZXZpc2lvbiAzMDkwNCkKKysrIFdlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAsNyBAQCB2b2lkIE5vZGVJdGVyYXRvcjo6ZGV0YWNo
KCkKICAgICBtX3JlZmVyZW5jZU5vZGUubm9kZS5jbGVhcigpOwogfQogCi12b2lkIE5vZGVJdGVy
YXRvcjo6bm90aWZ5QmVmb3JlTm9kZVJlbW92YWwoTm9kZSogcmVtb3ZlZE5vZGUpCit2b2lkIE5v
ZGVJdGVyYXRvcjo6bm9kZVdpbGxCZVJlbW92ZWQoTm9kZSogcmVtb3ZlZE5vZGUpCiB7CiAgICAg
dXBkYXRlRm9yTm9kZVJlbW92YWwocmVtb3ZlZE5vZGUsIG1fcmVmZXJlbmNlTm9kZSk7CiB9Cklu
ZGV4OiBXZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Ob2RlSXRlcmF0b3IuaAkocmV2aXNpb24gMzA5MDQpCisrKyBXZWJDb3JlL2RvbS9Ob2RlSXRl
cmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIGJvb2wgcG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUoKSBjb25zdCB7IHJl
dHVybiBtX3JlZmVyZW5jZU5vZGUuaXNQb2ludGVyQmVmb3JlTm9kZTsgfQogCiAgICAgICAgIC8v
IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBhbnkgbm9kZSBpcyByZW1vdmVkIGZyb20g
dGhlIGRvY3VtZW50IHRyZWUuCi0gICAgICAgIHZvaWQgbm90aWZ5QmVmb3JlTm9kZVJlbW92YWwo
Tm9kZSogbm9kZVRvQmVSZW1vdmVkKTsKKyAgICAgICAgdm9pZCBub2RlV2lsbEJlUmVtb3ZlZChO
b2RlKik7CiAKICAgICAgICAgLy8gRm9yIG5vbi1KUyBiaW5kaW5ncy4gU2lsZW50bHkgaWdub3Jl
cyB0aGUgSmF2YVNjcmlwdCBleGNlcHRpb24gaWYgYW55LgogICAgICAgICBOb2RlKiBuZXh0Tm9k
ZShFeGNlcHRpb25Db2RlJiBlYykgeyBLSlM6OkpTVmFsdWUqIGV4Y2VwdGlvbjsgcmV0dXJuIG5l
eHROb2RlKGVjLCBleGNlcHRpb24pOyB9CkluZGV4OiBXZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vUmFuZ2UuY3BwCShyZXZpc2lvbiAzMDkwNCkKKysrIFdl
YkNvcmUvZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5ICsxLDkgQEAKLS8qKgor
LyoKICAqIChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAoQykgMjAwMCBH
dW5uc3RlaW4gTHllIChndW5uc3RlaW5AbmV0Y29tLm5vKQogICogKEMpIDIwMDAgRnJlZGVyaWsg
SG9sbGplbiAoZnJlZGVyaWsuaG9sbGplbkBoaWcubm8pCiAgKiAoQykgMjAwMSBQZXRlciBLZWxs
eSAocG1rQHBvc3QuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTU4LDM0ICs1OCw2NCBAQCB1bnNpZ25lZCBSYW5nZUNvdW50
ZXI6OmNvdW50ID0gMDsKIHN0YXRpYyBSYW5nZUNvdW50ZXIgcmFuZ2VDb3VudGVyOwogI2VuZGlm
CiAKLVJhbmdlOjpSYW5nZShEb2N1bWVudCogb3duZXJEb2N1bWVudCkKLSAgICA6IFJlZkNvdW50
ZWQ8UmFuZ2U+KDApCi0gICAgLCBtX293bmVyRG9jdW1lbnQob3duZXJEb2N1bWVudCkKLSAgICAs
IG1fc3RhcnRDb250YWluZXIob3duZXJEb2N1bWVudCkKLSAgICAsIG1fc3RhcnRPZmZzZXQoMCkK
LSAgICAsIG1fZW5kQ29udGFpbmVyKG93bmVyRG9jdW1lbnQpCi0gICAgLCBtX2VuZE9mZnNldCgw
KQotICAgICwgbV9kZXRhY2hlZChmYWxzZSkKK2lubGluZSB1bnNpZ25lZCBOb2RlV2l0aEluZGV4
OjppbmRleCgpCit7CisgICAgaWYgKCFtX2hhdmVJbmRleCkgeworICAgICAgICBtX2luZGV4ID0g
bV9ub2RlLT5ub2RlSW5kZXgoKTsKKyAgICAgICAgbV9oYXZlSW5kZXggPSB0cnVlOworICAgIH0K
KyAgICBBU1NFUlQobV9pbmRleCA9PSBtX25vZGUtPm5vZGVJbmRleCgpKTsKKyAgICByZXR1cm4g
bV9pbmRleDsKK30KKworaW5saW5lIHVuc2lnbmVkIFBhcmVudEFuZE5vZGVXaXRoSW5kZXhCZWZv
cmU6OmluZGV4QmVmb3JlKCkKK3sKKyAgICBpZiAoIW1faGF2ZUluZGV4KSB7CisgICAgICAgIG1f
aW5kZXhCZWZvcmUgPSBtX25vZGUgPyBtX25vZGUtPm5vZGVJbmRleCgpIDogbV9wYXJlbnQtPmNo
aWxkTm9kZUNvdW50KCk7CisgICAgICAgIG1faGF2ZUluZGV4ID0gdHJ1ZTsKKyAgICB9CisgICAg
QVNTRVJUKG1faW5kZXhCZWZvcmUgPT0gKG1fbm9kZSA/IG1fbm9kZS0+bm9kZUluZGV4KCkgOiBt
X3BhcmVudC0+Y2hpbGROb2RlQ291bnQoKSkpOworICAgIHJldHVybiBtX2luZGV4QmVmb3JlOwor
fQorCitpbmxpbmUgdW5zaWduZWQgTm9kZVdpdGhJbmRleEFmdGVyOjppbmRleEFmdGVyKCkKK3sK
KyAgICBpZiAoIW1faGF2ZUluZGV4KSB7CisgICAgICAgIG1faW5kZXhBZnRlciA9IG1fbm9kZSA/
IG1fbm9kZS0+bm9kZUluZGV4KCkgKyAxIDogMDsKKyAgICAgICAgbV9oYXZlSW5kZXggPSB0cnVl
OworICAgIH0KKyAgICBBU1NFUlQobV9pbmRleEFmdGVyID09IChtX25vZGUgPyBtX25vZGUtPm5v
ZGVJbmRleCgpICsgMSA6IDApKTsKKyAgICByZXR1cm4gbV9pbmRleEFmdGVyOworfQorCitpbmxp
bmUgUmFuZ2U6OlJhbmdlKFBhc3NSZWZQdHI8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQpCisgICAg
OiBtX293bmVyRG9jdW1lbnQob3duZXJEb2N1bWVudCkKKyAgICAsIG1fc3RhcnQobV9vd25lckRv
Y3VtZW50LCAwKQorICAgICwgbV9lbmQobV9vd25lckRvY3VtZW50LCAwKQogewogI2lmbmRlZiBO
REVCVUcKICAgICArK1JhbmdlQ291bnRlcjo6Y291bnQ7CiAjZW5kaWYKKworICAgIG1fb3duZXJE
b2N1bWVudC0+YXR0YWNoUmFuZ2UodGhpcyk7CiB9CiAKLVJhbmdlOjpSYW5nZShEb2N1bWVudCog
b3duZXJEb2N1bWVudCwKLSAgICAgICAgICAgICAgTm9kZSogc3RhcnRDb250YWluZXIsIGludCBz
dGFydE9mZnNldCwKLSAgICAgICAgICAgICAgTm9kZSogZW5kQ29udGFpbmVyLCBpbnQgZW5kT2Zm
c2V0KQotICAgIDogUmVmQ291bnRlZDxSYW5nZT4oMCkKLSAgICAsIG1fb3duZXJEb2N1bWVudChv
d25lckRvY3VtZW50KQotICAgICwgbV9zdGFydENvbnRhaW5lcihvd25lckRvY3VtZW50KQotICAg
ICwgbV9zdGFydE9mZnNldCgwKQotICAgICwgbV9lbmRDb250YWluZXIob3duZXJEb2N1bWVudCkK
LSAgICAsIG1fZW5kT2Zmc2V0KDApCi0gICAgLCBtX2RldGFjaGVkKGZhbHNlKQorUGFzc1JlZlB0
cjxSYW5nZT4gUmFuZ2U6OmNyZWF0ZShQYXNzUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50
KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmFuZ2Uob3duZXJEb2N1bWVudCkpOworfQor
CitpbmxpbmUgUmFuZ2U6OlJhbmdlKFBhc3NSZWZQdHI8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQs
IFBhc3NSZWZQdHI8Tm9kZT4gc3RhcnRDb250YWluZXIsIGludCBzdGFydE9mZnNldCwgUGFzc1Jl
ZlB0cjxOb2RlPiBlbmRDb250YWluZXIsIGludCBlbmRPZmZzZXQpCisgICAgOiBtX293bmVyRG9j
dW1lbnQob3duZXJEb2N1bWVudCkKKyAgICAsIG1fc3RhcnQobV9vd25lckRvY3VtZW50LCAwKQor
ICAgICwgbV9lbmQobV9vd25lckRvY3VtZW50LCAwKQogewogI2lmbmRlZiBOREVCVUcKICAgICAr
K1JhbmdlQ291bnRlcjo6Y291bnQ7CiAjZW5kaWYKKworICAgIG1fb3duZXJEb2N1bWVudC0+YXR0
YWNoUmFuZ2UodGhpcyk7CisKICAgICAvLyBTaW1wbHkgc2V0dGluZyB0aGUgY29udGFpbmVycyBh
bmQgb2Zmc2V0cyBkaXJlY3RseSB3b3VsZCBub3QgZG8gYW55IG9mIHRoZSBjaGVja2luZwogICAg
IC8vIHRoYXQgc2V0U3RhcnQgYW5kIHNldEVuZCBkbywgc28gd2UgbXVzdCBjYWxsIHRob3NlIGZ1
bmN0aW9ucy4KICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTk1LDExNSArMTI1LDEwMCBA
QCBSYW5nZTo6UmFuZ2UoRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQsCiAgICAgQVNTRVJUKGVjID09
IDApOwogfQogCi1SYW5nZTo6UmFuZ2UoRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQsIGNvbnN0IFBv
c2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKLSAgICA6IFJlZkNvdW50ZWQ8UmFu
Z2U+KDApCi0gICAgLCBtX293bmVyRG9jdW1lbnQob3duZXJEb2N1bWVudCkKLSAgICAsIG1fc3Rh
cnRDb250YWluZXIob3duZXJEb2N1bWVudCkKLSAgICAsIG1fc3RhcnRPZmZzZXQoMCkKLSAgICAs
IG1fZW5kQ29udGFpbmVyKG93bmVyRG9jdW1lbnQpCi0gICAgLCBtX2VuZE9mZnNldCgwKQotICAg
ICwgbV9kZXRhY2hlZChmYWxzZSkKK1Bhc3NSZWZQdHI8UmFuZ2U+IFJhbmdlOjpjcmVhdGUoUGFz
c1JlZlB0cjxEb2N1bWVudD4gb3duZXJEb2N1bWVudCwgUGFzc1JlZlB0cjxOb2RlPiBzdGFydENv
bnRhaW5lciwgaW50IHN0YXJ0T2Zmc2V0LCBQYXNzUmVmUHRyPE5vZGU+IGVuZENvbnRhaW5lciwg
aW50IGVuZE9mZnNldCkKIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgKytSYW5nZUNvdW50ZXI6OmNv
dW50OwotI2VuZGlmCi0gICAgLy8gU2ltcGx5IHNldHRpbmcgdGhlIGNvbnRhaW5lcnMgYW5kIG9m
ZnNldHMgZGlyZWN0bHkgd291bGQgbm90IGRvIGFueSBvZiB0aGUgY2hlY2tpbmcKLSAgICAvLyB0
aGF0IHNldFN0YXJ0IGFuZCBzZXRFbmQgZG8sIHNvIHdlIG11c3QgY2FsbCB0aG9zZSBmdW5jdGlv
bnMuCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgc2V0U3RhcnQoc3RhcnQubm9kZSgp
LCBzdGFydC5vZmZzZXQoKSwgZWMpOwotICAgIEFTU0VSVChlYyA9PSAwKTsKLSAgICBzZXRFbmQo
ZW5kLm5vZGUoKSwgZW5kLm9mZnNldCgpLCBlYyk7Ci0gICAgQVNTRVJUKGVjID09IDApOworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgUmFuZ2Uob3duZXJEb2N1bWVudCwgc3RhcnRDb250YWluZXIs
IHN0YXJ0T2Zmc2V0LCBlbmRDb250YWluZXIsIGVuZE9mZnNldCkpOworfQorCitQYXNzUmVmUHRy
PFJhbmdlPiBSYW5nZTo6Y3JlYXRlKFBhc3NSZWZQdHI8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQs
IGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFJhbmdlKG93bmVyRG9jdW1lbnQsIHN0YXJ0Lm5vZGUoKSwgc3RhcnQu
b2Zmc2V0KCksIGVuZC5ub2RlKCksIGVuZC5vZmZzZXQoKSkpOwogfQogCiBSYW5nZTo6flJhbmdl
KCkKIHsKKyAgICBpZiAobV9zdGFydC5jb250YWluZXIpCisgICAgICAgIG1fb3duZXJEb2N1bWVu
dC0+ZGV0YWNoUmFuZ2UodGhpcyk7CisKICNpZm5kZWYgTkRFQlVHCiAgICAgLS1SYW5nZUNvdW50
ZXI6OmNvdW50OwogI2VuZGlmCiB9CiAKLU5vZGUgKlJhbmdlOjpzdGFydENvbnRhaW5lcihFeGNl
cHRpb25Db2RlJiBlYykgY29uc3QKK05vZGUqIFJhbmdlOjpzdGFydENvbnRhaW5lcihFeGNlcHRp
b25Db2RlJiBlYykgY29uc3QKIHsKLSAgICBpZiAobV9kZXRhY2hlZCkgeworICAgIGlmICghbV9z
dGFydC5jb250YWluZXIpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIG1fc3RhcnRDb250YWluZXIuZ2V0KCk7
CisgICAgcmV0dXJuIG1fc3RhcnQuY29udGFpbmVyLmdldCgpOwogfQogCi1pbnQgUmFuZ2U6OnN0
YXJ0T2Zmc2V0KEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAordW5zaWduZWQgUmFuZ2U6OnN0YXJ0
T2Zmc2V0KEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIGlmIChtX2RldGFjaGVkKSB7
CisgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lcikgewogICAgICAgICBlYyA9IElOVkFMSURfU1RB
VEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gbV9zdGFydE9m
ZnNldDsKKyAgICByZXR1cm4gbV9zdGFydC5vZmZzZXQ7CiB9CiAKLU5vZGUgKlJhbmdlOjplbmRD
b250YWluZXIoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitOb2RlKiBSYW5nZTo6ZW5kQ29udGFp
bmVyKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIGlmIChtX2RldGFjaGVkKSB7Cisg
ICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lcikgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVf
RVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gbV9lbmRDb250YWlu
ZXIuZ2V0KCk7CisgICAgcmV0dXJuIG1fZW5kLmNvbnRhaW5lci5nZXQoKTsKIH0KIAotaW50IFJh
bmdlOjplbmRPZmZzZXQoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Cit1bnNpZ25lZCBSYW5nZTo6
ZW5kT2Zmc2V0KEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIGlmIChtX2RldGFjaGVk
KSB7CisgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lcikgewogICAgICAgICBlYyA9IElOVkFMSURf
U1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gbV9lbmRP
ZmZzZXQ7CisgICAgcmV0dXJuIG1fZW5kLm9mZnNldDsKIH0KIAotTm9kZSAqUmFuZ2U6OmNvbW1v
bkFuY2VzdG9yQ29udGFpbmVyKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorTm9kZSogUmFuZ2U6
OmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAg
IGlmIChtX2RldGFjaGVkKSB7CisgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lcikgewogICAgICAg
ICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAg
ICBOb2RlICpjb20gPSBjb21tb25BbmNlc3RvckNvbnRhaW5lcihtX3N0YXJ0Q29udGFpbmVyLmdl
dCgpLCBtX2VuZENvbnRhaW5lci5nZXQoKSk7Ci0gICAgaWYgKCFjb20pIC8vICBzaG91bGQgbmV2
ZXIgaGFwcGVuCi0gICAgICAgIGVjID0gV1JPTkdfRE9DVU1FTlRfRVJSOwotICAgIHJldHVybiBj
b207CisgICAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKG1fc3RhcnQuY29udGFpbmVy
LmdldCgpLCBtX2VuZC5jb250YWluZXIuZ2V0KCkpOwogfQogCi1Ob2RlICpSYW5nZTo6Y29tbW9u
QW5jZXN0b3JDb250YWluZXIoTm9kZSAqY29udGFpbmVyQSwgTm9kZSAqY29udGFpbmVyQikKK05v
ZGUqIFJhbmdlOjpjb21tb25BbmNlc3RvckNvbnRhaW5lcihOb2RlKiBjb250YWluZXJBLCBOb2Rl
KiBjb250YWluZXJCKQogewotICAgIE5vZGUgKnBhcmVudFN0YXJ0OwotCi0gICAgZm9yIChwYXJl
bnRTdGFydCA9IGNvbnRhaW5lckE7IHBhcmVudFN0YXJ0OyBwYXJlbnRTdGFydCA9IHBhcmVudFN0
YXJ0LT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgTm9kZSAqcGFyZW50RW5kID0gY29udGFpbmVy
QjsKLSAgICAgICAgd2hpbGUgKHBhcmVudEVuZCAmJiAocGFyZW50U3RhcnQgIT0gcGFyZW50RW5k
KSkKLSAgICAgICAgICAgIHBhcmVudEVuZCA9IHBhcmVudEVuZC0+cGFyZW50Tm9kZSgpOwotICAg
ICAgICBpZiAocGFyZW50U3RhcnQgPT0gcGFyZW50RW5kKQotICAgICAgICAgICAgYnJlYWs7Cisg
ICAgZm9yIChOb2RlKiBwYXJlbnRBID0gY29udGFpbmVyQTsgcGFyZW50QTsgcGFyZW50QSA9IHBh
cmVudEEtPnBhcmVudE5vZGUoKSkgeworICAgICAgICBmb3IgKE5vZGUqIHBhcmVudEIgPSBjb250
YWluZXJCOyBwYXJlbnRCOyBwYXJlbnRCID0gcGFyZW50Qi0+cGFyZW50Tm9kZSgpKSB7CisgICAg
ICAgICAgICBpZiAocGFyZW50QSA9PSBwYXJlbnRCKQorICAgICAgICAgICAgICAgIHJldHVybiBw
YXJlbnRBOworICAgICAgICB9CiAgICAgfQotICAgICAgICAKLSAgICByZXR1cm4gcGFyZW50U3Rh
cnQ7CisgICAgcmV0dXJuIDA7CiB9CiAKIGJvb2wgUmFuZ2U6OmNvbGxhcHNlZChFeGNlcHRpb25D
b2RlJiBlYykgY29uc3QKIHsKLSAgICBpZiAobV9kZXRhY2hlZCkgeworICAgIGlmICghbV9zdGFy
dC5jb250YWluZXIpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIChtX3N0YXJ0Q29udGFpbmVyID09IG1fZW5k
Q29udGFpbmVyICYmIG1fc3RhcnRPZmZzZXQgPT0gbV9lbmRPZmZzZXQpOworICAgIHJldHVybiBt
X3N0YXJ0LmNvbnRhaW5lciA9PSBtX2VuZC5jb250YWluZXIgJiYgbV9zdGFydC5vZmZzZXQgPT0g
bV9lbmQub2Zmc2V0OwogfQogCi12b2lkIFJhbmdlOjpzZXRTdGFydCggTm9kZSAqcmVmTm9kZSwg
aW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFJhbmdlOjpzZXRTdGFydChQYXNz
UmVmUHRyPE5vZGU+IHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewot
ICAgIGlmIChtX2RldGFjaGVkKSB7CisgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lcikgewogICAg
ICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MjE5LDMwICsyMzQsMzAgQEAgdm9pZCBSYW5nZTo6c2V0U3RhcnQoIE5vZGUgKnJlZk5vZGUsIGlu
dAogICAgIH0KIAogICAgIGVjID0gMDsKLSAgICBjaGVja05vZGVXT2Zmc2V0KHJlZk5vZGUsIG9m
ZnNldCwgZWMpOworICAgIGNoZWNrTm9kZVdPZmZzZXQocmVmTm9kZS5nZXQoKSwgb2Zmc2V0LCBl
Yyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3N0YXJ0Q29udGFpbmVy
ID0gcmVmTm9kZTsKLSAgICBtX3N0YXJ0T2Zmc2V0ID0gb2Zmc2V0OworICAgIHNldFN0YXJ0Q29u
dGFpbmVyKHJlZk5vZGUpOworICAgIG1fc3RhcnQub2Zmc2V0ID0gb2Zmc2V0OwogCiAgICAgLy8g
Y2hlY2sgaWYgZGlmZmVyZW50IHJvb3QgY29udGFpbmVyCi0gICAgTm9kZSogZW5kUm9vdENvbnRh
aW5lciA9IG1fZW5kQ29udGFpbmVyLmdldCgpOworICAgIE5vZGUqIGVuZFJvb3RDb250YWluZXIg
PSBtX2VuZC5jb250YWluZXIuZ2V0KCk7CiAgICAgd2hpbGUgKGVuZFJvb3RDb250YWluZXItPnBh
cmVudE5vZGUoKSkKICAgICAgICAgZW5kUm9vdENvbnRhaW5lciA9IGVuZFJvb3RDb250YWluZXIt
PnBhcmVudE5vZGUoKTsKLSAgICBOb2RlKiBzdGFydFJvb3RDb250YWluZXIgPSBtX3N0YXJ0Q29u
dGFpbmVyLmdldCgpOworICAgIE5vZGUqIHN0YXJ0Um9vdENvbnRhaW5lciA9IG1fc3RhcnQuY29u
dGFpbmVyLmdldCgpOwogICAgIHdoaWxlIChzdGFydFJvb3RDb250YWluZXItPnBhcmVudE5vZGUo
KSkKICAgICAgICAgc3RhcnRSb290Q29udGFpbmVyID0gc3RhcnRSb290Q29udGFpbmVyLT5wYXJl
bnROb2RlKCk7CiAgICAgaWYgKHN0YXJ0Um9vdENvbnRhaW5lciAhPSBlbmRSb290Q29udGFpbmVy
KQogICAgICAgICBjb2xsYXBzZSh0cnVlLCBlYyk7CiAgICAgLy8gY2hlY2sgaWYgbmV3IHN0YXJ0
IGFmdGVyIGVuZAotICAgIGVsc2UgaWYgKGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0Q29u
dGFpbmVyLmdldCgpLCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZENvbnRhaW5lci5nZXQoKSwgbV9lbmRP
ZmZzZXQpID4gMCkKKyAgICBlbHNlIGlmIChjb21wYXJlQm91bmRhcnlQb2ludHMobV9zdGFydC5j
b250YWluZXIuZ2V0KCksIG1fc3RhcnQub2Zmc2V0LCBtX2VuZC5jb250YWluZXIuZ2V0KCksIG1f
ZW5kLm9mZnNldCkgPiAwKQogICAgICAgICBjb2xsYXBzZSh0cnVlLCBlYyk7CiB9CiAKLXZvaWQg
UmFuZ2U6OnNldEVuZCggTm9kZSAqcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit2b2lkIFJhbmdlOjpzZXRFbmQoUGFzc1JlZlB0cjxOb2RlPiByZWZOb2RlLCBpbnQgb2Zm
c2V0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAobV9kZXRhY2hlZCkgeworICAgIGlm
ICghbV9zdGFydC5jb250YWluZXIpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI1OCw0MCArMjczLDQwIEBAIHZvaWQgUmFuZ2U6
OnNldEVuZCggTm9kZSAqcmVmTm9kZSwgaW50IG8KICAgICB9CiAKICAgICBlYyA9IDA7Ci0gICAg
Y2hlY2tOb2RlV09mZnNldChyZWZOb2RlLCBvZmZzZXQsIGVjKTsKKyAgICBjaGVja05vZGVXT2Zm
c2V0KHJlZk5vZGUuZ2V0KCksIG9mZnNldCwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9lbmRDb250YWluZXIgPSByZWZOb2RlOwotICAgIG1fZW5kT2Zmc2V0ID0g
b2Zmc2V0OworICAgIHNldEVuZENvbnRhaW5lcihyZWZOb2RlKTsKKyAgICBtX2VuZC5vZmZzZXQg
PSBvZmZzZXQ7CiAKICAgICAvLyBjaGVjayBpZiBkaWZmZXJlbnQgcm9vdCBjb250YWluZXIKLSAg
ICBOb2RlKiBlbmRSb290Q29udGFpbmVyID0gbV9lbmRDb250YWluZXIuZ2V0KCk7CisgICAgTm9k
ZSogZW5kUm9vdENvbnRhaW5lciA9IG1fZW5kLmNvbnRhaW5lci5nZXQoKTsKICAgICB3aGlsZSAo
ZW5kUm9vdENvbnRhaW5lci0+cGFyZW50Tm9kZSgpKQogICAgICAgICBlbmRSb290Q29udGFpbmVy
ID0gZW5kUm9vdENvbnRhaW5lci0+cGFyZW50Tm9kZSgpOwotICAgIE5vZGUqIHN0YXJ0Um9vdENv
bnRhaW5lciA9IG1fc3RhcnRDb250YWluZXIuZ2V0KCk7CisgICAgTm9kZSogc3RhcnRSb290Q29u
dGFpbmVyID0gbV9zdGFydC5jb250YWluZXIuZ2V0KCk7CiAgICAgd2hpbGUgKHN0YXJ0Um9vdENv
bnRhaW5lci0+cGFyZW50Tm9kZSgpKQogICAgICAgICBzdGFydFJvb3RDb250YWluZXIgPSBzdGFy
dFJvb3RDb250YWluZXItPnBhcmVudE5vZGUoKTsKICAgICBpZiAoc3RhcnRSb290Q29udGFpbmVy
ICE9IGVuZFJvb3RDb250YWluZXIpCiAgICAgICAgIGNvbGxhcHNlKGZhbHNlLCBlYyk7CiAgICAg
Ly8gY2hlY2sgaWYgbmV3IGVuZCBiZWZvcmUgc3RhcnQKLSAgICBpZiAoY29tcGFyZUJvdW5kYXJ5
UG9pbnRzKG1fc3RhcnRDb250YWluZXIuZ2V0KCksIG1fc3RhcnRPZmZzZXQsIG1fZW5kQ29udGFp
bmVyLmdldCgpLCBtX2VuZE9mZnNldCkgPiAwKQorICAgIGlmIChjb21wYXJlQm91bmRhcnlQb2lu
dHMobV9zdGFydC5jb250YWluZXIuZ2V0KCksIG1fc3RhcnQub2Zmc2V0LCBtX2VuZC5jb250YWlu
ZXIuZ2V0KCksIG1fZW5kLm9mZnNldCkgPiAwKQogICAgICAgICBjb2xsYXBzZShmYWxzZSwgZWMp
OwogfQogCi12b2lkIFJhbmdlOjpjb2xsYXBzZSggYm9vbCB0b1N0YXJ0LCBFeGNlcHRpb25Db2Rl
JiBlYykKK3ZvaWQgUmFuZ2U6OmNvbGxhcHNlKGJvb2wgdG9TdGFydCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7Ci0gICAgaWYgKG1fZGV0YWNoZWQpIHsKKyAgICBpZiAoIW1fc3RhcnQuY29udGFpbmVy
KSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAodG9TdGFydCkgeyAgLy8gY29sbGFwc2UgdG8gc3RhcnQKLSAgICAgICAg
bV9lbmRDb250YWluZXIgPSBtX3N0YXJ0Q29udGFpbmVyOwotICAgICAgICBtX2VuZE9mZnNldCA9
IG1fc3RhcnRPZmZzZXQ7CisgICAgICAgIHNldEVuZENvbnRhaW5lcihtX3N0YXJ0LmNvbnRhaW5l
cik7CisgICAgICAgIG1fZW5kLm9mZnNldCA9IG1fc3RhcnQub2Zmc2V0OwogICAgIH0gZWxzZSB7
ICAgICAgICAvLyBjb2xsYXBzZSB0byBlbmQKLSAgICAgICAgbV9zdGFydENvbnRhaW5lciA9IG1f
ZW5kQ29udGFpbmVyOwotICAgICAgICBtX3N0YXJ0T2Zmc2V0ID0gbV9lbmRPZmZzZXQ7CisgICAg
ICAgIHNldFN0YXJ0Q29udGFpbmVyKG1fZW5kLmNvbnRhaW5lcik7CisgICAgICAgIG1fc3RhcnQu
b2Zmc2V0ID0gbV9lbmQub2Zmc2V0OwogICAgIH0KIH0KIApAQCAtMzAyLDEzICszMTcsMTMgQEAg
Ym9vbCBSYW5nZTo6aXNQb2ludEluUmFuZ2UoTm9kZSogcmVmTm9kZQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKG1fZGV0YWNoZWQgJiYgcmVmTm9kZS0+YXR0YWNoZWQo
KSkgeworICAgIGlmICghbV9zdGFydC5jb250YWluZXIgJiYgcmVmTm9kZS0+YXR0YWNoZWQoKSkg
ewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgaWYgKCFtX2RldGFjaGVkICYmICFyZWZOb2RlLT5hdHRhY2hlZCgpKSB7
Ci0gICAgICAgIC8vIGZpcmVmb3ggZG9lc24ndCB0aHJvdyBhbiBleGNlcHRpb24gZm9yIHRoaXMg
Y2FzZTsgaXQgcmV0dXJucyBmYWxzZQorICAgIGlmIChtX3N0YXJ0LmNvbnRhaW5lciAmJiAhcmVm
Tm9kZS0+YXR0YWNoZWQoKSkgeworICAgICAgICAvLyBGaXJlZm94IGRvZXNuJ3QgdGhyb3cgYW4g
ZXhjZXB0aW9uIGZvciB0aGlzIGNhc2U7IGl0IHJldHVybnMgZmFsc2UuCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKQEAgLTMyMyw4ICszMzgsOCBAQCBib29sIFJhbmdlOjppc1BvaW50
SW5SYW5nZShOb2RlKiByZWZOb2RlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIHBv
aW50IGlzIG5vdCBiZWZvcmUgdGhlIHN0YXJ0IGFuZCBub3QgYWZ0ZXIgdGhlIGVuZAotICAgIGlm
ICgoY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHJlZk5vZGUsIG9mZnNldCwgbV9zdGFydENvbnRhaW5l
ci5nZXQoKSwgbV9zdGFydE9mZnNldCkgIT0gLTEpICYmIAotICAgICAgICAoY29tcGFyZUJvdW5k
YXJ5UG9pbnRzKHJlZk5vZGUsIG9mZnNldCwgbV9lbmRDb250YWluZXIuZ2V0KCksIG1fZW5kT2Zm
c2V0KSAhPSAxKSkKKyAgICBpZiAoKGNvbXBhcmVCb3VuZGFyeVBvaW50cyhyZWZOb2RlLCBvZmZz
ZXQsIG1fc3RhcnQuY29udGFpbmVyLmdldCgpLCBtX3N0YXJ0Lm9mZnNldCkgIT0gLTEpICYmIAor
ICAgICAgICAoY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHJlZk5vZGUsIG9mZnNldCwgbV9lbmQuY29u
dGFpbmVyLmdldCgpLCBtX2VuZC5vZmZzZXQpICE9IDEpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICBlbHNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM0MSwxMyArMzU2LDEzIEBAIHNo
b3J0IFJhbmdlOjpjb21wYXJlUG9pbnQoTm9kZSogcmVmTm9kZSwKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogCi0gICAgaWYgKG1fZGV0YWNoZWQgJiYgcmVmTm9kZS0+YXR0YWNoZWQoKSkgewor
ICAgIGlmICghbV9zdGFydC5jb250YWluZXIgJiYgcmVmTm9kZS0+YXR0YWNoZWQoKSkgewogICAg
ICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
LSAgICBpZiAoIW1fZGV0YWNoZWQgJiYgIXJlZk5vZGUtPmF0dGFjaGVkKCkpIHsKLSAgICAgICAg
Ly8gZmlyZWZveCBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBjYXNlOyBpdCBy
ZXR1cm5zIC0xCisgICAgaWYgKG1fc3RhcnQuY29udGFpbmVyICYmICFyZWZOb2RlLT5hdHRhY2hl
ZCgpKSB7CisgICAgICAgIC8vIEZpcmVmb3ggZG9lc24ndCB0aHJvdyBhbiBleGNlcHRpb24gZm9y
IHRoaXMgY2FzZTsgaXQgcmV0dXJucyAtMS4KICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApA
QCAtMzYyLDExICszNzcsMTEgQEAgc2hvcnQgUmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlKiByZWZO
b2RlLAogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIGNvbXBhcmUgdG8gc3RhcnQsIGFuZCBw
b2ludCBjb21lcyBiZWZvcmUKLSAgICBpZiAoY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHJlZk5vZGUs
IG9mZnNldCwgbV9zdGFydENvbnRhaW5lci5nZXQoKSwgbV9zdGFydE9mZnNldCkgPT0gLTEpCisg
ICAgaWYgKGNvbXBhcmVCb3VuZGFyeVBvaW50cyhyZWZOb2RlLCBvZmZzZXQsIG1fc3RhcnQuY29u
dGFpbmVyLmdldCgpLCBtX3N0YXJ0Lm9mZnNldCkgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAK
ICAgICAvLyBjb21wYXJlIHRvIGVuZCwgYW5kIHBvaW50IGNvbWVzIGFmdGVyCi0gICAgaWYgKGNv
bXBhcmVCb3VuZGFyeVBvaW50cyhyZWZOb2RlLCBvZmZzZXQsIG1fZW5kQ29udGFpbmVyLmdldCgp
LCBtX2VuZE9mZnNldCkgPT0gMSkKKyAgICBpZiAoY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHJlZk5v
ZGUsIG9mZnNldCwgbV9lbmQuY29udGFpbmVyLmdldCgpLCBtX2VuZC5vZmZzZXQpID4gMCkKICAg
ICAgICAgcmV0dXJuIDE7CiAKICAgICAvLyBwb2ludCBpcyBpbiB0aGUgbWlkZGxlIG9mIHRoaXMg
cmFuZ2UsIG9yIG9uIHRoZSBib3VuZGFyeSBwb2ludHMKQEAgLTM4NCwxOCArMzk5LDE4IEBAIFJh
bmdlOjpDb21wYXJlUmVzdWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUKICAgICAgICAgcmV0dXJuIE5P
REVfQkVGT1JFOwogICAgIH0KICAgICAKLSAgICBpZiAobV9kZXRhY2hlZCAmJiByZWZOb2RlLT5h
dHRhY2hlZCgpKSB7CisgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lciAmJiByZWZOb2RlLT5hdHRh
Y2hlZCgpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVy
biBOT0RFX0JFRk9SRTsKICAgICB9CiAKLSAgICBpZiAoIW1fZGV0YWNoZWQgJiYgIXJlZk5vZGUt
PmF0dGFjaGVkKCkpIHsKLSAgICAgICAgLy8gZmlyZWZveCBkb2Vzbid0IHRocm93IGFuIGV4Y2Vw
dGlvbiBmb3IgdGhpcyBjYXNlOyBpdCByZXR1cm5zIDAKKyAgICBpZiAobV9zdGFydC5jb250YWlu
ZXIgJiYgIXJlZk5vZGUtPmF0dGFjaGVkKCkpIHsKKyAgICAgICAgLy8gRmlyZWZveCBkb2Vzbid0
IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBjYXNlOyBpdCByZXR1cm5zIDAuCiAgICAgICAg
IHJldHVybiBOT0RFX0JFRk9SRTsKICAgICB9CiAKICAgICBpZiAocmVmTm9kZS0+ZG9jdW1lbnQo
KSAhPSBtX293bmVyRG9jdW1lbnQpIHsKLSAgICAgICAgLy8gZmlyZWZveCBkb2Vzbid0IHRocm93
IGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBjYXNlOyBpdCByZXR1cm5zIDAKKyAgICAgICAgLy8gRmly
ZWZveCBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBjYXNlOyBpdCByZXR1cm5z
IDAuCiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKICAgICB9CiAKQEAgLTQwOSwyMSArNDI0
LDIxIEBAIFJhbmdlOjpDb21wYXJlUmVzdWx0cyBSYW5nZTo6Y29tcGFyZU5vZGUKICAgICAgICAg
cmV0dXJuIE5PREVfQkVGT1JFOwogICAgIH0KIAotICAgIGlmIChjb21wYXJlUG9pbnQocGFyZW50
Tm9kZSwgbm9kZUluZGV4LCBlYykgPT0gLTEpIHsgLy8gc3RhcnRzIGJlZm9yZQotICAgICAgICBp
ZiAoY29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEsIGVjKSA9PSAxKSAvLyBl
bmRzIGFmdGVyIHRoZSByYW5nZQorICAgIGlmIChjb21wYXJlUG9pbnQocGFyZW50Tm9kZSwgbm9k
ZUluZGV4LCBlYykgPCAwKSB7IC8vIHN0YXJ0cyBiZWZvcmUKKyAgICAgICAgaWYgKGNvbXBhcmVQ
b2ludChwYXJlbnROb2RlLCBub2RlSW5kZXggKyAxLCBlYykgPiAwKSAvLyBlbmRzIGFmdGVyIHRo
ZSByYW5nZQogICAgICAgICAgICAgcmV0dXJuIE5PREVfQkVGT1JFX0FORF9BRlRFUjsKICAgICAg
ICAgcmV0dXJuIE5PREVfQkVGT1JFOyAvLyBlbmRzIGJlZm9yZSBvciBpbiB0aGUgcmFuZ2UKICAg
ICB9IGVsc2UgeyAvLyBzdGFydHMgYXQgb3IgYWZ0ZXIgdGhlIHJhbmdlIHN0YXJ0Ci0gICAgICAg
IGlmIChjb21wYXJlUG9pbnQocGFyZW50Tm9kZSwgbm9kZUluZGV4ICsgMSwgZWMpID09IDEpIC8v
IGVuZHMgYWZ0ZXIgdGhlIHJhbmdlCisgICAgICAgIGlmIChjb21wYXJlUG9pbnQocGFyZW50Tm9k
ZSwgbm9kZUluZGV4ICsgMSwgZWMpID4gMCkgLy8gZW5kcyBhZnRlciB0aGUgcmFuZ2UKICAgICAg
ICAgICAgIHJldHVybiBOT0RFX0FGVEVSOwogICAgICAgICByZXR1cm4gTk9ERV9JTlNJREU7IC8v
IGVuZHMgaW5zaWRlIHRoZSByYW5nZQogICAgIH0KIH0KIAogCi1zaG9ydCBSYW5nZTo6Y29tcGFy
ZUJvdW5kYXJ5UG9pbnRzKENvbXBhcmVIb3cgaG93LCBjb25zdCBSYW5nZSAqc291cmNlUmFuZ2Us
IEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorc2hvcnQgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBv
aW50cyhDb21wYXJlSG93IGhvdywgY29uc3QgUmFuZ2UqIHNvdXJjZVJhbmdlLCBFeGNlcHRpb25D
b2RlJiBlYykgY29uc3QKIHsKLSAgICBpZiAobV9kZXRhY2hlZCkgeworICAgIGlmICghbV9zdGFy
dC5jb250YWluZXIpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQpAQCAtNDM0LDEwICs0NDksMTAgQEAgc2hvcnQgUmFuZ2U6OmNvbXBh
cmVCb3VuZGFyeVBvaW50cyhDb21wYQogICAgIH0KIAogICAgIGVjID0gMDsKLSAgICBOb2RlICp0
aGlzQ29udCA9IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKGVjKTsKKyAgICBOb2RlKiB0aGlzQ29u
dCA9IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIE5vZGUgKnNvdXJjZUNvbnQgPSBzb3VyY2VSYW5nZS0+Y29tbW9uQW5jZXN0
b3JDb250YWluZXIoZWMpOworICAgIE5vZGUqIHNvdXJjZUNvbnQgPSBzb3VyY2VSYW5nZS0+Y29t
bW9uQW5jZXN0b3JDb250YWluZXIoZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIDA7
CiAKQEAgLTQ0Niw4ICs0NjEsOCBAQCBzaG9ydCBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRz
KENvbXBhCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIE5vZGUgKnRoaXNUb3AgPSB0
aGlzQ29udDsKLSAgICBOb2RlICpzb3VyY2VUb3AgPSBzb3VyY2VDb250OworICAgIE5vZGUqIHRo
aXNUb3AgPSB0aGlzQ29udDsKKyAgICBOb2RlKiBzb3VyY2VUb3AgPSBzb3VyY2VDb250OwogICAg
IHdoaWxlICh0aGlzVG9wLT5wYXJlbnROb2RlKCkpCiAgICAgICAgIHRoaXNUb3AgPSB0aGlzVG9w
LT5wYXJlbnROb2RlKCk7CiAgICAgd2hpbGUgKHNvdXJjZVRvcC0+cGFyZW50Tm9kZSgpKQpAQCAt
NDU3LDMxICs0NzIsMjYgQEAgc2hvcnQgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhDb21w
YQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBzd2l0Y2goaG93KQotICAgIHsKLSAg
ICBjYXNlIFNUQVJUX1RPX1NUQVJUOgotICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9p
bnRzKCBtX3N0YXJ0Q29udGFpbmVyLmdldCgpLCBtX3N0YXJ0T2Zmc2V0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSYW5nZS0+c3RhcnRDb250YWluZXIoZWMp
LCBzb3VyY2VSYW5nZS0+c3RhcnRPZmZzZXQoZWMpICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgU1RBUlRfVE9fRU5EOgotICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKCBt
X3N0YXJ0Q29udGFpbmVyLmdldCgpLCBtX3N0YXJ0T2Zmc2V0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzb3VyY2VSYW5nZS0+ZW5kQ29udGFpbmVyKGVjKSwgc291cmNl
UmFuZ2UtPmVuZE9mZnNldChlYykgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFTkRfVE9f
RU5EOgotICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKCBtX2VuZENvbnRhaW5l
ci5nZXQoKSwgbV9lbmRPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNvdXJjZVJhbmdlLT5lbmRDb250YWluZXIoZWMpLCBzb3VyY2VSYW5nZS0+ZW5kT2Zmc2V0
KGVjKSApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEVORF9UT19TVEFSVDoKLSAgICAgICAg
cmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyggbV9lbmRDb250YWluZXIuZ2V0KCksIG1fZW5k
T2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSYW5n
ZS0+c3RhcnRDb250YWluZXIoZWMpLCBzb3VyY2VSYW5nZS0+c3RhcnRPZmZzZXQoZWMpICk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgc3dpdGNoIChob3cpIHsKKyAgICAgICAgY2FzZSBTVEFSVF9U
T19TVEFSVDoKKyAgICAgICAgICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMobV9zdGFy
dC5jb250YWluZXIuZ2V0KCksIG1fc3RhcnQub2Zmc2V0LAorICAgICAgICAgICAgICAgIHNvdXJj
ZVJhbmdlLT5tX3N0YXJ0LmNvbnRhaW5lci5nZXQoKSwgc291cmNlUmFuZ2UtPm1fc3RhcnQub2Zm
c2V0KTsKKyAgICAgICAgY2FzZSBTVEFSVF9UT19FTkQ6CisgICAgICAgICAgICByZXR1cm4gY29t
cGFyZUJvdW5kYXJ5UG9pbnRzKG1fc3RhcnQuY29udGFpbmVyLmdldCgpLCBtX3N0YXJ0Lm9mZnNl
dCwKKyAgICAgICAgICAgICAgICBzb3VyY2VSYW5nZS0+bV9lbmQuY29udGFpbmVyLmdldCgpLCBz
b3VyY2VSYW5nZS0+bV9lbmQub2Zmc2V0KTsKKyAgICAgICAgY2FzZSBFTkRfVE9fRU5EOgorICAg
ICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX2VuZC5jb250YWluZXIuZ2V0
KCksIG1fZW5kLm9mZnNldCwKKyAgICAgICAgICAgICAgICBzb3VyY2VSYW5nZS0+bV9lbmQuY29u
dGFpbmVyLmdldCgpLCBzb3VyY2VSYW5nZS0+bV9lbmQub2Zmc2V0KTsKKyAgICAgICAgY2FzZSBF
TkRfVE9fU1RBUlQ6CisgICAgICAgICAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKG1f
ZW5kLmNvbnRhaW5lci5nZXQoKSwgbV9lbmQub2Zmc2V0LAorICAgICAgICAgICAgICAgIHNvdXJj
ZVJhbmdlLT5tX3N0YXJ0LmNvbnRhaW5lci5nZXQoKSwgc291cmNlUmFuZ2UtPm1fc3RhcnQub2Zm
c2V0KTsKICAgICB9CisKKyAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAgcmV0dXJuIDA7CiB9CiAK
LXNob3J0IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoIE5vZGUgKmNvbnRhaW5lckEsIGlu
dCBvZmZzZXRBLCBOb2RlICpjb250YWluZXJCLCBpbnQgb2Zmc2V0QiApCitzaG9ydCBSYW5nZTo6
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKE5vZGUqIGNvbnRhaW5lckEsIGludCBvZmZzZXRBLCBOb2Rl
KiBjb250YWluZXJCLCBpbnQgb2Zmc2V0QikKIHsKICAgICBBU1NFUlQoY29udGFpbmVyQSAmJiBj
b250YWluZXJCKTsKICAgICBpZiAoIWNvbnRhaW5lckEpCkBAIC00OTEsNyArNTAxLDcgQEAgc2hv
cnQgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyggTm9kZQogICAgIC8vIHNlZSBET00yIHRy
YXZlcnNhbCAmIHJhbmdlIHNlY3Rpb24gMi41CiAKICAgICAvLyBjYXNlIDE6IGJvdGggcG9pbnRz
IGhhdmUgdGhlIHNhbWUgY29udGFpbmVyCi0gICAgaWYoY29udGFpbmVyQSA9PSBjb250YWluZXJC
KSB7CisgICAgaWYgKGNvbnRhaW5lckEgPT0gY29udGFpbmVyQikgewogICAgICAgICBpZiAob2Zm
c2V0QSA9PSBvZmZzZXRCKQogICAgICAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAvLyBBIGlz
IGVxdWFsIHRvIEIKICAgICAgICAgaWYgKG9mZnNldEEgPCBvZmZzZXRCKQpAQCAtNTAxLDEyICs1
MTEsMTIgQEAgc2hvcnQgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyggTm9kZQogICAgIH0K
IAogICAgIC8vIGNhc2UgMjogbm9kZSBDIChjb250YWluZXIgQiBvciBhbiBhbmNlc3RvcikgaXMg
YSBjaGlsZCBub2RlIG9mIEEKLSAgICBOb2RlICpjID0gY29udGFpbmVyQjsKKyAgICBOb2RlKiBj
ID0gY29udGFpbmVyQjsKICAgICB3aGlsZSAoYyAmJiBjLT5wYXJlbnROb2RlKCkgIT0gY29udGFp
bmVyQSkKICAgICAgICAgYyA9IGMtPnBhcmVudE5vZGUoKTsKICAgICBpZiAoYykgewogICAgICAg
ICBpbnQgb2Zmc2V0QyA9IDA7Ci0gICAgICAgIE5vZGUgKm4gPSBjb250YWluZXJBLT5maXJzdENo
aWxkKCk7CisgICAgICAgIE5vZGUqIG4gPSBjb250YWluZXJBLT5maXJzdENoaWxkKCk7CiAgICAg
ICAgIHdoaWxlIChuICE9IGMgJiYgb2Zmc2V0QyA8IG9mZnNldEEpIHsKICAgICAgICAgICAgIG9m
ZnNldEMrKzsKICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOwpAQCAtNTI0LDcgKzUz
NCw3IEBAIHNob3J0IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoIE5vZGUKICAgICAgICAg
YyA9IGMtPnBhcmVudE5vZGUoKTsKICAgICBpZiAoYykgewogICAgICAgICBpbnQgb2Zmc2V0QyA9
IDA7Ci0gICAgICAgIE5vZGUgKm4gPSBjb250YWluZXJCLT5maXJzdENoaWxkKCk7CisgICAgICAg
IE5vZGUqIG4gPSBjb250YWluZXJCLT5maXJzdENoaWxkKCk7CiAgICAgICAgIHdoaWxlIChuICE9
IGMgJiYgb2Zmc2V0QyA8IG9mZnNldEIpIHsKICAgICAgICAgICAgIG9mZnNldEMrKzsKICAgICAg
ICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOwpAQCAtNTM4LDI0ICs1NDgsMjQgQEAgc2hvcnQg
UmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyggTm9kZQogCiAgICAgLy8gY2FzZSA0OiBjb250
YWluZXJzIEEgJiBCIGFyZSBzaWJsaW5ncywgb3IgY2hpbGRyZW4gb2Ygc2libGluZ3MKICAgICAv
LyAjIyMgd2UgbmVlZCB0byBkbyBhIHRyYXZlcnNhbCBoZXJlIGluc3RlYWQKLSAgICBOb2RlICpj
bW5Sb290ID0gY29tbW9uQW5jZXN0b3JDb250YWluZXIoY29udGFpbmVyQSxjb250YWluZXJCKTsK
LSAgICBpZiAoIWNtblJvb3QpCisgICAgTm9kZSogY29tbW9uQW5jZXN0b3IgPSBjb21tb25BbmNl
c3RvckNvbnRhaW5lcihjb250YWluZXJBLCBjb250YWluZXJCKTsKKyAgICBpZiAoIWNvbW1vbkFu
Y2VzdG9yKQogICAgICAgICByZXR1cm4gMDsKLSAgICBOb2RlICpjaGlsZEEgPSBjb250YWluZXJB
OwotICAgIHdoaWxlIChjaGlsZEEgJiYgY2hpbGRBLT5wYXJlbnROb2RlKCkgIT0gY21uUm9vdCkK
KyAgICBOb2RlKiBjaGlsZEEgPSBjb250YWluZXJBOworICAgIHdoaWxlIChjaGlsZEEgJiYgY2hp
bGRBLT5wYXJlbnROb2RlKCkgIT0gY29tbW9uQW5jZXN0b3IpCiAgICAgICAgIGNoaWxkQSA9IGNo
aWxkQS0+cGFyZW50Tm9kZSgpOwogICAgIGlmICghY2hpbGRBKQotICAgICAgICBjaGlsZEEgPSBj
bW5Sb290OwotICAgIE5vZGUgKmNoaWxkQiA9IGNvbnRhaW5lckI7Ci0gICAgd2hpbGUgKGNoaWxk
QiAmJiBjaGlsZEItPnBhcmVudE5vZGUoKSAhPSBjbW5Sb290KQorICAgICAgICBjaGlsZEEgPSBj
b21tb25BbmNlc3RvcjsKKyAgICBOb2RlKiBjaGlsZEIgPSBjb250YWluZXJCOworICAgIHdoaWxl
IChjaGlsZEIgJiYgY2hpbGRCLT5wYXJlbnROb2RlKCkgIT0gY29tbW9uQW5jZXN0b3IpCiAgICAg
ICAgIGNoaWxkQiA9IGNoaWxkQi0+cGFyZW50Tm9kZSgpOwogICAgIGlmICghY2hpbGRCKQotICAg
ICAgICBjaGlsZEIgPSBjbW5Sb290OworICAgICAgICBjaGlsZEIgPSBjb21tb25BbmNlc3RvcjsK
IAogICAgIGlmIChjaGlsZEEgPT0gY2hpbGRCKQogICAgICAgICByZXR1cm4gMDsgLy8gQSBpcyBl
cXVhbCB0byBCCiAKLSAgICBOb2RlICpuID0gY21uUm9vdC0+Zmlyc3RDaGlsZCgpOworICAgIE5v
ZGUqIG4gPSBjb21tb25BbmNlc3Rvci0+Zmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChuKSB7CiAg
ICAgICAgIGlmIChuID09IGNoaWxkQSkKICAgICAgICAgICAgIHJldHVybiAtMTsgLy8gQSBpcyBi
ZWZvcmUgQgpAQCAtNTY5LDE4ICs1NzksMTkgQEAgc2hvcnQgUmFuZ2U6OmNvbXBhcmVCb3VuZGFy
eVBvaW50cyggTm9kZQogICAgIHJldHVybiAwOwogfQogCi1zaG9ydCBSYW5nZTo6Y29tcGFyZUJv
dW5kYXJ5UG9pbnRzKCBjb25zdCBQb3NpdGlvbiAmYSwgY29uc3QgUG9zaXRpb24gJmIgKQorc2hv
cnQgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhjb25zdCBQb3NpdGlvbiYgYSwgY29uc3Qg
UG9zaXRpb24mIGIpCiB7CiAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhhLm5vZGUo
KSwgYS5vZmZzZXQoKSwgYi5ub2RlKCksIGIub2Zmc2V0KCkpOwogfQogCiBib29sIFJhbmdlOjpi
b3VuZGFyeVBvaW50c1ZhbGlkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9zdGFydENvbnRhaW5l
ciAmJiBtX2VuZENvbnRhaW5lciAmJiBjb21wYXJlQm91bmRhcnlQb2ludHMobV9zdGFydENvbnRh
aW5lci5nZXQoKSwgbV9zdGFydE9mZnNldCwgbV9lbmRDb250YWluZXIuZ2V0KCksIG1fZW5kT2Zm
c2V0KSA8PSAwOworICAgIHJldHVybiBtX3N0YXJ0LmNvbnRhaW5lciAmJiBjb21wYXJlQm91bmRh
cnlQb2ludHMobV9zdGFydC5jb250YWluZXIuZ2V0KCksIG1fc3RhcnQub2Zmc2V0LCBtX2VuZC5j
b250YWluZXIuZ2V0KCksIG1fZW5kLm9mZnNldCkgPD0gMDsKIH0KIAotdm9pZCBSYW5nZTo6ZGVs
ZXRlQ29udGVudHMoRXhjZXB0aW9uQ29kZSYgZWMpIHsKLSAgICBpZiAobV9kZXRhY2hlZCkgewor
dm9pZCBSYW5nZTo6ZGVsZXRlQ29udGVudHMoRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYg
KCFtX3N0YXJ0LmNvbnRhaW5lcikgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNTkwLDcgKzYwMSw3IEBAIHZvaWQgUmFuZ2U6OmRl
bGV0ZUNvbnRlbnRzKEV4Y2VwdGlvbkNvZGUKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHByb2Nlc3NDb250ZW50cyhERUxFVEVfQ09OVEVOVFMsZWMpOworICAgIHByb2Nlc3ND
b250ZW50cyh0cnVlLCBmYWxzZSwgZWMpOwogfQogCiBib29sIFJhbmdlOjppbnRlcnNlY3RzTm9k
ZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTYwMywxMSArNjE0LDEyIEBA
IGJvb2wgUmFuZ2U6OmludGVyc2VjdHNOb2RlKE5vZGUqIHJlZk5vZGUKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICAKLSAgICBpZiAobV9kZXRhY2hlZCAmJiByZWZOb2RlLT5hdHRh
Y2hlZCgpIHx8Ci0gICAgICAgICFtX2RldGFjaGVkICYmICFyZWZOb2RlLT5hdHRhY2hlZCgpIHx8
Ci0gICAgICAgIHJlZk5vZGUtPmRvY3VtZW50KCkgIT0gbV9vd25lckRvY3VtZW50KQotICAgICAg
ICAvLyBmaXJlZm94IGRvZXNuJ3QgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciB0aGVzZSBjYXNlOyBp
dCByZXR1cm5zIGZhbHNlCisgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lciAmJiByZWZOb2RlLT5h
dHRhY2hlZCgpCisgICAgICAgICAgICB8fCBtX3N0YXJ0LmNvbnRhaW5lciAmJiAhcmVmTm9kZS0+
YXR0YWNoZWQoKQorICAgICAgICAgICAgfHwgcmVmTm9kZS0+ZG9jdW1lbnQoKSAhPSBtX293bmVy
RG9jdW1lbnQpIHsKKyAgICAgICAgLy8gRmlyZWZveCBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlv
biBmb3IgdGhlc2UgY2FzZXM7IGl0IHJldHVybnMgZmFsc2UuCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CiAKICAgICBOb2RlKiBwYXJlbnROb2RlID0gcmVmTm9kZS0+cGFyZW50Tm9kZSgp
OwogICAgIHVuc2lnbmVkIG5vZGVJbmRleCA9IHJlZk5vZGUtPm5vZGVJbmRleCgpOwpAQCAtNjE5
LDMzNyArNjMxLDMzNyBAQCBib29sIFJhbmdlOjppbnRlcnNlY3RzTm9kZShOb2RlKiByZWZOb2Rl
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoY29tcGFyZVBvaW50KHBh
cmVudE5vZGUsIG5vZGVJbmRleCwgZWMpID09IC0xICYmIC8vIHN0YXJ0cyBiZWZvcmUgc3RhcnQK
LSAgICAgICAgY29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEsIGVjKSA9PSAt
MSkgeyAvLyBlbmRzIGJlZm9yZSBzdGFydAorICAgIGlmIChjb21wYXJlUG9pbnQocGFyZW50Tm9k
ZSwgbm9kZUluZGV4LCBlYykgPCAwICYmIC8vIHN0YXJ0cyBiZWZvcmUgc3RhcnQKKyAgICAgICAg
Y29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEsIGVjKSA8IDApIHsgLy8gZW5k
cyBiZWZvcmUgc3RhcnQKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSBpZihjb21w
YXJlUG9pbnQocGFyZW50Tm9kZSwgbm9kZUluZGV4LCBlYykgPT0gMSAmJiAvLyBzdGFydHMgYWZ0
ZXIgZW5kCi0gICAgICAgICAgICAgIGNvbXBhcmVQb2ludChwYXJlbnROb2RlLCBub2RlSW5kZXgg
KyAxLCBlYykgPT0gMSkgeyAvLyBlbmRzIGFmdGVyIGVuZAorICAgIH0gZWxzZSBpZiAoY29tcGFy
ZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCwgZWMpID4gMCAmJiAvLyBzdGFydHMgYWZ0ZXIg
ZW5kCisgICAgICAgICAgICAgICBjb21wYXJlUG9pbnQocGFyZW50Tm9kZSwgbm9kZUluZGV4ICsg
MSwgZWMpID4gMCkgeyAvLyBlbmRzIGFmdGVyIGVuZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIAotICAgIHJldHVybiB0cnVlOyAgICAvL2FsbCBvdGhlciBjYXNlcworICAgIHJl
dHVybiB0cnVlOyAvLyBhbGwgb3RoZXIgY2FzZXMKIH0KIAotUGFzc1JlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBSYW5nZTo6cHJvY2Vzc0NvbnRlbnRzICggQWN0aW9uVHlwZSBhY3Rpb24sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5nZTo6cHJvY2Vz
c0NvbnRlbnRzKGJvb2wgc2hvdWxkRGVsZXRlLCBib29sIHNob3VsZENvcHksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewotICAgIC8vICMjIyB3aGVuIG11dGF0aW9uIGV2ZW50cyBhcmUgaW1wbGVtZW50
ZWQsIHdlIHdpbGwgaGF2ZSB0byB0YWtlIGludG8gYWNjb3VudAorICAgIC8vIEZJWE1FOiBCZWNh
dXNlIG9mIG11dGF0aW9uIGV2ZW50cywgd2Ugc2hvdWxkIHJlYWxseSB0YWtlIGludG8gYWNjb3Vu
dAogICAgIC8vIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHRyZWUgaXMgYmVpbmcgdHJhbnNmb3JtZWQg
d2hpbGUgd2UgZGVsZXRlIC0gdWdoIQogCiAgICAgLy8gIyMjIHBlcmhhcHMgZGlzYWJsZSBub2Rl
IGRlbGV0aW9uIG5vdGlmaWNhdGlvbiBmb3IgdGhpcyByYW5nZSB3aGlsZSB3ZSBkbyB0aGlzPwog
Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50OwotICAgIGlmIChhY3Rpb24g
PT0gRVhUUkFDVF9DT05URU5UUyB8fCBhY3Rpb24gPT0gQ0xPTkVfQ09OVEVOVFMpCi0gICAgICAg
IGZyYWdtZW50ID0gbmV3IERvY3VtZW50RnJhZ21lbnQobV9vd25lckRvY3VtZW50LmdldCgpKTsK
LSAgICAKICAgICBlYyA9IDA7Ci0gICAgaWYgKGNvbGxhcHNlZChlYykpCi0gICAgICAgIHJldHVy
biBmcmFnbWVudC5yZWxlYXNlKCk7CisgICAgYm9vbCBpc0NvbGxhcHNlZCA9IGNvbGxhcHNlZChl
Yyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIE5vZGUgKmNtblJvb3Qg
PSBjb21tb25BbmNlc3RvckNvbnRhaW5lcihlYyk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGZyYWdtZW50ID0gc2hvdWxkQ29weSA/IG5ldyBEb2N1bWVudEZyYWdtZW50KG1fb3duZXJE
b2N1bWVudC5nZXQoKSkgOiAwOworICAgIGlmIChpc0NvbGxhcHNlZCkKKyAgICAgICAgcmV0dXJu
IGZyYWdtZW50LnJlbGVhc2UoKTsKKworICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yID0gY29tbW9u
QW5jZXN0b3JDb250YWluZXIoZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICAvLyB3aGF0IGlzIHRoZSBoaWdoZXN0IG5vZGUgdGhhdCBwYXJ0aWFsbHkgc2VsZWN0cyB0
aGUgc3RhcnQgb2YgdGhlIHJhbmdlPwotICAgIE5vZGUgKnBhcnRpYWxTdGFydCA9IDA7Ci0gICAg
aWYgKG1fc3RhcnRDb250YWluZXIgIT0gY21uUm9vdCkgewotICAgICAgICBwYXJ0aWFsU3RhcnQg
PSBtX3N0YXJ0Q29udGFpbmVyLmdldCgpOwotICAgICAgICB3aGlsZSAocGFydGlhbFN0YXJ0LT5w
YXJlbnROb2RlKCkgIT0gY21uUm9vdCkKKyAgICBOb2RlKiBwYXJ0aWFsU3RhcnQgPSAwOworICAg
IGlmIChtX3N0YXJ0LmNvbnRhaW5lciAhPSBjb21tb25BbmNlc3RvcikgeworICAgICAgICBwYXJ0
aWFsU3RhcnQgPSBtX3N0YXJ0LmNvbnRhaW5lci5nZXQoKTsKKyAgICAgICAgd2hpbGUgKHBhcnRp
YWxTdGFydC0+cGFyZW50Tm9kZSgpICE9IGNvbW1vbkFuY2VzdG9yKQogICAgICAgICAgICAgcGFy
dGlhbFN0YXJ0ID0gcGFydGlhbFN0YXJ0LT5wYXJlbnROb2RlKCk7CiAgICAgfQogCiAgICAgLy8g
d2hhdCBpcyB0aGUgaGlnaGVzdCBub2RlIHRoYXQgcGFydGlhbGx5IHNlbGVjdHMgdGhlIGVuZCBv
ZiB0aGUgcmFuZ2U/Ci0gICAgTm9kZSAqcGFydGlhbEVuZCA9IDA7Ci0gICAgaWYgKG1fZW5kQ29u
dGFpbmVyICE9IGNtblJvb3QpIHsKLSAgICAgICAgcGFydGlhbEVuZCA9IG1fZW5kQ29udGFpbmVy
LmdldCgpOwotICAgICAgICB3aGlsZSAocGFydGlhbEVuZC0+cGFyZW50Tm9kZSgpICE9IGNtblJv
b3QpCisgICAgTm9kZSogcGFydGlhbEVuZCA9IDA7CisgICAgaWYgKG1fZW5kLmNvbnRhaW5lciAh
PSBjb21tb25BbmNlc3RvcikgeworICAgICAgICBwYXJ0aWFsRW5kID0gbV9lbmQuY29udGFpbmVy
LmdldCgpOworICAgICAgICB3aGlsZSAocGFydGlhbEVuZC0+cGFyZW50Tm9kZSgpICE9IGNvbW1v
bkFuY2VzdG9yKQogICAgICAgICAgICAgcGFydGlhbEVuZCA9IHBhcnRpYWxFbmQtPnBhcmVudE5v
ZGUoKTsKICAgICB9CiAKICAgICAvLyBTaW1wbGUgY2FzZTogdGhlIHN0YXJ0IGFuZCBlbmQgY29u
dGFpbmVycyBhcmUgdGhlIHNhbWUuIFdlIGp1c3QgZ3JhYgogICAgIC8vIGV2ZXJ5dGhpbmcgPj0g
c3RhcnQgb2Zmc2V0IGFuZCA8IGVuZCBvZmZzZXQKLSAgICBpZiAobV9zdGFydENvbnRhaW5lciA9
PSBtX2VuZENvbnRhaW5lcikgewotICAgICAgICBpZihtX3N0YXJ0Q29udGFpbmVyLT5ub2RlVHlw
ZSgpID09IE5vZGU6OlRFWFRfTk9ERSB8fAotICAgICAgICAgICBtX3N0YXJ0Q29udGFpbmVyLT5u
b2RlVHlwZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSB8fAotICAgICAgICAgICBtX3N0
YXJ0Q29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERSkgewotCi0gICAg
ICAgICAgICBpZiAoYWN0aW9uID09IEVYVFJBQ1RfQ09OVEVOVFMgfHwgYWN0aW9uID09IENMT05F
X0NPTlRFTlRTKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPENoYXJhY3RlckRhdGE+IGMgPSBz
dGF0aWNfcG9pbnRlcl9jYXN0PENoYXJhY3RlckRhdGE+KG1fc3RhcnRDb250YWluZXItPmNsb25l
Tm9kZSh0cnVlKSk7Ci0gICAgICAgICAgICAgICAgYy0+ZGVsZXRlRGF0YShtX2VuZE9mZnNldCwg
Yy0+bGVuZ3RoKCkgLSBtX2VuZE9mZnNldCwgZWMpOwotICAgICAgICAgICAgICAgIGMtPmRlbGV0
ZURhdGEoMCwgbV9zdGFydE9mZnNldCwgZWMpOworICAgIGlmIChtX3N0YXJ0LmNvbnRhaW5lciA9
PSBtX2VuZC5jb250YWluZXIpIHsKKyAgICAgICAgaWYobV9zdGFydC5jb250YWluZXItPm5vZGVU
eXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFIHx8CisgICAgICAgICAgIG1fc3RhcnQuY29udGFpbmVy
LT5ub2RlVHlwZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSB8fAorICAgICAgICAgICBt
X3N0YXJ0LmNvbnRhaW5lci0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUpIHsKKwor
ICAgICAgICAgICAgaWYgKHNob3VsZENvcHkpIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8Q2hh
cmFjdGVyRGF0YT4gYyA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8Q2hhcmFjdGVyRGF0YT4obV9zdGFy
dC5jb250YWluZXItPmNsb25lTm9kZSh0cnVlKSk7CisgICAgICAgICAgICAgICAgYy0+ZGVsZXRl
RGF0YShtX2VuZC5vZmZzZXQsIGMtPmxlbmd0aCgpIC0gbV9lbmQub2Zmc2V0LCBlYyk7CisgICAg
ICAgICAgICAgICAgYy0+ZGVsZXRlRGF0YSgwLCBtX3N0YXJ0Lm9mZnNldCwgZWMpOwogICAgICAg
ICAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChjLnJlbGVhc2UoKSwgZWMpOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBFWFRSQUNUX0NPTlRFTlRTIHx8IGFj
dGlvbiA9PSBERUxFVEVfQ09OVEVOVFMpIHsKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxD
aGFyYWN0ZXJEYXRhKj4obV9zdGFydENvbnRhaW5lci5nZXQoKSktPmRlbGV0ZURhdGEobV9zdGFy
dE9mZnNldCxtX2VuZE9mZnNldC1tX3N0YXJ0T2Zmc2V0LGVjKTsKLSAgICAgICAgICAgICAgICBt
X3N0YXJ0Q29udGFpbmVyLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKKyAgICAgICAgICAg
IGlmIChzaG91bGREZWxldGUpIHsKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDaGFyYWN0
ZXJEYXRhKj4obV9zdGFydC5jb250YWluZXIuZ2V0KCkpLT5kZWxldGVEYXRhKG1fc3RhcnQub2Zm
c2V0LCBtX2VuZC5vZmZzZXQgLSBtX3N0YXJ0Lm9mZnNldCwgZWMpOworICAgICAgICAgICAgICAg
IG1fc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtX3N0YXJ0Q29udGFpbmVyLT5ub2Rl
VHlwZSgpID09IE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSkgewotICAgICAgICAg
ICAgaWYgKGFjdGlvbiA9PSBFWFRSQUNUX0NPTlRFTlRTIHx8IGFjdGlvbiA9PSBDTE9ORV9DT05U
RU5UUykgewotICAgICAgICAgICAgICAgIFJlZlB0cjxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+IGMg
PSBzdGF0aWNfcG9pbnRlcl9jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4obV9zdGFydENvbnRh
aW5lci0+Y2xvbmVOb2RlKHRydWUpKTsKLSAgICAgICAgICAgICAgICBjLT5zZXREYXRhKGMtPmRh
dGEoKS5zdWJzdHJpbmcobV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQgLSBtX3N0YXJ0T2Zmc2V0
KSwgZWMpOworICAgICAgICB9IGVsc2UgaWYgKG1fc3RhcnQuY29udGFpbmVyLT5ub2RlVHlwZSgp
ID09IE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSkgeworICAgICAgICAgICAgaWYg
KHNob3VsZENvcHkpIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UHJvY2Vzc2luZ0luc3RydWN0
aW9uPiBjID0gc3RhdGljX3BvaW50ZXJfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+KG1fc3Rh
cnQuY29udGFpbmVyLT5jbG9uZU5vZGUodHJ1ZSkpOworICAgICAgICAgICAgICAgIGMtPnNldERh
dGEoYy0+ZGF0YSgpLnN1YnN0cmluZyhtX3N0YXJ0Lm9mZnNldCwgbV9lbmQub2Zmc2V0IC0gbV9z
dGFydC5vZmZzZXQpLCBlYyk7CiAgICAgICAgICAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxk
KGMucmVsZWFzZSgpLCBlYyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYWN0aW9u
ID09IEVYVFJBQ1RfQ09OVEVOVFMgfHwgYWN0aW9uID09IERFTEVURV9DT05URU5UUykgewotICAg
ICAgICAgICAgICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcGk9IHN0YXRpY19jYXN0PFByb2Nl
c3NpbmdJbnN0cnVjdGlvbio+KG1fc3RhcnRDb250YWluZXIuZ2V0KCkpOworICAgICAgICAgICAg
aWYgKHNob3VsZERlbGV0ZSkgeworICAgICAgICAgICAgICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlv
biogcGk9IHN0YXRpY19jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KG1fc3RhcnQuY29udGFp
bmVyLmdldCgpKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YShwaS0+ZGF0YSgpKTsKLSAg
ICAgICAgICAgICAgICBkYXRhLnJlbW92ZShtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCAtIG1f
c3RhcnRPZmZzZXQpOworICAgICAgICAgICAgICAgIGRhdGEucmVtb3ZlKG1fc3RhcnQub2Zmc2V0
LCBtX2VuZC5vZmZzZXQgLSBtX3N0YXJ0Lm9mZnNldCk7CiAgICAgICAgICAgICAgICAgcGktPnNl
dERhdGEoZGF0YSwgZWMpOwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgTm9kZSAqbiA9IG1fc3RhcnRDb250YWluZXItPmZpcnN0Q2hpbGQoKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE5vZGUqIG4gPSBtX3N0YXJ0LmNvbnRhaW5l
ci0+Zmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgdW5zaWduZWQgaTsKLSAgICAgICAgICAgIGZv
ciAoaSA9IDA7IG4gJiYgaSA8IG1fc3RhcnRPZmZzZXQ7IGkrKykgLy8gc2tpcCB1bnRpbCBtX3N0
YXJ0T2Zmc2V0CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBuICYmIGkgPCBtX3N0YXJ0Lm9mZnNl
dDsgaSsrKSAvLyBza2lwIHVudGlsIG1fc3RhcnQub2Zmc2V0CiAgICAgICAgICAgICAgICAgbiA9
IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICB3aGlsZSAobiAmJiBpIDwgbV9lbmRPZmZz
ZXQpIHsgLy8gZGVsZXRlIHVudGlsIG1fZW5kT2Zmc2V0Ci0gICAgICAgICAgICAgICAgTm9kZSAq
bmV4dCA9IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBF
WFRSQUNUX0NPTlRFTlRTKQotICAgICAgICAgICAgICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hp
bGQobixlYyk7IC8vIHdpbGwgcmVtb3ZlIG4gZnJvbSBpdCdzIHBhcmVudAotICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGFjdGlvbiA9PSBDTE9ORV9DT05URU5UUykKLSAgICAgICAgICAgICAgICAg
ICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKG4tPmNsb25lTm9kZSh0cnVlKSxlYyk7Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtX3N0YXJ0Q29udGFpbmVyLT5yZW1v
dmVDaGlsZChuLGVjKTsKKyAgICAgICAgICAgIHdoaWxlIChuICYmIGkgPCBtX2VuZC5vZmZzZXQp
IHsgLy8gZGVsZXRlIHVudGlsIG1fZW5kLm9mZnNldAorICAgICAgICAgICAgICAgIE5vZGUqIG5l
eHQgPSBuLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgICAgIGlmIChzaG91bGRDb3B5KSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGREZWxldGUpCisgICAgICAgICAgICAgICAg
ICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQobiwgZWMpOyAvLyB3aWxsIHJlbW92ZSBuIGZy
b20gaXRzIHBhcmVudAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQobi0+Y2xvbmVOb2RlKHRydWUpLCBlYyk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHNob3Vs
ZERlbGV0ZSk7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhcnQuY29udGFpbmVyLT5yZW1vdmVD
aGlsZChuLCBlYyk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG4gPSBuZXh0
OwogICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICBpZiAoYWN0aW9uID09IEVYVFJBQ1RfQ09OVEVOVFMgfHwgYWN0aW9uID09IERFTEVURV9DT05U
RU5UUykKLSAgICAgICAgICAgIGNvbGxhcHNlKHRydWUsZWMpOworICAgICAgICBpZiAoc2hvdWxk
RGVsZXRlKQorICAgICAgICAgICAgY29sbGFwc2UodHJ1ZSwgZWMpOwogICAgICAgICByZXR1cm4g
ZnJhZ21lbnQucmVsZWFzZSgpOwogICAgIH0KIAogICAgIC8vIENvbXBsZXggY2FzZTogU3RhcnQg
YW5kIGVuZCBjb250YWluZXJzIGFyZSBkaWZmZXJlbnQuCiAgICAgLy8gVGhlcmUgYXJlIHRocmVl
IHBvc3NpYmxpdGllcyBoZXJlOgotICAgIC8vIDEuIFN0YXJ0IGNvbnRhaW5lciA9PSBjbW5Sb290
IChFbmQgY29udGFpbmVyIG11c3QgYmUgYSBkZXNjZW5kYW50KQotICAgIC8vIDIuIEVuZCBjb250
YWluZXIgPT0gY21uUm9vdCAoU3RhcnQgY29udGFpbmVyIG11c3QgYmUgYSBkZXNjZW5kYW50KQot
ICAgIC8vIDMuIE5laXRoZXIgaXMgY21uUm9vdCwgdGhleSBhcmUgYm90aCBkZXNjZW5kYW50cwor
ICAgIC8vIDEuIFN0YXJ0IGNvbnRhaW5lciA9PSBjb21tb25BbmNlc3RvciAoRW5kIGNvbnRhaW5l
ciBtdXN0IGJlIGEgZGVzY2VuZGFudCkKKyAgICAvLyAyLiBFbmQgY29udGFpbmVyID09IGNvbW1v
bkFuY2VzdG9yIChTdGFydCBjb250YWluZXIgbXVzdCBiZSBhIGRlc2NlbmRhbnQpCisgICAgLy8g
My4gTmVpdGhlciBpcyBjb21tb25BbmNlc3RvciwgdGhleSBhcmUgYm90aCBkZXNjZW5kYW50cwog
ICAgIC8vCiAgICAgLy8gSW4gY2FzZSAzLCB3ZSBncmFiIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIHN0
YXJ0ICh1cCB1bnRpbCBhIGRpcmVjdCBjaGlsZAotICAgIC8vIG9mIGNtblJvb3QpIGludG8gbGVm
dENvbnRlbnRzLCBhbmQgZXZlcnl0aGluZyBiZWZvcmUgdGhlIGVuZCAodXAgdW50aWwKLSAgICAv
LyBhIGRpcmVjdCBjaGlsZCBvZiBjbW5Sb290KSBpbnRvIHJpZ2h0Q29udGVudHMuIFRoZW4gd2Ug
cHJvY2VzcyBhbGwKLSAgICAvLyBjbW5Sb290IGNoaWxkcmVuIGJldHdlZW4gbGVmdENvbnRlbnRz
IGFuZCByaWdodENvbnRlbnRzCisgICAgLy8gb2YgY29tbW9uQW5jZXN0b3IpIGludG8gbGVmdENv
bnRlbnRzLCBhbmQgZXZlcnl0aGluZyBiZWZvcmUgdGhlIGVuZCAodXAgdW50aWwKKyAgICAvLyBh
IGRpcmVjdCBjaGlsZCBvZiBjb21tb25BbmNlc3RvcikgaW50byByaWdodENvbnRlbnRzLiBUaGVu
IHdlIHByb2Nlc3MgYWxsCisgICAgLy8gY29tbW9uQW5jZXN0b3IgY2hpbGRyZW4gYmV0d2VlbiBs
ZWZ0Q29udGVudHMgYW5kIHJpZ2h0Q29udGVudHMKICAgICAvLwogICAgIC8vIEluIGNhc2UgMSBv
ciAyLCB3ZSBza2lwIGVpdGhlciBwcm9jZXNzaW5nIG9mIGxlZnRDb250ZW50cyBvciByaWdodENv
bnRlbnRzLAogICAgIC8vIGluIHdoaWNoIGNhc2UgdGhlIGxhc3QgbG90IG9mIG5vZGVzIGVpdGhl
ciBnb2VzIGZyb20gdGhlIGZpcnN0IG9yIGxhc3QKLSAgICAvLyBjaGlsZCBvZiBjbW5Sb290Lgor
ICAgIC8vIGNoaWxkIG9mIGNvbW1vbkFuY2VzdG9yLgogICAgIC8vCiAgICAgLy8gVGhlc2UgYXJl
IGRlbGV0ZWQsIGNsb25lZCwgb3IgZXh0cmFjdGVkIChpLmUuIGJvdGgpIGRlcGVuZGluZyBvbiBh
Y3Rpb24uCiAKICAgICBSZWZQdHI8Tm9kZT4gbGVmdENvbnRlbnRzOwotICAgIGlmIChtX3N0YXJ0
Q29udGFpbmVyICE9IGNtblJvb3QpIHsKKyAgICBpZiAobV9zdGFydC5jb250YWluZXIgIT0gY29t
bW9uQW5jZXN0b3IpIHsKICAgICAgICAgLy8gcHJvY2VzcyB0aGUgbGVmdC1oYW5kIHNpZGUgb2Yg
dGhlIHJhbmdlLCB1cCB1bnRpbCB0aGUgbGFzdCBhbmNlc3RvciBvZgotICAgICAgICAvLyBtX3N0
YXJ0Q29udGFpbmVyIGJlZm9yZSBjbW5Sb290Ci0gICAgICAgIGlmKG1fc3RhcnRDb250YWluZXIt
Pm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFIHx8Ci0gICAgICAgICAgIG1fc3RhcnRDb250
YWluZXItPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFIHx8Ci0gICAgICAg
ICAgIG1fc3RhcnRDb250YWluZXItPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q09NTUVOVF9OT0RFKSB7
Ci0KLSAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gRVhUUkFDVF9DT05URU5UUyB8fCBhY3Rpb24g
PT0gQ0xPTkVfQ09OVEVOVFMpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8Q2hhcmFjdGVyRGF0
YT4gYyA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8Q2hhcmFjdGVyRGF0YT4obV9zdGFydENvbnRhaW5l
ci0+Y2xvbmVOb2RlKHRydWUpKTsKLSAgICAgICAgICAgICAgICBjLT5kZWxldGVEYXRhKDAsIG1f
c3RhcnRPZmZzZXQsIGVjKTsKKyAgICAgICAgLy8gbV9zdGFydC5jb250YWluZXIgYmVmb3JlIGNv
bW1vbkFuY2VzdG9yCisgICAgICAgIGlmKG1fc3RhcnQuY29udGFpbmVyLT5ub2RlVHlwZSgpID09
IE5vZGU6OlRFWFRfTk9ERSB8fAorICAgICAgICAgICBtX3N0YXJ0LmNvbnRhaW5lci0+bm9kZVR5
cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUgfHwKKyAgICAgICAgICAgbV9zdGFydC5j
b250YWluZXItPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q09NTUVOVF9OT0RFKSB7CisKKyAgICAgICAg
ICAgIGlmIChzaG91bGRDb3B5KSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPENoYXJhY3RlckRh
dGE+IGMgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PENoYXJhY3RlckRhdGE+KG1fc3RhcnQuY29udGFp
bmVyLT5jbG9uZU5vZGUodHJ1ZSkpOworICAgICAgICAgICAgICAgIGMtPmRlbGV0ZURhdGEoMCwg
bV9zdGFydC5vZmZzZXQsIGVjKTsKICAgICAgICAgICAgICAgICBsZWZ0Q29udGVudHMgPSBjLnJl
bGVhc2UoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gRVhUUkFD
VF9DT05URU5UUyB8fCBhY3Rpb24gPT0gREVMRVRFX0NPTlRFTlRTKSB7Ci0gICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YSo+KG1fc3RhcnRDb250YWluZXIuZ2V0KCkpLT5k
ZWxldGVEYXRhKAotICAgICAgICAgICAgICAgICAgICBtX3N0YXJ0T2Zmc2V0LCBzdGF0aWNfY2Fz
dDxDaGFyYWN0ZXJEYXRhKj4obV9zdGFydENvbnRhaW5lci5nZXQoKSktPmxlbmd0aCgpIC0gbV9z
dGFydE9mZnNldCwgZWMpOwotICAgICAgICAgICAgICAgIG1fc3RhcnRDb250YWluZXItPmRvY3Vt
ZW50KCktPnVwZGF0ZUxheW91dCgpOworICAgICAgICAgICAgaWYgKHNob3VsZERlbGV0ZSkgewor
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENoYXJhY3RlckRhdGEqPihtX3N0YXJ0LmNvbnRh
aW5lci5nZXQoKSktPmRlbGV0ZURhdGEoCisgICAgICAgICAgICAgICAgICAgIG1fc3RhcnQub2Zm
c2V0LCBzdGF0aWNfY2FzdDxDaGFyYWN0ZXJEYXRhKj4obV9zdGFydC5jb250YWluZXIuZ2V0KCkp
LT5sZW5ndGgoKSAtIG1fc3RhcnQub2Zmc2V0LCBlYyk7CisgICAgICAgICAgICAgICAgbV9zdGFy
dC5jb250YWluZXItPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1fc3RhcnRDb250YWluZXItPm5vZGVUeXBlKCkg
PT0gTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKSB7Ci0gICAgICAgICAgICBpZiAo
YWN0aW9uID09IEVYVFJBQ1RfQ09OVEVOVFMgfHwgYWN0aW9uID09IENMT05FX0NPTlRFTlRTKSB7
Ci0gICAgICAgICAgICAgICAgUmVmUHRyPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4gYyA9IHN0YXRp
Y19wb2ludGVyX2Nhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uPihtX3N0YXJ0Q29udGFpbmVyLT5j
bG9uZU5vZGUodHJ1ZSkpOwotICAgICAgICAgICAgICAgIGMtPnNldERhdGEoYy0+ZGF0YSgpLnN1
YnN0cmluZyhtX3N0YXJ0T2Zmc2V0KSwgZWMpOworICAgICAgICB9IGVsc2UgaWYgKG1fc3RhcnQu
Y29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9E
RSkgeworICAgICAgICAgICAgaWYgKHNob3VsZENvcHkpIHsKKyAgICAgICAgICAgICAgICBSZWZQ
dHI8UHJvY2Vzc2luZ0luc3RydWN0aW9uPiBjID0gc3RhdGljX3BvaW50ZXJfY2FzdDxQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24+KG1fc3RhcnQuY29udGFpbmVyLT5jbG9uZU5vZGUodHJ1ZSkpOworICAg
ICAgICAgICAgICAgIGMtPnNldERhdGEoYy0+ZGF0YSgpLnN1YnN0cmluZyhtX3N0YXJ0Lm9mZnNl
dCksIGVjKTsKICAgICAgICAgICAgICAgICBsZWZ0Q29udGVudHMgPSBjLnJlbGVhc2UoKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gRVhUUkFDVF9DT05URU5UUyB8
fCBhY3Rpb24gPT0gREVMRVRFX0NPTlRFTlRTKSB7Ci0gICAgICAgICAgICAgICAgUHJvY2Vzc2lu
Z0luc3RydWN0aW9uKiBwaT0gc3RhdGljX2Nhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uKj4obV9z
dGFydENvbnRhaW5lci5nZXQoKSk7CisgICAgICAgICAgICBpZiAoc2hvdWxkRGVsZXRlKSB7Cisg
ICAgICAgICAgICAgICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uKiBwaT0gc3RhdGljX2Nhc3Q8UHJv
Y2Vzc2luZ0luc3RydWN0aW9uKj4obV9zdGFydC5jb250YWluZXIuZ2V0KCkpOwogICAgICAgICAg
ICAgICAgIFN0cmluZyBkYXRhKHBpLT5kYXRhKCkpOwotICAgICAgICAgICAgICAgIHBpLT5zZXRE
YXRhKGRhdGEubGVmdChtX3N0YXJ0T2Zmc2V0KSwgZWMpOworICAgICAgICAgICAgICAgIHBpLT5z
ZXREYXRhKGRhdGEubGVmdChtX3N0YXJ0Lm9mZnNldCksIGVjKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gRVhUUkFD
VF9DT05URU5UUyB8fCBhY3Rpb24gPT0gQ0xPTkVfQ09OVEVOVFMpCi0gICAgICAgICAgICAgICAg
bGVmdENvbnRlbnRzID0gbV9zdGFydENvbnRhaW5lci0+Y2xvbmVOb2RlKGZhbHNlKTsKLSAgICAg
ICAgICAgIE5vZGUgKm4gPSBtX3N0YXJ0Q29udGFpbmVyLT5maXJzdENoaWxkKCk7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBuICYmIGkgPCBtX3N0YXJ0T2Zmc2V0OyBpKyspIC8v
IHNraXAgdW50aWwgbV9zdGFydE9mZnNldAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKHNob3VsZENvcHkpCisgICAgICAgICAgICAgICAgbGVmdENvbnRlbnRzID0gbV9zdGFydC5j
b250YWluZXItPmNsb25lTm9kZShmYWxzZSk7CisgICAgICAgICAgICBOb2RlKiBuID0gbV9zdGFy
dC5jb250YWluZXItPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IG4gJiYgaSA8IG1fc3RhcnQub2Zmc2V0OyBpKyspIC8vIHNraXAgdW50aWwgbV9zdGFydC5v
ZmZzZXQKICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAg
IHdoaWxlIChuKSB7IC8vIHByb2Nlc3MgdW50aWwgZW5kCi0gICAgICAgICAgICAgICAgTm9kZSAq
bmV4dCA9IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBF
WFRSQUNUX0NPTlRFTlRTKQotICAgICAgICAgICAgICAgICAgICBsZWZ0Q29udGVudHMtPmFwcGVu
ZENoaWxkKG4sZWMpOyAvLyB3aWxsIHJlbW92ZSBuIGZyb20gbV9zdGFydENvbnRhaW5lcgotICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGFjdGlvbiA9PSBDTE9ORV9DT05URU5UUykKLSAgICAgICAg
ICAgICAgICAgICAgbGVmdENvbnRlbnRzLT5hcHBlbmRDaGlsZChuLT5jbG9uZU5vZGUodHJ1ZSks
ZWMpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9zdGFydENv
bnRhaW5lci0+cmVtb3ZlQ2hpbGQobixlYyk7CisgICAgICAgICAgICAgICAgTm9kZSogbmV4dCA9
IG4tPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZENvcHkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZERlbGV0ZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxlZnRDb250ZW50cy0+YXBwZW5kQ2hpbGQobiwgZWMpOyAvLyB3aWxsIHJlbW92ZSBuIGZy
b20gbV9zdGFydC5jb250YWluZXIKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgbGVmdENvbnRlbnRzLT5hcHBlbmRDaGlsZChuLT5jbG9uZU5vZGUodHJ1
ZSksIGVjKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoc2hvdWxkRGVsZXRlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGFydC5jb250YWlu
ZXItPnJlbW92ZUNoaWxkKG4sIGVjKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgbiA9IG5leHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBOb2RlICps
ZWZ0UGFyZW50ID0gbV9zdGFydENvbnRhaW5lci0+cGFyZW50Tm9kZSgpOwotICAgICAgICBOb2Rl
ICpuID0gbV9zdGFydENvbnRhaW5lci0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgZm9yICg7IGxl
ZnRQYXJlbnQgIT0gY21uUm9vdDsgbGVmdFBhcmVudCA9IGxlZnRQYXJlbnQtPnBhcmVudE5vZGUo
KSkgewotICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBFWFRSQUNUX0NPTlRFTlRTIHx8IGFjdGlv
biA9PSBDTE9ORV9DT05URU5UUykgeworICAgICAgICBOb2RlKiBuID0gbV9zdGFydC5jb250YWlu
ZXItPm5leHRTaWJsaW5nKCk7CisgICAgICAgIGZvciAoTm9kZSogbGVmdFBhcmVudCA9IG1fc3Rh
cnQuY29udGFpbmVyLT5wYXJlbnROb2RlKCk7IGxlZnRQYXJlbnQgIT0gY29tbW9uQW5jZXN0b3I7
IGxlZnRQYXJlbnQgPSBsZWZ0UGFyZW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgICAgIGlm
IChzaG91bGRDb3B5KSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPE5vZGU+IGxlZnRDb250ZW50
c1BhcmVudCA9IGxlZnRQYXJlbnQtPmNsb25lTm9kZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAg
bGVmdENvbnRlbnRzUGFyZW50LT5hcHBlbmRDaGlsZChsZWZ0Q29udGVudHMsZWMpOworICAgICAg
ICAgICAgICAgIGxlZnRDb250ZW50c1BhcmVudC0+YXBwZW5kQ2hpbGQobGVmdENvbnRlbnRzLCBl
Yyk7CiAgICAgICAgICAgICAgICAgbGVmdENvbnRlbnRzID0gbGVmdENvbnRlbnRzUGFyZW50Owog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBOb2RlICpuZXh0OworICAgICAgICAgICAgTm9k
ZSogbmV4dDsKICAgICAgICAgICAgIGZvciAoOyBuOyBuID0gbmV4dCkgewogICAgICAgICAgICAg
ICAgIG5leHQgPSBuLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgIGlmIChhY3Rpb24g
PT0gRVhUUkFDVF9DT05URU5UUykKLSAgICAgICAgICAgICAgICAgICAgbGVmdENvbnRlbnRzLT5h
cHBlbmRDaGlsZChuLGVjKTsgLy8gd2lsbCByZW1vdmUgbiBmcm9tIGxlZnRQYXJlbnQKLSAgICAg
ICAgICAgICAgICBlbHNlIGlmIChhY3Rpb24gPT0gQ0xPTkVfQ09OVEVOVFMpCi0gICAgICAgICAg
ICAgICAgICAgIGxlZnRDb250ZW50cy0+YXBwZW5kQ2hpbGQobi0+Y2xvbmVOb2RlKHRydWUpLGVj
KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGxlZnRQYXJlbnQt
PnJlbW92ZUNoaWxkKG4sZWMpOworICAgICAgICAgICAgICAgIGlmIChzaG91bGRDb3B5KSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGREZWxldGUpCisgICAgICAgICAgICAgICAgICAg
ICAgICBsZWZ0Q29udGVudHMtPmFwcGVuZENoaWxkKG4sIGVjKTsgLy8gd2lsbCByZW1vdmUgbiBm
cm9tIGxlZnRQYXJlbnQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdENvbnRlbnRzLT5hcHBlbmRDaGlsZChuLT5jbG9uZU5vZGUodHJ1ZSksIGVj
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
c2hvdWxkRGVsZXRlKTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdFBhcmVudC0+cmVtb3ZlQ2hp
bGQobiwgZWMpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IG4gPSBsZWZ0UGFyZW50LT5uZXh0U2libGluZygpOwogICAgICAgICB9CiAgICAgfQogCiAgICAg
UmVmUHRyPE5vZGU+IHJpZ2h0Q29udGVudHMgPSAwOwotICAgIGlmIChtX2VuZENvbnRhaW5lciAh
PSBjbW5Sb290KSB7CisgICAgaWYgKG1fZW5kLmNvbnRhaW5lciAhPSBjb21tb25BbmNlc3Rvcikg
ewogICAgICAgICAvLyBkZWxldGUgdGhlIHJpZ2h0LWhhbmQgc2lkZSBvZiB0aGUgcmFuZ2UsIHVw
IHVudGlsIHRoZSBsYXN0IGFuY2VzdG9yIG9mCi0gICAgICAgIC8vIG1fZW5kQ29udGFpbmVyIGJl
Zm9yZSBjbW5Sb290Ci0gICAgICAgIGlmKG1fZW5kQ29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5v
ZGU6OlRFWFRfTk9ERSB8fAotICAgICAgICAgICBtX2VuZENvbnRhaW5lci0+bm9kZVR5cGUoKSA9
PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUgfHwKLSAgICAgICAgICAgbV9lbmRDb250YWluZXIt
Pm5vZGVUeXBlKCkgPT0gTm9kZTo6Q09NTUVOVF9OT0RFKSB7Ci0KLSAgICAgICAgICAgIGlmIChh
Y3Rpb24gPT0gRVhUUkFDVF9DT05URU5UUyB8fCBhY3Rpb24gPT0gQ0xPTkVfQ09OVEVOVFMpIHsK
LSAgICAgICAgICAgICAgICBSZWZQdHI8Q2hhcmFjdGVyRGF0YT4gYyA9IHN0YXRpY19wb2ludGVy
X2Nhc3Q8Q2hhcmFjdGVyRGF0YT4obV9lbmRDb250YWluZXItPmNsb25lTm9kZSh0cnVlKSk7Ci0g
ICAgICAgICAgICAgICAgYy0+ZGVsZXRlRGF0YShtX2VuZE9mZnNldCwgc3RhdGljX2Nhc3Q8Q2hh
cmFjdGVyRGF0YSo+KG1fZW5kQ29udGFpbmVyLmdldCgpKS0+bGVuZ3RoKCkgLSBtX2VuZE9mZnNl
dCwgZWMpOworICAgICAgICAvLyBlbmQgY29udGFpbmVyIGJlZm9yZSBjb21tb25BbmNlc3Rvcgor
ICAgICAgICBpZihtX2VuZC5jb250YWluZXItPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RF
IHx8CisgICAgICAgICAgIG1fZW5kLmNvbnRhaW5lci0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFU
QV9TRUNUSU9OX05PREUgfHwKKyAgICAgICAgICAgbV9lbmQuY29udGFpbmVyLT5ub2RlVHlwZSgp
ID09IE5vZGU6OkNPTU1FTlRfTk9ERSkgeworCisgICAgICAgICAgICBpZiAoc2hvdWxkQ29weSkg
eworICAgICAgICAgICAgICAgIFJlZlB0cjxDaGFyYWN0ZXJEYXRhPiBjID0gc3RhdGljX3BvaW50
ZXJfY2FzdDxDaGFyYWN0ZXJEYXRhPihtX2VuZC5jb250YWluZXItPmNsb25lTm9kZSh0cnVlKSk7
CisgICAgICAgICAgICAgICAgYy0+ZGVsZXRlRGF0YShtX2VuZC5vZmZzZXQsIHN0YXRpY19jYXN0
PENoYXJhY3RlckRhdGEqPihtX2VuZC5jb250YWluZXIuZ2V0KCkpLT5sZW5ndGgoKSAtIG1fZW5k
Lm9mZnNldCwgZWMpOwogICAgICAgICAgICAgICAgIHJpZ2h0Q29udGVudHMgPSBjOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBFWFRSQUNUX0NPTlRFTlRTIHx8IGFj
dGlvbiA9PSBERUxFVEVfQ09OVEVOVFMpIHsKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxD
aGFyYWN0ZXJEYXRhKj4obV9lbmRDb250YWluZXIuZ2V0KCkpLT5kZWxldGVEYXRhKDAsIG1fZW5k
T2Zmc2V0LCBlYyk7Ci0gICAgICAgICAgICAgICAgbV9zdGFydENvbnRhaW5lci0+ZG9jdW1lbnQo
KS0+dXBkYXRlTGF5b3V0KCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkRGVsZXRlKSB7CisgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YSo+KG1fZW5kLmNvbnRhaW5lci5n
ZXQoKSktPmRlbGV0ZURhdGEoMCwgbV9lbmQub2Zmc2V0LCBlYyk7CisgICAgICAgICAgICAgICAg
bV9zdGFydC5jb250YWluZXItPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1fZW5kQ29udGFpbmVyLT5ub2RlVHlw
ZSgpID09IE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSkgewotICAgICAgICAgICAg
aWYgKGFjdGlvbiA9PSBFWFRSQUNUX0NPTlRFTlRTIHx8IGFjdGlvbiA9PSBDTE9ORV9DT05URU5U
UykgewotICAgICAgICAgICAgICAgIFJlZlB0cjxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+IGMgPSBz
dGF0aWNfcG9pbnRlcl9jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4obV9lbmRDb250YWluZXIt
PmNsb25lTm9kZSh0cnVlKSk7Ci0gICAgICAgICAgICAgICAgYy0+c2V0RGF0YShjLT5kYXRhKCku
bGVmdChtX2VuZE9mZnNldCksIGVjKTsKKyAgICAgICAgfSBlbHNlIGlmIChtX2VuZC5jb250YWlu
ZXItPm5vZGVUeXBlKCkgPT0gTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKSB7Cisg
ICAgICAgICAgICBpZiAoc2hvdWxkQ29weSkgeworICAgICAgICAgICAgICAgIFJlZlB0cjxQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24+IGMgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFByb2Nlc3NpbmdJbnN0
cnVjdGlvbj4obV9lbmQuY29udGFpbmVyLT5jbG9uZU5vZGUodHJ1ZSkpOworICAgICAgICAgICAg
ICAgIGMtPnNldERhdGEoYy0+ZGF0YSgpLmxlZnQobV9lbmQub2Zmc2V0KSwgZWMpOwogICAgICAg
ICAgICAgICAgIHJpZ2h0Q29udGVudHMgPSBjLnJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChhY3Rpb24gPT0gRVhUUkFDVF9DT05URU5UUyB8fCBhY3Rpb24gPT0gREVM
RVRFX0NPTlRFTlRTKSB7Ci0gICAgICAgICAgICAgICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uKiBw
aT0gc3RhdGljX2Nhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uKj4obV9lbmRDb250YWluZXIuZ2V0
KCkpOwotICAgICAgICAgICAgICAgIHBpLT5zZXREYXRhKHBpLT5kYXRhKCkuc3Vic3RyaW5nKG1f
ZW5kT2Zmc2V0KSwgZWMpOworICAgICAgICAgICAgaWYgKHNob3VsZERlbGV0ZSkgeworICAgICAg
ICAgICAgICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcGk9IHN0YXRpY19jYXN0PFByb2Nlc3Np
bmdJbnN0cnVjdGlvbio+KG1fZW5kLmNvbnRhaW5lci5nZXQoKSk7CisgICAgICAgICAgICAgICAg
cGktPnNldERhdGEocGktPmRhdGEoKS5zdWJzdHJpbmcobV9lbmQub2Zmc2V0KSwgZWMpOwogICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKGFj
dGlvbiA9PSBFWFRSQUNUX0NPTlRFTlRTIHx8IGFjdGlvbiA9PSBDTE9ORV9DT05URU5UUykKLSAg
ICAgICAgICAgICAgICByaWdodENvbnRlbnRzID0gbV9lbmRDb250YWluZXItPmNsb25lTm9kZShm
YWxzZSk7Ci0gICAgICAgICAgICBOb2RlICpuID0gbV9lbmRDb250YWluZXItPmZpcnN0Q2hpbGQo
KTsKLSAgICAgICAgICAgIGlmIChuICYmIG1fZW5kT2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSsxIDwgbV9lbmRPZmZzZXQ7IGkrKykgeyAvLyBza2lwIHRv
IG1fZW5kT2Zmc2V0Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUgKm5leHQgPSBuLT5uZXh0U2li
bGluZygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHNob3VsZENvcHkpCisg
ICAgICAgICAgICAgICAgcmlnaHRDb250ZW50cyA9IG1fZW5kLmNvbnRhaW5lci0+Y2xvbmVOb2Rl
KGZhbHNlKTsKKyAgICAgICAgICAgIE5vZGUqIG4gPSBtX2VuZC5jb250YWluZXItPmZpcnN0Q2hp
bGQoKTsKKyAgICAgICAgICAgIGlmIChuICYmIG1fZW5kLm9mZnNldCkgeworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkrMSA8IG1fZW5kLm9mZnNldDsgaSsrKSB7IC8vIHNr
aXAgdG8gbV9lbmQub2Zmc2V0CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5leHQgPSBuLT5u
ZXh0U2libGluZygpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHQpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgbiA9IG5leHQ7CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIE5vZGUgKnByZXY7CisgICAgICAgICAgICAg
ICAgTm9kZSogcHJldjsKICAgICAgICAgICAgICAgICBmb3IgKDsgbjsgbiA9IHByZXYpIHsKICAg
ICAgICAgICAgICAgICAgICAgcHJldiA9IG4tPnByZXZpb3VzU2libGluZygpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoYWN0aW9uID09IEVYVFJBQ1RfQ09OVEVOVFMpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByaWdodENvbnRlbnRzLT5pbnNlcnRCZWZvcmUobixyaWdodENvbnRlbnRzLT5m
aXJzdENoaWxkKCksZWMpOyAvLyB3aWxsIHJlbW92ZSBuIGZyb20gaXQncyBwYXJlbnQKLSAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uID09IENMT05FX0NPTlRFTlRTKQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmlnaHRDb250ZW50cy0+aW5zZXJ0QmVmb3JlKG4tPmNsb25lTm9k
ZSh0cnVlKSxyaWdodENvbnRlbnRzLT5maXJzdENoaWxkKCksZWMpOwotICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2VuZENvbnRhaW5lci0+cmVtb3Zl
Q2hpbGQobixlYyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRDb3B5KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRGVsZXRlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJpZ2h0Q29udGVudHMtPmluc2VydEJlZm9yZShuLCByaWdodENvbnRlbnRzLT5m
aXJzdENoaWxkKCksIGVjKTsgLy8gd2lsbCByZW1vdmUgbiBmcm9tIGl0cyBwYXJlbnQKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdo
dENvbnRlbnRzLT5pbnNlcnRCZWZvcmUobi0+Y2xvbmVOb2RlKHRydWUpLCByaWdodENvbnRlbnRz
LT5maXJzdENoaWxkKCksIGVjKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChzaG91bGREZWxldGUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9lbmQuY29udGFpbmVyLT5yZW1vdmVDaGlsZChuLCBlYyk7CisgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAotICAgICAgICBOb2RlICpyaWdodFBhcmVudCA9IG1fZW5kQ29udGFpbmVyLT5wYXJlbnROb2Rl
KCk7Ci0gICAgICAgIE5vZGUgKm4gPSBtX2VuZENvbnRhaW5lci0+cHJldmlvdXNTaWJsaW5nKCk7
Ci0gICAgICAgIGZvciAoOyByaWdodFBhcmVudCAhPSBjbW5Sb290OyByaWdodFBhcmVudCA9IHJp
Z2h0UGFyZW50LT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gRVhU
UkFDVF9DT05URU5UUyB8fCBhY3Rpb24gPT0gQ0xPTkVfQ09OVEVOVFMpIHsKKyAgICAgICAgTm9k
ZSogbiA9IG1fZW5kLmNvbnRhaW5lci0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgIGZvciAo
Tm9kZSogcmlnaHRQYXJlbnQgPSBtX2VuZC5jb250YWluZXItPnBhcmVudE5vZGUoKTsgcmlnaHRQ
YXJlbnQgIT0gY29tbW9uQW5jZXN0b3I7IHJpZ2h0UGFyZW50ID0gcmlnaHRQYXJlbnQtPnBhcmVu
dE5vZGUoKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZENvcHkpIHsKICAgICAgICAgICAgICAg
ICBSZWZQdHI8Tm9kZT4gcmlnaHRDb250ZW50c1BhcmVudCA9IHJpZ2h0UGFyZW50LT5jbG9uZU5v
ZGUoZmFsc2UpOwotICAgICAgICAgICAgICAgIHJpZ2h0Q29udGVudHNQYXJlbnQtPmFwcGVuZENo
aWxkKHJpZ2h0Q29udGVudHMsZWMpOworICAgICAgICAgICAgICAgIHJpZ2h0Q29udGVudHNQYXJl
bnQtPmFwcGVuZENoaWxkKHJpZ2h0Q29udGVudHMsIGVjKTsKICAgICAgICAgICAgICAgICByaWdo
dENvbnRlbnRzID0gcmlnaHRDb250ZW50c1BhcmVudDsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgTm9kZSAqcHJldjsKKyAgICAgICAgICAgIE5vZGUqIHByZXY7CiAgICAgICAgICAgICBm
b3IgKDsgbjsgbiA9IHByZXYpIHsKICAgICAgICAgICAgICAgICBwcmV2ID0gbi0+cHJldmlvdXNT
aWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBFWFRSQUNUX0NPTlRFTlRT
KQotICAgICAgICAgICAgICAgICAgICByaWdodENvbnRlbnRzLT5pbnNlcnRCZWZvcmUobixyaWdo
dENvbnRlbnRzLT5maXJzdENoaWxkKCksZWMpOyAvLyB3aWxsIHJlbW92ZSBuIGZyb20gaXQncyBw
YXJlbnQKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChhY3Rpb24gPT0gQ0xPTkVfQ09OVEVOVFMp
Ci0gICAgICAgICAgICAgICAgICAgIHJpZ2h0Q29udGVudHMtPmluc2VydEJlZm9yZShuLT5jbG9u
ZU5vZGUodHJ1ZSkscmlnaHRDb250ZW50cy0+Zmlyc3RDaGlsZCgpLGVjKTsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJpZ2h0UGFyZW50LT5yZW1vdmVDaGlsZChu
LGVjKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQ29weSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoc2hvdWxkRGVsZXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRDb250
ZW50cy0+aW5zZXJ0QmVmb3JlKG4sIHJpZ2h0Q29udGVudHMtPmZpcnN0Q2hpbGQoKSwgZWMpOyAv
LyB3aWxsIHJlbW92ZSBuIGZyb20gaXRzIHBhcmVudAorICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICByaWdodENvbnRlbnRzLT5pbnNlcnRCZWZvcmUobi0+
Y2xvbmVOb2RlKHRydWUpLCByaWdodENvbnRlbnRzLT5maXJzdENoaWxkKCksIGVjKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc2hvdWxkRGVs
ZXRlKTsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHRQYXJlbnQtPnJlbW92ZUNoaWxkKG4sIGVj
KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBuID0gcmln
aHRQYXJlbnQtPnByZXZpb3VzU2libGluZygpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8g
ZGVsZXRlIGFsbCBjaGlsZHJlbiBvZiBjbW5Sb290IGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQg
Y29udGFpbmVyCisgICAgLy8gZGVsZXRlIGFsbCBjaGlsZHJlbiBvZiBjb21tb25BbmNlc3RvciBi
ZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIGNvbnRhaW5lcgogCi0gICAgTm9kZSAqcHJvY2Vzc1N0
YXJ0OyAvLyBjaGlsZCBvZiBjbW5Sb29vdAotICAgIGlmIChtX3N0YXJ0Q29udGFpbmVyID09IGNt
blJvb3QpIHsKLSAgICAgICAgdW5zaWduZWQgaTsKLSAgICAgICAgcHJvY2Vzc1N0YXJ0ID0gbV9z
dGFydENvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9z
dGFydE9mZnNldDsgaSsrKQotICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0ID0gcHJvY2Vzc1N0YXJ0
LT5uZXh0U2libGluZygpOwotICAgIH0KKyAgICBOb2RlKiBwcm9jZXNzU3RhcnQ7IC8vIGNoaWxk
IG9mIGNvbW1vbkFuY2VzdG9yCisgICAgaWYgKG1fc3RhcnQuY29udGFpbmVyID09IGNvbW1vbkFu
Y2VzdG9yKQorICAgICAgICBwcm9jZXNzU3RhcnQgPSBtX3N0YXJ0LmNvbnRhaW5lci0+Y2hpbGRO
b2RlKG1fc3RhcnQub2Zmc2V0KTsKICAgICBlbHNlIHsKLSAgICAgICAgcHJvY2Vzc1N0YXJ0ID0g
bV9zdGFydENvbnRhaW5lci5nZXQoKTsKLSAgICAgICAgd2hpbGUgKHByb2Nlc3NTdGFydC0+cGFy
ZW50Tm9kZSgpICE9IGNtblJvb3QpCisgICAgICAgIHByb2Nlc3NTdGFydCA9IG1fc3RhcnQuY29u
dGFpbmVyLmdldCgpOworICAgICAgICB3aGlsZSAocHJvY2Vzc1N0YXJ0LT5wYXJlbnROb2RlKCkg
IT0gY29tbW9uQW5jZXN0b3IpCiAgICAgICAgICAgICBwcm9jZXNzU3RhcnQgPSBwcm9jZXNzU3Rh
cnQtPnBhcmVudE5vZGUoKTsKICAgICAgICAgcHJvY2Vzc1N0YXJ0ID0gcHJvY2Vzc1N0YXJ0LT5u
ZXh0U2libGluZygpOwogICAgIH0KLSAgICBOb2RlICpwcm9jZXNzRW5kOyAvLyBjaGlsZCBvZiBj
bW5Sb29vdAotICAgIGlmIChtX2VuZENvbnRhaW5lciA9PSBjbW5Sb290KSB7Ci0gICAgICAgIHVu
c2lnbmVkIGk7Ci0gICAgICAgIHByb2Nlc3NFbmQgPSBtX2VuZENvbnRhaW5lci0+Zmlyc3RDaGls
ZCgpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9lbmRPZmZzZXQ7IGkrKykKLSAgICAgICAg
ICAgIHByb2Nlc3NFbmQgPSBwcm9jZXNzRW5kLT5uZXh0U2libGluZygpOwotICAgIH0KKyAgICBO
b2RlKiBwcm9jZXNzRW5kOyAvLyBjaGlsZCBvZiBjb21tb25BbmNlc3RvcgorICAgIGlmIChtX2Vu
ZC5jb250YWluZXIgPT0gY29tbW9uQW5jZXN0b3IpCisgICAgICAgIHByb2Nlc3NFbmQgPSBtX2Vu
ZC5jb250YWluZXItPmNoaWxkTm9kZShtX2VuZC5vZmZzZXQpOwogICAgIGVsc2UgewotICAgICAg
ICBwcm9jZXNzRW5kID0gbV9lbmRDb250YWluZXIuZ2V0KCk7Ci0gICAgICAgIHdoaWxlIChwcm9j
ZXNzRW5kLT5wYXJlbnROb2RlKCkgIT0gY21uUm9vdCkKKyAgICAgICAgcHJvY2Vzc0VuZCA9IG1f
ZW5kLmNvbnRhaW5lci5nZXQoKTsKKyAgICAgICAgd2hpbGUgKHByb2Nlc3NFbmQtPnBhcmVudE5v
ZGUoKSAhPSBjb21tb25BbmNlc3RvcikKICAgICAgICAgICAgIHByb2Nlc3NFbmQgPSBwcm9jZXNz
RW5kLT5wYXJlbnROb2RlKCk7CiAgICAgfQogCiAgICAgLy8gTm93IGFkZCBsZWZ0Q29udGVudHMs
IHN0dWZmIGluIGJldHdlZW4sIGFuZCByaWdodENvbnRlbnRzIHRvIHRoZSBmcmFnbWVudAogICAg
IC8vIChvciBqdXN0IGRlbGV0ZSB0aGUgc3R1ZmYgaW4gYmV0d2VlbikKIAotICAgIGlmICgoYWN0
aW9uID09IEVYVFJBQ1RfQ09OVEVOVFMgfHwgYWN0aW9uID09IENMT05FX0NPTlRFTlRTKSAmJiBs
ZWZ0Q29udGVudHMpCi0gICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQobGVmdENvbnRlbnRzLGVj
KTsKKyAgICBpZiAoc2hvdWxkQ29weSAmJiBsZWZ0Q29udGVudHMpCisgICAgICAgIGZyYWdtZW50
LT5hcHBlbmRDaGlsZChsZWZ0Q29udGVudHMsIGVjKTsKIAotICAgIE5vZGUgKm5leHQ7Ci0gICAg
Tm9kZSAqbjsKICAgICBpZiAocHJvY2Vzc1N0YXJ0KSB7Ci0gICAgICAgIGZvciAobiA9IHByb2Nl
c3NTdGFydDsgbiAmJiBuICE9IHByb2Nlc3NFbmQ7IG4gPSBuZXh0KSB7CisgICAgICAgIE5vZGUq
IG5leHQ7CisgICAgICAgIGZvciAoTm9kZSogbiA9IHByb2Nlc3NTdGFydDsgbiAmJiBuICE9IHBy
b2Nlc3NFbmQ7IG4gPSBuZXh0KSB7CiAgICAgICAgICAgICBuZXh0ID0gbi0+bmV4dFNpYmxpbmco
KTsKLQotICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBFWFRSQUNUX0NPTlRFTlRTKQotICAgICAg
ICAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChuLGVjKTsgLy8gd2lsbCByZW1vdmUgZnJv
bSBjbW5Sb290Ci0gICAgICAgICAgICBlbHNlIGlmIChhY3Rpb24gPT0gQ0xPTkVfQ09OVEVOVFMp
Ci0gICAgICAgICAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKG4tPmNsb25lTm9kZSh0cnVl
KSxlYyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY21uUm9vdC0+cmVtb3Zl
Q2hpbGQobixlYyk7CisgICAgICAgICAgICBpZiAoc2hvdWxkQ29weSkgeworICAgICAgICAgICAg
ICAgIGlmIChzaG91bGREZWxldGUpCisgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50LT5hcHBl
bmRDaGlsZChuLCBlYyk7IC8vIHdpbGwgcmVtb3ZlIGZyb20gY29tbW9uQW5jZXN0b3IKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGls
ZChuLT5jbG9uZU5vZGUodHJ1ZSksIGVjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHNob3VsZERlbGV0ZSk7CisgICAgICAgICAgICAgICAgY29tbW9uQW5j
ZXN0b3ItPnJlbW92ZUNoaWxkKG4sIGVjKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmICgoYWN0aW9uID09IEVYVFJBQ1RfQ09OVEVOVFMgfHwgYWN0aW9uID09IENM
T05FX0NPTlRFTlRTKSAmJiByaWdodENvbnRlbnRzKQotICAgICAgZnJhZ21lbnQtPmFwcGVuZENo
aWxkKHJpZ2h0Q29udGVudHMsZWMpOworICAgIGlmIChzaG91bGRDb3B5ICYmIHJpZ2h0Q29udGVu
dHMpCisgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChyaWdodENvbnRlbnRzLCBlYyk7CiAK
ICAgICAvLyBjb2xsYXBzZSB0byB0aGUgcHJvcGVyIHBvc2l0aW9uIC0gc2VlIHNwZWMgc2VjdGlv
biAyLjYKLSAgICBpZiAoYWN0aW9uID09IEVYVFJBQ1RfQ09OVEVOVFMgfHwgYWN0aW9uID09IERF
TEVURV9DT05URU5UUykgeworICAgIGlmIChzaG91bGREZWxldGUpIHsKICAgICAgICAgaWYgKCFw
YXJ0aWFsU3RhcnQgJiYgIXBhcnRpYWxFbmQpCi0gICAgICAgICAgICBjb2xsYXBzZSh0cnVlLGVj
KTsKKyAgICAgICAgICAgIGNvbGxhcHNlKHRydWUsIGVjKTsKICAgICAgICAgZWxzZSBpZiAocGFy
dGlhbFN0YXJ0KSB7Ci0gICAgICAgICAgICBtX3N0YXJ0Q29udGFpbmVyID0gcGFydGlhbFN0YXJ0
LT5wYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICBtX2VuZENvbnRhaW5lciA9IHBhcnRpYWxTdGFy
dC0+cGFyZW50Tm9kZSgpOwotICAgICAgICAgICAgbV9zdGFydE9mZnNldCA9IG1fZW5kT2Zmc2V0
ID0gcGFydGlhbFN0YXJ0LT5ub2RlSW5kZXgoKSsxOwotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
aWYgKHBhcnRpYWxFbmQpIHsKLSAgICAgICAgICAgIG1fc3RhcnRDb250YWluZXIgPSBwYXJ0aWFs
RW5kLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICBtX2VuZENvbnRhaW5lciA9IHBhcnRpYWxF
bmQtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgIG1fc3RhcnRPZmZzZXQgPSBtX2VuZE9mZnNl
dCA9IHBhcnRpYWxFbmQtPm5vZGVJbmRleCgpOworICAgICAgICAgICAgc2V0U3RhcnRDb250YWlu
ZXIocGFydGlhbFN0YXJ0LT5wYXJlbnROb2RlKCkpOworICAgICAgICAgICAgc2V0RW5kQ29udGFp
bmVyKHBhcnRpYWxTdGFydC0+cGFyZW50Tm9kZSgpKTsKKyAgICAgICAgICAgIG1fc3RhcnQub2Zm
c2V0ID0gcGFydGlhbFN0YXJ0LT5ub2RlSW5kZXgoKSArIDE7CisgICAgICAgICAgICBtX2VuZC5v
ZmZzZXQgPSBtX3N0YXJ0Lm9mZnNldDsKKyAgICAgICAgfSBlbHNlIGlmIChwYXJ0aWFsRW5kKSB7
CisgICAgICAgICAgICBzZXRTdGFydENvbnRhaW5lcihwYXJ0aWFsRW5kLT5wYXJlbnROb2RlKCkp
OworICAgICAgICAgICAgc2V0RW5kQ29udGFpbmVyKHBhcnRpYWxFbmQtPnBhcmVudE5vZGUoKSk7
CisgICAgICAgICAgICBtX3N0YXJ0Lm9mZnNldCA9IHBhcnRpYWxFbmQtPm5vZGVJbmRleCgpOwor
ICAgICAgICAgICAgbV9lbmQub2Zmc2V0ID0gbV9zdGFydC5vZmZzZXQ7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKQEAgLTk1OCw3ICs5NzAsNyBAQCBQ
YXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFJhbmdlOjpwcm9jCiAKIFBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gUmFuZ2U6OmV4dHJhY3RDb250ZW50cyhFeGNlcHRpb25Db2RlJiBlYykK
IHsKLSAgICBpZiAobV9kZXRhY2hlZCkgeworICAgIGlmICghbV9zdGFydC5jb250YWluZXIpIHsK
ICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQpAQCAtOTY4LDI0ICs5ODAsMjQgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5n
ZTo6ZXh0cgogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gcHJv
Y2Vzc0NvbnRlbnRzKEVYVFJBQ1RfQ09OVEVOVFMsZWMpOworICAgIHJldHVybiBwcm9jZXNzQ29u
dGVudHModHJ1ZSwgdHJ1ZSwgZWMpOwogfQogCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IFJhbmdlOjpjbG9uZUNvbnRlbnRzKCBpbnQgJmVjICApCitQYXNzUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IFJhbmdlOjpjbG9uZUNvbnRlbnRzKEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlm
IChtX2RldGFjaGVkKSB7CisgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lcikgewogICAgICAgICBl
YyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBy
ZXR1cm4gcHJvY2Vzc0NvbnRlbnRzKENMT05FX0NPTlRFTlRTLGVjKTsKKyAgICByZXR1cm4gcHJv
Y2Vzc0NvbnRlbnRzKGZhbHNlLCB0cnVlLCBlYyk7CiB9CiAKIHZvaWQgUmFuZ2U6Omluc2VydE5v
ZGUoUGFzc1JlZlB0cjxOb2RlPiBuZXdOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBl
YyA9IDA7CiAKLSAgICBpZiAobV9kZXRhY2hlZCkgeworICAgIGlmICghbV9zdGFydC5jb250YWlu
ZXIpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTEwMDQsMzMgKzEwMTYsMzEgQEAgdm9pZCBSYW5nZTo6aW5zZXJ0Tm9kZShQYXNz
UmVmUHRyPE5vZGU+IAogCiAgICAgLy8gV1JPTkdfRE9DVU1FTlRfRVJSOiBSYWlzZWQgaWYgbmV3
UGFyZW50IGFuZCB0aGUgY29udGFpbmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgUmFuZ2Ugd2VyZQog
ICAgIC8vIG5vdCBjcmVhdGVkIGZyb20gdGhlIHNhbWUgZG9jdW1lbnQuCi0gICAgaWYgKG5ld05v
ZGUtPmRvY3VtZW50KCkgIT0gbV9zdGFydENvbnRhaW5lci0+ZG9jdW1lbnQoKSkgeworICAgIGlm
IChuZXdOb2RlLT5kb2N1bWVudCgpICE9IG1fc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpKSB7
CiAgICAgICAgIGVjID0gV1JPTkdfRE9DVU1FTlRfRVJSOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0KICAgICAvLyBISUVSQVJDSFlfUkVRVUVTVF9FUlI6IFJhaXNlZCBpZiB0aGUgY29udGFp
bmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgUmFuZ2UgaXMgb2YgYSB0eXBlIHRoYXQKICAgICAvLyBk
b2VzIG5vdCBhbGxvdyBjaGlsZHJlbiBvZiB0aGUgdHlwZSBvZiBuZXdOb2RlIG9yIGlmIG5ld05v
ZGUgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGNvbnRhaW5lci4KIAogICAgIC8vIGFuIGV4dHJhIG9u
ZSBoZXJlIC0gaWYgYSB0ZXh0IG5vZGUgaXMgZ29pbmcgdG8gc3BsaXQsIGl0IG11c3QgaGF2ZSBh
IHBhcmVudCB0byBpbnNlcnQgaW50bwotICAgIGlmIChtX3N0YXJ0Q29udGFpbmVyLT5ub2RlVHlw
ZSgpID09IE5vZGU6OlRFWFRfTk9ERSAmJiAhbV9zdGFydENvbnRhaW5lci0+cGFyZW50Tm9kZSgp
KSB7CisgICAgaWYgKG1fc3RhcnQuY29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRf
Tk9ERSAmJiAhbV9zdGFydC5jb250YWluZXItPnBhcmVudE5vZGUoKSkgewogICAgICAgICBlYyA9
IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8v
IEluIHRoZSBjYXNlIHdoZXJlIHRoZSBjb250YWluZXIgaXMgYSB0ZXh0IG5vZGUsIHdlIGNoZWNr
IGFnYWluc3QgdGhlIGNvbnRhaW5lcidzIHBhcmVudCwgYmVjYXVzZQogICAgIC8vIHRleHQgbm9k
ZXMgZ2V0IHNwbGl0IHVwIHVwb24gaW5zZXJ0aW9uLgotICAgIE5vZGUgKmNoZWNrQWdhaW5zdDsK
LSAgICBpZiAobV9zdGFydENvbnRhaW5lci0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUp
Ci0gICAgICAgIGNoZWNrQWdhaW5zdCA9IG1fc3RhcnRDb250YWluZXItPnBhcmVudE5vZGUoKTsK
KyAgICBOb2RlKiBjaGVja0FnYWluc3Q7CisgICAgaWYgKG1fc3RhcnQuY29udGFpbmVyLT5ub2Rl
VHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSkKKyAgICAgICAgY2hlY2tBZ2FpbnN0ID0gbV9zdGFy
dC5jb250YWluZXItPnBhcmVudE5vZGUoKTsKICAgICBlbHNlCi0gICAgICAgIGNoZWNrQWdhaW5z
dCA9IG1fc3RhcnRDb250YWluZXIuZ2V0KCk7CisgICAgICAgIGNoZWNrQWdhaW5zdCA9IG1fc3Rh
cnQuY29udGFpbmVyLmdldCgpOwogCiAgICAgaWYgKG5ld05vZGUtPm5vZGVUeXBlKCkgPT0gTm9k
ZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERSkgewogICAgICAgICAvLyBjaGVjayBlYWNoIGNoaWxk
IG5vZGUsIG5vdCB0aGUgRG9jdW1lbnRGcmFnbWVudCBpdHNlbGYKLSAgICAgICAgTm9kZSAqYzsK
LSAgICAgICAgZm9yIChjID0gbmV3Tm9kZS0+Zmlyc3RDaGlsZCgpOyBjOyBjID0gYy0+bmV4dFNp
YmxpbmcoKSkgeworICAgICAgICBmb3IgKE5vZGUqIGMgPSBuZXdOb2RlLT5maXJzdENoaWxkKCk7
IGM7IGMgPSBjLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoIWNoZWNrQWdhaW5z
dC0+Y2hpbGRUeXBlQWxsb3dlZChjLT5ub2RlVHlwZSgpKSkgewogICAgICAgICAgICAgICAgIGVj
ID0gSElFUkFSQ0hZX1JFUVVFU1RfRVJSOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTEw
NDMsNyArMTA1Myw3IEBAIHZvaWQgUmFuZ2U6Omluc2VydE5vZGUoUGFzc1JlZlB0cjxOb2RlPiAK
ICAgICAgICAgfQogICAgIH0KIAotICAgIGZvciAoTm9kZSAqbiA9IG1fc3RhcnRDb250YWluZXIu
Z2V0KCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG4gPSBtX3N0
YXJ0LmNvbnRhaW5lci5nZXQoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewogICAgICAgICBp
ZiAobiA9PSBuZXdOb2RlKSB7CiAgICAgICAgICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VS
UjsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEwNjAsMzUgKzEwNzAsMzMgQEAgdm9pZCBSYW5n
ZTo6aW5zZXJ0Tm9kZShQYXNzUmVmUHRyPE5vZGU+IAogICAgIH0KIAogICAgIHVuc2lnbmVkIGVu
ZE9mZnNldERlbHRhID0gMDsKLSAgICBpZiAobV9zdGFydENvbnRhaW5lci0+bm9kZVR5cGUoKSA9
PSBOb2RlOjpURVhUX05PREUgfHwKLSAgICAgICAgbV9zdGFydENvbnRhaW5lci0+bm9kZVR5cGUo
KSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUpIHsKLSAgICAgICAgUmVmUHRyPFRleHQ+IG5l
d1RleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obV9zdGFydENvbnRhaW5lci5nZXQoKSktPnNwbGl0
VGV4dChtX3N0YXJ0T2Zmc2V0LCBlYyk7CisgICAgaWYgKG1fc3RhcnQuY29udGFpbmVyLT5ub2Rl
VHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSB8fAorICAgICAgICBtX3N0YXJ0LmNvbnRhaW5lci0+
bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUpIHsKKyAgICAgICAgUmVmUHRy
PFRleHQ+IG5ld1RleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obV9zdGFydC5jb250YWluZXIuZ2V0
KCkpLT5zcGxpdFRleHQobV9zdGFydC5vZmZzZXQsIGVjKTsKICAgICAgICAgaWYgKGVjKQogICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChtX3N0YXJ0Q29udGFpbmVyID09IG1fZW5k
Q29udGFpbmVyKQotICAgICAgICAgICAgZW5kT2Zmc2V0RGVsdGEgPSAtbV9zdGFydE9mZnNldDsK
LQotICAgICAgICBtX3N0YXJ0Q29udGFpbmVyLT5wYXJlbnROb2RlKCktPmluc2VydEJlZm9yZShu
ZXdOb2RlLCBuZXdUZXh0LmdldCgpLCBlYyk7CisgICAgICAgIGlmIChtX3N0YXJ0LmNvbnRhaW5l
ciA9PSBtX2VuZC5jb250YWluZXIpCisgICAgICAgICAgICBlbmRPZmZzZXREZWx0YSA9IC1tX3N0
YXJ0Lm9mZnNldDsKKyAgICAgICAgbV9zdGFydC5jb250YWluZXItPnBhcmVudE5vZGUoKS0+aW5z
ZXJ0QmVmb3JlKG5ld05vZGUsIG5ld1RleHQuZ2V0KCksIGVjKTsKICAgICAgICAgaWYgKGVjKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2VuZENvbnRhaW5lciA9IG5ld1RleHQ7Cisg
ICAgICAgIHNldEVuZENvbnRhaW5lcihuZXdUZXh0KTsKICAgICB9IGVsc2UgewotICAgICAgICBp
ZiAobV9zdGFydENvbnRhaW5lciA9PSBtX2VuZENvbnRhaW5lcikgeworICAgICAgICBpZiAobV9z
dGFydC5jb250YWluZXIgPT0gbV9lbmQuY29udGFpbmVyKSB7CiAgICAgICAgICAgICBib29sIGlz
RnJhZ21lbnQgPSBuZXdOb2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5U
X05PREU7CiAgICAgICAgICAgICBlbmRPZmZzZXREZWx0YSA9IGlzRnJhZ21lbnQgPyBuZXdOb2Rl
LT5jaGlsZE5vZGVDb3VudCgpIDogMTsKICAgICAgICAgfQogCi0gICAgICAgIG1fc3RhcnRDb250
YWluZXItPmluc2VydEJlZm9yZShuZXdOb2RlLCBtX3N0YXJ0Q29udGFpbmVyLT5jaGlsZE5vZGUo
bV9zdGFydE9mZnNldCksIGVjKTsKKyAgICAgICAgbV9zdGFydC5jb250YWluZXItPmluc2VydEJl
Zm9yZShuZXdOb2RlLCBtX3N0YXJ0LmNvbnRhaW5lci0+Y2hpbGROb2RlKG1fc3RhcnQub2Zmc2V0
KSwgZWMpOwogICAgICAgICBpZiAoZWMpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IG1fZW5kT2Zmc2V0ICs9IGVuZE9mZnNldERlbHRhOworICAgIG1fZW5kLm9mZnNldCArPSBlbmRP
ZmZzZXREZWx0YTsKIH0KIAogU3RyaW5nIFJhbmdlOjp0b1N0cmluZyhFeGNlcHRpb25Db2RlJiBl
YykgY29uc3QKIHsKLSAgICBpZiAobV9kZXRhY2hlZCkgeworICAgIGlmICghbV9zdGFydC5jb250
YWluZXIpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwogICAgIH0KQEAgLTExMDAsOCArMTEwOCw4IEBAIFN0cmluZyBSYW5nZTo6dG9T
dHJpbmcoRXhjZXB0aW9uQ29kZSYgZWMKICAgICAgICAgaWYgKG4tPm5vZGVUeXBlKCkgPT0gTm9k
ZTo6VEVYVF9OT0RFIHx8IG4tPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RF
KSB7CiAgICAgICAgICAgICBTdHJpbmcgZGF0YSA9IHN0YXRpY19jYXN0PENoYXJhY3RlckRhdGEq
PihuKS0+ZGF0YSgpOwogICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gZGF0YS5sZW5ndGgo
KTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0gKG4gPT0gbV9zdGFydENvbnRhaW5lcikg
PyBtaW4obV9zdGFydE9mZnNldCwgbGVuZ3RoKSA6IDA7Ci0gICAgICAgICAgICB1bnNpZ25lZCBl
bmQgPSAobiA9PSBtX2VuZENvbnRhaW5lcikgPyBtaW4obWF4KHN0YXJ0LCBtX2VuZE9mZnNldCks
IGxlbmd0aCkgOiBsZW5ndGg7CisgICAgICAgICAgICB1bnNpZ25lZCBzdGFydCA9IChuID09IG1f
c3RhcnQuY29udGFpbmVyKSA/IG1pbihtX3N0YXJ0Lm9mZnNldCwgbGVuZ3RoKSA6IDA7CisgICAg
ICAgICAgICB1bnNpZ25lZCBlbmQgPSAobiA9PSBtX2VuZC5jb250YWluZXIpID8gbWluKG1heChz
dGFydCwgbV9lbmQub2Zmc2V0KSwgbGVuZ3RoKSA6IGxlbmd0aDsKICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoZGF0YS5jaGFyYWN0ZXJzKCkgKyBzdGFydCwgZW5kIC0gc3RhcnQpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMTExNiwzMSArMTEyNCwzMCBAQCBTdHJpbmcgUmFuZ2U6OnRvSFRNTCgp
IGNvbnN0CiAKIFN0cmluZyBSYW5nZTo6dGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZGV0YWNo
ZWQpCisgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lcikKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwogCiAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgbGF5b3V0LCBzaW5jZSBwbGFpblRleHQgdXNl
cyBsaW5lIGJveGVzIGluIHRoZSByZW5kZXIgdHJlZS4KICAgICAvLyBGSVhNRTogQXMgd2l0aCBp
bm5lclRleHQsIHdlJ2QgbGlrZSB0aGlzIHRvIHdvcmsgZXZlbiBpZiB0aGVyZSBhcmUgbm8gcmVu
ZGVyIG9iamVjdHMuCi0gICAgbV9zdGFydENvbnRhaW5lci0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5
b3V0KCk7CisgICAgbV9zdGFydC5jb250YWluZXItPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgp
OwogCi0gICAgLy8gRklYTUU6IE1heWJlIERPTVJhbmdlIGNvbnN0cnVjdG9yIHNob3VsZCB0YWtl
IGNvbnN0IERPTVJhbmdlKjsgaWYgaXQgZGlkIHdlIHdvdWxkIG5vdCBuZWVkIHRoaXMgY29uc3Rf
Y2FzdC4KLSAgICByZXR1cm4gcGxhaW5UZXh0KGNvbnN0X2Nhc3Q8UmFuZ2UgKj4odGhpcykpOwor
ICAgIHJldHVybiBwbGFpblRleHQodGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gUmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBTdHJpbmcgJmh0bWws
IEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBS
YW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYgbWFya3VwLCBFeGNl
cHRpb25Db2RlJiBlYykgY29uc3QKIHsKLSAgICBpZiAobV9kZXRhY2hlZCkgeworICAgIGlmICgh
bV9zdGFydC5jb250YWluZXIpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgTm9kZSogaHRtbEVsZW1lbnQgPSBtX3N0YXJ0
Q29udGFpbmVyLT5pc0hUTUxFbGVtZW50KCkgPyBtX3N0YXJ0Q29udGFpbmVyLmdldCgpIDogbV9z
dGFydENvbnRhaW5lci0+cGFyZW50Tm9kZSgpOwotICAgIGlmICghaHRtbEVsZW1lbnQgfHwgIWh0
bWxFbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICBOb2RlKiBlbGVtZW50ID0gbV9zdGFy
dC5jb250YWluZXItPmlzRWxlbWVudE5vZGUoKSA/IG1fc3RhcnQuY29udGFpbmVyLmdldCgpIDog
bV9zdGFydC5jb250YWluZXItPnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIWVsZW1lbnQgfHwgIWVs
ZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkgewogICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJS
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gZnJhZ21lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGh0bWxFbGVtZW50KS0+Y3Jl
YXRlQ29udGV4dHVhbEZyYWdtZW50KGh0bWwpOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBmcmFnbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oZWxlbWVudCktPmNyZWF0ZUNv
bnRleHR1YWxGcmFnbWVudChtYXJrdXApOwogICAgIGlmICghZnJhZ21lbnQpIHsKICAgICAgICAg
ZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTUyLDE5ICsx
MTU5LDIyIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUmFuZ2U6OmNyZWEKIAogdm9p
ZCBSYW5nZTo6ZGV0YWNoKEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmIChtX2RldGFjaGVk
KSB7CisgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lcikgewogICAgICAgICBlYyA9IElOVkFMSURf
U1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zdGFydENvbnRhaW5l
ciA9IDA7Ci0gICAgbV9lbmRDb250YWluZXIgPSAwOwotICAgIG1fZGV0YWNoZWQgPSB0cnVlOwor
ICAgIG1fb3duZXJEb2N1bWVudC0+ZGV0YWNoUmFuZ2UodGhpcyk7CisKKyAgICBtX3N0YXJ0LmNv
bnRhaW5lciA9IDA7CisgICAgbV9zdGFydC5vZmZzZXQgPSAwOworICAgIG1fZW5kLmNvbnRhaW5l
ciA9IDA7CisgICAgbV9lbmQub2Zmc2V0ID0gMDsKIH0KIAogYm9vbCBSYW5nZTo6aXNEZXRhY2hl
ZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGV0YWNoZWQ7CisgICAgcmV0dXJuICFtX3N0YXJ0
LmNvbnRhaW5lcjsKIH0KIAogdm9pZCBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2RlKiBuLCBp
bnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKQEAgLTEyMDMsNDAgKzEyMTMsNjUg
QEAgdm9pZCBSYW5nZTo6Y2hlY2tOb2RlQkEoTm9kZSogbiwgRXhjZXB0aQogICAgIC8vIElOVkFM
SURfTk9ERV9UWVBFX0VSUjogUmFpc2VkIGlmIHRoZSByb290IGNvbnRhaW5lciBvZiByZWZOb2Rl
IGlzIG5vdCBhbgogICAgIC8vIEF0dHIsIERvY3VtZW50IG9yIERvY3VtZW50RnJhZ21lbnQgbm9k
ZSBvciBwYXJ0IG9mIGEgc2hhZG93IERPTSB0cmVlCiAgICAgLy8gb3IgaWYgcmVmTm9kZSBpcyBh
IERvY3VtZW50LCBEb2N1bWVudEZyYWdtZW50LCBBdHRyLCBFbnRpdHksIG9yIE5vdGF0aW9uIG5v
ZGUuCi0gICAgTm9kZSAqcm9vdCA9IG47Ci0gICAgd2hpbGUgKHJvb3QtPnBhcmVudE5vZGUoKSkK
LSAgICAgICAgcm9vdCA9IHJvb3QtPnBhcmVudE5vZGUoKTsKLQotICAgIGlmICghKHJvb3QtPm5v
ZGVUeXBlKCkgPT0gTm9kZTo6QVRUUklCVVRFX05PREUgfHwKLSAgICAgICAgICByb290LT5ub2Rl
VHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX05PREUgfHwKLSAgICAgICAgICByb290LT5ub2RlVHlw
ZSgpID09IE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUgfHwKLSAgICAgICAgICByb290LT5p
c1NoYWRvd05vZGUoKSkpIHsKLSAgICAgICAgZWMgPSBSYW5nZUV4Y2VwdGlvbjo6SU5WQUxJRF9O
T0RFX1RZUEVfRVJSOwotICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKG4tPm5vZGVUeXBl
KCkpIHsKKyAgICAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKKyAgICAgICAgY2FzZSBO
b2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFOgorICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5U
X05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6RU5USVRZX05PREU6CisgICAgICAgIGNhc2UgTm9k
ZTo6Tk9UQVRJT05fTk9ERToKKyAgICAgICAgICAgIGVjID0gUmFuZ2VFeGNlcHRpb246OklOVkFM
SURfTk9ERV9UWVBFX0VSUjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBOb2Rl
OjpDREFUQV9TRUNUSU9OX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RFOgor
ICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERToKKyAgICAgICAgY2FzZSBOb2Rl
OjpFTEVNRU5UX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RF
OgorICAgICAgICBjYXNlIE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKKyAgICAg
ICAgY2FzZSBOb2RlOjpURVhUX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6WFBBVEhfTkFNRVNQ
QUNFX05PREU6CisgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiggbi0+bm9kZVR5
cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9OT0RFIHx8Ci0gICAgICAgIG4tPm5vZGVUeXBlKCkgPT0g
Tm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERSB8fAotICAgICAgICBuLT5ub2RlVHlwZSgpID09
IE5vZGU6OkFUVFJJQlVURV9OT0RFIHx8Ci0gICAgICAgIG4tPm5vZGVUeXBlKCkgPT0gTm9kZTo6
RU5USVRZX05PREUgfHwKLSAgICAgICAgbi0+bm9kZVR5cGUoKSA9PSBOb2RlOjpOT1RBVElPTl9O
T0RFICkKLSAgICAgICAgZWMgPSBSYW5nZUV4Y2VwdGlvbjo6SU5WQUxJRF9OT0RFX1RZUEVfRVJS
OworICAgIE5vZGUqIHJvb3QgPSBuOworICAgIHdoaWxlIChOb2RlKiBwYXJlbnQgPSByb290LT5w
YXJlbnROb2RlKCkpCisgICAgICAgIHJvb3QgPSBwYXJlbnQ7CiAKKyAgICBzd2l0Y2ggKHJvb3Qt
Pm5vZGVUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKKyAgICAg
ICAgY2FzZSBOb2RlOjpET0NVTUVOVF9OT0RFOgorICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5U
X0ZSQUdNRU5UX05PREU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2RlOjpD
REFUQV9TRUNUSU9OX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RFOgorICAg
ICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERToKKyAgICAgICAgY2FzZSBOb2RlOjpF
TEVNRU5UX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6RU5USVRZX05PREU6CisgICAgICAgIGNh
c2UgTm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFOgorICAgICAgICBjYXNlIE5vZGU6Ok5PVEFU
SU9OX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RF
OgorICAgICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToKKyAgICAgICAgY2FzZSBOb2RlOjpYUEFU
SF9OQU1FU1BBQ0VfTk9ERToKKyAgICAgICAgICAgIGlmIChyb290LT5pc1NoYWRvd05vZGUoKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVjID0gUmFuZ2VFeGNlcHRpb246
OklOVkFMSURfTk9ERV9UWVBFX0VSUjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CiB9CiAK
IFBhc3NSZWZQdHI8UmFuZ2U+IFJhbmdlOjpjbG9uZVJhbmdlKEV4Y2VwdGlvbkNvZGUmIGVjKSBj
b25zdAogewotICAgIGlmIChtX2RldGFjaGVkKSB7CisgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5l
cikgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKLSAgICByZXR1cm4gbmV3IFJhbmdlKG1fb3duZXJEb2N1bWVudC5nZXQoKSwgbV9z
dGFydENvbnRhaW5lci5nZXQoKSwgbV9zdGFydE9mZnNldCwgbV9lbmRDb250YWluZXIuZ2V0KCks
IG1fZW5kT2Zmc2V0KTsKKyAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShtX293bmVyRG9jdW1lbnQs
IG1fc3RhcnQuY29udGFpbmVyLCBtX3N0YXJ0Lm9mZnNldCwgbV9lbmQuY29udGFpbmVyLCBtX2Vu
ZC5vZmZzZXQpOwogfQogCi12b2lkIFJhbmdlOjpzZXRTdGFydEFmdGVyKCBOb2RlICpyZWZOb2Rl
LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNldFN0YXJ0QWZ0ZXIoTm9kZSogcmVm
Tm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKG1fZGV0YWNoZWQpIHsKKyAgICBp
ZiAoIW1fc3RhcnQuY29udGFpbmVyKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMjUyLDE2ICsxMjg3LDE2IEBAIHZvaWQgUmFu
Z2U6OnNldFN0YXJ0QWZ0ZXIoIE5vZGUgKnJlZk5vZGUKICAgICB9CiAKICAgICBlYyA9IDA7Ci0g
ICAgY2hlY2tOb2RlQkEoIHJlZk5vZGUsIGVjICk7CisgICAgY2hlY2tOb2RlQkEocmVmTm9kZSwg
ZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0U3RhcnQocmVmTm9k
ZS0+cGFyZW50Tm9kZSgpLCByZWZOb2RlLT5ub2RlSW5kZXgoKSArIDEsIGVjKTsKIH0KIAotdm9p
ZCBSYW5nZTo6c2V0RW5kQmVmb3JlKCBOb2RlICpyZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykK
K3ZvaWQgUmFuZ2U6OnNldEVuZEJlZm9yZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKLSAgICBpZiAobV9kZXRhY2hlZCkgeworICAgIGlmICghbV9zdGFydC5jb250YWluZXIp
IHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTEyODQsOSArMTMxOSw5IEBAIHZvaWQgUmFuZ2U6OnNldEVuZEJlZm9yZSggTm9kZSAq
cmVmTm9kZSwKICAgICBzZXRFbmQocmVmTm9kZS0+cGFyZW50Tm9kZSgpLCByZWZOb2RlLT5ub2Rl
SW5kZXgoKSwgZWMpOwogfQogCi12b2lkIFJhbmdlOjpzZXRFbmRBZnRlciggTm9kZSAqcmVmTm9k
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFJhbmdlOjpzZXRFbmRBZnRlcihOb2RlKiByZWZO
b2RlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAobV9kZXRhY2hlZCkgeworICAgIGlm
ICghbV9zdGFydC5jb250YWluZXIpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEzMTAsOSArMTM0NSw5IEBAIHZvaWQgUmFuZ2U6
OnNldEVuZEFmdGVyKCBOb2RlICpyZWZOb2RlLCAKIAogfQogCi12b2lkIFJhbmdlOjpzZWxlY3RO
b2RlKCBOb2RlICpyZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNlbGVj
dE5vZGUoTm9kZSogcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKG1fZGV0
YWNoZWQpIHsKKyAgICBpZiAoIW1fc3RhcnQuY29udGFpbmVyKSB7CiAgICAgICAgIGVjID0gSU5W
QUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMzI1LDM3ICsxMzYw
LDU2IEBAIHZvaWQgUmFuZ2U6OnNlbGVjdE5vZGUoIE5vZGUgKnJlZk5vZGUsIEUKICAgICAvLyBJ
TlZBTElEX05PREVfVFlQRV9FUlI6IFJhaXNlZCBpZiBhbiBhbmNlc3RvciBvZiByZWZOb2RlIGlz
IGFuIEVudGl0eSwgTm90YXRpb24gb3IKICAgICAvLyBEb2N1bWVudFR5cGUgbm9kZSBvciBpZiBy
ZWZOb2RlIGlzIGEgRG9jdW1lbnQsIERvY3VtZW50RnJhZ21lbnQsIEF0dHIsIEVudGl0eSwgb3Ig
Tm90YXRpb24KICAgICAvLyBub2RlLgotICAgIE5vZGUgKmFuYzsKLSAgICBmb3IgKGFuYyA9IHJl
Zk5vZGUtPnBhcmVudE5vZGUoKTsgYW5jOyBhbmMgPSBhbmMtPnBhcmVudE5vZGUoKSkgewotICAg
ICAgICBpZiAoYW5jLT5ub2RlVHlwZSgpID09IE5vZGU6OkVOVElUWV9OT0RFIHx8Ci0gICAgICAg
ICAgICBhbmMtPm5vZGVUeXBlKCkgPT0gTm9kZTo6Tk9UQVRJT05fTk9ERSB8fAotICAgICAgICAg
ICAgYW5jLT5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERSkgewotCi0gICAg
ICAgICAgICBlYyA9IFJhbmdlRXhjZXB0aW9uOjpJTlZBTElEX05PREVfVFlQRV9FUlI7Ci0gICAg
ICAgICAgICByZXR1cm47CisgICAgZm9yIChOb2RlKiBhbmMgPSByZWZOb2RlLT5wYXJlbnROb2Rl
KCk7IGFuYzsgYW5jID0gYW5jLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgc3dpdGNoIChhbmMt
Pm5vZGVUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05PREU6Cisg
ICAgICAgICAgICBjYXNlIE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERToKKyAgICAgICAgICAgIGNh
c2UgTm9kZTo6Q09NTUVOVF9OT0RFOgorICAgICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9G
UkFHTUVOVF9OT0RFOgorICAgICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9OT0RFOgorICAg
ICAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6CisgICAgICAgICAgICBjYXNlIE5vZGU6
OkVOVElUWV9SRUZFUkVOQ0VfTk9ERToKKyAgICAgICAgICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lO
R19JTlNUUlVDVElPTl9OT0RFOgorICAgICAgICAgICAgY2FzZSBOb2RlOjpURVhUX05PREU6Cisg
ICAgICAgICAgICBjYXNlIE5vZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFOgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6Cisg
ICAgICAgICAgICBjYXNlIE5vZGU6OkVOVElUWV9OT0RFOgorICAgICAgICAgICAgY2FzZSBOb2Rl
OjpOT1RBVElPTl9OT0RFOgorICAgICAgICAgICAgICAgIGVjID0gUmFuZ2VFeGNlcHRpb246OklO
VkFMSURfTk9ERV9UWVBFX0VSUjsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBpZiAocmVmTm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9O
T0RFIHx8Ci0gICAgICAgIHJlZk5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RE9DVU1FTlRfRlJB
R01FTlRfTk9ERSB8fAotICAgICAgICByZWZOb2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkFUVFJJ
QlVURV9OT0RFIHx8Ci0gICAgICAgIHJlZk5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RU5USVRZ
X05PREUgfHwKLSAgICAgICAgcmVmTm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpOT1RBVElPTl9O
T0RFKSB7Ci0KLSAgICAgICAgZWMgPSBSYW5nZUV4Y2VwdGlvbjo6SU5WQUxJRF9OT0RFX1RZUEVf
RVJSOwotICAgICAgICByZXR1cm47CisgICAgc3dpdGNoIChyZWZOb2RlLT5ub2RlVHlwZSgpKSB7
CisgICAgICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgorICAgICAgICBjYXNlIE5v
ZGU6OkNPTU1FTlRfTk9ERToKKyAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6
CisgICAgICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOgorICAgICAgICBjYXNlIE5vZGU6OkVO
VElUWV9SRUZFUkVOQ0VfTk9ERToKKyAgICAgICAgY2FzZSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RS
VUNUSU9OX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgorICAgICAgICBjYXNl
IE5vZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTm9kZTo6QVRUUklCVVRFX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRf
RlJBR01FTlRfTk9ERToKKyAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9OT0RFOgorICAgICAg
ICBjYXNlIE5vZGU6OkVOVElUWV9OT0RFOgorICAgICAgICBjYXNlIE5vZGU6Ok5PVEFUSU9OX05P
REU6CisgICAgICAgICAgICBlYyA9IFJhbmdlRXhjZXB0aW9uOjpJTlZBTElEX05PREVfVFlQRV9F
UlI7CisgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgZWMgPSAwOwotICAgIHNldFN0
YXJ0QmVmb3JlKCByZWZOb2RlLCBlYyApOworICAgIHNldFN0YXJ0QmVmb3JlKHJlZk5vZGUsIGVj
KTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXRFbmRBZnRlciggcmVmTm9k
ZSwgZWMgKTsKKyAgICBzZXRFbmRBZnRlcihyZWZOb2RlLCBlYyk7CiB9CiAKLXZvaWQgUmFuZ2U6
OnNlbGVjdE5vZGVDb250ZW50cyggTm9kZSAqcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2
b2lkIFJhbmdlOjpzZWxlY3ROb2RlQ29udGVudHMoTm9kZSogcmVmTm9kZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7Ci0gICAgaWYgKG1fZGV0YWNoZWQpIHsKKyAgICBpZiAoIW1fc3RhcnQuY29udGFp
bmVyKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0xMzY3LDI4ICsxNDIxLDM4IEBAIHZvaWQgUmFuZ2U6OnNlbGVjdE5vZGVDb250
ZW50cyggTm9kZSAqcmUKIAogICAgIC8vIElOVkFMSURfTk9ERV9UWVBFX0VSUjogUmFpc2VkIGlm
IHJlZk5vZGUgb3IgYW4gYW5jZXN0b3Igb2YgcmVmTm9kZSBpcyBhbiBFbnRpdHksIE5vdGF0aW9u
CiAgICAgLy8gb3IgRG9jdW1lbnRUeXBlIG5vZGUuCi0gICAgTm9kZSAqbjsKLSAgICBmb3IgKG4g
PSByZWZOb2RlOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChuLT5ub2Rl
VHlwZSgpID09IE5vZGU6OkVOVElUWV9OT0RFIHx8Ci0gICAgICAgICAgICBuLT5ub2RlVHlwZSgp
ID09IE5vZGU6Ok5PVEFUSU9OX05PREUgfHwKLSAgICAgICAgICAgIG4tPm5vZGVUeXBlKCkgPT0g
Tm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFKSB7Ci0KLSAgICAgICAgICAgIGVjID0gUmFuZ2VFeGNl
cHRpb246OklOVkFMSURfTk9ERV9UWVBFX0VSUjsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBm
b3IgKE5vZGUqIG4gPSByZWZOb2RlOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAg
IHN3aXRjaCAobi0+bm9kZVR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb2RlOjpBVFRSSUJV
VEVfTk9ERToKKyAgICAgICAgICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgorICAg
ICAgICAgICAgY2FzZSBOb2RlOjpDT01NRU5UX05PREU6CisgICAgICAgICAgICBjYXNlIE5vZGU6
OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6CisgICAgICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5U
X05PREU6CisgICAgICAgICAgICBjYXNlIE5vZGU6OkVMRU1FTlRfTk9ERToKKyAgICAgICAgICAg
IGNhc2UgTm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFOgorICAgICAgICAgICAgY2FzZSBOb2Rl
OjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6CisgICAgICAgICAgICBjYXNlIE5vZGU6OlRF
WFRfTk9ERToKKyAgICAgICAgICAgIGNhc2UgTm9kZTo6WFBBVEhfTkFNRVNQQUNFX05PREU6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZ
UEVfTk9ERToKKyAgICAgICAgICAgIGNhc2UgTm9kZTo6RU5USVRZX05PREU6CisgICAgICAgICAg
ICBjYXNlIE5vZGU6Ok5PVEFUSU9OX05PREU6CisgICAgICAgICAgICAgICAgZWMgPSBSYW5nZUV4
Y2VwdGlvbjo6SU5WQUxJRF9OT0RFX1RZUEVfRVJSOworICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIG1fc3RhcnRDb250YWluZXIgPSByZWZOb2RlOwotICAg
IG1fc3RhcnRPZmZzZXQgPSAwOwotICAgIG1fZW5kQ29udGFpbmVyID0gcmVmTm9kZTsKLSAgICBt
X2VuZE9mZnNldCA9IG1heEVuZE9mZnNldCgpOworICAgIHNldFN0YXJ0Q29udGFpbmVyKHJlZk5v
ZGUpOworICAgIG1fc3RhcnQub2Zmc2V0ID0gMDsKKyAgICBzZXRFbmRDb250YWluZXIocmVmTm9k
ZSk7CisgICAgbV9lbmQub2Zmc2V0ID0gbWF4RW5kT2Zmc2V0KCk7CiB9CiAKIHZvaWQgUmFuZ2U6
OnN1cnJvdW5kQ29udGVudHMoUGFzc1JlZlB0cjxOb2RlPiBwYXNzTmV3UGFyZW50LCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBSZWZQdHI8Tm9kZT4gbmV3UGFyZW50ID0gcGFzc05ld1BhcmVu
dDsKIAotICAgIGlmIChtX2RldGFjaGVkKSB7CisgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lcikg
ewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMTQyOCwyOCArMTQ5MiwyOCBAQCB2b2lkIFJhbmdlOjpzdXJyb3VuZENvbnRlbnRzKFBh
c3NSZWZQdHI8CiAKICAgICAvLyBXUk9OR19ET0NVTUVOVF9FUlI6IFJhaXNlZCBpZiBuZXdQYXJl
bnQgYW5kIHRoZSBjb250YWluZXIgb2YgdGhlIHN0YXJ0IG9mIHRoZSBSYW5nZSB3ZXJlCiAgICAg
Ly8gbm90IGNyZWF0ZWQgZnJvbSB0aGUgc2FtZSBkb2N1bWVudC4KLSAgICBpZiAobmV3UGFyZW50
LT5kb2N1bWVudCgpICE9IG1fc3RhcnRDb250YWluZXItPmRvY3VtZW50KCkpIHsKKyAgICBpZiAo
bmV3UGFyZW50LT5kb2N1bWVudCgpICE9IG1fc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpKSB7
CiAgICAgICAgIGVjID0gV1JPTkdfRE9DVU1FTlRfRVJSOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgLy8gQkFEX0JPVU5EQVJZUE9JTlRTX0VSUjogUmFpc2VkIGlmIHRoZSBSYW5nZSBw
YXJ0aWFsbHkgc2VsZWN0cyBhIG5vbi1UZXh0IG5vZGUuCi0gICAgaWYgKG1fc3RhcnRDb250YWlu
ZXItPm5vZGVUeXBlKCkgIT0gTm9kZTo6VEVYVF9OT0RFKSB7Ci0gICAgICAgIGlmIChtX3N0YXJ0
T2Zmc2V0ID4gMCAmJiBtX3N0YXJ0T2Zmc2V0IDwgbWF4U3RhcnRPZmZzZXQoKSkgeworICAgIGlm
IChtX3N0YXJ0LmNvbnRhaW5lci0+bm9kZVR5cGUoKSAhPSBOb2RlOjpURVhUX05PREUpIHsKKyAg
ICAgICAgaWYgKG1fc3RhcnQub2Zmc2V0ID4gMCAmJiBtX3N0YXJ0Lm9mZnNldCA8IG1heFN0YXJ0
T2Zmc2V0KCkpIHsKICAgICAgICAgICAgIGVjID0gUmFuZ2VFeGNlcHRpb246OkJBRF9CT1VOREFS
WVBPSU5UU19FUlI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAg
aWYgKG1fZW5kQ29udGFpbmVyLT5ub2RlVHlwZSgpICE9IE5vZGU6OlRFWFRfTk9ERSkgewotICAg
ICAgICBpZiAobV9lbmRPZmZzZXQgPiAwICYmIG1fZW5kT2Zmc2V0IDwgbWF4RW5kT2Zmc2V0KCkp
IHsKKyAgICBpZiAobV9lbmQuY29udGFpbmVyLT5ub2RlVHlwZSgpICE9IE5vZGU6OlRFWFRfTk9E
RSkgeworICAgICAgICBpZiAobV9lbmQub2Zmc2V0ID4gMCAmJiBtX2VuZC5vZmZzZXQgPCBtYXhF
bmRPZmZzZXQoKSkgewogICAgICAgICAgICAgZWMgPSBSYW5nZUV4Y2VwdGlvbjo6QkFEX0JPVU5E
QVJZUE9JTlRTX0VSUjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gICAg
CiAKLSAgICAvLyBSYWlzZSBhIEhJRVJBUkNIWV9SRVFVRVNUX0VSUiBpZiBtX3N0YXJ0Q29udGFp
bmVyIGRvZXNuJ3QgYWNjZXB0IGNoaWxkcmVuIGxpa2UgbmV3UGFyZW50LgotICAgIE5vZGUqIHBh
cmVudE9mTmV3UGFyZW50ID0gbV9zdGFydENvbnRhaW5lci5nZXQoKTsKLSAgICAvLyBJZiBtX3N0
YXJ0Q29udGFpbmVyIGlzIGEgdGV4dE5vZGUsIGl0IHdpbGwgYmUgc3BsaXQgYW5kIGl0IHdpbGwg
YmUgaXRzIHBhcmVudCB0aGF0IHdpbGwgCisgICAgLy8gUmFpc2UgYSBISUVSQVJDSFlfUkVRVUVT
VF9FUlIgaWYgbV9zdGFydC5jb250YWluZXIgZG9lc24ndCBhY2NlcHQgY2hpbGRyZW4gbGlrZSBu
ZXdQYXJlbnQuCisgICAgTm9kZSogcGFyZW50T2ZOZXdQYXJlbnQgPSBtX3N0YXJ0LmNvbnRhaW5l
ci5nZXQoKTsKKyAgICAvLyBJZiBtX3N0YXJ0LmNvbnRhaW5lciBpcyBhIHRleHROb2RlLCBpdCB3
aWxsIGJlIHNwbGl0IGFuZCBpdCB3aWxsIGJlIGl0cyBwYXJlbnQgdGhhdCB3aWxsIAogICAgIC8v
IG5lZWQgdG8gYWNjZXB0IG5ld1BhcmVudC4KICAgICBpZiAocGFyZW50T2ZOZXdQYXJlbnQtPmlz
VGV4dE5vZGUoKSkKICAgICAgICAgcGFyZW50T2ZOZXdQYXJlbnQgPSBwYXJlbnRPZk5ld1BhcmVu
dC0+cGFyZW50Tm9kZSgpOwpAQCAtMTQ1OCw3ICsxNTIyLDcgQEAgdm9pZCBSYW5nZTo6c3Vycm91
bmRDb250ZW50cyhQYXNzUmVmUHRyPAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAg
IGlmIChtX3N0YXJ0Q29udGFpbmVyID09IG5ld1BhcmVudCB8fCBtX3N0YXJ0Q29udGFpbmVyLT5p
c0Rlc2NlbmRhbnRPZihuZXdQYXJlbnQuZ2V0KCkpKSB7CisgICAgaWYgKG1fc3RhcnQuY29udGFp
bmVyID09IG5ld1BhcmVudCB8fCBtX3N0YXJ0LmNvbnRhaW5lci0+aXNEZXNjZW5kYW50T2YobmV3
UGFyZW50LmdldCgpKSkgewogICAgICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE0ODQsOSArMTU0OCw5IEBAIHZvaWQgUmFuZ2U6OnN1
cnJvdW5kQ29udGVudHMoUGFzc1JlZlB0cjwKICAgICBzZWxlY3ROb2RlKG5ld1BhcmVudC5nZXQo
KSwgZWMpOwogfQogCi12b2lkIFJhbmdlOjpzZXRTdGFydEJlZm9yZSggTm9kZSAqcmVmTm9kZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFJhbmdlOjpzZXRTdGFydEJlZm9yZShOb2RlKiByZWZO
b2RlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAobV9kZXRhY2hlZCkgeworICAgIGlm
ICghbV9zdGFydC5jb250YWluZXIpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE1MTQsOCArMTU3OCw4IEBAIHZvaWQgUmFuZ2U6
OmNoZWNrRGVsZXRlRXh0cmFjdChFeGNlcHRpb24KICAgICBpZiAoIWNvbW1vbkFuY2VzdG9yQ29u
dGFpbmVyKGVjKSB8fCBlYykKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBOb2RlICpw
YXN0RW5kID0gcGFzdEVuZE5vZGUoKTsKLSAgICBmb3IgKE5vZGUgKm4gPSBzdGFydE5vZGUoKTsg
biAhPSBwYXN0RW5kOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgTm9kZSogcGFz
dEVuZCA9IHBhc3RFbmROb2RlKCk7CisgICAgZm9yIChOb2RlKiBuID0gc3RhcnROb2RlKCk7IG4g
IT0gcGFzdEVuZDsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgewogICAgICAgICBpZiAobi0+
aXNSZWFkT25seU5vZGUoKSkgewogICAgICAgICAgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxM
T1dFRF9FUlI7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTM0LDEyICsxNTk4LDEyIEBAIHZv
aWQgUmFuZ2U6OmNoZWNrRGVsZXRlRXh0cmFjdChFeGNlcHRpb24KIAogYm9vbCBSYW5nZTo6Y29u
dGFpbmVkQnlSZWFkT25seSgpIGNvbnN0CiB7Ci0gICAgTm9kZSAqbjsKLSAgICBmb3IgKG4gPSBt
X3N0YXJ0Q29udGFpbmVyLmdldCgpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7CisgICAgTm9k
ZSogbjsKKyAgICBmb3IgKG4gPSBtX3N0YXJ0LmNvbnRhaW5lci5nZXQoKTsgbjsgbiA9IG4tPnBh
cmVudE5vZGUoKSkgewogICAgICAgICBpZiAobi0+aXNSZWFkT25seU5vZGUoKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBmb3IgKG4gPSBtX2VuZENvbnRhaW5lci5nZXQo
KTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgeworICAgIGZvciAobiA9IG1fZW5kLmNvbnRhaW5l
ci5nZXQoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAobi0+aXNSZWFk
T25seU5vZGUoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTE1NDgsMjYg
KzE2MTIsMjUgQEAgYm9vbCBSYW5nZTo6Y29udGFpbmVkQnlSZWFkT25seSgpIGNvbnN0CiAKIFBv
c2l0aW9uIFJhbmdlOjpzdGFydFBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gUG9zaXRp
b24obV9zdGFydENvbnRhaW5lci5nZXQoKSwgbV9zdGFydE9mZnNldCk7CisgICAgcmV0dXJuIFBv
c2l0aW9uKG1fc3RhcnQuY29udGFpbmVyLmdldCgpLCBtX3N0YXJ0Lm9mZnNldCk7CiB9CiAKIFBv
c2l0aW9uIFJhbmdlOjplbmRQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFBvc2l0aW9u
KG1fZW5kQ29udGFpbmVyLmdldCgpLCBtX2VuZE9mZnNldCk7CisgICAgcmV0dXJuIFBvc2l0aW9u
KG1fZW5kLmNvbnRhaW5lci5nZXQoKSwgbV9lbmQub2Zmc2V0KTsKIH0KIAotTm9kZSAqUmFuZ2U6
OnN0YXJ0Tm9kZSgpIGNvbnN0CitOb2RlKiBSYW5nZTo6c3RhcnROb2RlKCkgY29uc3QKIHsKLSAg
ICBpZiAoIW1fc3RhcnRDb250YWluZXIpCisgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lcikKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKG1fc3RhcnRDb250YWluZXItPm9mZnNldEluQ2hhcmFj
dGVycygpKQotICAgICAgICByZXR1cm4gbV9zdGFydENvbnRhaW5lci5nZXQoKTsKLSAgICBOb2Rl
ICpjaGlsZCA9IG1fc3RhcnRDb250YWluZXItPmNoaWxkTm9kZShtX3N0YXJ0T2Zmc2V0KTsKLSAg
ICBpZiAoY2hpbGQpCisgICAgaWYgKG1fc3RhcnQuY29udGFpbmVyLT5vZmZzZXRJbkNoYXJhY3Rl
cnMoKSkKKyAgICAgICAgcmV0dXJuIG1fc3RhcnQuY29udGFpbmVyLmdldCgpOworICAgIGlmIChO
b2RlKiBjaGlsZCA9IG1fc3RhcnQuY29udGFpbmVyLT5jaGlsZE5vZGUobV9zdGFydC5vZmZzZXQp
KQogICAgICAgICByZXR1cm4gY2hpbGQ7Ci0gICAgaWYgKG1fc3RhcnRPZmZzZXQgPT0gMCkKLSAg
ICAgICAgcmV0dXJuIG1fc3RhcnRDb250YWluZXIuZ2V0KCk7Ci0gICAgcmV0dXJuIG1fc3RhcnRD
b250YWluZXItPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICBpZiAobV9zdGFydC5vZmZzZXQg
PT0gMCkKKyAgICAgICAgcmV0dXJuIG1fc3RhcnQuY29udGFpbmVyLmdldCgpOworICAgIHJldHVy
biBtX3N0YXJ0LmNvbnRhaW5lci0+dHJhdmVyc2VOZXh0U2libGluZygpOwogfQogCiBQb3NpdGlv
biBSYW5nZTo6ZWRpdGluZ1N0YXJ0UG9zaXRpb24oKSBjb25zdApAQCAtMTU3Nyw3ICsxNjQwLDcg
QEAgUG9zaXRpb24gUmFuZ2U6OmVkaXRpbmdTdGFydFBvc2l0aW9uKCkgYwogICAgIC8vIEl0IGlz
IGltcG9ydGFudCB0byBza2lwIGNlcnRhaW4gaXJyZWxldmFudCBjb250ZW50IGF0IHRoZSBzdGFy
dCBvZiB0aGUgc2VsZWN0aW9uLCBzbyB3ZSBkbyBub3Qgd2luZCB1cCAKICAgICAvLyB3aXRoIGEg
c3B1cmlvdXMgIm1peGVkIiBzdHlsZS4KICAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZVBvc2l0aW9uKG1fc3RhcnRDb250YWluZXIuZ2V0KCksIG1fc3RhcnRPZmZzZXQsIFZQX0RFRkFV
TFRfQUZGSU5JVFkpOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24obV9zdGFy
dC5jb250YWluZXIuZ2V0KCksIG1fc3RhcnQub2Zmc2V0LCBWUF9ERUZBVUxUX0FGRklOSVRZKTsK
ICAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gUG9zaXRp
b24oKTsKIApAQCAtMTU5NiwxNiArMTY1OSwxNSBAQCBQb3NpdGlvbiBSYW5nZTo6ZWRpdGluZ1N0
YXJ0UG9zaXRpb24oKSBjCiAgICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVu
dCgpLmRvd25zdHJlYW0oKTsKIH0KIAotTm9kZSAqUmFuZ2U6OnBhc3RFbmROb2RlKCkgY29uc3QK
K05vZGUqIFJhbmdlOjpwYXN0RW5kTm9kZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3N0YXJ0Q29u
dGFpbmVyIHx8ICFtX2VuZENvbnRhaW5lcikKKyAgICBpZiAoIW1fc3RhcnQuY29udGFpbmVyIHx8
ICFtX2VuZC5jb250YWluZXIpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChtX2VuZENvbnRh
aW5lci0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpCi0gICAgICAgIHJldHVybiBtX2VuZENvbnRhaW5l
ci0+dHJhdmVyc2VOZXh0U2libGluZygpOwotICAgIE5vZGUgKmNoaWxkID0gbV9lbmRDb250YWlu
ZXItPmNoaWxkTm9kZShtX2VuZE9mZnNldCk7Ci0gICAgaWYgKGNoaWxkKQorICAgIGlmIChtX2Vu
ZC5jb250YWluZXItPm9mZnNldEluQ2hhcmFjdGVycygpKQorICAgICAgICByZXR1cm4gbV9lbmQu
Y29udGFpbmVyLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgaWYgKE5vZGUqIGNoaWxkID0g
bV9lbmQuY29udGFpbmVyLT5jaGlsZE5vZGUobV9lbmQub2Zmc2V0KSkKICAgICAgICAgcmV0dXJu
IGNoaWxkOwotICAgIHJldHVybiBtX2VuZENvbnRhaW5lci0+dHJhdmVyc2VOZXh0U2libGluZygp
OworICAgIHJldHVybiBtX2VuZC5jb250YWluZXItPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKIH0K
IAogSW50UmVjdCBSYW5nZTo6Ym91bmRpbmdCb3goKQpAQCAtMTYyMSwxMSArMTY4MywxMSBAQCBJ
bnRSZWN0IFJhbmdlOjpib3VuZGluZ0JveCgpCiAKIHZvaWQgUmFuZ2U6OmFkZExpbmVCb3hSZWN0
cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCkKIHsKLSAg
ICBpZiAoIW1fc3RhcnRDb250YWluZXIgfHwgIW1fZW5kQ29udGFpbmVyKQorICAgIGlmICghbV9z
dGFydC5jb250YWluZXIgfHwgIW1fZW5kLmNvbnRhaW5lcikKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgUmVuZGVyT2JqZWN0KiBzdGFydCA9IG1fc3RhcnRDb250YWluZXItPnJlbmRlcmVyKCk7Ci0g
ICAgUmVuZGVyT2JqZWN0KiBlbmQgPSBtX2VuZENvbnRhaW5lci0+cmVuZGVyZXIoKTsKKyAgICBS
ZW5kZXJPYmplY3QqIHN0YXJ0ID0gbV9zdGFydC5jb250YWluZXItPnJlbmRlcmVyKCk7CisgICAg
UmVuZGVyT2JqZWN0KiBlbmQgPSBtX2VuZC5jb250YWluZXItPnJlbmRlcmVyKCk7CiAgICAgaWYg
KCFzdGFydCB8fCAhZW5kKQogICAgICAgICByZXR1cm47CiAKQEAgLTE2MzMsOCArMTY5NSw4IEBA
IHZvaWQgUmFuZ2U6OmFkZExpbmVCb3hSZWN0cyhWZWN0b3I8SW50UmUKICAgICBmb3IgKFJlbmRl
ck9iamVjdCogciA9IHN0YXJ0OyByICYmIHIgIT0gc3RvcDsgciA9IHItPm5leHRJblByZU9yZGVy
KCkpIHsKICAgICAgICAgLy8gb25seSBhc2sgbGVhZiByZW5kZXIgb2JqZWN0cyBmb3IgdGhlaXIg
bGluZSBib3ggcmVjdHMKICAgICAgICAgaWYgKCFyLT5maXJzdENoaWxkKCkpIHsKLSAgICAgICAg
ICAgIGludCBzdGFydE9mZnNldCA9IHIgPT0gc3RhcnQgPyBtX3N0YXJ0T2Zmc2V0IDogMDsKLSAg
ICAgICAgICAgIGludCBlbmRPZmZzZXQgPSByID09IGVuZCA/IG1fZW5kT2Zmc2V0IDogVUlOVF9N
QVg7CisgICAgICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSByID09IHN0YXJ0ID8gbV9zdGFydC5v
ZmZzZXQgOiAwOworICAgICAgICAgICAgaW50IGVuZE9mZnNldCA9IHIgPT0gZW5kID8gbV9lbmQu
b2Zmc2V0IDogVUlOVF9NQVg7CiAgICAgICAgICAgICByLT5hZGRMaW5lQm94UmVjdHMocmVjdHMs
IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIHVzZVNlbGVjdGlvbkhlaWdodCk7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0xNjQyLDI0ICsxNzA0LDI0IEBAIHZvaWQgUmFuZ2U6OmFkZExpbmVCb3hSZWN0
cyhWZWN0b3I8SW50UmUKIAogI2lmbmRlZiBOREVCVUcKICNkZWZpbmUgRm9ybWF0QnVmZmVyU2l6
ZSAxMDI0Ci12b2lkIFJhbmdlOjpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyICpidWZmZXIsIHVuc2ln
bmVkIGxlbmd0aCkgY29uc3QKK3ZvaWQgUmFuZ2U6OmZvcm1hdEZvckRlYnVnZ2VyKGNoYXIqIGJ1
ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdAogewogICAgIFN0cmluZyByZXN1bHQ7CiAgICAg
U3RyaW5nIHM7CiAgICAgCi0gICAgaWYgKCFtX3N0YXJ0Q29udGFpbmVyIHx8ICFtX2VuZENvbnRh
aW5lcikKKyAgICBpZiAoIW1fc3RhcnQuY29udGFpbmVyIHx8ICFtX2VuZC5jb250YWluZXIpCiAg
ICAgICAgIHJlc3VsdCA9ICI8ZW1wdHk+IjsKICAgICBlbHNlIHsKICAgICAgICAgY2hhciBzW0Zv
cm1hdEJ1ZmZlclNpemVdOwogICAgICAgICByZXN1bHQgKz0gImZyb20gb2Zmc2V0ICI7Ci0gICAg
ICAgIHJlc3VsdCArPSBTdHJpbmc6Om51bWJlcihtX3N0YXJ0T2Zmc2V0KTsKKyAgICAgICAgcmVz
dWx0ICs9IFN0cmluZzo6bnVtYmVyKG1fc3RhcnQub2Zmc2V0KTsKICAgICAgICAgcmVzdWx0ICs9
ICIgb2YgIjsKLSAgICAgICAgbV9zdGFydENvbnRhaW5lci0+Zm9ybWF0Rm9yRGVidWdnZXIocywg
Rm9ybWF0QnVmZmVyU2l6ZSk7CisgICAgICAgIG1fc3RhcnQuY29udGFpbmVyLT5mb3JtYXRGb3JE
ZWJ1Z2dlcihzLCBGb3JtYXRCdWZmZXJTaXplKTsKICAgICAgICAgcmVzdWx0ICs9IHM7CiAgICAg
ICAgIHJlc3VsdCArPSAiIHRvIG9mZnNldCAiOwotICAgICAgICByZXN1bHQgKz0gU3RyaW5nOjpu
dW1iZXIobV9lbmRPZmZzZXQpOworICAgICAgICByZXN1bHQgKz0gU3RyaW5nOjpudW1iZXIobV9l
bmQub2Zmc2V0KTsKICAgICAgICAgcmVzdWx0ICs9ICIgb2YgIjsKLSAgICAgICAgbV9lbmRDb250
YWluZXItPmZvcm1hdEZvckRlYnVnZ2VyKHMsIEZvcm1hdEJ1ZmZlclNpemUpOworICAgICAgICBt
X2VuZC5jb250YWluZXItPmZvcm1hdEZvckRlYnVnZ2VyKHMsIEZvcm1hdEJ1ZmZlclNpemUpOwog
ICAgICAgICByZXN1bHQgKz0gczsKICAgICB9CiAgICAgICAgICAgCkBAIC0xNjY4LDMwICsxNzMw
LDIzIEBAIHZvaWQgUmFuZ2U6OmZvcm1hdEZvckRlYnVnZ2VyKGNoYXIgKmJ1ZmYKICN1bmRlZiBG
b3JtYXRCdWZmZXJTaXplCiAjZW5kaWYKIAotYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJhbmdlICZh
LCBjb25zdCBSYW5nZSAmYikKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBSYW5nZSYgYSwgY29uc3Qg
UmFuZ2UmIGIpCiB7CiAgICAgaWYgKCZhID09ICZiKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAvLyBOb3Qgc3RyaWN0bHkgbGVnYWwgQysrLCBidXQgaW4gcHJhY3RpY2UgdGhpcyBjYW4gaGFw
cGVuLCBhbmQgd29ya3MgZmluZSB3aXRoIEdDQy4KICAgICBpZiAoISZhIHx8ICEmYikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGJvb2wgYWQgPSBhLmlzRGV0YWNoZWQoKTsKLSAgICBib29s
IGJkID0gYi5pc0RldGFjaGVkKCk7Ci0gICAgaWYgKGFkICYmIGJkKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBpZiAoYWQgfHwgYmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbnQg
ZXhjZXB0aW9uID0gMDsKLSAgICByZXR1cm4gYS5zdGFydENvbnRhaW5lcihleGNlcHRpb24pID09
IGIuc3RhcnRDb250YWluZXIoZXhjZXB0aW9uKQotICAgICAgICAmJiBhLmVuZENvbnRhaW5lcihl
eGNlcHRpb24pID09IGIuZW5kQ29udGFpbmVyKGV4Y2VwdGlvbikKLSAgICAgICAgJiYgYS5zdGFy
dE9mZnNldChleGNlcHRpb24pID09IGIuc3RhcnRPZmZzZXQoZXhjZXB0aW9uKQotICAgICAgICAm
JiBhLmVuZE9mZnNldChleGNlcHRpb24pID09IGIuZW5kT2Zmc2V0KGV4Y2VwdGlvbik7CisgICAg
cmV0dXJuIGEuc3RhcnRDb250YWluZXIoKSA9PSBiLnN0YXJ0Q29udGFpbmVyKCkKKyAgICAgICAg
JiYgYS5lbmRDb250YWluZXIoKSA9PSBiLmVuZENvbnRhaW5lcigpCisgICAgICAgICYmIGEuc3Rh
cnRPZmZzZXQoKSA9PSBiLnN0YXJ0T2Zmc2V0KCkKKyAgICAgICAgJiYgYS5lbmRPZmZzZXQoKSA9
PSBiLmVuZE9mZnNldCgpOwogfQogCiBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZU9mQ29udGVudHMo
Tm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IG5ldyBSYW5nZShub2RlLT5kb2N1bWVudCgpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpKTsKICAgICBpbnQgZXhjZXB0aW9uID0g
MDsKICAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUsIGV4Y2VwdGlvbik7CiAgICAg
cmV0dXJuIHJhbmdlLnJlbGVhc2UoKTsKQEAgLTE2OTksMjAgKzE3NTQsMTYwIEBAIFBhc3NSZWZQ
dHI8UmFuZ2U+IHJhbmdlT2ZDb250ZW50cyhOb2RlKiAKIAogdW5zaWduZWQgUmFuZ2U6Om1heFN0
YXJ0T2Zmc2V0KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fc3RhcnRDb250YWluZXIpCisgICAgaWYg
KCFtX3N0YXJ0LmNvbnRhaW5lcikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFtX3N0YXJ0
Q29udGFpbmVyLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSkKLSAgICAgICAgcmV0dXJuIG1fc3RhcnRD
b250YWluZXItPmNoaWxkTm9kZUNvdW50KCk7Ci0gICAgcmV0dXJuIG1fc3RhcnRDb250YWluZXIt
Pm1heENoYXJhY3Rlck9mZnNldCgpOworICAgIGlmICghbV9zdGFydC5jb250YWluZXItPm9mZnNl
dEluQ2hhcmFjdGVycygpKQorICAgICAgICByZXR1cm4gbV9zdGFydC5jb250YWluZXItPmNoaWxk
Tm9kZUNvdW50KCk7CisgICAgcmV0dXJuIG1fc3RhcnQuY29udGFpbmVyLT5tYXhDaGFyYWN0ZXJP
ZmZzZXQoKTsKIH0KIAogdW5zaWduZWQgUmFuZ2U6Om1heEVuZE9mZnNldCgpIGNvbnN0CiB7Ci0g
ICAgaWYgKCFtX2VuZENvbnRhaW5lcikKKyAgICBpZiAoIW1fZW5kLmNvbnRhaW5lcikKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFtX2VuZENvbnRhaW5lci0+b2Zmc2V0SW5DaGFyYWN0ZXJz
KCkpCi0gICAgICAgIHJldHVybiBtX2VuZENvbnRhaW5lci0+Y2hpbGROb2RlQ291bnQoKTsKLSAg
ICByZXR1cm4gbV9lbmRDb250YWluZXItPm1heENoYXJhY3Rlck9mZnNldCgpOworICAgIGlmICgh
bV9lbmQuY29udGFpbmVyLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSkKKyAgICAgICAgcmV0dXJuIG1f
ZW5kLmNvbnRhaW5lci0+Y2hpbGROb2RlQ291bnQoKTsKKyAgICByZXR1cm4gbV9lbmQuY29udGFp
bmVyLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKTsKK30KKwordm9pZCBSYW5nZTo6c2V0U3RhcnRDb250
YWluZXIoUGFzc1JlZlB0cjxOb2RlPiBwYXNzTm9kZSkKK3sKKyAgICBBU1NFUlQocGFzc05vZGUp
OworICAgIEFTU0VSVChtX3N0YXJ0LmNvbnRhaW5lcik7CisgICAgQVNTRVJUKG1fZW5kLmNvbnRh
aW5lcik7CisgICAgbV9zdGFydC5jb250YWluZXIgPSBwYXNzTm9kZTsKK30KKwordm9pZCBSYW5n
ZTo6c2V0RW5kQ29udGFpbmVyKFBhc3NSZWZQdHI8Tm9kZT4gcGFzc05vZGUpCit7CisgICAgQVNT
RVJUKHBhc3NOb2RlKTsKKyAgICBBU1NFUlQobV9zdGFydC5jb250YWluZXIpOworICAgIEFTU0VS
VChtX2VuZC5jb250YWluZXIpOworICAgIG1fZW5kLmNvbnRhaW5lciA9IHBhc3NOb2RlOworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQgZW5kcG9pbnROb2RlQ2hpbGRyZW5DaGFuZ2VkKFJhbmdlRW5k
cG9pbnQmIGVuZHBvaW50LAorICAgIE5vZGVXaXRoSW5kZXhBZnRlciYgYmVmb3JlQ2hhbmdlLCBQ
YXJlbnRBbmROb2RlV2l0aEluZGV4QmVmb3JlJiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnRE
ZWx0YSkKK3sKKyAgICBpZiAoZW5kcG9pbnQuY29udGFpbmVyICE9IGFmdGVyQ2hhbmdlLnBhcmVu
dCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGJlZm9yZUNoYW5nZS5pbmRleEFmdGVyKCkg
Pj0gZW5kcG9pbnQub2Zmc2V0KQorICAgICAgICByZXR1cm47CisgICAgaWYgKGNoaWxkQ291bnRE
ZWx0YSA8IDAgJiYgYWZ0ZXJDaGFuZ2UuaW5kZXhCZWZvcmUoKSA+PSBlbmRwb2ludC5vZmZzZXQp
CisgICAgICAgIGVuZHBvaW50Lm9mZnNldCA9IGFmdGVyQ2hhbmdlLmluZGV4QmVmb3JlKCk7Cisg
ICAgZWxzZQorICAgICAgICBlbmRwb2ludC5vZmZzZXQgKz0gY2hpbGRDb3VudERlbHRhOworfQor
Cit2b2lkIFJhbmdlOjpub2RlQ2hpbGRyZW5DaGFuZ2VkKE5vZGVXaXRoSW5kZXhBZnRlciYgYmVm
b3JlQ2hhbmdlLCBQYXJlbnRBbmROb2RlV2l0aEluZGV4QmVmb3JlJiBhZnRlckNoYW5nZSwgaW50
IGNoaWxkQ291bnREZWx0YSkKK3sKKyAgICBBU1NFUlQoYWZ0ZXJDaGFuZ2UucGFyZW50KCkpOwor
ICAgIEFTU0VSVChhZnRlckNoYW5nZS5wYXJlbnQoKS0+ZG9jdW1lbnQoKSA9PSBtX293bmVyRG9j
dW1lbnQpOworICAgIEFTU0VSVChjaGlsZENvdW50RGVsdGEpOworICAgIGVuZHBvaW50Tm9kZUNo
aWxkcmVuQ2hhbmdlZChtX3N0YXJ0LCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENv
dW50RGVsdGEpOworICAgIGVuZHBvaW50Tm9kZUNoaWxkcmVuQ2hhbmdlZChtX2VuZCwgYmVmb3Jl
Q2hhbmdlLCBhZnRlckNoYW5nZSwgY2hpbGRDb3VudERlbHRhKTsKK30KKworc3RhdGljIGlubGlu
ZSB2b2lkIGVuZHBvaW50Tm9kZVdpbGxCZVJlbW92ZWQoUmFuZ2VFbmRwb2ludCYgZW5kcG9pbnQs
IE5vZGVXaXRoSW5kZXgmIG5vZGVUb0JlUmVtb3ZlZCkKK3sKKyAgICBmb3IgKE5vZGUqIG4gPSBl
bmRwb2ludC5jb250YWluZXIuZ2V0KCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKKyAgICAg
ICAgaWYgKG4gPT0gbm9kZVRvQmVSZW1vdmVkLm5vZGUoKSkgeworICAgICAgICAgICAgZW5kcG9p
bnQuY29udGFpbmVyID0gbm9kZVRvQmVSZW1vdmVkLm5vZGUoKS0+cGFyZW50Tm9kZSgpOworICAg
ICAgICAgICAgZW5kcG9pbnQub2Zmc2V0ID0gbm9kZVRvQmVSZW1vdmVkLmluZGV4KCk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUmFuZ2U6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGVXaXRo
SW5kZXgmIG5vZGVUb0JlUmVtb3ZlZCkKK3sKKyAgICBBU1NFUlQobm9kZVRvQmVSZW1vdmVkLm5v
ZGUoKSk7CisgICAgQVNTRVJUKG5vZGVUb0JlUmVtb3ZlZC5ub2RlKCktPmRvY3VtZW50KCkgPT0g
bV9vd25lckRvY3VtZW50KTsKKyAgICBBU1NFUlQobm9kZVRvQmVSZW1vdmVkLm5vZGUoKSAhPSBt
X293bmVyRG9jdW1lbnQpOworICAgIEFTU0VSVChub2RlVG9CZVJlbW92ZWQubm9kZSgpLT5wYXJl
bnROb2RlKCkpOworICAgIGVuZHBvaW50Tm9kZVdpbGxCZVJlbW92ZWQobV9zdGFydCwgbm9kZVRv
QmVSZW1vdmVkKTsKKyAgICBlbmRwb2ludE5vZGVXaWxsQmVSZW1vdmVkKG1fZW5kLCBub2RlVG9C
ZVJlbW92ZWQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZW5kcG9pbnRUZXh0SW5zZXJ0ZWQo
UmFuZ2VFbmRwb2ludCYgZW5kcG9pbnQsIENoYXJhY3RlckRhdGEqIHRleHQsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmIChlbmRwb2ludC5jb250YWluZXIgIT0g
dGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChvZmZzZXQgPj0gZW5kcG9pbnQub2Zmc2V0
KQorICAgICAgICByZXR1cm47CisgICAgZW5kcG9pbnQub2Zmc2V0ICs9IGxlbmd0aDsKK30KKwor
dm9pZCBSYW5nZTo6dGV4dEluc2VydGVkKENoYXJhY3RlckRhdGEqIHRleHQsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIEFTU0VSVCh0ZXh0KTsKKyAgICBBU1NFUlQo
dGV4dC0+ZG9jdW1lbnQoKSA9PSBtX293bmVyRG9jdW1lbnQpOworICAgIGVuZHBvaW50VGV4dElu
c2VydGVkKG1fc3RhcnQsIHRleHQsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBlbmRwb2ludFRleHRJ
bnNlcnRlZChtX2VuZCwgdGV4dCwgb2Zmc2V0LCBsZW5ndGgpOworfQorCitzdGF0aWMgaW5saW5l
IHZvaWQgZW5kcG9pbnRUZXh0UmVtb3ZlZChSYW5nZUVuZHBvaW50JiBlbmRwb2ludCwgQ2hhcmFj
dGVyRGF0YSogdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
aWYgKGVuZHBvaW50LmNvbnRhaW5lciAhPSB0ZXh0KQorICAgICAgICByZXR1cm47CisgICAgaWYg
KG9mZnNldCA+PSBlbmRwb2ludC5vZmZzZXQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAob2Zm
c2V0ICsgbGVuZ3RoID49IGVuZHBvaW50Lm9mZnNldCkKKyAgICAgICAgZW5kcG9pbnQub2Zmc2V0
ID0gb2Zmc2V0OworICAgIGVsc2UKKyAgICAgICAgZW5kcG9pbnQub2Zmc2V0IC09IGxlbmd0aDsK
K30KKwordm9pZCBSYW5nZTo6dGV4dFJlbW92ZWQoQ2hhcmFjdGVyRGF0YSogdGV4dCwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQVNTRVJUKHRleHQpOworICAgIEFT
U0VSVCh0ZXh0LT5kb2N1bWVudCgpID09IG1fb3duZXJEb2N1bWVudCk7CisgICAgZW5kcG9pbnRU
ZXh0UmVtb3ZlZChtX3N0YXJ0LCB0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgZW5kcG9pbnRU
ZXh0UmVtb3ZlZChtX2VuZCwgdGV4dCwgb2Zmc2V0LCBsZW5ndGgpOworfQorCitzdGF0aWMgaW5s
aW5lIHZvaWQgZW5kcG9pbnRUZXh0Tm9kZXNNZXJnZWQoUmFuZ2VFbmRwb2ludCYgZW5kcG9pbnQs
IE5vZGVXaXRoSW5kZXgmIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICBpZiAoZW5k
cG9pbnQuY29udGFpbmVyID09IG9sZE5vZGUubm9kZSgpKSB7CisgICAgICAgIGVuZHBvaW50LmNv
bnRhaW5lciA9IG9sZE5vZGUubm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgZW5k
cG9pbnQub2Zmc2V0ICs9IG9mZnNldDsKKyAgICB9IGVsc2UgaWYgKGVuZHBvaW50LmNvbnRhaW5l
ciA9PSBvbGROb2RlLm5vZGUoKS0+cGFyZW50Tm9kZSgpICYmIGVuZHBvaW50Lm9mZnNldCA9PSBv
bGROb2RlLmluZGV4KCkpIHsKKyAgICAgICAgZW5kcG9pbnQuY29udGFpbmVyID0gb2xkTm9kZS5u
b2RlKCktPnByZXZpb3VzU2libGluZygpOworICAgICAgICBlbmRwb2ludC5vZmZzZXQgPSBvZmZz
ZXQ7CisgICAgfQorfQorCit2b2lkIFJhbmdlOjp0ZXh0Tm9kZXNNZXJnZWQoTm9kZVdpdGhJbmRl
eCYgb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KQoreworICAgIEFTU0VSVChvbGROb2RlLm5vZGUo
KSk7CisgICAgQVNTRVJUKG9sZE5vZGUubm9kZSgpLT5kb2N1bWVudCgpID09IG1fb3duZXJEb2N1
bWVudCk7CisgICAgQVNTRVJUKG9sZE5vZGUubm9kZSgpLT5wYXJlbnROb2RlKCkpOworICAgIEFT
U0VSVChvbGROb2RlLm5vZGUoKS0+aXNUZXh0Tm9kZSgpKTsKKyAgICBBU1NFUlQob2xkTm9kZS5u
b2RlKCktPnByZXZpb3VzU2libGluZygpKTsKKyAgICBBU1NFUlQob2xkTm9kZS5ub2RlKCktPnBy
ZXZpb3VzU2libGluZygpLT5pc1RleHROb2RlKCkpOworICAgIGVuZHBvaW50VGV4dE5vZGVzTWVy
Z2VkKG1fc3RhcnQsIG9sZE5vZGUsIG9mZnNldCk7CisgICAgZW5kcG9pbnRUZXh0Tm9kZXNNZXJn
ZWQobV9lbmQsIG9sZE5vZGUsIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmRw
b2ludFRleHROb2Rlc1NwbGl0KFJhbmdlRW5kcG9pbnQmIGVuZHBvaW50LCBUZXh0KiBvbGROb2Rl
KQoreworICAgIGlmIChlbmRwb2ludC5jb250YWluZXIgIT0gb2xkTm9kZSkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmIChlbmRwb2ludC5vZmZzZXQgPD0gb2xkTm9kZS0+bGVuZ3RoKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBlbmRwb2ludC5jb250YWluZXIgPSBvbGROb2RlLT5uZXh0U2libGlu
ZygpOworICAgIGVuZHBvaW50Lm9mZnNldCAtPSBvbGROb2RlLT5sZW5ndGgoKTsKK30KKwordm9p
ZCBSYW5nZTo6dGV4dE5vZGVTcGxpdChUZXh0KiBvbGROb2RlKQoreworICAgIEFTU0VSVChvbGRO
b2RlKTsKKyAgICBBU1NFUlQob2xkTm9kZS0+ZG9jdW1lbnQoKSA9PSBtX293bmVyRG9jdW1lbnQp
OworICAgIEFTU0VSVChvbGROb2RlLT5wYXJlbnROb2RlKCkpOworICAgIEFTU0VSVChvbGROb2Rl
LT5pc1RleHROb2RlKCkpOworICAgIEFTU0VSVChvbGROb2RlLT5uZXh0U2libGluZygpKTsKKyAg
ICBBU1NFUlQob2xkTm9kZS0+bmV4dFNpYmxpbmcoKS0+aXNUZXh0Tm9kZSgpKTsKKyAgICBlbmRw
b2ludFRleHROb2Rlc1NwbGl0KG1fc3RhcnQsIG9sZE5vZGUpOworICAgIGVuZHBvaW50VGV4dE5v
ZGVzU3BsaXQobV9lbmQsIG9sZE5vZGUpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2RvbS9SYW5n
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1JhbmdlLmgJKHJldmlzaW9uIDMwOTA0KQor
KysgV2ViQ29yZS9kb20vUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMSArMSw5IEBACiAv
KgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RF
LgotICoKICAqIChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAoQykgMjAw
MCBHdW5uc3RlaW4gTHllIChndW5uc3RlaW5AbmV0Y29tLm5vKQogICogKEMpIDIwMDAgRnJlZGVy
aWsgSG9sbGplbiAoZnJlZGVyaWsuaG9sbGplbkBoaWcubm8pCiAgKiAoQykgMjAwMSBQZXRlciBL
ZWxseSAocG1rQHBvc3QuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yNyw4ICsyNSw4IEBACiAjaWZuZGVmIFJhbmdlX2gKICNkZWZpbmUgUmFuZ2VfaAogCisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIApAQCAtMzYsMzMgKzM0LDgyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAorY2xhc3MgQ2hhcmFjdGVyRGF0YTsKK2Ns
YXNzIENvbnRhaW5lck5vZGU7CiBjbGFzcyBEb2N1bWVudEZyYWdtZW50OwogY2xhc3MgRG9jdW1l
bnQ7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgTm9kZTsKIGNsYXNzIFBvc2l0aW9uOwogY2xhc3Mg
U3RyaW5nOworY2xhc3MgVGV4dDsKKworY2xhc3MgTm9kZVdpdGhJbmRleCB7CitwdWJsaWM6Cisg
ICAgTm9kZVdpdGhJbmRleChOb2RlKiBub2RlKSA6IG1fbm9kZShub2RlKSwgbV9oYXZlSW5kZXgo
ZmFsc2UpIHsgQVNTRVJUKG5vZGUpOyB9CisgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbm9kZTsgfQorICAgIHVuc2lnbmVkIGluZGV4KCk7CisKK3ByaXZhdGU6CisgICAgTm9kZSog
bV9ub2RlOworICAgIGJvb2wgbV9oYXZlSW5kZXg7CisgICAgdW5zaWduZWQgbV9pbmRleDsKK307
CisKK2NsYXNzIFBhcmVudEFuZE5vZGVXaXRoSW5kZXhCZWZvcmUgeworcHVibGljOgorICAgIFBh
cmVudEFuZE5vZGVXaXRoSW5kZXhCZWZvcmUoQ29udGFpbmVyTm9kZSogcGFyZW50LCBOb2RlKiBu
b2RlKSA6IG1fcGFyZW50KHBhcmVudCksIG1fbm9kZShub2RlKSwgbV9oYXZlSW5kZXgoZmFsc2Up
IHsgfQorICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50
OyB9CisgICAgdW5zaWduZWQgaW5kZXhCZWZvcmUoKTsKKworcHJpdmF0ZToKKyAgICBDb250YWlu
ZXJOb2RlKiBtX3BhcmVudDsKKyAgICBOb2RlKiBtX25vZGU7CisgICAgYm9vbCBtX2hhdmVJbmRl
eDsKKyAgICB1bnNpZ25lZCBtX2luZGV4QmVmb3JlOworfTsKKworY2xhc3MgTm9kZVdpdGhJbmRl
eEFmdGVyIHsKK3B1YmxpYzoKKyAgICBOb2RlV2l0aEluZGV4QWZ0ZXIoTm9kZSogbm9kZSkgOiBt
X25vZGUobm9kZSksIG1faGF2ZUluZGV4KGZhbHNlKSB7IH0KKyAgICB1bnNpZ25lZCBpbmRleEFm
dGVyKCk7CiAKLWNsYXNzIFJhbmdlIDogcHVibGljIFJlZkNvdW50ZWQ8UmFuZ2U+Ci17Citwcml2
YXRlOgorICAgIE5vZGUqIG1fbm9kZTsKKyAgICBib29sIG1faGF2ZUluZGV4OworICAgIHVuc2ln
bmVkIG1faW5kZXhBZnRlcjsKK307CisKK3N0cnVjdCBSYW5nZUVuZHBvaW50IHsKKyAgICBSZWZQ
dHI8Tm9kZT4gY29udGFpbmVyOworICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICBSYW5nZUVuZHBv
aW50KFBhc3NSZWZQdHI8Tm9kZT4gYywgdW5zaWduZWQgbykgOiBjb250YWluZXIoYyksIG9mZnNl
dChvKSB7IH0KK307CisKK2NsYXNzIFJhbmdlIDogcHVibGljIFJlZkNvdW50ZWQ8UmFuZ2U+IHsK
IHB1YmxpYzoKLSAgICBSYW5nZShEb2N1bWVudCopOwotICAgIFJhbmdlKERvY3VtZW50KiwgTm9k
ZSogc3RhcnRDb250YWluZXIsIGludCBzdGFydE9mZnNldCwgTm9kZSogZW5kQ29udGFpbmVyLCBp
bnQgZW5kT2Zmc2V0KTsKLSAgICBSYW5nZShEb2N1bWVudCosIGNvbnN0IFBvc2l0aW9uJiwgY29u
c3QgUG9zaXRpb24mKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gY3JlYXRlKFBhc3NS
ZWZQdHI8RG9jdW1lbnQ+KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gY3JlYXRlKFBh
c3NSZWZQdHI8RG9jdW1lbnQ+LCBQYXNzUmVmUHRyPE5vZGU+IHN0YXJ0Q29udGFpbmVyLCBpbnQg
c3RhcnRPZmZzZXQsIFBhc3NSZWZQdHI8Tm9kZT4gZW5kQ29udGFpbmVyLCBpbnQgZW5kT2Zmc2V0
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gY3JlYXRlKFBhc3NSZWZQdHI8RG9jdW1l
bnQ+LCBjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7CiAgICAgflJhbmdlKCk7CiAK
ICAgICBEb2N1bWVudCogb3duZXJEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJEb2N1
bWVudC5nZXQoKTsgfQogCiAgICAgTm9kZSogc3RhcnRDb250YWluZXIoRXhjZXB0aW9uQ29kZSYp
IGNvbnN0OwotICAgIGludCBzdGFydE9mZnNldChFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAg
dW5zaWduZWQgc3RhcnRPZmZzZXQoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIE5vZGUqIGVu
ZENvbnRhaW5lcihFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgaW50IGVuZE9mZnNldChFeGNl
cHRpb25Db2RlJikgY29uc3Q7CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0KEV4Y2VwdGlvbkNvZGUm
KSBjb25zdDsKICAgICBib29sIGNvbGxhcHNlZChFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAKKyAg
ICBOb2RlKiBzdGFydENvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQuY29udGFpbmVy
LmdldCgpOyB9CisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0
YXJ0Lm9mZnNldDsgfQorICAgIE5vZGUqIGVuZENvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIG1f
ZW5kLmNvbnRhaW5lci5nZXQoKTsgfQorICAgIHVuc2lnbmVkIGVuZE9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fZW5kLm9mZnNldDsgfQorCiAgICAgTm9kZSogY29tbW9uQW5jZXN0b3JDb250YWlu
ZXIoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIHN0YXRpYyBOb2RlKiBjb21tb25BbmNlc3Rv
ckNvbnRhaW5lcihOb2RlKiBjb250YWluZXJBLCBOb2RlKiBjb250YWluZXJCKTsKLSAgICB2b2lk
IHNldFN0YXJ0KE5vZGUqIGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgc2V0RW5kKE5vZGUqIGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgc2V0U3RhcnQoUGFzc1JlZlB0cjxOb2RlPiBjb250YWluZXIsIGludCBv
ZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldEVuZChQYXNzUmVmUHRyPE5vZGU+
IGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgY29sbGFw
c2UoYm9vbCB0b1N0YXJ0LCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCBpc1BvaW50SW5SYW5n
ZShOb2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYyk7CiAgICAgc2hv
cnQgY29tcGFyZVBvaW50KE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKTsKQEAgLTk3LDEzICsxNDQsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdXJyb3VuZENvbnRl
bnRzKFBhc3NSZWZQdHI8Tm9kZT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldFN0YXJ0
QmVmb3JlKE5vZGUqLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBlbnVtIEFjdGlvblR5cGUgewot
ICAgICAgICBERUxFVEVfQ09OVEVOVFMsCi0gICAgICAgIEVYVFJBQ1RfQ09OVEVOVFMsCi0gICAg
ICAgIENMT05FX0NPTlRFTlRTCi0gICAgfTsKLSAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IHByb2Nlc3NDb250ZW50cyhBY3Rpb25UeXBlLCBFeGNlcHRpb25Db2RlJik7Ci0KICAgICBQ
b3NpdGlvbiBzdGFydFBvc2l0aW9uKCkgY29uc3Q7CiAgICAgUG9zaXRpb24gZW5kUG9zaXRpb24o
KSBjb25zdDsKIApAQCAtMTE5LDEzICsxNTksMTcgQEAgcHVibGljOgogICAgIHZvaWQgZm9ybWF0
Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwogI2VuZGlm
CiAKKyAgICB2b2lkIG5vZGVDaGlsZHJlbkNoYW5nZWQoTm9kZVdpdGhJbmRleEFmdGVyJiBiZWZv
cmVDaGFuZ2UsIFBhcmVudEFuZE5vZGVXaXRoSW5kZXhCZWZvcmUmIGFmdGVyQ2hhbmdlLCBpbnQg
Y2hpbGRDb3VudERlbHRhKTsKKyAgICB2b2lkIG5vZGVXaWxsQmVSZW1vdmVkKE5vZGVXaXRoSW5k
ZXgmKTsKKworICAgIHZvaWQgdGV4dEluc2VydGVkKENoYXJhY3RlckRhdGEqLCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCB0ZXh0UmVtb3ZlZChDaGFyYWN0ZXJE
YXRhKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgdGV4dE5v
ZGVzTWVyZ2VkKE5vZGVXaXRoSW5kZXgmIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCk7CisgICAg
dm9pZCB0ZXh0Tm9kZVNwbGl0KFRleHQqIG9sZE5vZGUpOworCiBwcml2YXRlOgotICAgIFJlZlB0
cjxEb2N1bWVudD4gbV9vd25lckRvY3VtZW50OwotICAgIFJlZlB0cjxOb2RlPiBtX3N0YXJ0Q29u
dGFpbmVyOwotICAgIHVuc2lnbmVkIG1fc3RhcnRPZmZzZXQ7Ci0gICAgUmVmUHRyPE5vZGU+IG1f
ZW5kQ29udGFpbmVyOwotICAgIHVuc2lnbmVkIG1fZW5kT2Zmc2V0OwotICAgIGJvb2wgbV9kZXRh
Y2hlZDsKKyAgICBSYW5nZShQYXNzUmVmUHRyPERvY3VtZW50Pik7CisgICAgUmFuZ2UoUGFzc1Jl
ZlB0cjxEb2N1bWVudD4sIFBhc3NSZWZQdHI8Tm9kZT4gc3RhcnRDb250YWluZXIsIGludCBzdGFy
dE9mZnNldCwgUGFzc1JlZlB0cjxOb2RlPiBlbmRDb250YWluZXIsIGludCBlbmRPZmZzZXQpOwog
CiAgICAgdm9pZCBjaGVja05vZGVXT2Zmc2V0KE5vZGUqLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25D
b2RlJikgY29uc3Q7CiAgICAgdm9pZCBjaGVja05vZGVCQShOb2RlKiwgRXhjZXB0aW9uQ29kZSYp
IGNvbnN0OwpAQCAtMTMzLDYgKzE3NywxNCBAQCBwcml2YXRlOgogICAgIGJvb2wgY29udGFpbmVk
QnlSZWFkT25seSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIG1heFN0YXJ0T2Zmc2V0KCkgY29uc3Q7
CiAgICAgdW5zaWduZWQgbWF4RW5kT2Zmc2V0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRTdGFydENv
bnRhaW5lcihQYXNzUmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIHNldEVuZENvbnRhaW5lcihQYXNz
UmVmUHRyPE5vZGU+KTsKKworICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gcHJvY2Vz
c0NvbnRlbnRzKGJvb2wgc2hvdWxkRGVsZXRlLCBib29sIHNob3VsZENvcHksIEV4Y2VwdGlvbkNv
ZGUmKTsKKworICAgIFJlZlB0cjxEb2N1bWVudD4gbV9vd25lckRvY3VtZW50OworICAgIFJhbmdl
RW5kcG9pbnQgbV9zdGFydDsKKyAgICBSYW5nZUVuZHBvaW50IG1fZW5kOwogfTsKIAogUGFzc1Jl
ZlB0cjxSYW5nZT4gcmFuZ2VPZkNvbnRlbnRzKE5vZGUqKTsKSW5kZXg6IFdlYkNvcmUvZG9tL1Rl
eHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1RleHQuY3BwCShyZXZpc2lvbiAzMDkw
NCkKKysrIFdlYkNvcmUvZG9tL1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxNSArMzYs
MTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBET00gU2VjdGlvbiAxLjEuMQogCi0vLyAj
IyMgYWxsb3cgaGF2aW5nIGNoaWxkcmVuIGluIHRleHQgbm9kZXMgZm9yIGVudGl0aWVzLCBjb21t
ZW50cyBldGMuCi0KLVRleHQ6OlRleHQoRG9jdW1lbnQgKmRvYywgY29uc3QgU3RyaW5nICZfdGV4
dCkKLSAgICA6IENoYXJhY3RlckRhdGEoZG9jLCBfdGV4dCkKK1RleHQ6OlRleHQoRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQpCisgICAgOiBDaGFyYWN0ZXJEYXRhKGRvY3Vt
ZW50LCB0ZXh0KQogewogfQogCi1UZXh0OjpUZXh0KERvY3VtZW50ICpkb2MpCi0gICAgOiBDaGFy
YWN0ZXJEYXRhKGRvYykKK1RleHQ6OlRleHQoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogQ2hh
cmFjdGVyRGF0YShkb2N1bWVudCkKIHsKIH0KIApAQCAtNTYsOCArNTQsNiBAQCBQYXNzUmVmUHRy
PFRleHQ+IFRleHQ6OnNwbGl0VGV4dCh1bnNpZ25lCiB7CiAgICAgZWMgPSAwOwogCi0gICAgLy8g
RklYTUU6IFRoaXMgZG9lcyBub3QgY29weSBtYXJrZXJzCi0gICAgCiAgICAgLy8gSU5ERVhfU0la
RV9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIG9mZnNldCBpcyBuZWdhdGl2ZSBvciBncmVh
dGVyIHRoYW4KICAgICAvLyB0aGUgbnVtYmVyIG9mIDE2LWJpdCB1bml0cyBpbiBkYXRhLgogICAg
IGlmIChvZmZzZXQgPiBtX2RhdGEtPmxlbmd0aCgpKSB7CkBAIC04Miw2ICs3OCw4IEBAIFBhc3NS
ZWZQdHI8VGV4dD4gVGV4dDo6c3BsaXRUZXh0KHVuc2lnbmUKICAgICBpZiAoZWMpCiAgICAgICAg
IHJldHVybiAwOwogCisgICAgZG9jdW1lbnQoKS0+dGV4dE5vZGVTcGxpdCh0aGlzKTsKKwogICAg
IGlmIChyZW5kZXJlcigpKQogICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocmVuZGVy
ZXIoKSktPnNldFRleHQobV9kYXRhKTsKIApAQCAtMjUyLDExICsyNTAsMTIgQEAgdm9pZCBUZXh0
OjphdHRhY2goKQogICAgIENoYXJhY3RlckRhdGE6OmF0dGFjaCgpOwogfQogCi12b2lkIFRleHQ6
OnJlY2FsY1N0eWxlKCBTdHlsZUNoYW5nZSBjaGFuZ2UgKQordm9pZCBUZXh0OjpyZWNhbGNTdHls
ZShTdHlsZUNoYW5nZSBjaGFuZ2UpCiB7Ci0gICAgaWYgKGNoYW5nZSAhPSBOb0NoYW5nZSAmJiBw
YXJlbnROb2RlKCkpCisgICAgaWYgKGNoYW5nZSAhPSBOb0NoYW5nZSAmJiBwYXJlbnROb2RlKCkp
IHsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgICAgICByZW5kZXJlcigpLT5zZXRT
dHlsZShwYXJlbnROb2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCkpOworICAgIH0KICAgICBpZiAo
Y2hhbmdlZCgpICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNUZXh0KCkpCiAgICAgICAg
IHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihyZW5kZXJlcigpKS0+c2V0VGV4dChtX2RhdGEpOwog
ICAgIHNldENoYW5nZWQoTm9TdHlsZUNoYW5nZSk7CkBAIC0yNzUsNyArMjc0LDYgQEAgUGFzc1Jl
ZlB0cjxUZXh0PiBUZXh0OjpjcmVhdGVOZXcoUGFzc1JlZgogCiBTdHJpbmcgVGV4dDo6dG9TdHJp
bmcoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBzdWJzdGl0dXRlIGVudGl0eSByZWZlcmVuY2Vz
IGFzIG5lZWRlZCEKICAgICByZXR1cm4gbm9kZVZhbHVlKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
ZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0
aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gMzA5MDQpCisrKyBXZWJDb3JlL2Vk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODcsOCArMzg3
LDggQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKAogICAgIC8vIENh
bGN1bGF0ZSBzdGFydCBhbmQgZW5kIGluZGljZXMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHRyZWUg
dGhhdCB0aGV5J3JlIGluLgogICAgIE5vZGUqIHNjb3BlID0gaGlnaGVzdEFuY2VzdG9yKHZpc2li
bGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7CiAgICAgUG9zaXRpb24gcmFuZ2VTdGFy
dChzY29wZSwgMCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzdGFydFJhbmdlID0gbmV3IFJhbmdlKGRv
Y3VtZW50KCksIHJhbmdlU3RhcnQsIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCh2aXNpYmxlU3Rh
cnQuZGVlcEVxdWl2YWxlbnQoKSkpOwotICAgIFJlZlB0cjxSYW5nZT4gZW5kUmFuZ2UgPSBuZXcg
UmFuZ2UoZG9jdW1lbnQoKSwgcmFuZ2VTdGFydCwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHZp
c2libGVFbmQuZGVlcEVxdWl2YWxlbnQoKSkpOworICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRSYW5n
ZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgcmFuZ2VTdGFydCwgcmFuZ2VDb21wbGlhbnRF
cXVpdmFsZW50KHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpKSk7CisgICAgUmVmUHRyPFJh
bmdlPiBlbmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgcmFuZ2VTdGFydCwgcmFu
Z2VDb21wbGlhbnRFcXVpdmFsZW50KHZpc2libGVFbmQuZGVlcEVxdWl2YWxlbnQoKSkpOwogICAg
IGludCBzdGFydEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChzdGFydFJhbmdlLmdl
dCgpLCB0cnVlKTsKICAgICBpbnQgZW5kSW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3Ro
KGVuZFJhbmdlLmdldCgpLCB0cnVlKTsKICAgICAKQEAgLTY1Niw3ICs2NTYsNyBAQCB2b2lkIEFw
cGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgICAgIGlmIChzdGFydCA9PSBl
bmQgJiYgc3RhcnQubm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkKICAgICAgICAgICAgIGVuZCA9
IHBvc2l0aW9uQWZ0ZXJOb2RlKHN0YXJ0Lm5vZGUoKSk7CiAgICAgICAgIC8vIEFkZCB0aGUgc3R5
bGUgdG8gc2VsZWN0ZWQgaW5saW5lIHJ1bnMuCi0gICAgICAgIE5vZGUqIHBhc3RFbmQgPSBSYW5n
ZShkb2N1bWVudCgpLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoc3RhcnQpLCByYW5nZUNvbXBs
aWFudEVxdWl2YWxlbnQoZW5kKSkucGFzdEVuZE5vZGUoKTsKKyAgICAgICAgTm9kZSogcGFzdEVu
ZCA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHN0
YXJ0KSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGVuZCkpLT5wYXN0RW5kTm9kZSgpOwogICAg
ICAgICBmb3IgKE5vZGUqIG5leHQ7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kOyBub2RlID0gbmV4
dCkgewogICAgICAgICAgICAgCiAgICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0
Tm9kZSgpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShy
ZXZpc2lvbiAzMDkwNCkKKysrIFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MCw3ICsyNzAsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjppbnB1dFRleHQoY29uCiB7CiAgICAgaW50IG9mZnNldCA9IDA7CiAgICAgaW50IGxl
bmd0aCA9IHRleHQubGVuZ3RoKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzdGFydFJhbmdlID0gbmV3
IFJhbmdlKGRvY3VtZW50KCksIFBvc2l0aW9uKGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgp
LCAwKSwgZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgUmVmUHRyPFJhbmdlPiBzdGFy
dFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBQb3NpdGlvbihkb2N1bWVudCgpLT5k
b2N1bWVudEVsZW1lbnQoKSwgMCksIGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkpOwogICAgIGlu
dCBzdGFydEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChzdGFydFJhbmdlLmdldCgp
KTsKICAgICBpbnQgbmV3bGluZTsKICAgICBkbyB7CkBAIC03MjksMTMgKzcyOSwxMyBAQCB2b2lk
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBoCiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHN0YXJ0SW5kZXggPSAwOwogICAgICAgICAgICAgaWYgKHN0YXJ0SW5QYXJhZ3JhcGgp
IHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHN0YXJ0UmFuZ2UgPSBuZXcgUmFuZ2Uo
ZG9jdW1lbnQoKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHN0YXJ0T2ZQYXJhZ3JhcGhUb01v
dmUuZGVlcEVxdWl2YWxlbnQoKSksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCh2aXNpYmxlU3Rh
cnQuZGVlcEVxdWl2YWxlbnQoKSkpOworICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gc3Rh
cnRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFs
ZW50KHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKSksIHJhbmdlQ29tcGxp
YW50RXF1aXZhbGVudCh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSkpOwogICAgICAgICAg
ICAgICAgIHN0YXJ0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHN0YXJ0UmFuZ2Uu
Z2V0KCksIHRydWUpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBlbmRJbmRleCA9IDA7
CiAgICAgICAgICAgICBpZiAoZW5kSW5QYXJhZ3JhcGgpIHsKLSAgICAgICAgICAgICAgICBSZWZQ
dHI8UmFuZ2U+IGVuZFJhbmdlID0gbmV3IFJhbmdlKGRvY3VtZW50KCksIHJhbmdlQ29tcGxpYW50
RXF1aXZhbGVudChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkpLCByYW5n
ZUNvbXBsaWFudEVxdWl2YWxlbnQodmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpKSk7CisgICAg
ICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBlbmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1l
bnQoKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVl
cEVxdWl2YWxlbnQoKSksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCh2aXNpYmxlRW5kLmRlZXBF
cXVpdmFsZW50KCkpKTsKICAgICAgICAgICAgICAgICBlbmRJbmRleCA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgoZW5kUmFuZ2UuZ2V0KCksIHRydWUpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC03NTIsNyArNzUyLDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBh
cmFncmFwaAogICAgIC8vIHN0YXJ0IGFuZCBlbmQgY2FuJ3QgYmUgdXNlZCBkaXJlY3RseSB0byBj
cmVhdGUgYSBSYW5nZTsgdGhleSBhcmUgImVkaXRpbmcgcG9zaXRpb25zIgogICAgIFBvc2l0aW9u
IHN0YXJ0UmFuZ2VDb21wbGlhbnQgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoc3RhcnQpOwog
ICAgIFBvc2l0aW9uIGVuZFJhbmdlQ29tcGxpYW50ID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50
KGVuZCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG5ldyBSYW5nZShkb2N1bWVudCgpLCBz
dGFydFJhbmdlQ29tcGxpYW50Lm5vZGUoKSwgc3RhcnRSYW5nZUNvbXBsaWFudC5vZmZzZXQoKSwg
ZW5kUmFuZ2VDb21wbGlhbnQubm9kZSgpLCBlbmRSYW5nZUNvbXBsaWFudC5vZmZzZXQoKSk7Cisg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRS
YW5nZUNvbXBsaWFudC5ub2RlKCksIHN0YXJ0UmFuZ2VDb21wbGlhbnQub2Zmc2V0KCksIGVuZFJh
bmdlQ29tcGxpYW50Lm5vZGUoKSwgZW5kUmFuZ2VDb21wbGlhbnQub2Zmc2V0KCkpOwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgaXMgYW4gaW5lZmZpY2llbnQgd2F5IHRvIHByZXNlcnZlIHN0eWxlIG9u
IG5vZGVzIGluIHRoZSBwYXJhZ3JhcGggdG8gbW92ZS4gIEl0IAogICAgIC8vIHNob3VsZG4ndCBt
YXR0ZXIgdGhvdWdoLCBzaW5jZSBtb3ZlZCBwYXJhZ3JhcGhzIHdpbGwgdXN1YWxseSBiZSBxdWl0
ZSBzbWFsbC4KQEAgLTgwNSw3ICs4MDUsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpt
b3ZlUGFyYWdyYXBoCiAgICAgICAgIHVwZGF0ZUxheW91dCgpOwogICAgIH0KICAgICAgICAgCi0g
ICAgUmVmUHRyPFJhbmdlPiBzdGFydFRvRGVzdGluYXRpb25SYW5nZShuZXcgUmFuZ2UoZG9jdW1l
bnQoKSwgUG9zaXRpb24oZG9jdW1lbnQoKSwgMCksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChk
ZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpKSkpOworICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRU
b0Rlc3RpbmF0aW9uUmFuZ2UoUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBQb3NpdGlvbihkb2N1
bWVudCgpLCAwKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGRlc3RpbmF0aW9uLmRlZXBFcXVp
dmFsZW50KCkpKSk7CiAgICAgZGVzdGluYXRpb25JbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgoc3RhcnRUb0Rlc3RpbmF0aW9uUmFuZ2UuZ2V0KCksIHRydWUpOwogICAgIAogICAgIHNl
dEVuZGluZ1NlbGVjdGlvbihkZXN0aW5hdGlvbik7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiAzMDkwNCkKKysrIFdlYkNvcmUvZWRp
dGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYwLDgg
KzU2MCw4IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3IKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbmV3IFJh
bmdlKGRvY3VtZW50KCksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChzdGFydE9mUGFyYWdyYXBo
VG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkpLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoZW5kT2ZQ
YXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKSkpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2VUb0JlUmVwbGFjZWQgPSBuZXcgUmFuZ2UoZG9jdW1lbnQoKSwgcmFuZ2VDb21wbGlhbnRFcXVp
dmFsZW50KG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKSksIHJhbmdlQ29tcGxpYW50
RXF1aXZhbGVudChtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkpKTsKKyAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCByYW5nZUNvbXBsaWFu
dEVxdWl2YWxlbnQoc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpKSwgcmFu
Z2VDb21wbGlhbnRFcXVpdmFsZW50KGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50
KCkpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkID0gUmFuZ2U6OmNyZWF0
ZShkb2N1bWVudCgpLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQobWVyZ2VEZXN0aW5hdGlvbi5k
ZWVwRXF1aXZhbGVudCgpKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KG1lcmdlRGVzdGluYXRp
b24uZGVlcEVxdWl2YWxlbnQoKSkpOwogICAgIGlmICghZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRp
dG9yKCktPmNsaWVudCgpLT5zaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZShyYW5nZS5nZXQoKSwg
cmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAgICAgCkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAkocmV2aXNpb24gMzA5MDQpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIwOCw3ICsxMjA4LDcgQEAgdm9pZCBFZGl0b3I6OnNldENv
bXBvc2l0aW9uKGNvbnN0IFN0cmluZwogCiAgICAgICAgICAgICB1bnNpZ25lZCBzdGFydCA9IG1p
bihiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uU3RhcnQsIGV4dGVudE9mZnNldCk7CiAgICAgICAgICAg
ICB1bnNpZ25lZCBlbmQgPSBtaW4obWF4KHN0YXJ0LCBiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uRW5k
KSwgZXh0ZW50T2Zmc2V0KTsKLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5n
ZSA9IG5ldyBSYW5nZShiYXNlTm9kZS0+ZG9jdW1lbnQoKSwgYmFzZU5vZGUsIHN0YXJ0LCBiYXNl
Tm9kZSwgZW5kKTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHNl
bGVjdGVkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGJhc2VOb2RlLT5kb2N1bWVudCgpLCBiYXNlTm9k
ZSwgc3RhcnQsIGJhc2VOb2RlLCBlbmQpOyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIG1f
ZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+c2V0U2VsZWN0ZWRSYW5nZShzZWxlY3RlZFJh
bmdlLmdldCgpLCBET1dOU1RSRUFNLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzEx
LDcgKzEzMTEsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gcGFyYWdyYXBoQWxpZ25lCiAg
ICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlLmdldCgpLCBlbmRPZlBhcmFncmFwaChhcmJpdHJhcnlS
YW5nZS0+ZW5kUG9zaXRpb24oKSkpOwogICAgIAogICAgIC8vIENvbXB1dGUgb2Zmc2V0IGZyb20g
c3RhcnQgb2YgZXhwYW5kZWQgcmFuZ2UgdG8gc3RhcnQgb2Ygb3JpZ2luYWwgcmFuZ2UKLSAgICBS
ZWZQdHI8UmFuZ2U+IG9mZnNldEFzUmFuZ2UgPSBuZXcgUmFuZ2UocGFyYWdyYXBoUmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKSwgYXJiaXRyYXJ5UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7CisgICAgUmVmUHRyPFJhbmdl
PiBvZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250
YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBh
cmJpdHJhcnlSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKICAgICBvZmZzZXRJbnRvUGFyYWdyYXBo
QWxpZ25lZFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChvZmZzZXRBc1JhbmdlLmdl
dCgpKTsKICAgICAKICAgICAvLyBGaWxsIGluIG91dCBwYXJhbWV0ZXIgd2l0aCBzdHJpbmcgcmVw
cmVzZW50aW5nIGVudGlyZSBwYXJhZ3JhcGggcmFuZ2UuCkBAIC0xODI5LDcgKzE4MjksNyBAQCBQ
YXNzUmVmUHRyPFJhbmdlPiBFZGl0b3I6OmNvbXBvc2l0aW9uUmFuCiAgICAgdW5zaWduZWQgZW5k
ID0gbWluKG1heChzdGFydCwgbV9jb21wb3NpdGlvbkVuZCksIGxlbmd0aCk7CiAgICAgaWYgKHN0
YXJ0ID49IGVuZCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG5ldyBSYW5nZShtX2Nv
bXBvc2l0aW9uTm9kZS0+ZG9jdW1lbnQoKSwgbV9jb21wb3NpdGlvbk5vZGUuZ2V0KCksIHN0YXJ0
LCBtX2NvbXBvc2l0aW9uTm9kZS5nZXQoKSwgZW5kKTsKKyAgICByZXR1cm4gUmFuZ2U6OmNyZWF0
ZShtX2NvbXBvc2l0aW9uTm9kZS0+ZG9jdW1lbnQoKSwgbV9jb21wb3NpdGlvbk5vZGUuZ2V0KCks
IHN0YXJ0LCBtX2NvbXBvc2l0aW9uTm9kZS5nZXQoKSwgZW5kKTsKIH0KIAogYm9vbCBFZGl0b3I6
OmdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHVuc2lnbmVkJiBzZWxlY3Rpb25TdGFydCwgdW5zaWdu
ZWQmIHNlbGVjdGlvbkVuZCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJ
KHJldmlzaW9uIDMwOTA0KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzEsNyArMjMxLDcgQEAgc3RhdGljIFJlZlB0cjxSYW5nZT4gdW5p
b25ET01SYW5nZXMoUmFuZwogICAgIFJhbmdlKiBlbmQgPSBhLT5jb21wYXJlQm91bmRhcnlQb2lu
dHMoUmFuZ2U6OkVORF9UT19FTkQsIGIsIGVjKSA8PSAwID8gYiA6IGE7CiAgICAgQVNTRVJUKCFl
Yyk7CiAKLSAgICByZXR1cm4gbmV3IFJhbmdlKGEtPnN0YXJ0Q29udGFpbmVyKGVjKS0+b3duZXJE
b2N1bWVudCgpLCBzdGFydC0+c3RhcnRDb250YWluZXIoZWMpLCBzdGFydC0+c3RhcnRPZmZzZXQo
ZWMpLCBlbmQtPmVuZENvbnRhaW5lcihlYyksIGVuZC0+ZW5kT2Zmc2V0KGVjKSk7CisgICAgcmV0
dXJuIFJhbmdlOjpjcmVhdGUoYS0+c3RhcnRDb250YWluZXIoZWMpLT5vd25lckRvY3VtZW50KCks
IHN0YXJ0LT5zdGFydENvbnRhaW5lcihlYyksIHN0YXJ0LT5zdGFydE9mZnNldChlYyksIGVuZC0+
ZW5kQ29udGFpbmVyKGVjKSwgZW5kLT5lbmRPZmZzZXQoZWMpKTsKIH0KIAogLy8gRXhlY3V0ZSBj
b21tYW5kIGZ1bmN0aW9ucwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDMwOTA0
KQorKysgV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
OSw3ICsxNjksNyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBTZWxlY3Rpb246OnRvUmFuZ2UoKSBjCiAg
ICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFJhbmdlPiByZXN1
bHQobmV3IFJhbmdlKHMubm9kZSgpLT5kb2N1bWVudCgpKSk7CisgICAgUmVmUHRyPFJhbmdlPiBy
ZXN1bHQoUmFuZ2U6OmNyZWF0ZShzLm5vZGUoKS0+ZG9jdW1lbnQoKSkpOwogICAgIHJlc3VsdC0+
c2V0U3RhcnQocy5ub2RlKCksIHMub2Zmc2V0KCksIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAg
ICAgTE9HX0VSUk9SKCJFeGNlcHRpb24gc2V0dGluZyBSYW5nZSBzdGFydCBmcm9tIFNlbGVjdGlv
bjogJWQiLCBlYyk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMzA5
MDQpCisrKyBXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjYxLDEyICs2NjEsMTIgQEAgUGFzc1JlZlB0cjxSYW5nZT4gVGV4dEl0ZXJhdG9yOjpyYW5n
ZSgpIAogICAgICAgICAgICAgbV9wb3NpdGlvbkVuZE9mZnNldCArPSBpbmRleDsKICAgICAgICAg
ICAgIG1fcG9zaXRpb25PZmZzZXRCYXNlTm9kZSA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIG5ldyBSYW5nZShtX3Bvc2l0aW9uTm9kZS0+ZG9jdW1lbnQoKSwgbV9wb3NpdGlvbk5vZGUs
IG1fcG9zaXRpb25TdGFydE9mZnNldCwgbV9wb3NpdGlvbk5vZGUsIG1fcG9zaXRpb25FbmRPZmZz
ZXQpOworICAgICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShtX3Bvc2l0aW9uTm9kZS0+ZG9jdW1l
bnQoKSwgbV9wb3NpdGlvbk5vZGUsIG1fcG9zaXRpb25TdGFydE9mZnNldCwgbV9wb3NpdGlvbk5v
ZGUsIG1fcG9zaXRpb25FbmRPZmZzZXQpOwogICAgIH0KIAogICAgIC8vIG90aGVyd2lzZSwgcmV0
dXJuIHRoZSBlbmQgb2YgdGhlIG92ZXJhbGwgcmFuZ2Ugd2Ugd2VyZSBnaXZlbgogICAgIGlmICht
X2VuZENvbnRhaW5lcikKLSAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShtX2VuZENvbnRhaW5lci0+
ZG9jdW1lbnQoKSwgbV9lbmRDb250YWluZXIsIG1fZW5kT2Zmc2V0LCBtX2VuZENvbnRhaW5lciwg
bV9lbmRPZmZzZXQpOworICAgICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShtX2VuZENvbnRhaW5l
ci0+ZG9jdW1lbnQoKSwgbV9lbmRDb250YWluZXIsIG1fZW5kT2Zmc2V0LCBtX2VuZENvbnRhaW5l
ciwgbV9lbmRPZmZzZXQpOwogICAgICAgICAKICAgICByZXR1cm4gMDsKIH0KQEAgLTg4MCw5ICs4
ODAsOSBAQCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmVtCiBQYXNzUmVm
UHRyPFJhbmdlPiBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpyYW5nZSgpIGNvbnN0
CiB7CiAgICAgaWYgKG1fcG9zaXRpb25Ob2RlKQotICAgICAgICByZXR1cm4gbmV3IFJhbmdlKG1f
cG9zaXRpb25Ob2RlLT5kb2N1bWVudCgpLCBtX3Bvc2l0aW9uTm9kZSwgbV9wb3NpdGlvblN0YXJ0
T2Zmc2V0LCBtX3Bvc2l0aW9uTm9kZSwgbV9wb3NpdGlvbkVuZE9mZnNldCk7CisgICAgICAgIHJl
dHVybiBSYW5nZTo6Y3JlYXRlKG1fcG9zaXRpb25Ob2RlLT5kb2N1bWVudCgpLCBtX3Bvc2l0aW9u
Tm9kZSwgbV9wb3NpdGlvblN0YXJ0T2Zmc2V0LCBtX3Bvc2l0aW9uTm9kZSwgbV9wb3NpdGlvbkVu
ZE9mZnNldCk7CiAgICAgCi0gICAgcmV0dXJuIG5ldyBSYW5nZShtX3N0YXJ0Tm9kZS0+ZG9jdW1l
bnQoKSwgbV9zdGFydE5vZGUsIG1fc3RhcnRPZmZzZXQsIG1fc3RhcnROb2RlLCBtX3N0YXJ0T2Zm
c2V0KTsKKyAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShtX3N0YXJ0Tm9kZS0+ZG9jdW1lbnQoKSwg
bV9zdGFydE5vZGUsIG1fc3RhcnRPZmZzZXQsIG1fc3RhcnROb2RlLCBtX3N0YXJ0T2Zmc2V0KTsK
IH0KIAogLy8gLS0tLS0tLS0KQEAgLTExNTgsNyArMTE1OCw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+
IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UKICAgICBSZWZQdHI8UmFuZ2U+IGVuZCA9IGNoYXJzLnJh
bmdlKCk7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFJhbmdl
PiByZXN1bHQobmV3IFJhbmdlKGVudGlyZVJhbmdlLT5vd25lckRvY3VtZW50KCksIAorICAgIFJl
ZlB0cjxSYW5nZT4gcmVzdWx0KFJhbmdlOjpjcmVhdGUoZW50aXJlUmFuZ2UtPm93bmVyRG9jdW1l
bnQoKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydC0+c3RhcnRD
b250YWluZXIoZWMpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0
LT5zdGFydE9mZnNldChlYyksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZW5kLT5zdGFydENvbnRhaW5lcihlYyksIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQ
b3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlv
bi5jcHAJKHJldmlzaW9uIDMwOTA0KQorKysgV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NCw3ICsyNzQsNyBAQCBQYXNzUmVmUHRyPFJhbmdl
PiBtYWtlUmFuZ2UoY29uc3QgVmlzaWJsCiB7CiAgICAgUG9zaXRpb24gcyA9IHJhbmdlQ29tcGxp
YW50RXF1aXZhbGVudChzdGFydCk7CiAgICAgUG9zaXRpb24gZSA9IHJhbmdlQ29tcGxpYW50RXF1
aXZhbGVudChlbmQpOwotICAgIHJldHVybiBuZXcgUmFuZ2Uocy5ub2RlKCktPmRvY3VtZW50KCks
IHMubm9kZSgpLCBzLm9mZnNldCgpLCBlLm5vZGUoKSwgZS5vZmZzZXQoKSk7CisgICAgcmV0dXJu
IFJhbmdlOjpjcmVhdGUocy5ub2RlKCktPmRvY3VtZW50KCksIHMubm9kZSgpLCBzLm9mZnNldCgp
LCBlLm5vZGUoKSwgZS5vZmZzZXQoKSk7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2li
bGVQb3NpdGlvbihjb25zdCBSYW5nZSAqciwgRUFmZmluaXR5IGFmZmluaXR5KQpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRp
bmcvaHRtbGVkaXRpbmcuY3BwCShyZXZpc2lvbiAzMDkwNCkKKysrIFdlYkNvcmUvZWRpdGluZy9o
dG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzMiw3ICs5MzIsNyBAQCBpbnQgaW5k
ZXhGb3JWaXNpYmxlUG9zaXRpb24oVmlzaWJsZVBvc2l0CiAgICAgaWYgKHZpc2libGVQb3NpdGlv
bi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgUG9zaXRpb24gcCh2aXNpYmxlUG9z
aXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG5ldyBS
YW5nZShwLm5vZGUoKS0+ZG9jdW1lbnQoKSwgUG9zaXRpb24ocC5ub2RlKCktPmRvY3VtZW50KCks
IDApLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQocCkpOworICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKHAubm9kZSgpLT5kb2N1bWVudCgpLCBQb3NpdGlvbihwLm5vZGUo
KS0+ZG9jdW1lbnQoKSwgMCksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChwKSk7CiAgICAgcmV0
dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCksIHRydWUpOwogfQogCkBA
IC05NjcsNyArOTY3LDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gYXZvaWRJbnRlcnNlY3Rpb25XaXRo
TgogICAgICAgICBlbmRPZmZzZXQgPSBub2RlLT5ub2RlSW5kZXgoKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gbmV3IFJhbmdlKGRvY3VtZW50LCBzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQsIGVu
ZENvbnRhaW5lciwgZW5kT2Zmc2V0KTsKKyAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShkb2N1bWVu
dCwgc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0LCBlbmRDb250YWluZXIsIGVuZE9mZnNldCk7
CiB9CiAKIFNlbGVjdGlvbiBhdm9pZEludGVyc2VjdGlvbldpdGhOb2RlKGNvbnN0IFNlbGVjdGlv
biYgc2VsZWN0aW9uLCBOb2RlKiBub2RlKQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDMw
OTA0KQorKysgV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
OCw4ICsyNTgsNyBAQCBzdGF0aWMgU3RyaW5nIHJlbmRlcmVkVGV4dChjb25zdCBOb2RlKiBuCiAg
ICAgCiAgICAgUG9zaXRpb24gc3RhcnQoY29uc3RfY2FzdDxOb2RlKj4obm9kZSksIHN0YXJ0T2Zm
c2V0KTsKICAgICBQb3NpdGlvbiBlbmQoY29uc3RfY2FzdDxOb2RlKj4obm9kZSksIGVuZE9mZnNl
dCk7Ci0gICAgUmFuZ2Ugcihub2RlLT5kb2N1bWVudCgpLCBzdGFydCwgZW5kKTsKLSAgICByZXR1
cm4gcGxhaW5UZXh0KCZyKTsKKyAgICByZXR1cm4gcGxhaW5UZXh0KFJhbmdlOjpjcmVhdGUobm9k
ZS0+ZG9jdW1lbnQoKSwgc3RhcnQsIGVuZCkuZ2V0KCkpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzRm9yRWxl
bWVudChFbGVtZW50KiBlbGVtZW50LCBib29sIGF1dGhvck9ubHkgPSB0cnVlKQpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNpb24gMzA5MDQpCisrKyBXZWJDb3JlL2VkaXRp
bmcvdmlzaWJsZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgc3Rh
dGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KAogCiAgICAgUG9zaXRpb24gc3Rh
cnQgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoUG9zaXRpb24oYm91bmRhcnksIDApKTsKICAg
ICBQb3NpdGlvbiBlbmQgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQocG9zKTsKLSAgICBSZWZQ
dHI8UmFuZ2U+IHNlYXJjaFJhbmdlID0gbmV3IFJhbmdlKGQpOworICAgIFJlZlB0cjxSYW5nZT4g
c2VhcmNoUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGQpOwogICAgIAogICAgIGludCBleGNlcHRpb24g
PSAwOwogICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChzdGFydC5ub2RlKCksIHN0YXJ0Lm9mZnNl
dCgpLCBleGNlcHRpb24pOwpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlk
Z2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2Uu
bW0JKHJldmlzaW9uIDMwOTA0KQorKysgV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlk
Z2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTc4MSw3ICs3ODEsNyBAQCBzdGF0aWMgSFRNTEZvcm1F
bGVtZW50ICpmb3JtRWxlbWVudEZyb21ECiAgICAgaWYocmFuZ2UtPmVuZENvbnRhaW5lcihleGNl
cHRpb24pICE9IHNjb3BlICYmICFyYW5nZS0+ZW5kQ29udGFpbmVyKGV4Y2VwdGlvbiktPmlzRGVz
Y2VuZGFudE9mKHNjb3BlKSkKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQs
IDApOwogICAgIAotICAgIFJlZlB0cjxSYW5nZT4gdGVzdFJhbmdlID0gbmV3IFJhbmdlKHNjb3Bl
LT5kb2N1bWVudCgpLCBzY29wZSwgMCwgcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbiks
IHJhbmdlLT5zdGFydE9mZnNldChleGNlcHRpb24pKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHRlc3RS
YW5nZSA9IFJhbmdlOjpjcmVhdGUoc2NvcGUtPmRvY3VtZW50KCksIHNjb3BlLCAwLCByYW5nZS0+
c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbikp
OwogICAgIEFTU0VSVCh0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbikgPT0gc2Nv
cGUpOwogICAgIGludCBzdGFydFBvc2l0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0
ZXN0UmFuZ2UuZ2V0KCkpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2wuY3BwCShyZXZpc2lvbiAzMDkwNCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkyLDcgKzQ5Miw3IEBAIFZpc2libGVQb3Np
dGlvbiBSZW5kZXJUZXh0Q29udHJvbDo6dmlzaWIKICAgICBpZiAoaW5kZXggPD0gMCkKICAgICAg
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihtX2lubmVyVGV4dC5nZXQoKSwgMCwgRE9XTlNUUkVB
TSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IG5ldyBSYW5nZShkb2N1bWVudCgpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShkb2N1bWVudCgpKTsKICAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKG1faW5u
ZXJUZXh0LmdldCgpLCBlYyk7CiAgICAgQ2hhcmFjdGVySXRlcmF0b3IgaXQocmFuZ2UuZ2V0KCkp
OwogICAgIGl0LmFkdmFuY2UoaW5kZXggLSAxKTsKQEAgLTUwNSw3ICs1MDUsNyBAQCBpbnQgUmVu
ZGVyVGV4dENvbnRyb2w6OmluZGV4Rm9yVmlzaWJsZVBvCiAgICAgaWYgKCFpbmRleFBvc2l0aW9u
Lm5vZGUoKSB8fCBpbmRleFBvc2l0aW9uLm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9
IG1faW5uZXJUZXh0KQogICAgICAgICByZXR1cm4gMDsKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbmV3IFJhbmdlKGRvY3VtZW50KCkpOworICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCkpOwogICAgIHJh
bmdlLT5zZXRTdGFydChtX2lubmVyVGV4dC5nZXQoKSwgMCwgZWMpOwogICAgIHJhbmdlLT5zZXRF
bmQoaW5kZXhQb3NpdGlvbi5ub2RlKCksIGluZGV4UG9zaXRpb24ub2Zmc2V0KCksIGVjKTsKICAg
ICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSk7CkluZGV4OiBX
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0JKHJldmlzaW9uIDMw
OTA0KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjc1LDggKzI3NSw3IEBAIHN0YXRpYyBOU0FycmF5ICpjb25jYXRlbmF0
ZUFycmF5cyhOU0FycmEKIAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmlu
Z0Zyb206KERPTU5vZGUgKilzdGFydE5vZGUgc3RhcnRPZmZzZXQ6KGludClzdGFydE9mZnNldCB0
bzooRE9NTm9kZSAqKWVuZE5vZGUgZW5kT2Zmc2V0OihpbnQpZW5kT2Zmc2V0CiB7Ci0gICAgUmFu
Z2UgcmFuZ2UoW3N0YXJ0Tm9kZSBfbm9kZV0tPmRvY3VtZW50KCksIFtzdGFydE5vZGUgX25vZGVd
LCBzdGFydE9mZnNldCwgW2VuZE5vZGUgX25vZGVdLCBlbmRPZmZzZXQpOwotICAgIHJldHVybiBb
TlNBdHRyaWJ1dGVkU3RyaW5nIF93ZWJfYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZTomcmFuZ2Vd
OworICAgIHJldHVybiBbTlNBdHRyaWJ1dGVkU3RyaW5nIF93ZWJfYXR0cmlidXRlZFN0cmluZ0Zy
b21SYW5nZTpSYW5nZTo6Y3JlYXRlKFtzdGFydE5vZGUgX25vZGVdLT5kb2N1bWVudCgpLCBbc3Rh
cnROb2RlIF9ub2RlXSwgc3RhcnRPZmZzZXQsIFtlbmROb2RlIF9ub2RlXSwgZW5kT2Zmc2V0KS5n
ZXQoKV07CiB9CiAKIC0gKERPTUVsZW1lbnQgKillbGVtZW50V2l0aE5hbWU6KE5TU3RyaW5nICop
bmFtZSBpbkZvcm06KERPTUVsZW1lbnQgKilmb3JtCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxW
aWV3Lm1tCShyZXZpc2lvbiAzMDkwNCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmll
dy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTY3OSw4ICs1Njc5LDcgQEAgc3RhdGljIHZvaWQgZXh0
cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dAogICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmli
dXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1dGVTdHJpbmdGcm9tRE9NUmFuZ2U6W2RvY3VtZW50
IF9kb2N1bWVudFJhbmdlXV07CiAgICAgaWYgKCFhdHRyaWJ1dGVkU3RyaW5nKSB7CiAgICAgICAg
IERvY3VtZW50KiBjb3JlRG9jdW1lbnQgPSBjb3JlKGRvY3VtZW50KTsKLSAgICAgICAgUmFuZ2Ug
cmFuZ2UoY29yZURvY3VtZW50LCBjb3JlRG9jdW1lbnQsIDAsIDAsIDApOwotICAgICAgICBhdHRy
aWJ1dGVkU3RyaW5nID0gW05TQXR0cmlidXRlZFN0cmluZyBfd2ViX2F0dHJpYnV0ZWRTdHJpbmdG
cm9tUmFuZ2U6JnJhbmdlXTsKKyAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtOU0F0dHJpYnV0
ZWRTdHJpbmcgX3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOlJhbmdlOjpjcmVhdGUoY29y
ZURvY3VtZW50LCBjb3JlRG9jdW1lbnQsIDAsIGNvcmVEb2N1bWVudCwgY29yZURvY3VtZW50LT5j
aGlsZE5vZGVDb3VudCgpKS5nZXQoKV07CiAgICAgfQogICAgIHJldHVybiBhdHRyaWJ1dGVkU3Ry
aW5nOwogfQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvbXV0YXRpb24tZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL211dGF0aW9u
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1Jhbmdl
L211dGF0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNSBAQAorUEFT
UyBkZXNjcmlwdGlvbihyYW5nZSkgaXMgInRleHQsMjQgLT4gdGV4dCwzMjogWSBibGFoIGkiCitQ
QVNTIGRlc2NyaXB0aW9uKHJhbmdlKSBpcyAidGV4dCwxMSAtPiB0ZXh0LDMyOiBpbnNlcnRlZCB0
ZXh0WSBibGFoIGkiCitQQVNTIGRlc2NyaXB0aW9uKHJhbmdlKSBpcyAidGV4dCwxMSAtPiB0ZXh0
LDMyOiBZaW5zZXJ0ZWQgdGV4dCBibGFoIGkiCitQQVNTIGRlc2NyaXB0aW9uKHJhbmdlKSBpcyAi
dGV4dCwxMSAtPiB0ZXh0LDMyOiBZIGJsYWhpbnNlcnRlZCB0ZXh0IGkiCitQQVNTIGRlc2NyaXB0
aW9uKHJhbmdlKSBpcyAidGV4dCwxMSAtPiB0ZXh0LDMyOiBZIGJsYWggaW5zZXJ0ZWQgdGV4dGki
CitQQVNTIGRlc2NyaXB0aW9uKHJhbmdlKSBpcyAidGV4dCwxMSAtPiB0ZXh0LDE5OiBZIGJsYWgg
aSIKK1BBU1MgZGVzY3JpcHRpb24ocmFuZ2UpIGlzICJ0ZXh0LDUgLT4gdGV4dCwxMzogIFJhbmdl
IGkiCitQQVNTIGRlc2NyaXB0aW9uKHJhbmdlKSBpcyAidGV4dCw1IC0+IHRleHQsNTogIgorUEFT
UyBkZXNjcmlwdGlvbihyYW5nZSkgaXMgInRleHQxLDUgLT4gdGV4dDIsNDogYW5nZSIKK1BBU1Mg
ZGVzY3JpcHRpb24ocmFuZ2UpIGlzICJ0ZXh0LDUgLT4gdGV4dCwxNTogaGUgUmFuZ2UgaSIKK1BB
U1MgcGFyYWdyYXBoLmNoaWxkTm9kZXMubGVuZ3RoIGlzIDIKK1BBU1MgdGV4dDEubGVuZ3RoIGlz
IDUKK1BBU1MgZGVzY3JpcHRpb24ocmFuZ2UpIGlzICJwYXJhZ3JhcGgsMSAtPiBwYXJhZ3JhcGgs
MTogIgorUEFTUyBwYXJhZ3JhcGguY2hpbGROb2Rlcy5sZW5ndGggaXMgMQorUEFTUyB0ZXh0MS5s
ZW5ndGggaXMgNworUEFTUyBkZXNjcmlwdGlvbihyYW5nZSkgaXMgInRleHQxLDUgLT4gdGV4dDEs
NTogIgorUEFTUyBkZXNjcmlwdGlvbihyYW5nZSkgaXMgInBhcmFncmFwaCwyIC0+IHBhcmFncmFw
aCw0OiBiYyIKK1BBU1MgZGVzY3JpcHRpb24ocmFuZ2UpIGlzICJwYXJhZ3JhcGgsMSAtPiBwYXJh
Z3JhcGgsNDogZWJjIgorUEFTUyBkZXNjcmlwdGlvbihyYW5nZSkgaXMgInBhcmFncmFwaCwxIC0+
IHBhcmFncmFwaCw0OiBiZWMiCitQQVNTIGRlc2NyaXB0aW9uKHJhbmdlKSBpcyAicGFyYWdyYXBo
LDEgLT4gcGFyYWdyYXBoLDM6IGJjIgorUEFTUyBkZXNjcmlwdGlvbihyYW5nZSkgaXMgInBhcmFn
cmFwaCwxIC0+IHBhcmFncmFwaCwzOiBiYyIKK1BBU1MgZGVzY3JpcHRpb24ocmFuZ2UpIGlzICJw
YXJhZ3JhcGgsMSAtPiBkLDE6IGNkIgorUEFTUyBkZXNjcmlwdGlvbihyYW5nZSkgaXMgInBhcmFn
cmFwaCwxIC0+IGQsMDogYyIKK1BBU1MgZGVzY3JpcHRpb24ocmFuZ2UpIGlzICJiLDAgLT4gcGFy
YWdyYXBoLDM6IGJjIgorUEFTUyBkZXNjcmlwdGlvbihyYW5nZSkgaXMgImIsMSAtPiBwYXJhZ3Jh
cGgsMzogYyIKK1BBU1MgZGVzY3JpcHRpb24ocmFuZ2UpIGlzICJhLDEgLT4gYSwzOiB4YiIKK1BB
U1MgZGVzY3JpcHRpb24ocmFuZ2UpIGlzICJhLDEgLT4gYiwyOiBiYyIKK1BBU1MgZGVzY3JpcHRp
b24ocmFuZ2UpIGlzICJhLDEgLT4gYiwxOiBiYyIKK1BBU1MgZGVzY3JpcHRpb24ocmFuZ2UpIGlz
ICJhLDEgLT4gYSwzOiBiYyIKK1BBU1MgZGVzY3JpcHRpb24ocmFuZ2UpIGlzICJhLDIgLT4gc2Vj
dGlvbiwxOiBjZGUiCitQQVNTIGRlc2NyaXB0aW9uKHJhbmdlKSBpcyAic2VjdGlvbiwwIC0+IHNl
Y3Rpb24sMDogIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL211
dGF0aW9uLWV4cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBu
YXRpdmUKCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9tdXRhdGlvbi5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL211dGF0aW9uLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9tdXRhdGlvbi5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lF
VEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBz
cmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL211dGF0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvZG9t
L1JhbmdlL211dGF0aW9uLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsg
dGV4dC9odG1sCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9SYW5nZS9yZXNvdXJjZXMvbXV0YXRpb24uanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvcmVzb3VyY2VzL211dGF0aW9uLmpzCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvcmVzb3VyY2VzL211dGF0aW9uLmpz
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5OCBAQAorZGVzY3JpcHRpb24oCisiVGhpcyB0ZXN0
IGNoZWNrcyBtdXRhdGlvbiBvZiB0aGUgRE9NIGFuZCBob3cgaXQgYWZmZWN0cyBSYW5nZXMuIgor
KTsKKwordmFyIGE7Cit2YXIgYjsKK3ZhciBjOwordmFyIGQ7Cit2YXIgZTsKK3ZhciBwYXJhZ3Jh
cGg7Cit2YXIgc2VjdGlvbjsKK3ZhciB0ZXh0OwordmFyIHRleHQxOwordmFyIHRleHQyOwordmFy
IHRleHQzOworCitmdW5jdGlvbiBuYW1lKG5vZGUpCit7CisgICAgaWYgKG5vZGUgPT0gYSkKKyAg
ICAgICAgcmV0dXJuICJhIjsKKyAgICBpZiAobm9kZSA9PSBiKQorICAgICAgICByZXR1cm4gImIi
OworICAgIGlmIChub2RlID09IGMpCisgICAgICAgIHJldHVybiAiYyI7CisgICAgaWYgKG5vZGUg
PT0gZCkKKyAgICAgICAgcmV0dXJuICJkIjsKKyAgICBpZiAobm9kZSA9PSBlKQorICAgICAgICBy
ZXR1cm4gImUiOworICAgIGlmIChub2RlID09IHBhcmFncmFwaCkKKyAgICAgICAgcmV0dXJuICJw
YXJhZ3JhcGgiOworICAgIGlmIChub2RlID09IHNlY3Rpb24pCisgICAgICAgIHJldHVybiAic2Vj
dGlvbiI7CisgICAgaWYgKG5vZGUgPT0gdGV4dCkKKyAgICAgICAgcmV0dXJuICJ0ZXh0IjsKKyAg
ICBpZiAobm9kZSA9PSB0ZXh0MSkKKyAgICAgICAgcmV0dXJuICJ0ZXh0MSI7CisgICAgaWYgKG5v
ZGUgPT0gdGV4dDIpCisgICAgICAgIHJldHVybiAidGV4dDIiOworICAgIGlmIChub2RlID09IHRl
eHQzKQorICAgICAgICByZXR1cm4gInRleHQzIjsKKyAgICByZXR1cm4gIj8/PyI7Cit9CisKK2Z1
bmN0aW9uIGRlc2NyaXB0aW9uKHJhbmdlKQoreworICAgIHJldHVybiBuYW1lKHJhbmdlLnN0YXJ0
Q29udGFpbmVyKSArICIsIiArIHJhbmdlLnN0YXJ0T2Zmc2V0ICsgIiAtPiAiICsgbmFtZShyYW5n
ZS5lbmRDb250YWluZXIpICsgIiwiICsgcmFuZ2UuZW5kT2Zmc2V0ICsgIjogIiArIHJhbmdlLnRv
U3RyaW5nKCk7Cit9CisKK2Z1bmN0aW9uIG1ha2VSYW5nZShzYywgc28sIGVjLCBlbykKK3sKKyAg
ICB2YXIgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOworICAgIG5ld1JhbmdlLnNl
dFN0YXJ0KHNjLCBzbyk7CisgICAgbmV3UmFuZ2Uuc2V0RW5kKGVjLCBlbyk7CisgICAgcmV0dXJu
IG5ld1JhbmdlOworfQorCitmdW5jdGlvbiBzZXRVcDEoKQoreworICAgIHBhcmFncmFwaCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsKKyAgICB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoIkFiY2QgZWZnaCBYWSBibGFoIGlqa2wiKTsKKyAgICBwYXJhZ3JhcGguYXBwZW5kQ2hp
bGQodGV4dCk7CisgICAgcmFuZ2UgPSBtYWtlUmFuZ2UodGV4dCwgMTEsIHRleHQsIDE5KTsKK30K
KworZnVuY3Rpb24gY3JlYXRlVGVzdEVsZW1lbnQobmFtZSkKK3sKKyAgICB2YXIgZWxlbWVudCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImVtIik7CisgICAgdmFyIHRleHQgPSBkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZShuYW1lKTsKKyAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRleHQpOworICAg
IHJldHVybiBlbGVtZW50OworfQorCitmdW5jdGlvbiBzZXRVcDIoKQoreworICAgIHBhcmFncmFw
aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsKKyAgICBhID0gY3JlYXRlVGVzdEVsZW1l
bnQoImEiKTsKKyAgICBiID0gY3JlYXRlVGVzdEVsZW1lbnQoImIiKTsKKyAgICBjID0gY3JlYXRl
VGVzdEVsZW1lbnQoImMiKTsKKyAgICBkID0gY3JlYXRlVGVzdEVsZW1lbnQoImQiKTsKKyAgICBl
ID0gY3JlYXRlVGVzdEVsZW1lbnQoImUiKTsKKworICAgIHBhcmFncmFwaC5hcHBlbmRDaGlsZChh
KTsKKyAgICBwYXJhZ3JhcGguYXBwZW5kQ2hpbGQoYik7CisgICAgcGFyYWdyYXBoLmFwcGVuZENo
aWxkKGMpOworICAgIHBhcmFncmFwaC5hcHBlbmRDaGlsZChkKTsKKyAgICByYW5nZSA9IG1ha2VS
YW5nZShwYXJhZ3JhcGgsIDEsIHBhcmFncmFwaCwgMyk7Cit9CisKK2Z1bmN0aW9uIHNldFVwMygp
Cit7CisgICAgcGFyYWdyYXBoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOworICAgIGEg
PSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYXgiKTsKKyAgICBiID0gZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoImJ5Iik7CisKKyAgICBwYXJhZ3JhcGguYXBwZW5kQ2hpbGQoYSk7CisgICAgcGFy
YWdyYXBoLmFwcGVuZENoaWxkKGIpOworCisgICAgcmFuZ2UgPSBtYWtlUmFuZ2UoYSwgMSwgYiwg
MSk7Cit9CisKK2Z1bmN0aW9uIHNldFVwNCgpCit7CisgICAgcGFyYWdyYXBoID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgicCIpOworICAgIGEgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYWJj
ZCIpOworCisgICAgcGFyYWdyYXBoLmFwcGVuZENoaWxkKGEpOworCisgICAgcmFuZ2UgPSBtYWtl
UmFuZ2UoYSwgMSwgYSwgMyk7Cit9CisKK2Z1bmN0aW9uIHNldFVwNSgpCit7CisgICAgc2VjdGlv
biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIHBhcmFncmFwaCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsKKyAgICBhID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
ImFiY2RlIik7CisKKyAgICBzZWN0aW9uLmFwcGVuZENoaWxkKHBhcmFncmFwaCk7CisgICAgcGFy
YWdyYXBoLmFwcGVuZENoaWxkKGEpOworCisgICAgcmFuZ2UgPSBtYWtlUmFuZ2UoYSwgMiwgc2Vj
dGlvbiwgMSk7Cit9CisKKy8vIEZpcnN0LCB0ZXN0cyBmcm9tIHRoZSBET00gTGV2ZWwgMiBzcGVj
aWZpY2F0aW9uLgorCisvLyBET00gTGV2ZWwgMiBUcmF2ZXJzYWwgUmFuZ2UsIDIuMTIuMS4gSW5z
ZXJ0aW9ucywgZXhhbXBsZSAxLgorc2V0VXAxKCk7Cit0ZXh0Lmluc2VydERhdGEoMTAsICJpbnNl
cnRlZCB0ZXh0Iik7CitzaG91bGRCZSgnZGVzY3JpcHRpb24ocmFuZ2UpJywgJyJ0ZXh0LDI0IC0+
IHRleHQsMzI6IFkgYmxhaCBpIicpOworCisvLyBET00gTGV2ZWwgMiBUcmF2ZXJzYWwgUmFuZ2Us
IDIuMTIuMS4gSW5zZXJ0aW9ucywgZXhhbXBsZSAyLgorLy8gRmlyZWZveCBkb2VzIG5vdCBtYXRj
aCB0aGUgRE9NIExldmVsIDIgc3BlY2lmaWNhdGlvbiBvbiB0aGlzIG9uZS4KK3NldFVwMSgpOwor
dGV4dC5pbnNlcnREYXRhKDExLCAiaW5zZXJ0ZWQgdGV4dCIpOworc2hvdWxkQmUoJ2Rlc2NyaXB0
aW9uKHJhbmdlKScsICcidGV4dCwxMSAtPiB0ZXh0LDMyOiBpbnNlcnRlZCB0ZXh0WSBibGFoIGki
Jyk7CisKKy8vIERPTSBMZXZlbCAyIFRyYXZlcnNhbCBSYW5nZSwgMi4xMi4xLiBJbnNlcnRpb25z
LCBleGFtcGxlIDMuCitzZXRVcDEoKTsKK3RleHQuaW5zZXJ0RGF0YSgxMiwgImluc2VydGVkIHRl
eHQiKTsKK3Nob3VsZEJlKCdkZXNjcmlwdGlvbihyYW5nZSknLCAnInRleHQsMTEgLT4gdGV4dCwz
MjogWWluc2VydGVkIHRleHQgYmxhaCBpIicpOworCisvLyBET00gTGV2ZWwgMiBUcmF2ZXJzYWwg
UmFuZ2UsIDIuMTIuMS4gSW5zZXJ0aW9ucywgZXhhbXBsZSA0Lgorc2V0VXAxKCk7Cit0ZXh0Lmlu
c2VydERhdGEoMTcsICJpbnNlcnRlZCB0ZXh0Iik7CitzaG91bGRCZSgnZGVzY3JpcHRpb24ocmFu
Z2UpJywgJyJ0ZXh0LDExIC0+IHRleHQsMzI6IFkgYmxhaGluc2VydGVkIHRleHQgaSInKTsKKwor
Ly8gU2ltaWxhciB0ZXN0IGF0IHRoZSByYW5nZSBlbmQuCitzZXRVcDEoKTsKK3RleHQuaW5zZXJ0
RGF0YSgxOCwgImluc2VydGVkIHRleHQiKTsKK3Nob3VsZEJlKCdkZXNjcmlwdGlvbihyYW5nZSkn
LCAnInRleHQsMTEgLT4gdGV4dCwzMjogWSBibGFoIGluc2VydGVkIHRleHRpIicpOworCisvLyBT
aW1pbGFyIHRlc3QgYXQgdGhlIHJhbmdlIGVuZC4KK3NldFVwMSgpOwordGV4dC5pbnNlcnREYXRh
KDE5LCAiaW5zZXJ0ZWQgdGV4dCIpOworc2hvdWxkQmUoJ2Rlc2NyaXB0aW9uKHJhbmdlKScsICci
dGV4dCwxMSAtPiB0ZXh0LDE5OiBZIGJsYWggaSInKTsKKworLy8gRE9NIExldmVsIDIgVHJhdmVy
c2FsIFJhbmdlLCAyLjEyLjIuIERlbGV0aW9ucywgZXhhbXBsZSAxLgorcGFyYWdyYXBoID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOwordGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KCJBYmNkIGVmZ2ggVGhlIFJhbmdlIGlqa2wiKTsKK3BhcmFncmFwaC5hcHBlbmRDaGlsZCh0ZXh0
KTsKK3JhbmdlID0gbWFrZVJhbmdlKHRleHQsIDExLCB0ZXh0LCAyMSk7Cit0ZXh0LmRlbGV0ZURh
dGEoNSwgOCk7CitzaG91bGRCZSgnZGVzY3JpcHRpb24ocmFuZ2UpJywgJyJ0ZXh0LDUgLT4gdGV4
dCwxMzogIFJhbmdlIGkiJyk7CisKKy8vIERPTSBMZXZlbCAyIFRyYXZlcnNhbCBSYW5nZSwgMi4x
Mi4yLiBEZWxldGlvbnMsIGV4YW1wbGUgMi4KK3BhcmFncmFwaCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoInAiKTsKK3RleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiQWJjZCBlZmdoIFRo
ZSBSYW5nZSBpamtsIik7CitwYXJhZ3JhcGguYXBwZW5kQ2hpbGQodGV4dCk7CityYW5nZSA9IG1h
a2VSYW5nZSh0ZXh0LCAxMSwgdGV4dCwgMjEpOwordGV4dC5kZWxldGVEYXRhKDUsIDE3KTsKK3No
b3VsZEJlKCdkZXNjcmlwdGlvbihyYW5nZSknLCAnInRleHQsNSAtPiB0ZXh0LDU6ICInKTsKKwor
Ly8gRE9NIExldmVsIDIgVHJhdmVyc2FsIFJhbmdlLCAyLjEyLjIuIERlbGV0aW9ucywgZXhhbXBs
ZSAzLgorLy8gRmlyZWZveCBkb2VzIG5vdCBtYXRjaCB0aGUgRE9NIExldmVsIDIgc3BlY2lmaWNh
dGlvbiBvbiB0aGlzIG9uZS4KKy8vIE9yIG1heWJlIEkgd3JvdGUgdGhlIHRlc3Qgd3Jvbmc/Citw
YXJhZ3JhcGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7Cit0ZXh0MSA9IGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKCJBQkNEIGVmZ2ggVGhlICIpOworcGFyYWdyYXBoLmFwcGVuZENoaWxk
KHRleHQxKTsKK2VtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZW0iKTsKK3BhcmFncmFwaC5h
cHBlbmRDaGlsZChlbSk7Cit0ZXh0MiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJSYW5nZSIp
OworZW0uYXBwZW5kQ2hpbGQodGV4dDIpOwordGV4dDMgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZSgiIGlqa2wiKTsKK3BhcmFncmFwaC5hcHBlbmRDaGlsZCh0ZXh0Myk7CityYW5nZSA9IG1ha2VS
YW5nZSh0ZXh0MSwgMTEsIHRleHQyLCA1KTsKK21ha2VSYW5nZSh0ZXh0MSwgNSwgdGV4dDIsIDEp
LmRlbGV0ZUNvbnRlbnRzKCk7CitzaG91bGRCZSgnZGVzY3JpcHRpb24ocmFuZ2UpJywgJyJ0ZXh0
MSw1IC0+IHRleHQyLDQ6IGFuZ2UiJyk7CisKKy8vIERPTSBMZXZlbCAyIFRyYXZlcnNhbCBSYW5n
ZSwgMi4xMi4yLiBEZWxldGlvbnMsIGV4YW1wbGUgNC4KK3BhcmFncmFwaCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInAiKTsKK3RleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiQWJjZCBl
ZmdoIFRoZSBSYW5nZSBpamtsIik7CitwYXJhZ3JhcGguYXBwZW5kQ2hpbGQodGV4dCk7CityYW5n
ZSA9IG1ha2VSYW5nZSh0ZXh0LCAxMSwgdGV4dCwgMjEpOwordGV4dC5kZWxldGVEYXRhKDUsIDYp
Oworc2hvdWxkQmUoJ2Rlc2NyaXB0aW9uKHJhbmdlKScsICcidGV4dCw1IC0+IHRleHQsMTU6IGhl
IFJhbmdlIGkiJyk7CisKKy8vIERPTSBMZXZlbCAyIFRyYXZlcnNhbCBSYW5nZSwgMi4xMi4yLiBE
ZWxldGlvbnMsIGV4YW1wbGUgNS4KK3BhcmFncmFwaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
InAiKTsKK3RleHQxID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIkFiY2QgIik7CitwYXJhZ3Jh
cGguYXBwZW5kQ2hpbGQodGV4dDEpOworZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJlbSIp
OworcGFyYWdyYXBoLmFwcGVuZENoaWxkKGVtKTsKK3RleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoImVmZ2ggVGhlIFJhbmdlIGlqIik7CitlbS5hcHBlbmRDaGlsZCh0ZXh0Mik7Cit0ZXh0
MyA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJrbCIpOworcGFyYWdyYXBoLmFwcGVuZENoaWxk
KHRleHQzKTsKK3JhbmdlID0gbWFrZVJhbmdlKHRleHQyLCA2LCB0ZXh0MiwgMTYpOworbWFrZVJh
bmdlKHBhcmFncmFwaCwgMSwgcGFyYWdyYXBoLCAyKS5kZWxldGVDb250ZW50cygpOworc2hvdWxk
QmUoJ3BhcmFncmFwaC5jaGlsZE5vZGVzLmxlbmd0aCcsICcyJyk7CitzaG91bGRCZSgndGV4dDEu
bGVuZ3RoJywgJzUnKTsKK3Nob3VsZEJlKCdkZXNjcmlwdGlvbihyYW5nZSknLCAnInBhcmFncmFw
aCwxIC0+IHBhcmFncmFwaCwxOiAiJyk7CitwYXJhZ3JhcGgubm9ybWFsaXplKCk7CitzaG91bGRC
ZSgncGFyYWdyYXBoLmNoaWxkTm9kZXMubGVuZ3RoJywgJzEnKTsKK3Nob3VsZEJlKCd0ZXh0MS5s
ZW5ndGgnLCAnNycpOworc2hvdWxkQmUoJ2Rlc2NyaXB0aW9uKHJhbmdlKScsICcidGV4dDEsNSAt
PiB0ZXh0MSw1OiAiJyk7CisKKy8vIEluc2VydGluZyBhIG5vZGUgaW4gdGhlIHN0YXJ0IGNvbnRh
aW5lciwgYmVmb3JlIHRoZSByYW5nZSBzdGFydCBvZmZzZXQuCitzZXRVcDIoKTsKK3BhcmFncmFw
aC5pbnNlcnRCZWZvcmUoZSwgYSk7CitzaG91bGRCZSgnZGVzY3JpcHRpb24ocmFuZ2UpJywgJyJw
YXJhZ3JhcGgsMiAtPiBwYXJhZ3JhcGgsNDogYmMiJyk7CisKKy8vIEluc2VydGluZyBhIG5vZGUg
aW4gdGhlIHN0YXJ0IGNvbnRhaW5lciwgYXQgdGhlIHJhbmdlIHN0YXJ0IG9mZnNldC4KK3NldFVw
MigpOworcGFyYWdyYXBoLmluc2VydEJlZm9yZShlLCBiKTsKK3Nob3VsZEJlKCdkZXNjcmlwdGlv
bihyYW5nZSknLCAnInBhcmFncmFwaCwxIC0+IHBhcmFncmFwaCw0OiBlYmMiJyk7CisKKy8vIElu
c2VydGluZyBhIG5vZGUgaW4gdGhlIHN0YXJ0IGNvbnRhaW5lciwgYmV0d2VlbiBzdGFydCBhbmQg
ZW5kLgorc2V0VXAyKCk7CitwYXJhZ3JhcGguaW5zZXJ0QmVmb3JlKGUsIGMpOworc2hvdWxkQmUo
J2Rlc2NyaXB0aW9uKHJhbmdlKScsICcicGFyYWdyYXBoLDEgLT4gcGFyYWdyYXBoLDQ6IGJlYyIn
KTsKKworLy8gSW5zZXJ0aW5nIGEgbm9kZSBpbiB0aGUgZW5kIGNvbnRhaW5lciwgYXQgdGhlIHJh
bmdlIGVuZCBvZmZzZXQuCitzZXRVcDIoKTsKK3BhcmFncmFwaC5pbnNlcnRCZWZvcmUoZSwgZCk7
CitzaG91bGRCZSgnZGVzY3JpcHRpb24ocmFuZ2UpJywgJyJwYXJhZ3JhcGgsMSAtPiBwYXJhZ3Jh
cGgsMzogYmMiJyk7CisKKy8vIEluc2VydGluZyBhIG5vZGUgaW4gdGhlIGVuZCBjb250YWluZXIs
IGFmdGVyIHRoZSByYW5nZSBlbmQgb2Zmc2V0Lgorc2V0VXAyKCk7CitwYXJhZ3JhcGguYXBwZW5k
Q2hpbGQoZSk7CitzaG91bGRCZSgnZGVzY3JpcHRpb24ocmFuZ2UpJywgJyJwYXJhZ3JhcGgsMSAt
PiBwYXJhZ3JhcGgsMzogYmMiJyk7CisKKy8vIFJlbW92aW5nIHRoZSBzdGFydCBjb250YWluZXIg
b2YgYSByYW5nZS4KK3NldFVwMigpOworcmFuZ2UgPSBtYWtlUmFuZ2UoYiwgMCwgZCwgMSk7Citw
YXJhZ3JhcGgucmVtb3ZlQ2hpbGQoYik7CitzaG91bGRCZSgnZGVzY3JpcHRpb24ocmFuZ2UpJywg
JyJwYXJhZ3JhcGgsMSAtPiBkLDE6IGNkIicpOworc2V0VXAyKCk7CityYW5nZSA9IG1ha2VSYW5n
ZShiLCAxLCBkLCAwKTsKK3BhcmFncmFwaC5yZW1vdmVDaGlsZChiKTsKK3Nob3VsZEJlKCdkZXNj
cmlwdGlvbihyYW5nZSknLCAnInBhcmFncmFwaCwxIC0+IGQsMDogYyInKTsKKworLy8gUmVtb3Zp
bmcgdGhlIGVuZCBjb250YWluZXIgb2YgYSByYW5nZS4KK3NldFVwMigpOworcmFuZ2UgPSBtYWtl
UmFuZ2UoYiwgMCwgZCwgMSk7CitwYXJhZ3JhcGgucmVtb3ZlQ2hpbGQoZCk7CitzaG91bGRCZSgn
ZGVzY3JpcHRpb24ocmFuZ2UpJywgJyJiLDAgLT4gcGFyYWdyYXBoLDM6IGJjIicpOworc2V0VXAy
KCk7CityYW5nZSA9IG1ha2VSYW5nZShiLCAxLCBkLCAwKTsKK3BhcmFncmFwaC5yZW1vdmVDaGls
ZChkKTsKK3Nob3VsZEJlKCdkZXNjcmlwdGlvbihyYW5nZSknLCAnImIsMSAtPiBwYXJhZ3JhcGgs
MzogYyInKTsKKworLy8gQ2FsbGluZyBub3JtYWxpemUgd2l0aCBhIHJhbmdlIHRoYXQgaGFzIGFu
IGVuZHBvaW50IGluIGEgdGV4dCBub2RlIHRoYXQgZ2V0cyBtZXJnZWQgaW50byBhbm90aGVyLgor
Ly8gRmlyZWZveCBkb2VzIG5vdCBkbyB3aGF0IHRoZSBET00gTGV2ZWwgMiBzcGVjaWZpY2F0aW9u
IHNlZW1zIHRvIGNhbGwgZm9yIG9uIHRoaXMgb25lLgorc2V0VXAzKCk7CitwYXJhZ3JhcGgubm9y
bWFsaXplKCk7CitzaG91bGRCZSgnZGVzY3JpcHRpb24ocmFuZ2UpJywgJyJhLDEgLT4gYSwzOiB4
YiInKTsKKworLy8gQ2FsbGluZyBzcGxpdFRleHQgd2hlbiBhIHJhbmdlIGhhcyBhbiBlbmRwb2lu
dCBvbiBpbiB0aGUgcGllY2UgdGhhdCBnZXRzIG1hZGUgaW50byBhIG5ldyB0ZXh0IG5vZGUuCisv
LyBGaXJlZm94IGRvZXMgbm90IGRvIHdoYXQgdGhlIERPTSBMZXZlbCAyIHNwZWNpZmljYXRpb24g
c2VlbXMgdG8gY2FsbCBmb3Igb24gdGhpcyBvbmUuCitzZXRVcDQoKTsKK2IgPSBhLnNwbGl0VGV4
dCgxKTsKK3Nob3VsZEJlKCdkZXNjcmlwdGlvbihyYW5nZSknLCAnImEsMSAtPiBiLDI6IGJjIicp
Oworc2V0VXA0KCk7CitiID0gYS5zcGxpdFRleHQoMik7CitzaG91bGRCZSgnZGVzY3JpcHRpb24o
cmFuZ2UpJywgJyJhLDEgLT4gYiwxOiBiYyInKTsKK3NldFVwNCgpOworYiA9IGEuc3BsaXRUZXh0
KDMpOworc2hvdWxkQmUoJ2Rlc2NyaXB0aW9uKHJhbmdlKScsICciYSwxIC0+IGEsMzogYmMiJyk7
CisKKy8vIFJhbmdlIHRlc3QgaW4gQWNpZDMuCitzZXRVcDUoKTsKK3Nob3VsZEJlKCdkZXNjcmlw
dGlvbihyYW5nZSknLCAnImEsMiAtPiBzZWN0aW9uLDE6IGNkZSInKTsKK3NlY3Rpb24ucmVtb3Zl
Q2hpbGQocGFyYWdyYXBoKTsKK3Nob3VsZEJlKCdkZXNjcmlwdGlvbihyYW5nZSknLCAnInNlY3Rp
b24sMCAtPiBzZWN0aW9uLDA6ICInKTsKKworLy8gQ2hpbGRyZW4gaW4gYSByYW5nZSBiZWluZyBy
ZW1vdmVkLCBidXQgYnkgRE9NIG11dGF0aW9uIChub3QgQ2hhcmFjdGVyRGF0YSBtdXRhdGlvbiku
CisvLyBUZXN0IENoYXJhY3RlckRhdGEucmVwbGFjZURhdGEgY2FzZXM/CisvLyBUZXN0IEVsZW1l
bnQuaW5uZXJIVE1MIGNhc2VzIChzZXR0aW5nIGl0KT8KKy8vIFRlc3QgRWxlbWVudC5pbm5lclRl
eHQgY2FzZXMgKHNldHRpbmcgaXQpPworLy8gVGVzdCBFbGVtZW50Lm91dGVySFRNTCBjYXNlcyAo
c2V0dGluZyBpdCk/CisvLyBUZXN0IEVsZW1lbnQub3V0ZXJUZXh0IGNhc2VzIChzZXR0aW5nIGl0
KT8KKy8vIFRlc3QgTm9kZS5yZXBsYWNlQ2hpbGQgY2FzZXM/CisvLyBUZXN0IGNhc2VzIHdoZXJl
IE5vZGUuaW5zZXJ0QmVmb3JlL2FwcGVuZENoaWxkIGhhcyBhIHNpZGUgZWZmZWN0IG9mIGRlbGV0
aW5nIHRoZSBub2RlIGZyb20gYSByYW5nZS4KKy8vIFRlc3QgUmFuZ2UuZGVsZXRlQ29udGVudHMg
Y2FzZXM/CisvLyBUZXN0IFJhbmdlLmV4dHJhY3RDb250ZW50cyBjYXNlcz8KKy8vIFRlc3QgUmFu
Z2Uuc3Vycm91bmRDb250ZW50cyBjYXNlcz8KKy8vIFRlc3QgVGV4dC5yZXBsYWNlV2hvbGVUZXh0
IGNhc2VzPworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL2V4ZWNDb21tYW5kLzQ5MjA0ODgtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL2V4ZWNDb21t
YW5kLzQ5MjA0ODgtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAzMDkwNCkKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9lZGl0aW5nL2V4ZWNDb21tYW5kLzQ5MjA0ODgtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsMyBAQAotQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE3OiBF
cnJvcjogV1JPTkdfRE9DVU1FTlRfRVJSOiBET00gRXhjZXB0aW9uIDQKIGxheWVyIGF0ICgwLDAp
IHNpemUgODAweDYwMAogICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAogbGF5ZXIg
YXQgKDAsMCkgc2l6ZSA4MDB4NjAwCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9lZGl0
aW5nL2V4ZWNDb21tYW5kLzQ5MjA0ODgtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL3F0L2VkaXRpbmcvZXhlY0NvbW1hbmQvNDkyMDQ4OC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDMwOTA0KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZWRpdGluZy9l
eGVjQ29tbWFuZC80OTIwNDg4LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsx
LDMgQEAKLUNPTlNPTEUgTUVTU0FHRTogbGluZSAxNzogRXJyb3I6IFdST05HX0RPQ1VNRU5UX0VS
UjogRE9NIEV4Y2VwdGlvbiA0CiBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKICAgUmVuZGVy
VmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19626</attachid>
            <date>2008-03-09 21:47:56 -0700</date>
            <delta_ts>2008-03-14 00:19:51 -0700</delta_ts>
            <desc>first round of Range improvements for review</desc>
            <filename>RangePart1Patch.txt</filename>
            <type>text/plain</type>
            <size>119093</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDkxOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQ2IEBACisyMDA4LTAzLTA5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIG1h
a2Ugc29tZSBSYW5nZSBpbXByb3ZlbWVudHMgKHByZXBhcmF0aW9uIGZvciBSYW5nZSBzdXBwb3J0
IGZvciBET00gbXV0YXRpb24pCisKKyAgICAgICAgTWFkZSBjb25zdHJ1Y3RvcnMgcHJpdmF0ZSwg
YWRkZWQgY3JlYXRlIGZ1bmN0aW9ucy4KKyAgICAgICAgTWFkZSByZWZjb3VudCBzdGFydCBhdCAx
IHJhdGhlciB0aGFuIHN0YXJ0aW5nIGF0IDAgYW5kIGJlaW5nIGluY3JlbWVudGVkLgorICAgICAg
ICBNYWRlIFJhbmdlIHVzZSB0d28gUG9zaXRpb24gb2JqZWN0cyBmb3IgdGhlIHN0YXJ0L2VuZCBj
b250YWluZXIvb2Zmc2V0IHBhaXJzLgorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDogVXBk
YXRlZC4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6Y3JlYXRlUmFuZ2UpOiBDaGFuZ2VkIHRvIHVzZSBSYW5nZTo6Y3JlYXRlLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92ZU1hcmtlcnMpOiBVcGRhdGVkIGZvciBSYW5n
ZTo6Zmlyc3QvcGFzdExhc3ROb2RlIG5hbWUgY2hhbmdlLgorCisgICAgICAgICogZG9tL1Bvc2l0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpmb3JtYXRGb3JEZWJ1Z2dlcik6
IFVwZGF0ZWQgZm9yIG1lbWJlciB2YXJpYWJsZSBuYW1lIGNoYW5nZS4KKyAgICAgICAgKFdlYkNv
cmU6OlBvc2l0aW9uOjpzaG93VHJlZUZvclRoaXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OnN0YXJ0UG9zaXRpb24pOiBDaGFuZ2VkIHRvIHVzZSBSYW5nZTo6c3RhcnRQb3NpdGlvbi4KKyAg
ICAgICAgKFdlYkNvcmU6OmVuZFBvc2l0aW9uKTogQ2hhbmdlZCB0byB1c2UgUmFuZ2U6OmVuZFBv
c2l0aW9uLgorCisgICAgICAgICogZG9tL1Bvc2l0aW9uLmg6IE1hZGUgdGhlIGRhdGEgbWVtYmVy
cyBwdWJsaWMgYW5kIHJlbmFtZWQgdGhlbSB0byBjb250YWluZXIKKyAgICAgICAgYW5kIG9mZnNl
dC4gQnV0IHNpbmNlIG9mZnNldCgpIGlzIGFscmVhZHkgYSBmdW5jdGlvbiwgdGVtcG9yYXJpbHkg
dXNlZCBwb3NPZmZzZXQKKyAgICAgICAgZm9yIHRoZSBkYXRhIG1lbWJlci4gTGF0ZXIgd2UnbGwg
Z2V0IHJpZCBvZiBvZmZzZXQoKS4gTWFkZSBtb3JlIGZ1bmN0aW9ucyBpbmxpbmUuCisgICAgICAg
IFJlbW92ZWQgdGhlIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYSBQb3NpdGlvbkl0ZXJhdG9yLgor
CisgICAgICAgICogZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UG9zaXRpb25JdGVyYXRvcjo6b3BlcmF0b3IgUG9zaXRpb24pOiBBZGRlZC4gUmVwbGFjZXMgdGhl
IGNvbnN0cnVjdG9yCisgICAgICAgIHRoYXQgdXNlZCB0byBiZSBpbiBQb3NpdGlvbi4KKyAgICAg
ICAgKiBkb20vUG9zaXRpb25JdGVyYXRvci5oOiBBZGRlZCBjb252ZXJzaW9uIG9wZXJhdG9yIHRv
IHByb2R1Y2UgYSBQb3NpdGlvbi4KKyAgICAgICAgUmVtb3ZlZCBmcmllbmQgZGVjbGFyYXRpb24g
Zm9yIFBvc2l0aW9uLgorCisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJhbmdlOjpSYW5nZSk6IFVwZGF0ZWQgY29uc3RydWN0b3JzIGZvciBkYXRhIG1lbWJlciBj
aGFuZ2VzIGFuZCBtYWRlCisgICAgICAgIHRoZW0gdXNlIGEgcmVmY291bnQgb2YgMS4KKyAgICAg
ICAgKFdlYkNvcmU6OlJhbmdlOjpjcmVhdGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJh
bmdlOjpzdGFydENvbnRhaW5lcik6IFVwZGF0ZWQgdG8gZWxpbWluYXRlIHVzZSBvZiBtX2RldGFj
aGVkOyBkZXRhY2hlZAorICAgICAgICBpcyBub3cgaW5kaWNhdGVkIGJ5IG1fc3RhcnQuY29udGFp
bmVyIG9mIDAuIEFsc28gdXBkYXRlZCB0byB1c2UgbV9zdGFydCBpbnN0ZWFkCisgICAgICAgIG9m
IHRoZSBvbGQgbV9zdGFydENvbnRhaW5lci4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpzdGFy
dE9mZnNldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmVuZENvbnRhaW5lcik6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmVuZE9mZnNldCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29sbGFwc2VkKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6c2V0U3RhcnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpz
ZXRFbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjb2xsYXBzZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmlzUG9pbnRJblJhbmdlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZVBvaW50KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6Y29tcGFyZU5vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
Ojpjb21wYXJlQm91bmRhcnlQb2ludHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
Ojpib3VuZGFyeVBvaW50c1ZhbGlkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6
ZGVsZXRlQ29udGVudHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjppbnRlcnNl
Y3RzTm9kZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnByb2Nlc3NDb250ZW50
cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmV4dHJhY3RDb250ZW50cyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNsb25lQ29udGVudHMpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlJhbmdlOjppbnNlcnROb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6dG9TdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp0
ZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZy
YWdtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6ZGV0YWNoKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y2hlY2tOb2RlQkEpOiBDaGFuZ2VkIHRvIHVzZSBz
d2l0Y2ggc3RhdGVtZW50cyBpbnN0ZWFkIG9mCisgICAgICAgIG11bHRpcGxlIGNhbGxzIHRvIHRo
ZSB2aXJ0dWFsIG5vZGVUeXBlKCkgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6
Y2xvbmVSYW5nZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNldFN0YXJ0QWZ0
ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpzZXRFbmRCZWZvcmUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpzZXRFbmRBZnRlcik6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OnNlbGVjdE5vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlJhbmdlOjpzZWxlY3ROb2RlQ29udGVudHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJh
bmdlOjpzdXJyb3VuZENvbnRlbnRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6
c2V0U3RhcnRCZWZvcmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjaGVja0Rl
bGV0ZUV4dHJhY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjb250YWluZWRC
eVJlYWRPbmx5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Zmlyc3ROb2RlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6ZWRpdGluZ1N0YXJ0UG9zaXRpb24pOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpwYXN0TGFzdE5vZGUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlJhbmdlOjphZGRMaW5lQm94UmVjdHMpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlJhbmdlOjpmb3JtYXRGb3JEZWJ1Z2dlcik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I9PSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6cmFuZ2VPZkNvbnRl
bnRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6bWF4U3RhcnRPZmZzZXQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjptYXhFbmRPZmZzZXQpOiBEaXR0by4KKwor
ICAgICAgICAqIGRvbS9SYW5nZS5oOiBNYWRlIGNvbnN0cnVjdG9ycyBwcml2YXRlLiBBZGRlZCBj
cmVhdGUgZnVuY3Rpb25zLgorICAgICAgICBBZGRlZCBnZXR0ZXJzIGZvciBzdGFydENvbnRhaW5l
ci9PZmZzZXQgYW5kIGVuZENvbnRhaW5lci9PZmZzZXQgdGhhdAorICAgICAgICByZXR1cm4gMCBp
bnN0ZWFkIG9mIGFuIGV4Y2VwdGlvbiBmb3IgZGV0YWNoZWQgcmFuZ2VzIHRoYXQgYXJlIGlubGlu
ZQorICAgICAgICBhbmQgZG9uJ3QgcmVxdWlyZSBhbiBFeGNlcHRpb25Db2RlIG91dCBwYXJhbWV0
ZXIuIENoYW5nZWQgdGhlIHBhcmFtZXRlcnMKKyAgICAgICAgdG8gc2V0U3RhcnQgYW5kIHNldEVu
ZCB0byBQYXNzUmVmUHRyLiBSZW1vdmVkIGlzRGV0YWNoZWQgZnVuY3Rpb24uCisgICAgICAgIE1h
ZGUgQWN0aW9uVHlwZSBhbmQgcHJvY2Vzc0NvbnRlbnRzIHByaXZhdGUuIE1hZGUgc3RhcnRQb3Np
dGlvbiBhbmQKKyAgICAgICAgZW5kUG9zaXRpb24gaW5saW5lcyBhbmQgaGF2ZSB0aGVuIHJldHVy
biBjb25zdCYuIFJlbmFtZWQgc3RhcnROb2RlIGFuZAorICAgICAgICBwYXN0RW5kTm9kZSB0byBm
aXJzdE5vZGUgYW5kIHBhc3RMYXN0Tm9kZSB0byByZWR1Y2UgdGhlIGNoYW5jZSBvZgorICAgICAg
ICBjb25mdXNpb24gd2l0aCBzdGFydENvbnRhaW5lci9lbmRDb250YWluZXIuIFVzZWQgUG9zaXRp
b24gZm9yIG1fc3RhcnQKKyAgICAgICAgYW5kIG1fZW5kIGluc3RlYWQgb2Ygc2VwYXJhdGUgY29u
dGFpbmVyIGFuZCBvZmZzZXQgbWVtYmVycy4gQ2hhbmdlZAorICAgICAgICBtYXhTdGFydE9mZnNl
dCBhbmQgbWF4RW5kT2Zmc2V0IGludG8gaW50IHRvIG1hdGNoIG90aGVyIG9mZnNldHMuCisKKyAg
ICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUpOiBDaGFuZ2VkIHRvIHVzZSBSYW5n
ZTo6Y3JlYXRlLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5s
aW5lU3R5bGUpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnB1dFRleHQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFy
YWdyYXBocyk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBh
cmFncmFwaHMpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24pOiBDaGFuZ2VkIGZvciBwYXN0TGFz
dE5vZGUgbmFtZSBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0
aW9uKTogQ2hhbmdlZCB0byB1c2UgUmFuZ2U6OmNyZWF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OnBh
cmFncmFwaEFsaWduZWRSYW5nZUZvclJhbmdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpt
YXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKTogQ2hhbmdlZCB0byBnZXQgcmlkIG9mIGNoZWNr
IGZvcgorICAgICAgICBpc0RldGFjaGVkIGFuZCBjaGVjayBmb3IgMCBmcm9tIHN0YXJ0Q29udGFp
bmVyIGluc3RlYWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvbXBvc2l0aW9uUmFuZ2Up
OiBDaGFuZ2VkIHRvIHVzZSBSYW5nZTo6Y3JlYXRlLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9y
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1bmlvbkRPTVJhbmdlcyk6IERpdHRvLgor
ICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dGlvbjo6dG9SYW5nZSk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKTogQ2hhbmdl
ZCBmb3IgZmlyc3ROb2RlIGFuZCBwYXN0TGFzdE5vZGUKKyAgICAgICAgbmFtZSBjaGFuZ2UuCisg
ICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnJhbmdlKTogQ2hhbmdlZCB0byB1c2UgUmFu
Z2U6OmNyZWF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRl
cmF0b3I6OnJhbmdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnN1
YnJhbmdlKTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVJhbmdlKTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9W
aXNpYmxlUG9zaXRpb24uaDogQWRkZWQgbm93LW5lZWRlZCBpbmNsdWRlLgorICAgICAgICAqIGVk
aXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5kZXhGb3JWaXNpYmxl
UG9zaXRpb24pOiBDaGFuZ2VkIHRvIHVzZSBSYW5nZTo6Y3JlYXRlLgorICAgICAgICAoV2ViQ29y
ZTo6YXZvaWRJbnRlcnNlY3Rpb25XaXRoTm9kZSk6IENoYW5nZWQgdG8gZ2V0IHJpZCBvZiBjaGVj
ayBmb3IKKyAgICAgICAgaXNEZXRhY2hlZCBhbmQgY2hlY2sgZm9yIDAgaW5zdGVhZCBhbmQgdG8g
dXNlIFJhbmdlOjpjcmVhdGUuCisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cmVuZGVyZWRUZXh0KTogQ2hhbmdlZCB0byB1c2UgUmFuZ2U6OmNyZWF0ZS4K
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1hcmt1cCk6IENoYW5nZWQgdG8gbm8gbG9uZ2VyIHVz
ZSBpc0RldGFjaGVkIGFuZCBhbHNvCisgICAgICAgIGZvciBuZXcgZmlyc3ROb2RlL3Bhc3RFbmRO
b2RlIG5hbWVzLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRGcm9tVGV4dCk6IERp
dHRvLgorICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpwcmV2aW91c0JvdW5kYXJ5KTogQ2hhbmdlZCB0byB1c2UgUmFuZ2U6OmNyZWF0ZS4KKyAg
ICAgICAgKiBwYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW06CisgICAgICAgICgtW1dlYkNv
cmVGcmFtZUJyaWRnZSBjb252ZXJ0VG9OU1JhbmdlOl0pOiBDaGFuZ2VkIHRvIG5vIGxvbmdlciB1
c2UKKyAgICAgICAgaXNEZXRhY2hlZCgpLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6dmlzaWJs
ZVBvc2l0aW9uRm9ySW5kZXgpOiBDaGFuZ2VkIHRvIHVzZSBSYW5nZTo6Y3JlYXRlLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKTog
RGl0dG8uCisKIDIwMDgtMDMtMDkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZTogVGhpcmQgdHJ5IGF0IGZpeGluZyB0aGUgYnVp
bGQuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lvbiAzMDkxNCkKKysrIFdlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtNDExLDcgKzQxMSw3IEBAIF9fWk43V2ViQ29yZTVG
cmFtZUMxRVBOU180UGFnZUVQTlNfMjFIVE0KIF9fWk43V2ViQ29yZTVJbWFnZTEwZ2V0TlNJbWFn
ZUV2CiBfX1pON1dlYkNvcmU1SW1hZ2UyMGxvYWRQbGF0Zm9ybVJlc291cmNlRVBLYwogX19aTjdX
ZWJDb3JlNUltYWdlMjFnZXRUSUZGUmVwcmVzZW50YXRpb25FdgotX19aTjdXZWJDb3JlNVJhbmdl
QzFFUE5TXzhEb2N1bWVudEVQTlNfNE5vZGVFaVM0X2kKK19fWk43V2ViQ29yZTVSYW5nZTZjcmVh
dGVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOERvY3VtZW50RUVFTlMyX0lOU180Tm9kZUVFRWlTNl9p
CiBfX1pON1dlYkNvcmU1UmFuZ2VEMUV2CiBfX1pON1dlYkNvcmU1Y2FjaGVFdgogX19aTjdXZWJD
b3JlNWVxdWFsRVBOU18xMFN0cmluZ0ltcGxFUEtjCkBAIC02NzQsMTIgKzY3NCwxMiBAQCBfX1pO
SzdXZWJDb3JlNUZyYW1lNmVkaXRvckV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lNmxvYWRlckV2CiBf
X1pOSzdXZWJDb3JlNUZyYW1lOGRvY3VtZW50RXYKIF9fWk5LN1dlYkNvcmU1RnJhbWU4c2V0dGlu
Z3NFdgotX19aTks3V2ViQ29yZTVSYW5nZTExcGFzdEVuZE5vZGVFdgogX19aTks3V2ViQ29yZTVS
YW5nZTExc3RhcnRPZmZzZXRFUmkKIF9fWk5LN1dlYkNvcmU1UmFuZ2UxMmVuZENvbnRhaW5lckVS
aQorX19aTks3V2ViQ29yZTVSYW5nZTEycGFzdExhc3ROb2RlRXYKIF9fWk5LN1dlYkNvcmU1UmFu
Z2UxOWJvdW5kYXJ5UG9pbnRzVmFsaWRFdgogX19aTks3V2ViQ29yZTVSYW5nZTllbmRPZmZzZXRF
UmkKLV9fWk5LN1dlYkNvcmU1UmFuZ2U5c3RhcnROb2RlRXYKK19fWk5LN1dlYkNvcmU1UmFuZ2U5
Zmlyc3ROb2RlRXYKIF9fWk5LN1dlYkNvcmU2RWRpdG9yMTNjYW5FZGl0UmljaGx5RXYKIF9fWk5L
N1dlYkNvcmU2RWRpdG9yMTdzZWxlY3Rpb25IYXNTdHlsZUVQTlNfMTlDU1NTdHlsZURlY2xhcmF0
aW9uRQogX19aTks3V2ViQ29yZTZFZGl0b3IxN3Nob3VsZERlbGV0ZVJhbmdlRVBOU181UmFuZ2VF
CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAzMDkxNCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwOCw3ICsxMDA4LDcgQEAgU2V0dGluZ3MqIERvY3Vt
ZW50OjpzZXR0aW5ncygpIGNvbnN0CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IERvY3VtZW50OjpjcmVh
dGVSYW5nZSgpCiB7Ci0gICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzKTsKKyAgICByZXR1cm4gUmFu
Z2U6OmNyZWF0ZSh0aGlzKTsKIH0KIAogUGFzc1JlZlB0cjxOb2RlSXRlcmF0b3I+IERvY3VtZW50
OjpjcmVhdGVOb2RlSXRlcmF0b3IoTm9kZSogcm9vdCwgdW5zaWduZWQgd2hhdFRvU2hvdywgCkBA
IC0yOTM0LDggKzI5MzQsOCBAQCB2b2lkIERvY3VtZW50OjpyZW1vdmVNYXJrZXJzKFJhbmdlKiBy
YW5nCiAgICAgTm9kZSogc3RhcnRDb250YWluZXIgPSByYW5nZS0+c3RhcnRDb250YWluZXIoZWMp
OwogICAgIE5vZGUqIGVuZENvbnRhaW5lciA9IHJhbmdlLT5lbmRDb250YWluZXIoZWMpOwogCi0g
ICAgTm9kZSogcGFzdEVuZE5vZGUgPSByYW5nZS0+cGFzdEVuZE5vZGUoKTsKLSAgICBmb3IgKE5v
ZGUqIG5vZGUgPSByYW5nZS0+c3RhcnROb2RlKCk7IG5vZGUgIT0gcGFzdEVuZE5vZGU7IG5vZGUg
PSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSBy
YW5nZS0+cGFzdExhc3ROb2RlKCk7CisgICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2UtPmZpcnN0
Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5v
ZGUoKSkgewogICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBub2RlID09IHN0YXJ0Q29udGFpbmVy
ID8gcmFuZ2UtPnN0YXJ0T2Zmc2V0KGVjKSA6IDA7CiAgICAgICAgIGludCBlbmRPZmZzZXQgPSBu
b2RlID09IGVuZENvbnRhaW5lciA/IHJhbmdlLT5lbmRPZmZzZXQoZWMpIDogSU5UX01BWDsKICAg
ICAgICAgaW50IGxlbmd0aCA9IGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0OwpJbmRleDogV2ViQ29y
ZS9kb20vUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNw
cAkocmV2aXNpb24gMzA5MTQpCisrKyBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDI0ICs3Myw2IEBAIHN0YXRpYyBOb2RlICpwcmV2aW91c1JlbmRlcmVkRWRp
dGFibGUoTm8KICAgICByZXR1cm4gMDsKIH0KIAotUG9zaXRpb246OlBvc2l0aW9uKE5vZGUqIG5v
ZGUsIGludCBvZmZzZXQpIAotICAgIDogbV9ub2RlKG5vZGUpCi0gICAgLCBtX29mZnNldChvZmZz
ZXQpIAotewotfQotCi1Qb3NpdGlvbjo6UG9zaXRpb24oY29uc3QgUG9zaXRpb25JdGVyYXRvciYg
aXQpCi0gICAgOiBtX25vZGUoaXQubV9wYXJlbnQpCi0gICAgLCBtX29mZnNldChpdC5tX2NoaWxk
ID8gaXQubV9jaGlsZC0+bm9kZUluZGV4KCkgOiAoaXQubV9wYXJlbnQtPmhhc0NoaWxkTm9kZXMo
KSA/IG1heERlZXBPZmZzZXQoaXQubV9wYXJlbnQpIDogaXQubV9vZmZzZXQpKQotewotfQotCi12
b2lkIFBvc2l0aW9uOjpjbGVhcigpCi17Ci0gICAgbV9ub2RlID0gMDsKLSAgICBtX29mZnNldCA9
IDA7Ci19Ci0KIEVsZW1lbnQqIFBvc2l0aW9uOjpkb2N1bWVudEVsZW1lbnQoKSBjb25zdAogewog
ICAgIGlmIChOb2RlKiBuID0gbm9kZSgpKQpAQCAtNzEyLDkgKzY5NCw5IEBAIHZvaWQgUG9zaXRp
b246OmZvcm1hdEZvckRlYnVnZ2VyKGNoYXIqIGIKICAgICBlbHNlIHsKICAgICAgICAgY2hhciBz
WzEwMjRdOwogICAgICAgICByZXN1bHQgKz0gIm9mZnNldCAiOwotICAgICAgICByZXN1bHQgKz0g
U3RyaW5nOjpudW1iZXIobV9vZmZzZXQpOworICAgICAgICByZXN1bHQgKz0gU3RyaW5nOjpudW1i
ZXIob2Zmc2V0KCkpOwogICAgICAgICByZXN1bHQgKz0gIiBvZiAiOwotICAgICAgICBtX25vZGUt
PmZvcm1hdEZvckRlYnVnZ2VyKHMsIHNpemVvZihzKSk7CisgICAgICAgIG5vZGUoKS0+Zm9ybWF0
Rm9yRGVidWdnZXIocywgc2l6ZW9mKHMpKTsKICAgICAgICAgcmVzdWx0ICs9IHM7CiAgICAgfQog
ICAgICAgICAgIApAQCAtNzIzLDI2ICs3MDUsMjAgQEAgdm9pZCBQb3NpdGlvbjo6Zm9ybWF0Rm9y
RGVidWdnZXIoY2hhciogYgogCiB2b2lkIFBvc2l0aW9uOjpzaG93VHJlZUZvclRoaXMoKSBjb25z
dAogewotICAgIGlmIChtX25vZGUpCi0gICAgICAgIG1fbm9kZS0+c2hvd1RyZWVGb3JUaGlzKCk7
CisgICAgaWYgKG5vZGUoKSkKKyAgICAgICAgbm9kZSgpLT5zaG93VHJlZUZvclRoaXMoKTsKIH0K
IAogI2VuZGlmCiAKLVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24oY29uc3QgUmFuZ2UgKnIpCitQb3Np
dGlvbiBzdGFydFBvc2l0aW9uKGNvbnN0IFJhbmdlKiByKQogewotICAgIGlmICghciB8fCByLT5p
c0RldGFjaGVkKCkpCi0gICAgICAgIHJldHVybiBQb3NpdGlvbigpOwotICAgIEV4Y2VwdGlvbkNv
ZGUgZWM7Ci0gICAgcmV0dXJuIFBvc2l0aW9uKHItPnN0YXJ0Q29udGFpbmVyKGVjKSwgci0+c3Rh
cnRPZmZzZXQoZWMpKTsKKyAgICByZXR1cm4gciA/IHItPnN0YXJ0UG9zaXRpb24oKSA6IFBvc2l0
aW9uKCk7CiB9CiAKLVBvc2l0aW9uIGVuZFBvc2l0aW9uKGNvbnN0IFJhbmdlICpyKQorUG9zaXRp
b24gZW5kUG9zaXRpb24oY29uc3QgUmFuZ2UqIHIpCiB7Ci0gICAgaWYgKCFyIHx8IHItPmlzRGV0
YWNoZWQoKSkKLSAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7Ci0gICAgRXhjZXB0aW9uQ29kZSBl
YzsKLSAgICByZXR1cm4gUG9zaXRpb24oci0+ZW5kQ29udGFpbmVyKGVjKSwgci0+ZW5kT2Zmc2V0
KGVjKSk7CisgICAgcmV0dXJuIHIgPyByLT5lbmRQb3NpdGlvbigpIDogUG9zaXRpb24oKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vUG9zaXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCShyZXZpc2lvbiAzMDkxNCkKKysr
IFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjYsMzMgKzI2LDQwIEBACiAjaWZuZGVmIFBvc2l0aW9uX2gKICNkZWZpbmUgUG9zaXRp
b25faAogCi0jaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlRleHRBZmZpbml0eS5oIgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjsKIGNs
YXNzIEVsZW1lbnQ7Ci1jbGFzcyBQb3NpdGlvbkl0ZXJhdG9yOworY2xhc3MgTm9kZTsKIGNsYXNz
IFJhbmdlOworY2xhc3MgUmVuZGVyT2JqZWN0OwogCiBlbnVtIEVVc2luZ0NvbXBvc2VkQ2hhcmFj
dGVycyB7IE5vdFVzaW5nQ29tcG9zZWRDaGFyYWN0ZXJzID0gZmFsc2UsIFVzaW5nQ29tcG9zZWRD
aGFyYWN0ZXJzID0gdHJ1ZSB9OwogCi1jbGFzcyBQb3NpdGlvbgoteworLy8gRklYTUU6IFJlZHVj
ZSB0aGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgd2UgaGF2ZSBvbiBhIFBvc2l0aW9uLgorLy8gVGhp
cyBzaG91bGQgYmUgbW9yZSBsaWtlIGEgaHVtYmxlIHN0cnVjdCwgd2l0aG91dCBzbyBtYW55IGRp
ZmZlcmVudAorLy8gbWVtYmVyIGZ1bmN0aW9ucy4gV2Ugc2hvdWxkIGZpbmQgYmV0dGVyIGhvbWVz
IGZvciB0aGVzZSBmdW5jdGlvbnMuCisKK2NsYXNzIFBvc2l0aW9uIHsKIHB1YmxpYzoKLSAgICBQ
b3NpdGlvbigpIDogbV9ub2RlKDApLCBtX29mZnNldCgwKSB7IH0KLSAgICBQb3NpdGlvbihOb2Rl
KiwgaW50IG9mZnNldCk7Ci0gICAgUG9zaXRpb24oY29uc3QgUG9zaXRpb25JdGVyYXRvciYpOwor
ICAgIFJlZlB0cjxOb2RlPiBjb250YWluZXI7CisgICAgaW50IHBvc09mZnNldDsgLy8gdG8gYmUg
cmVuYW1lZCB0byBvZmZzZXQgd2hlbiB3ZSBnZXQgcmlkIG9mIG9mZnNldCgpCisKKyAgICBQb3Np
dGlvbigpIDogcG9zT2Zmc2V0KDApIHsgfQorICAgIFBvc2l0aW9uKFBhc3NSZWZQdHI8Tm9kZT4g
YywgaW50IG8pIDogY29udGFpbmVyKGMpLCBwb3NPZmZzZXQobykgeyB9CiAKLSAgICB2b2lkIGNs
ZWFyKCk7CisgICAgdm9pZCBjbGVhcigpIHsgY29udGFpbmVyLmNsZWFyKCk7IHBvc09mZnNldCA9
IDA7IH0KIAotICAgIE5vZGUgKm5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0K
KyAgICBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gY29udGFpbmVyLmdldCgpOyB9CisgICAg
aW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHBvc09mZnNldDsgfQogICAgIEVsZW1lbnQqIGRv
Y3VtZW50RWxlbWVudCgpIGNvbnN0OwotICAgIGludCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X29mZnNldDsgfQogCi0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX25vZGUgPT0g
MDsgfQotICAgIGJvb2wgaXNOb3ROdWxsKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlICE9IDA7IH0K
KyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFjb250YWluZXI7IH0KKyAgICBib29s
IGlzTm90TnVsbCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5lcjsgfQogCiAgICAgRWxlbWVudCog
ZWxlbWVudCgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uPiBjb21wdXRlZFN0eWxlKCkgY29uc3Q7CkBAIC04MCw3ICs4Nyw3IEBAIHB1YmxpYzoKICAg
ICBib29sIGlzQ2FuZGlkYXRlKCkgY29uc3Q7CiAgICAgYm9vbCBpblJlbmRlcmVkVGV4dCgpIGNv
bnN0OwogICAgIGJvb2wgaXNSZW5kZXJlZENoYXJhY3RlcigpIGNvbnN0OwotICAgIGJvb2wgcmVu
ZGVyc0luRGlmZmVyZW50UG9zaXRpb24oY29uc3QgUG9zaXRpb24gJnBvcykgY29uc3Q7CisgICAg
Ym9vbCByZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYpIGNvbnN0Owog
ICAgIAogICAgIHN0YXRpYyBib29sIGhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNX
aXRoSGVpZ2h0KFJlbmRlck9iamVjdCopOwogICAgIHN0YXRpYyBib29sIG5vZGVJc1VzZXJTZWxl
Y3ROb25lKE5vZGUqKTsKQEAgLTk3LDE2ICsxMDQsMTQgQEAgcHJpdmF0ZToKIAogICAgIFBvc2l0
aW9uIHByZXZpb3VzQ2hhcmFjdGVyUG9zaXRpb24oRUFmZmluaXR5KSBjb25zdDsKICAgICBQb3Np
dGlvbiBuZXh0Q2hhcmFjdGVyUG9zaXRpb24oRUFmZmluaXR5KSBjb25zdDsKLSAgICBSZWZQdHI8
Tm9kZT4gbV9ub2RlOwotICAgIGludCBtX29mZnNldDsKIH07CiAKLWlubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgUG9zaXRpb24gJmEsIGNvbnN0IFBvc2l0aW9uICZiKQoraW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBQb3NpdGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCiB7Ci0gICAg
cmV0dXJuIGEubm9kZSgpID09IGIubm9kZSgpICYmIGEub2Zmc2V0KCkgPT0gYi5vZmZzZXQoKTsK
KyAgICByZXR1cm4gYS5jb250YWluZXIgPT0gYi5jb250YWluZXIgJiYgYS5wb3NPZmZzZXQgPT0g
Yi5wb3NPZmZzZXQ7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUG9zaXRpb24g
JmEsIGNvbnN0IFBvc2l0aW9uICZiKQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQb3Np
dGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCiB7CiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0K
SW5kZXg6IFdlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAzMDkxNCkKKysrIFdlYkNv
cmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsMTEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCitQ
b3NpdGlvbkl0ZXJhdG9yOjpvcGVyYXRvciBQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFBvc2l0aW9uKG1fcGFyZW50LCBtX2NoaWxkID8gbV9jaGlsZC0+bm9kZUluZGV4KCkgOiAobV9w
YXJlbnQtPmhhc0NoaWxkTm9kZXMoKSA/IG1heERlZXBPZmZzZXQobV9wYXJlbnQpIDogbV9vZmZz
ZXQpKTsKK30KKwogdm9pZCBQb3NpdGlvbkl0ZXJhdG9yOjppbmNyZW1lbnQoKQogewogICAgIGlm
ICghbV9wYXJlbnQpCkluZGV4OiBXZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5oCShyZXZpc2lvbiAzMDkxNCkK
KysrIFdlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYg
KzI2LDcgQEAKICNpZm5kZWYgUG9zaXRpb25JdGVyYXRvcl9oCiAjZGVmaW5lIFBvc2l0aW9uSXRl
cmF0b3JfaAogCisjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ4LDYgKzQ5LDcgQEAgcHVibGljOgogICAgICAgICAsIG1f
b2Zmc2V0KG1fY2hpbGQgPyAwIDogcG9zLm9mZnNldCgpKQogICAgIHsKICAgICB9CisgICAgb3Bl
cmF0b3IgUG9zaXRpb24oKSBjb25zdDsKIAogICAgIHZvaWQgaW5jcmVtZW50KCk7CiAgICAgdm9p
ZCBkZWNyZW1lbnQoKTsKQEAgLTYyLDcgKzY0LDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNDYW5k
aWRhdGUoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgUG9zaXRpb247CiAg
ICAgTm9kZSogbV9wYXJlbnQ7CiAgICAgTm9kZSogbV9jaGlsZDsKICAgICBpbnQgbV9vZmZzZXQ7
CkluZGV4OiBXZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
UmFuZ2UuY3BwCShyZXZpc2lvbiAzMDkxNCkKKysrIFdlYkNvcmUvZG9tL1JhbmdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw5ICsxLDkgQEAKLS8qKgorLyoKICAqIChDKSAxOTk5IExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCiAgKiAoQykgMjAwMCBHdW5uc3RlaW4gTHllIChndW5uc3RlaW5A
bmV0Y29tLm5vKQogICogKEMpIDIwMDAgRnJlZGVyaWsgSG9sbGplbiAoZnJlZGVyaWsuaG9sbGpl
bkBoaWcubm8pCiAgKiAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM5
LDYgKzM5LDkgQEAKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCiAjaW5jbHVkZSA8c3RkaW8u
aD4KIAorLy8gRklYTUU6IFJlbW92ZSB0aGlzIGFmdGVyIHJlbW92aW5nIFBvc2l0aW9uOjpvZmZz
ZXQoKSBhbmQgcmVuYW1pbmcgUG9zaXRpb246OnBvc09mZnNldCB0byBvZmZzZXQuCisjZGVmaW5l
IG9mZnNldCBwb3NPZmZzZXQKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwpAQCAtNTgsMzQgKzYxLDMwIEBAIHVuc2lnbmVkIFJhbmdlQ291bnRlcjo6Y291bnQg
PSAwOwogc3RhdGljIFJhbmdlQ291bnRlciByYW5nZUNvdW50ZXI7CiAjZW5kaWYKIAotUmFuZ2U6
OlJhbmdlKERvY3VtZW50KiBvd25lckRvY3VtZW50KQotICAgIDogUmVmQ291bnRlZDxSYW5nZT4o
MCkKLSAgICAsIG1fb3duZXJEb2N1bWVudChvd25lckRvY3VtZW50KQotICAgICwgbV9zdGFydENv
bnRhaW5lcihvd25lckRvY3VtZW50KQotICAgICwgbV9zdGFydE9mZnNldCgwKQotICAgICwgbV9l
bmRDb250YWluZXIob3duZXJEb2N1bWVudCkKLSAgICAsIG1fZW5kT2Zmc2V0KDApCi0gICAgLCBt
X2RldGFjaGVkKGZhbHNlKQoraW5saW5lIFJhbmdlOjpSYW5nZShQYXNzUmVmUHRyPERvY3VtZW50
PiBvd25lckRvY3VtZW50KQorICAgIDogbV9vd25lckRvY3VtZW50KG93bmVyRG9jdW1lbnQpCisg
ICAgLCBtX3N0YXJ0KG1fb3duZXJEb2N1bWVudCwgMCkKKyAgICAsIG1fZW5kKG1fb3duZXJEb2N1
bWVudCwgMCkKIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgKytSYW5nZUNvdW50ZXI6OmNvdW50Owog
I2VuZGlmCiB9CiAKLVJhbmdlOjpSYW5nZShEb2N1bWVudCogb3duZXJEb2N1bWVudCwKLSAgICAg
ICAgICAgICAgTm9kZSogc3RhcnRDb250YWluZXIsIGludCBzdGFydE9mZnNldCwKLSAgICAgICAg
ICAgICAgTm9kZSogZW5kQ29udGFpbmVyLCBpbnQgZW5kT2Zmc2V0KQotICAgIDogUmVmQ291bnRl
ZDxSYW5nZT4oMCkKLSAgICAsIG1fb3duZXJEb2N1bWVudChvd25lckRvY3VtZW50KQotICAgICwg
bV9zdGFydENvbnRhaW5lcihvd25lckRvY3VtZW50KQotICAgICwgbV9zdGFydE9mZnNldCgwKQot
ICAgICwgbV9lbmRDb250YWluZXIob3duZXJEb2N1bWVudCkKLSAgICAsIG1fZW5kT2Zmc2V0KDAp
Ci0gICAgLCBtX2RldGFjaGVkKGZhbHNlKQorUGFzc1JlZlB0cjxSYW5nZT4gUmFuZ2U6OmNyZWF0
ZShQYXNzUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50KQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgUmFuZ2Uob3duZXJEb2N1bWVudCkpOworfQorCitpbmxpbmUgUmFuZ2U6OlJhbmdl
KFBhc3NSZWZQdHI8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQsIFBhc3NSZWZQdHI8Tm9kZT4gc3Rh
cnRDb250YWluZXIsIGludCBzdGFydE9mZnNldCwgUGFzc1JlZlB0cjxOb2RlPiBlbmRDb250YWlu
ZXIsIGludCBlbmRPZmZzZXQpCisgICAgOiBtX293bmVyRG9jdW1lbnQob3duZXJEb2N1bWVudCkK
KyAgICAsIG1fc3RhcnQobV9vd25lckRvY3VtZW50LCAwKQorICAgICwgbV9lbmQobV9vd25lckRv
Y3VtZW50LCAwKQogewogI2lmbmRlZiBOREVCVUcKICAgICArK1JhbmdlQ291bnRlcjo6Y291bnQ7
CiAjZW5kaWYKKwogICAgIC8vIFNpbXBseSBzZXR0aW5nIHRoZSBjb250YWluZXJzIGFuZCBvZmZz
ZXRzIGRpcmVjdGx5IHdvdWxkIG5vdCBkbyBhbnkgb2YgdGhlIGNoZWNraW5nCiAgICAgLy8gdGhh
dCBzZXRTdGFydCBhbmQgc2V0RW5kIGRvLCBzbyB3ZSBtdXN0IGNhbGwgdGhvc2UgZnVuY3Rpb25z
LgogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtOTUsMjUgKzk0LDE0IEBAIFJhbmdlOjpS
YW5nZShEb2N1bWVudCogb3duZXJEb2N1bWVudCwKICAgICBBU1NFUlQoZWMgPT0gMCk7CiB9CiAK
LVJhbmdlOjpSYW5nZShEb2N1bWVudCogb3duZXJEb2N1bWVudCwgY29uc3QgUG9zaXRpb24mIHN0
YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQotICAgIDogUmVmQ291bnRlZDxSYW5nZT4oMCkKLSAg
ICAsIG1fb3duZXJEb2N1bWVudChvd25lckRvY3VtZW50KQotICAgICwgbV9zdGFydENvbnRhaW5l
cihvd25lckRvY3VtZW50KQotICAgICwgbV9zdGFydE9mZnNldCgwKQotICAgICwgbV9lbmRDb250
YWluZXIob3duZXJEb2N1bWVudCkKLSAgICAsIG1fZW5kT2Zmc2V0KDApCi0gICAgLCBtX2RldGFj
aGVkKGZhbHNlKQorUGFzc1JlZlB0cjxSYW5nZT4gUmFuZ2U6OmNyZWF0ZShQYXNzUmVmUHRyPERv
Y3VtZW50PiBvd25lckRvY3VtZW50LCBQYXNzUmVmUHRyPE5vZGU+IHN0YXJ0Q29udGFpbmVyLCBp
bnQgc3RhcnRPZmZzZXQsIFBhc3NSZWZQdHI8Tm9kZT4gZW5kQ29udGFpbmVyLCBpbnQgZW5kT2Zm
c2V0KQogewotI2lmbmRlZiBOREVCVUcKLSAgICArK1JhbmdlQ291bnRlcjo6Y291bnQ7Ci0jZW5k
aWYKLSAgICAvLyBTaW1wbHkgc2V0dGluZyB0aGUgY29udGFpbmVycyBhbmQgb2Zmc2V0cyBkaXJl
Y3RseSB3b3VsZCBub3QgZG8gYW55IG9mIHRoZSBjaGVja2luZwotICAgIC8vIHRoYXQgc2V0U3Rh
cnQgYW5kIHNldEVuZCBkbywgc28gd2UgbXVzdCBjYWxsIHRob3NlIGZ1bmN0aW9ucy4KLSAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBzZXRTdGFydChzdGFydC5ub2RlKCksIHN0YXJ0Lm9m
ZnNldCgpLCBlYyk7Ci0gICAgQVNTRVJUKGVjID09IDApOwotICAgIHNldEVuZChlbmQubm9kZSgp
LCBlbmQub2Zmc2V0KCksIGVjKTsKLSAgICBBU1NFUlQoZWMgPT0gMCk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBSYW5nZShvd25lckRvY3VtZW50LCBzdGFydENvbnRhaW5lciwgc3RhcnRPZmZz
ZXQsIGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0KSk7Cit9CisKK1Bhc3NSZWZQdHI8UmFuZ2U+IFJh
bmdlOjpjcmVhdGUoUGFzc1JlZlB0cjxEb2N1bWVudD4gb3duZXJEb2N1bWVudCwgY29uc3QgUG9z
aXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUmFuZ2Uob3duZXJEb2N1bWVudCwgc3RhcnQuY29udGFpbmVyLmdldCgpLCBzdGFydC5v
ZmZzZXQsIGVuZC5jb250YWluZXIuZ2V0KCksIGVuZC5vZmZzZXQpKTsKIH0KIAogUmFuZ2U6On5S
YW5nZSgpCkBAIC0xMjMsODcgKzExMSw4MCBAQCBSYW5nZTo6flJhbmdlKCkKICNlbmRpZgogfQog
Ci1Ob2RlICpSYW5nZTo6c3RhcnRDb250YWluZXIoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitO
b2RlKiBSYW5nZTo6c3RhcnRDb250YWluZXIoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0g
ICAgaWYgKG1fZGV0YWNoZWQpIHsKKyAgICBpZiAoIW1fc3RhcnQuY29udGFpbmVyKSB7CiAgICAg
ICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAot
ICAgIHJldHVybiBtX3N0YXJ0Q29udGFpbmVyLmdldCgpOworICAgIHJldHVybiBtX3N0YXJ0LmNv
bnRhaW5lci5nZXQoKTsKIH0KIAogaW50IFJhbmdlOjpzdGFydE9mZnNldChFeGNlcHRpb25Db2Rl
JiBlYykgY29uc3QKIHsKLSAgICBpZiAobV9kZXRhY2hlZCkgeworICAgIGlmICghbV9zdGFydC5j
b250YWluZXIpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIG1fc3RhcnRPZmZzZXQ7CisgICAgcmV0dXJuIG1f
c3RhcnQub2Zmc2V0OwogfQogCi1Ob2RlICpSYW5nZTo6ZW5kQ29udGFpbmVyKEV4Y2VwdGlvbkNv
ZGUmIGVjKSBjb25zdAorTm9kZSogUmFuZ2U6OmVuZENvbnRhaW5lcihFeGNlcHRpb25Db2RlJiBl
YykgY29uc3QKIHsKLSAgICBpZiAobV9kZXRhY2hlZCkgeworICAgIGlmICghbV9zdGFydC5jb250
YWluZXIpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogCi0gICAgcmV0dXJuIG1fZW5kQ29udGFpbmVyLmdldCgpOworICAgIHJldHVy
biBtX2VuZC5jb250YWluZXIuZ2V0KCk7CiB9CiAKIGludCBSYW5nZTo6ZW5kT2Zmc2V0KEV4Y2Vw
dGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIGlmIChtX2RldGFjaGVkKSB7CisgICAgaWYgKCFt
X3N0YXJ0LmNvbnRhaW5lcikgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gbV9lbmRPZmZzZXQ7CisgICAgcmV0
dXJuIG1fZW5kLm9mZnNldDsKIH0KIAotTm9kZSAqUmFuZ2U6OmNvbW1vbkFuY2VzdG9yQ29udGFp
bmVyKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorTm9kZSogUmFuZ2U6OmNvbW1vbkFuY2VzdG9y
Q29udGFpbmVyKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIGlmIChtX2RldGFjaGVk
KSB7CisgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lcikgewogICAgICAgICBlYyA9IElOVkFMSURf
U1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBOb2RlICpjb20gPSBj
b21tb25BbmNlc3RvckNvbnRhaW5lcihtX3N0YXJ0Q29udGFpbmVyLmdldCgpLCBtX2VuZENvbnRh
aW5lci5nZXQoKSk7Ci0gICAgaWYgKCFjb20pIC8vICBzaG91bGQgbmV2ZXIgaGFwcGVuCi0gICAg
ICAgIGVjID0gV1JPTkdfRE9DVU1FTlRfRVJSOwotICAgIHJldHVybiBjb207CisgICAgcmV0dXJu
IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKG1fc3RhcnQuY29udGFpbmVyLmdldCgpLCBtX2VuZC5j
b250YWluZXIuZ2V0KCkpOwogfQogCi1Ob2RlICpSYW5nZTo6Y29tbW9uQW5jZXN0b3JDb250YWlu
ZXIoTm9kZSAqY29udGFpbmVyQSwgTm9kZSAqY29udGFpbmVyQikKK05vZGUqIFJhbmdlOjpjb21t
b25BbmNlc3RvckNvbnRhaW5lcihOb2RlKiBjb250YWluZXJBLCBOb2RlKiBjb250YWluZXJCKQog
ewotICAgIE5vZGUgKnBhcmVudFN0YXJ0OwotCi0gICAgZm9yIChwYXJlbnRTdGFydCA9IGNvbnRh
aW5lckE7IHBhcmVudFN0YXJ0OyBwYXJlbnRTdGFydCA9IHBhcmVudFN0YXJ0LT5wYXJlbnROb2Rl
KCkpIHsKLSAgICAgICAgTm9kZSAqcGFyZW50RW5kID0gY29udGFpbmVyQjsKLSAgICAgICAgd2hp
bGUgKHBhcmVudEVuZCAmJiAocGFyZW50U3RhcnQgIT0gcGFyZW50RW5kKSkKLSAgICAgICAgICAg
IHBhcmVudEVuZCA9IHBhcmVudEVuZC0+cGFyZW50Tm9kZSgpOwotICAgICAgICBpZiAocGFyZW50
U3RhcnQgPT0gcGFyZW50RW5kKQotICAgICAgICAgICAgYnJlYWs7CisgICAgZm9yIChOb2RlKiBw
YXJlbnRBID0gY29udGFpbmVyQTsgcGFyZW50QTsgcGFyZW50QSA9IHBhcmVudEEtPnBhcmVudE5v
ZGUoKSkgeworICAgICAgICBmb3IgKE5vZGUqIHBhcmVudEIgPSBjb250YWluZXJCOyBwYXJlbnRC
OyBwYXJlbnRCID0gcGFyZW50Qi0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBpZiAocGFy
ZW50QSA9PSBwYXJlbnRCKQorICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnRBOworICAgICAg
ICB9CiAgICAgfQotICAgICAgICAKLSAgICByZXR1cm4gcGFyZW50U3RhcnQ7CisgICAgcmV0dXJu
IDA7CiB9CiAKIGJvb2wgUmFuZ2U6OmNvbGxhcHNlZChFeGNlcHRpb25Db2RlJiBlYykgY29uc3QK
IHsKLSAgICBpZiAobV9kZXRhY2hlZCkgeworICAgIGlmICghbV9zdGFydC5jb250YWluZXIpIHsK
ICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogCi0gICAgcmV0dXJuIChtX3N0YXJ0Q29udGFpbmVyID09IG1fZW5kQ29udGFpbmVyICYmIG1f
c3RhcnRPZmZzZXQgPT0gbV9lbmRPZmZzZXQpOworICAgIHJldHVybiBtX3N0YXJ0LmNvbnRhaW5l
ciA9PSBtX2VuZC5jb250YWluZXIgJiYgbV9zdGFydC5vZmZzZXQgPT0gbV9lbmQub2Zmc2V0Owog
fQogCi12b2lkIFJhbmdlOjpzZXRTdGFydCggTm9kZSAqcmVmTm9kZSwgaW50IG9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit2b2lkIFJhbmdlOjpzZXRTdGFydChQYXNzUmVmUHRyPE5vZGU+IHJl
Zk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmIChtX2RldGFj
aGVkKSB7CisgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lcikgewogICAgICAgICBlYyA9IElOVkFM
SURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjE5LDMwICsyMDAsMzAg
QEAgdm9pZCBSYW5nZTo6c2V0U3RhcnQoIE5vZGUgKnJlZk5vZGUsIGludAogICAgIH0KIAogICAg
IGVjID0gMDsKLSAgICBjaGVja05vZGVXT2Zmc2V0KHJlZk5vZGUsIG9mZnNldCwgZWMpOworICAg
IGNoZWNrTm9kZVdPZmZzZXQocmVmTm9kZS5nZXQoKSwgb2Zmc2V0LCBlYyk7CiAgICAgaWYgKGVj
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3N0YXJ0Q29udGFpbmVyID0gcmVmTm9kZTsKLSAg
ICBtX3N0YXJ0T2Zmc2V0ID0gb2Zmc2V0OworICAgIG1fc3RhcnQuY29udGFpbmVyID0gcmVmTm9k
ZTsKKyAgICBtX3N0YXJ0Lm9mZnNldCA9IG9mZnNldDsKIAogICAgIC8vIGNoZWNrIGlmIGRpZmZl
cmVudCByb290IGNvbnRhaW5lcgotICAgIE5vZGUqIGVuZFJvb3RDb250YWluZXIgPSBtX2VuZENv
bnRhaW5lci5nZXQoKTsKKyAgICBOb2RlKiBlbmRSb290Q29udGFpbmVyID0gbV9lbmQuY29udGFp
bmVyLmdldCgpOwogICAgIHdoaWxlIChlbmRSb290Q29udGFpbmVyLT5wYXJlbnROb2RlKCkpCiAg
ICAgICAgIGVuZFJvb3RDb250YWluZXIgPSBlbmRSb290Q29udGFpbmVyLT5wYXJlbnROb2RlKCk7
Ci0gICAgTm9kZSogc3RhcnRSb290Q29udGFpbmVyID0gbV9zdGFydENvbnRhaW5lci5nZXQoKTsK
KyAgICBOb2RlKiBzdGFydFJvb3RDb250YWluZXIgPSBtX3N0YXJ0LmNvbnRhaW5lci5nZXQoKTsK
ICAgICB3aGlsZSAoc3RhcnRSb290Q29udGFpbmVyLT5wYXJlbnROb2RlKCkpCiAgICAgICAgIHN0
YXJ0Um9vdENvbnRhaW5lciA9IHN0YXJ0Um9vdENvbnRhaW5lci0+cGFyZW50Tm9kZSgpOwogICAg
IGlmIChzdGFydFJvb3RDb250YWluZXIgIT0gZW5kUm9vdENvbnRhaW5lcikKICAgICAgICAgY29s
bGFwc2UodHJ1ZSwgZWMpOwogICAgIC8vIGNoZWNrIGlmIG5ldyBzdGFydCBhZnRlciBlbmQKLSAg
ICBlbHNlIGlmIChjb21wYXJlQm91bmRhcnlQb2ludHMobV9zdGFydENvbnRhaW5lci5nZXQoKSwg
bV9zdGFydE9mZnNldCwgbV9lbmRDb250YWluZXIuZ2V0KCksIG1fZW5kT2Zmc2V0KSA+IDApCisg
ICAgZWxzZSBpZiAoY29tcGFyZUJvdW5kYXJ5UG9pbnRzKG1fc3RhcnQuY29udGFpbmVyLmdldCgp
LCBtX3N0YXJ0Lm9mZnNldCwgbV9lbmQuY29udGFpbmVyLmdldCgpLCBtX2VuZC5vZmZzZXQpID4g
MCkKICAgICAgICAgY29sbGFwc2UodHJ1ZSwgZWMpOwogfQogCi12b2lkIFJhbmdlOjpzZXRFbmQo
IE5vZGUgKnJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBSYW5n
ZTo6c2V0RW5kKFBhc3NSZWZQdHI8Tm9kZT4gcmVmTm9kZSwgaW50IG9mZnNldCwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7Ci0gICAgaWYgKG1fZGV0YWNoZWQpIHsKKyAgICBpZiAoIW1fc3RhcnQuY29u
dGFpbmVyKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0yNTgsNDEgKzIzOSwzOCBAQCB2b2lkIFJhbmdlOjpzZXRFbmQoIE5vZGUg
KnJlZk5vZGUsIGludCBvCiAgICAgfQogCiAgICAgZWMgPSAwOwotICAgIGNoZWNrTm9kZVdPZmZz
ZXQocmVmTm9kZSwgb2Zmc2V0LCBlYyk7CisgICAgY2hlY2tOb2RlV09mZnNldChyZWZOb2RlLmdl
dCgpLCBvZmZzZXQsIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
ZW5kQ29udGFpbmVyID0gcmVmTm9kZTsKLSAgICBtX2VuZE9mZnNldCA9IG9mZnNldDsKKyAgICBt
X2VuZC5jb250YWluZXIgPSByZWZOb2RlOworICAgIG1fZW5kLm9mZnNldCA9IG9mZnNldDsKIAog
ICAgIC8vIGNoZWNrIGlmIGRpZmZlcmVudCByb290IGNvbnRhaW5lcgotICAgIE5vZGUqIGVuZFJv
b3RDb250YWluZXIgPSBtX2VuZENvbnRhaW5lci5nZXQoKTsKKyAgICBOb2RlKiBlbmRSb290Q29u
dGFpbmVyID0gbV9lbmQuY29udGFpbmVyLmdldCgpOwogICAgIHdoaWxlIChlbmRSb290Q29udGFp
bmVyLT5wYXJlbnROb2RlKCkpCiAgICAgICAgIGVuZFJvb3RDb250YWluZXIgPSBlbmRSb290Q29u
dGFpbmVyLT5wYXJlbnROb2RlKCk7Ci0gICAgTm9kZSogc3RhcnRSb290Q29udGFpbmVyID0gbV9z
dGFydENvbnRhaW5lci5nZXQoKTsKKyAgICBOb2RlKiBzdGFydFJvb3RDb250YWluZXIgPSBtX3N0
YXJ0LmNvbnRhaW5lci5nZXQoKTsKICAgICB3aGlsZSAoc3RhcnRSb290Q29udGFpbmVyLT5wYXJl
bnROb2RlKCkpCiAgICAgICAgIHN0YXJ0Um9vdENvbnRhaW5lciA9IHN0YXJ0Um9vdENvbnRhaW5l
ci0+cGFyZW50Tm9kZSgpOwogICAgIGlmIChzdGFydFJvb3RDb250YWluZXIgIT0gZW5kUm9vdENv
bnRhaW5lcikKICAgICAgICAgY29sbGFwc2UoZmFsc2UsIGVjKTsKICAgICAvLyBjaGVjayBpZiBu
ZXcgZW5kIGJlZm9yZSBzdGFydAotICAgIGlmIChjb21wYXJlQm91bmRhcnlQb2ludHMobV9zdGFy
dENvbnRhaW5lci5nZXQoKSwgbV9zdGFydE9mZnNldCwgbV9lbmRDb250YWluZXIuZ2V0KCksIG1f
ZW5kT2Zmc2V0KSA+IDApCisgICAgaWYgKGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0LmNv
bnRhaW5lci5nZXQoKSwgbV9zdGFydC5vZmZzZXQsIG1fZW5kLmNvbnRhaW5lci5nZXQoKSwgbV9l
bmQub2Zmc2V0KSA+IDApCiAgICAgICAgIGNvbGxhcHNlKGZhbHNlLCBlYyk7CiB9CiAKLXZvaWQg
UmFuZ2U6OmNvbGxhcHNlKCBib29sIHRvU3RhcnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBS
YW5nZTo6Y29sbGFwc2UoYm9vbCB0b1N0YXJ0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBp
ZiAobV9kZXRhY2hlZCkgeworICAgIGlmICghbV9zdGFydC5jb250YWluZXIpIHsKICAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
ICh0b1N0YXJ0KSB7ICAvLyBjb2xsYXBzZSB0byBzdGFydAotICAgICAgICBtX2VuZENvbnRhaW5l
ciA9IG1fc3RhcnRDb250YWluZXI7Ci0gICAgICAgIG1fZW5kT2Zmc2V0ID0gbV9zdGFydE9mZnNl
dDsKLSAgICB9IGVsc2UgeyAgICAgICAgLy8gY29sbGFwc2UgdG8gZW5kCi0gICAgICAgIG1fc3Rh
cnRDb250YWluZXIgPSBtX2VuZENvbnRhaW5lcjsKLSAgICAgICAgbV9zdGFydE9mZnNldCA9IG1f
ZW5kT2Zmc2V0OwotICAgIH0KKyAgICBpZiAodG9TdGFydCkKKyAgICAgICAgbV9lbmQgPSBtX3N0
YXJ0OworICAgIGVsc2UKKyAgICAgICAgbV9zdGFydCA9IG1fZW5kOwogfQogCiBib29sIFJhbmdl
Ojppc1BvaW50SW5SYW5nZShOb2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2Rl
JiBlYykKQEAgLTMwMiwxMyArMjgwLDEzIEBAIGJvb2wgUmFuZ2U6OmlzUG9pbnRJblJhbmdlKE5v
ZGUqIHJlZk5vZGUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmIChtX2Rl
dGFjaGVkICYmIHJlZk5vZGUtPmF0dGFjaGVkKCkpIHsKKyAgICBpZiAoIW1fc3RhcnQuY29udGFp
bmVyICYmIHJlZk5vZGUtPmF0dGFjaGVkKCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRF
X0VSUjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICghbV9kZXRhY2hl
ZCAmJiAhcmVmTm9kZS0+YXR0YWNoZWQoKSkgewotICAgICAgICAvLyBmaXJlZm94IGRvZXNuJ3Qg
dGhyb3cgYW4gZXhjZXB0aW9uIGZvciB0aGlzIGNhc2U7IGl0IHJldHVybnMgZmFsc2UKKyAgICBp
ZiAobV9zdGFydC5jb250YWluZXIgJiYgIXJlZk5vZGUtPmF0dGFjaGVkKCkpIHsKKyAgICAgICAg
Ly8gRmlyZWZveCBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBjYXNlOyBpdCBy
ZXR1cm5zIGZhbHNlLgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0zMjMsOCAr
MzAxLDggQEAgYm9vbCBSYW5nZTo6aXNQb2ludEluUmFuZ2UoTm9kZSogcmVmTm9kZQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBwb2ludCBpcyBub3QgYmVmb3JlIHRoZSBzdGFydCBh
bmQgbm90IGFmdGVyIHRoZSBlbmQKLSAgICBpZiAoKGNvbXBhcmVCb3VuZGFyeVBvaW50cyhyZWZO
b2RlLCBvZmZzZXQsIG1fc3RhcnRDb250YWluZXIuZ2V0KCksIG1fc3RhcnRPZmZzZXQpICE9IC0x
KSAmJiAKLSAgICAgICAgKGNvbXBhcmVCb3VuZGFyeVBvaW50cyhyZWZOb2RlLCBvZmZzZXQsIG1f
ZW5kQ29udGFpbmVyLmdldCgpLCBtX2VuZE9mZnNldCkgIT0gMSkpCisgICAgaWYgKChjb21wYXJl
Qm91bmRhcnlQb2ludHMocmVmTm9kZSwgb2Zmc2V0LCBtX3N0YXJ0LmNvbnRhaW5lci5nZXQoKSwg
bV9zdGFydC5vZmZzZXQpICE9IC0xKSAmJiAKKyAgICAgICAgKGNvbXBhcmVCb3VuZGFyeVBvaW50
cyhyZWZOb2RlLCBvZmZzZXQsIG1fZW5kLmNvbnRhaW5lci5nZXQoKSwgbV9lbmQub2Zmc2V0KSAh
PSAxKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0zNDEsMTMgKzMxOSwxMyBAQCBzaG9ydCBSYW5nZTo6Y29tcGFyZVBvaW50KE5vZGUq
IHJlZk5vZGUsCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGlmIChtX2RldGFjaGVk
ICYmIHJlZk5vZGUtPmF0dGFjaGVkKCkpIHsKKyAgICBpZiAoIW1fc3RhcnQuY29udGFpbmVyICYm
IHJlZk5vZGUtPmF0dGFjaGVkKCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaWYgKCFtX2RldGFjaGVkICYmICFyZWZO
b2RlLT5hdHRhY2hlZCgpKSB7Ci0gICAgICAgIC8vIGZpcmVmb3ggZG9lc24ndCB0aHJvdyBhbiBl
eGNlcHRpb24gZm9yIHRoaXMgY2FzZTsgaXQgcmV0dXJucyAtMQorICAgIGlmIChtX3N0YXJ0LmNv
bnRhaW5lciAmJiAhcmVmTm9kZS0+YXR0YWNoZWQoKSkgeworICAgICAgICAvLyBGaXJlZm94IGRv
ZXNuJ3QgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciB0aGlzIGNhc2U7IGl0IHJldHVybnMgLTEuCiAg
ICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTM2MiwxMSArMzQwLDExIEBAIHNob3J0IFJh
bmdlOjpjb21wYXJlUG9pbnQoTm9kZSogcmVmTm9kZSwKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICAvLyBjb21wYXJlIHRvIHN0YXJ0LCBhbmQgcG9pbnQgY29tZXMgYmVmb3JlCi0gICAgaWYgKGNv
bXBhcmVCb3VuZGFyeVBvaW50cyhyZWZOb2RlLCBvZmZzZXQsIG1fc3RhcnRDb250YWluZXIuZ2V0
KCksIG1fc3RhcnRPZmZzZXQpID09IC0xKQorICAgIGlmIChjb21wYXJlQm91bmRhcnlQb2ludHMo
cmVmTm9kZSwgb2Zmc2V0LCBtX3N0YXJ0LmNvbnRhaW5lci5nZXQoKSwgbV9zdGFydC5vZmZzZXQp
IDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLy8gY29tcGFyZSB0byBlbmQsIGFuZCBw
b2ludCBjb21lcyBhZnRlcgotICAgIGlmIChjb21wYXJlQm91bmRhcnlQb2ludHMocmVmTm9kZSwg
b2Zmc2V0LCBtX2VuZENvbnRhaW5lci5nZXQoKSwgbV9lbmRPZmZzZXQpID09IDEpCisgICAgaWYg
KGNvbXBhcmVCb3VuZGFyeVBvaW50cyhyZWZOb2RlLCBvZmZzZXQsIG1fZW5kLmNvbnRhaW5lci5n
ZXQoKSwgbV9lbmQub2Zmc2V0KSA+IDApCiAgICAgICAgIHJldHVybiAxOwogCiAgICAgLy8gcG9p
bnQgaXMgaW4gdGhlIG1pZGRsZSBvZiB0aGlzIHJhbmdlLCBvciBvbiB0aGUgYm91bmRhcnkgcG9p
bnRzCkBAIC0zODQsMTggKzM2MiwxOCBAQCBSYW5nZTo6Q29tcGFyZVJlc3VsdHMgUmFuZ2U6OmNv
bXBhcmVOb2RlCiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKICAgICB9CiAgICAgCi0gICAg
aWYgKG1fZGV0YWNoZWQgJiYgcmVmTm9kZS0+YXR0YWNoZWQoKSkgeworICAgIGlmICghbV9zdGFy
dC5jb250YWluZXIgJiYgcmVmTm9kZS0+YXR0YWNoZWQoKSkgewogICAgICAgICBlYyA9IElOVkFM
SURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gTk9ERV9CRUZPUkU7CiAgICAgfQogCi0gICAg
aWYgKCFtX2RldGFjaGVkICYmICFyZWZOb2RlLT5hdHRhY2hlZCgpKSB7Ci0gICAgICAgIC8vIGZp
cmVmb3ggZG9lc24ndCB0aHJvdyBhbiBleGNlcHRpb24gZm9yIHRoaXMgY2FzZTsgaXQgcmV0dXJu
cyAwCisgICAgaWYgKG1fc3RhcnQuY29udGFpbmVyICYmICFyZWZOb2RlLT5hdHRhY2hlZCgpKSB7
CisgICAgICAgIC8vIEZpcmVmb3ggZG9lc24ndCB0aHJvdyBhbiBleGNlcHRpb24gZm9yIHRoaXMg
Y2FzZTsgaXQgcmV0dXJucyAwLgogICAgICAgICByZXR1cm4gTk9ERV9CRUZPUkU7CiAgICAgfQog
CiAgICAgaWYgKHJlZk5vZGUtPmRvY3VtZW50KCkgIT0gbV9vd25lckRvY3VtZW50KSB7Ci0gICAg
ICAgIC8vIGZpcmVmb3ggZG9lc24ndCB0aHJvdyBhbiBleGNlcHRpb24gZm9yIHRoaXMgY2FzZTsg
aXQgcmV0dXJucyAwCisgICAgICAgIC8vIEZpcmVmb3ggZG9lc24ndCB0aHJvdyBhbiBleGNlcHRp
b24gZm9yIHRoaXMgY2FzZTsgaXQgcmV0dXJucyAwLgogICAgICAgICByZXR1cm4gTk9ERV9CRUZP
UkU7CiAgICAgfQogCkBAIC00MDksMjEgKzM4NywyMSBAQCBSYW5nZTo6Q29tcGFyZVJlc3VsdHMg
UmFuZ2U6OmNvbXBhcmVOb2RlCiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsKICAgICB9CiAK
LSAgICBpZiAoY29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCwgZWMpID09IC0xKSB7
IC8vIHN0YXJ0cyBiZWZvcmUKLSAgICAgICAgaWYgKGNvbXBhcmVQb2ludChwYXJlbnROb2RlLCBu
b2RlSW5kZXggKyAxLCBlYykgPT0gMSkgLy8gZW5kcyBhZnRlciB0aGUgcmFuZ2UKKyAgICBpZiAo
Y29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCwgZWMpIDwgMCkgeyAvLyBzdGFydHMg
YmVmb3JlCisgICAgICAgIGlmIChjb21wYXJlUG9pbnQocGFyZW50Tm9kZSwgbm9kZUluZGV4ICsg
MSwgZWMpID4gMCkgLy8gZW5kcyBhZnRlciB0aGUgcmFuZ2UKICAgICAgICAgICAgIHJldHVybiBO
T0RFX0JFRk9SRV9BTkRfQUZURVI7CiAgICAgICAgIHJldHVybiBOT0RFX0JFRk9SRTsgLy8gZW5k
cyBiZWZvcmUgb3IgaW4gdGhlIHJhbmdlCiAgICAgfSBlbHNlIHsgLy8gc3RhcnRzIGF0IG9yIGFm
dGVyIHRoZSByYW5nZSBzdGFydAotICAgICAgICBpZiAoY29tcGFyZVBvaW50KHBhcmVudE5vZGUs
IG5vZGVJbmRleCArIDEsIGVjKSA9PSAxKSAvLyBlbmRzIGFmdGVyIHRoZSByYW5nZQorICAgICAg
ICBpZiAoY29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEsIGVjKSA+IDApIC8v
IGVuZHMgYWZ0ZXIgdGhlIHJhbmdlCiAgICAgICAgICAgICByZXR1cm4gTk9ERV9BRlRFUjsKICAg
ICAgICAgcmV0dXJuIE5PREVfSU5TSURFOyAvLyBlbmRzIGluc2lkZSB0aGUgcmFuZ2UKICAgICB9
CiB9CiAKIAotc2hvcnQgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhDb21wYXJlSG93IGhv
dywgY29uc3QgUmFuZ2UgKnNvdXJjZVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK3No
b3J0IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoQ29tcGFyZUhvdyBob3csIGNvbnN0IFJh
bmdlKiBzb3VyY2VSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAgaWYgKG1f
ZGV0YWNoZWQpIHsKKyAgICBpZiAoIW1fc3RhcnQuY29udGFpbmVyKSB7CiAgICAgICAgIGVjID0g
SU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTQzNCwxMCAr
NDEyLDEwIEBAIHNob3J0IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoQ29tcGEKICAgICB9
CiAKICAgICBlYyA9IDA7Ci0gICAgTm9kZSAqdGhpc0NvbnQgPSBjb21tb25BbmNlc3RvckNvbnRh
aW5lcihlYyk7CisgICAgTm9kZSogdGhpc0NvbnQgPSBjb21tb25BbmNlc3RvckNvbnRhaW5lcihl
Yyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKLSAgICBOb2RlICpzb3VyY2VDb250
ID0gc291cmNlUmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKGVjKTsKKyAgICBOb2RlKiBz
b3VyY2VDb250ID0gc291cmNlUmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKGVjKTsKICAg
ICBpZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC00NDYsOCArNDI0LDggQEAgc2hvcnQg
UmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhDb21wYQogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAKLSAgICBOb2RlICp0aGlzVG9wID0gdGhpc0NvbnQ7Ci0gICAgTm9kZSAqc291cmNlVG9w
ID0gc291cmNlQ29udDsKKyAgICBOb2RlKiB0aGlzVG9wID0gdGhpc0NvbnQ7CisgICAgTm9kZSog
c291cmNlVG9wID0gc291cmNlQ29udDsKICAgICB3aGlsZSAodGhpc1RvcC0+cGFyZW50Tm9kZSgp
KQogICAgICAgICB0aGlzVG9wID0gdGhpc1RvcC0+cGFyZW50Tm9kZSgpOwogICAgIHdoaWxlIChz
b3VyY2VUb3AtPnBhcmVudE5vZGUoKSkKQEAgLTQ1NywzMSArNDM1LDI2IEBAIHNob3J0IFJhbmdl
Ojpjb21wYXJlQm91bmRhcnlQb2ludHMoQ29tcGEKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
Ci0gICAgc3dpdGNoKGhvdykKLSAgICB7Ci0gICAgY2FzZSBTVEFSVF9UT19TVEFSVDoKLSAgICAg
ICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyggbV9zdGFydENvbnRhaW5lci5nZXQoKSwg
bV9zdGFydE9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291
cmNlUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKSwgc291cmNlUmFuZ2UtPnN0YXJ0T2Zmc2V0KGVj
KSApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNUQVJUX1RPX0VORDoKLSAgICAgICAgcmV0
dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyggbV9zdGFydENvbnRhaW5lci5nZXQoKSwgbV9zdGFy
dE9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUmFu
Z2UtPmVuZENvbnRhaW5lcihlYyksIHNvdXJjZVJhbmdlLT5lbmRPZmZzZXQoZWMpICk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRU5EX1RPX0VORDoKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVC
b3VuZGFyeVBvaW50cyggbV9lbmRDb250YWluZXIuZ2V0KCksIG1fZW5kT2Zmc2V0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSYW5nZS0+ZW5kQ29udGFpbmVy
KGVjKSwgc291cmNlUmFuZ2UtPmVuZE9mZnNldChlYykgKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBFTkRfVE9fU1RBUlQ6Ci0gICAgICAgIHJldHVybiBjb21wYXJlQm91bmRhcnlQb2ludHMo
IG1fZW5kQ29udGFpbmVyLmdldCgpLCBtX2VuZE9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc291cmNlUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKSwgc291cmNl
UmFuZ2UtPnN0YXJ0T2Zmc2V0KGVjKSApOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybiAwOworICAgIHN3aXRjaCAo
aG93KSB7CisgICAgICAgIGNhc2UgU1RBUlRfVE9fU1RBUlQ6CisgICAgICAgICAgICByZXR1cm4g
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKG1fc3RhcnQuY29udGFpbmVyLmdldCgpLCBtX3N0YXJ0Lm9m
ZnNldCwKKyAgICAgICAgICAgICAgICBzb3VyY2VSYW5nZS0+bV9zdGFydC5jb250YWluZXIuZ2V0
KCksIHNvdXJjZVJhbmdlLT5tX3N0YXJ0Lm9mZnNldCk7CisgICAgICAgIGNhc2UgU1RBUlRfVE9f
RU5EOgorICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0LmNv
bnRhaW5lci5nZXQoKSwgbV9zdGFydC5vZmZzZXQsCisgICAgICAgICAgICAgICAgc291cmNlUmFu
Z2UtPm1fZW5kLmNvbnRhaW5lci5nZXQoKSwgc291cmNlUmFuZ2UtPm1fZW5kLm9mZnNldCk7Cisg
ICAgICAgIGNhc2UgRU5EX1RPX0VORDoKKyAgICAgICAgICAgIHJldHVybiBjb21wYXJlQm91bmRh
cnlQb2ludHMobV9lbmQuY29udGFpbmVyLmdldCgpLCBtX2VuZC5vZmZzZXQsCisgICAgICAgICAg
ICAgICAgc291cmNlUmFuZ2UtPm1fZW5kLmNvbnRhaW5lci5nZXQoKSwgc291cmNlUmFuZ2UtPm1f
ZW5kLm9mZnNldCk7CisgICAgICAgIGNhc2UgRU5EX1RPX1NUQVJUOgorICAgICAgICAgICAgcmV0
dXJuIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX2VuZC5jb250YWluZXIuZ2V0KCksIG1fZW5kLm9m
ZnNldCwKKyAgICAgICAgICAgICAgICBzb3VyY2VSYW5nZS0+bV9zdGFydC5jb250YWluZXIuZ2V0
KCksIHNvdXJjZVJhbmdlLT5tX3N0YXJ0Lm9mZnNldCk7CiAgICAgfQorCisgICAgZWMgPSBTWU5U
QVhfRVJSOworICAgIHJldHVybiAwOwogfQogCi1zaG9ydCBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5
UG9pbnRzKCBOb2RlICpjb250YWluZXJBLCBpbnQgb2Zmc2V0QSwgTm9kZSAqY29udGFpbmVyQiwg
aW50IG9mZnNldEIgKQorc2hvcnQgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhOb2RlKiBj
b250YWluZXJBLCBpbnQgb2Zmc2V0QSwgTm9kZSogY29udGFpbmVyQiwgaW50IG9mZnNldEIpCiB7
CiAgICAgQVNTRVJUKGNvbnRhaW5lckEgJiYgY29udGFpbmVyQik7CiAgICAgaWYgKCFjb250YWlu
ZXJBKQpAQCAtNDkxLDcgKzQ2NCw3IEBAIHNob3J0IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2lu
dHMoIE5vZGUKICAgICAvLyBzZWUgRE9NMiB0cmF2ZXJzYWwgJiByYW5nZSBzZWN0aW9uIDIuNQog
CiAgICAgLy8gY2FzZSAxOiBib3RoIHBvaW50cyBoYXZlIHRoZSBzYW1lIGNvbnRhaW5lcgotICAg
IGlmKGNvbnRhaW5lckEgPT0gY29udGFpbmVyQikgeworICAgIGlmIChjb250YWluZXJBID09IGNv
bnRhaW5lckIpIHsKICAgICAgICAgaWYgKG9mZnNldEEgPT0gb2Zmc2V0QikKICAgICAgICAgICAg
IHJldHVybiAwOyAgICAgICAgICAgLy8gQSBpcyBlcXVhbCB0byBCCiAgICAgICAgIGlmIChvZmZz
ZXRBIDwgb2Zmc2V0QikKQEAgLTUwMSwxMiArNDc0LDEyIEBAIHNob3J0IFJhbmdlOjpjb21wYXJl
Qm91bmRhcnlQb2ludHMoIE5vZGUKICAgICB9CiAKICAgICAvLyBjYXNlIDI6IG5vZGUgQyAoY29u
dGFpbmVyIEIgb3IgYW4gYW5jZXN0b3IpIGlzIGEgY2hpbGQgbm9kZSBvZiBBCi0gICAgTm9kZSAq
YyA9IGNvbnRhaW5lckI7CisgICAgTm9kZSogYyA9IGNvbnRhaW5lckI7CiAgICAgd2hpbGUgKGMg
JiYgYy0+cGFyZW50Tm9kZSgpICE9IGNvbnRhaW5lckEpCiAgICAgICAgIGMgPSBjLT5wYXJlbnRO
b2RlKCk7CiAgICAgaWYgKGMpIHsKICAgICAgICAgaW50IG9mZnNldEMgPSAwOwotICAgICAgICBO
b2RlICpuID0gY29udGFpbmVyQS0+Zmlyc3RDaGlsZCgpOworICAgICAgICBOb2RlKiBuID0gY29u
dGFpbmVyQS0+Zmlyc3RDaGlsZCgpOwogICAgICAgICB3aGlsZSAobiAhPSBjICYmIG9mZnNldEMg
PCBvZmZzZXRBKSB7CiAgICAgICAgICAgICBvZmZzZXRDKys7CiAgICAgICAgICAgICBuID0gbi0+
bmV4dFNpYmxpbmcoKTsKQEAgLTUyNCwxMyArNDk3LDEzIEBAIHNob3J0IFJhbmdlOjpjb21wYXJl
Qm91bmRhcnlQb2ludHMoIE5vZGUKICAgICAgICAgYyA9IGMtPnBhcmVudE5vZGUoKTsKICAgICBp
ZiAoYykgewogICAgICAgICBpbnQgb2Zmc2V0QyA9IDA7Ci0gICAgICAgIE5vZGUgKm4gPSBjb250
YWluZXJCLT5maXJzdENoaWxkKCk7CisgICAgICAgIE5vZGUqIG4gPSBjb250YWluZXJCLT5maXJz
dENoaWxkKCk7CiAgICAgICAgIHdoaWxlIChuICE9IGMgJiYgb2Zmc2V0QyA8IG9mZnNldEIpIHsK
ICAgICAgICAgICAgIG9mZnNldEMrKzsKICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygp
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYob2Zmc2V0QyA8IG9mZnNldEIpCisgICAgICAgIGlm
IChvZmZzZXRDIDwgb2Zmc2V0QikKICAgICAgICAgICAgIHJldHVybiAtMTsgICAgICAgICAgICAg
IC8vIEEgaXMgYmVmb3JlIEIKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDE7ICAg
ICAgICAgICAgICAgLy8gQSBpcyBhZnRlciBCCkBAIC01MzgsMjQgKzUxMSwyNCBAQCBzaG9ydCBS
YW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKCBOb2RlCiAKICAgICAvLyBjYXNlIDQ6IGNvbnRh
aW5lcnMgQSAmIEIgYXJlIHNpYmxpbmdzLCBvciBjaGlsZHJlbiBvZiBzaWJsaW5ncwogICAgIC8v
ICMjIyB3ZSBuZWVkIHRvIGRvIGEgdHJhdmVyc2FsIGhlcmUgaW5zdGVhZAotICAgIE5vZGUgKmNt
blJvb3QgPSBjb21tb25BbmNlc3RvckNvbnRhaW5lcihjb250YWluZXJBLGNvbnRhaW5lckIpOwot
ICAgIGlmICghY21uUm9vdCkKKyAgICBOb2RlKiBjb21tb25BbmNlc3RvciA9IGNvbW1vbkFuY2Vz
dG9yQ29udGFpbmVyKGNvbnRhaW5lckEsIGNvbnRhaW5lckIpOworICAgIGlmICghY29tbW9uQW5j
ZXN0b3IpCiAgICAgICAgIHJldHVybiAwOwotICAgIE5vZGUgKmNoaWxkQSA9IGNvbnRhaW5lckE7
Ci0gICAgd2hpbGUgKGNoaWxkQSAmJiBjaGlsZEEtPnBhcmVudE5vZGUoKSAhPSBjbW5Sb290KQor
ICAgIE5vZGUqIGNoaWxkQSA9IGNvbnRhaW5lckE7CisgICAgd2hpbGUgKGNoaWxkQSAmJiBjaGls
ZEEtPnBhcmVudE5vZGUoKSAhPSBjb21tb25BbmNlc3RvcikKICAgICAgICAgY2hpbGRBID0gY2hp
bGRBLT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFjaGlsZEEpCi0gICAgICAgIGNoaWxkQSA9IGNt
blJvb3Q7Ci0gICAgTm9kZSAqY2hpbGRCID0gY29udGFpbmVyQjsKLSAgICB3aGlsZSAoY2hpbGRC
ICYmIGNoaWxkQi0+cGFyZW50Tm9kZSgpICE9IGNtblJvb3QpCisgICAgICAgIGNoaWxkQSA9IGNv
bW1vbkFuY2VzdG9yOworICAgIE5vZGUqIGNoaWxkQiA9IGNvbnRhaW5lckI7CisgICAgd2hpbGUg
KGNoaWxkQiAmJiBjaGlsZEItPnBhcmVudE5vZGUoKSAhPSBjb21tb25BbmNlc3RvcikKICAgICAg
ICAgY2hpbGRCID0gY2hpbGRCLT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFjaGlsZEIpCi0gICAg
ICAgIGNoaWxkQiA9IGNtblJvb3Q7CisgICAgICAgIGNoaWxkQiA9IGNvbW1vbkFuY2VzdG9yOwog
CiAgICAgaWYgKGNoaWxkQSA9PSBjaGlsZEIpCiAgICAgICAgIHJldHVybiAwOyAvLyBBIGlzIGVx
dWFsIHRvIEIKIAotICAgIE5vZGUgKm4gPSBjbW5Sb290LT5maXJzdENoaWxkKCk7CisgICAgTm9k
ZSogbiA9IGNvbW1vbkFuY2VzdG9yLT5maXJzdENoaWxkKCk7CiAgICAgd2hpbGUgKG4pIHsKICAg
ICAgICAgaWYgKG4gPT0gY2hpbGRBKQogICAgICAgICAgICAgcmV0dXJuIC0xOyAvLyBBIGlzIGJl
Zm9yZSBCCkBAIC01NjksMTggKzU0MiwxOSBAQCBzaG9ydCBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5
UG9pbnRzKCBOb2RlCiAgICAgcmV0dXJuIDA7CiB9CiAKLXNob3J0IFJhbmdlOjpjb21wYXJlQm91
bmRhcnlQb2ludHMoIGNvbnN0IFBvc2l0aW9uICZhLCBjb25zdCBQb3NpdGlvbiAmYiApCitzaG9y
dCBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKGNvbnN0IFBvc2l0aW9uJiBhLCBjb25zdCBQ
b3NpdGlvbiYgYikKIHsKLSAgICByZXR1cm4gY29tcGFyZUJvdW5kYXJ5UG9pbnRzKGEubm9kZSgp
LCBhLm9mZnNldCgpLCBiLm5vZGUoKSwgYi5vZmZzZXQoKSk7CisgICAgcmV0dXJuIGNvbXBhcmVC
b3VuZGFyeVBvaW50cyhhLmNvbnRhaW5lci5nZXQoKSwgYS5vZmZzZXQsIGIuY29udGFpbmVyLmdl
dCgpLCBiLm9mZnNldCk7CiB9CiAKIGJvb2wgUmFuZ2U6OmJvdW5kYXJ5UG9pbnRzVmFsaWQoKSBj
b25zdAogewotICAgIHJldHVybiBtX3N0YXJ0Q29udGFpbmVyICYmIG1fZW5kQ29udGFpbmVyICYm
IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0Q29udGFpbmVyLmdldCgpLCBtX3N0YXJ0T2Zm
c2V0LCBtX2VuZENvbnRhaW5lci5nZXQoKSwgbV9lbmRPZmZzZXQpIDw9IDA7CisgICAgcmV0dXJu
IG1fc3RhcnQuY29udGFpbmVyICYmIGNvbXBhcmVCb3VuZGFyeVBvaW50cyhtX3N0YXJ0LmNvbnRh
aW5lci5nZXQoKSwgbV9zdGFydC5vZmZzZXQsIG1fZW5kLmNvbnRhaW5lci5nZXQoKSwgbV9lbmQu
b2Zmc2V0KSA8PSAwOwogfQogCi12b2lkIFJhbmdlOjpkZWxldGVDb250ZW50cyhFeGNlcHRpb25D
b2RlJiBlYykgewotICAgIGlmIChtX2RldGFjaGVkKSB7Cit2b2lkIFJhbmdlOjpkZWxldGVDb250
ZW50cyhFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIW1fc3RhcnQuY29udGFpbmVyKSB7
CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC02MDMsMTEgKzU3NywxMiBAQCBib29sIFJhbmdlOjppbnRlcnNlY3RzTm9kZShOb2RlKiBy
ZWZOb2RlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgaWYgKG1fZGV0
YWNoZWQgJiYgcmVmTm9kZS0+YXR0YWNoZWQoKSB8fAotICAgICAgICAhbV9kZXRhY2hlZCAmJiAh
cmVmTm9kZS0+YXR0YWNoZWQoKSB8fAotICAgICAgICByZWZOb2RlLT5kb2N1bWVudCgpICE9IG1f
b3duZXJEb2N1bWVudCkKLSAgICAgICAgLy8gZmlyZWZveCBkb2Vzbid0IHRocm93IGFuIGV4Y2Vw
dGlvbiBmb3IgdGhlc2UgY2FzZTsgaXQgcmV0dXJucyBmYWxzZQorICAgIGlmICghbV9zdGFydC5j
b250YWluZXIgJiYgcmVmTm9kZS0+YXR0YWNoZWQoKQorICAgICAgICAgICAgfHwgbV9zdGFydC5j
b250YWluZXIgJiYgIXJlZk5vZGUtPmF0dGFjaGVkKCkKKyAgICAgICAgICAgIHx8IHJlZk5vZGUt
PmRvY3VtZW50KCkgIT0gbV9vd25lckRvY3VtZW50KSB7CisgICAgICAgIC8vIEZpcmVmb3ggZG9l
c24ndCB0aHJvdyBhbiBleGNlcHRpb24gZm9yIHRoZXNlIGNhc2VzOyBpdCByZXR1cm5zIGZhbHNl
LgogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgTm9kZSogcGFyZW50Tm9kZSA9
IHJlZk5vZGUtPnBhcmVudE5vZGUoKTsKICAgICB1bnNpZ25lZCBub2RlSW5kZXggPSByZWZOb2Rl
LT5ub2RlSW5kZXgoKTsKQEAgLTYyMiw4ICs1OTcsOCBAQCBib29sIFJhbmdlOjppbnRlcnNlY3Rz
Tm9kZShOb2RlKiByZWZOb2RlCiAgICAgaWYgKGNvbXBhcmVQb2ludChwYXJlbnROb2RlLCBub2Rl
SW5kZXgsIGVjKSA9PSAtMSAmJiAvLyBzdGFydHMgYmVmb3JlIHN0YXJ0CiAgICAgICAgIGNvbXBh
cmVQb2ludChwYXJlbnROb2RlLCBub2RlSW5kZXggKyAxLCBlYykgPT0gLTEpIHsgLy8gZW5kcyBi
ZWZvcmUgc3RhcnQKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSBpZihjb21wYXJl
UG9pbnQocGFyZW50Tm9kZSwgbm9kZUluZGV4LCBlYykgPT0gMSAmJiAvLyBzdGFydHMgYWZ0ZXIg
ZW5kCi0gICAgICAgICAgICAgIGNvbXBhcmVQb2ludChwYXJlbnROb2RlLCBub2RlSW5kZXggKyAx
LCBlYykgPT0gMSkgeyAvLyBlbmRzIGFmdGVyIGVuZAorICAgIH0gZWxzZSBpZiAoY29tcGFyZVBv
aW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCwgZWMpID09IDEgJiYgLy8gc3RhcnRzIGFmdGVyIGVu
ZAorICAgICAgICAgICAgICAgY29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCArIDEs
IGVjKSA9PSAxKSB7IC8vIGVuZHMgYWZ0ZXIgZW5kCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgCkBAIC02NDcsNzAgKzYyMiw3MCBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IFJhbmdlOjpwcm9jCiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIE5v
ZGUgKmNtblJvb3QgPSBjb21tb25BbmNlc3RvckNvbnRhaW5lcihlYyk7CisgICAgTm9kZSogY29t
bW9uUm9vdCA9IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKGVjKTsKICAgICBpZiAoZWMpCiAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgLy8gd2hhdCBpcyB0aGUgaGlnaGVzdCBub2RlIHRoYXQgcGFy
dGlhbGx5IHNlbGVjdHMgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZT8KLSAgICBOb2RlICpwYXJ0aWFs
U3RhcnQgPSAwOwotICAgIGlmIChtX3N0YXJ0Q29udGFpbmVyICE9IGNtblJvb3QpIHsKLSAgICAg
ICAgcGFydGlhbFN0YXJ0ID0gbV9zdGFydENvbnRhaW5lci5nZXQoKTsKLSAgICAgICAgd2hpbGUg
KHBhcnRpYWxTdGFydC0+cGFyZW50Tm9kZSgpICE9IGNtblJvb3QpCisgICAgTm9kZSogcGFydGlh
bFN0YXJ0ID0gMDsKKyAgICBpZiAobV9zdGFydC5jb250YWluZXIgIT0gY29tbW9uUm9vdCkgewor
ICAgICAgICBwYXJ0aWFsU3RhcnQgPSBtX3N0YXJ0LmNvbnRhaW5lci5nZXQoKTsKKyAgICAgICAg
d2hpbGUgKHBhcnRpYWxTdGFydC0+cGFyZW50Tm9kZSgpICE9IGNvbW1vblJvb3QpCiAgICAgICAg
ICAgICBwYXJ0aWFsU3RhcnQgPSBwYXJ0aWFsU3RhcnQtPnBhcmVudE5vZGUoKTsKICAgICB9CiAK
ICAgICAvLyB3aGF0IGlzIHRoZSBoaWdoZXN0IG5vZGUgdGhhdCBwYXJ0aWFsbHkgc2VsZWN0cyB0
aGUgZW5kIG9mIHRoZSByYW5nZT8KLSAgICBOb2RlICpwYXJ0aWFsRW5kID0gMDsKLSAgICBpZiAo
bV9lbmRDb250YWluZXIgIT0gY21uUm9vdCkgewotICAgICAgICBwYXJ0aWFsRW5kID0gbV9lbmRD
b250YWluZXIuZ2V0KCk7Ci0gICAgICAgIHdoaWxlIChwYXJ0aWFsRW5kLT5wYXJlbnROb2RlKCkg
IT0gY21uUm9vdCkKKyAgICBOb2RlKiBwYXJ0aWFsRW5kID0gMDsKKyAgICBpZiAobV9lbmQuY29u
dGFpbmVyICE9IGNvbW1vblJvb3QpIHsKKyAgICAgICAgcGFydGlhbEVuZCA9IG1fZW5kLmNvbnRh
aW5lci5nZXQoKTsKKyAgICAgICAgd2hpbGUgKHBhcnRpYWxFbmQtPnBhcmVudE5vZGUoKSAhPSBj
b21tb25Sb290KQogICAgICAgICAgICAgcGFydGlhbEVuZCA9IHBhcnRpYWxFbmQtPnBhcmVudE5v
ZGUoKTsKICAgICB9CiAKICAgICAvLyBTaW1wbGUgY2FzZTogdGhlIHN0YXJ0IGFuZCBlbmQgY29u
dGFpbmVycyBhcmUgdGhlIHNhbWUuIFdlIGp1c3QgZ3JhYgogICAgIC8vIGV2ZXJ5dGhpbmcgPj0g
c3RhcnQgb2Zmc2V0IGFuZCA8IGVuZCBvZmZzZXQKLSAgICBpZiAobV9zdGFydENvbnRhaW5lciA9
PSBtX2VuZENvbnRhaW5lcikgewotICAgICAgICBpZihtX3N0YXJ0Q29udGFpbmVyLT5ub2RlVHlw
ZSgpID09IE5vZGU6OlRFWFRfTk9ERSB8fAotICAgICAgICAgICBtX3N0YXJ0Q29udGFpbmVyLT5u
b2RlVHlwZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSB8fAotICAgICAgICAgICBtX3N0
YXJ0Q29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERSkgeworICAgIGlm
IChtX3N0YXJ0LmNvbnRhaW5lciA9PSBtX2VuZC5jb250YWluZXIpIHsKKyAgICAgICAgaWYgKG1f
c3RhcnQuY29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSB8fAorICAgICAg
ICAgICAgbV9zdGFydC5jb250YWluZXItPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElP
Tl9OT0RFIHx8CisgICAgICAgICAgICBtX3N0YXJ0LmNvbnRhaW5lci0+bm9kZVR5cGUoKSA9PSBO
b2RlOjpDT01NRU5UX05PREUpIHsKIAogICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBFWFRSQUNU
X0NPTlRFTlRTIHx8IGFjdGlvbiA9PSBDTE9ORV9DT05URU5UUykgewotICAgICAgICAgICAgICAg
IFJlZlB0cjxDaGFyYWN0ZXJEYXRhPiBjID0gc3RhdGljX3BvaW50ZXJfY2FzdDxDaGFyYWN0ZXJE
YXRhPihtX3N0YXJ0Q29udGFpbmVyLT5jbG9uZU5vZGUodHJ1ZSkpOwotICAgICAgICAgICAgICAg
IGMtPmRlbGV0ZURhdGEobV9lbmRPZmZzZXQsIGMtPmxlbmd0aCgpIC0gbV9lbmRPZmZzZXQsIGVj
KTsKLSAgICAgICAgICAgICAgICBjLT5kZWxldGVEYXRhKDAsIG1fc3RhcnRPZmZzZXQsIGVjKTsK
KyAgICAgICAgICAgICAgICBSZWZQdHI8Q2hhcmFjdGVyRGF0YT4gYyA9IHN0YXRpY19wb2ludGVy
X2Nhc3Q8Q2hhcmFjdGVyRGF0YT4obV9zdGFydC5jb250YWluZXItPmNsb25lTm9kZSh0cnVlKSk7
CisgICAgICAgICAgICAgICAgYy0+ZGVsZXRlRGF0YShtX2VuZC5vZmZzZXQsIGMtPmxlbmd0aCgp
IC0gbV9lbmQub2Zmc2V0LCBlYyk7CisgICAgICAgICAgICAgICAgYy0+ZGVsZXRlRGF0YSgwLCBt
X3N0YXJ0Lm9mZnNldCwgZWMpOwogICAgICAgICAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGls
ZChjLnJlbGVhc2UoKSwgZWMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGFjdGlv
biA9PSBFWFRSQUNUX0NPTlRFTlRTIHx8IGFjdGlvbiA9PSBERUxFVEVfQ09OVEVOVFMpIHsKLSAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDaGFyYWN0ZXJEYXRhKj4obV9zdGFydENvbnRhaW5l
ci5nZXQoKSktPmRlbGV0ZURhdGEobV9zdGFydE9mZnNldCxtX2VuZE9mZnNldC1tX3N0YXJ0T2Zm
c2V0LGVjKTsKLSAgICAgICAgICAgICAgICBtX3N0YXJ0Q29udGFpbmVyLT5kb2N1bWVudCgpLT51
cGRhdGVMYXlvdXQoKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDaGFyYWN0ZXJEYXRh
Kj4obV9zdGFydC5jb250YWluZXIuZ2V0KCkpLT5kZWxldGVEYXRhKG1fc3RhcnQub2Zmc2V0LG1f
ZW5kLm9mZnNldC1tX3N0YXJ0Lm9mZnNldCxlYyk7CisgICAgICAgICAgICAgICAgbV9zdGFydC5j
b250YWluZXItPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1fc3RhcnRDb250YWluZXItPm5vZGVUeXBlKCkgPT0g
Tm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKSB7CisgICAgICAgIGVsc2UgaWYgKG1f
c3RhcnQuY29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJ
T05fTk9ERSkgewogICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBFWFRSQUNUX0NPTlRFTlRTIHx8
IGFjdGlvbiA9PSBDTE9ORV9DT05URU5UUykgewotICAgICAgICAgICAgICAgIFJlZlB0cjxQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24+IGMgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFByb2Nlc3NpbmdJbnN0
cnVjdGlvbj4obV9zdGFydENvbnRhaW5lci0+Y2xvbmVOb2RlKHRydWUpKTsKLSAgICAgICAgICAg
ICAgICBjLT5zZXREYXRhKGMtPmRhdGEoKS5zdWJzdHJpbmcobV9zdGFydE9mZnNldCwgbV9lbmRP
ZmZzZXQgLSBtX3N0YXJ0T2Zmc2V0KSwgZWMpOworICAgICAgICAgICAgICAgIFJlZlB0cjxQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24+IGMgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFByb2Nlc3NpbmdJbnN0
cnVjdGlvbj4obV9zdGFydC5jb250YWluZXItPmNsb25lTm9kZSh0cnVlKSk7CisgICAgICAgICAg
ICAgICAgYy0+c2V0RGF0YShjLT5kYXRhKCkuc3Vic3RyaW5nKG1fc3RhcnQub2Zmc2V0LCBtX2Vu
ZC5vZmZzZXQgLSBtX3N0YXJ0Lm9mZnNldCksIGVjKTsKICAgICAgICAgICAgICAgICBmcmFnbWVu
dC0+YXBwZW5kQ2hpbGQoYy5yZWxlYXNlKCksIGVjKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmIChhY3Rpb24gPT0gRVhUUkFDVF9DT05URU5UUyB8fCBhY3Rpb24gPT0gREVMRVRFX0NP
TlRFTlRTKSB7Ci0gICAgICAgICAgICAgICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uKiBwaT0gc3Rh
dGljX2Nhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uKj4obV9zdGFydENvbnRhaW5lci5nZXQoKSk7
CisgICAgICAgICAgICAgICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uKiBwaT0gc3RhdGljX2Nhc3Q8
UHJvY2Vzc2luZ0luc3RydWN0aW9uKj4obV9zdGFydC5jb250YWluZXIuZ2V0KCkpOwogICAgICAg
ICAgICAgICAgIFN0cmluZyBkYXRhKHBpLT5kYXRhKCkpOwotICAgICAgICAgICAgICAgIGRhdGEu
cmVtb3ZlKG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0IC0gbV9zdGFydE9mZnNldCk7CisgICAg
ICAgICAgICAgICAgZGF0YS5yZW1vdmUobV9zdGFydC5vZmZzZXQsIG1fZW5kLm9mZnNldCAtIG1f
c3RhcnQub2Zmc2V0KTsKICAgICAgICAgICAgICAgICBwaS0+c2V0RGF0YShkYXRhLCBlYyk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBOb2Rl
ICpuID0gbV9zdGFydENvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgdW5zaWdu
ZWQgaTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IG4gJiYgaSA8IG1fc3RhcnRPZmZzZXQ7IGkr
KykgLy8gc2tpcCB1bnRpbCBtX3N0YXJ0T2Zmc2V0CisgICAgICAgICAgICBOb2RlKiBuID0gbV9z
dGFydC5jb250YWluZXItPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgIGludCBpOworICAgICAg
ICAgICAgZm9yIChpID0gMDsgbiAmJiBpIDwgbV9zdGFydC5vZmZzZXQ7IGkrKykgLy8gc2tpcCB1
bnRpbCBtX3N0YXJ0Lm9mZnNldAogICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygp
OwotICAgICAgICAgICAgd2hpbGUgKG4gJiYgaSA8IG1fZW5kT2Zmc2V0KSB7IC8vIGRlbGV0ZSB1
bnRpbCBtX2VuZE9mZnNldAotICAgICAgICAgICAgICAgIE5vZGUgKm5leHQgPSBuLT5uZXh0U2li
bGluZygpOworICAgICAgICAgICAgd2hpbGUgKG4gJiYgaSA8IG1fZW5kLm9mZnNldCkgeyAvLyBk
ZWxldGUgdW50aWwgbV9lbmQub2Zmc2V0CisgICAgICAgICAgICAgICAgTm9kZSogbmV4dCA9IG4t
Pm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBFWFRSQUNUX0NP
TlRFTlRTKQogICAgICAgICAgICAgICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQobixlYyk7
IC8vIHdpbGwgcmVtb3ZlIG4gZnJvbSBpdCdzIHBhcmVudAogICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGFjdGlvbiA9PSBDTE9ORV9DT05URU5UUykKICAgICAgICAgICAgICAgICAgICAgZnJhZ21l
bnQtPmFwcGVuZENoaWxkKG4tPmNsb25lTm9kZSh0cnVlKSxlYyk7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBtX3N0YXJ0Q29udGFpbmVyLT5yZW1vdmVDaGlsZChu
LGVjKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGFydC5jb250YWluZXItPnJlbW92ZUNoaWxk
KG4sZWMpOwogICAgICAgICAgICAgICAgIG4gPSBuZXh0OwogICAgICAgICAgICAgICAgIGkrKzsK
ICAgICAgICAgICAgIH0KQEAgLTcyMiw4MCArNjk3LDgwIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gUmFuZ2U6OnByb2MKIAogICAgIC8vIENvbXBsZXggY2FzZTogU3RhcnQgYW5kIGVu
ZCBjb250YWluZXJzIGFyZSBkaWZmZXJlbnQuCiAgICAgLy8gVGhlcmUgYXJlIHRocmVlIHBvc3Np
YmxpdGllcyBoZXJlOgotICAgIC8vIDEuIFN0YXJ0IGNvbnRhaW5lciA9PSBjbW5Sb290IChFbmQg
Y29udGFpbmVyIG11c3QgYmUgYSBkZXNjZW5kYW50KQotICAgIC8vIDIuIEVuZCBjb250YWluZXIg
PT0gY21uUm9vdCAoU3RhcnQgY29udGFpbmVyIG11c3QgYmUgYSBkZXNjZW5kYW50KQotICAgIC8v
IDMuIE5laXRoZXIgaXMgY21uUm9vdCwgdGhleSBhcmUgYm90aCBkZXNjZW5kYW50cworICAgIC8v
IDEuIFN0YXJ0IGNvbnRhaW5lciA9PSBjb21tb25Sb290IChFbmQgY29udGFpbmVyIG11c3QgYmUg
YSBkZXNjZW5kYW50KQorICAgIC8vIDIuIEVuZCBjb250YWluZXIgPT0gY29tbW9uUm9vdCAoU3Rh
cnQgY29udGFpbmVyIG11c3QgYmUgYSBkZXNjZW5kYW50KQorICAgIC8vIDMuIE5laXRoZXIgaXMg
Y29tbW9uUm9vdCwgdGhleSBhcmUgYm90aCBkZXNjZW5kYW50cwogICAgIC8vCiAgICAgLy8gSW4g
Y2FzZSAzLCB3ZSBncmFiIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIHN0YXJ0ICh1cCB1bnRpbCBhIGRp
cmVjdCBjaGlsZAotICAgIC8vIG9mIGNtblJvb3QpIGludG8gbGVmdENvbnRlbnRzLCBhbmQgZXZl
cnl0aGluZyBiZWZvcmUgdGhlIGVuZCAodXAgdW50aWwKLSAgICAvLyBhIGRpcmVjdCBjaGlsZCBv
ZiBjbW5Sb290KSBpbnRvIHJpZ2h0Q29udGVudHMuIFRoZW4gd2UgcHJvY2VzcyBhbGwKLSAgICAv
LyBjbW5Sb290IGNoaWxkcmVuIGJldHdlZW4gbGVmdENvbnRlbnRzIGFuZCByaWdodENvbnRlbnRz
CisgICAgLy8gb2YgY29tbW9uUm9vdCkgaW50byBsZWZ0Q29udGVudHMsIGFuZCBldmVyeXRoaW5n
IGJlZm9yZSB0aGUgZW5kICh1cCB1bnRpbAorICAgIC8vIGEgZGlyZWN0IGNoaWxkIG9mIGNvbW1v
blJvb3QpIGludG8gcmlnaHRDb250ZW50cy4gVGhlbiB3ZSBwcm9jZXNzIGFsbAorICAgIC8vIGNv
bW1vblJvb3QgY2hpbGRyZW4gYmV0d2VlbiBsZWZ0Q29udGVudHMgYW5kIHJpZ2h0Q29udGVudHMK
ICAgICAvLwogICAgIC8vIEluIGNhc2UgMSBvciAyLCB3ZSBza2lwIGVpdGhlciBwcm9jZXNzaW5n
IG9mIGxlZnRDb250ZW50cyBvciByaWdodENvbnRlbnRzLAogICAgIC8vIGluIHdoaWNoIGNhc2Ug
dGhlIGxhc3QgbG90IG9mIG5vZGVzIGVpdGhlciBnb2VzIGZyb20gdGhlIGZpcnN0IG9yIGxhc3QK
LSAgICAvLyBjaGlsZCBvZiBjbW5Sb290LgorICAgIC8vIGNoaWxkIG9mIGNvbW1vblJvb3QuCiAg
ICAgLy8KICAgICAvLyBUaGVzZSBhcmUgZGVsZXRlZCwgY2xvbmVkLCBvciBleHRyYWN0ZWQgKGku
ZS4gYm90aCkgZGVwZW5kaW5nIG9uIGFjdGlvbi4KIAogICAgIFJlZlB0cjxOb2RlPiBsZWZ0Q29u
dGVudHM7Ci0gICAgaWYgKG1fc3RhcnRDb250YWluZXIgIT0gY21uUm9vdCkgeworICAgIGlmICht
X3N0YXJ0LmNvbnRhaW5lciAhPSBjb21tb25Sb290KSB7CiAgICAgICAgIC8vIHByb2Nlc3MgdGhl
IGxlZnQtaGFuZCBzaWRlIG9mIHRoZSByYW5nZSwgdXAgdW50aWwgdGhlIGxhc3QgYW5jZXN0b3Ig
b2YKLSAgICAgICAgLy8gbV9zdGFydENvbnRhaW5lciBiZWZvcmUgY21uUm9vdAotICAgICAgICBp
ZihtX3N0YXJ0Q29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSB8fAotICAg
ICAgICAgICBtX3N0YXJ0Q29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJ
T05fTk9ERSB8fAotICAgICAgICAgICBtX3N0YXJ0Q29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5v
ZGU6OkNPTU1FTlRfTk9ERSkgeworICAgICAgICAvLyBtX3N0YXJ0LmNvbnRhaW5lciBiZWZvcmUg
Y29tbW9uUm9vdAorICAgICAgICBpZiAobV9zdGFydC5jb250YWluZXItPm5vZGVUeXBlKCkgPT0g
Tm9kZTo6VEVYVF9OT0RFIHx8CisgICAgICAgICAgICBtX3N0YXJ0LmNvbnRhaW5lci0+bm9kZVR5
cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUgfHwKKyAgICAgICAgICAgIG1fc3RhcnQu
Y29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERSkgewogCiAgICAgICAg
ICAgICBpZiAoYWN0aW9uID09IEVYVFJBQ1RfQ09OVEVOVFMgfHwgYWN0aW9uID09IENMT05FX0NP
TlRFTlRTKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPENoYXJhY3RlckRhdGE+IGMgPSBzdGF0
aWNfcG9pbnRlcl9jYXN0PENoYXJhY3RlckRhdGE+KG1fc3RhcnRDb250YWluZXItPmNsb25lTm9k
ZSh0cnVlKSk7Ci0gICAgICAgICAgICAgICAgYy0+ZGVsZXRlRGF0YSgwLCBtX3N0YXJ0T2Zmc2V0
LCBlYyk7CisgICAgICAgICAgICAgICAgUmVmUHRyPENoYXJhY3RlckRhdGE+IGMgPSBzdGF0aWNf
cG9pbnRlcl9jYXN0PENoYXJhY3RlckRhdGE+KG1fc3RhcnQuY29udGFpbmVyLT5jbG9uZU5vZGUo
dHJ1ZSkpOworICAgICAgICAgICAgICAgIGMtPmRlbGV0ZURhdGEoMCwgbV9zdGFydC5vZmZzZXQs
IGVjKTsKICAgICAgICAgICAgICAgICBsZWZ0Q29udGVudHMgPSBjLnJlbGVhc2UoKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gRVhUUkFDVF9DT05URU5UUyB8fCBh
Y3Rpb24gPT0gREVMRVRFX0NPTlRFTlRTKSB7Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
Q2hhcmFjdGVyRGF0YSo+KG1fc3RhcnRDb250YWluZXIuZ2V0KCkpLT5kZWxldGVEYXRhKAotICAg
ICAgICAgICAgICAgICAgICBtX3N0YXJ0T2Zmc2V0LCBzdGF0aWNfY2FzdDxDaGFyYWN0ZXJEYXRh
Kj4obV9zdGFydENvbnRhaW5lci5nZXQoKSktPmxlbmd0aCgpIC0gbV9zdGFydE9mZnNldCwgZWMp
OwotICAgICAgICAgICAgICAgIG1fc3RhcnRDb250YWluZXItPmRvY3VtZW50KCktPnVwZGF0ZUxh
eW91dCgpOworICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENoYXJhY3RlckRhdGEqPihtX3N0
YXJ0LmNvbnRhaW5lci5nZXQoKSktPmRlbGV0ZURhdGEoCisgICAgICAgICAgICAgICAgICAgIG1f
c3RhcnQub2Zmc2V0LCBzdGF0aWNfY2FzdDxDaGFyYWN0ZXJEYXRhKj4obV9zdGFydC5jb250YWlu
ZXIuZ2V0KCkpLT5sZW5ndGgoKSAtIG1fc3RhcnQub2Zmc2V0LCBlYyk7CisgICAgICAgICAgICAg
ICAgbV9zdGFydC5jb250YWluZXItPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1fc3RhcnRDb250YWluZXItPm5v
ZGVUeXBlKCkgPT0gTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKSB7CisgICAgICAg
IGVsc2UgaWYgKG1fc3RhcnQuY29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5vZGU6OlBST0NFU1NJ
TkdfSU5TVFJVQ1RJT05fTk9ERSkgewogICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBFWFRSQUNU
X0NPTlRFTlRTIHx8IGFjdGlvbiA9PSBDTE9ORV9DT05URU5UUykgewotICAgICAgICAgICAgICAg
IFJlZlB0cjxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+IGMgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFBy
b2Nlc3NpbmdJbnN0cnVjdGlvbj4obV9zdGFydENvbnRhaW5lci0+Y2xvbmVOb2RlKHRydWUpKTsK
LSAgICAgICAgICAgICAgICBjLT5zZXREYXRhKGMtPmRhdGEoKS5zdWJzdHJpbmcobV9zdGFydE9m
ZnNldCksIGVjKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UHJvY2Vzc2luZ0luc3RydWN0aW9u
PiBjID0gc3RhdGljX3BvaW50ZXJfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+KG1fc3RhcnQu
Y29udGFpbmVyLT5jbG9uZU5vZGUodHJ1ZSkpOworICAgICAgICAgICAgICAgIGMtPnNldERhdGEo
Yy0+ZGF0YSgpLnN1YnN0cmluZyhtX3N0YXJ0Lm9mZnNldCksIGVjKTsKICAgICAgICAgICAgICAg
ICBsZWZ0Q29udGVudHMgPSBjLnJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmIChhY3Rpb24gPT0gRVhUUkFDVF9DT05URU5UUyB8fCBhY3Rpb24gPT0gREVMRVRFX0NPTlRF
TlRTKSB7Ci0gICAgICAgICAgICAgICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uKiBwaT0gc3RhdGlj
X2Nhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uKj4obV9zdGFydENvbnRhaW5lci5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uKiBwaT0gc3RhdGljX2Nhc3Q8UHJv
Y2Vzc2luZ0luc3RydWN0aW9uKj4obV9zdGFydC5jb250YWluZXIuZ2V0KCkpOwogICAgICAgICAg
ICAgICAgIFN0cmluZyBkYXRhKHBpLT5kYXRhKCkpOwotICAgICAgICAgICAgICAgIHBpLT5zZXRE
YXRhKGRhdGEubGVmdChtX3N0YXJ0T2Zmc2V0KSwgZWMpOworICAgICAgICAgICAgICAgIHBpLT5z
ZXREYXRhKGRhdGEubGVmdChtX3N0YXJ0Lm9mZnNldCksIGVjKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gRVhUUkFD
VF9DT05URU5UUyB8fCBhY3Rpb24gPT0gQ0xPTkVfQ09OVEVOVFMpCi0gICAgICAgICAgICAgICAg
bGVmdENvbnRlbnRzID0gbV9zdGFydENvbnRhaW5lci0+Y2xvbmVOb2RlKGZhbHNlKTsKLSAgICAg
ICAgICAgIE5vZGUgKm4gPSBtX3N0YXJ0Q29udGFpbmVyLT5maXJzdENoaWxkKCk7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBuICYmIGkgPCBtX3N0YXJ0T2Zmc2V0OyBpKyspIC8v
IHNraXAgdW50aWwgbV9zdGFydE9mZnNldAorICAgICAgICAgICAgICAgIGxlZnRDb250ZW50cyA9
IG1fc3RhcnQuY29udGFpbmVyLT5jbG9uZU5vZGUoZmFsc2UpOworICAgICAgICAgICAgTm9kZSog
biA9IG1fc3RhcnQuY29udGFpbmVyLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgbiAmJiBpIDwgbV9zdGFydC5vZmZzZXQ7IGkrKykgLy8gc2tpcCB1bnRpbCBtX3N0
YXJ0Lm9mZnNldAogICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOwogICAgICAg
ICAgICAgd2hpbGUgKG4pIHsgLy8gcHJvY2VzcyB1bnRpbCBlbmQKLSAgICAgICAgICAgICAgICBO
b2RlICpuZXh0ID0gbi0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBuZXh0
ID0gbi0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09IEVYVFJB
Q1RfQ09OVEVOVFMpCi0gICAgICAgICAgICAgICAgICAgIGxlZnRDb250ZW50cy0+YXBwZW5kQ2hp
bGQobixlYyk7IC8vIHdpbGwgcmVtb3ZlIG4gZnJvbSBtX3N0YXJ0Q29udGFpbmVyCisgICAgICAg
ICAgICAgICAgICAgIGxlZnRDb250ZW50cy0+YXBwZW5kQ2hpbGQobixlYyk7IC8vIHdpbGwgcmVt
b3ZlIG4gZnJvbSBtX3N0YXJ0LmNvbnRhaW5lcgogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFj
dGlvbiA9PSBDTE9ORV9DT05URU5UUykKICAgICAgICAgICAgICAgICAgICAgbGVmdENvbnRlbnRz
LT5hcHBlbmRDaGlsZChuLT5jbG9uZU5vZGUodHJ1ZSksZWMpOwogICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgbV9zdGFydENvbnRhaW5lci0+cmVtb3ZlQ2hpbGQobixl
Yyk7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhcnQuY29udGFpbmVyLT5yZW1vdmVDaGlsZChu
LGVjKTsKICAgICAgICAgICAgICAgICBuID0gbmV4dDsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCi0gICAgICAgIE5vZGUgKmxlZnRQYXJlbnQgPSBtX3N0YXJ0Q29udGFpbmVyLT5wYXJlbnRO
b2RlKCk7Ci0gICAgICAgIE5vZGUgKm4gPSBtX3N0YXJ0Q29udGFpbmVyLT5uZXh0U2libGluZygp
OwotICAgICAgICBmb3IgKDsgbGVmdFBhcmVudCAhPSBjbW5Sb290OyBsZWZ0UGFyZW50ID0gbGVm
dFBhcmVudC0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIE5vZGUqIGxlZnRQYXJlbnQgPSBtX3N0
YXJ0LmNvbnRhaW5lci0+cGFyZW50Tm9kZSgpOworICAgICAgICBOb2RlKiBuID0gbV9zdGFydC5j
b250YWluZXItPm5leHRTaWJsaW5nKCk7CisgICAgICAgIGZvciAoOyBsZWZ0UGFyZW50ICE9IGNv
bW1vblJvb3Q7IGxlZnRQYXJlbnQgPSBsZWZ0UGFyZW50LT5wYXJlbnROb2RlKCkpIHsKICAgICAg
ICAgICAgIGlmIChhY3Rpb24gPT0gRVhUUkFDVF9DT05URU5UUyB8fCBhY3Rpb24gPT0gQ0xPTkVf
Q09OVEVOVFMpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbGVmdENvbnRlbnRzUGFy
ZW50ID0gbGVmdFBhcmVudC0+Y2xvbmVOb2RlKGZhbHNlKTsKICAgICAgICAgICAgICAgICBsZWZ0
Q29udGVudHNQYXJlbnQtPmFwcGVuZENoaWxkKGxlZnRDb250ZW50cyxlYyk7CiAgICAgICAgICAg
ICAgICAgbGVmdENvbnRlbnRzID0gbGVmdENvbnRlbnRzUGFyZW50OwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBOb2RlICpuZXh0OworICAgICAgICAgICAgTm9kZSogbmV4dDsKICAgICAg
ICAgICAgIGZvciAoOyBuOyBuID0gbmV4dCkgewogICAgICAgICAgICAgICAgIG5leHQgPSBuLT5u
ZXh0U2libGluZygpOwogICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gRVhUUkFDVF9DT05U
RU5UUykKQEAgLTgxMCw0NiArNzg1LDQ2IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
UmFuZ2U6OnByb2MKICAgICB9CiAKICAgICBSZWZQdHI8Tm9kZT4gcmlnaHRDb250ZW50cyA9IDA7
Ci0gICAgaWYgKG1fZW5kQ29udGFpbmVyICE9IGNtblJvb3QpIHsKKyAgICBpZiAobV9lbmQuY29u
dGFpbmVyICE9IGNvbW1vblJvb3QpIHsKICAgICAgICAgLy8gZGVsZXRlIHRoZSByaWdodC1oYW5k
IHNpZGUgb2YgdGhlIHJhbmdlLCB1cCB1bnRpbCB0aGUgbGFzdCBhbmNlc3RvciBvZgotICAgICAg
ICAvLyBtX2VuZENvbnRhaW5lciBiZWZvcmUgY21uUm9vdAotICAgICAgICBpZihtX2VuZENvbnRh
aW5lci0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUgfHwKLSAgICAgICAgICAgbV9lbmRD
b250YWluZXItPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFIHx8Ci0gICAg
ICAgICAgIG1fZW5kQ29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERSkg
eworICAgICAgICAvLyBtX2VuZC5jb250YWluZXIgYmVmb3JlIGNvbW1vblJvb3QKKyAgICAgICAg
aWYgKG1fZW5kLmNvbnRhaW5lci0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUgfHwKKyAg
ICAgICAgICAgIG1fZW5kLmNvbnRhaW5lci0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNU
SU9OX05PREUgfHwKKyAgICAgICAgICAgIG1fZW5kLmNvbnRhaW5lci0+bm9kZVR5cGUoKSA9PSBO
b2RlOjpDT01NRU5UX05PREUpIHsKIAogICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBFWFRSQUNU
X0NPTlRFTlRTIHx8IGFjdGlvbiA9PSBDTE9ORV9DT05URU5UUykgewotICAgICAgICAgICAgICAg
IFJlZlB0cjxDaGFyYWN0ZXJEYXRhPiBjID0gc3RhdGljX3BvaW50ZXJfY2FzdDxDaGFyYWN0ZXJE
YXRhPihtX2VuZENvbnRhaW5lci0+Y2xvbmVOb2RlKHRydWUpKTsKLSAgICAgICAgICAgICAgICBj
LT5kZWxldGVEYXRhKG1fZW5kT2Zmc2V0LCBzdGF0aWNfY2FzdDxDaGFyYWN0ZXJEYXRhKj4obV9l
bmRDb250YWluZXIuZ2V0KCkpLT5sZW5ndGgoKSAtIG1fZW5kT2Zmc2V0LCBlYyk7CisgICAgICAg
ICAgICAgICAgUmVmUHRyPENoYXJhY3RlckRhdGE+IGMgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PENo
YXJhY3RlckRhdGE+KG1fZW5kLmNvbnRhaW5lci0+Y2xvbmVOb2RlKHRydWUpKTsKKyAgICAgICAg
ICAgICAgICBjLT5kZWxldGVEYXRhKG1fZW5kLm9mZnNldCwgc3RhdGljX2Nhc3Q8Q2hhcmFjdGVy
RGF0YSo+KG1fZW5kLmNvbnRhaW5lci5nZXQoKSktPmxlbmd0aCgpIC0gbV9lbmQub2Zmc2V0LCBl
Yyk7CiAgICAgICAgICAgICAgICAgcmlnaHRDb250ZW50cyA9IGM7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoYWN0aW9uID09IEVYVFJBQ1RfQ09OVEVOVFMgfHwgYWN0aW9uID09IERF
TEVURV9DT05URU5UUykgewotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENoYXJhY3RlckRh
dGEqPihtX2VuZENvbnRhaW5lci5nZXQoKSktPmRlbGV0ZURhdGEoMCwgbV9lbmRPZmZzZXQsIGVj
KTsKLSAgICAgICAgICAgICAgICBtX3N0YXJ0Q29udGFpbmVyLT5kb2N1bWVudCgpLT51cGRhdGVM
YXlvdXQoKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDaGFyYWN0ZXJEYXRhKj4obV9l
bmQuY29udGFpbmVyLmdldCgpKS0+ZGVsZXRlRGF0YSgwLCBtX2VuZC5vZmZzZXQsIGVjKTsKKyAg
ICAgICAgICAgICAgICBtX3N0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobV9lbmRDb250
YWluZXItPm5vZGVUeXBlKCkgPT0gTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKSB7
CisgICAgICAgIGVsc2UgaWYgKG1fZW5kLmNvbnRhaW5lci0+bm9kZVR5cGUoKSA9PSBOb2RlOjpQ
Uk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpIHsKICAgICAgICAgICAgIGlmIChhY3Rpb24gPT0g
RVhUUkFDVF9DT05URU5UUyB8fCBhY3Rpb24gPT0gQ0xPTkVfQ09OVEVOVFMpIHsKLSAgICAgICAg
ICAgICAgICBSZWZQdHI8UHJvY2Vzc2luZ0luc3RydWN0aW9uPiBjID0gc3RhdGljX3BvaW50ZXJf
Y2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+KG1fZW5kQ29udGFpbmVyLT5jbG9uZU5vZGUodHJ1
ZSkpOwotICAgICAgICAgICAgICAgIGMtPnNldERhdGEoYy0+ZGF0YSgpLmxlZnQobV9lbmRPZmZz
ZXQpLCBlYyk7CisgICAgICAgICAgICAgICAgUmVmUHRyPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4g
YyA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uPihtX2VuZC5jb250
YWluZXItPmNsb25lTm9kZSh0cnVlKSk7CisgICAgICAgICAgICAgICAgYy0+c2V0RGF0YShjLT5k
YXRhKCkubGVmdChtX2VuZC5vZmZzZXQpLCBlYyk7CiAgICAgICAgICAgICAgICAgcmlnaHRDb250
ZW50cyA9IGMucmVsZWFzZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGFjdGlv
biA9PSBFWFRSQUNUX0NPTlRFTlRTIHx8IGFjdGlvbiA9PSBERUxFVEVfQ09OVEVOVFMpIHsKLSAg
ICAgICAgICAgICAgICBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHBpPSBzdGF0aWNfY2FzdDxQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24qPihtX2VuZENvbnRhaW5lci5nZXQoKSk7Ci0gICAgICAgICAgICAg
ICAgcGktPnNldERhdGEocGktPmRhdGEoKS5zdWJzdHJpbmcobV9lbmRPZmZzZXQpLCBlYyk7Cisg
ICAgICAgICAgICAgICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uKiBwaT0gc3RhdGljX2Nhc3Q8UHJv
Y2Vzc2luZ0luc3RydWN0aW9uKj4obV9lbmQuY29udGFpbmVyLmdldCgpKTsKKyAgICAgICAgICAg
ICAgICBwaS0+c2V0RGF0YShwaS0+ZGF0YSgpLnN1YnN0cmluZyhtX2VuZC5vZmZzZXQpLCBlYyk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBp
ZiAoYWN0aW9uID09IEVYVFJBQ1RfQ09OVEVOVFMgfHwgYWN0aW9uID09IENMT05FX0NPTlRFTlRT
KQotICAgICAgICAgICAgICAgIHJpZ2h0Q29udGVudHMgPSBtX2VuZENvbnRhaW5lci0+Y2xvbmVO
b2RlKGZhbHNlKTsKLSAgICAgICAgICAgIE5vZGUgKm4gPSBtX2VuZENvbnRhaW5lci0+Zmlyc3RD
aGlsZCgpOwotICAgICAgICAgICAgaWYgKG4gJiYgbV9lbmRPZmZzZXQpIHsKLSAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpKzEgPCBtX2VuZE9mZnNldDsgaSsrKSB7IC8vIHNr
aXAgdG8gbV9lbmRPZmZzZXQKLSAgICAgICAgICAgICAgICAgICAgTm9kZSAqbmV4dCA9IG4tPm5l
eHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgcmlnaHRDb250ZW50cyA9IG1fZW5kLmNvbnRh
aW5lci0+Y2xvbmVOb2RlKGZhbHNlKTsKKyAgICAgICAgICAgIE5vZGUqIG4gPSBtX2VuZC5jb250
YWluZXItPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgIGlmIChuICYmIG1fZW5kLm9mZnNldCkg
eworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpKzEgPCBtX2VuZC5vZmZzZXQ7IGkr
KykgeyAvLyBza2lwIHRvIG1fZW5kLm9mZnNldAorICAgICAgICAgICAgICAgICAgICBOb2RlKiBu
ZXh0ID0gbi0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0KQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIG4gPSBu
ZXh0OwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBOb2RlICpwcmV2OworICAg
ICAgICAgICAgICAgIE5vZGUqIHByZXY7CiAgICAgICAgICAgICAgICAgZm9yICg7IG47IG4gPSBw
cmV2KSB7CiAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBFWFRSQUNUX0NPTlRFTlRTKQpAQCAt
ODU3LDIxICs4MzIsMjEgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5nZTo6cHJv
YwogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhY3Rpb24gPT0gQ0xPTkVfQ09OVEVOVFMp
CiAgICAgICAgICAgICAgICAgICAgICAgICByaWdodENvbnRlbnRzLT5pbnNlcnRCZWZvcmUobi0+
Y2xvbmVOb2RlKHRydWUpLHJpZ2h0Q29udGVudHMtPmZpcnN0Q2hpbGQoKSxlYyk7CiAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZW5kQ29udGFpbmVy
LT5yZW1vdmVDaGlsZChuLGVjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZW5kLmNvbnRh
aW5lci0+cmVtb3ZlQ2hpbGQobixlYyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgTm9kZSAqcmlnaHRQYXJlbnQgPSBtX2VuZENvbnRhaW5l
ci0+cGFyZW50Tm9kZSgpOwotICAgICAgICBOb2RlICpuID0gbV9lbmRDb250YWluZXItPnByZXZp
b3VzU2libGluZygpOwotICAgICAgICBmb3IgKDsgcmlnaHRQYXJlbnQgIT0gY21uUm9vdDsgcmln
aHRQYXJlbnQgPSByaWdodFBhcmVudC0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIE5vZGUqIHJp
Z2h0UGFyZW50ID0gbV9lbmQuY29udGFpbmVyLT5wYXJlbnROb2RlKCk7CisgICAgICAgIE5vZGUq
IG4gPSBtX2VuZC5jb250YWluZXItPnByZXZpb3VzU2libGluZygpOworICAgICAgICBmb3IgKDsg
cmlnaHRQYXJlbnQgIT0gY29tbW9uUm9vdDsgcmlnaHRQYXJlbnQgPSByaWdodFBhcmVudC0+cGFy
ZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAoYWN0aW9uID09IEVYVFJBQ1RfQ09OVEVOVFMg
fHwgYWN0aW9uID09IENMT05FX0NPTlRFTlRTKSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPE5v
ZGU+IHJpZ2h0Q29udGVudHNQYXJlbnQgPSByaWdodFBhcmVudC0+Y2xvbmVOb2RlKGZhbHNlKTsK
ICAgICAgICAgICAgICAgICByaWdodENvbnRlbnRzUGFyZW50LT5hcHBlbmRDaGlsZChyaWdodENv
bnRlbnRzLGVjKTsKICAgICAgICAgICAgICAgICByaWdodENvbnRlbnRzID0gcmlnaHRDb250ZW50
c1BhcmVudDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgTm9kZSAqcHJldjsKKyAgICAg
ICAgICAgIE5vZGUqIHByZXY7CiAgICAgICAgICAgICBmb3IgKDsgbjsgbiA9IHByZXYpIHsKICAg
ICAgICAgICAgICAgICBwcmV2ID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKGFjdGlvbiA9PSBFWFRSQUNUX0NPTlRFTlRTKQpAQCAtODg1LDMxICs4NjAsMzEgQEAg
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5nZTo6cHJvYwogICAgICAgICB9CiAgICAg
fQogCi0gICAgLy8gZGVsZXRlIGFsbCBjaGlsZHJlbiBvZiBjbW5Sb290IGJldHdlZW4gdGhlIHN0
YXJ0IGFuZCBlbmQgY29udGFpbmVyCisgICAgLy8gZGVsZXRlIGFsbCBjaGlsZHJlbiBvZiBjb21t
b25Sb290IGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgY29udGFpbmVyCiAKLSAgICBOb2RlICpw
cm9jZXNzU3RhcnQ7IC8vIGNoaWxkIG9mIGNtblJvb290Ci0gICAgaWYgKG1fc3RhcnRDb250YWlu
ZXIgPT0gY21uUm9vdCkgewotICAgICAgICB1bnNpZ25lZCBpOwotICAgICAgICBwcm9jZXNzU3Rh
cnQgPSBtX3N0YXJ0Q29udGFpbmVyLT5maXJzdENoaWxkKCk7Ci0gICAgICAgIGZvciAoaSA9IDA7
IGkgPCBtX3N0YXJ0T2Zmc2V0OyBpKyspCisgICAgTm9kZSogcHJvY2Vzc1N0YXJ0OyAvLyBjaGls
ZCBvZiBjb21tb25Sb290CisgICAgaWYgKG1fc3RhcnQuY29udGFpbmVyID09IGNvbW1vblJvb3Qp
IHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIHByb2Nlc3NTdGFydCA9IG1fc3RhcnQuY29udGFp
bmVyLT5maXJzdENoaWxkKCk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtX3N0YXJ0Lm9mZnNl
dDsgaSsrKQogICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0ID0gcHJvY2Vzc1N0YXJ0LT5uZXh0U2li
bGluZygpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgcHJvY2Vzc1N0YXJ0ID0gbV9zdGFy
dENvbnRhaW5lci5nZXQoKTsKLSAgICAgICAgd2hpbGUgKHByb2Nlc3NTdGFydC0+cGFyZW50Tm9k
ZSgpICE9IGNtblJvb3QpCisgICAgICAgIHByb2Nlc3NTdGFydCA9IG1fc3RhcnQuY29udGFpbmVy
LmdldCgpOworICAgICAgICB3aGlsZSAocHJvY2Vzc1N0YXJ0LT5wYXJlbnROb2RlKCkgIT0gY29t
bW9uUm9vdCkKICAgICAgICAgICAgIHByb2Nlc3NTdGFydCA9IHByb2Nlc3NTdGFydC0+cGFyZW50
Tm9kZSgpOwogICAgICAgICBwcm9jZXNzU3RhcnQgPSBwcm9jZXNzU3RhcnQtPm5leHRTaWJsaW5n
KCk7CiAgICAgfQotICAgIE5vZGUgKnByb2Nlc3NFbmQ7IC8vIGNoaWxkIG9mIGNtblJvb290Ci0g
ICAgaWYgKG1fZW5kQ29udGFpbmVyID09IGNtblJvb3QpIHsKLSAgICAgICAgdW5zaWduZWQgaTsK
LSAgICAgICAgcHJvY2Vzc0VuZCA9IG1fZW5kQ29udGFpbmVyLT5maXJzdENoaWxkKCk7Ci0gICAg
ICAgIGZvciAoaSA9IDA7IGkgPCBtX2VuZE9mZnNldDsgaSsrKQorICAgIE5vZGUqIHByb2Nlc3NF
bmQ7IC8vIGNoaWxkIG9mIGNvbW1vblJvb3QKKyAgICBpZiAobV9lbmQuY29udGFpbmVyID09IGNv
bW1vblJvb3QpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIHByb2Nlc3NFbmQgPSBtX2VuZC5j
b250YWluZXItPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG1fZW5kLm9m
ZnNldDsgaSsrKQogICAgICAgICAgICAgcHJvY2Vzc0VuZCA9IHByb2Nlc3NFbmQtPm5leHRTaWJs
aW5nKCk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBwcm9jZXNzRW5kID0gbV9lbmRDb250
YWluZXIuZ2V0KCk7Ci0gICAgICAgIHdoaWxlIChwcm9jZXNzRW5kLT5wYXJlbnROb2RlKCkgIT0g
Y21uUm9vdCkKKyAgICAgICAgcHJvY2Vzc0VuZCA9IG1fZW5kLmNvbnRhaW5lci5nZXQoKTsKKyAg
ICAgICAgd2hpbGUgKHByb2Nlc3NFbmQtPnBhcmVudE5vZGUoKSAhPSBjb21tb25Sb290KQogICAg
ICAgICAgICAgcHJvY2Vzc0VuZCA9IHByb2Nlc3NFbmQtPnBhcmVudE5vZGUoKTsKICAgICB9CiAK
QEAgLTkxOSwxOCArODk0LDE4IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUmFuZ2U6
OnByb2MKICAgICBpZiAoKGFjdGlvbiA9PSBFWFRSQUNUX0NPTlRFTlRTIHx8IGFjdGlvbiA9PSBD
TE9ORV9DT05URU5UUykgJiYgbGVmdENvbnRlbnRzKQogICAgICAgZnJhZ21lbnQtPmFwcGVuZENo
aWxkKGxlZnRDb250ZW50cyxlYyk7CiAKLSAgICBOb2RlICpuZXh0OwotICAgIE5vZGUgKm47Cisg
ICAgTm9kZSogbmV4dDsKKyAgICBOb2RlKiBuOwogICAgIGlmIChwcm9jZXNzU3RhcnQpIHsKICAg
ICAgICAgZm9yIChuID0gcHJvY2Vzc1N0YXJ0OyBuICYmIG4gIT0gcHJvY2Vzc0VuZDsgbiA9IG5l
eHQpIHsKICAgICAgICAgICAgIG5leHQgPSBuLT5uZXh0U2libGluZygpOwogCiAgICAgICAgICAg
ICBpZiAoYWN0aW9uID09IEVYVFJBQ1RfQ09OVEVOVFMpCi0gICAgICAgICAgICAgICAgZnJhZ21l
bnQtPmFwcGVuZENoaWxkKG4sZWMpOyAvLyB3aWxsIHJlbW92ZSBmcm9tIGNtblJvb3QKKyAgICAg
ICAgICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQobixlYyk7IC8vIHdpbGwgcmVtb3ZlIGZy
b20gY29tbW9uUm9vdAogICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uID09IENMT05FX0NPTlRF
TlRTKQogICAgICAgICAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChuLT5jbG9uZU5vZGUo
dHJ1ZSksZWMpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNtblJvb3QtPnJl
bW92ZUNoaWxkKG4sZWMpOworICAgICAgICAgICAgICAgIGNvbW1vblJvb3QtPnJlbW92ZUNoaWxk
KG4sZWMpOwogICAgICAgICB9CiAgICAgfQogCkBAIC05NDIsMTQgKzkxNywxNCBAQCBQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IFJhbmdlOjpwcm9jCiAgICAgICAgIGlmICghcGFydGlhbFN0
YXJ0ICYmICFwYXJ0aWFsRW5kKQogICAgICAgICAgICAgY29sbGFwc2UodHJ1ZSxlYyk7CiAgICAg
ICAgIGVsc2UgaWYgKHBhcnRpYWxTdGFydCkgewotICAgICAgICAgICAgbV9zdGFydENvbnRhaW5l
ciA9IHBhcnRpYWxTdGFydC0+cGFyZW50Tm9kZSgpOwotICAgICAgICAgICAgbV9lbmRDb250YWlu
ZXIgPSBwYXJ0aWFsU3RhcnQtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgIG1fc3RhcnRPZmZz
ZXQgPSBtX2VuZE9mZnNldCA9IHBhcnRpYWxTdGFydC0+bm9kZUluZGV4KCkrMTsKKyAgICAgICAg
ICAgIG1fc3RhcnQuY29udGFpbmVyID0gcGFydGlhbFN0YXJ0LT5wYXJlbnROb2RlKCk7CisgICAg
ICAgICAgICBtX2VuZC5jb250YWluZXIgPSBwYXJ0aWFsU3RhcnQtPnBhcmVudE5vZGUoKTsKKyAg
ICAgICAgICAgIG1fc3RhcnQub2Zmc2V0ID0gbV9lbmQub2Zmc2V0ID0gcGFydGlhbFN0YXJ0LT5u
b2RlSW5kZXgoKSArIDE7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAocGFydGlhbEVuZCkg
ewotICAgICAgICAgICAgbV9zdGFydENvbnRhaW5lciA9IHBhcnRpYWxFbmQtPnBhcmVudE5vZGUo
KTsKLSAgICAgICAgICAgIG1fZW5kQ29udGFpbmVyID0gcGFydGlhbEVuZC0+cGFyZW50Tm9kZSgp
OwotICAgICAgICAgICAgbV9zdGFydE9mZnNldCA9IG1fZW5kT2Zmc2V0ID0gcGFydGlhbEVuZC0+
bm9kZUluZGV4KCk7CisgICAgICAgICAgICBtX3N0YXJ0LmNvbnRhaW5lciA9IHBhcnRpYWxFbmQt
PnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIG1fZW5kLmNvbnRhaW5lciA9IHBhcnRpYWxFbmQt
PnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIG1fc3RhcnQub2Zmc2V0ID0gbV9lbmQub2Zmc2V0
ID0gcGFydGlhbEVuZC0+bm9kZUluZGV4KCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJu
IGZyYWdtZW50LnJlbGVhc2UoKTsKQEAgLTk1OCw3ICs5MzMsNyBAQCBQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IFJhbmdlOjpwcm9jCiAKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
UmFuZ2U6OmV4dHJhY3RDb250ZW50cyhFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAobV9k
ZXRhY2hlZCkgeworICAgIGlmICghbV9zdGFydC5jb250YWluZXIpIHsKICAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtOTcxLDkgKzk0
Niw5IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUmFuZ2U6OmV4dHIKICAgICByZXR1
cm4gcHJvY2Vzc0NvbnRlbnRzKEVYVFJBQ1RfQ09OVEVOVFMsZWMpOwogfQogCi1QYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IFJhbmdlOjpjbG9uZUNvbnRlbnRzKCBpbnQgJmVjICApCitQYXNz
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFJhbmdlOjpjbG9uZUNvbnRlbnRzKEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewotICAgIGlmIChtX2RldGFjaGVkKSB7CisgICAgaWYgKCFtX3N0YXJ0LmNvbnRh
aW5lcikgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9CkBAIC05ODUsNyArOTYwLDcgQEAgdm9pZCBSYW5nZTo6aW5zZXJ0Tm9kZShQYXNz
UmVmUHRyPE5vZGU+IAogewogICAgIGVjID0gMDsKIAotICAgIGlmIChtX2RldGFjaGVkKSB7Cisg
ICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lcikgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVf
RVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTAwNCwzMyArOTc5LDMxIEBAIHZvaWQg
UmFuZ2U6Omluc2VydE5vZGUoUGFzc1JlZlB0cjxOb2RlPiAKIAogICAgIC8vIFdST05HX0RPQ1VN
RU5UX0VSUjogUmFpc2VkIGlmIG5ld1BhcmVudCBhbmQgdGhlIGNvbnRhaW5lciBvZiB0aGUgc3Rh
cnQgb2YgdGhlIFJhbmdlIHdlcmUKICAgICAvLyBub3QgY3JlYXRlZCBmcm9tIHRoZSBzYW1lIGRv
Y3VtZW50LgotICAgIGlmIChuZXdOb2RlLT5kb2N1bWVudCgpICE9IG1fc3RhcnRDb250YWluZXIt
PmRvY3VtZW50KCkpIHsKKyAgICBpZiAobmV3Tm9kZS0+ZG9jdW1lbnQoKSAhPSBtX3N0YXJ0LmNv
bnRhaW5lci0+ZG9jdW1lbnQoKSkgewogICAgICAgICBlYyA9IFdST05HX0RPQ1VNRU5UX0VSUjsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotCiAgICAgLy8gSElFUkFSQ0hZX1JFUVVFU1RfRVJS
OiBSYWlzZWQgaWYgdGhlIGNvbnRhaW5lciBvZiB0aGUgc3RhcnQgb2YgdGhlIFJhbmdlIGlzIG9m
IGEgdHlwZSB0aGF0CiAgICAgLy8gZG9lcyBub3QgYWxsb3cgY2hpbGRyZW4gb2YgdGhlIHR5cGUg
b2YgbmV3Tm9kZSBvciBpZiBuZXdOb2RlIGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBjb250YWluZXIu
CiAKICAgICAvLyBhbiBleHRyYSBvbmUgaGVyZSAtIGlmIGEgdGV4dCBub2RlIGlzIGdvaW5nIHRv
IHNwbGl0LCBpdCBtdXN0IGhhdmUgYSBwYXJlbnQgdG8gaW5zZXJ0IGludG8KLSAgICBpZiAobV9z
dGFydENvbnRhaW5lci0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUgJiYgIW1fc3RhcnRD
b250YWluZXItPnBhcmVudE5vZGUoKSkgeworICAgIGlmIChtX3N0YXJ0LmNvbnRhaW5lci0+bm9k
ZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUgJiYgIW1fc3RhcnQuY29udGFpbmVyLT5wYXJlbnRO
b2RlKCkpIHsKICAgICAgICAgZWMgPSBISUVSQVJDSFlfUkVRVUVTVF9FUlI7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICAvLyBJbiB0aGUgY2FzZSB3aGVyZSB0aGUgY29udGFpbmVyIGlz
IGEgdGV4dCBub2RlLCB3ZSBjaGVjayBhZ2FpbnN0IHRoZSBjb250YWluZXIncyBwYXJlbnQsIGJl
Y2F1c2UKICAgICAvLyB0ZXh0IG5vZGVzIGdldCBzcGxpdCB1cCB1cG9uIGluc2VydGlvbi4KLSAg
ICBOb2RlICpjaGVja0FnYWluc3Q7Ci0gICAgaWYgKG1fc3RhcnRDb250YWluZXItPm5vZGVUeXBl
KCkgPT0gTm9kZTo6VEVYVF9OT0RFKQotICAgICAgICBjaGVja0FnYWluc3QgPSBtX3N0YXJ0Q29u
dGFpbmVyLT5wYXJlbnROb2RlKCk7CisgICAgTm9kZSogY2hlY2tBZ2FpbnN0OworICAgIGlmICht
X3N0YXJ0LmNvbnRhaW5lci0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUpCisgICAgICAg
IGNoZWNrQWdhaW5zdCA9IG1fc3RhcnQuY29udGFpbmVyLT5wYXJlbnROb2RlKCk7CiAgICAgZWxz
ZQotICAgICAgICBjaGVja0FnYWluc3QgPSBtX3N0YXJ0Q29udGFpbmVyLmdldCgpOworICAgICAg
ICBjaGVja0FnYWluc3QgPSBtX3N0YXJ0LmNvbnRhaW5lci5nZXQoKTsKIAogICAgIGlmIChuZXdO
b2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpIHsKICAgICAg
ICAgLy8gY2hlY2sgZWFjaCBjaGlsZCBub2RlLCBub3QgdGhlIERvY3VtZW50RnJhZ21lbnQgaXRz
ZWxmCi0gICAgICAgIE5vZGUgKmM7Ci0gICAgICAgIGZvciAoYyA9IG5ld05vZGUtPmZpcnN0Q2hp
bGQoKTsgYzsgYyA9IGMtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBjID0g
bmV3Tm9kZS0+Zmlyc3RDaGlsZCgpOyBjOyBjID0gYy0+bmV4dFNpYmxpbmcoKSkgewogICAgICAg
ICAgICAgaWYgKCFjaGVja0FnYWluc3QtPmNoaWxkVHlwZUFsbG93ZWQoYy0+bm9kZVR5cGUoKSkp
IHsKICAgICAgICAgICAgICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKICAgICAgICAg
ICAgICAgICByZXR1cm47CkBAIC0xMDQzLDcgKzEwMTYsNyBAQCB2b2lkIFJhbmdlOjppbnNlcnRO
b2RlKFBhc3NSZWZQdHI8Tm9kZT4gCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKE5vZGUg
Km4gPSBtX3N0YXJ0Q29udGFpbmVyLmdldCgpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7Cisg
ICAgZm9yIChOb2RlKiBuID0gbV9zdGFydC5jb250YWluZXIuZ2V0KCk7IG47IG4gPSBuLT5wYXJl
bnROb2RlKCkpIHsKICAgICAgICAgaWYgKG4gPT0gbmV3Tm9kZSkgewogICAgICAgICAgICAgZWMg
PSBISUVSQVJDSFlfUkVRVUVTVF9FUlI7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMDYwLDQ4
ICsxMDMzLDQ2IEBAIHZvaWQgUmFuZ2U6Omluc2VydE5vZGUoUGFzc1JlZlB0cjxOb2RlPiAKICAg
ICB9CiAKICAgICB1bnNpZ25lZCBlbmRPZmZzZXREZWx0YSA9IDA7Ci0gICAgaWYgKG1fc3RhcnRD
b250YWluZXItPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFIHx8Ci0gICAgICAgIG1fc3Rh
cnRDb250YWluZXItPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFKSB7Ci0g
ICAgICAgIFJlZlB0cjxUZXh0PiBuZXdUZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG1fc3RhcnRD
b250YWluZXIuZ2V0KCkpLT5zcGxpdFRleHQobV9zdGFydE9mZnNldCwgZWMpOworICAgIGlmICht
X3N0YXJ0LmNvbnRhaW5lci0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUgfHwKKyAgICAg
ICAgbV9zdGFydC5jb250YWluZXItPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9O
T0RFKSB7CisgICAgICAgIFJlZlB0cjxUZXh0PiBuZXdUZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+
KG1fc3RhcnQuY29udGFpbmVyLmdldCgpKS0+c3BsaXRUZXh0KG1fc3RhcnQub2Zmc2V0LCBlYyk7
CiAgICAgICAgIGlmIChlYykKICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAobV9z
dGFydENvbnRhaW5lciA9PSBtX2VuZENvbnRhaW5lcikKLSAgICAgICAgICAgIGVuZE9mZnNldERl
bHRhID0gLW1fc3RhcnRPZmZzZXQ7Ci0KLSAgICAgICAgbV9zdGFydENvbnRhaW5lci0+cGFyZW50
Tm9kZSgpLT5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgbmV3VGV4dC5nZXQoKSwgZWMpOworICAgICAg
ICBpZiAobV9zdGFydC5jb250YWluZXIgPT0gbV9lbmQuY29udGFpbmVyKQorICAgICAgICAgICAg
ZW5kT2Zmc2V0RGVsdGEgPSAtbV9zdGFydC5vZmZzZXQ7CisgICAgICAgIG1fc3RhcnQuY29udGFp
bmVyLT5wYXJlbnROb2RlKCktPmluc2VydEJlZm9yZShuZXdOb2RlLCBuZXdUZXh0LmdldCgpLCBl
Yyk7CiAgICAgICAgIGlmIChlYykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9lbmRD
b250YWluZXIgPSBuZXdUZXh0OworICAgICAgICBtX2VuZC5jb250YWluZXIgPSBuZXdUZXh0Owog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX3N0YXJ0Q29udGFpbmVyID09IG1fZW5kQ29udGFp
bmVyKSB7CisgICAgICAgIGlmIChtX3N0YXJ0LmNvbnRhaW5lciA9PSBtX2VuZC5jb250YWluZXIp
IHsKICAgICAgICAgICAgIGJvb2wgaXNGcmFnbWVudCA9IG5ld05vZGUtPm5vZGVUeXBlKCkgPT0g
Tm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERTsKICAgICAgICAgICAgIGVuZE9mZnNldERlbHRh
ID0gaXNGcmFnbWVudCA/IG5ld05vZGUtPmNoaWxkTm9kZUNvdW50KCkgOiAxOwogICAgICAgICB9
CiAKLSAgICAgICAgbV9zdGFydENvbnRhaW5lci0+aW5zZXJ0QmVmb3JlKG5ld05vZGUsIG1fc3Rh
cnRDb250YWluZXItPmNoaWxkTm9kZShtX3N0YXJ0T2Zmc2V0KSwgZWMpOworICAgICAgICBtX3N0
YXJ0LmNvbnRhaW5lci0+aW5zZXJ0QmVmb3JlKG5ld05vZGUsIG1fc3RhcnQuY29udGFpbmVyLT5j
aGlsZE5vZGUobV9zdGFydC5vZmZzZXQpLCBlYyk7CiAgICAgICAgIGlmIChlYykKICAgICAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9lbmRPZmZzZXQgKz0gZW5kT2Zmc2V0RGVsdGE7Cisg
ICAgbV9lbmQub2Zmc2V0ICs9IGVuZE9mZnNldERlbHRhOwogfQogCiBTdHJpbmcgUmFuZ2U6OnRv
U3RyaW5nKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIGlmIChtX2RldGFjaGVkKSB7
CisgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lcikgewogICAgICAgICBlYyA9IElOVkFMSURfU1RB
VEVfRVJSOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQogCiAgICAgVmVjdG9yPFVD
aGFyPiByZXN1bHQ7CiAKLSAgICBOb2RlKiBwYXN0RW5kID0gcGFzdEVuZE5vZGUoKTsKLSAgICBm
b3IgKE5vZGUqIG4gPSBzdGFydE5vZGUoKTsgbiAhPSBwYXN0RW5kOyBuID0gbi0+dHJhdmVyc2VO
ZXh0Tm9kZSgpKSB7CisgICAgTm9kZSogcGFzdEVuZCA9IHBhc3RMYXN0Tm9kZSgpOworICAgIGZv
ciAoTm9kZSogbiA9IGZpcnN0Tm9kZSgpOyBuICE9IHBhc3RFbmQ7IG4gPSBuLT50cmF2ZXJzZU5l
eHROb2RlKCkpIHsKICAgICAgICAgaWYgKG4tPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RF
IHx8IG4tPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFKSB7CiAgICAgICAg
ICAgICBTdHJpbmcgZGF0YSA9IHN0YXRpY19jYXN0PENoYXJhY3RlckRhdGEqPihuKS0+ZGF0YSgp
OwotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gZGF0YS5sZW5ndGgoKTsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHN0YXJ0ID0gKG4gPT0gbV9zdGFydENvbnRhaW5lcikgPyBtaW4obV9zdGFy
dE9mZnNldCwgbGVuZ3RoKSA6IDA7Ci0gICAgICAgICAgICB1bnNpZ25lZCBlbmQgPSAobiA9PSBt
X2VuZENvbnRhaW5lcikgPyBtaW4obWF4KHN0YXJ0LCBtX2VuZE9mZnNldCksIGxlbmd0aCkgOiBs
ZW5ndGg7CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gZGF0YS5sZW5ndGgoKTsKKyAgICAgICAg
ICAgIGludCBzdGFydCA9IChuID09IG1fc3RhcnQuY29udGFpbmVyKSA/IG1pbihtYXgoMCwgbV9z
dGFydC5vZmZzZXQpLCBsZW5ndGgpIDogMDsKKyAgICAgICAgICAgIGludCBlbmQgPSAobiA9PSBt
X2VuZC5jb250YWluZXIpID8gbWluKG1heChzdGFydCwgbV9lbmQub2Zmc2V0KSwgbGVuZ3RoKSA6
IGxlbmd0aDsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGF0YS5jaGFyYWN0ZXJzKCkgKyBz
dGFydCwgZW5kIC0gc3RhcnQpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTExNiwzMSArMTA4Nywz
MCBAQCBTdHJpbmcgUmFuZ2U6OnRvSFRNTCgpIGNvbnN0CiAKIFN0cmluZyBSYW5nZTo6dGV4dCgp
IGNvbnN0CiB7Ci0gICAgaWYgKG1fZGV0YWNoZWQpCisgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5l
cikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUg
bGF5b3V0LCBzaW5jZSBwbGFpblRleHQgdXNlcyBsaW5lIGJveGVzIGluIHRoZSByZW5kZXIgdHJl
ZS4KICAgICAvLyBGSVhNRTogQXMgd2l0aCBpbm5lclRleHQsIHdlJ2QgbGlrZSB0aGlzIHRvIHdv
cmsgZXZlbiBpZiB0aGVyZSBhcmUgbm8gcmVuZGVyIG9iamVjdHMuCi0gICAgbV9zdGFydENvbnRh
aW5lci0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CisgICAgbV9zdGFydC5jb250YWluZXIt
PmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogCi0gICAgLy8gRklYTUU6IE1heWJlIERPTVJh
bmdlIGNvbnN0cnVjdG9yIHNob3VsZCB0YWtlIGNvbnN0IERPTVJhbmdlKjsgaWYgaXQgZGlkIHdl
IHdvdWxkIG5vdCBuZWVkIHRoaXMgY29uc3RfY2FzdC4KLSAgICByZXR1cm4gcGxhaW5UZXh0KGNv
bnN0X2Nhc3Q8UmFuZ2UgKj4odGhpcykpOworICAgIHJldHVybiBwbGFpblRleHQodGhpcyk7CiB9
CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxG
cmFnbWVudChjb25zdCBTdHJpbmcgJmh0bWwsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50
KGNvbnN0IFN0cmluZyYgbWFya3VwLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKLSAgICBp
ZiAobV9kZXRhY2hlZCkgeworICAgIGlmICghbV9zdGFydC5jb250YWluZXIpIHsKICAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAg
Tm9kZSogaHRtbEVsZW1lbnQgPSBtX3N0YXJ0Q29udGFpbmVyLT5pc0hUTUxFbGVtZW50KCkgPyBt
X3N0YXJ0Q29udGFpbmVyLmdldCgpIDogbV9zdGFydENvbnRhaW5lci0+cGFyZW50Tm9kZSgpOwot
ICAgIGlmICghaHRtbEVsZW1lbnQgfHwgIWh0bWxFbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsK
KyAgICBOb2RlKiBlbGVtZW50ID0gbV9zdGFydC5jb250YWluZXItPmlzRWxlbWVudE5vZGUoKSA/
IG1fc3RhcnQuY29udGFpbmVyLmdldCgpIDogbV9zdGFydC5jb250YWluZXItPnBhcmVudE5vZGUo
KTsKKyAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkgewogICAg
ICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
LSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBzdGF0aWNfY2FzdDxIVE1M
RWxlbWVudCo+KGh0bWxFbGVtZW50KS0+Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGh0bWwpOwor
ICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50Kj4oZWxlbWVudCktPmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChtYXJrdXApOwogICAg
IGlmICghZnJhZ21lbnQpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAg
ICAgcmV0dXJuIDA7CkBAIC0xMTUyLDE5ICsxMTIyLDEzIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gUmFuZ2U6OmNyZWEKIAogdm9pZCBSYW5nZTo6ZGV0YWNoKEV4Y2VwdGlvbkNvZGUm
IGVjKQogewotICAgIGlmIChtX2RldGFjaGVkKSB7CisgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5l
cikgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgbV9zdGFydENvbnRhaW5lciA9IDA7Ci0gICAgbV9lbmRDb250YWluZXIgPSAw
OwotICAgIG1fZGV0YWNoZWQgPSB0cnVlOwotfQotCi1ib29sIFJhbmdlOjppc0RldGFjaGVkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9kZXRhY2hlZDsKKyAgICBtX3N0YXJ0LmNsZWFyKCk7Cisg
ICAgbV9lbmQuY2xlYXIoKTsKIH0KIAogdm9pZCBSYW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2Rl
KiBuLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKQEAgLTEyMDMsNDAgKzEx
NjcsNjUgQEAgdm9pZCBSYW5nZTo6Y2hlY2tOb2RlQkEoTm9kZSogbiwgRXhjZXB0aQogICAgIC8v
IElOVkFMSURfTk9ERV9UWVBFX0VSUjogUmFpc2VkIGlmIHRoZSByb290IGNvbnRhaW5lciBvZiBy
ZWZOb2RlIGlzIG5vdCBhbgogICAgIC8vIEF0dHIsIERvY3VtZW50IG9yIERvY3VtZW50RnJhZ21l
bnQgbm9kZSBvciBwYXJ0IG9mIGEgc2hhZG93IERPTSB0cmVlCiAgICAgLy8gb3IgaWYgcmVmTm9k
ZSBpcyBhIERvY3VtZW50LCBEb2N1bWVudEZyYWdtZW50LCBBdHRyLCBFbnRpdHksIG9yIE5vdGF0
aW9uIG5vZGUuCi0gICAgTm9kZSAqcm9vdCA9IG47Ci0gICAgd2hpbGUgKHJvb3QtPnBhcmVudE5v
ZGUoKSkKLSAgICAgICAgcm9vdCA9IHJvb3QtPnBhcmVudE5vZGUoKTsKLQotICAgIGlmICghKHJv
b3QtPm5vZGVUeXBlKCkgPT0gTm9kZTo6QVRUUklCVVRFX05PREUgfHwKLSAgICAgICAgICByb290
LT5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX05PREUgfHwKLSAgICAgICAgICByb290LT5u
b2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUgfHwKLSAgICAgICAgICBy
b290LT5pc1NoYWRvd05vZGUoKSkpIHsKLSAgICAgICAgZWMgPSBSYW5nZUV4Y2VwdGlvbjo6SU5W
QUxJRF9OT0RFX1RZUEVfRVJSOwotICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKG4tPm5v
ZGVUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKKyAgICAgICAg
Y2FzZSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFOgorICAgICAgICBjYXNlIE5vZGU6OkRP
Q1VNRU5UX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6RU5USVRZX05PREU6CisgICAgICAgIGNh
c2UgTm9kZTo6Tk9UQVRJT05fTk9ERToKKyAgICAgICAgICAgIGVjID0gUmFuZ2VFeGNlcHRpb246
OklOVkFMSURfTk9ERV9UWVBFX0VSUjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2Fz
ZSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6Q09NTUVOVF9O
T0RFOgorICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERToKKyAgICAgICAgY2Fz
ZSBOb2RlOjpFTEVNRU5UX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6RU5USVRZX1JFRkVSRU5D
RV9OT0RFOgorICAgICAgICBjYXNlIE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToK
KyAgICAgICAgY2FzZSBOb2RlOjpURVhUX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6WFBBVEhf
TkFNRVNQQUNFX05PREU6CisgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiggbi0+
bm9kZVR5cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9OT0RFIHx8Ci0gICAgICAgIG4tPm5vZGVUeXBl
KCkgPT0gTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERSB8fAotICAgICAgICBuLT5ub2RlVHlw
ZSgpID09IE5vZGU6OkFUVFJJQlVURV9OT0RFIHx8Ci0gICAgICAgIG4tPm5vZGVUeXBlKCkgPT0g
Tm9kZTo6RU5USVRZX05PREUgfHwKLSAgICAgICAgbi0+bm9kZVR5cGUoKSA9PSBOb2RlOjpOT1RB
VElPTl9OT0RFICkKLSAgICAgICAgZWMgPSBSYW5nZUV4Y2VwdGlvbjo6SU5WQUxJRF9OT0RFX1RZ
UEVfRVJSOworICAgIE5vZGUqIHJvb3QgPSBuOworICAgIHdoaWxlIChOb2RlKiBwYXJlbnQgPSBy
b290LT5wYXJlbnROb2RlKCkpCisgICAgICAgIHJvb3QgPSBwYXJlbnQ7CiAKKyAgICBzd2l0Y2gg
KHJvb3QtPm5vZGVUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToK
KyAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9OT0RFOgorICAgICAgICBjYXNlIE5vZGU6OkRP
Q1VNRU5UX0ZSQUdNRU5UX05PREU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBO
b2RlOjpDREFUQV9TRUNUSU9OX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RF
OgorICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERToKKyAgICAgICAgY2FzZSBO
b2RlOjpFTEVNRU5UX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6RU5USVRZX05PREU6CisgICAg
ICAgIGNhc2UgTm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFOgorICAgICAgICBjYXNlIE5vZGU6
Ok5PVEFUSU9OX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElP
Tl9OT0RFOgorICAgICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToKKyAgICAgICAgY2FzZSBOb2Rl
OjpYUEFUSF9OQU1FU1BBQ0VfTk9ERToKKyAgICAgICAgICAgIGlmIChyb290LT5pc1NoYWRvd05v
ZGUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVjID0gUmFuZ2VFeGNl
cHRpb246OklOVkFMSURfTk9ERV9UWVBFX0VSUjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
CiB9CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IFJhbmdlOjpjbG9uZVJhbmdlKEV4Y2VwdGlvbkNvZGUm
IGVjKSBjb25zdAogewotICAgIGlmIChtX2RldGFjaGVkKSB7CisgICAgaWYgKCFtX3N0YXJ0LmNv
bnRhaW5lcikgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gbmV3IFJhbmdlKG1fb3duZXJEb2N1bWVudC5nZXQo
KSwgbV9zdGFydENvbnRhaW5lci5nZXQoKSwgbV9zdGFydE9mZnNldCwgbV9lbmRDb250YWluZXIu
Z2V0KCksIG1fZW5kT2Zmc2V0KTsKKyAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShtX293bmVyRG9j
dW1lbnQsIG1fc3RhcnQuY29udGFpbmVyLCBtX3N0YXJ0Lm9mZnNldCwgbV9lbmQuY29udGFpbmVy
LCBtX2VuZC5vZmZzZXQpOwogfQogCi12b2lkIFJhbmdlOjpzZXRTdGFydEFmdGVyKCBOb2RlICpy
ZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNldFN0YXJ0QWZ0ZXIoTm9k
ZSogcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKG1fZGV0YWNoZWQpIHsK
KyAgICBpZiAoIW1fc3RhcnQuY29udGFpbmVyKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFU
RV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMjUyLDE2ICsxMjQxLDE2IEBAIHZv
aWQgUmFuZ2U6OnNldFN0YXJ0QWZ0ZXIoIE5vZGUgKnJlZk5vZGUKICAgICB9CiAKICAgICBlYyA9
IDA7Ci0gICAgY2hlY2tOb2RlQkEoIHJlZk5vZGUsIGVjICk7CisgICAgY2hlY2tOb2RlQkEocmVm
Tm9kZSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0U3RhcnQo
cmVmTm9kZS0+cGFyZW50Tm9kZSgpLCByZWZOb2RlLT5ub2RlSW5kZXgoKSArIDEsIGVjKTsKIH0K
IAotdm9pZCBSYW5nZTo6c2V0RW5kQmVmb3JlKCBOb2RlICpyZWZOb2RlLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3ZvaWQgUmFuZ2U6OnNldEVuZEJlZm9yZShOb2RlKiByZWZOb2RlLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKLSAgICBpZiAobV9kZXRhY2hlZCkgeworICAgIGlmICghbV9zdGFydC5jb250
YWluZXIpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTEyODQsOSArMTI3Myw5IEBAIHZvaWQgUmFuZ2U6OnNldEVuZEJlZm9yZSgg
Tm9kZSAqcmVmTm9kZSwKICAgICBzZXRFbmQocmVmTm9kZS0+cGFyZW50Tm9kZSgpLCByZWZOb2Rl
LT5ub2RlSW5kZXgoKSwgZWMpOwogfQogCi12b2lkIFJhbmdlOjpzZXRFbmRBZnRlciggTm9kZSAq
cmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFJhbmdlOjpzZXRFbmRBZnRlcihOb2Rl
KiByZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAobV9kZXRhY2hlZCkgewor
ICAgIGlmICghbV9zdGFydC5jb250YWluZXIpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRF
X0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEzMTAsOSArMTI5OSw5IEBAIHZvaWQg
UmFuZ2U6OnNldEVuZEFmdGVyKCBOb2RlICpyZWZOb2RlLCAKIAogfQogCi12b2lkIFJhbmdlOjpz
ZWxlY3ROb2RlKCBOb2RlICpyZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6
OnNlbGVjdE5vZGUoTm9kZSogcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYg
KG1fZGV0YWNoZWQpIHsKKyAgICBpZiAoIW1fc3RhcnQuY29udGFpbmVyKSB7CiAgICAgICAgIGVj
ID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMzI1LDM3
ICsxMzE0LDU2IEBAIHZvaWQgUmFuZ2U6OnNlbGVjdE5vZGUoIE5vZGUgKnJlZk5vZGUsIEUKICAg
ICAvLyBJTlZBTElEX05PREVfVFlQRV9FUlI6IFJhaXNlZCBpZiBhbiBhbmNlc3RvciBvZiByZWZO
b2RlIGlzIGFuIEVudGl0eSwgTm90YXRpb24gb3IKICAgICAvLyBEb2N1bWVudFR5cGUgbm9kZSBv
ciBpZiByZWZOb2RlIGlzIGEgRG9jdW1lbnQsIERvY3VtZW50RnJhZ21lbnQsIEF0dHIsIEVudGl0
eSwgb3IgTm90YXRpb24KICAgICAvLyBub2RlLgotICAgIE5vZGUgKmFuYzsKLSAgICBmb3IgKGFu
YyA9IHJlZk5vZGUtPnBhcmVudE5vZGUoKTsgYW5jOyBhbmMgPSBhbmMtPnBhcmVudE5vZGUoKSkg
ewotICAgICAgICBpZiAoYW5jLT5ub2RlVHlwZSgpID09IE5vZGU6OkVOVElUWV9OT0RFIHx8Ci0g
ICAgICAgICAgICBhbmMtPm5vZGVUeXBlKCkgPT0gTm9kZTo6Tk9UQVRJT05fTk9ERSB8fAotICAg
ICAgICAgICAgYW5jLT5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERSkgewot
Ci0gICAgICAgICAgICBlYyA9IFJhbmdlRXhjZXB0aW9uOjpJTlZBTElEX05PREVfVFlQRV9FUlI7
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgZm9yIChOb2RlKiBhbmMgPSByZWZOb2RlLT5wYXJl
bnROb2RlKCk7IGFuYzsgYW5jID0gYW5jLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgc3dpdGNo
IChhbmMtPm5vZGVUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05P
REU6CisgICAgICAgICAgICBjYXNlIE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERToKKyAgICAgICAg
ICAgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RFOgorICAgICAgICAgICAgY2FzZSBOb2RlOjpET0NV
TUVOVF9GUkFHTUVOVF9OT0RFOgorICAgICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9OT0RF
OgorICAgICAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6CisgICAgICAgICAgICBjYXNl
IE5vZGU6OkVOVElUWV9SRUZFUkVOQ0VfTk9ERToKKyAgICAgICAgICAgIGNhc2UgTm9kZTo6UFJP
Q0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOgorICAgICAgICAgICAgY2FzZSBOb2RlOjpURVhUX05P
REU6CisgICAgICAgICAgICBjYXNlIE5vZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFOgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05P
REU6CisgICAgICAgICAgICBjYXNlIE5vZGU6OkVOVElUWV9OT0RFOgorICAgICAgICAgICAgY2Fz
ZSBOb2RlOjpOT1RBVElPTl9OT0RFOgorICAgICAgICAgICAgICAgIGVjID0gUmFuZ2VFeGNlcHRp
b246OklOVkFMSURfTk9ERV9UWVBFX0VSUjsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBpZiAocmVmTm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpET0NV
TUVOVF9OT0RFIHx8Ci0gICAgICAgIHJlZk5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RE9DVU1F
TlRfRlJBR01FTlRfTk9ERSB8fAotICAgICAgICByZWZOb2RlLT5ub2RlVHlwZSgpID09IE5vZGU6
OkFUVFJJQlVURV9OT0RFIHx8Ci0gICAgICAgIHJlZk5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6
RU5USVRZX05PREUgfHwKLSAgICAgICAgcmVmTm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpOT1RB
VElPTl9OT0RFKSB7Ci0KLSAgICAgICAgZWMgPSBSYW5nZUV4Y2VwdGlvbjo6SU5WQUxJRF9OT0RF
X1RZUEVfRVJSOwotICAgICAgICByZXR1cm47CisgICAgc3dpdGNoIChyZWZOb2RlLT5ub2RlVHlw
ZSgpKSB7CisgICAgICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgorICAgICAgICBj
YXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKKyAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBF
X05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOgorICAgICAgICBjYXNlIE5v
ZGU6OkVOVElUWV9SRUZFUkVOQ0VfTk9ERToKKyAgICAgICAgY2FzZSBOb2RlOjpQUk9DRVNTSU5H
X0lOU1RSVUNUSU9OX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgorICAgICAg
ICBjYXNlIE5vZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFOgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05PREU6CisgICAgICAgIGNhc2UgTm9kZTo6RE9D
VU1FTlRfRlJBR01FTlRfTk9ERToKKyAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9OT0RFOgor
ICAgICAgICBjYXNlIE5vZGU6OkVOVElUWV9OT0RFOgorICAgICAgICBjYXNlIE5vZGU6Ok5PVEFU
SU9OX05PREU6CisgICAgICAgICAgICBlYyA9IFJhbmdlRXhjZXB0aW9uOjpJTlZBTElEX05PREVf
VFlQRV9FUlI7CisgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgZWMgPSAwOwotICAg
IHNldFN0YXJ0QmVmb3JlKCByZWZOb2RlLCBlYyApOworICAgIHNldFN0YXJ0QmVmb3JlKHJlZk5v
ZGUsIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXRFbmRBZnRlcigg
cmVmTm9kZSwgZWMgKTsKKyAgICBzZXRFbmRBZnRlcihyZWZOb2RlLCBlYyk7CiB9CiAKLXZvaWQg
UmFuZ2U6OnNlbGVjdE5vZGVDb250ZW50cyggTm9kZSAqcmVmTm9kZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit2b2lkIFJhbmdlOjpzZWxlY3ROb2RlQ29udGVudHMoTm9kZSogcmVmTm9kZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKG1fZGV0YWNoZWQpIHsKKyAgICBpZiAoIW1fc3RhcnQu
Y29udGFpbmVyKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0xMzY3LDI4ICsxMzc1LDM4IEBAIHZvaWQgUmFuZ2U6OnNlbGVjdE5v
ZGVDb250ZW50cyggTm9kZSAqcmUKIAogICAgIC8vIElOVkFMSURfTk9ERV9UWVBFX0VSUjogUmFp
c2VkIGlmIHJlZk5vZGUgb3IgYW4gYW5jZXN0b3Igb2YgcmVmTm9kZSBpcyBhbiBFbnRpdHksIE5v
dGF0aW9uCiAgICAgLy8gb3IgRG9jdW1lbnRUeXBlIG5vZGUuCi0gICAgTm9kZSAqbjsKLSAgICBm
b3IgKG4gPSByZWZOb2RlOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChu
LT5ub2RlVHlwZSgpID09IE5vZGU6OkVOVElUWV9OT0RFIHx8Ci0gICAgICAgICAgICBuLT5ub2Rl
VHlwZSgpID09IE5vZGU6Ok5PVEFUSU9OX05PREUgfHwKLSAgICAgICAgICAgIG4tPm5vZGVUeXBl
KCkgPT0gTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFKSB7Ci0KLSAgICAgICAgICAgIGVjID0gUmFu
Z2VFeGNlcHRpb246OklOVkFMSURfTk9ERV9UWVBFX0VSUjsKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICBmb3IgKE5vZGUqIG4gPSByZWZOb2RlOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7Cisg
ICAgICAgIHN3aXRjaCAobi0+bm9kZVR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb2RlOjpB
VFRSSUJVVEVfTk9ERToKKyAgICAgICAgICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RF
OgorICAgICAgICAgICAgY2FzZSBOb2RlOjpDT01NRU5UX05PREU6CisgICAgICAgICAgICBjYXNl
IE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6CisgICAgICAgICAgICBjYXNlIE5vZGU6OkRP
Q1VNRU5UX05PREU6CisgICAgICAgICAgICBjYXNlIE5vZGU6OkVMRU1FTlRfTk9ERToKKyAgICAg
ICAgICAgIGNhc2UgTm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFOgorICAgICAgICAgICAgY2Fz
ZSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6CisgICAgICAgICAgICBjYXNlIE5v
ZGU6OlRFWFRfTk9ERToKKyAgICAgICAgICAgIGNhc2UgTm9kZTo6WFBBVEhfTkFNRVNQQUNFX05P
REU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE5vZGU6OkRPQ1VN
RU5UX1RZUEVfTk9ERToKKyAgICAgICAgICAgIGNhc2UgTm9kZTo6RU5USVRZX05PREU6CisgICAg
ICAgICAgICBjYXNlIE5vZGU6Ok5PVEFUSU9OX05PREU6CisgICAgICAgICAgICAgICAgZWMgPSBS
YW5nZUV4Y2VwdGlvbjo6SU5WQUxJRF9OT0RFX1RZUEVfRVJSOworICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fc3RhcnRDb250YWluZXIgPSByZWZOb2Rl
OwotICAgIG1fc3RhcnRPZmZzZXQgPSAwOwotICAgIG1fZW5kQ29udGFpbmVyID0gcmVmTm9kZTsK
LSAgICBtX2VuZE9mZnNldCA9IG1heEVuZE9mZnNldCgpOworICAgIG1fc3RhcnQuY29udGFpbmVy
ID0gcmVmTm9kZTsKKyAgICBtX3N0YXJ0Lm9mZnNldCA9IDA7CisgICAgbV9lbmQuY29udGFpbmVy
ID0gcmVmTm9kZTsKKyAgICBtX2VuZC5vZmZzZXQgPSBtYXhFbmRPZmZzZXQoKTsKIH0KIAogdm9p
ZCBSYW5nZTo6c3Vycm91bmRDb250ZW50cyhQYXNzUmVmUHRyPE5vZGU+IHBhc3NOZXdQYXJlbnQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFJlZlB0cjxOb2RlPiBuZXdQYXJlbnQgPSBwYXNz
TmV3UGFyZW50OwogCi0gICAgaWYgKG1fZGV0YWNoZWQpIHsKKyAgICBpZiAoIW1fc3RhcnQuY29u
dGFpbmVyKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0xNDI4LDI4ICsxNDQ2LDI4IEBAIHZvaWQgUmFuZ2U6OnN1cnJvdW5kQ29u
dGVudHMoUGFzc1JlZlB0cjwKIAogICAgIC8vIFdST05HX0RPQ1VNRU5UX0VSUjogUmFpc2VkIGlm
IG5ld1BhcmVudCBhbmQgdGhlIGNvbnRhaW5lciBvZiB0aGUgc3RhcnQgb2YgdGhlIFJhbmdlIHdl
cmUKICAgICAvLyBub3QgY3JlYXRlZCBmcm9tIHRoZSBzYW1lIGRvY3VtZW50LgotICAgIGlmIChu
ZXdQYXJlbnQtPmRvY3VtZW50KCkgIT0gbV9zdGFydENvbnRhaW5lci0+ZG9jdW1lbnQoKSkgewor
ICAgIGlmIChuZXdQYXJlbnQtPmRvY3VtZW50KCkgIT0gbV9zdGFydC5jb250YWluZXItPmRvY3Vt
ZW50KCkpIHsKICAgICAgICAgZWMgPSBXUk9OR19ET0NVTUVOVF9FUlI7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICAvLyBCQURfQk9VTkRBUllQT0lOVFNfRVJSOiBSYWlzZWQgaWYgdGhl
IFJhbmdlIHBhcnRpYWxseSBzZWxlY3RzIGEgbm9uLVRleHQgbm9kZS4KLSAgICBpZiAobV9zdGFy
dENvbnRhaW5lci0+bm9kZVR5cGUoKSAhPSBOb2RlOjpURVhUX05PREUpIHsKLSAgICAgICAgaWYg
KG1fc3RhcnRPZmZzZXQgPiAwICYmIG1fc3RhcnRPZmZzZXQgPCBtYXhTdGFydE9mZnNldCgpKSB7
CisgICAgaWYgKG1fc3RhcnQuY29udGFpbmVyLT5ub2RlVHlwZSgpICE9IE5vZGU6OlRFWFRfTk9E
RSkgeworICAgICAgICBpZiAobV9zdGFydC5vZmZzZXQgPiAwICYmIG1fc3RhcnQub2Zmc2V0IDwg
bWF4U3RhcnRPZmZzZXQoKSkgewogICAgICAgICAgICAgZWMgPSBSYW5nZUV4Y2VwdGlvbjo6QkFE
X0JPVU5EQVJZUE9JTlRTX0VSUjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
IH0KLSAgICBpZiAobV9lbmRDb250YWluZXItPm5vZGVUeXBlKCkgIT0gTm9kZTo6VEVYVF9OT0RF
KSB7Ci0gICAgICAgIGlmIChtX2VuZE9mZnNldCA+IDAgJiYgbV9lbmRPZmZzZXQgPCBtYXhFbmRP
ZmZzZXQoKSkgeworICAgIGlmIChtX2VuZC5jb250YWluZXItPm5vZGVUeXBlKCkgIT0gTm9kZTo6
VEVYVF9OT0RFKSB7CisgICAgICAgIGlmIChtX2VuZC5vZmZzZXQgPiAwICYmIG1fZW5kLm9mZnNl
dCA8IG1heEVuZE9mZnNldCgpKSB7CiAgICAgICAgICAgICBlYyA9IFJhbmdlRXhjZXB0aW9uOjpC
QURfQk9VTkRBUllQT0lOVFNfRVJSOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgfSAgICAKIAotICAgIC8vIFJhaXNlIGEgSElFUkFSQ0hZX1JFUVVFU1RfRVJSIGlmIG1fc3Rh
cnRDb250YWluZXIgZG9lc24ndCBhY2NlcHQgY2hpbGRyZW4gbGlrZSBuZXdQYXJlbnQuCi0gICAg
Tm9kZSogcGFyZW50T2ZOZXdQYXJlbnQgPSBtX3N0YXJ0Q29udGFpbmVyLmdldCgpOwotICAgIC8v
IElmIG1fc3RhcnRDb250YWluZXIgaXMgYSB0ZXh0Tm9kZSwgaXQgd2lsbCBiZSBzcGxpdCBhbmQg
aXQgd2lsbCBiZSBpdHMgcGFyZW50IHRoYXQgd2lsbCAKKyAgICAvLyBSYWlzZSBhIEhJRVJBUkNI
WV9SRVFVRVNUX0VSUiBpZiBtX3N0YXJ0LmNvbnRhaW5lciBkb2Vzbid0IGFjY2VwdCBjaGlsZHJl
biBsaWtlIG5ld1BhcmVudC4KKyAgICBOb2RlKiBwYXJlbnRPZk5ld1BhcmVudCA9IG1fc3RhcnQu
Y29udGFpbmVyLmdldCgpOworICAgIC8vIElmIG1fc3RhcnQuY29udGFpbmVyIGlzIGEgdGV4dE5v
ZGUsIGl0IHdpbGwgYmUgc3BsaXQgYW5kIGl0IHdpbGwgYmUgaXRzIHBhcmVudCB0aGF0IHdpbGwg
CiAgICAgLy8gbmVlZCB0byBhY2NlcHQgbmV3UGFyZW50LgogICAgIGlmIChwYXJlbnRPZk5ld1Bh
cmVudC0+aXNUZXh0Tm9kZSgpKQogICAgICAgICBwYXJlbnRPZk5ld1BhcmVudCA9IHBhcmVudE9m
TmV3UGFyZW50LT5wYXJlbnROb2RlKCk7CkBAIC0xNDU4LDcgKzE0NzYsNyBAQCB2b2lkIFJhbmdl
OjpzdXJyb3VuZENvbnRlbnRzKFBhc3NSZWZQdHI8CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCi0gICAgaWYgKG1fc3RhcnRDb250YWluZXIgPT0gbmV3UGFyZW50IHx8IG1fc3RhcnRDb250
YWluZXItPmlzRGVzY2VuZGFudE9mKG5ld1BhcmVudC5nZXQoKSkpIHsKKyAgICBpZiAobV9zdGFy
dC5jb250YWluZXIgPT0gbmV3UGFyZW50IHx8IG1fc3RhcnQuY29udGFpbmVyLT5pc0Rlc2NlbmRh
bnRPZihuZXdQYXJlbnQuZ2V0KCkpKSB7CiAgICAgICAgIGVjID0gSElFUkFSQ0hZX1JFUVVFU1Rf
RVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQ4NCw5ICsxNTAyLDkgQEAgdm9pZCBS
YW5nZTo6c3Vycm91bmRDb250ZW50cyhQYXNzUmVmUHRyPAogICAgIHNlbGVjdE5vZGUobmV3UGFy
ZW50LmdldCgpLCBlYyk7CiB9CiAKLXZvaWQgUmFuZ2U6OnNldFN0YXJ0QmVmb3JlKCBOb2RlICpy
ZWZOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUmFuZ2U6OnNldFN0YXJ0QmVmb3JlKE5v
ZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmIChtX2RldGFjaGVkKSB7
CisgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lcikgewogICAgICAgICBlYyA9IElOVkFMSURfU1RB
VEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTUxNCw4ICsxNTMyLDggQEAgdm9p
ZCBSYW5nZTo6Y2hlY2tEZWxldGVFeHRyYWN0KEV4Y2VwdGlvbgogICAgIGlmICghY29tbW9uQW5j
ZXN0b3JDb250YWluZXIoZWMpIHx8IGVjKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAg
IE5vZGUgKnBhc3RFbmQgPSBwYXN0RW5kTm9kZSgpOwotICAgIGZvciAoTm9kZSAqbiA9IHN0YXJ0
Tm9kZSgpOyBuICE9IHBhc3RFbmQ7IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBO
b2RlKiBwYXN0RW5kID0gcGFzdExhc3ROb2RlKCk7CisgICAgZm9yIChOb2RlKiBuID0gZmlyc3RO
b2RlKCk7IG4gIT0gcGFzdEVuZDsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgewogICAgICAg
ICBpZiAobi0+aXNSZWFkT25seU5vZGUoKSkgewogICAgICAgICAgICAgZWMgPSBOT19NT0RJRklD
QVRJT05fQUxMT1dFRF9FUlI7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTM0LDQwICsxNTUy
LDI4IEBAIHZvaWQgUmFuZ2U6OmNoZWNrRGVsZXRlRXh0cmFjdChFeGNlcHRpb24KIAogYm9vbCBS
YW5nZTo6Y29udGFpbmVkQnlSZWFkT25seSgpIGNvbnN0CiB7Ci0gICAgTm9kZSAqbjsKLSAgICBm
b3IgKG4gPSBtX3N0YXJ0Q29udGFpbmVyLmdldCgpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7
CisgICAgZm9yIChOb2RlKiBuID0gbV9zdGFydC5jb250YWluZXIuZ2V0KCk7IG47IG4gPSBuLT5w
YXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKG4tPmlzUmVhZE9ubHlOb2RlKCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgZm9yIChuID0gbV9lbmRDb250YWluZXIuZ2V0
KCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG4gPSBtX2VuZC5j
b250YWluZXIuZ2V0KCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKG4t
PmlzUmVhZE9ubHlOb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1Qb3NpdGlvbiBSYW5nZTo6c3RhcnRQb3NpdGlvbigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIFBvc2l0aW9uKG1fc3RhcnRDb250YWluZXIuZ2V0KCksIG1fc3RhcnRP
ZmZzZXQpOwotfQotCi1Qb3NpdGlvbiBSYW5nZTo6ZW5kUG9zaXRpb24oKSBjb25zdAotewotICAg
IHJldHVybiBQb3NpdGlvbihtX2VuZENvbnRhaW5lci5nZXQoKSwgbV9lbmRPZmZzZXQpOwotfQot
Ci1Ob2RlICpSYW5nZTo6c3RhcnROb2RlKCkgY29uc3QKK05vZGUqIFJhbmdlOjpmaXJzdE5vZGUo
KSBjb25zdAogewotICAgIGlmICghbV9zdGFydENvbnRhaW5lcikKKyAgICBpZiAoIW1fc3RhcnQu
Y29udGFpbmVyKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAobV9zdGFydENvbnRhaW5lci0+
b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpCi0gICAgICAgIHJldHVybiBtX3N0YXJ0Q29udGFpbmVyLmdl
dCgpOwotICAgIE5vZGUgKmNoaWxkID0gbV9zdGFydENvbnRhaW5lci0+Y2hpbGROb2RlKG1fc3Rh
cnRPZmZzZXQpOwotICAgIGlmIChjaGlsZCkKKyAgICBpZiAobV9zdGFydC5jb250YWluZXItPm9m
ZnNldEluQ2hhcmFjdGVycygpKQorICAgICAgICByZXR1cm4gbV9zdGFydC5jb250YWluZXIuZ2V0
KCk7CisgICAgaWYgKE5vZGUqIGNoaWxkID0gbV9zdGFydC5jb250YWluZXItPmNoaWxkTm9kZSht
X3N0YXJ0Lm9mZnNldCkpCiAgICAgICAgIHJldHVybiBjaGlsZDsKLSAgICBpZiAobV9zdGFydE9m
ZnNldCA9PSAwKQotICAgICAgICByZXR1cm4gbV9zdGFydENvbnRhaW5lci5nZXQoKTsKLSAgICBy
ZXR1cm4gbV9zdGFydENvbnRhaW5lci0+dHJhdmVyc2VOZXh0U2libGluZygpOworICAgIGlmICht
X3N0YXJ0Lm9mZnNldCA9PSAwKQorICAgICAgICByZXR1cm4gbV9zdGFydC5jb250YWluZXIuZ2V0
KCk7CisgICAgcmV0dXJuIG1fc3RhcnQuY29udGFpbmVyLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7
CiB9CiAKIFBvc2l0aW9uIFJhbmdlOjplZGl0aW5nU3RhcnRQb3NpdGlvbigpIGNvbnN0CkBAIC0x
NTc3LDcgKzE1ODMsNyBAQCBQb3NpdGlvbiBSYW5nZTo6ZWRpdGluZ1N0YXJ0UG9zaXRpb24oKSBj
CiAgICAgLy8gSXQgaXMgaW1wb3J0YW50IHRvIHNraXAgY2VydGFpbiBpcnJlbGV2YW50IGNvbnRl
bnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzZWxlY3Rpb24sIHNvIHdlIGRvIG5vdCB3aW5kIHVwIAog
ICAgIC8vIHdpdGggYSBzcHVyaW91cyAibWl4ZWQiIHN0eWxlLgogICAgIAotICAgIFZpc2libGVQ
b3NpdGlvbiB2aXNpYmxlUG9zaXRpb24obV9zdGFydENvbnRhaW5lci5nZXQoKSwgbV9zdGFydE9m
ZnNldCwgVlBfREVGQVVMVF9BRkZJTklUWSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQ
b3NpdGlvbihtX3N0YXJ0LmNvbnRhaW5lci5nZXQoKSwgbV9zdGFydC5vZmZzZXQsIFZQX0RFRkFV
TFRfQUZGSU5JVFkpOwogICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAg
IHJldHVybiBQb3NpdGlvbigpOwogCkBAIC0xNTk2LDE2ICsxNjAyLDE1IEBAIFBvc2l0aW9uIFJh
bmdlOjplZGl0aW5nU3RhcnRQb3NpdGlvbigpIGMKICAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9u
LmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpOwogfQogCi1Ob2RlICpSYW5nZTo6cGFzdEVu
ZE5vZGUoKSBjb25zdAorTm9kZSogUmFuZ2U6OnBhc3RMYXN0Tm9kZSgpIGNvbnN0CiB7Ci0gICAg
aWYgKCFtX3N0YXJ0Q29udGFpbmVyIHx8ICFtX2VuZENvbnRhaW5lcikKKyAgICBpZiAoIW1fc3Rh
cnQuY29udGFpbmVyIHx8ICFtX2VuZC5jb250YWluZXIpCiAgICAgICAgIHJldHVybiAwOwotICAg
IGlmIChtX2VuZENvbnRhaW5lci0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpCi0gICAgICAgIHJldHVy
biBtX2VuZENvbnRhaW5lci0+dHJhdmVyc2VOZXh0U2libGluZygpOwotICAgIE5vZGUgKmNoaWxk
ID0gbV9lbmRDb250YWluZXItPmNoaWxkTm9kZShtX2VuZE9mZnNldCk7Ci0gICAgaWYgKGNoaWxk
KQorICAgIGlmIChtX2VuZC5jb250YWluZXItPm9mZnNldEluQ2hhcmFjdGVycygpKQorICAgICAg
ICByZXR1cm4gbV9lbmQuY29udGFpbmVyLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgaWYg
KE5vZGUqIGNoaWxkID0gbV9lbmQuY29udGFpbmVyLT5jaGlsZE5vZGUobV9lbmQub2Zmc2V0KSkK
ICAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgIHJldHVybiBtX2VuZENvbnRhaW5lci0+dHJhdmVy
c2VOZXh0U2libGluZygpOworICAgIHJldHVybiBtX2VuZC5jb250YWluZXItPnRyYXZlcnNlTmV4
dFNpYmxpbmcoKTsKIH0KIAogSW50UmVjdCBSYW5nZTo6Ym91bmRpbmdCb3goKQpAQCAtMTYyMSwx
MSArMTYyNiwxMSBAQCBJbnRSZWN0IFJhbmdlOjpib3VuZGluZ0JveCgpCiAKIHZvaWQgUmFuZ2U6
OmFkZExpbmVCb3hSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBib29sIHVzZVNlbGVjdGlv
bkhlaWdodCkKIHsKLSAgICBpZiAoIW1fc3RhcnRDb250YWluZXIgfHwgIW1fZW5kQ29udGFpbmVy
KQorICAgIGlmICghbV9zdGFydC5jb250YWluZXIgfHwgIW1fZW5kLmNvbnRhaW5lcikKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgUmVuZGVyT2JqZWN0KiBzdGFydCA9IG1fc3RhcnRDb250YWluZXIt
PnJlbmRlcmVyKCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBlbmQgPSBtX2VuZENvbnRhaW5lci0+cmVu
ZGVyZXIoKTsKKyAgICBSZW5kZXJPYmplY3QqIHN0YXJ0ID0gbV9zdGFydC5jb250YWluZXItPnJl
bmRlcmVyKCk7CisgICAgUmVuZGVyT2JqZWN0KiBlbmQgPSBtX2VuZC5jb250YWluZXItPnJlbmRl
cmVyKCk7CiAgICAgaWYgKCFzdGFydCB8fCAhZW5kKQogICAgICAgICByZXR1cm47CiAKQEAgLTE2
MzMsOCArMTYzOCw4IEBAIHZvaWQgUmFuZ2U6OmFkZExpbmVCb3hSZWN0cyhWZWN0b3I8SW50UmUK
ICAgICBmb3IgKFJlbmRlck9iamVjdCogciA9IHN0YXJ0OyByICYmIHIgIT0gc3RvcDsgciA9IHIt
Pm5leHRJblByZU9yZGVyKCkpIHsKICAgICAgICAgLy8gb25seSBhc2sgbGVhZiByZW5kZXIgb2Jq
ZWN0cyBmb3IgdGhlaXIgbGluZSBib3ggcmVjdHMKICAgICAgICAgaWYgKCFyLT5maXJzdENoaWxk
KCkpIHsKLSAgICAgICAgICAgIGludCBzdGFydE9mZnNldCA9IHIgPT0gc3RhcnQgPyBtX3N0YXJ0
T2Zmc2V0IDogMDsKLSAgICAgICAgICAgIGludCBlbmRPZmZzZXQgPSByID09IGVuZCA/IG1fZW5k
T2Zmc2V0IDogVUlOVF9NQVg7CisgICAgICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSByID09IHN0
YXJ0ID8gbV9zdGFydC5vZmZzZXQgOiAwOworICAgICAgICAgICAgaW50IGVuZE9mZnNldCA9IHIg
PT0gZW5kID8gbV9lbmQub2Zmc2V0IDogVUlOVF9NQVg7CiAgICAgICAgICAgICByLT5hZGRMaW5l
Qm94UmVjdHMocmVjdHMsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIHVzZVNlbGVjdGlvbkhlaWdo
dCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjQyLDI0ICsxNjQ3LDI0IEBAIHZvaWQgUmFuZ2U6
OmFkZExpbmVCb3hSZWN0cyhWZWN0b3I8SW50UmUKIAogI2lmbmRlZiBOREVCVUcKICNkZWZpbmUg
Rm9ybWF0QnVmZmVyU2l6ZSAxMDI0Ci12b2lkIFJhbmdlOjpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFy
ICpidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKK3ZvaWQgUmFuZ2U6OmZvcm1hdEZvckRl
YnVnZ2VyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdAogewogICAgIFN0cmlu
ZyByZXN1bHQ7CiAgICAgU3RyaW5nIHM7CiAgICAgCi0gICAgaWYgKCFtX3N0YXJ0Q29udGFpbmVy
IHx8ICFtX2VuZENvbnRhaW5lcikKKyAgICBpZiAoIW1fc3RhcnQuY29udGFpbmVyIHx8ICFtX2Vu
ZC5jb250YWluZXIpCiAgICAgICAgIHJlc3VsdCA9ICI8ZW1wdHk+IjsKICAgICBlbHNlIHsKICAg
ICAgICAgY2hhciBzW0Zvcm1hdEJ1ZmZlclNpemVdOwogICAgICAgICByZXN1bHQgKz0gImZyb20g
b2Zmc2V0ICI7Ci0gICAgICAgIHJlc3VsdCArPSBTdHJpbmc6Om51bWJlcihtX3N0YXJ0T2Zmc2V0
KTsKKyAgICAgICAgcmVzdWx0ICs9IFN0cmluZzo6bnVtYmVyKG1fc3RhcnQub2Zmc2V0KTsKICAg
ICAgICAgcmVzdWx0ICs9ICIgb2YgIjsKLSAgICAgICAgbV9zdGFydENvbnRhaW5lci0+Zm9ybWF0
Rm9yRGVidWdnZXIocywgRm9ybWF0QnVmZmVyU2l6ZSk7CisgICAgICAgIG1fc3RhcnQuY29udGFp
bmVyLT5mb3JtYXRGb3JEZWJ1Z2dlcihzLCBGb3JtYXRCdWZmZXJTaXplKTsKICAgICAgICAgcmVz
dWx0ICs9IHM7CiAgICAgICAgIHJlc3VsdCArPSAiIHRvIG9mZnNldCAiOwotICAgICAgICByZXN1
bHQgKz0gU3RyaW5nOjpudW1iZXIobV9lbmRPZmZzZXQpOworICAgICAgICByZXN1bHQgKz0gU3Ry
aW5nOjpudW1iZXIobV9lbmQub2Zmc2V0KTsKICAgICAgICAgcmVzdWx0ICs9ICIgb2YgIjsKLSAg
ICAgICAgbV9lbmRDb250YWluZXItPmZvcm1hdEZvckRlYnVnZ2VyKHMsIEZvcm1hdEJ1ZmZlclNp
emUpOworICAgICAgICBtX2VuZC5jb250YWluZXItPmZvcm1hdEZvckRlYnVnZ2VyKHMsIEZvcm1h
dEJ1ZmZlclNpemUpOwogICAgICAgICByZXN1bHQgKz0gczsKICAgICB9CiAgICAgICAgICAgCkBA
IC0xNjY4LDUxICsxNjczLDQyIEBAIHZvaWQgUmFuZ2U6OmZvcm1hdEZvckRlYnVnZ2VyKGNoYXIg
KmJ1ZmYKICN1bmRlZiBGb3JtYXRCdWZmZXJTaXplCiAjZW5kaWYKIAotYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFJhbmdlICZhLCBjb25zdCBSYW5nZSAmYikKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBS
YW5nZSYgYSwgY29uc3QgUmFuZ2UmIGIpCiB7CiAgICAgaWYgKCZhID09ICZiKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAvLyBOb3Qgc3RyaWN0bHkgbGVnYWwgQysrLCBidXQgaW4gcHJhY3Rp
Y2UgdGhpcyBjYW4gaGFwcGVuLCBhbmQgd29ya3MgZmluZSB3aXRoIEdDQy4KKyAgICAvLyBOb3Qg
c3RyaWN0bHkgbGVnYWwgQysrLCBidXQgaW4gcHJhY3RpY2UgdGhpcyBjYW4gaGFwcGVuLCBhbmQg
dGhpcyBjaGVjayB3b3JrcworICAgIC8vIGZpbmUgd2l0aCBHQ0MgdG8gZGV0ZWN0IHN1Y2ggY2Fz
ZXMgYW5kIHJldHVybiBmYWxzZSByYXRoZXIgdGhhbiBjcmFzaGluZy4KICAgICBpZiAoISZhIHx8
ICEmYikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGJvb2wgYWQgPSBhLmlzRGV0YWNoZWQo
KTsKLSAgICBib29sIGJkID0gYi5pc0RldGFjaGVkKCk7Ci0gICAgaWYgKGFkICYmIGJkKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoYWQgfHwgYmQpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpbnQgZXhjZXB0aW9uID0gMDsKLSAgICByZXR1cm4gYS5zdGFydENvbnRhaW5lcihl
eGNlcHRpb24pID09IGIuc3RhcnRDb250YWluZXIoZXhjZXB0aW9uKQotICAgICAgICAmJiBhLmVu
ZENvbnRhaW5lcihleGNlcHRpb24pID09IGIuZW5kQ29udGFpbmVyKGV4Y2VwdGlvbikKLSAgICAg
ICAgJiYgYS5zdGFydE9mZnNldChleGNlcHRpb24pID09IGIuc3RhcnRPZmZzZXQoZXhjZXB0aW9u
KQotICAgICAgICAmJiBhLmVuZE9mZnNldChleGNlcHRpb24pID09IGIuZW5kT2Zmc2V0KGV4Y2Vw
dGlvbik7CisgICAgcmV0dXJuIGEuc3RhcnRQb3NpdGlvbigpID09IGIuc3RhcnRQb3NpdGlvbigp
ICYmIGEuZW5kUG9zaXRpb24oKSA9PSBiLmVuZFBvc2l0aW9uKCkKIH0KIAogUGFzc1JlZlB0cjxS
YW5nZT4gcmFuZ2VPZkNvbnRlbnRzKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUpOwot
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBuZXcgUmFuZ2Uobm9kZS0+ZG9jdW1lbnQoKSk7Cisg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSk7
CiAgICAgaW50IGV4Y2VwdGlvbiA9IDA7CiAgICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhu
b2RlLCBleGNlcHRpb24pOwogICAgIHJldHVybiByYW5nZS5yZWxlYXNlKCk7CiB9CiAKLXVuc2ln
bmVkIFJhbmdlOjptYXhTdGFydE9mZnNldCgpIGNvbnN0CitpbnQgUmFuZ2U6Om1heFN0YXJ0T2Zm
c2V0KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fc3RhcnRDb250YWluZXIpCisgICAgaWYgKCFtX3N0
YXJ0LmNvbnRhaW5lcikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFtX3N0YXJ0Q29udGFp
bmVyLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSkKLSAgICAgICAgcmV0dXJuIG1fc3RhcnRDb250YWlu
ZXItPmNoaWxkTm9kZUNvdW50KCk7Ci0gICAgcmV0dXJuIG1fc3RhcnRDb250YWluZXItPm1heENo
YXJhY3Rlck9mZnNldCgpOworICAgIGlmICghbV9zdGFydC5jb250YWluZXItPm9mZnNldEluQ2hh
cmFjdGVycygpKQorICAgICAgICByZXR1cm4gbV9zdGFydC5jb250YWluZXItPmNoaWxkTm9kZUNv
dW50KCk7CisgICAgcmV0dXJuIG1fc3RhcnQuY29udGFpbmVyLT5tYXhDaGFyYWN0ZXJPZmZzZXQo
KTsKIH0KIAotdW5zaWduZWQgUmFuZ2U6Om1heEVuZE9mZnNldCgpIGNvbnN0CitpbnQgUmFuZ2U6
Om1heEVuZE9mZnNldCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2VuZENvbnRhaW5lcikKKyAgICBp
ZiAoIW1fZW5kLmNvbnRhaW5lcikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFtX2VuZENv
bnRhaW5lci0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpCi0gICAgICAgIHJldHVybiBtX2VuZENvbnRh
aW5lci0+Y2hpbGROb2RlQ291bnQoKTsKLSAgICByZXR1cm4gbV9lbmRDb250YWluZXItPm1heENo
YXJhY3Rlck9mZnNldCgpOworICAgIGlmICghbV9lbmQuY29udGFpbmVyLT5vZmZzZXRJbkNoYXJh
Y3RlcnMoKSkKKyAgICAgICAgcmV0dXJuIG1fZW5kLmNvbnRhaW5lci0+Y2hpbGROb2RlQ291bnQo
KTsKKyAgICByZXR1cm4gbV9lbmQuY29udGFpbmVyLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKTsKIH0K
IAogfQpJbmRleDogV2ViQ29yZS9kb20vUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9SYW5nZS5oCShyZXZpc2lvbiAzMDkxNCkKKysrIFdlYkNvcmUvZG9tL1JhbmdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTEgKzEsOSBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiAoQykgMTk5OSBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQogICogKEMpIDIwMDAgR3VubnN0ZWluIEx5ZSAoZ3VubnN0ZWluQG5l
dGNvbS5ubykKICAqIChDKSAyMDAwIEZyZWRlcmlrIEhvbGxqZW4gKGZyZWRlcmlrLmhvbGxqZW5A
aGlnLm5vKQogICogKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcsOSArMjUsOCBAQAogI2lmbmRl
ZiBSYW5nZV9oCiAjZGVmaW5lIFJhbmdlX2gKIAorI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTQzLDE1ICs0MCwxOCBAQCBjbGFzcyBOb2RlOwogY2xhc3MgUG9zaXRpb247
CiBjbGFzcyBTdHJpbmc7CiAKLWNsYXNzIFJhbmdlIDogcHVibGljIFJlZkNvdW50ZWQ8UmFuZ2U+
Ci17CitjbGFzcyBSYW5nZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJhbmdlPiB7CiBwdWJsaWM6Ci0g
ICAgUmFuZ2UoRG9jdW1lbnQqKTsKLSAgICBSYW5nZShEb2N1bWVudCosIE5vZGUqIHN0YXJ0Q29u
dGFpbmVyLCBpbnQgc3RhcnRPZmZzZXQsIE5vZGUqIGVuZENvbnRhaW5lciwgaW50IGVuZE9mZnNl
dCk7Ci0gICAgUmFuZ2UoRG9jdW1lbnQqLCBjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9u
Jik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IGNyZWF0ZShQYXNzUmVmUHRyPERvY3Vt
ZW50Pik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IGNyZWF0ZShQYXNzUmVmUHRyPERv
Y3VtZW50PiwgUGFzc1JlZlB0cjxOb2RlPiBzdGFydENvbnRhaW5lciwgaW50IHN0YXJ0T2Zmc2V0
LCBQYXNzUmVmUHRyPE5vZGU+IGVuZENvbnRhaW5lciwgaW50IGVuZE9mZnNldCk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8UmFuZ2U+IGNyZWF0ZShQYXNzUmVmUHRyPERvY3VtZW50PiwgY29uc3Qg
UG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYpOwogICAgIH5SYW5nZSgpOwogCiAgICAgRG9jdW1l
bnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX293bmVyRG9jdW1lbnQuZ2V0KCk7
IH0KKyAgICBOb2RlKiBzdGFydENvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQuY29u
dGFpbmVyLmdldCgpOyB9CisgICAgaW50IHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9z
dGFydC5wb3NPZmZzZXQ7IH0KKyAgICBOb2RlKiBlbmRDb250YWluZXIoKSBjb25zdCB7IHJldHVy
biBtX2VuZC5jb250YWluZXIuZ2V0KCk7IH0KKyAgICBpbnQgZW5kT2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9lbmQucG9zT2Zmc2V0OyB9CiAKICAgICBOb2RlKiBzdGFydENvbnRhaW5lcihFeGNl
cHRpb25Db2RlJikgY29uc3Q7CiAgICAgaW50IHN0YXJ0T2Zmc2V0KEV4Y2VwdGlvbkNvZGUmKSBj
b25zdDsKQEAgLTYxLDggKzYxLDggQEAgcHVibGljOgogCiAgICAgTm9kZSogY29tbW9uQW5jZXN0
b3JDb250YWluZXIoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIHN0YXRpYyBOb2RlKiBjb21t
b25BbmNlc3RvckNvbnRhaW5lcihOb2RlKiBjb250YWluZXJBLCBOb2RlKiBjb250YWluZXJCKTsK
LSAgICB2b2lkIHNldFN0YXJ0KE5vZGUqIGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgc2V0RW5kKE5vZGUqIGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0U3RhcnQoUGFzc1JlZlB0cjxOb2RlPiBjb250YWlu
ZXIsIGludCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldEVuZChQYXNzUmVm
UHRyPE5vZGU+IGNvbnRhaW5lciwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZv
aWQgY29sbGFwc2UoYm9vbCB0b1N0YXJ0LCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCBpc1Bv
aW50SW5SYW5nZShOb2RlKiByZWZOb2RlLCBpbnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYyk7
CiAgICAgc2hvcnQgY29tcGFyZVBvaW50KE5vZGUqIHJlZk5vZGUsIGludCBvZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKTsKQEAgLTg2LDcgKzg2LDYgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYg
aHRtbCwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogCiAgICAgdm9pZCBkZXRhY2goRXhjZXB0aW9u
Q29kZSYpOwotICAgIGJvb2wgaXNEZXRhY2hlZCgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8UmFu
Z2U+IGNsb25lUmFuZ2UoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRTdGFy
dEFmdGVyKE5vZGUqLCBFeGNlcHRpb25Db2RlJik7CkBAIC05NywxOCArOTYsMTEgQEAgcHVibGlj
OgogICAgIHZvaWQgc3Vycm91bmRDb250ZW50cyhQYXNzUmVmUHRyPE5vZGU+LCBFeGNlcHRpb25D
b2RlJik7CiAgICAgdm9pZCBzZXRTdGFydEJlZm9yZShOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOwog
Ci0gICAgZW51bSBBY3Rpb25UeXBlIHsKLSAgICAgICAgREVMRVRFX0NPTlRFTlRTLAotICAgICAg
ICBFWFRSQUNUX0NPTlRFTlRTLAotICAgICAgICBDTE9ORV9DT05URU5UUwotICAgIH07Ci0gICAg
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBwcm9jZXNzQ29udGVudHMoQWN0aW9uVHlwZSwg
RXhjZXB0aW9uQ29kZSYpOwotCi0gICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbigpIGNvbnN0Owot
ICAgIFBvc2l0aW9uIGVuZFBvc2l0aW9uKCkgY29uc3Q7CisgICAgY29uc3QgUG9zaXRpb24mIHN0
YXJ0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CisgICAgY29uc3QgUG9zaXRp
b24mIGVuZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KIAotICAgIE5vZGUqIHN0
YXJ0Tm9kZSgpIGNvbnN0OwotICAgIE5vZGUqIHBhc3RFbmROb2RlKCkgY29uc3Q7CisgICAgTm9k
ZSogZmlyc3ROb2RlKCkgY29uc3Q7CisgICAgTm9kZSogcGFzdExhc3ROb2RlKCkgY29uc3Q7CiAK
ICAgICBQb3NpdGlvbiBlZGl0aW5nU3RhcnRQb3NpdGlvbigpIGNvbnN0OwogCkBAIC0xMjAsMTkg
KzExMiwyMiBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBSZWZQdHI8RG9jdW1l
bnQ+IG1fb3duZXJEb2N1bWVudDsKLSAgICBSZWZQdHI8Tm9kZT4gbV9zdGFydENvbnRhaW5lcjsK
LSAgICB1bnNpZ25lZCBtX3N0YXJ0T2Zmc2V0OwotICAgIFJlZlB0cjxOb2RlPiBtX2VuZENvbnRh
aW5lcjsKLSAgICB1bnNpZ25lZCBtX2VuZE9mZnNldDsKLSAgICBib29sIG1fZGV0YWNoZWQ7Cisg
ICAgUmFuZ2UoUGFzc1JlZlB0cjxEb2N1bWVudD4pOworICAgIFJhbmdlKFBhc3NSZWZQdHI8RG9j
dW1lbnQ+LCBQYXNzUmVmUHRyPE5vZGU+IHN0YXJ0Q29udGFpbmVyLCBpbnQgc3RhcnRPZmZzZXQs
IFBhc3NSZWZQdHI8Tm9kZT4gZW5kQ29udGFpbmVyLCBpbnQgZW5kT2Zmc2V0KTsKIAogICAgIHZv
aWQgY2hlY2tOb2RlV09mZnNldChOb2RlKiwgaW50IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpIGNv
bnN0OwogICAgIHZvaWQgY2hlY2tOb2RlQkEoTm9kZSosIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsK
ICAgICB2b2lkIGNoZWNrRGVsZXRlRXh0cmFjdChFeGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCBj
b250YWluZWRCeVJlYWRPbmx5KCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgbWF4U3RhcnRPZmZzZXQo
KSBjb25zdDsKLSAgICB1bnNpZ25lZCBtYXhFbmRPZmZzZXQoKSBjb25zdDsKKyAgICBpbnQgbWF4
U3RhcnRPZmZzZXQoKSBjb25zdDsKKyAgICBpbnQgbWF4RW5kT2Zmc2V0KCkgY29uc3Q7CisKKyAg
ICBlbnVtIEFjdGlvblR5cGUgeyBERUxFVEVfQ09OVEVOVFMsIEVYVFJBQ1RfQ09OVEVOVFMsIENM
T05FX0NPTlRFTlRTIH07CisgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBwcm9jZXNz
Q29udGVudHMoQWN0aW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgUmVmUHRyPERvY3Vt
ZW50PiBtX293bmVyRG9jdW1lbnQ7CisgICAgUG9zaXRpb24gbV9zdGFydDsKKyAgICBQb3NpdGlv
biBtX2VuZDsKIH07CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlT2ZDb250ZW50cyhOb2RlKik7
CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDMwOTE0
KQorKysgV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzg3LDggKzM4Nyw4IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tT
dHlsZSgKICAgICAvLyBDYWxjdWxhdGUgc3RhcnQgYW5kIGVuZCBpbmRpY2VzIGZyb20gdGhlIHN0
YXJ0IG9mIHRoZSB0cmVlIHRoYXQgdGhleSdyZSBpbi4KICAgICBOb2RlKiBzY29wZSA9IGhpZ2hl
c3RBbmNlc3Rvcih2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOwogICAgIFBv
c2l0aW9uIHJhbmdlU3RhcnQoc2NvcGUsIDApOwotICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRSYW5n
ZSA9IG5ldyBSYW5nZShkb2N1bWVudCgpLCByYW5nZVN0YXJ0LCByYW5nZUNvbXBsaWFudEVxdWl2
YWxlbnQodmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpKTsKLSAgICBSZWZQdHI8UmFuZ2U+
IGVuZFJhbmdlID0gbmV3IFJhbmdlKGRvY3VtZW50KCksIHJhbmdlU3RhcnQsIHJhbmdlQ29tcGxp
YW50RXF1aXZhbGVudCh2aXNpYmxlRW5kLmRlZXBFcXVpdmFsZW50KCkpKTsKKyAgICBSZWZQdHI8
UmFuZ2U+IHN0YXJ0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHJhbmdlU3RhcnQs
IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSkp
OworICAgIFJlZlB0cjxSYW5nZT4gZW5kUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCks
IHJhbmdlU3RhcnQsIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCh2aXNpYmxlRW5kLmRlZXBFcXVp
dmFsZW50KCkpKTsKICAgICBpbnQgc3RhcnRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgoc3RhcnRSYW5nZS5nZXQoKSwgdHJ1ZSk7CiAgICAgaW50IGVuZEluZGV4ID0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChlbmRSYW5nZS5nZXQoKSwgdHJ1ZSk7CiAgICAgCkBAIC02NTYsNyAr
NjU2LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgICAg
ICBpZiAoc3RhcnQgPT0gZW5kICYmIHN0YXJ0Lm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCiAg
ICAgICAgICAgICBlbmQgPSBwb3NpdGlvbkFmdGVyTm9kZShzdGFydC5ub2RlKCkpOwogICAgICAg
ICAvLyBBZGQgdGhlIHN0eWxlIHRvIHNlbGVjdGVkIGlubGluZSBydW5zLgotICAgICAgICBOb2Rl
KiBwYXN0RW5kID0gUmFuZ2UoZG9jdW1lbnQoKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHN0
YXJ0KSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGVuZCkpLnBhc3RFbmROb2RlKCk7CisgICAg
ICAgIE5vZGUqIHBhc3RFbmQgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHJhbmdlQ29tcGxp
YW50RXF1aXZhbGVudChzdGFydCksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChlbmQpKS0+cGFz
dExhc3ROb2RlKCk7CiAgICAgICAgIGZvciAoTm9kZSogbmV4dDsgbm9kZSAmJiBub2RlICE9IHBh
c3RFbmQ7IG5vZGUgPSBuZXh0KSB7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5leHQgPSBu
b2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDMwOTE0KQorKysgV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDcgKzI3MCw3IEBAIHZv
aWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmlucHV0VGV4dChjb24KIHsKICAgICBpbnQgb2Zmc2V0
ID0gMDsKICAgICBpbnQgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKLSAgICBSZWZQdHI8UmFuZ2U+
IHN0YXJ0UmFuZ2UgPSBuZXcgUmFuZ2UoZG9jdW1lbnQoKSwgUG9zaXRpb24oZG9jdW1lbnQoKS0+
ZG9jdW1lbnRFbGVtZW50KCksIDApLCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBS
ZWZQdHI8UmFuZ2U+IHN0YXJ0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIFBvc2l0
aW9uKGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLCAwKSwgZW5kaW5nU2VsZWN0aW9uKCku
c3RhcnQoKSk7CiAgICAgaW50IHN0YXJ0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3Ro
KHN0YXJ0UmFuZ2UuZ2V0KCkpOwogICAgIGludCBuZXdsaW5lOwogICAgIGRvIHsKQEAgLTcyOSwx
MyArNzI5LDEzIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGgKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgc3RhcnRJbmRleCA9IDA7CiAgICAgICAgICAgICBpZiAo
c3RhcnRJblBhcmFncmFwaCkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRS
YW5nZSA9IG5ldyBSYW5nZShkb2N1bWVudCgpLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoc3Rh
cnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpKSwgcmFuZ2VDb21wbGlhbnRFcXVp
dmFsZW50KHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpKSk7CisgICAgICAgICAgICAgICAg
UmVmUHRyPFJhbmdlPiBzdGFydFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCByYW5n
ZUNvbXBsaWFudEVxdWl2YWxlbnQoc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVu
dCgpKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVu
dCgpKSk7CiAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgoc3RhcnRSYW5nZS5nZXQoKSwgdHJ1ZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIGVuZEluZGV4ID0gMDsKICAgICAgICAgICAgIGlmIChlbmRJblBhcmFncmFwaCkgewotICAg
ICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gZW5kUmFuZ2UgPSBuZXcgUmFuZ2UoZG9jdW1lbnQo
KSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVx
dWl2YWxlbnQoKSksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCh2aXNpYmxlRW5kLmRlZXBFcXVp
dmFsZW50KCkpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGVuZFJhbmdlID0gUmFu
Z2U6OmNyZWF0ZShkb2N1bWVudCgpLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoc3RhcnRPZlBh
cmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50
KHZpc2libGVFbmQuZGVlcEVxdWl2YWxlbnQoKSkpOwogICAgICAgICAgICAgICAgIGVuZEluZGV4
ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChlbmRSYW5nZS5nZXQoKSwgdHJ1ZSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc1Miw3ICs3NTIsNyBAQCB2b2lkIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjptb3ZlUGFyYWdyYXBoCiAgICAgLy8gc3RhcnQgYW5kIGVuZCBjYW4ndCBiZSB1
c2VkIGRpcmVjdGx5IHRvIGNyZWF0ZSBhIFJhbmdlOyB0aGV5IGFyZSAiZWRpdGluZyBwb3NpdGlv
bnMiCiAgICAgUG9zaXRpb24gc3RhcnRSYW5nZUNvbXBsaWFudCA9IHJhbmdlQ29tcGxpYW50RXF1
aXZhbGVudChzdGFydCk7CiAgICAgUG9zaXRpb24gZW5kUmFuZ2VDb21wbGlhbnQgPSByYW5nZUNv
bXBsaWFudEVxdWl2YWxlbnQoZW5kKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbmV3IFJh
bmdlKGRvY3VtZW50KCksIHN0YXJ0UmFuZ2VDb21wbGlhbnQubm9kZSgpLCBzdGFydFJhbmdlQ29t
cGxpYW50Lm9mZnNldCgpLCBlbmRSYW5nZUNvbXBsaWFudC5ub2RlKCksIGVuZFJhbmdlQ29tcGxp
YW50Lm9mZnNldCgpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShk
b2N1bWVudCgpLCBzdGFydFJhbmdlQ29tcGxpYW50Lm5vZGUoKSwgc3RhcnRSYW5nZUNvbXBsaWFu
dC5vZmZzZXQoKSwgZW5kUmFuZ2VDb21wbGlhbnQubm9kZSgpLCBlbmRSYW5nZUNvbXBsaWFudC5v
ZmZzZXQoKSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbiBpbmVmZmljaWVudCB3YXkgdG8g
cHJlc2VydmUgc3R5bGUgb24gbm9kZXMgaW4gdGhlIHBhcmFncmFwaCB0byBtb3ZlLiAgSXQgCiAg
ICAgLy8gc2hvdWxkbid0IG1hdHRlciB0aG91Z2gsIHNpbmNlIG1vdmVkIHBhcmFncmFwaHMgd2ls
bCB1c3VhbGx5IGJlIHF1aXRlIHNtYWxsLgpAQCAtODA1LDcgKzgwNSw3IEBAIHZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGgKICAgICAgICAgdXBkYXRlTGF5b3V0KCk7CiAg
ICAgfQogICAgICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHN0YXJ0VG9EZXN0aW5hdGlvblJhbmdl
KG5ldyBSYW5nZShkb2N1bWVudCgpLCBQb3NpdGlvbihkb2N1bWVudCgpLCAwKSwgcmFuZ2VDb21w
bGlhbnRFcXVpdmFsZW50KGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkpKSk7CisgICAgUmVm
UHRyPFJhbmdlPiBzdGFydFRvRGVzdGluYXRpb25SYW5nZShSYW5nZTo6Y3JlYXRlKGRvY3VtZW50
KCksIFBvc2l0aW9uKGRvY3VtZW50KCksIDApLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoZGVz
dGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKSkpKTsKICAgICBkZXN0aW5hdGlvbkluZGV4ID0gVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChzdGFydFRvRGVzdGluYXRpb25SYW5nZS5nZXQoKSwgdHJ1
ZSk7CiAgICAgCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGRlc3RpbmF0aW9uKTsKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDMwOTE0
KQorKysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NjAsOCArNTYwLDggQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpt
ZXJnZVBhcmFncgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBuZXcgUmFuZ2UoZG9jdW1lbnQoKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50
KHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKSksIHJhbmdlQ29tcGxpYW50
RXF1aXZhbGVudChlbmRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpKSk7Ci0gICAg
UmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZCA9IG5ldyBSYW5nZShkb2N1bWVudCgpLCBy
YW5nZUNvbXBsaWFudEVxdWl2YWxlbnQobWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgp
KSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxl
bnQoKSkpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50
KCksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBF
cXVpdmFsZW50KCkpLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoZW5kT2ZQYXJhZ3JhcGhUb01v
dmUuZGVlcEVxdWl2YWxlbnQoKSkpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFj
ZWQgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudCht
ZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkpLCByYW5nZUNvbXBsaWFudEVxdWl2YWxl
bnQobWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpKSk7CiAgICAgaWYgKCFkb2N1bWVu
dCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+Y2xpZW50KCktPnNob3VsZE1vdmVSYW5nZUFmdGVyRGVs
ZXRlKHJhbmdlLmdldCgpLCByYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSkpCiAgICAgICAgIHJldHVy
bjsKICAgICAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAzMDkxNCkKKysrIFdlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzUsNyArNDM1LDcgQEAgY29u
c3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2UgPSBtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPnRvUmFuZ2UoKTsKICAgICBO
b2RlKiBzdGFydE5vZGUgPSByYW5nZS0+ZWRpdGluZ1N0YXJ0UG9zaXRpb24oKS5ub2RlKCk7CiAg
ICAgaWYgKHN0YXJ0Tm9kZSkgewotICAgICAgICBOb2RlKiBwYXN0RW5kID0gcmFuZ2UtPnBhc3RF
bmROb2RlKCk7CisgICAgICAgIE5vZGUqIHBhc3RFbmQgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7
CiAgICAgICAgIC8vIEluIHRoZSBsb29wIGJlbG93LCBuIHNob3VsZCBldmVudHVhbGx5IG1hdGNo
IHBhc3RFbmQgYW5kIG5vdCBiZWNvbWUgbmlsLCBidXQgd2UndmUgc2VlbiBhdCBsZWFzdCBvbmUK
ICAgICAgICAgLy8gdW5yZXByb2R1Y2libGUgY2FzZSB3aGVyZSB0aGlzIGRpZG4ndCBoYXBwZW4s
IHNvIGNoZWNrIGZvciBuaWwgYWxzby4KICAgICAgICAgZm9yIChOb2RlKiBuID0gc3RhcnROb2Rl
OyBuICYmIG4gIT0gcGFzdEVuZDsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgewpAQCAtMTIw
OCw3ICsxMjA4LDcgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZwog
CiAgICAgICAgICAgICB1bnNpZ25lZCBzdGFydCA9IG1pbihiYXNlT2Zmc2V0ICsgc2VsZWN0aW9u
U3RhcnQsIGV4dGVudE9mZnNldCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBlbmQgPSBtaW4obWF4
KHN0YXJ0LCBiYXNlT2Zmc2V0ICsgc2VsZWN0aW9uRW5kKSwgZXh0ZW50T2Zmc2V0KTsKLSAgICAg
ICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG5ldyBSYW5nZShiYXNlTm9kZS0+
ZG9jdW1lbnQoKSwgYmFzZU5vZGUsIHN0YXJ0LCBiYXNlTm9kZSwgZW5kKTsgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKGJhc2VOb2RlLT5kb2N1bWVudCgpLCBiYXNlTm9kZSwgc3RhcnQsIGJhc2VOb2RlLCBlbmQp
OyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xs
ZXIoKS0+c2V0U2VsZWN0ZWRSYW5nZShzZWxlY3RlZFJhbmdlLmdldCgpLCBET1dOU1RSRUFNLCBm
YWxzZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzExLDcgKzEzMTEsNyBAQCBzdGF0aWMgUGFz
c1JlZlB0cjxSYW5nZT4gcGFyYWdyYXBoQWxpZ25lCiAgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdl
LmdldCgpLCBlbmRPZlBhcmFncmFwaChhcmJpdHJhcnlSYW5nZS0+ZW5kUG9zaXRpb24oKSkpOwog
ICAgIAogICAgIC8vIENvbXB1dGUgb2Zmc2V0IGZyb20gc3RhcnQgb2YgZXhwYW5kZWQgcmFuZ2Ug
dG8gc3RhcnQgb2Ygb3JpZ2luYWwgcmFuZ2UKLSAgICBSZWZQdHI8UmFuZ2U+IG9mZnNldEFzUmFu
Z2UgPSBuZXcgUmFuZ2UocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1l
bnQoKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgYXJiaXRyYXJ5UmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSk7CisgICAgUmVmUHRyPFJhbmdlPiBvZmZzZXRBc1JhbmdlID0gUmFuZ2U6
OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBw
YXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBhcmJpdHJhcnlSYW5nZS0+c3RhcnRQb3Np
dGlvbigpKTsKICAgICBvZmZzZXRJbnRvUGFyYWdyYXBoQWxpZ25lZFJhbmdlID0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChvZmZzZXRBc1JhbmdlLmdldCgpKTsKICAgICAKICAgICAvLyBGaWxs
IGluIG91dCBwYXJhbWV0ZXIgd2l0aCBzdHJpbmcgcmVwcmVzZW50aW5nIGVudGlyZSBwYXJhZ3Jh
cGggcmFuZ2UuCkBAIC0xNzQ5LDEzICsxNzQ5LDEyIEBAIHN0YXRpYyB2b2lkIG1hcmtNaXNzcGVs
bGluZ3NPckJhZEdyYW1tYXIKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIFJlZlB0cjxSYW5n
ZT4gc2VhcmNoUmFuZ2Uoc2VsZWN0aW9uLnRvUmFuZ2UoKSk7Ci0gICAgaWYgKCFzZWFyY2hSYW5n
ZSB8fCBzZWFyY2hSYW5nZS0+aXNEZXRhY2hlZCgpKQorICAgIGlmICghc2VhcmNoUmFuZ2UpCiAg
ICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBJZiB3ZSdyZSBub3QgaW4gYW4gZWRpdGFibGUg
bm9kZSwgYmFpbC4KLSAgICBpbnQgZXhjZXB0aW9uID0gMDsKLSAgICBOb2RlICplZGl0YWJsZU5v
ZGUgPSBzZWFyY2hSYW5nZS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKTsKLSAgICBpZiAoIWVk
aXRhYmxlTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBOb2RlKiBlZGl0YWJsZU5vZGUg
PSBzZWFyY2hSYW5nZS0+c3RhcnRDb250YWluZXIoKTsKKyAgICBpZiAoIWVkaXRhYmxlTm9kZSB8
fCAhZWRpdGFibGVOb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgLy8gR2V0IHRoZSBzcGVsbCBjaGVja2VyIGlmIGl0IGlzIGF2YWlsYWJsZQpAQCAt
MTgyOSw3ICsxODI4LDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9yOjpjb21wb3NpdGlvblJh
bgogICAgIHVuc2lnbmVkIGVuZCA9IG1pbihtYXgoc3RhcnQsIG1fY29tcG9zaXRpb25FbmQpLCBs
ZW5ndGgpOwogICAgIGlmIChzdGFydCA+PSBlbmQpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBuZXcgUmFuZ2UobV9jb21wb3NpdGlvbk5vZGUtPmRvY3VtZW50KCksIG1fY29tcG9zaXRp
b25Ob2RlLmdldCgpLCBzdGFydCwgbV9jb21wb3NpdGlvbk5vZGUuZ2V0KCksIGVuZCk7CisgICAg
cmV0dXJuIFJhbmdlOjpjcmVhdGUobV9jb21wb3NpdGlvbk5vZGUtPmRvY3VtZW50KCksIG1fY29t
cG9zaXRpb25Ob2RlLmdldCgpLCBzdGFydCwgbV9jb21wb3NpdGlvbk5vZGUuZ2V0KCksIGVuZCk7
CiB9CiAKIGJvb2wgRWRpdG9yOjpnZXRDb21wb3NpdGlvblNlbGVjdGlvbih1bnNpZ25lZCYgc2Vs
ZWN0aW9uU3RhcnQsIHVuc2lnbmVkJiBzZWxlY3Rpb25FbmQpIGNvbnN0CkluZGV4OiBXZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5n
L0VkaXRvckNvbW1hbmQuY3BwCShyZXZpc2lvbiAzMDkxNCkKKysrIFdlYkNvcmUvZWRpdGluZy9F
ZGl0b3JDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDcgKzIzMSw3IEBAIHN0YXRp
YyBSZWZQdHI8UmFuZ2U+IHVuaW9uRE9NUmFuZ2VzKFJhbmcKICAgICBSYW5nZSogZW5kID0gYS0+
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCBiLCBlYykgPD0gMCA/IGIg
OiBhOwogICAgIEFTU0VSVCghZWMpOwogCi0gICAgcmV0dXJuIG5ldyBSYW5nZShhLT5zdGFydENv
bnRhaW5lcihlYyktPm93bmVyRG9jdW1lbnQoKSwgc3RhcnQtPnN0YXJ0Q29udGFpbmVyKGVjKSwg
c3RhcnQtPnN0YXJ0T2Zmc2V0KGVjKSwgZW5kLT5lbmRDb250YWluZXIoZWMpLCBlbmQtPmVuZE9m
ZnNldChlYykpOworICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGEtPnN0YXJ0Q29udGFpbmVyKGVj
KS0+b3duZXJEb2N1bWVudCgpLCBzdGFydC0+c3RhcnRDb250YWluZXIoZWMpLCBzdGFydC0+c3Rh
cnRPZmZzZXQoZWMpLCBlbmQtPmVuZENvbnRhaW5lcihlYyksIGVuZC0+ZW5kT2Zmc2V0KGVjKSk7
CiB9CiAKIC8vIEV4ZWN1dGUgY29tbWFuZCBmdW5jdGlvbnMKSW5kZXg6IFdlYkNvcmUvZWRpdGlu
Zy9TZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb24u
Y3BwCShyZXZpc2lvbiAzMDkxNCkKKysrIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjksNyArMTY5LDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gU2VsZWN0
aW9uOjp0b1JhbmdlKCkgYwogICAgIH0KIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IFJlZlB0cjxSYW5nZT4gcmVzdWx0KG5ldyBSYW5nZShzLm5vZGUoKS0+ZG9jdW1lbnQoKSkpOwor
ICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0KFJhbmdlOjpjcmVhdGUocy5ub2RlKCktPmRvY3VtZW50
KCkpKTsKICAgICByZXN1bHQtPnNldFN0YXJ0KHMubm9kZSgpLCBzLm9mZnNldCgpLCBlYyk7CiAg
ICAgaWYgKGVjKSB7CiAgICAgICAgIExPR19FUlJPUigiRXhjZXB0aW9uIHNldHRpbmcgUmFuZ2Ug
c3RhcnQgZnJvbSBTZWxlY3Rpb246ICVkIiwgZWMpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5jcHAJKHJldmlzaW9uIDMwOTE0KQorKysgV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBAQCBUZXh0SXRlcmF0b3I6OlRleHRJ
dGVyYXRvcihjb25zdCBSYW5nZSogCiAgICAgbV9lbmRPZmZzZXQgPSBlbmRPZmZzZXQ7CiAgICAg
CiAgICAgLy8gc2V0IHVwIHRoZSBjdXJyZW50IG5vZGUgZm9yIHByb2Nlc3NpbmcKLSAgICBtX25v
ZGUgPSByLT5zdGFydE5vZGUoKTsKKyAgICBtX25vZGUgPSByLT5maXJzdE5vZGUoKTsKICAgICBp
ZiAobV9ub2RlID09IDApCiAgICAgICAgIHJldHVybjsKICAgICBtX29mZnNldCA9IG1fbm9kZSA9
PSBtX3N0YXJ0Q29udGFpbmVyID8gbV9zdGFydE9mZnNldCA6IDA7CkBAIC0xMTYsNyArMTE2LDcg
QEAgVGV4dEl0ZXJhdG9yOjpUZXh0SXRlcmF0b3IoY29uc3QgUmFuZ2UqIAogICAgIG1faGFuZGxl
ZENoaWxkcmVuID0gZmFsc2U7CiAKICAgICAvLyBjYWxjdWxhdGUgZmlyc3Qgb3V0IG9mIGJvdW5k
cyBub2RlCi0gICAgbV9wYXN0RW5kTm9kZSA9IHItPnBhc3RFbmROb2RlKCk7CisgICAgbV9wYXN0
RW5kTm9kZSA9IHItPnBhc3RMYXN0Tm9kZSgpOwogCiAgICAgLy8gaW5pdGlhbGl6ZSBub2RlIHBy
b2Nlc3Npbmcgc3RhdGUKICAgICBtX25lZWRBbm90aGVyTmV3bGluZSA9IGZhbHNlOwpAQCAtNjYx
LDEyICs2NjEsMTIgQEAgUGFzc1JlZlB0cjxSYW5nZT4gVGV4dEl0ZXJhdG9yOjpyYW5nZSgpIAog
ICAgICAgICAgICAgbV9wb3NpdGlvbkVuZE9mZnNldCArPSBpbmRleDsKICAgICAgICAgICAgIG1f
cG9zaXRpb25PZmZzZXRCYXNlTm9kZSA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5l
dyBSYW5nZShtX3Bvc2l0aW9uTm9kZS0+ZG9jdW1lbnQoKSwgbV9wb3NpdGlvbk5vZGUsIG1fcG9z
aXRpb25TdGFydE9mZnNldCwgbV9wb3NpdGlvbk5vZGUsIG1fcG9zaXRpb25FbmRPZmZzZXQpOwor
ICAgICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShtX3Bvc2l0aW9uTm9kZS0+ZG9jdW1lbnQoKSwg
bV9wb3NpdGlvbk5vZGUsIG1fcG9zaXRpb25TdGFydE9mZnNldCwgbV9wb3NpdGlvbk5vZGUsIG1f
cG9zaXRpb25FbmRPZmZzZXQpOwogICAgIH0KIAogICAgIC8vIG90aGVyd2lzZSwgcmV0dXJuIHRo
ZSBlbmQgb2YgdGhlIG92ZXJhbGwgcmFuZ2Ugd2Ugd2VyZSBnaXZlbgogICAgIGlmIChtX2VuZENv
bnRhaW5lcikKLSAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShtX2VuZENvbnRhaW5lci0+ZG9jdW1l
bnQoKSwgbV9lbmRDb250YWluZXIsIG1fZW5kT2Zmc2V0LCBtX2VuZENvbnRhaW5lciwgbV9lbmRP
ZmZzZXQpOworICAgICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShtX2VuZENvbnRhaW5lci0+ZG9j
dW1lbnQoKSwgbV9lbmRDb250YWluZXIsIG1fZW5kT2Zmc2V0LCBtX2VuZENvbnRhaW5lciwgbV9l
bmRPZmZzZXQpOwogICAgICAgICAKICAgICByZXR1cm4gMDsKIH0KQEAgLTg4MCw5ICs4ODAsOSBA
QCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmVtCiBQYXNzUmVmUHRyPFJh
bmdlPiBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpyYW5nZSgpIGNvbnN0CiB7CiAg
ICAgaWYgKG1fcG9zaXRpb25Ob2RlKQotICAgICAgICByZXR1cm4gbmV3IFJhbmdlKG1fcG9zaXRp
b25Ob2RlLT5kb2N1bWVudCgpLCBtX3Bvc2l0aW9uTm9kZSwgbV9wb3NpdGlvblN0YXJ0T2Zmc2V0
LCBtX3Bvc2l0aW9uTm9kZSwgbV9wb3NpdGlvbkVuZE9mZnNldCk7CisgICAgICAgIHJldHVybiBS
YW5nZTo6Y3JlYXRlKG1fcG9zaXRpb25Ob2RlLT5kb2N1bWVudCgpLCBtX3Bvc2l0aW9uTm9kZSwg
bV9wb3NpdGlvblN0YXJ0T2Zmc2V0LCBtX3Bvc2l0aW9uTm9kZSwgbV9wb3NpdGlvbkVuZE9mZnNl
dCk7CiAgICAgCi0gICAgcmV0dXJuIG5ldyBSYW5nZShtX3N0YXJ0Tm9kZS0+ZG9jdW1lbnQoKSwg
bV9zdGFydE5vZGUsIG1fc3RhcnRPZmZzZXQsIG1fc3RhcnROb2RlLCBtX3N0YXJ0T2Zmc2V0KTsK
KyAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShtX3N0YXJ0Tm9kZS0+ZG9jdW1lbnQoKSwgbV9zdGFy
dE5vZGUsIG1fc3RhcnRPZmZzZXQsIG1fc3RhcnROb2RlLCBtX3N0YXJ0T2Zmc2V0KTsKIH0KIAog
Ly8gLS0tLS0tLS0KQEAgLTExNTgsNyArMTE1OCw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFRleHRJ
dGVyYXRvcjo6c3VicmFuZ2UKICAgICBSZWZQdHI8UmFuZ2U+IGVuZCA9IGNoYXJzLnJhbmdlKCk7
CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFJhbmdlPiByZXN1
bHQobmV3IFJhbmdlKGVudGlyZVJhbmdlLT5vd25lckRvY3VtZW50KCksIAorICAgIFJlZlB0cjxS
YW5nZT4gcmVzdWx0KFJhbmdlOjpjcmVhdGUoZW50aXJlUmFuZ2UtPm93bmVyRG9jdW1lbnQoKSwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydC0+c3RhcnRDb250YWlu
ZXIoZWMpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LT5zdGFy
dE9mZnNldChlYyksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kLT5z
dGFydENvbnRhaW5lcihlYyksIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAJ
KHJldmlzaW9uIDMwOTE0KQorKysgV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3NCw3ICsyNzQsNyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBtYWtl
UmFuZ2UoY29uc3QgVmlzaWJsCiB7CiAgICAgUG9zaXRpb24gcyA9IHJhbmdlQ29tcGxpYW50RXF1
aXZhbGVudChzdGFydCk7CiAgICAgUG9zaXRpb24gZSA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVu
dChlbmQpOwotICAgIHJldHVybiBuZXcgUmFuZ2Uocy5ub2RlKCktPmRvY3VtZW50KCksIHMubm9k
ZSgpLCBzLm9mZnNldCgpLCBlLm5vZGUoKSwgZS5vZmZzZXQoKSk7CisgICAgcmV0dXJuIFJhbmdl
OjpjcmVhdGUocy5ub2RlKCktPmRvY3VtZW50KCksIHMubm9kZSgpLCBzLm9mZnNldCgpLCBlLm5v
ZGUoKSwgZS5vZmZzZXQoKSk7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3Np
dGlvbihjb25zdCBSYW5nZSAqciwgRUFmZmluaXR5IGFmZmluaXR5KQpJbmRleDogV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9W
aXNpYmxlUG9zaXRpb24uaAkocmV2aXNpb24gMzA5MTQpCisrKyBXZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVBvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAog
I2lmbmRlZiBWaXNpYmxlUG9zaXRpb25faAogI2RlZmluZSBWaXNpYmxlUG9zaXRpb25faAogCisj
aW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gMzA5MTQpCisrKyBX
ZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzIsMjgg
KzkzMiwyNSBAQCBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oVmlzaWJsZVBvc2l0CiAgICAg
aWYgKHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgUG9z
aXRpb24gcCh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IG5ldyBSYW5nZShwLm5vZGUoKS0+ZG9jdW1lbnQoKSwgUG9zaXRpb24ocC5u
b2RlKCktPmRvY3VtZW50KCksIDApLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQocCkpOworICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHAubm9kZSgpLT5kb2N1bWVudCgp
LCBQb3NpdGlvbihwLm5vZGUoKS0+ZG9jdW1lbnQoKSwgMCksIHJhbmdlQ29tcGxpYW50RXF1aXZh
bGVudChwKSk7CiAgICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0
KCksIHRydWUpOwogfQogCiBQYXNzUmVmUHRyPFJhbmdlPiBhdm9pZEludGVyc2VjdGlvbldpdGhO
b2RlKGNvbnN0IFJhbmdlKiByYW5nZSwgTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIXJhbmdlIHx8
IHJhbmdlLT5pc0RldGFjaGVkKCkpCisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSByYW5nZS0+b3duZXJEb2N1bWVudCgpOwogCi0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgTm9kZSogc3RhcnRDb250YWluZXIgPSByYW5n
ZS0+c3RhcnRDb250YWluZXIoZWMpOwotICAgIEFTU0VSVChlYyA9PSAwKTsKLSAgICBpbnQgc3Rh
cnRPZmZzZXQgPSByYW5nZS0+c3RhcnRPZmZzZXQoZWMpOwotICAgIEFTU0VSVChlYyA9PSAwKTsK
LSAgICBOb2RlKiBlbmRDb250YWluZXIgPSByYW5nZS0+ZW5kQ29udGFpbmVyKGVjKTsKLSAgICBB
U1NFUlQoZWMgPT0gMCk7Ci0gICAgaW50IGVuZE9mZnNldCA9IHJhbmdlLT5lbmRPZmZzZXQoZWMp
OwotICAgIEFTU0VSVChlYyA9PSAwKTsKKyAgICBOb2RlKiBzdGFydENvbnRhaW5lciA9IHJhbmdl
LT5zdGFydENvbnRhaW5lcigpOworICAgIGludCBzdGFydE9mZnNldCA9IHJhbmdlLT5zdGFydE9m
ZnNldCgpOworICAgIE5vZGUqIGVuZENvbnRhaW5lciA9IHJhbmdlLT5lbmRDb250YWluZXIoKTsK
KyAgICBpbnQgZW5kT2Zmc2V0ID0gcmFuZ2UtPmVuZE9mZnNldCgpOworCisgICAgaWYgKCFzdGFy
dENvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBBU1NFUlQoc3RhcnRDb250YWlu
ZXIpOwogICAgIEFTU0VSVChlbmRDb250YWluZXIpOwogCiAgICAgaWYgKHN0YXJ0Q29udGFpbmVy
ID09IG5vZGUgfHwgc3RhcnRDb250YWluZXItPmlzRGVzY2VuZGFudE9mKG5vZGUpKSB7CkBAIC05
NjcsNyArOTY0LDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gYXZvaWRJbnRlcnNlY3Rpb25XaXRoTgog
ICAgICAgICBlbmRPZmZzZXQgPSBub2RlLT5ub2RlSW5kZXgoKTsKICAgICB9CiAKLSAgICByZXR1
cm4gbmV3IFJhbmdlKGRvY3VtZW50LCBzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQsIGVuZENv
bnRhaW5lciwgZW5kT2Zmc2V0KTsKKyAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCwg
c3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0LCBlbmRDb250YWluZXIsIGVuZE9mZnNldCk7CiB9
CiAKIFNlbGVjdGlvbiBhdm9pZEludGVyc2VjdGlvbldpdGhOb2RlKGNvbnN0IFNlbGVjdGlvbiYg
c2VsZWN0aW9uLCBOb2RlKiBub2RlKQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDMwOTE0
KQorKysgV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1OCw4
ICsyNTgsNyBAQCBzdGF0aWMgU3RyaW5nIHJlbmRlcmVkVGV4dChjb25zdCBOb2RlKiBuCiAgICAg
CiAgICAgUG9zaXRpb24gc3RhcnQoY29uc3RfY2FzdDxOb2RlKj4obm9kZSksIHN0YXJ0T2Zmc2V0
KTsKICAgICBQb3NpdGlvbiBlbmQoY29uc3RfY2FzdDxOb2RlKj4obm9kZSksIGVuZE9mZnNldCk7
Ci0gICAgUmFuZ2Ugcihub2RlLT5kb2N1bWVudCgpLCBzdGFydCwgZW5kKTsKLSAgICByZXR1cm4g
cGxhaW5UZXh0KCZyKTsKKyAgICByZXR1cm4gcGxhaW5UZXh0KFJhbmdlOjpjcmVhdGUobm9kZS0+
ZG9jdW1lbnQoKSwgc3RhcnQsIGVuZCkuZ2V0KCkpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzRm9yRWxlbWVu
dChFbGVtZW50KiBlbGVtZW50LCBib29sIGF1dGhvck9ubHkgPSB0cnVlKQpAQCAtNjM3LDcgKzYz
Niw3IEBAIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UqIHJhbmdlLCAKIHsKICAgICBz
dGF0aWMgY29uc3QgU3RyaW5nIGludGVyY2hhbmdlTmV3bGluZVN0cmluZyA9IFN0cmluZygiPGJy
IGNsYXNzPVwiIikgKyBBcHBsZUludGVyY2hhbmdlTmV3bGluZSArICJcIj4iOwogCi0gICAgaWYg
KCFyYW5nZSB8fCByYW5nZS0+aXNEZXRhY2hlZCgpKQorICAgIGlmICghcmFuZ2UpCiAgICAgICAg
IHJldHVybiAiIjsKIAogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHJhbmdlLT5vd25lckRvY3Vt
ZW50KCk7CkBAIC02NDksNiArNjQ4LDkgQEAgU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5n
ZSogcmFuZ2UsIAogICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwogICAgIERl
bGV0ZUJ1dHRvbkNvbnRyb2xsZXIqIGRlbGV0ZUJ1dHRvbiA9IGZyYW1lID8gZnJhbWUtPmVkaXRv
cigpLT5kZWxldGVCdXR0b25Db250cm9sbGVyKCkgOiAwOwogICAgIFJlZlB0cjxSYW5nZT4gdXBk
YXRlZFJhbmdlID0gYXZvaWRJbnRlcnNlY3Rpb25XaXRoTm9kZShyYW5nZSwgZGVsZXRlQnV0dG9u
ID8gZGVsZXRlQnV0dG9uLT5jb250YWluZXJFbGVtZW50KCkgOiAwKTsKKyAgICBpZiAoIXVwZGF0
ZWRSYW5nZSkKKyAgICAgICAgcmV0dXJuICIiOworCiAgICAgaWYgKGRlbGV0ZUJ1dHRvbikKICAg
ICAgICAgZGVsZXRlQnV0dG9uLT5kaXNhYmxlKCk7CiAKQEAgLTY2NiwxMSArNjY4LDExIEBAIFN0
cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UqIHJhbmdlLCAKIAogICAgIFZlY3RvcjxTdHJp
bmc+IG1hcmt1cHM7CiAgICAgVmVjdG9yPFN0cmluZz4gcHJlTWFya3VwczsKLSAgICBOb2RlKiBw
YXN0RW5kID0gdXBkYXRlZFJhbmdlLT5wYXN0RW5kTm9kZSgpOworICAgIE5vZGUqIHBhc3RFbmQg
PSB1cGRhdGVkUmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOwogICAgIE5vZGUqIGxhc3RDbG9zZWQgPSAw
OwogICAgIFZlY3RvcjxOb2RlKj4gYW5jZXN0b3JzVG9DbG9zZTsKICAgICAKLSAgICBOb2RlKiBz
dGFydE5vZGUgPSB1cGRhdGVkUmFuZ2UtPnN0YXJ0Tm9kZSgpOworICAgIE5vZGUqIHN0YXJ0Tm9k
ZSA9IHVwZGF0ZWRSYW5nZS0+Zmlyc3ROb2RlKCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2li
bGVTdGFydCh1cGRhdGVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgVlBfREVGQVVMVF9BRkZJTklU
WSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQodXBkYXRlZFJhbmdlLT5lbmRQb3Np
dGlvbigpLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKICAgICBpZiAoYW5ub3RhdGUgJiYgbmVlZElu
dGVyY2hhbmdlTmV3bGluZUFmdGVyKHZpc2libGVTdGFydCkpIHsKQEAgLTk5Miw3ICs5OTQsNyBA
QCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtCiAgICAgaWYgKCFjb250
ZXh0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIE5vZGUqIHN0eWxlTm9kZSA9IGNvbnRleHQt
PnN0YXJ0Tm9kZSgpOworICAgIE5vZGUqIHN0eWxlTm9kZSA9IGNvbnRleHQtPmZpcnN0Tm9kZSgp
OwogICAgIGlmICghc3R5bGVOb2RlKSB7CiAgICAgICAgIHN0eWxlTm9kZSA9IGNvbnRleHQtPnN0
YXJ0UG9zaXRpb24oKS5ub2RlKCk7CiAgICAgICAgIGlmICghc3R5bGVOb2RlKQpAQCAtMTAzMiw3
ICsxMDM0LDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbQogICAg
IH0KIAogICAgIC8vIEJyZWFrIHN0cmluZyBpbnRvIHBhcmFncmFwaHMuIEV4dHJhIGxpbmUgYnJl
YWtzIHR1cm4gaW50byBlbXB0eSBwYXJhZ3JhcGhzLgotICAgIE5vZGUqIGJsb2NrID0gZW5jbG9z
aW5nQmxvY2soY29udGV4dC0+c3RhcnROb2RlKCkpOworICAgIE5vZGUqIGJsb2NrID0gZW5jbG9z
aW5nQmxvY2soY29udGV4dC0+Zmlyc3ROb2RlKCkpOwogICAgIGJvb2wgdXNlQ2xvbmVzT2ZFbmNs
b3NpbmdCbG9jayA9ICFibG9jay0+aGFzVGFnTmFtZShib2R5VGFnKTsKICAgICAKICAgICBWZWN0
b3I8U3RyaW5nPiBsaXN0OwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNp
b24gMzA5MTQpCisrKyBXZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDcgKzU5LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0Jv
dW5kYXJ5KAogCiAgICAgUG9zaXRpb24gc3RhcnQgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQo
UG9zaXRpb24oYm91bmRhcnksIDApKTsKICAgICBQb3NpdGlvbiBlbmQgPSByYW5nZUNvbXBsaWFu
dEVxdWl2YWxlbnQocG9zKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlID0gbmV3IFJh
bmdlKGQpOworICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGQp
OwogICAgIAogICAgIGludCBleGNlcHRpb24gPSAwOwogICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFy
dChzdGFydC5ub2RlKCksIHN0YXJ0Lm9mZnNldCgpLCBleGNlcHRpb24pOwpJbmRleDogV2ViQ29y
ZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHJldmlzaW9uIDMwOTE0KQorKysgV2ViQ29y
ZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTc2NSw5
ICs3NjUsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50ICpmb3JtRWxlbWVudEZyb21ECiAKIC0g
KE5TUmFuZ2UpY29udmVydFRvTlNSYW5nZTooUmFuZ2UgKilyYW5nZQogewotICAgIGludCBleGNl
cHRpb24gPSAwOwotCi0gICAgaWYgKCFyYW5nZSB8fCByYW5nZS0+aXNEZXRhY2hlZCgpKQorICAg
IGlmICghcmFuZ2UgfHwgIXJhbmdlLT5zdGFydENvbnRhaW5lcigpKQogICAgICAgICByZXR1cm4g
TlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CiAKICAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290
ID0gbV9mcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5yb290RWRpdGFibGVFbGVtZW50KCk7
CkBAIC03NzYsMTcgKzc3NCwxOCBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50ICpmb3JtRWxlbWVu
dEZyb21ECiAgICAgLy8gTW91c2UgZXZlbnRzIG1heSBjYXVzZSBUU00gdG8gYXR0ZW1wdCB0byBj
cmVhdGUgYW4gTlNSYW5nZSBmb3IgYSBwb3J0aW9uIG9mIHRoZSB2aWV3CiAgICAgLy8gdGhhdCBp
cyBub3QgaW5zaWRlIHRoZSBjdXJyZW50IGVkaXRhYmxlIHJlZ2lvbi4gIFRoZXNlIGNoZWNrcyBl
bnN1cmUgd2UgZG9uJ3QgcHJvZHVjZQogICAgIC8vIHBvdGVudGlhbGx5IGludmFsaWQgZGF0YSB3
aGVuIHJlc3BvbmRpbmcgdG8gc3VjaCByZXF1ZXN0cy4KLSAgICBpZiAocmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKGV4Y2VwdGlvbikgIT0gc2NvcGUgJiYgIXJhbmdlLT5zdGFydENvbnRhaW5lcihleGNl
cHRpb24pLT5pc0Rlc2NlbmRhbnRPZihzY29wZSkpCisgICAgaWYgKHJhbmdlLT5zdGFydENvbnRh
aW5lcigpICE9IHNjb3BlICYmICFyYW5nZS0+c3RhcnRDb250YWluZXIoKS0+aXNEZXNjZW5kYW50
T2Yoc2NvcGUpKQogICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0g
ICAgaWYocmFuZ2UtPmVuZENvbnRhaW5lcihleGNlcHRpb24pICE9IHNjb3BlICYmICFyYW5nZS0+
ZW5kQ29udGFpbmVyKGV4Y2VwdGlvbiktPmlzRGVzY2VuZGFudE9mKHNjb3BlKSkKKyAgICBpZihy
YW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gc2NvcGUgJiYgIXJhbmdlLT5lbmRDb250YWluZXIoKS0+
aXNEZXNjZW5kYW50T2Yoc2NvcGUpKQogICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RG
b3VuZCwgMCk7CiAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiB0ZXN0UmFuZ2UgPSBuZXcgUmFuZ2Uo
c2NvcGUtPmRvY3VtZW50KCksIHNjb3BlLCAwLCByYW5nZS0+c3RhcnRDb250YWluZXIoZXhjZXB0
aW9uKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCh0ZXN0UmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbikgPT0gc2NvcGUpOworICAgIFJlZlB0cjxSYW5n
ZT4gdGVzdFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShzY29wZS0+ZG9jdW1lbnQoKSwgc2NvcGUsIDAs
IHJhbmdlLT5zdGFydENvbnRhaW5lcigpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSk7CisgICAgQVNT
RVJUKHRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29wZSk7CiAgICAgaW50IHN0YXJ0
UG9zaXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5nZXQoKSk7CiAK
LSAgICB0ZXN0UmFuZ2UtPnNldEVuZChyYW5nZS0+ZW5kQ29udGFpbmVyKGV4Y2VwdGlvbiksIHJh
bmdlLT5lbmRPZmZzZXQoZXhjZXB0aW9uKSwgZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQodGVzdFJh
bmdlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pID09IHNjb3BlKTsKKyAgICBFeGNlcHRpb25D
b2RlIGVjOworICAgIHRlc3RSYW5nZS0+c2V0RW5kKHJhbmdlLT5lbmRDb250YWluZXIoKSwgcmFu
Z2UtPmVuZE9mZnNldCgpLCBlYyk7CisgICAgQVNTRVJUKHRlc3RSYW5nZS0+c3RhcnRDb250YWlu
ZXIoKSA9PSBzY29wZSk7CiAgICAgaW50IGVuZFBvc2l0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUxlbmd0aCh0ZXN0UmFuZ2UuZ2V0KCkpOwogCiAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKHN0YXJ0
UG9zaXRpb24sIGVuZFBvc2l0aW9uIC0gc3RhcnRQb3NpdGlvbik7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShyZXZpc2lvbiAzMDkxNCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkyLDcg
KzQ5Miw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Q29udHJvbDo6dmlzaWIKICAgICBp
ZiAoaW5kZXggPD0gMCkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihtX2lubmVyVGV4
dC5nZXQoKSwgMCwgRE9XTlNUUkVBTSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IG5ldyBSYW5nZShkb2N1bWVudCgpKTsKKyAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpKTsKICAgICByYW5nZS0+c2Vs
ZWN0Tm9kZUNvbnRlbnRzKG1faW5uZXJUZXh0LmdldCgpLCBlYyk7CiAgICAgQ2hhcmFjdGVySXRl
cmF0b3IgaXQocmFuZ2UuZ2V0KCkpOwogICAgIGl0LmFkdmFuY2UoaW5kZXggLSAxKTsKQEAgLTUw
NSw3ICs1MDUsNyBAQCBpbnQgUmVuZGVyVGV4dENvbnRyb2w6OmluZGV4Rm9yVmlzaWJsZVBvCiAg
ICAgaWYgKCFpbmRleFBvc2l0aW9uLm5vZGUoKSB8fCBpbmRleFBvc2l0aW9uLm5vZGUoKS0+cm9v
dEVkaXRhYmxlRWxlbWVudCgpICE9IG1faW5uZXJUZXh0KQogICAgICAgICByZXR1cm4gMDsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbmV3IFJh
bmdlKGRvY3VtZW50KCkpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KGRvY3VtZW50KCkpOwogICAgIHJhbmdlLT5zZXRTdGFydChtX2lubmVyVGV4dC5nZXQoKSwgMCwg
ZWMpOwogICAgIHJhbmdlLT5zZXRFbmQoaW5kZXhQb3NpdGlvbi5ub2RlKCksIGluZGV4UG9zaXRp
b24ub2Zmc2V0KCksIGVjKTsKICAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChy
YW5nZS5nZXQoKSk7CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMzA5MTkpCisrKyBXZWJLaXQvbWFjL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDA4LTAzLTA5ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIHVwZGF0ZSBjb2RlIGFmZmVjdGVkIGJ5IFJhbmdlIGNoYW5nZXMK
KworICAgICAgICAqIE1pc2MvV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLm1tOgorICAgICAg
ICAoK1tOU0F0dHJpYnV0ZWRTdHJpbmcgX3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOl0p
OiBVcGRhdGUgZm9yIG5hbWUgY2hhbmdlcy4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxSZXBy
ZXNlbnRhdGlvbi5tbToKKyAgICAgICAgKC1bV2ViSFRNTFJlcHJlc2VudGF0aW9uIGF0dHJpYnV0
ZWRTdHJpbmdGcm9tOnN0YXJ0T2Zmc2V0OnRvOmVuZE9mZnNldDpdKToKKyAgICAgICAgVXNlIFJh
bmdlOjpjcmVhdGUuCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAg
KC1bV2ViSFRNTFZpZXcgYXR0cmlidXRlZFN0cmluZ10pOiBEaXR0by4KKwogMjAwOC0wMy0wOCAg
TWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyLgpJbmRleDogV2ViS2l0L21hYy9NaXNjL1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJh
cy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL01pc2MvV2ViTlNBdHRyaWJ1dGVkU3RyaW5n
RXh0cmFzLm1tCShyZXZpc2lvbiAzMDkxNCkKKysrIFdlYktpdC9tYWMvTWlzYy9XZWJOU0F0dHJp
YnV0ZWRTdHJpbmdFeHRyYXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE1NywxMCArMTU3LDEwIEBA
IHN0YXRpYyBOU0ZpbGVXcmFwcGVyICpmaWxlV3JhcHBlckZvckVsZW0KICAgICBpZiAoIXJhbmdl
IHx8ICFyYW5nZS0+Ym91bmRhcnlQb2ludHNWYWxpZCgpKQogICAgICAgICByZXR1cm4gbmlsOwog
ICAgIAotICAgIE5vZGUqIGZpcnN0Tm9kZSA9IHJhbmdlLT5zdGFydE5vZGUoKTsKKyAgICBOb2Rl
KiBmaXJzdE5vZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCk7CiAgICAgaWYgKCFmaXJzdE5vZGUpCiAg
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgTm9kZSogcGFzdEVuZE5vZGUgPSByYW5nZS0+cGFzdEVu
ZE5vZGUoKTsKKyAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7
CiAgICAgCiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gcmFuZ2UtPnN0YXJ0T2Zmc2V0KGVjKTsKICAg
ICBpbnQgZW5kT2Zmc2V0ID0gcmFuZ2UtPmVuZE9mZnNldChlYyk7CkBAIC0xOTAsNyArMTkwLDcg
QEAgc3RhdGljIE5TRmlsZVdyYXBwZXIgKmZpbGVXcmFwcGVyRm9yRWxlbQogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIHdoaWxlIChjdXJyZW50Tm9kZSAmJiBjdXJyZW50Tm9kZSAhPSBwYXN0
RW5kTm9kZSkgeworICAgIHdoaWxlIChjdXJyZW50Tm9kZSAmJiBjdXJyZW50Tm9kZSAhPSBwYXN0
TGFzdE5vZGUpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IGN1cnJlbnROb2Rl
LT5yZW5kZXJlcigpOwogICAgICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgICAgIFJlbmRl
clN0eWxlICpzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwpAQCAtNDEyLDcgKzQxMiw3IEBAIHN0
YXRpYyBOU0ZpbGVXcmFwcGVyICpmaWxlV3JhcHBlckZvckVsZW0KICAgICAgICAgd2hpbGUgKCFu
ZXh0Tm9kZSAmJiBjdXJyZW50Tm9kZS0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBTdHJp
bmcgdGV4dDsKICAgICAgICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnBhcmVudE5v
ZGUoKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZSA9PSBwYXN0RW5kTm9kZSkKKyAgICAg
ICAgICAgIGlmIChjdXJyZW50Tm9kZSA9PSBwYXN0TGFzdE5vZGUpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBuZXh0Tm9kZSA9IGN1cnJlbnROb2RlLT5uZXh0U2libGluZygp
OwogCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0J
KHJldmlzaW9uIDMwOTE0KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRh
dGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMjc1LDggKzI3NSw3IEBAIHN0YXRpYyBOU0FycmF5
ICpjb25jYXRlbmF0ZUFycmF5cyhOU0FycmEKIAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0
cmlidXRlZFN0cmluZ0Zyb206KERPTU5vZGUgKilzdGFydE5vZGUgc3RhcnRPZmZzZXQ6KGludClz
dGFydE9mZnNldCB0bzooRE9NTm9kZSAqKWVuZE5vZGUgZW5kT2Zmc2V0OihpbnQpZW5kT2Zmc2V0
CiB7Ci0gICAgUmFuZ2UgcmFuZ2UoW3N0YXJ0Tm9kZSBfbm9kZV0tPmRvY3VtZW50KCksIFtzdGFy
dE5vZGUgX25vZGVdLCBzdGFydE9mZnNldCwgW2VuZE5vZGUgX25vZGVdLCBlbmRPZmZzZXQpOwot
ICAgIHJldHVybiBbTlNBdHRyaWJ1dGVkU3RyaW5nIF93ZWJfYXR0cmlidXRlZFN0cmluZ0Zyb21S
YW5nZTomcmFuZ2VdOworICAgIHJldHVybiBbTlNBdHRyaWJ1dGVkU3RyaW5nIF93ZWJfYXR0cmli
dXRlZFN0cmluZ0Zyb21SYW5nZTpSYW5nZTo6Y3JlYXRlKFtzdGFydE5vZGUgX25vZGVdLT5kb2N1
bWVudCgpLCBbc3RhcnROb2RlIF9ub2RlXSwgc3RhcnRPZmZzZXQsIFtlbmROb2RlIF9ub2RlXSwg
ZW5kT2Zmc2V0KS5nZXQoKV07CiB9CiAKIC0gKERPTUVsZW1lbnQgKillbGVtZW50V2l0aE5hbWU6
KE5TU3RyaW5nICopbmFtZSBpbkZvcm06KERPTUVsZW1lbnQgKilmb3JtCkluZGV4OiBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiAzMDkxNCkKKysrIFdlYktpdC9tYWMvV2ViVmll
dy9XZWJIVE1MVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTY3OSw4ICs1Njc5LDcgQEAgc3Rh
dGljIHZvaWQgZXh0cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dAogICAgIE5TQXR0cmlidXRlZFN0
cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1dGVTdHJpbmdGcm9tRE9NUmFu
Z2U6W2RvY3VtZW50IF9kb2N1bWVudFJhbmdlXV07CiAgICAgaWYgKCFhdHRyaWJ1dGVkU3RyaW5n
KSB7CiAgICAgICAgIERvY3VtZW50KiBjb3JlRG9jdW1lbnQgPSBjb3JlKGRvY3VtZW50KTsKLSAg
ICAgICAgUmFuZ2UgcmFuZ2UoY29yZURvY3VtZW50LCBjb3JlRG9jdW1lbnQsIDAsIDAsIDApOwot
ICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW05TQXR0cmlidXRlZFN0cmluZyBfd2ViX2F0dHJp
YnV0ZWRTdHJpbmdGcm9tUmFuZ2U6JnJhbmdlXTsKKyAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9
IFtOU0F0dHJpYnV0ZWRTdHJpbmcgX3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOlJhbmdl
OjpjcmVhdGUoY29yZURvY3VtZW50LCBjb3JlRG9jdW1lbnQsIDAsIGNvcmVEb2N1bWVudCwgY29y
ZURvY3VtZW50LT5jaGlsZE5vZGVDb3VudCgpKS5nZXQoKV07CiAgICAgfQogICAgIHJldHVybiBh
dHRyaWJ1dGVkU3RyaW5nOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19758</attachid>
            <date>2008-03-14 00:23:38 -0700</date>
            <delta_ts>2008-03-14 13:58:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>RangePatch.txt</filename>
            <type>text/plain</type>
            <size>85278</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMTA1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIyIEBACisyMDA4LTAzLTEzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGZp
eCBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTk5NworICAgICAgICAg
IFJhbmdlcyBhcmUgbm90IGZpeGVkIGFmdGVyIG11dGF0aW9uIChhZmZlY3RzIEFjaWQzIHRlc3Qg
MTMpCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vUmFuZ2UvbXV0YXRpb24uaHRtbAorCisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZCBSYW5nZURvY3Vt
ZW50TXV0YXRpb24uaC4KKworICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnNldERhdGEpOiBSZXBsYWNlZCBjYWxsIHRvIERv
Y3VtZW50OjpyZW1vdmVNYXJrZXJzCisgICAgICAgIHdpdGggY2FsbCB0byBEb2N1bWVudDo6dGV4
dFJlbW92ZWQuCisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjppbnNlcnREYXRhKTog
UmVwbGFjZWQgY2FsbCB0byBEb2N1bWVudDo6c2hpZnRNYXJrZXJzCisgICAgICAgIHdpdGggY2Fs
bCB0byBEb2N1bWVudDo6dGV4dEluc2VydGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVy
RGF0YTo6ZGVsZXRlRGF0YSk6IFJlcGxhY2VkIGNhbGwgdG8gRG9jdW1lbnQ6OnJlbW92ZU1hcmtl
cnMKKyAgICAgICAgYW5kIERvY3VtZW50OjpzaGlmdE1hcmtlcnMgd2l0aCBjYWxsIHRvIERvY3Vt
ZW50Ojp0ZXh0UmVtb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnJlcGxh
Y2VEYXRhKTogUmVwbGFjZWQgY2FsbCB0byBEb2N1bWVudDo6cmVtb3ZlTWFya2VycworICAgICAg
ICBhbmQgRG9jdW1lbnQ6OnNoaWZ0TWFya2VycyB3aXRoIGNhbGwgdG8gRG9jdW1lbnQ6OnRleHRS
ZW1vdmVkIGFuZAorICAgICAgICBEb2N1bWVudDo6dGV4dEluc2VydGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q2hhcmFjdGVyRGF0YTo6Y29udGFpbnNPbmx5V2hpdGVzcGFjZSk6IFR3ZWFrZWQgYSBi
aXQuCisKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb250YWluZXJOb2RlOjpjaGlsZHJlbkNoYW5nZWQpOiBBZGRlZCBhIGNhbGwgdG8KKyAgICAg
ICAgRG9jdW1lbnQ6Om5vZGVDaGlsZHJlbkNoYW5nZWQgd2hlbiB0aGUgbm1iZXIgb2YgY2hpbGRy
ZW4gd2FzIGNoYW5nZWQgKGFuZCBub3QKKyAgICAgICAgYnkgdGhlIHBhcnNlcikuCisgICAgICAg
IChXZWJDb3JlOjpkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyk6IFVwZGF0ZWQgZm9yIG5hbWUg
Y2hhbmdlLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50Ojp+RG9jdW1lbnQpOiBBc3NlcnQgdGhhdCBhbGwgcmFuZ2VzIGFyZSBnb25lLgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5vZGVDaGlsZHJlbkNoYW5nZWQpOiBBZGRlZC4g
Q2FsbHMgbm9kZUNoaWxkcmVuQ2hhbmdlZCBvbgorICAgICAgICBhbGwgcmFuZ2VzLgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5vZGVXaWxsQmVSZW1vdmVkKTogUmVuYW1lZCBmcm9tIG5v
dGlmeUJlZm9yZU5vZGVSZW1vdmFsLgorICAgICAgICBBZGRlZCBjb2RlIHRvIGNhbGwgbm9kZVdp
bGxCZVJlbW92ZWQgb24gYWxsIHJhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0
ZXh0SW5zZXJ0ZWQpOiBBZGRlZC4gQ2FsbHMgdGV4dEluc2VydGVkIG9uIGFsbCByYW5nZXMgYW5k
CisgICAgICAgIGFsc28gY2FsbHMgc2hpZnRNYXJrZXJzLgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OnRleHRSZW1vdmVkKTogQWRkZWQuIENhbGxzIHRleHRSZW1vdmVkIG9uIGFsbCByYW5n
ZXMgYW5kIGFsc28KKyAgICAgICAgY2FsbHMgcmVtb3ZlTWFya2VycyBhbmQgc2hpZnRNYXJrZXJz
LgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnRleHROb2Rlc01lcmdlZCk6IEFkZGVkLiBD
YWxscyB0ZXh0Tm9kZXNNZXJnZWQgb24gYWxsIHJhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50Ojp0ZXh0Tm9kZVNwbGl0KTogQWRkZWQuIENhbGxzIHRleHROb2RlU3BsaXQgb24gYWxs
IHJhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphdHRhY2hSYW5nZSk6IEFkZGVk
LiBBZGRzIHJhbmdlIHRvIHRoZSBIYXNoU2V0IG9mIGFsbCByYW5nZXMKKyAgICAgICAgZm9yIHRo
aXMgZG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGV0YWNoUmFuZ2UpOiBB
ZGRlZC4gUmVtb3ZlcyByYW5nZSBmcm9tIHRoZSBIYXNoU2V0LgorICAgICAgICAqIGRvbS9Eb2N1
bWVudC5oOiBBZGRlZCB0aGUgbmV3IGZ1bmN0aW9ucyBhbmQgdGhlIGRhdGEgbWVtYmVyLgorCisg
ICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6bm9y
bWFsaXplQXR0cmlidXRlcyk6IEFkZGVkLiBDb250YWlucyB0aGUgcGFydCBvZiB0aGUKKyAgICAg
ICAgbm9ybWFsaXplIGZ1bmN0aW9uIHRoYXQncyBzcGVjaWZpYyB0byBFbGVtZW50LiBCZXR0ZXIg
ZW5jYXBzdWxhdGlvbiB0byBoYXZlIGl0CisgICAgICAgIGhlcmUgcmF0aGVyIHRoYW4gaW4gTm9k
ZTo6bm9ybWFsaXplLgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6IEFkZGVkIHRoZSBuZXcgZnVu
Y3Rpb24uCisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2Rl
Ojpub3JtYWxpemUpOiBSZXdyb3RlIHNvIGl0J3Mgbm8gbG9uZ2VyIHJlY3Vyc2l2ZS4gQWxzbyBh
ZGRlZAorICAgICAgICBhIGNhbGwgdG8gdGV4dE5vZGVzTWVyZ2VkIGFmdGVyIGVhY2ggcGFpciBv
ZiBub2RlcyBpcyBtZXJnZWQgYnV0IGJlZm9yZSB0aGUKKyAgICAgICAgc2Vjb25kIG5vZGUgaXMg
cmVtb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnRyYXZlcnNlTmV4dE5vZGVQb3N0T3Jk
ZXIpOiBBZGRlZC4gSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkKKyAgICAgICAgbm9ybWFsaXplLCBi
dXQgYWxzbyB1c2VmdWwgZWxzZXdoZXJlLgorICAgICAgICAqIGRvbS9Ob2RlLmg6IEFkZGVkIHRo
ZSBuZXcgZnVuY3Rpb24uCisKKyAgICAgICAgKiBkb20vTm9kZUl0ZXJhdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGVJdGVyYXRvcjo6bm9kZVdpbGxCZVJlbW92ZWQpOiBSZW5hbWVkIGZy
b20gbm90aWZ5QmVmb3JlTm9kZVJlbW92YWwuCisgICAgICAgICogZG9tL05vZGVJdGVyYXRvci5o
OiBEaXR0by4KKworICAgICAgICAqIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpzZXREYXRhKTogQ2FsbCB0ZXh0
UmVtb3ZlZC4KKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlV2l0aEluZGV4OjppbmRleCk6IEFkZGVkLiBDb21wdXRlcyBhbmQgc3RvcmVzIGluZGV4Lgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZVdpdGhJbmRleEJlZm9yZTo6aW5kZXhCZWZvcmUpOiBBZGRl
ZC4gQ29tcHV0ZXMgYW5kIHN0b3JlcyBpbmRleC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVXaXRo
SW5kZXhBZnRlcjo6aW5kZXhBZnRlcik6IEFkZGVkLiBDb21wdXRlcyBhbmQgc3RvcmVzIGluZGV4
LgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OlJhbmdlKTogQ2FsbCBhdHRhY2hSYW5nZS4KKyAg
ICAgICAgKFdlYkNvcmU6OlJhbmdlOjp+UmFuZ2UpOiBDYWxsIGRldGFjaFJhbmdlIHVubGVzcyB0
aGUgcmFuZ2UgaXMgYWxyZWFkeSBkZXRhY2hlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpj
b21tb25BbmNlc3RvckNvbnRhaW5lcik6IFJlbW92ZWQgY2hlY2sgZm9yIFdST05HX0RPQ1VNRU5U
X0VSUi4KKyAgICAgICAgSXQncyBubyBsb25nZXIgcG9zc2libGUgdG8gY3JlYXRlIGEgcmFuZ2Ug
d2hlcmUgdGhlIHR3byBjb250YWluZXJzIGFyZSBub24temVybworICAgICAgICBhbmQgaGF2ZSBu
byBjb21tb24gYW5jZXN0b3IuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6aXNQb2ludEluUmFu
Z2UpOiBSZXdyb3RlIGV4cHJlc3Npb24gdG8gYmUgbW9yZSByZWFkYWJsZS4KKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpjb21wYXJlTm9kZSk6IENoYW5nZWQgbG9jYWwgdmFyaWFibGUgdG8gdXNl
IGludCBmb3IgY29uc2lzdGVuY3kuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZUJv
dW5kYXJ5UG9pbnRzKTogUmVwbGFjZWQgQVNTRVJUIHdpdGggQVNTRVJUX05PVF9SRUFDSEVELgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmRlbGV0ZUNvbnRlbnRzKTogUmVtb3ZlZCBjaGVjayBm
b3IgSU5WQUxJRF9TVEFURV9FUlIgYW5kCisgICAgICAgIGluaXRpYWxpemF0aW9uIG9mIGVjIHRv
IDA7IGJvdGggYXJlIG5vdyBpbnNpZGUgY2hlY2tEZWxldGVFeHRyYWN0LgorICAgICAgICAoV2Vi
Q29yZTo6UmFuZ2U6OmludGVyc2VjdHNOb2RlKTogQ2hhbmdlZCBsb2NhbCB2YXJpYWJsZSB0byB1
c2UgaW50IGZvciBjb25zaXN0ZW5jeS4KKyAgICAgICAgQWxzbyBjaGFuZ2VkIGNvbXBhcmlzb24g
dG8gdXNlIDwgMCBhbmQgPj0gMCByYXRoZXIgdGhhbiBjaGVja2luZyBleHBsaWNpdGx5IGZvciAx
CisgICAgICAgIGFuZCAtMS4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpwcm9jZXNzQ29udGVu
dHMpOiBDaGFuZ2VkIGNvZGUgdG8gbm90IGdldCB0aGUgbm9kZVR5cGUgbXVsdGlwbGUKKyAgICAg
ICAgdGltZXMgb24gdGhlIHNhbWUgbm9kZSwgYW5kIHR3ZWFrZWQgZm9ybWF0dGluZy4gUmVtb3Zl
ZCBjb2RlIHRvIHVwZGF0ZSB0aGUgcmFuZ2UKKyAgICAgICAgb24gZGVsZXRpb24sIGJlY2F1c2Ug
dGhlIG5vcm1hbCBkZWxldGUgbG9naWMgd2lsbCB0YWtlIGNhcmUgb2YgdGhhdCBub3cuCisgICAg
ICAgIChXZWJDb3JlOjpSYW5nZTo6ZXh0cmFjdENvbnRlbnRzKTogUmVtb3ZlZCBjaGVjayBmb3Ig
SU5WQUxJRF9TVEFURV9FUlIgYW5kCisgICAgICAgIGluaXRpYWxpemF0aW9uIG9mIGVjIHRvIDA7
IGJvdGggYXJlIG5vdyBpbnNpZGUgY2hlY2tEZWxldGVFeHRyYWN0LgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6Omluc2VydE5vZGUpOiBDaGFuZ2VkIGxvY2FsIHZhcmlhYmxlIHRvIHVzZSBpbnQg
Zm9yIGNvbnNpc3RlbmN5LgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnRvU3RyaW5nKTogQ2hh
bmdlZCB2YXJpYWJsZSBuYW1lIHRvIHBhc3RMYXN0LgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6
OmRldGFjaCk6IENhbGwgZGV0YWNoUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y2hl
Y2tEZWxldGVFeHRyYWN0KTogQWRkZWQgY2hlY2sgZm9yIGRldGFjaGVkIHJhbmdlIGFuZCBjb2Rl
IHRvCisgICAgICAgIHNldCBlYyB0byAwOyBtb3ZlZCBoZXJlIGZyb20gdGhlIHR3byBjYWxsZXJz
LiBBbHNvIGNoYW5nZWQgdmFyaWFibGUgbmFtZSB0byBwYXN0TGFzdC4KKyAgICAgICAgKFdlYkNv
cmU6OmVuZHBvaW50Tm9kZUNoaWxkcmVuQ2hhbmdlZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6Om5vZGVDaGlsZHJlbkNoYW5nZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmVuZHBvaW50Tm9kZVdpbGxCZVJlbW92ZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJh
bmdlOjpub2RlV2lsbEJlUmVtb3ZlZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZW5kcG9p
bnRUZXh0SW5zZXJ0ZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp0ZXh0SW5z
ZXJ0ZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVuZHBvaW50VGV4dFJlbW92ZWQpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp0ZXh0UmVtb3ZlZCk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6ZW5kcG9pbnRUZXh0Tm9kZXNNZXJnZWQpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJhbmdlOjp0ZXh0Tm9kZXNNZXJnZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmVuZHBvaW50VGV4dE5vZGVzU3BsaXQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJh
bmdlOjp0ZXh0Tm9kZVNwbGl0KTogQWRkZWQuCisKKyAgICAgICAgKiBkb20vUmFuZ2UuaDogQWRk
ZWQgbmV3IG1lbWJlciBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBkb20vUmFuZ2VEb2N1bWVudE11
dGF0aW9uLmg6IEFkZGVkIG5ldyB0eXBlcyB1c2VkIHRvIHN0b3JlIG5vZGUgcG9pbnRlcnMgYWxv
bmcKKyAgICAgICAgd2l0aCBub2RlIGluZGljZXMuIFRoZXNlIGNsYXNzZXMgZ3VhcmFudGVlIHdl
IHdvbid0IGZpbmQgdGhlIGluZGV4IGZvciB0aGUgc2FtZQorICAgICAgICBub2RlIG1vcmUgdGhh
biBvbmNlLgorCisgICAgICAgICogZG9tL1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dDo6c3BsaXRUZXh0KTogQ2FsbCB0ZXh0Tm9kZVNwbGl0LgorCisgICAgICAgICogZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFu
ZDo6YXBwbHlJbmxpbmVTdHlsZSk6IENoYW5nZWQgdmFyaWFibGUgbmFtZSB0byBwYXN0TGFzdC4K
KwogMjAwOC0wMy0xMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAg
KiBodG1sL1ByZWxvYWRTY2FubmVyLmg6IENvcnJlY3RlZCBsaWNlbnNlLgpJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDMxMDUzKQorKysg
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTE2MDUsNiArMTYwNSw3IEBACiAJCTkzNUM0Nzc1MDlBQzREOEUwMEE2QUFCNCAvKiBHYXBS
ZWN0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1
QzQ3NzQwOUFDNEQ4RDAwQTZBQUI0IC8qIEdhcFJlY3RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTM1RkJDNDUwOUJBMDBCOTAwRTIzMEIxIC8q
IEV2ZW50TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzNUZCQzQ0MDlCQTAwQjkwMEUyMzBCMSAvKiBFdmVudExpc3RlbmVyLmggKi87IH07
CiAJCTkzNUZCQ0YyMDlCQTE0M0IwMEUyMzBCMSAvKiBFeGNlcHRpb25Db2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzVGQkNGMTA5QkExNDNCMDBF
MjMwQjEgLyogRXhjZXB0aW9uQ29kZS5oICovOyB9OworCQk5Mzc4QzQ4QzBEOEE0RjlFMDBFOEM0
RjAgLyogUmFuZ2VEb2N1bWVudE11dGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzc4QzQ4QjBEOEE0RjlFMDBFOEM0RjAgLyogUmFuZ2VEb2N1
bWVudE11dGF0aW9uLmggKi87IH07CiAJCTkzNzk5RUY4MEJGMjc0MzYwMEQwRjIzMCAvKiBSZW5k
ZXJXb3JkQnJlYWsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTM3OTlFRjYwQkYyNzQzNjAwRDBGMjMwIC8qIFJlbmRlcldvcmRCcmVhay5jcHAgKi87
IH07CiAJCTkzNzk5RUY5MEJGMjc0MzYwMEQwRjIzMCAvKiBSZW5kZXJXb3JkQnJlYWsuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNzk5RUY3MEJGMjc0
MzYwMEQwRjIzMCAvKiBSZW5kZXJXb3JkQnJlYWsuaCAqLzsgfTsKIAkJOTM4MEY0NzMwOUExMUFC
NDAwMUZEQjM0IC8qIFdpZGdldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MzgwRjQ3MTA5QTExQUI0MDAxRkRCMzQgLyogV2lkZ2V0LmNwcCAqLzsg
fTsKQEAgLTU5MTMsNiArNTkxNCw3IEBACiAJCTkzNUZCQzQ0MDlCQTAwQjkwMEUyMzBCMSAvKiBF
dmVudExpc3RlbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50TGlz
dGVuZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM1RkJDRjEwOUJBMTQzQjAw
RTIzMEIxIC8qIEV4Y2VwdGlvbkNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRXhjZXB0aW9uQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzZERDAz
QTA5Q0VBQzI3MDA1NkFFOEMgLyogUmFuZ2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJh
bmdlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTM3OEM0OEIwRDhBNEY5RTAw
RThDNEYwIC8qIFJhbmdlRG9jdW1lbnRNdXRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSYW5nZURvY3VtZW50TXV0YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTM3OTlFRjYwQkYyNzQzNjAwRDBGMjMwIC8qIFJlbmRlcldvcmRCcmVhay5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJXb3JkQnJlYWsuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Mzc5OUVGNzBCRjI3NDM2MDBEMEYyMzAg
LyogUmVuZGVyV29yZEJyZWFrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlcldvcmRCcmVhay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzgwRjQ3MTA5
QTExQUI0MDAxRkRCMzQgLyogV2lkZ2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXaWRnZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI1
OTEsNiArMTI1OTMsNyBAQAogCQkJCUY1MjNEMzAzMDJERTQ0NzYwMTg2MzVDQSAvKiBSYW5nZS5j
cHAgKi8sCiAJCQkJRjUyM0QzMDQwMkRFNDQ3NjAxODYzNUNBIC8qIFJhbmdlLmggKi8sCiAJCQkJ
OTM2REQwM0EwOUNFQUMyNzAwNTZBRThDIC8qIFJhbmdlLmlkbCAqLywKKwkJCQk5Mzc4QzQ4QjBE
OEE0RjlFMDBFOEM0RjAgLyogUmFuZ2VEb2N1bWVudE11dGF0aW9uLmggKi8sCiAJCQkJRDIzQ0E1
NkIwQUIwRUI4RDAwNTEwOEE1IC8qIFJhbmdlRXhjZXB0aW9uLmggKi8sCiAJCQkJRDIzQ0E1NDgw
QUIwRTk4MzAwNTEwOEE1IC8qIFJhbmdlRXhjZXB0aW9uLmlkbCAqLywKIAkJCQk4NTAzMUIzNTBB
NDRFRkM3MDBGOTkyRTAgLyogUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3BwICovLApAQCAtMTQ1
NDIsNiArMTQ1NDUsNyBAQAogCQkJCUE5RDI0ODAxMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdp
bkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOUQyNDgwNzBENzU3RTdEMDBGREY5NTkgLyog
SlNNaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTlEMjQ4MDkwRDc1N0U3RDAwRkRGOTU5
IC8qIEpTTWltZVR5cGVBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTM3OEM0OEMwRDhBNEY5
RTAwRThDNEYwIC8qIFJhbmdlRG9jdW1lbnRNdXRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4
OiBXZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9DaGFyYWN0ZXJEYXRhLmNwcAkocmV2aXNpb24gMzEwNTMpCisrKyBXZWJDb3JlL2RvbS9DaGFy
YWN0ZXJEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTAgKzM4LDEwIEBAIENoYXJhY3Rl
ckRhdGE6OkNoYXJhY3RlckRhdGEoRG9jdW1lbnQgKmQKIHsKIH0KIAotQ2hhcmFjdGVyRGF0YTo6
Q2hhcmFjdGVyRGF0YShEb2N1bWVudCAqZG9jLCBjb25zdCBTdHJpbmcgJl90ZXh0KQotICAgIDog
RXZlbnRUYXJnZXROb2RlKGRvYykKK0NoYXJhY3RlckRhdGE6OkNoYXJhY3RlckRhdGEoRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQpCisgICAgOiBFdmVudFRhcmdldE5vZGUo
ZG9jdW1lbnQpCiB7Ci0gICAgbV9kYXRhID0gX3RleHQuaW1wbCgpID8gX3RleHQuaW1wbCgpIDog
U3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAgICBtX2RhdGEgPSB0ZXh0LmltcGwoKSA/IHRleHQuaW1w
bCgpIDogU3RyaW5nSW1wbDo6ZW1wdHkoKTsKIH0KIAogQ2hhcmFjdGVyRGF0YTo6fkNoYXJhY3Rl
ckRhdGEoKQpAQCAtNTksNiArNTksNyBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGEoY29u
c3QgU3RyaW5nCiAgICAgaWYgKGVxdWFsKG1fZGF0YS5nZXQoKSwgZGF0YS5pbXBsKCkpKQogICAg
ICAgICByZXR1cm47CiAKKyAgICBpbnQgb2xkTGVuZ3RoID0gbGVuZ3RoKCk7CiAgICAgUmVmUHRy
PFN0cmluZ0ltcGw+IG9sZFN0ciA9IG1fZGF0YTsKICAgICBtX2RhdGEgPSBkYXRhLmltcGwoKTsK
ICAgICAKQEAgLTcwLDEwICs3MSwxMCBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGEoY29u
c3QgU3RyaW5nCiAgICAgCiAgICAgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KG9sZFN0ci5nZXQoKSk7
CiAgICAgCi0gICAgZG9jdW1lbnQoKS0+cmVtb3ZlTWFya2Vycyh0aGlzKTsKKyAgICBkb2N1bWVu
dCgpLT50ZXh0UmVtb3ZlZCh0aGlzLCAwLCBvbGRMZW5ndGgpOwogfQogCi1TdHJpbmcgQ2hhcmFj
dGVyRGF0YTo6c3Vic3RyaW5nRGF0YSggY29uc3QgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCB1bnNp
Z25lZCBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcgQ2hhcmFjdGVyRGF0YTo6c3Vi
c3RyaW5nRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBlYyA9IDA7CiAgICAgY2hlY2tDaGFyRGF0YU9wZXJhdGlvbihvZmZzZXQs
IGVjKTsKQEAgLTgzLDcgKzg0LDcgQEAgU3RyaW5nIENoYXJhY3RlckRhdGE6OnN1YnN0cmluZ0Rh
dGEoIGNvbgogICAgIHJldHVybiBtX2RhdGEtPnN1YnN0cmluZyhvZmZzZXQsIGNvdW50KTsKIH0K
IAotdm9pZCBDaGFyYWN0ZXJEYXRhOjphcHBlbmREYXRhKCBjb25zdCBTdHJpbmcgJmFyZywgRXhj
ZXB0aW9uQ29kZSYgZWMpCit2b2lkIENoYXJhY3RlckRhdGE6OmFwcGVuZERhdGEoY29uc3QgU3Ry
aW5nJiBhcmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKIApAQCAtMTA4LDcg
KzEwOSw3IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6YXBwZW5kRGF0YSggY29uc3QgU3QKICAgICBk
aXNwYXRjaE1vZGlmaWVkRXZlbnQob2xkU3RyLmdldCgpKTsKIH0KIAotdm9pZCBDaGFyYWN0ZXJE
YXRhOjppbnNlcnREYXRhKCBjb25zdCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyAmYXJn
LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ2hhcmFjdGVyRGF0YTo6aW5zZXJ0RGF0YSh1bnNp
Z25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgYXJnLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBlYyA9IDA7CiAgICAgY2hlY2tDaGFyRGF0YU9wZXJhdGlvbihvZmZzZXQsIGVjKTsKQEAgLTEy
NiwyMyArMTI3LDI3IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6aW5zZXJ0RGF0YSggY29uc3QgdW4K
ICAgICAgICAgYXR0YWNoKCk7CiAgICAgfSBlbHNlIGlmIChyZW5kZXJlcigpKQogICAgICAgICBz
dGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocmVuZGVyZXIoKSktPnNldFRleHRXaXRoT2Zmc2V0KG1f
ZGF0YSwgb2Zmc2V0LCAwKTsKLSAgICAKKwogICAgIGRpc3BhdGNoTW9kaWZpZWRFdmVudChvbGRT
dHIuZ2V0KCkpOwogICAgIAotICAgIC8vIHVwZGF0ZSB0aGUgbWFya2VycyBmb3Igc3BlbGwgY2hl
Y2tpbmcgYW5kIGdyYW1tYXIgY2hlY2tpbmcKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhcmcubGVu
Z3RoKCk7Ci0gICAgZG9jdW1lbnQoKS0+c2hpZnRNYXJrZXJzKHRoaXMsIG9mZnNldCwgbGVuZ3Ro
KTsKKyAgICBkb2N1bWVudCgpLT50ZXh0SW5zZXJ0ZWQodGhpcywgb2Zmc2V0LCBhcmcubGVuZ3Ro
KCkpOwogfQogCi12b2lkIENoYXJhY3RlckRhdGE6OmRlbGV0ZURhdGEoIGNvbnN0IHVuc2lnbmVk
IG9mZnNldCwgY29uc3QgdW5zaWduZWQgY291bnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBD
aGFyYWN0ZXJEYXRhOjpkZWxldGVEYXRhKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKICAgICBjaGVja0NoYXJEYXRhT3Bl
cmF0aW9uKG9mZnNldCwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCisgICAg
dW5zaWduZWQgcmVhbENvdW50OworICAgIGlmIChvZmZzZXQgKyBjb3VudCA+IGxlbmd0aCgpKQor
ICAgICAgICByZWFsQ291bnQgPSBsZW5ndGgoKSAtIG9mZnNldDsKKyAgICBlbHNlCisgICAgICAg
IHJlYWxDb3VudCA9IGNvdW50OworCiAgICAgU3RyaW5nIG5ld1N0ciA9IG1fZGF0YTsKLSAgICBu
ZXdTdHIucmVtb3ZlKG9mZnNldCwgY291bnQpOworICAgIG5ld1N0ci5yZW1vdmUob2Zmc2V0LCBy
ZWFsQ291bnQpOwogCiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG9sZFN0ciA9IG1fZGF0YTsKICAg
ICBtX2RhdGEgPSBuZXdTdHIuaW1wbCgpOwpAQCAtMTU1LDEyICsxNjAsMTAgQEAgdm9pZCBDaGFy
YWN0ZXJEYXRhOjpkZWxldGVEYXRhKCBjb25zdCB1bgogCiAgICAgZGlzcGF0Y2hNb2RpZmllZEV2
ZW50KG9sZFN0ci5nZXQoKSk7CiAKLSAgICAvLyB1cGRhdGUgdGhlIG1hcmtlcnMgZm9yIHNwZWxs
IGNoZWNraW5nIGFuZCBncmFtbWFyIGNoZWNraW5nCi0gICAgZG9jdW1lbnQoKS0+cmVtb3ZlTWFy
a2Vycyh0aGlzLCBvZmZzZXQsIGNvdW50KTsKLSAgICBkb2N1bWVudCgpLT5zaGlmdE1hcmtlcnMo
dGhpcywgb2Zmc2V0ICsgY291bnQsIC1zdGF0aWNfY2FzdDxpbnQ+KGNvdW50KSk7CisgICAgZG9j
dW1lbnQoKS0+dGV4dFJlbW92ZWQodGhpcywgb2Zmc2V0LCByZWFsQ291bnQpOwogfQogCi12b2lk
IENoYXJhY3RlckRhdGE6OnJlcGxhY2VEYXRhKCBjb25zdCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0
IHVuc2lnbmVkIGNvdW50LCBjb25zdCBTdHJpbmcgJmFyZywgRXhjZXB0aW9uQ29kZSYgZWMpCit2
b2lkIENoYXJhY3RlckRhdGE6OnJlcGxhY2VEYXRhKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
Y291bnQsIGNvbnN0IFN0cmluZyYgYXJnLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9
IDA7CiAgICAgY2hlY2tDaGFyRGF0YU9wZXJhdGlvbihvZmZzZXQsIGVjKTsKQEAgLTE2OCw4ICsx
NzEsOCBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnJlcGxhY2VEYXRhKCBjb25zdCB1CiAgICAgICAg
IHJldHVybjsKIAogICAgIHVuc2lnbmVkIHJlYWxDb3VudDsKLSAgICBpZiAob2Zmc2V0ICsgY291
bnQgPiBtX2RhdGEtPmxlbmd0aCgpKQotICAgICAgICByZWFsQ291bnQgPSBtX2RhdGEtPmxlbmd0
aCgpLW9mZnNldDsKKyAgICBpZiAob2Zmc2V0ICsgY291bnQgPiBsZW5ndGgoKSkKKyAgICAgICAg
cmVhbENvdW50ID0gbGVuZ3RoKCkgLSBvZmZzZXQ7CiAgICAgZWxzZQogICAgICAgICByZWFsQ291
bnQgPSBjb3VudDsKIApAQCAtMTg5LDkgKzE5Miw4IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6cmVw
bGFjZURhdGEoIGNvbnN0IHUKICAgICBkaXNwYXRjaE1vZGlmaWVkRXZlbnQob2xkU3RyLmdldCgp
KTsKICAgICAKICAgICAvLyB1cGRhdGUgdGhlIG1hcmtlcnMgZm9yIHNwZWxsIGNoZWNraW5nIGFu
ZCBncmFtbWFyIGNoZWNraW5nCi0gICAgaW50IGRpZmYgPSBhcmcubGVuZ3RoKCkgLSBjb3VudDsK
LSAgICBkb2N1bWVudCgpLT5yZW1vdmVNYXJrZXJzKHRoaXMsIG9mZnNldCwgY291bnQpOwotICAg
IGRvY3VtZW50KCktPnNoaWZ0TWFya2Vycyh0aGlzLCBvZmZzZXQgKyBjb3VudCwgZGlmZik7Cisg
ICAgZG9jdW1lbnQoKS0+dGV4dFJlbW92ZWQodGhpcywgb2Zmc2V0LCByZWFsQ291bnQpOworICAg
IGRvY3VtZW50KCktPnRleHRJbnNlcnRlZCh0aGlzLCBvZmZzZXQsIGFyZy5sZW5ndGgoKSk7CiB9
CiAKIFN0cmluZyBDaGFyYWN0ZXJEYXRhOjpub2RlVmFsdWUoKSBjb25zdApAQCAtMjAxLDE4ICsy
MDMsMTYgQEAgU3RyaW5nIENoYXJhY3RlckRhdGE6Om5vZGVWYWx1ZSgpIGNvbnN0CiAKIGJvb2wg
Q2hhcmFjdGVyRGF0YTo6Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpIGNvbnN0CiB7Ci0gICAgaWYg
KG1fZGF0YSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgp
OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiAhbV9kYXRhIHx8IG1fZGF0YS0+Y29udGFp
bnNPbmx5V2hpdGVzcGFjZSgpOwogfQogCi12b2lkIENoYXJhY3RlckRhdGE6OnNldE5vZGVWYWx1
ZSggY29uc3QgU3RyaW5nICZfbm9kZVZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ2hh
cmFjdGVyRGF0YTo6c2V0Tm9kZVZhbHVlKGNvbnN0IFN0cmluZyYgbm9kZVZhbHVlLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICAvLyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IHRha2Vu
IGNhcmUgb2YgYnkgc2V0RGF0YSgpCi0gICAgc2V0RGF0YShfbm9kZVZhbHVlLCBlYyk7CisgICAg
c2V0RGF0YShub2RlVmFsdWUsIGVjKTsKIH0KIAotdm9pZCBDaGFyYWN0ZXJEYXRhOjpkaXNwYXRj
aE1vZGlmaWVkRXZlbnQoU3RyaW5nSW1wbCAqcHJldlZhbHVlKQordm9pZCBDaGFyYWN0ZXJEYXRh
OjpkaXNwYXRjaE1vZGlmaWVkRXZlbnQoU3RyaW5nSW1wbCogcHJldlZhbHVlKQogewogICAgIGlm
IChwYXJlbnROb2RlKCkpCiAgICAgICAgIHBhcmVudE5vZGUoKS0+Y2hpbGRyZW5DaGFuZ2VkKCk7
CkBAIC0yMjMsMTMgKzIyMywxMyBAQCB2b2lkIENoYXJhY3RlckRhdGE6OmRpc3BhdGNoTW9kaWZp
ZWRFdmVuCiAgICAgZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRFdmVudCgpOwogfQogCi12b2lkIENo
YXJhY3RlckRhdGE6OmNoZWNrQ2hhckRhdGFPcGVyYXRpb24oIGNvbnN0IHVuc2lnbmVkIG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIENoYXJhY3RlckRhdGE6OmNoZWNrQ2hhckRhdGFP
cGVyYXRpb24odW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9
IDA7CiAKICAgICAvLyBJTkRFWF9TSVpFX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgb2Zm
c2V0IGlzIG5lZ2F0aXZlIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIDE2LWJpdAogICAg
IC8vIHVuaXRzIGluIGRhdGEuCi0gICAgaWYgKG9mZnNldCA+IG1fZGF0YS0+bGVuZ3RoKCkpIHsK
KyAgICBpZiAob2Zmc2V0ID4gbGVuZ3RoKCkpIHsKICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VS
UjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI0MSwxNCArMjQxLDE0IEBAIHZvaWQgQ2hh
cmFjdGVyRGF0YTo6Y2hlY2tDaGFyRGF0YU9wZXJhdGkKICAgICB9CiB9CiAKLWludCBDaGFyYWN0
ZXJEYXRhOjptYXhDaGFyYWN0ZXJPZmZzZXQoKSBjb25zdCAKK2ludCBDaGFyYWN0ZXJEYXRhOjpt
YXhDaGFyYWN0ZXJPZmZzZXQoKSBjb25zdAogewotICAgIHJldHVybiAoaW50KWxlbmd0aCgpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCgpKTsKIH0KIAogYm9vbCBDaGFyYWN0
ZXJEYXRhOjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkKIHsKLSAgICBpZiAo
IW1fZGF0YSB8fCBtX2RhdGEtPmxlbmd0aCgpID09IDApCisgICAgaWYgKCFtX2RhdGEgfHwgIWxl
bmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIEV2ZW50VGFyZ2V0Tm9k
ZTo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7CiB9CkluZGV4OiBXZWJDb3JlL2RvbS9Db250YWlu
ZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAko
cmV2aXNpb24gMzEwNTMpCisrKyBXZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChr
b2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVl
bGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTY5OCw2ICs2OTgsOCBAQCB2b2lkIENvbnRhaW5lck5vZGU6OnJl
bW92ZWRGcm9tVHJlZShib29sCiB2b2lkIENvbnRhaW5lck5vZGU6OmNoaWxkcmVuQ2hhbmdlZChi
b29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNoYW5n
ZSwgaW50IGNoaWxkQ291bnREZWx0YSkKIHsKICAgICBOb2RlOjpjaGlsZHJlbkNoYW5nZWQoY2hh
bmdlZEJ5UGFyc2VyLCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEp
OworICAgIGlmICghY2hhbmdlZEJ5UGFyc2VyICYmIGNoaWxkQ291bnREZWx0YSkKKyAgICAgICAg
ZG9jdW1lbnQoKS0+bm9kZUNoaWxkcmVuQ2hhbmdlZCh0aGlzLCBiZWZvcmVDaGFuZ2UsIGFmdGVy
Q2hhbmdlLCBjaGlsZENvdW50RGVsdGEpOwogICAgIGlmIChkb2N1bWVudCgpLT5oYXNOb2RlTGlz
dHMoKSkKICAgICAgICAgbm90aWZ5Tm9kZUxpc3RzQ2hpbGRyZW5DaGFuZ2VkKCk7CiB9CkBAIC05
NzMsNyArOTc1LDcgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMoTgog
ICAgIERvY1B0cjxEb2N1bWVudD4gZG9jID0gY2hpbGQtPmRvY3VtZW50KCk7CiAKICAgICAvLyB1
cGRhdGUgYXV4aWxpYXJ5IGRvYyBpbmZvIChlLmcuIGl0ZXJhdG9ycykgdG8gbm90ZSB0aGF0IG5v
ZGUgaXMgYmVpbmcgcmVtb3ZlZAotICAgIGRvYy0+bm90aWZ5QmVmb3JlTm9kZVJlbW92YWwoY2hp
bGQpOyAvLyAjIyMgdXNlIGV2ZW50cyBpbnN0ZWFkCisgICAgZG9jLT5ub2RlV2lsbEJlUmVtb3Zl
ZChjaGlsZCk7CiAKICAgICAvLyBkaXNwYXRjaCBwcmUtcmVtb3ZhbCBtdXRhdGlvbiBldmVudHMK
ICAgICBpZiAoYy0+cGFyZW50Tm9kZSgpICYmIApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMzEw
NTMpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYg
Kzg1LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJQcm9ncmVzc0V2ZW50LmgiCisjaW5j
bHVkZSAiUmFuZ2VEb2N1bWVudE11dGF0aW9uLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXIuaCIKICNpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIlJl
bmRlckFyZW5hLmgiCkBAIC0zOTksNiArNDAwLDcgQEAgRG9jdW1lbnQ6On5Eb2N1bWVudCgpCiAg
ICAgQVNTRVJUKCFyZW5kZXJlcigpKTsKICAgICBBU1NFUlQoIW1faW5QYWdlQ2FjaGUpOwogICAg
IEFTU0VSVCghbV9zYXZlZFJlbmRlcmVyKTsKKyAgICBBU1NFUlQobV9yYW5nZXMuaXNFbXB0eSgp
KTsKIAogICAgIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7CiAKQEAgLTI0NDYsMTYgKzI0NDgs
NzAgQEAgdm9pZCBEb2N1bWVudDo6ZGV0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdAogICAgIG1fbm9k
ZUl0ZXJhdG9ycy5yZW1vdmUobmkpOwogfQogCi12b2lkIERvY3VtZW50Ojpub3RpZnlCZWZvcmVO
b2RlUmVtb3ZhbChOb2RlICpuKQordm9pZCBEb2N1bWVudDo6bm9kZUNoaWxkcmVuQ2hhbmdlZChD
b250YWluZXJOb2RlKiBjb250YWluZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSogYWZ0ZXJD
aGFuZ2UsIGludCBjaGlsZENvdW50RGVsdGEpCiB7Ci0gICAgaWYgKEZyYW1lKiBmID0gZnJhbWUo
KSkgewotICAgICAgICBmLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPm5vZGVXaWxsQmVSZW1vdmVk
KG4pOwotICAgICAgICBmLT5kcmFnQ2FyZXRDb250cm9sbGVyKCktPm5vZGVXaWxsQmVSZW1vdmVk
KG4pOworICAgIE5vZGVXaXRoSW5kZXhBZnRlciBiZWZvcmVDaGFuZ2VXaXRoSW5kZXgoYmVmb3Jl
Q2hhbmdlKTsKKyAgICBOb2RlV2l0aEluZGV4QmVmb3JlIGFmdGVyQ2hhbmdlV2l0aEluZGV4KGNv
bnRhaW5lciwgYWZ0ZXJDaGFuZ2UpOworICAgIEhhc2hTZXQ8UmFuZ2UqPjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9yYW5nZXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJhbmdlKj46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9yYW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICAoKml0KS0+bm9kZUNoaWxkcmVuQ2hhbmdlZChiZWZvcmVDaGFuZ2VXaXRoSW5kZXgsIGFmdGVy
Q2hhbmdlV2l0aEluZGV4LCBjaGlsZENvdW50RGVsdGEpOworfQorCit2b2lkIERvY3VtZW50Ojpu
b2RlV2lsbEJlUmVtb3ZlZChOb2RlKiBuKQoreworICAgIEhhc2hTZXQ8Tm9kZUl0ZXJhdG9yKj46
OmNvbnN0X2l0ZXJhdG9yIG5vZGVJdGVyYXRvcnNFbmQgPSBtX25vZGVJdGVyYXRvcnMuZW5kKCk7
CisgICAgZm9yIChIYXNoU2V0PE5vZGVJdGVyYXRvcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
bm9kZUl0ZXJhdG9ycy5iZWdpbigpOyBpdCAhPSBub2RlSXRlcmF0b3JzRW5kOyArK2l0KQorICAg
ICAgICAoKml0KS0+bm9kZVdpbGxCZVJlbW92ZWQobik7CisKKyAgICBOb2RlV2l0aEluZGV4IG5v
ZGVXaXRoSW5kZXgobik7CisgICAgSGFzaFNldDxSYW5nZSo+Ojpjb25zdF9pdGVyYXRvciByYW5n
ZXNFbmQgPSBtX3Jhbmdlcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmFuZ2UqPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSByYW5nZXNFbmQ7ICsraXQpCisg
ICAgICAgICgqaXQpLT5ub2RlV2lsbEJlUmVtb3ZlZChub2RlV2l0aEluZGV4KTsKKworICAgIGlm
IChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKSB7CisgICAgICAgIGZyYW1lLT5zZWxlY3Rp
b25Db250cm9sbGVyKCktPm5vZGVXaWxsQmVSZW1vdmVkKG4pOworICAgICAgICBmcmFtZS0+ZHJh
Z0NhcmV0Q29udHJvbGxlcigpLT5ub2RlV2lsbEJlUmVtb3ZlZChuKTsKICAgICB9Cit9CisKK3Zv
aWQgRG9jdW1lbnQ6OnRleHRJbnNlcnRlZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKK3sKKyAgICBIYXNoU2V0PFJhbmdlKj46OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcmFuZ2VzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxSYW5nZSo+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fcmFuZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgKCpp
dCktPnRleHRJbnNlcnRlZCh0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CisKKyAgICAvLyBVcGRhdGUg
dGhlIG1hcmtlcnMgZm9yIHNwZWxsaW5nIGFuZCBncmFtbWFyIGNoZWNraW5nLgorICAgIHNoaWZ0
TWFya2Vycyh0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OnRleHRS
ZW1vdmVkKE5vZGUqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorewor
ICAgIEhhc2hTZXQ8UmFuZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yYW5nZXMuZW5kKCk7
CisgICAgZm9yIChIYXNoU2V0PFJhbmdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yYW5nZXMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+dGV4dFJlbW92ZWQodGV4
dCwgb2Zmc2V0LCBsZW5ndGgpOworCisgICAgLy8gVXBkYXRlIHRoZSBtYXJrZXJzIGZvciBzcGVs
bGluZyBhbmQgZ3JhbW1hciBjaGVja2luZy4KKyAgICByZW1vdmVNYXJrZXJzKHRleHQsIG9mZnNl
dCwgbGVuZ3RoKTsKKyAgICBzaGlmdE1hcmtlcnModGV4dCwgb2Zmc2V0ICsgbGVuZ3RoLCAwIC0g
bGVuZ3RoKTsKK30KKwordm9pZCBEb2N1bWVudDo6dGV4dE5vZGVzTWVyZ2VkKFRleHQqIG9sZE5v
ZGUsIHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICBOb2RlV2l0aEluZGV4IG9sZE5vZGVXaXRoSW5k
ZXgob2xkTm9kZSk7CisgICAgSGFzaFNldDxSYW5nZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3Jhbmdlcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmFuZ2UqPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3Jhbmdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICgqaXQpLT50
ZXh0Tm9kZXNNZXJnZWQob2xkTm9kZVdpdGhJbmRleCwgb2Zmc2V0KTsKKworICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCB1cGRhdGUgbWFya2VycyBmb3Igc3BlbGxpbmcgYW5kIGdyYW1tYXIgY2hl
Y2tpbmcuCit9CisKK3ZvaWQgRG9jdW1lbnQ6OnRleHROb2RlU3BsaXQoVGV4dCogb2xkTm9kZSkK
K3sKKyAgICBIYXNoU2V0PFJhbmdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmFuZ2VzLmVu
ZCgpOworICAgIGZvciAoSGFzaFNldDxSYW5nZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmFu
Z2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgKCppdCktPnRleHROb2RlU3Bs
aXQob2xkTm9kZSk7CiAKLSAgICBIYXNoU2V0PE5vZGVJdGVyYXRvcio+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX25vZGVJdGVyYXRvcnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PE5vZGVJdGVy
YXRvcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fbm9kZUl0ZXJhdG9ycy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5ub3RpZnlCZWZvcmVOb2RlUmVtb3ZhbChuKTsK
KyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXBkYXRlIG1hcmtlcnMgZm9yIHNwZWxsaW5nIGFu
ZCBncmFtbWFyIGNoZWNraW5nLgogfQogCiBET01XaW5kb3cqIERvY3VtZW50OjpkZWZhdWx0Vmll
dygpIGNvbnN0CkBAIC0yNTAwLDkgKzI1NTYsOSBAQCBQYXNzUmVmUHRyPEV2ZW50PiBEb2N1bWVu
dDo6Y3JlYXRlRXZlbnQoCiAgICAgcmV0dXJuIDA7CiB9CiAKLUNTU1N0eWxlRGVjbGFyYXRpb24g
KkRvY3VtZW50OjpnZXRPdmVycmlkZVN0eWxlKEVsZW1lbnQgKi8qZWx0Ki8sIGNvbnN0IFN0cmlu
ZyAmLypwc2V1ZG9FbHQqLykKK0NTU1N0eWxlRGVjbGFyYXRpb24qIERvY3VtZW50OjpnZXRPdmVy
cmlkZVN0eWxlKEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmKQogewotICAgIHJldHVybiAwOyAvLyAj
IyMKKyAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBEb2N1bWVudDo6aGFuZGxlV2luZG93RXZlbnQo
RXZlbnQgKmV2dCwgYm9vbCB1c2VDYXB0dXJlKQpAQCAtNDAzNSw0ICs0MDkxLDE2IEBAIHZvaWQg
RG9jdW1lbnQ6OnN0b3BEYXRhYmFzZXMoKQogCiAjZW5kaWYKIAordm9pZCBEb2N1bWVudDo6YXR0
YWNoUmFuZ2UoUmFuZ2UqIHJhbmdlKQoreworICAgIEFTU0VSVCghbV9yYW5nZXMuY29udGFpbnMo
cmFuZ2UpKTsKKyAgICBtX3Jhbmdlcy5hZGQocmFuZ2UpOworfQorCit2b2lkIERvY3VtZW50Ojpk
ZXRhY2hSYW5nZShSYW5nZSogcmFuZ2UpCit7CisgICAgQVNTRVJUKG1fcmFuZ2VzLmNvbnRhaW5z
KHJhbmdlKSk7CisgICAgbV9yYW5nZXMucmVtb3ZlKHJhbmdlKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAzMTA1MykKKysrIFdlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIGNsYXNzIEF0dHJpYnV0ZTsKICAgICBjbGFzcyBDREFUQVNlY3Rpb247CiAgICAg
Y2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKKyAgICBjbGFzcyBDaGFyYWN0ZXJEYXRhOwogICAg
IGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CiAgICAgY2xhc3MgQ1NTU3R5bGVTZWxlY3RvcjsK
ICAgICBjbGFzcyBDU1NTdHlsZVNoZWV0OwpAQCAtNDc1LDcgKzQ3NiwxOCBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGF0dGFjaE5vZGVJdGVyYXRvcihOb2RlSXRlcmF0b3IqKTsKICAgICB2b2lkIGRl
dGFjaE5vZGVJdGVyYXRvcihOb2RlSXRlcmF0b3IqKTsKLSAgICB2b2lkIG5vdGlmeUJlZm9yZU5v
ZGVSZW1vdmFsKE5vZGUqKTsKKworICAgIHZvaWQgYXR0YWNoUmFuZ2UoUmFuZ2UqKTsKKyAgICB2
b2lkIGRldGFjaFJhbmdlKFJhbmdlKik7CisKKyAgICB2b2lkIG5vZGVDaGlsZHJlbkNoYW5nZWQo
Q29udGFpbmVyTm9kZSogY29udGFpbmVyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmdGVy
Q2hhbmdlLCBpbnQgY2hpbGRDb3VudERlbHRhKTsKKyAgICB2b2lkIG5vZGVXaWxsQmVSZW1vdmVk
KE5vZGUqKTsKKworICAgIHZvaWQgdGV4dEluc2VydGVkKE5vZGUqLCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCB0ZXh0UmVtb3ZlZChOb2RlKiwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgdGV4dE5vZGVzTWVyZ2VkKFRleHQq
IG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCk7CisgICAgdm9pZCB0ZXh0Tm9kZVNwbGl0KFRleHQq
IG9sZE5vZGUpOworCiAgICAgRE9NV2luZG93KiBkZWZhdWx0VmlldygpIGNvbnN0OwogICAgIFBh
c3NSZWZQdHI8RXZlbnQ+IGNyZWF0ZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnRUeXBlLCBFeGNl
cHRpb25Db2RlJik7CiAKQEAgLTc1MSw2ICs3NjMsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVk
IG1fZG9tdHJlZV92ZXJzaW9uOwogICAgIAogICAgIEhhc2hTZXQ8Tm9kZUl0ZXJhdG9yKj4gbV9u
b2RlSXRlcmF0b3JzOworICAgIEhhc2hTZXQ8UmFuZ2UqPiBtX3JhbmdlczsKIAogICAgIHVuc2ln
bmVkIHNob3J0IG1fbGlzdGVuZXJUeXBlczsKICAgICBSZWZQdHI8U3R5bGVTaGVldExpc3Q+IG1f
c3R5bGVTaGVldHM7CkBAIC05NTMsNiArOTY2LDcgQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIEhh
c2hTZXQ8RGF0YWJhc2UqPiBEYXRhYmFzZVNldDsKICAgICBPd25QdHI8RGF0YWJhc2VTZXQ+IG1f
b3BlbkRhdGFiYXNlU2V0OwogI2VuZGlmCisKICNpZiBVU0UoTE9XX0JBTkRXSURUSF9ESVNQTEFZ
KQogICAgIGJvb2wgbV9pbkxvd0JhbmR3aWR0aERpc3BsYXk7CiAjZW5kaWYKSW5kZXg6IFdlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CShyZXZpc2lvbiAzMTA1MykKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjI3LDQgKzEyMjcsMTcgQEAgYm9vbCBFbGVtZW50Ojp2aXJ0dWFsSGFzVGFnTmFt
ZShjb25zdCBRdQogICAgIHJldHVybiBoYXNUYWdOYW1lKG5hbWUpOwogfQogCit2b2lkIEVsZW1l
bnQ6Om5vcm1hbGl6ZUF0dHJpYnV0ZXMoKQoreworICAgIC8vIE5vcm1hbGl6ZSBhdHRyaWJ1dGVz
LgorICAgIE5hbWVkQXR0ck1hcCogYXR0cnMgPSBhdHRyaWJ1dGVzKHRydWUpOworICAgIGlmICgh
YXR0cnMpCisgICAgICAgIHJldHVybjsKKyAgICB1bnNpZ25lZCBudW1BdHRycyA9IGF0dHJzLT5s
ZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXR0cnM7IGkrKykgewor
ICAgICAgICBpZiAoQXR0ciogYXR0ciA9IGF0dHJzLT5hdHRyaWJ1dGVJdGVtKGkpLT5hdHRyKCkp
CisgICAgICAgICAgICBhdHRyLT5ub3JtYWxpemUoKTsKKyAgICB9Cit9CisKIH0KSW5kZXg6IFdl
YkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmgJ
KHJldmlzaW9uIDMxMDUzKQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTEsNyArMTExLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBLVVJMIGJhc2VVUkko
KSBjb25zdDsKIAotICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAgcGFyZW50IGNs
YXNzZXMKKyAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZyb20gcGFyZW50IGNsYXNzZXMK
ICAgICB2aXJ0dWFsIE5vZGVUeXBlIG5vZGVUeXBlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPE5vZGU+IGNsb25lTm9kZShib29sIGRlZXApOwogICAgIHZpcnR1YWwgU3RyaW5nIG5v
ZGVOYW1lKCkgY29uc3Q7CkBAIC0xMjAsNiArMTIwLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hh
bmdlZChib29sIGNoYW5nZWRCeVBhcnNlciA9IGZhbHNlLCBOb2RlKiBiZWZvcmVDaGFuZ2UgPSAw
LCBOb2RlKiBhZnRlckNoYW5nZSA9IDAsIGludCBjaGlsZENvdW50RGVsdGEgPSAwKTsKIAorICAg
IHZvaWQgbm9ybWFsaXplQXR0cmlidXRlcygpOworCiAgICAgdmlydHVhbCBib29sIGlzSW5wdXRU
eXBlSGlkZGVuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIFN0cmluZyBub2RlTmFt
ZVByZXNlcnZpbmdDYXNlKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMzEwNTMpCisrKyBXZWJD
b3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY0LDY1ICsyNjQsNTIgQEAgdm9p
ZCBOb2RlOjpyZW1vdmUoRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgZGVyZWYoKTsKIH0KIAotYm9v
bCBOb2RlOjpoYXNDaGlsZE5vZGVzKCAgKSBjb25zdAorYm9vbCBOb2RlOjpoYXNDaGlsZE5vZGVz
KCkgY29uc3QKIHsKLSAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBOb2RlOjpub3JtYWxpemUgKCkKK3ZvaWQgTm9kZTo6bm9ybWFsaXplKCkKIHsKLSAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBOb2RlICpjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKKyAgICAv
LyBHbyB0aHJvdWdoIHRoZSBzdWJ0cmVlIGJlbmVhdGggdXMsIG5vcm1hbGl6aW5nIGFsbCBub2Rl
cy4gVGhpcyBtZWFucyB0aGF0CisgICAgLy8gYW55IHR3byBhZGphY2VudCB0ZXh0IG5vZGVzIGFy
ZSBtZXJnZWQgdG9nZXRoZXIuCiAKLSAgICBpZiAoaXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAg
IC8vIE5vcm1hbGl6ZSBhbnkgYXR0cmlidXRlIGNoaWxkcmVuIHdlIG1pZ2h0IGhhdmUgCi0gICAg
ICAgIEVsZW1lbnQgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50ICo+KHRoaXMpOwotICAg
ICAgICBOYW1lZEF0dHJNYXAgKmF0dHJNYXAgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKCk7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoYXR0ck1hcCkgewotICAgICAgICAgICAgdW5zaWduZWQgbnVtQXR0
cnMgPSBhdHRyTWFwLT5sZW5ndGgoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bUF0dHJzOyBpKyspIHsKLSAgICAgICAgICAgICAgICBBdHRy
aWJ1dGUgKmF0dHJpYnV0ZSA9IGF0dHJNYXAtPmF0dHJpYnV0ZUl0ZW0oaSk7Ci0gICAgICAgICAg
ICAgICAgQXR0ciAqYXR0ciA9IGF0dHJpYnV0ZS0+YXR0cigpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmIChhdHRyKQotICAgICAgICAgICAgICAgICAgICBhdHRyLT5ub3Jt
YWxpemUoKTsKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IHRoaXM7CisgICAgd2hpbGUgKE5vZGUq
IGZpcnN0Q2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCkpCisgICAgICAgIG5vZGUgPSBmaXJzdENo
aWxkOworICAgIGZvciAoOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZVBvc3RP
cmRlcigpKSB7CisgICAgICAgIE5vZGVUeXBlIHR5cGUgPSBub2RlLT5ub2RlVHlwZSgpOworICAg
ICAgICBpZiAodHlwZSA9PSBFTEVNRU5UX05PREUpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obm9kZS5nZXQoKSktPm5vcm1hbGl6ZUF0dHJpYnV0ZXMoKTsKKworICAgICAgICBO
b2RlKiBmaXJzdENoaWxkID0gbm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICBpZiAoZmlyc3RD
aGlsZCAmJiAhZmlyc3RDaGlsZC0+bmV4dFNpYmxpbmcoKSAmJiBmaXJzdENoaWxkLT5pc1RleHRO
b2RlKCkpIHsKKyAgICAgICAgICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oZmly
c3RDaGlsZCk7CisgICAgICAgICAgICBpZiAoIXRleHQtPmxlbmd0aCgpKSB7CisgICAgICAgICAg
ICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICAgICAgICAgICAgICB0ZXh0LT5yZW1vdmUoZWMp
OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIFJlY3Vyc2l2
ZWx5IGdvIHRocm91Z2ggdGhlIHN1YnRyZWUgYmVuZWF0aCB1cywgbm9ybWFsaXppbmcgYWxsIG5v
ZGVzLiBJbiB0aGUgY2FzZQotICAgIC8vIHdoZXJlIHRoZXJlIGFyZSB0d28gYWRqYWNlbnQgdGV4
dCBub2RlcywgdGhleSBhcmUgbWVyZ2VkIHRvZ2V0aGVyCi0gICAgd2hpbGUgKGNoaWxkKSB7Ci0g
ICAgICAgIE5vZGUgKm5leHRDaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwotCi0gICAgICAg
IGlmIChuZXh0Q2hpbGQgJiYgY2hpbGQtPm5vZGVUeXBlKCkgPT0gVEVYVF9OT0RFICYmIG5leHRD
aGlsZC0+bm9kZVR5cGUoKSA9PSBURVhUX05PREUpIHsKLSAgICAgICAgICAgIC8vIEN1cnJlbnQg
Y2hpbGQgYW5kIHRoZSBuZXh0IG9uZSBhcmUgYm90aCB0ZXh0IG5vZGVzLi4uIG1lcmdlIHRoZW0K
LSAgICAgICAgICAgIFRleHQgKmN1cnJlbnRUZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KGNoaWxk
KTsKLSAgICAgICAgICAgIFRleHQgKm5leHRUZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5leHRD
aGlsZCk7CiAKLSAgICAgICAgICAgIGN1cnJlbnRUZXh0LT5hcHBlbmREYXRhKG5leHRUZXh0LT5k
YXRhKCksZWMpOwotICAgICAgICAgICAgaWYgKGVjKQotICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgaWYgKG5vZGUgPT0gdGhpcykKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAg
ICAgICBuZXh0Q2hpbGQtPnJlbW92ZShlYyk7Ci0gICAgICAgICAgICBpZiAoZWMpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
Y2hpbGQtPm5vcm1hbGl6ZSgpOwotICAgICAgICAgICAgY2hpbGQgPSBuZXh0Q2hpbGQ7CisgICAg
ICAgIGlmICh0eXBlID09IFRFWFRfTk9ERSkgeworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAg
ICAgICAgICAgICAgICBOb2RlKiBuZXh0U2libGluZyA9IG5vZGUtPm5leHRTaWJsaW5nKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFuZXh0U2libGluZyB8fCAhbmV4dFNpYmxpbmctPmlzVGV4dE5v
ZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLy8gQ3Vy
cmVudCBjaGlsZCBhbmQgdGhlIG5leHQgb25lIGFyZSBib3RoIHRleHQgbm9kZXMuIE1lcmdlIHRo
ZW0uCisgICAgICAgICAgICAgICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihub2Rl
LmdldCgpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8VGV4dD4gbmV4dFRleHQgPSBzdGF0aWNf
Y2FzdDxUZXh0Kj4obmV4dFNpYmxpbmcpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNl
dCA9IHRleHQtPmxlbmd0aCgpOworICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Cisg
ICAgICAgICAgICAgICAgdGV4dC0+YXBwZW5kRGF0YShuZXh0VGV4dC0+ZGF0YSgpLCBlYyk7Cisg
ICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+dGV4dE5vZGVzTWVyZ2VkKG5leHRUZXh0LmdldCgp
LCBvZmZzZXQpOworICAgICAgICAgICAgICAgIG5leHRUZXh0LT5yZW1vdmUoZWMpOworICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIC8vIENoZWNrIGlmIHdlIGhhdmUg
YSBzaW5nbGUgZW1wdHkgdGV4dCBub2RlIGxlZnQgYW5kIHJlbW92ZSBpdCBpZiBzbwotICAgIGNo
aWxkID0gZmlyc3RDaGlsZCgpOwotICAgIGlmIChjaGlsZCAmJiAhY2hpbGQtPm5leHRTaWJsaW5n
KCkgJiYgY2hpbGQtPmlzVGV4dE5vZGUoKSkgewotICAgICAgICBUZXh0ICp0ZXh0ID0gc3RhdGlj
X2Nhc3Q8VGV4dCo+KGNoaWxkKTsKLSAgICAgICAgaWYgKHRleHQtPmRhdGEoKS5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBjaGlsZC0+cmVtb3ZlKGVjKTsKLSAgICB9CiB9CiAKIGNvbnN0IEF0b21p
Y1N0cmluZyYgTm9kZTo6cHJlZml4KCkgY29uc3QKQEAgLTUxMiw2ICs0OTksMTYgQEAgTm9kZSAq
Tm9kZTo6dHJhdmVyc2VOZXh0U2libGluZyhjb25zdCBObwogICAgIHJldHVybiAwOwogfQogCitO
b2RlKiBOb2RlOjp0cmF2ZXJzZU5leHROb2RlUG9zdE9yZGVyKCkgY29uc3QKK3sKKyAgICBOb2Rl
KiBuZXh0ID0gbmV4dFNpYmxpbmcoKTsKKyAgICBpZiAoIW5leHQpCisgICAgICAgIHJldHVybiBw
YXJlbnROb2RlKCk7CisgICAgd2hpbGUgKE5vZGUqIGZpcnN0Q2hpbGQgPSBuZXh0LT5maXJzdENo
aWxkKCkpCisgICAgICAgIG5leHQgPSBmaXJzdENoaWxkOworICAgIHJldHVybiBuZXh0OworfQor
CiBOb2RlICpOb2RlOjp0cmF2ZXJzZVByZXZpb3VzTm9kZShjb25zdCBOb2RlICpzdGF5V2l0aGlu
KSBjb25zdAogewogICAgIGlmICh0aGlzID09IHN0YXlXaXRoaW4pCkluZGV4OiBXZWJDb3JlL2Rv
bS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAzMTA1
MykKKysrIFdlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzE3LDcgKzMxNyw3
IEBAIHB1YmxpYzoKICAgICAgKi8KICAgICBOb2RlKiB0cmF2ZXJzZU5leHROb2RlKGNvbnN0IE5v
ZGUqIHN0YXlXaXRoaW4gPSAwKSBjb25zdDsKICAgICAKLSAgICAvKiBMaWtlIHRyYXZlcnNlTmV4
dE5vZGUsIGJ1dCBza2lwcyBjaGlsZHJlbiBhbmQgc3RhcnRzIHdpdGggdGhlIG5leHQgc2libGlu
Zy4gKi8KKyAgICAvLyBMaWtlIHRyYXZlcnNlTmV4dE5vZGUsIGJ1dCBza2lwcyBjaGlsZHJlbiBh
bmQgc3RhcnRzIHdpdGggdGhlIG5leHQgc2libGluZy4KICAgICBOb2RlKiB0cmF2ZXJzZU5leHRT
aWJsaW5nKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4gPSAwKSBjb25zdDsKIAogICAgIC8qKgpAQCAt
MzI3LDcgKzMyNywxMCBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgTm9kZSogdHJhdmVyc2VQcmV2
aW91c05vZGUoY29uc3QgTm9kZSAqIHN0YXlXaXRoaW4gPSAwKSBjb25zdDsKIAotICAgIC8qIExp
a2UgdHJhdmVyc2VQcmV2aW91c05vZGUsIGJ1dCB2aXNpdHMgbm9kZXMgYmVmb3JlIHRoZWlyIGNo
aWxkcmVuLiAqLworICAgIC8vIExpa2UgdHJhdmVyc2VOZXh0Tm9kZSwgYnV0IHZpc2l0cyBwYXJl
bnRzIGFmdGVyIHRoZWlyIGNoaWxkcmVuLgorICAgIE5vZGUqIHRyYXZlcnNlTmV4dE5vZGVQb3N0
T3JkZXIoKSBjb25zdDsKKworICAgIC8vIExpa2UgdHJhdmVyc2VQcmV2aW91c05vZGUsIGJ1dCB2
aXNpdHMgcGFyZW50cyBiZWZvcmUgdGhlaXIgY2hpbGRyZW4uCiAgICAgTm9kZSogdHJhdmVyc2VQ
cmV2aW91c05vZGVQb3N0T3JkZXIoY29uc3QgTm9kZSAqc3RheVdpdGhpbiA9IDApIGNvbnN0Owog
ICAgIE5vZGUqIHRyYXZlcnNlUHJldmlvdXNTaWJsaW5nUG9zdE9yZGVyKGNvbnN0IE5vZGUgKnN0
YXlXaXRoaW4gPSAwKSBjb25zdDsKIApJbmRleDogV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAz
MTA1MykKKysrIFdlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MCw3ICsxNTAsNyBAQCB2b2lkIE5vZGVJdGVyYXRvcjo6ZGV0YWNoKCkKICAgICBtX3JlZmVy
ZW5jZU5vZGUubm9kZS5jbGVhcigpOwogfQogCi12b2lkIE5vZGVJdGVyYXRvcjo6bm90aWZ5QmVm
b3JlTm9kZVJlbW92YWwoTm9kZSogcmVtb3ZlZE5vZGUpCit2b2lkIE5vZGVJdGVyYXRvcjo6bm9k
ZVdpbGxCZVJlbW92ZWQoTm9kZSogcmVtb3ZlZE5vZGUpCiB7CiAgICAgdXBkYXRlRm9yTm9kZVJl
bW92YWwocmVtb3ZlZE5vZGUsIG1fcmVmZXJlbmNlTm9kZSk7CiB9CkluZGV4OiBXZWJDb3JlL2Rv
bS9Ob2RlSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3Iu
aAkocmV2aXNpb24gMzEwNTMpCisrKyBXZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJv
b2wgcG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlZmVyZW5j
ZU5vZGUuaXNQb2ludGVyQmVmb3JlTm9kZTsgfQogCiAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24g
aXMgY2FsbGVkIGJlZm9yZSBhbnkgbm9kZSBpcyByZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50IHRy
ZWUuCi0gICAgICAgIHZvaWQgbm90aWZ5QmVmb3JlTm9kZVJlbW92YWwoTm9kZSogbm9kZVRvQmVS
ZW1vdmVkKTsKKyAgICAgICAgdm9pZCBub2RlV2lsbEJlUmVtb3ZlZChOb2RlKik7CiAKICAgICAg
ICAgLy8gRm9yIG5vbi1KUyBiaW5kaW5ncy4gU2lsZW50bHkgaWdub3JlcyB0aGUgSmF2YVNjcmlw
dCBleGNlcHRpb24gaWYgYW55LgogICAgICAgICBOb2RlKiBuZXh0Tm9kZShFeGNlcHRpb25Db2Rl
JiBlYykgeyBLSlM6OkpTVmFsdWUqIGV4Y2VwdGlvbjsgcmV0dXJuIG5leHROb2RlKGVjLCBleGNl
cHRpb24pOyB9CkluZGV4OiBXZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAJKHJldmlz
aW9uIDMxMDUzKQorKysgV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjksNyArNjksMTAgQEAgdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246
OnNldERhdGEoY29ucwogICAgICAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGludCBvbGRMZW5ndGggPSBtX2RhdGEubGVu
Z3RoKCk7CiAgICAgbV9kYXRhID0gZGF0YTsKKyAgICBkb2N1bWVudCgpLT50ZXh0UmVtb3ZlZCh0
aGlzLCAwLCBvbGRMZW5ndGgpOwogfQogCiBTdHJpbmcgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpu
b2RlTmFtZSgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vUmFuZ2UuY3BwCShyZXZpc2lvbiAzMTA1MykKKysrIFdlYkNvcmUvZG9t
L1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsOCBAQAogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJSYW5nZURvY3VtZW50TXV0
YXRpb24uaCIKKyNpbmNsdWRlICJSYW5nZUV4Y2VwdGlvbi5oIgogCiAjaW5jbHVkZSAiQ1N0cmlu
Zy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBAIC0zMSw3ICszMyw2IEBACiAjaW5jbHVkZSAi
SFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24uaCIKLSNpbmNsdWRlICJSYW5nZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUg
IlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRv
ci5oIgpAQCAtNjEsNiArNjIsMzYgQEAgdW5zaWduZWQgUmFuZ2VDb3VudGVyOjpjb3VudCA9IDA7
CiBzdGF0aWMgUmFuZ2VDb3VudGVyIHJhbmdlQ291bnRlcjsKICNlbmRpZgogCitpbmxpbmUgaW50
IE5vZGVXaXRoSW5kZXg6OmluZGV4KCkKK3sKKyAgICBpZiAoIW1faGF2ZUluZGV4KSB7CisgICAg
ICAgIG1faW5kZXggPSBtX25vZGUtPm5vZGVJbmRleCgpOworICAgICAgICBtX2hhdmVJbmRleCA9
IHRydWU7CisgICAgfQorICAgIEFTU0VSVChtX2luZGV4ID09IHN0YXRpY19jYXN0PGludD4obV9u
b2RlLT5ub2RlSW5kZXgoKSkpOworICAgIHJldHVybiBtX2luZGV4OworfQorCitpbmxpbmUgaW50
IE5vZGVXaXRoSW5kZXhCZWZvcmU6OmluZGV4QmVmb3JlKCkKK3sKKyAgICBpZiAoIW1faGF2ZUlu
ZGV4KSB7CisgICAgICAgIG1faW5kZXhCZWZvcmUgPSBtX25vZGUgPyBtX25vZGUtPm5vZGVJbmRl
eCgpIDogbV9wYXJlbnQtPmNoaWxkTm9kZUNvdW50KCk7CisgICAgICAgIG1faGF2ZUluZGV4ID0g
dHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUKG1faW5kZXhCZWZvcmUgPT0gc3RhdGljX2Nhc3Q8aW50
PihtX25vZGUgPyBtX25vZGUtPm5vZGVJbmRleCgpIDogbV9wYXJlbnQtPmNoaWxkTm9kZUNvdW50
KCkpKTsKKyAgICByZXR1cm4gbV9pbmRleEJlZm9yZTsKK30KKworaW5saW5lIGludCBOb2RlV2l0
aEluZGV4QWZ0ZXI6OmluZGV4QWZ0ZXIoKQoreworICAgIGlmICghbV9oYXZlSW5kZXgpIHsKKyAg
ICAgICAgbV9pbmRleEFmdGVyID0gbV9ub2RlID8gbV9ub2RlLT5ub2RlSW5kZXgoKSArIDEgOiAw
OworICAgICAgICBtX2hhdmVJbmRleCA9IHRydWU7CisgICAgfQorICAgIEFTU0VSVChtX2luZGV4
QWZ0ZXIgPT0gKG1fbm9kZSA/IHN0YXRpY19jYXN0PGludD4obV9ub2RlLT5ub2RlSW5kZXgoKSkg
KyAxIDogMCkpOworICAgIHJldHVybiBtX2luZGV4QWZ0ZXI7Cit9CisKIGlubGluZSBSYW5nZTo6
UmFuZ2UoUGFzc1JlZlB0cjxEb2N1bWVudD4gb3duZXJEb2N1bWVudCkKICAgICA6IG1fb3duZXJE
b2N1bWVudChvd25lckRvY3VtZW50KQogICAgICwgbV9zdGFydChtX293bmVyRG9jdW1lbnQsIDAp
CkBAIC02OSw2ICsxMDAsOCBAQCBpbmxpbmUgUmFuZ2U6OlJhbmdlKFBhc3NSZWZQdHI8RG9jdW1l
bnQ+CiAjaWZuZGVmIE5ERUJVRwogICAgICsrUmFuZ2VDb3VudGVyOjpjb3VudDsKICNlbmRpZgor
CisgICAgbV9vd25lckRvY3VtZW50LT5hdHRhY2hSYW5nZSh0aGlzKTsKIH0KIAogUGFzc1JlZlB0
cjxSYW5nZT4gUmFuZ2U6OmNyZWF0ZShQYXNzUmVmUHRyPERvY3VtZW50PiBvd25lckRvY3VtZW50
KQpAQCAtODUsNiArMTE4LDggQEAgaW5saW5lIFJhbmdlOjpSYW5nZShQYXNzUmVmUHRyPERvY3Vt
ZW50PgogICAgICsrUmFuZ2VDb3VudGVyOjpjb3VudDsKICNlbmRpZgogCisgICAgbV9vd25lckRv
Y3VtZW50LT5hdHRhY2hSYW5nZSh0aGlzKTsKKwogICAgIC8vIFNpbXBseSBzZXR0aW5nIHRoZSBj
b250YWluZXJzIGFuZCBvZmZzZXRzIGRpcmVjdGx5IHdvdWxkIG5vdCBkbyBhbnkgb2YgdGhlIGNo
ZWNraW5nCiAgICAgLy8gdGhhdCBzZXRTdGFydCBhbmQgc2V0RW5kIGRvLCBzbyB3ZSBjYWxsIHRo
b3NlIGZ1bmN0aW9ucy4KICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTEwNiw2ICsxNDEs
OSBAQCBQYXNzUmVmUHRyPFJhbmdlPiBSYW5nZTo6Y3JlYXRlKFBhc3NSZWZQCiAKIFJhbmdlOjp+
UmFuZ2UoKQogeworICAgIGlmIChtX3N0YXJ0LmNvbnRhaW5lcikKKyAgICAgICAgbV9vd25lckRv
Y3VtZW50LT5kZXRhY2hSYW5nZSh0aGlzKTsKKwogI2lmbmRlZiBOREVCVUcKICAgICAtLVJhbmdl
Q291bnRlcjo6Y291bnQ7CiAjZW5kaWYKQEAgLTE1OCwxMCArMTk2LDcgQEAgTm9kZSogUmFuZ2U6
OmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKEV4YwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
LSAgICBOb2RlKiBjb21tb25BbmNlc3RvciA9IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKG1fc3Rh
cnQuY29udGFpbmVyLmdldCgpLCBtX2VuZC5jb250YWluZXIuZ2V0KCkpOwotICAgIGlmICghY29t
bW9uQW5jZXN0b3IpIC8vIHNob3VsZCBuZXZlciBoYXBwZW4gCi0gICAgICAgIGVjID0gV1JPTkdf
RE9DVU1FTlRfRVJSOyAKLSAgICByZXR1cm4gY29tbW9uQW5jZXN0b3I7CisgICAgcmV0dXJuIGNv
bW1vbkFuY2VzdG9yQ29udGFpbmVyKG1fc3RhcnQuY29udGFpbmVyLmdldCgpLCBtX2VuZC5jb250
YWluZXIuZ2V0KCkpOwogfQogCiBOb2RlKiBSYW5nZTo6Y29tbW9uQW5jZXN0b3JDb250YWluZXIo
Tm9kZSogY29udGFpbmVyQSwgTm9kZSogY29udGFpbmVyQikKQEAgLTMwMywxMiArMzM4LDggQEAg
Ym9vbCBSYW5nZTo6aXNQb2ludEluUmFuZ2UoTm9kZSogcmVmTm9kZQogICAgIGlmIChlYykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gcG9pbnQgaXMgbm90IGJlZm9yZSB0aGUgc3Rh
cnQgYW5kIG5vdCBhZnRlciB0aGUgZW5kCi0gICAgaWYgKChjb21wYXJlQm91bmRhcnlQb2ludHMo
cmVmTm9kZSwgb2Zmc2V0LCBtX3N0YXJ0LmNvbnRhaW5lci5nZXQoKSwgbV9zdGFydC5vZmZzZXQp
ICE9IC0xKSAmJiAKLSAgICAgICAgKGNvbXBhcmVCb3VuZGFyeVBvaW50cyhyZWZOb2RlLCBvZmZz
ZXQsIG1fZW5kLmNvbnRhaW5lci5nZXQoKSwgbV9lbmQub2Zmc2V0KSAhPSAxKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IGNvbXBhcmVCb3VuZGFyeVBvaW50cyhyZWZOb2RlLCBvZmZzZXQsIG1fc3RhcnQuY29udGFpbmVy
LmdldCgpLCBtX3N0YXJ0Lm9mZnNldCkgPj0gMAorICAgICAgICAmJiBjb21wYXJlQm91bmRhcnlQ
b2ludHMocmVmTm9kZSwgb2Zmc2V0LCBtX2VuZC5jb250YWluZXIuZ2V0KCksIG1fZW5kLm9mZnNl
dCkgPD0gMDsKIH0KIAogc2hvcnQgUmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlKiByZWZOb2RlLCBp
bnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTM4MSw3ICs0MTIsNyBAQCBSYW5nZTo6
Q29tcGFyZVJlc3VsdHMgUmFuZ2U6OmNvbXBhcmVOb2RlCiAgICAgfQogCiAgICAgTm9kZSogcGFy
ZW50Tm9kZSA9IHJlZk5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICB1bnNpZ25lZCBub2RlSW5kZXgg
PSByZWZOb2RlLT5ub2RlSW5kZXgoKTsKKyAgICBpbnQgbm9kZUluZGV4ID0gcmVmTm9kZS0+bm9k
ZUluZGV4KCk7CiAgICAgCiAgICAgaWYgKCFwYXJlbnROb2RlKSB7CiAgICAgICAgIC8vIGlmIHRo
ZSBub2RlIGlzIHRoZSB0b3AgZG9jdW1lbnQgd2Ugc2hvdWxkIHJldHVybiBOT0RFX0JFRk9SRV9B
TkRfQUZURVIKQEAgLTU0MSw3ICs1NzIsNyBAQCBzaG9ydCBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5
UG9pbnRzKE5vZGUqCiAgICAgfQogCiAgICAgLy8gU2hvdWxkIG5ldmVyIHJlYWNoIHRoaXMgcG9p
bnQuCi0gICAgQVNTRVJUKDApOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVy
biAwOwogfQogCkBAIC01NTcsMTcgKzU4OCwxMSBAQCBib29sIFJhbmdlOjpib3VuZGFyeVBvaW50
c1ZhbGlkKCkgY29uc3QKIAogdm9pZCBSYW5nZTo6ZGVsZXRlQ29udGVudHMoRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7Ci0gICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lcikgewotICAgICAgICBlYyA9IElO
VkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZWMgPSAwOwog
ICAgIGNoZWNrRGVsZXRlRXh0cmFjdChlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47
CiAKLSAgICBwcm9jZXNzQ29udGVudHMoREVMRVRFX0NPTlRFTlRTLGVjKTsKKyAgICBwcm9jZXNz
Q29udGVudHMoREVMRVRFX0NPTlRFTlRTLCBlYyk7CiB9CiAKIGJvb2wgUmFuZ2U6OmludGVyc2Vj
dHNOb2RlKE5vZGUqIHJlZk5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtNTg4LDcgKzYxMyw3
IEBAIGJvb2wgUmFuZ2U6OmludGVyc2VjdHNOb2RlKE5vZGUqIHJlZk5vZGUKICAgICB9CiAKICAg
ICBOb2RlKiBwYXJlbnROb2RlID0gcmVmTm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIHVuc2lnbmVk
IG5vZGVJbmRleCA9IHJlZk5vZGUtPm5vZGVJbmRleCgpOworICAgIGludCBub2RlSW5kZXggPSBy
ZWZOb2RlLT5ub2RlSW5kZXgoKTsKICAgICAKICAgICBpZiAoIXBhcmVudE5vZGUpIHsKICAgICAg
ICAgLy8gaWYgdGhlIG5vZGUgaXMgdGhlIHRvcCBkb2N1bWVudCB3ZSBzaG91bGQgcmV0dXJuIE5P
REVfQkVGT1JFX0FORF9BRlRFUgpAQCAtNTk3LDIzICs2MjIsMjEgQEAgYm9vbCBSYW5nZTo6aW50
ZXJzZWN0c05vZGUoTm9kZSogcmVmTm9kZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgaWYgKGNvbXBhcmVQb2ludChwYXJlbnROb2RlLCBub2RlSW5kZXgsIGVjKSA9PSAtMSAm
JiAvLyBzdGFydHMgYmVmb3JlIHN0YXJ0Ci0gICAgICAgIGNvbXBhcmVQb2ludChwYXJlbnROb2Rl
LCBub2RlSW5kZXggKyAxLCBlYykgPT0gLTEpIHsgLy8gZW5kcyBiZWZvcmUgc3RhcnQKKyAgICBp
ZiAoY29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCwgZWMpIDwgMCAmJiAvLyBzdGFy
dHMgYmVmb3JlIHN0YXJ0CisgICAgICAgIGNvbXBhcmVQb2ludChwYXJlbnROb2RlLCBub2RlSW5k
ZXggKyAxLCBlYykgPCAwKSB7IC8vIGVuZHMgYmVmb3JlIHN0YXJ0CiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9IGVsc2UgaWYgKGNvbXBhcmVQb2ludChwYXJlbnROb2RlLCBub2RlSW5kZXgs
IGVjKSA9PSAxICYmIC8vIHN0YXJ0cyBhZnRlciBlbmQKLSAgICAgICAgICAgICAgIGNvbXBhcmVQ
b2ludChwYXJlbnROb2RlLCBub2RlSW5kZXggKyAxLCBlYykgPT0gMSkgeyAvLyBlbmRzIGFmdGVy
IGVuZAorICAgIH0gZWxzZSBpZiAoY29tcGFyZVBvaW50KHBhcmVudE5vZGUsIG5vZGVJbmRleCwg
ZWMpID4gMCAmJiAvLyBzdGFydHMgYWZ0ZXIgZW5kCisgICAgICAgICAgICAgICBjb21wYXJlUG9p
bnQocGFyZW50Tm9kZSwgbm9kZUluZGV4ICsgMSwgZWMpID4gMCkgeyAvLyBlbmRzIGFmdGVyIGVu
ZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIHJldHVybiB0cnVlOyAg
ICAvL2FsbCBvdGhlciBjYXNlcworICAgIHJldHVybiB0cnVlOyAvLyBhbGwgb3RoZXIgY2FzZXMK
IH0KIAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5nZTo6cHJvY2Vzc0NvbnRlbnRz
ICggQWN0aW9uVHlwZSBhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBSYW5nZTo6cHJvY2Vzc0NvbnRlbnRzKEFjdGlvblR5cGUgYWN0aW9uLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICAvLyAjIyMgd2hlbiBtdXRhdGlvbiBldmVudHMgYXJl
IGltcGxlbWVudGVkLCB3ZSB3aWxsIGhhdmUgdG8gdGFrZSBpbnRvIGFjY291bnQKLSAgICAvLyBz
aXR1YXRpb25zIHdoZXJlIHRoZSB0cmVlIGlzIGJlaW5nIHRyYW5zZm9ybWVkIHdoaWxlIHdlIGRl
bGV0ZSAtIHVnaCEKLQotICAgIC8vICMjIyBwZXJoYXBzIGRpc2FibGUgbm9kZSBkZWxldGlvbiBu
b3RpZmljYXRpb24gZm9yIHRoaXMgcmFuZ2Ugd2hpbGUgd2UgZG8gdGhpcz8KKyAgICAvLyBGSVhN
RTogVG8gd29yayBwcm9wZXJseSB3aXRoIG11dGF0aW9uIGV2ZW50cywgd2Ugd2lsbCBoYXZlIHRv
IHRha2UgaW50byBhY2NvdW50CisgICAgLy8gc2l0dWF0aW9ucyB3aGVyZSB0aGUgdHJlZSBpcyBi
ZWluZyB0cmFuc2Zvcm1lZCB3aGlsZSB3ZSB3b3JrIG9uIGl0IC0gdWdoIQogCiAgICAgUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50OwogICAgIGlmIChhY3Rpb24gPT0gRVhUUkFDVF9D
T05URU5UUyB8fCBhY3Rpb24gPT0gQ0xPTkVfQ09OVEVOVFMpCkBAIC02NDksMjIgKzY3MiwxNyBA
QCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFJhbmdlOjpwcm9jCiAgICAgLy8gU2ltcGxl
IGNhc2U6IHRoZSBzdGFydCBhbmQgZW5kIGNvbnRhaW5lcnMgYXJlIHRoZSBzYW1lLiBXZSBqdXN0
IGdyYWIKICAgICAvLyBldmVyeXRoaW5nID49IHN0YXJ0IG9mZnNldCBhbmQgPCBlbmQgb2Zmc2V0
CiAgICAgaWYgKG1fc3RhcnQuY29udGFpbmVyID09IG1fZW5kLmNvbnRhaW5lcikgewotICAgICAg
ICBpZiAobV9zdGFydC5jb250YWluZXItPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFIHx8
Ci0gICAgICAgICAgICBtX3N0YXJ0LmNvbnRhaW5lci0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFU
QV9TRUNUSU9OX05PREUgfHwKLSAgICAgICAgICAgIG1fc3RhcnQuY29udGFpbmVyLT5ub2RlVHlw
ZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERSkgewotCisgICAgICAgIE5vZGU6Ok5vZGVUeXBlIHN0
YXJ0Tm9kZVR5cGUgPSBtX3N0YXJ0LmNvbnRhaW5lci0+bm9kZVR5cGUoKTsKKyAgICAgICAgaWYg
KHN0YXJ0Tm9kZVR5cGUgPT0gTm9kZTo6VEVYVF9OT0RFIHx8IHN0YXJ0Tm9kZVR5cGUgPT0gTm9k
ZTo6Q0RBVEFfU0VDVElPTl9OT0RFIHx8IHN0YXJ0Tm9kZVR5cGUgPT0gTm9kZTo6Q09NTUVOVF9O
T0RFKSB7CiAgICAgICAgICAgICBpZiAoYWN0aW9uID09IEVYVFJBQ1RfQ09OVEVOVFMgfHwgYWN0
aW9uID09IENMT05FX0NPTlRFTlRTKSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPENoYXJhY3Rl
ckRhdGE+IGMgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PENoYXJhY3RlckRhdGE+KG1fc3RhcnQuY29u
dGFpbmVyLT5jbG9uZU5vZGUodHJ1ZSkpOwogICAgICAgICAgICAgICAgIGMtPmRlbGV0ZURhdGEo
bV9lbmQub2Zmc2V0LCBjLT5sZW5ndGgoKSAtIG1fZW5kLm9mZnNldCwgZWMpOwogICAgICAgICAg
ICAgICAgIGMtPmRlbGV0ZURhdGEoMCwgbV9zdGFydC5vZmZzZXQsIGVjKTsKICAgICAgICAgICAg
ICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoYy5yZWxlYXNlKCksIGVjKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gRVhUUkFDVF9DT05URU5UUyB8fCBhY3Rpb24g
PT0gREVMRVRFX0NPTlRFTlRTKSB7Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q2hhcmFj
dGVyRGF0YSo+KG1fc3RhcnQuY29udGFpbmVyLmdldCgpKS0+ZGVsZXRlRGF0YShtX3N0YXJ0Lm9m
ZnNldCxtX2VuZC5vZmZzZXQtbV9zdGFydC5vZmZzZXQsZWMpOwotICAgICAgICAgICAgICAgIG1f
c3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtX3N0YXJ0LmNvbnRhaW5lci0+bm9kZVR5
cGUoKSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpIHsKKyAgICAgICAgICAg
IGlmIChhY3Rpb24gPT0gRVhUUkFDVF9DT05URU5UUyB8fCBhY3Rpb24gPT0gREVMRVRFX0NPTlRF
TlRTKQorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENoYXJhY3RlckRhdGEqPihtX3N0YXJ0
LmNvbnRhaW5lci5nZXQoKSktPmRlbGV0ZURhdGEobV9zdGFydC5vZmZzZXQsIG1fZW5kLm9mZnNl
dCAtIG1fc3RhcnQub2Zmc2V0LCBlYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhcnROb2RlVHlw
ZSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpIHsKICAgICAgICAgICAgIGlm
IChhY3Rpb24gPT0gRVhUUkFDVF9DT05URU5UUyB8fCBhY3Rpb24gPT0gQ0xPTkVfQ09OVEVOVFMp
IHsKICAgICAgICAgICAgICAgICBSZWZQdHI8UHJvY2Vzc2luZ0luc3RydWN0aW9uPiBjID0gc3Rh
dGljX3BvaW50ZXJfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+KG1fc3RhcnQuY29udGFpbmVy
LT5jbG9uZU5vZGUodHJ1ZSkpOwogICAgICAgICAgICAgICAgIGMtPnNldERhdGEoYy0+ZGF0YSgp
LnN1YnN0cmluZyhtX3N0YXJ0Lm9mZnNldCwgbV9lbmQub2Zmc2V0IC0gbV9zdGFydC5vZmZzZXQp
LCBlYyk7CkBAIC02NzYsMjYgKzY5NCwyNCBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IFJhbmdlOjpwcm9jCiAgICAgICAgICAgICAgICAgZGF0YS5yZW1vdmUobV9zdGFydC5vZmZzZXQs
IG1fZW5kLm9mZnNldCAtIG1fc3RhcnQub2Zmc2V0KTsKICAgICAgICAgICAgICAgICBwaS0+c2V0
RGF0YShkYXRhLCBlYyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7
CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBOb2RlKiBuID0gbV9zdGFydC5jb250YWlu
ZXItPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgZm9yIChp
ID0gMDsgbiAmJiBpIDwgbV9zdGFydC5vZmZzZXQ7IGkrKykgLy8gc2tpcCB1bnRpbCBtX3N0YXJ0
Lm9mZnNldAorICAgICAgICAgICAgZm9yIChpID0gMDsgbiAmJiBpIDwgbV9zdGFydC5vZmZzZXQ7
IGkrKykgLy8gc2tpcCB1bnRpbCBzdGFydCBvZmZzZXQKICAgICAgICAgICAgICAgICBuID0gbi0+
bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIHdoaWxlIChuICYmIGkgPCBtX2VuZC5vZmZzZXQp
IHsgLy8gZGVsZXRlIHVudGlsIG1fZW5kLm9mZnNldAorICAgICAgICAgICAgaW50IGVuZE9mZnNl
dCA9IG1fZW5kLm9mZnNldDsKKyAgICAgICAgICAgIHdoaWxlIChuICYmIGkgPCBlbmRPZmZzZXQp
IHsgLy8gZGVsZXRlIHVudGlsIGVuZCBvZmZzZXQKICAgICAgICAgICAgICAgICBOb2RlKiBuZXh0
ID0gbi0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09IEVYVFJB
Q1RfQ09OVEVOVFMpCi0gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChu
LGVjKTsgLy8gd2lsbCByZW1vdmUgbiBmcm9tIGl0J3MgcGFyZW50CisgICAgICAgICAgICAgICAg
ICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChuLCBlYyk7IC8vIHdpbGwgcmVtb3ZlIG4gZnJvbSBp
dHMgcGFyZW50CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uID09IENMT05FX0NPTlRF
TlRTKQotICAgICAgICAgICAgICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQobi0+Y2xvbmVO
b2RlKHRydWUpLGVjKTsKKyAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxk
KG4tPmNsb25lTm9kZSh0cnVlKSwgZWMpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgbV9zdGFydC5jb250YWluZXItPnJlbW92ZUNoaWxkKG4sZWMpOworICAgICAg
ICAgICAgICAgICAgICBtX3N0YXJ0LmNvbnRhaW5lci0+cmVtb3ZlQ2hpbGQobiwgZWMpOwogICAg
ICAgICAgICAgICAgIG4gPSBuZXh0OwogICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQotICAgICAgICBpZiAoYWN0aW9uID09IEVYVFJBQ1RfQ09OVEVOVFMgfHwg
YWN0aW9uID09IERFTEVURV9DT05URU5UUykKLSAgICAgICAgICAgIGNvbGxhcHNlKHRydWUsZWMp
OwogICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogICAgIH0KIApAQCAtNzE5LDIz
ICs3MzUsMTggQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5nZTo6cHJvYwogICAg
IFJlZlB0cjxOb2RlPiBsZWZ0Q29udGVudHM7CiAgICAgaWYgKG1fc3RhcnQuY29udGFpbmVyICE9
IGNvbW1vblJvb3QpIHsKICAgICAgICAgLy8gcHJvY2VzcyB0aGUgbGVmdC1oYW5kIHNpZGUgb2Yg
dGhlIHJhbmdlLCB1cCB1bnRpbCB0aGUgbGFzdCBhbmNlc3RvciBvZgotICAgICAgICAvLyBtX3N0
YXJ0LmNvbnRhaW5lciBiZWZvcmUgY29tbW9uUm9vdAotICAgICAgICBpZiAobV9zdGFydC5jb250
YWluZXItPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFIHx8Ci0gICAgICAgICAgICBtX3N0
YXJ0LmNvbnRhaW5lci0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUgfHwK
LSAgICAgICAgICAgIG1fc3RhcnQuY29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1F
TlRfTk9ERSkgewotCisgICAgICAgIC8vIHN0YXJ0IGNvbnRhaW5lciBiZWZvcmUgY29tbW9uUm9v
dAorICAgICAgICBOb2RlOjpOb2RlVHlwZSBzdGFydE5vZGVUeXBlID0gbV9zdGFydC5jb250YWlu
ZXItPm5vZGVUeXBlKCk7CisgICAgICAgIGlmIChzdGFydE5vZGVUeXBlID09IE5vZGU6OlRFWFRf
Tk9ERSB8fCBzdGFydE5vZGVUeXBlID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSB8fCBzdGFy
dE5vZGVUeXBlID09IE5vZGU6OkNPTU1FTlRfTk9ERSkgewogICAgICAgICAgICAgaWYgKGFjdGlv
biA9PSBFWFRSQUNUX0NPTlRFTlRTIHx8IGFjdGlvbiA9PSBDTE9ORV9DT05URU5UUykgewogICAg
ICAgICAgICAgICAgIFJlZlB0cjxDaGFyYWN0ZXJEYXRhPiBjID0gc3RhdGljX3BvaW50ZXJfY2Fz
dDxDaGFyYWN0ZXJEYXRhPihtX3N0YXJ0LmNvbnRhaW5lci0+Y2xvbmVOb2RlKHRydWUpKTsKICAg
ICAgICAgICAgICAgICBjLT5kZWxldGVEYXRhKDAsIG1fc3RhcnQub2Zmc2V0LCBlYyk7CiAgICAg
ICAgICAgICAgICAgbGVmdENvbnRlbnRzID0gYy5yZWxlYXNlKCk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoYWN0aW9uID09IEVYVFJBQ1RfQ09OVEVOVFMgfHwgYWN0aW9uID09IERF
TEVURV9DT05URU5UUykgeworICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBFWFRSQUNUX0NPTlRF
TlRTIHx8IGFjdGlvbiA9PSBERUxFVEVfQ09OVEVOVFMpCiAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8Q2hhcmFjdGVyRGF0YSo+KG1fc3RhcnQuY29udGFpbmVyLmdldCgpKS0+ZGVsZXRlRGF0
YSgKICAgICAgICAgICAgICAgICAgICAgbV9zdGFydC5vZmZzZXQsIHN0YXRpY19jYXN0PENoYXJh
Y3RlckRhdGEqPihtX3N0YXJ0LmNvbnRhaW5lci5nZXQoKSktPmxlbmd0aCgpIC0gbV9zdGFydC5v
ZmZzZXQsIGVjKTsKLSAgICAgICAgICAgICAgICBtX3N0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQo
KS0+dXBkYXRlTGF5b3V0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZSBpZiAobV9zdGFydC5jb250YWluZXItPm5vZGVUeXBlKCkgPT0gTm9kZTo6UFJPQ0VTU0lOR19J
TlNUUlVDVElPTl9OT0RFKSB7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhcnROb2RlVHlwZSA9PSBO
b2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpIHsKICAgICAgICAgICAgIGlmIChhY3Rp
b24gPT0gRVhUUkFDVF9DT05URU5UUyB8fCBhY3Rpb24gPT0gQ0xPTkVfQ09OVEVOVFMpIHsKICAg
ICAgICAgICAgICAgICBSZWZQdHI8UHJvY2Vzc2luZ0luc3RydWN0aW9uPiBjID0gc3RhdGljX3Bv
aW50ZXJfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+KG1fc3RhcnQuY29udGFpbmVyLT5jbG9u
ZU5vZGUodHJ1ZSkpOwogICAgICAgICAgICAgICAgIGMtPnNldERhdGEoYy0+ZGF0YSgpLnN1YnN0
cmluZyhtX3N0YXJ0Lm9mZnNldCksIGVjKTsKQEAgLTc0NiwyMSArNzU3LDIwIEBAIFBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gUmFuZ2U6OnByb2MKICAgICAgICAgICAgICAgICBTdHJpbmcg
ZGF0YShwaS0+ZGF0YSgpKTsKICAgICAgICAgICAgICAgICBwaS0+c2V0RGF0YShkYXRhLmxlZnQo
bV9zdGFydC5vZmZzZXQpLCBlYyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZSB7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoYWN0aW9uID09IEVYVFJB
Q1RfQ09OVEVOVFMgfHwgYWN0aW9uID09IENMT05FX0NPTlRFTlRTKQogICAgICAgICAgICAgICAg
IGxlZnRDb250ZW50cyA9IG1fc3RhcnQuY29udGFpbmVyLT5jbG9uZU5vZGUoZmFsc2UpOwogICAg
ICAgICAgICAgTm9kZSogbiA9IG1fc3RhcnQuY29udGFpbmVyLT5maXJzdENoaWxkKCk7Ci0gICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgbiAmJiBpIDwgbV9zdGFydC5vZmZzZXQ7IGkrKykgLy8g
c2tpcCB1bnRpbCBtX3N0YXJ0Lm9mZnNldAorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IG4g
JiYgaSA8IG1fc3RhcnQub2Zmc2V0OyBpKyspIC8vIHNraXAgdW50aWwgc3RhcnQgb2Zmc2V0CiAg
ICAgICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICB3aGlsZSAo
bikgeyAvLyBwcm9jZXNzIHVudGlsIGVuZAogICAgICAgICAgICAgICAgIE5vZGUqIG5leHQgPSBu
LT5uZXh0U2libGluZygpOwogICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gRVhUUkFDVF9D
T05URU5UUykKLSAgICAgICAgICAgICAgICAgICAgbGVmdENvbnRlbnRzLT5hcHBlbmRDaGlsZChu
LGVjKTsgLy8gd2lsbCByZW1vdmUgbiBmcm9tIG1fc3RhcnQuY29udGFpbmVyCisgICAgICAgICAg
ICAgICAgICAgIGxlZnRDb250ZW50cy0+YXBwZW5kQ2hpbGQobiwgZWMpOyAvLyB3aWxsIHJlbW92
ZSBuIGZyb20gc3RhcnQgY29udGFpbmVyCiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9u
ID09IENMT05FX0NPTlRFTlRTKQotICAgICAgICAgICAgICAgICAgICBsZWZ0Q29udGVudHMtPmFw
cGVuZENoaWxkKG4tPmNsb25lTm9kZSh0cnVlKSxlYyk7CisgICAgICAgICAgICAgICAgICAgIGxl
ZnRDb250ZW50cy0+YXBwZW5kQ2hpbGQobi0+Y2xvbmVOb2RlKHRydWUpLCBlYyk7CiAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtX3N0YXJ0LmNvbnRhaW5lci0+cmVt
b3ZlQ2hpbGQobixlYyk7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhcnQuY29udGFpbmVyLT5y
ZW1vdmVDaGlsZChuLCBlYyk7CiAgICAgICAgICAgICAgICAgbiA9IG5leHQ7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTc4OCwyNSArNzk4LDIwIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gUmFuZ2U6OnByb2MKICAgICAgICAgfQogICAgIH0KIAotICAgIFJlZlB0cjxOb2Rl
PiByaWdodENvbnRlbnRzID0gMDsKKyAgICBSZWZQdHI8Tm9kZT4gcmlnaHRDb250ZW50czsKICAg
ICBpZiAobV9lbmQuY29udGFpbmVyICE9IGNvbW1vblJvb3QpIHsKICAgICAgICAgLy8gZGVsZXRl
IHRoZSByaWdodC1oYW5kIHNpZGUgb2YgdGhlIHJhbmdlLCB1cCB1bnRpbCB0aGUgbGFzdCBhbmNl
c3RvciBvZgotICAgICAgICAvLyBtX2VuZC5jb250YWluZXIgYmVmb3JlIGNvbW1vblJvb3QKLSAg
ICAgICAgaWYgKG1fZW5kLmNvbnRhaW5lci0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUg
fHwKLSAgICAgICAgICAgIG1fZW5kLmNvbnRhaW5lci0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFU
QV9TRUNUSU9OX05PREUgfHwKLSAgICAgICAgICAgIG1fZW5kLmNvbnRhaW5lci0+bm9kZVR5cGUo
KSA9PSBOb2RlOjpDT01NRU5UX05PREUpIHsKLQorICAgICAgICAvLyBlbmQgY29udGFpbmVyIGJl
Zm9yZSBjb21tb25Sb290CisgICAgICAgIE5vZGU6Ok5vZGVUeXBlIGVuZE5vZGVUeXBlID0gbV9l
bmQuY29udGFpbmVyLT5ub2RlVHlwZSgpOworICAgICAgICBpZiAoZW5kTm9kZVR5cGUgPT0gTm9k
ZTo6VEVYVF9OT0RFIHx8IGVuZE5vZGVUeXBlID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSB8
fCBlbmROb2RlVHlwZSA9PSBOb2RlOjpDT01NRU5UX05PREUpIHsKICAgICAgICAgICAgIGlmIChh
Y3Rpb24gPT0gRVhUUkFDVF9DT05URU5UUyB8fCBhY3Rpb24gPT0gQ0xPTkVfQ09OVEVOVFMpIHsK
ICAgICAgICAgICAgICAgICBSZWZQdHI8Q2hhcmFjdGVyRGF0YT4gYyA9IHN0YXRpY19wb2ludGVy
X2Nhc3Q8Q2hhcmFjdGVyRGF0YT4obV9lbmQuY29udGFpbmVyLT5jbG9uZU5vZGUodHJ1ZSkpOwog
ICAgICAgICAgICAgICAgIGMtPmRlbGV0ZURhdGEobV9lbmQub2Zmc2V0LCBzdGF0aWNfY2FzdDxD
aGFyYWN0ZXJEYXRhKj4obV9lbmQuY29udGFpbmVyLmdldCgpKS0+bGVuZ3RoKCkgLSBtX2VuZC5v
ZmZzZXQsIGVjKTsKICAgICAgICAgICAgICAgICByaWdodENvbnRlbnRzID0gYzsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gRVhUUkFDVF9DT05URU5UUyB8fCBhY3Rp
b24gPT0gREVMRVRFX0NPTlRFTlRTKSB7CisgICAgICAgICAgICBpZiAoYWN0aW9uID09IEVYVFJB
Q1RfQ09OVEVOVFMgfHwgYWN0aW9uID09IERFTEVURV9DT05URU5UUykKICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxDaGFyYWN0ZXJEYXRhKj4obV9lbmQuY29udGFpbmVyLmdldCgpKS0+ZGVs
ZXRlRGF0YSgwLCBtX2VuZC5vZmZzZXQsIGVjKTsKLSAgICAgICAgICAgICAgICBtX3N0YXJ0LmNv
bnRhaW5lci0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSBpZiAobV9lbmQuY29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5v
ZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSkgeworICAgICAgICB9IGVsc2UgaWYgKGVu
ZE5vZGVUeXBlID09IE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSkgewogICAgICAg
ICAgICAgaWYgKGFjdGlvbiA9PSBFWFRSQUNUX0NPTlRFTlRTIHx8IGFjdGlvbiA9PSBDTE9ORV9D
T05URU5UUykgewogICAgICAgICAgICAgICAgIFJlZlB0cjxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+
IGMgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4obV9lbmQuY29u
dGFpbmVyLT5jbG9uZU5vZGUodHJ1ZSkpOwogICAgICAgICAgICAgICAgIGMtPnNldERhdGEoYy0+
ZGF0YSgpLmxlZnQobV9lbmQub2Zmc2V0KSwgZWMpOwpAQCAtODE2LDEzICs4MjEsMTIgQEAgUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBSYW5nZTo6cHJvYwogICAgICAgICAgICAgICAgIFBy
b2Nlc3NpbmdJbnN0cnVjdGlvbiogcGkgPSBzdGF0aWNfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24qPihtX2VuZC5jb250YWluZXIuZ2V0KCkpOwogICAgICAgICAgICAgICAgIHBpLT5zZXREYXRh
KHBpLT5kYXRhKCkuc3Vic3RyaW5nKG1fZW5kLm9mZnNldCksIGVjKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IGlmIChhY3Rpb24gPT0gRVhUUkFDVF9DT05URU5UUyB8fCBhY3Rpb24gPT0gQ0xPTkVfQ09OVEVO
VFMpCiAgICAgICAgICAgICAgICAgcmlnaHRDb250ZW50cyA9IG1fZW5kLmNvbnRhaW5lci0+Y2xv
bmVOb2RlKGZhbHNlKTsKICAgICAgICAgICAgIE5vZGUqIG4gPSBtX2VuZC5jb250YWluZXItPmZp
cnN0Q2hpbGQoKTsKICAgICAgICAgICAgIGlmIChuICYmIG1fZW5kLm9mZnNldCkgewotICAgICAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpKzEgPCBtX2VuZC5vZmZzZXQ7IGkrKykgeyAvLyBz
a2lwIHRvIG1fZW5kLm9mZnNldAorICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpICsg
MSA8IG1fZW5kLm9mZnNldDsgaSsrKSB7IC8vIHNraXAgdG8gZW5kLm9mZnNldAogICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBuZXh0ID0gbi0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFuZXh0KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC04MzIs
MTEgKzgzNiwxMSBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFJhbmdlOjpwcm9jCiAg
ICAgICAgICAgICAgICAgZm9yICg7IG47IG4gPSBwcmV2KSB7CiAgICAgICAgICAgICAgICAgICAg
IHByZXYgPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGFj
dGlvbiA9PSBFWFRSQUNUX0NPTlRFTlRTKQotICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRD
b250ZW50cy0+aW5zZXJ0QmVmb3JlKG4scmlnaHRDb250ZW50cy0+Zmlyc3RDaGlsZCgpLGVjKTsg
Ly8gd2lsbCByZW1vdmUgbiBmcm9tIGl0J3MgcGFyZW50CisgICAgICAgICAgICAgICAgICAgICAg
ICByaWdodENvbnRlbnRzLT5pbnNlcnRCZWZvcmUobiwgcmlnaHRDb250ZW50cy0+Zmlyc3RDaGls
ZCgpLCBlYyk7IC8vIHdpbGwgcmVtb3ZlIG4gZnJvbSBpdHMgcGFyZW50CiAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGFjdGlvbiA9PSBDTE9ORV9DT05URU5UUykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJpZ2h0Q29udGVudHMtPmluc2VydEJlZm9yZShuLT5jbG9uZU5vZGUodHJ1ZSks
cmlnaHRDb250ZW50cy0+Zmlyc3RDaGlsZCgpLGVjKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJpZ2h0Q29udGVudHMtPmluc2VydEJlZm9yZShuLT5jbG9uZU5vZGUodHJ1ZSksIHJpZ2h0Q29u
dGVudHMtPmZpcnN0Q2hpbGQoKSwgZWMpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2VuZC5jb250YWluZXItPnJlbW92ZUNoaWxkKG4sZWMpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9lbmQuY29udGFpbmVyLT5yZW1vdmVDaGlsZChuLCBl
Yyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04NDks
MTYgKzg1MywxNSBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFJhbmdlOjpwcm9jCiAg
ICAgICAgICAgICAgICAgcmlnaHRDb250ZW50c1BhcmVudC0+YXBwZW5kQ2hpbGQocmlnaHRDb250
ZW50cyxlYyk7CiAgICAgICAgICAgICAgICAgcmlnaHRDb250ZW50cyA9IHJpZ2h0Q29udGVudHNQ
YXJlbnQ7CiAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIE5vZGUqIHByZXY7CiAgICAgICAg
ICAgICBmb3IgKDsgbjsgbiA9IHByZXYpIHsKICAgICAgICAgICAgICAgICBwcmV2ID0gbi0+cHJl
dmlvdXNTaWJsaW5nKCk7CiAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBFWFRSQUNUX0NP
TlRFTlRTKQotICAgICAgICAgICAgICAgICAgICByaWdodENvbnRlbnRzLT5pbnNlcnRCZWZvcmUo
bixyaWdodENvbnRlbnRzLT5maXJzdENoaWxkKCksZWMpOyAvLyB3aWxsIHJlbW92ZSBuIGZyb20g
aXQncyBwYXJlbnQKKyAgICAgICAgICAgICAgICAgICAgcmlnaHRDb250ZW50cy0+aW5zZXJ0QmVm
b3JlKG4sIHJpZ2h0Q29udGVudHMtPmZpcnN0Q2hpbGQoKSwgZWMpOyAvLyB3aWxsIHJlbW92ZSBu
IGZyb20gaXRzIHBhcmVudAogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFjdGlvbiA9PSBDTE9O
RV9DT05URU5UUykKLSAgICAgICAgICAgICAgICAgICAgcmlnaHRDb250ZW50cy0+aW5zZXJ0QmVm
b3JlKG4tPmNsb25lTm9kZSh0cnVlKSxyaWdodENvbnRlbnRzLT5maXJzdENoaWxkKCksZWMpOwor
ICAgICAgICAgICAgICAgICAgICByaWdodENvbnRlbnRzLT5pbnNlcnRCZWZvcmUobi0+Y2xvbmVO
b2RlKHRydWUpLCByaWdodENvbnRlbnRzLT5maXJzdENoaWxkKCksIGVjKTsKICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJpZ2h0UGFyZW50LT5yZW1vdmVDaGlsZChu
LGVjKTsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHRQYXJlbnQtPnJlbW92ZUNoaWxkKG4sIGVj
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG4gPSByaWdodFBhcmVudC0+cHJldmlvdXNT
aWJsaW5nKCk7CiAgICAgICAgIH0KQEAgLTg2OCwxMiArODcxLDEwIEBAIFBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gUmFuZ2U6OnByb2MKIAogICAgIE5vZGUqIHByb2Nlc3NTdGFydDsgLy8g
Y2hpbGQgb2YgY29tbW9uUm9vdAogICAgIGlmIChtX3N0YXJ0LmNvbnRhaW5lciA9PSBjb21tb25S
b290KSB7Ci0gICAgICAgIGludCBpOwogICAgICAgICBwcm9jZXNzU3RhcnQgPSBtX3N0YXJ0LmNv
bnRhaW5lci0+Zmlyc3RDaGlsZCgpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9zdGFydC5v
ZmZzZXQ7IGkrKykKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3N0YXJ0Lm9mZnNldDsg
aSsrKQogICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0ID0gcHJvY2Vzc1N0YXJ0LT5uZXh0U2libGlu
ZygpOwotICAgIH0KLSAgICBlbHNlIHsKKyAgICB9IGVsc2UgewogICAgICAgICBwcm9jZXNzU3Rh
cnQgPSBtX3N0YXJ0LmNvbnRhaW5lci5nZXQoKTsKICAgICAgICAgd2hpbGUgKHByb2Nlc3NTdGFy
dC0+cGFyZW50Tm9kZSgpICE9IGNvbW1vblJvb3QpCiAgICAgICAgICAgICBwcm9jZXNzU3RhcnQg
PSBwcm9jZXNzU3RhcnQtPnBhcmVudE5vZGUoKTsKQEAgLTg4MSwxMiArODgyLDEwIEBAIFBhc3NS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUmFuZ2U6OnByb2MKICAgICB9CiAgICAgTm9kZSogcHJv
Y2Vzc0VuZDsgLy8gY2hpbGQgb2YgY29tbW9uUm9vdAogICAgIGlmIChtX2VuZC5jb250YWluZXIg
PT0gY29tbW9uUm9vdCkgewotICAgICAgICBpbnQgaTsKICAgICAgICAgcHJvY2Vzc0VuZCA9IG1f
ZW5kLmNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9l
bmQub2Zmc2V0OyBpKyspCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9lbmQub2Zmc2V0
OyBpKyspCiAgICAgICAgICAgICBwcm9jZXNzRW5kID0gcHJvY2Vzc0VuZC0+bmV4dFNpYmxpbmco
KTsKLSAgICB9Ci0gICAgZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgcHJvY2Vzc0VuZCA9
IG1fZW5kLmNvbnRhaW5lci5nZXQoKTsKICAgICAgICAgd2hpbGUgKHByb2Nlc3NFbmQtPnBhcmVu
dE5vZGUoKSAhPSBjb21tb25Sb290KQogICAgICAgICAgICAgcHJvY2Vzc0VuZCA9IHByb2Nlc3NF
bmQtPnBhcmVudE5vZGUoKTsKQEAgLTg5Niw1OCArODk1LDM1IEBAIFBhc3NSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gUmFuZ2U6OnByb2MKICAgICAvLyAob3IganVzdCBkZWxldGUgdGhlIHN0dWZm
IGluIGJldHdlZW4pCiAKICAgICBpZiAoKGFjdGlvbiA9PSBFWFRSQUNUX0NPTlRFTlRTIHx8IGFj
dGlvbiA9PSBDTE9ORV9DT05URU5UUykgJiYgbGVmdENvbnRlbnRzKQotICAgICAgZnJhZ21lbnQt
PmFwcGVuZENoaWxkKGxlZnRDb250ZW50cyxlYyk7CisgICAgICAgIGZyYWdtZW50LT5hcHBlbmRD
aGlsZChsZWZ0Q29udGVudHMsIGVjKTsKIAogICAgIE5vZGUqIG5leHQ7CiAgICAgTm9kZSogbjsK
ICAgICBpZiAocHJvY2Vzc1N0YXJ0KSB7CiAgICAgICAgIGZvciAobiA9IHByb2Nlc3NTdGFydDsg
biAmJiBuICE9IHByb2Nlc3NFbmQ7IG4gPSBuZXh0KSB7CiAgICAgICAgICAgICBuZXh0ID0gbi0+
bmV4dFNpYmxpbmcoKTsKLQogICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBFWFRSQUNUX0NPTlRF
TlRTKQotICAgICAgICAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChuLGVjKTsgLy8gd2ls
bCByZW1vdmUgZnJvbSBjb21tb25Sb290CisgICAgICAgICAgICAgICAgZnJhZ21lbnQtPmFwcGVu
ZENoaWxkKG4sIGVjKTsgLy8gd2lsbCByZW1vdmUgZnJvbSBjb21tb25Sb290CiAgICAgICAgICAg
ICBlbHNlIGlmIChhY3Rpb24gPT0gQ0xPTkVfQ09OVEVOVFMpCi0gICAgICAgICAgICAgICAgZnJh
Z21lbnQtPmFwcGVuZENoaWxkKG4tPmNsb25lTm9kZSh0cnVlKSxlYyk7CisgICAgICAgICAgICAg
ICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKG4tPmNsb25lTm9kZSh0cnVlKSwgZWMpOwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbW1vblJvb3QtPnJlbW92ZUNoaWxkKG4sZWMp
OworICAgICAgICAgICAgICAgIGNvbW1vblJvb3QtPnJlbW92ZUNoaWxkKG4sIGVjKTsKICAgICAg
ICAgfQogICAgIH0KIAogICAgIGlmICgoYWN0aW9uID09IEVYVFJBQ1RfQ09OVEVOVFMgfHwgYWN0
aW9uID09IENMT05FX0NPTlRFTlRTKSAmJiByaWdodENvbnRlbnRzKQotICAgICAgZnJhZ21lbnQt
PmFwcGVuZENoaWxkKHJpZ2h0Q29udGVudHMsZWMpOworICAgICAgICBmcmFnbWVudC0+YXBwZW5k
Q2hpbGQocmlnaHRDb250ZW50cywgZWMpOwogCi0gICAgLy8gY29sbGFwc2UgdG8gdGhlIHByb3Bl
ciBwb3NpdGlvbiAtIHNlZSBzcGVjIHNlY3Rpb24gMi42Ci0gICAgaWYgKGFjdGlvbiA9PSBFWFRS
QUNUX0NPTlRFTlRTIHx8IGFjdGlvbiA9PSBERUxFVEVfQ09OVEVOVFMpIHsKLSAgICAgICAgaWYg
KCFwYXJ0aWFsU3RhcnQgJiYgIXBhcnRpYWxFbmQpCi0gICAgICAgICAgICBjb2xsYXBzZSh0cnVl
LGVjKTsKLSAgICAgICAgZWxzZSBpZiAocGFydGlhbFN0YXJ0KSB7Ci0gICAgICAgICAgICBtX3N0
YXJ0LmNvbnRhaW5lciA9IHBhcnRpYWxTdGFydC0+cGFyZW50Tm9kZSgpOwotICAgICAgICAgICAg
bV9lbmQuY29udGFpbmVyID0gcGFydGlhbFN0YXJ0LT5wYXJlbnROb2RlKCk7Ci0gICAgICAgICAg
ICBtX3N0YXJ0Lm9mZnNldCA9IG1fZW5kLm9mZnNldCA9IHBhcnRpYWxTdGFydC0+bm9kZUluZGV4
KCkgKyAxOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHBhcnRpYWxFbmQpIHsKLSAgICAg
ICAgICAgIG1fc3RhcnQuY29udGFpbmVyID0gcGFydGlhbEVuZC0+cGFyZW50Tm9kZSgpOwotICAg
ICAgICAgICAgbV9lbmQuY29udGFpbmVyID0gcGFydGlhbEVuZC0+cGFyZW50Tm9kZSgpOwotICAg
ICAgICAgICAgbV9zdGFydC5vZmZzZXQgPSBtX2VuZC5vZmZzZXQgPSBwYXJ0aWFsRW5kLT5ub2Rl
SW5kZXgoKTsKLSAgICAgICAgfQotICAgIH0KICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgp
OwogfQogCi0KIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUmFuZ2U6OmV4dHJhY3RDb250
ZW50cyhFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIW1fc3RhcnQuY29udGFpbmVyKSB7
Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLQotICAgIGVjID0gMDsKICAgICBjaGVja0RlbGV0ZUV4dHJhY3QoZWMpOwogICAgIGlmIChl
YykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gcHJvY2Vzc0NvbnRlbnRzKEVYVFJB
Q1RfQ09OVEVOVFMsZWMpOworICAgIHJldHVybiBwcm9jZXNzQ29udGVudHMoRVhUUkFDVF9DT05U
RU5UUywgZWMpOwogfQogCiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFJhbmdlOjpjbG9u
ZUNvbnRlbnRzKEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtOTU3LDcgKzkzMyw3IEBAIFBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gUmFuZ2U6OmNsb24KICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogCi0gICAgcmV0dXJuIHByb2Nlc3NDb250ZW50cyhDTE9ORV9DT05URU5UUyxlYyk7CisgICAg
cmV0dXJuIHByb2Nlc3NDb250ZW50cyhDTE9ORV9DT05URU5UUywgZWMpOwogfQogCiB2b2lkIFJh
bmdlOjppbnNlcnROb2RlKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Tm9kZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCkBAIC0xMDM2LDcgKzEwMTIsNyBAQCB2b2lkIFJhbmdlOjppbnNlcnROb2RlKFBhc3NSZWZQ
dHI8Tm9kZT4gCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBlbmRPZmZz
ZXREZWx0YSA9IDA7CisgICAgaW50IGVuZE9mZnNldERlbHRhID0gMDsKICAgICBpZiAobV9zdGFy
dC5jb250YWluZXItPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFIHx8CiAgICAgICAgIG1f
c3RhcnQuY29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSkg
ewogICAgICAgICBSZWZQdHI8VGV4dD4gbmV3VGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihtX3N0
YXJ0LmNvbnRhaW5lci5nZXQoKSktPnNwbGl0VGV4dChtX3N0YXJ0Lm9mZnNldCwgZWMpOwpAQCAt
MTA3MCw4ICsxMDQ2LDggQEAgU3RyaW5nIFJhbmdlOjp0b1N0cmluZyhFeGNlcHRpb25Db2RlJiBl
YwogCiAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CiAKLSAgICBOb2RlKiBwYXN0RW5kID0gcGFz
dExhc3ROb2RlKCk7Ci0gICAgZm9yIChOb2RlKiBuID0gZmlyc3ROb2RlKCk7IG4gIT0gcGFzdEVu
ZDsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIE5vZGUqIHBhc3RMYXN0ID0gcGFz
dExhc3ROb2RlKCk7CisgICAgZm9yIChOb2RlKiBuID0gZmlyc3ROb2RlKCk7IG4gIT0gcGFzdExh
c3Q7IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKICAgICAgICAgaWYgKG4tPm5vZGVUeXBl
KCkgPT0gTm9kZTo6VEVYVF9OT0RFIHx8IG4tPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VD
VElPTl9OT0RFKSB7CiAgICAgICAgICAgICBTdHJpbmcgZGF0YSA9IHN0YXRpY19jYXN0PENoYXJh
Y3RlckRhdGEqPihuKS0+ZGF0YSgpOwogICAgICAgICAgICAgaW50IGxlbmd0aCA9IGRhdGEubGVu
Z3RoKCk7CkBAIC0xMTMxLDYgKzExMDcsOCBAQCB2b2lkIFJhbmdlOjpkZXRhY2goRXhjZXB0aW9u
Q29kZSYgZWMpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBtX293bmVyRG9jdW1lbnQt
PmRldGFjaFJhbmdlKHRoaXMpOworCiAgICAgbV9zdGFydC5jbGVhcigpOwogICAgIG1fZW5kLmNs
ZWFyKCk7CiB9CkBAIC0xNTMzLDExICsxNTExLDE3IEBAIHZvaWQgUmFuZ2U6OnNldFN0YXJ0QmVm
b3JlKE5vZGUqIHJlZk5vZGUKIAogdm9pZCBSYW5nZTo6Y2hlY2tEZWxldGVFeHRyYWN0KEV4Y2Vw
dGlvbkNvZGUmIGVjKQogeworICAgIGlmICghbV9zdGFydC5jb250YWluZXIpIHsKKyAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVj
ID0gMDsKICAgICBpZiAoIWNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKGVjKSB8fCBlYykKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKLSAgICBOb2RlKiBwYXN0RW5kID0gcGFzdExhc3ROb2RlKCk7
Ci0gICAgZm9yIChOb2RlKiBuID0gZmlyc3ROb2RlKCk7IG4gIT0gcGFzdEVuZDsgbiA9IG4tPnRy
YXZlcnNlTmV4dE5vZGUoKSkgeworICAgIE5vZGUqIHBhc3RMYXN0ID0gcGFzdExhc3ROb2RlKCk7
CisgICAgZm9yIChOb2RlKiBuID0gZmlyc3ROb2RlKCk7IG4gIT0gcGFzdExhc3Q7IG4gPSBuLT50
cmF2ZXJzZU5leHROb2RlKCkpIHsKICAgICAgICAgaWYgKG4tPmlzUmVhZE9ubHlOb2RlKCkpIHsK
ICAgICAgICAgICAgIGVjID0gTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMTcxNSw0ICsxNjk5LDEyOCBAQCBpbnQgUmFuZ2U6Om1heEVuZE9mZnNl
dCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZW5kLmNvbnRhaW5lci0+bWF4Q2hhcmFjdGVyT2Zmc2V0
KCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmRwb2ludE5vZGVDaGlsZHJlbkNoYW5nZWQo
UG9zaXRpb24mIGVuZHBvaW50LAorICAgIE5vZGVXaXRoSW5kZXhBZnRlciYgYmVmb3JlQ2hhbmdl
LCBOb2RlV2l0aEluZGV4QmVmb3JlJiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkK
K3sKKyAgICBpZiAoZW5kcG9pbnQuY29udGFpbmVyICE9IGFmdGVyQ2hhbmdlLnBhcmVudCgpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKGJlZm9yZUNoYW5nZS5pbmRleEFmdGVyKCkgPj0gZW5k
cG9pbnQub2Zmc2V0KQorICAgICAgICByZXR1cm47CisgICAgaWYgKGNoaWxkQ291bnREZWx0YSA8
IDAgJiYgYWZ0ZXJDaGFuZ2UuaW5kZXhCZWZvcmUoKSA+PSBlbmRwb2ludC5vZmZzZXQpCisgICAg
ICAgIGVuZHBvaW50Lm9mZnNldCA9IGFmdGVyQ2hhbmdlLmluZGV4QmVmb3JlKCk7CisgICAgZWxz
ZQorICAgICAgICBlbmRwb2ludC5vZmZzZXQgKz0gY2hpbGRDb3VudERlbHRhOworfQorCit2b2lk
IFJhbmdlOjpub2RlQ2hpbGRyZW5DaGFuZ2VkKE5vZGVXaXRoSW5kZXhBZnRlciYgYmVmb3JlQ2hh
bmdlLCBOb2RlV2l0aEluZGV4QmVmb3JlJiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0
YSkKK3sKKyAgICBBU1NFUlQoYWZ0ZXJDaGFuZ2UucGFyZW50KCkpOworICAgIEFTU0VSVChhZnRl
ckNoYW5nZS5wYXJlbnQoKS0+ZG9jdW1lbnQoKSA9PSBtX293bmVyRG9jdW1lbnQpOworICAgIEFT
U0VSVChjaGlsZENvdW50RGVsdGEpOworICAgIGVuZHBvaW50Tm9kZUNoaWxkcmVuQ2hhbmdlZCht
X3N0YXJ0LCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEpOworICAg
IGVuZHBvaW50Tm9kZUNoaWxkcmVuQ2hhbmdlZChtX2VuZCwgYmVmb3JlQ2hhbmdlLCBhZnRlckNo
YW5nZSwgY2hpbGRDb3VudERlbHRhKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVuZHBvaW50
Tm9kZVdpbGxCZVJlbW92ZWQoUG9zaXRpb24mIGVuZHBvaW50LCBOb2RlV2l0aEluZGV4JiBub2Rl
VG9CZVJlbW92ZWQpCit7CisgICAgZm9yIChOb2RlKiBuID0gZW5kcG9pbnQuY29udGFpbmVyLmdl
dCgpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlmIChuID09IG5vZGVUb0Jl
UmVtb3ZlZC5ub2RlKCkpIHsKKyAgICAgICAgICAgIGVuZHBvaW50LmNvbnRhaW5lciA9IG5vZGVU
b0JlUmVtb3ZlZC5ub2RlKCktPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIGVuZHBvaW50Lm9m
ZnNldCA9IG5vZGVUb0JlUmVtb3ZlZC5pbmRleCgpOworICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIFJhbmdlOjpub2RlV2lsbEJlUmVtb3ZlZChOb2RlV2l0aEluZGV4JiBub2RlVG9CZVJlbW92
ZWQpCit7CisgICAgQVNTRVJUKG5vZGVUb0JlUmVtb3ZlZC5ub2RlKCkpOworICAgIEFTU0VSVChu
b2RlVG9CZVJlbW92ZWQubm9kZSgpLT5kb2N1bWVudCgpID09IG1fb3duZXJEb2N1bWVudCk7Cisg
ICAgQVNTRVJUKG5vZGVUb0JlUmVtb3ZlZC5ub2RlKCkgIT0gbV9vd25lckRvY3VtZW50KTsKKyAg
ICBBU1NFUlQobm9kZVRvQmVSZW1vdmVkLm5vZGUoKS0+cGFyZW50Tm9kZSgpKTsKKyAgICBlbmRw
b2ludE5vZGVXaWxsQmVSZW1vdmVkKG1fc3RhcnQsIG5vZGVUb0JlUmVtb3ZlZCk7CisgICAgZW5k
cG9pbnROb2RlV2lsbEJlUmVtb3ZlZChtX2VuZCwgbm9kZVRvQmVSZW1vdmVkKTsKK30KKworc3Rh
dGljIGlubGluZSB2b2lkIGVuZHBvaW50VGV4dEluc2VydGVkKFBvc2l0aW9uJiBlbmRwb2ludCwg
Tm9kZSogdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYg
KGVuZHBvaW50LmNvbnRhaW5lciAhPSB0ZXh0KQorICAgICAgICByZXR1cm47CisgICAgaWYgKG9m
ZnNldCA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kcG9pbnQub2Zmc2V0KSkKKyAgICAgICAg
cmV0dXJuOworICAgIGVuZHBvaW50Lm9mZnNldCArPSBsZW5ndGg7Cit9CisKK3ZvaWQgUmFuZ2U6
OnRleHRJbnNlcnRlZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKK3sKKyAgICBBU1NFUlQodGV4dCk7CisgICAgQVNTRVJUKHRleHQtPmRvY3VtZW50KCkgPT0g
bV9vd25lckRvY3VtZW50KTsKKyAgICBlbmRwb2ludFRleHRJbnNlcnRlZChtX3N0YXJ0LCB0ZXh0
LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgZW5kcG9pbnRUZXh0SW5zZXJ0ZWQobV9lbmQsIHRleHQs
IG9mZnNldCwgbGVuZ3RoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVuZHBvaW50VGV4dFJl
bW92ZWQoUG9zaXRpb24mIGVuZHBvaW50LCBOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAoZW5kcG9pbnQuY29udGFpbmVyICE9IHRleHQpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAob2Zmc2V0ID49IHN0YXRpY19jYXN0PHVuc2lnbmVkPihl
bmRwb2ludC5vZmZzZXQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG9mZnNldCArIGxlbmd0
aCA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kcG9pbnQub2Zmc2V0KSkKKyAgICAgICAgZW5k
cG9pbnQub2Zmc2V0ID0gb2Zmc2V0OworICAgIGVsc2UKKyAgICAgICAgZW5kcG9pbnQub2Zmc2V0
IC09IGxlbmd0aDsKK30KKwordm9pZCBSYW5nZTo6dGV4dFJlbW92ZWQoTm9kZSogdGV4dCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQVNTRVJUKHRleHQpOworICAg
IEFTU0VSVCh0ZXh0LT5kb2N1bWVudCgpID09IG1fb3duZXJEb2N1bWVudCk7CisgICAgZW5kcG9p
bnRUZXh0UmVtb3ZlZChtX3N0YXJ0LCB0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgZW5kcG9p
bnRUZXh0UmVtb3ZlZChtX2VuZCwgdGV4dCwgb2Zmc2V0LCBsZW5ndGgpOworfQorCitzdGF0aWMg
aW5saW5lIHZvaWQgZW5kcG9pbnRUZXh0Tm9kZXNNZXJnZWQoUG9zaXRpb24mIGVuZHBvaW50LCBO
b2RlV2l0aEluZGV4JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpCit7CisgICAgaWYgKGVuZHBv
aW50LmNvbnRhaW5lciA9PSBvbGROb2RlLm5vZGUoKSkgeworICAgICAgICBlbmRwb2ludC5jb250
YWluZXIgPSBvbGROb2RlLm5vZGUoKS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgIGVuZHBv
aW50Lm9mZnNldCArPSBvZmZzZXQ7CisgICAgfSBlbHNlIGlmIChlbmRwb2ludC5jb250YWluZXIg
PT0gb2xkTm9kZS5ub2RlKCktPnBhcmVudE5vZGUoKSAmJiBlbmRwb2ludC5vZmZzZXQgPT0gb2xk
Tm9kZS5pbmRleCgpKSB7CisgICAgICAgIGVuZHBvaW50LmNvbnRhaW5lciA9IG9sZE5vZGUubm9k
ZSgpLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgZW5kcG9pbnQub2Zmc2V0ID0gb2Zmc2V0
OworICAgIH0KK30KKwordm9pZCBSYW5nZTo6dGV4dE5vZGVzTWVyZ2VkKE5vZGVXaXRoSW5kZXgm
IG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICBBU1NFUlQob2xkTm9kZS5ub2RlKCkp
OworICAgIEFTU0VSVChvbGROb2RlLm5vZGUoKS0+ZG9jdW1lbnQoKSA9PSBtX293bmVyRG9jdW1l
bnQpOworICAgIEFTU0VSVChvbGROb2RlLm5vZGUoKS0+cGFyZW50Tm9kZSgpKTsKKyAgICBBU1NF
UlQob2xkTm9kZS5ub2RlKCktPmlzVGV4dE5vZGUoKSk7CisgICAgQVNTRVJUKG9sZE5vZGUubm9k
ZSgpLT5wcmV2aW91c1NpYmxpbmcoKSk7CisgICAgQVNTRVJUKG9sZE5vZGUubm9kZSgpLT5wcmV2
aW91c1NpYmxpbmcoKS0+aXNUZXh0Tm9kZSgpKTsKKyAgICBlbmRwb2ludFRleHROb2Rlc01lcmdl
ZChtX3N0YXJ0LCBvbGROb2RlLCBvZmZzZXQpOworICAgIGVuZHBvaW50VGV4dE5vZGVzTWVyZ2Vk
KG1fZW5kLCBvbGROb2RlLCBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZW5kcG9p
bnRUZXh0Tm9kZXNTcGxpdChQb3NpdGlvbiYgZW5kcG9pbnQsIFRleHQqIG9sZE5vZGUpCit7Cisg
ICAgaWYgKGVuZHBvaW50LmNvbnRhaW5lciAhPSBvbGROb2RlKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKGVuZHBvaW50Lm9mZnNldCA8PSBzdGF0aWNfY2FzdDxpbnQ+KG9sZE5vZGUtPmxlbmd0
aCgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGVuZHBvaW50LmNvbnRhaW5lciA9IG9sZE5vZGUt
Pm5leHRTaWJsaW5nKCk7CisgICAgZW5kcG9pbnQub2Zmc2V0IC09IG9sZE5vZGUtPmxlbmd0aCgp
OworfQorCit2b2lkIFJhbmdlOjp0ZXh0Tm9kZVNwbGl0KFRleHQqIG9sZE5vZGUpCit7CisgICAg
QVNTRVJUKG9sZE5vZGUpOworICAgIEFTU0VSVChvbGROb2RlLT5kb2N1bWVudCgpID09IG1fb3du
ZXJEb2N1bWVudCk7CisgICAgQVNTRVJUKG9sZE5vZGUtPnBhcmVudE5vZGUoKSk7CisgICAgQVNT
RVJUKG9sZE5vZGUtPmlzVGV4dE5vZGUoKSk7CisgICAgQVNTRVJUKG9sZE5vZGUtPm5leHRTaWJs
aW5nKCkpOworICAgIEFTU0VSVChvbGROb2RlLT5uZXh0U2libGluZygpLT5pc1RleHROb2RlKCkp
OworICAgIGVuZHBvaW50VGV4dE5vZGVzU3BsaXQobV9zdGFydCwgb2xkTm9kZSk7CisgICAgZW5k
cG9pbnRUZXh0Tm9kZXNTcGxpdChtX2VuZCwgb2xkTm9kZSk7Cit9CisKIH0KSW5kZXg6IFdlYkNv
cmUvZG9tL1JhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUmFuZ2UuaAkocmV2aXNp
b24gMzEwNTMpCisrKyBXZWJDb3JlL2RvbS9SYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwx
MCArMzUsMTIgQEAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgRG9jdW1lbnRG
cmFnbWVudDsKIGNsYXNzIERvY3VtZW50OworY2xhc3MgTm9kZVdpdGhJbmRleDsKK2NsYXNzIE5v
ZGVXaXRoSW5kZXhBZnRlcjsKK2NsYXNzIE5vZGVXaXRoSW5kZXhCZWZvcmU7CiBjbGFzcyBJbnRS
ZWN0OwotY2xhc3MgTm9kZTsKLWNsYXNzIFBvc2l0aW9uOwogY2xhc3MgU3RyaW5nOworY2xhc3Mg
VGV4dDsKIAogY2xhc3MgUmFuZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxSYW5nZT4gewogcHVibGlj
OgpAQCAtMTA3LDYgKzEwOSwxNCBAQCBwdWJsaWM6CiAgICAgSW50UmVjdCBib3VuZGluZ0JveCgp
OwogICAgIHZvaWQgYWRkTGluZUJveFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGJvb2wgdXNlU2Vs
ZWN0aW9uSGVpZ2h0ID0gZmFsc2UpOwogCisgICAgdm9pZCBub2RlQ2hpbGRyZW5DaGFuZ2VkKE5v
ZGVXaXRoSW5kZXhBZnRlciYgYmVmb3JlQ2hhbmdlLCBOb2RlV2l0aEluZGV4QmVmb3JlJiBhZnRl
ckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSk7CisgICAgdm9pZCBub2RlV2lsbEJlUmVtb3Zl
ZChOb2RlV2l0aEluZGV4Jik7CisKKyAgICB2b2lkIHRleHRJbnNlcnRlZChOb2RlKiwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgdGV4dFJlbW92ZWQoTm9kZSos
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIHRleHROb2Rlc01l
cmdlZChOb2RlV2l0aEluZGV4JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpOworICAgIHZvaWQg
dGV4dE5vZGVTcGxpdChUZXh0KiBvbGROb2RlKTsKKwogI2lmbmRlZiBOREVCVUcKICAgICB2b2lk
IGZvcm1hdEZvckRlYnVnZ2VyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsK
ICNlbmRpZgpJbmRleDogV2ViQ29yZS9kb20vUmFuZ2VEb2N1bWVudE11dGF0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vUmFuZ2VEb2N1bWVudE11dGF0aW9uLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL2RvbS9SYW5nZURvY3VtZW50TXV0YXRpb24uaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFJhbmdlRG9jdW1lbnRNdXRhdGlvbl9oCisjZGVmaW5lIFJhbmdlRG9jdW1l
bnRNdXRhdGlvbl9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29udGFpbmVyTm9k
ZTsKK2NsYXNzIE5vZGU7CisKK2NsYXNzIE5vZGVXaXRoSW5kZXggeworcHVibGljOgorICAgIE5v
ZGVXaXRoSW5kZXgoTm9kZSogbm9kZSkgOiBtX25vZGUobm9kZSksIG1faGF2ZUluZGV4KGZhbHNl
KSB7IH0KKyAgICBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CisgICAgaW50
IGluZGV4KCk7CisKK3ByaXZhdGU6CisgICAgTm9kZSogbV9ub2RlOworICAgIGJvb2wgbV9oYXZl
SW5kZXg7CisgICAgaW50IG1faW5kZXg7Cit9OworCitjbGFzcyBOb2RlV2l0aEluZGV4QmVmb3Jl
IHsKK3B1YmxpYzoKKyAgICBOb2RlV2l0aEluZGV4QmVmb3JlKENvbnRhaW5lck5vZGUqIHBhcmVu
dCwgTm9kZSogbm9kZSkgOiBtX3BhcmVudChwYXJlbnQpLCBtX25vZGUobm9kZSksIG1faGF2ZUlu
ZGV4KGZhbHNlKSB7IH0KKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnQoKSBjb25zdCB7IHJldHVy
biBtX3BhcmVudDsgfQorICAgIGludCBpbmRleEJlZm9yZSgpOworCitwcml2YXRlOgorICAgIENv
bnRhaW5lck5vZGUqIG1fcGFyZW50OworICAgIE5vZGUqIG1fbm9kZTsKKyAgICBib29sIG1faGF2
ZUluZGV4OworICAgIGludCBtX2luZGV4QmVmb3JlOworfTsKKworY2xhc3MgTm9kZVdpdGhJbmRl
eEFmdGVyIHsKK3B1YmxpYzoKKyAgICBOb2RlV2l0aEluZGV4QWZ0ZXIoTm9kZSogbm9kZSkgOiBt
X25vZGUobm9kZSksIG1faGF2ZUluZGV4KGZhbHNlKSB7IH0KKyAgICBpbnQgaW5kZXhBZnRlcigp
OworCitwcml2YXRlOgorICAgIE5vZGUqIG1fbm9kZTsKKyAgICBib29sIG1faGF2ZUluZGV4Owor
ICAgIGludCBtX2luZGV4QWZ0ZXI7Cit9OworCit9CisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdl
cyBvbjogV2ViQ29yZS9kb20vUmFuZ2VEb2N1bWVudE11dGF0aW9uLmgKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1l
OiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9kb20vVGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vVGV4dC5jcHAJKHJldmlzaW9uIDMxMDUzKQorKysg
V2ViQ29yZS9kb20vVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE1ICszNiwxMyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIERPTSBTZWN0aW9uIDEuMS4xCiAKLS8vICMjIyBhbGxv
dyBoYXZpbmcgY2hpbGRyZW4gaW4gdGV4dCBub2RlcyBmb3IgZW50aXRpZXMsIGNvbW1lbnRzIGV0
Yy4KLQotVGV4dDo6VGV4dChEb2N1bWVudCAqZG9jLCBjb25zdCBTdHJpbmcgJl90ZXh0KQotICAg
IDogQ2hhcmFjdGVyRGF0YShkb2MsIF90ZXh0KQorVGV4dDo6VGV4dChEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IFN0cmluZyYgdGV4dCkKKyAgICA6IENoYXJhY3RlckRhdGEoZG9jdW1lbnQsIHRl
eHQpCiB7CiB9CiAKLVRleHQ6OlRleHQoRG9jdW1lbnQgKmRvYykKLSAgICA6IENoYXJhY3RlckRh
dGEoZG9jKQorVGV4dDo6VGV4dChEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBDaGFyYWN0ZXJE
YXRhKGRvY3VtZW50KQogewogfQogCkBAIC01Niw4ICs1NCw2IEBAIFBhc3NSZWZQdHI8VGV4dD4g
VGV4dDo6c3BsaXRUZXh0KHVuc2lnbmUKIHsKICAgICBlYyA9IDA7CiAKLSAgICAvLyBGSVhNRTog
VGhpcyBkb2VzIG5vdCBjb3B5IG1hcmtlcnMKLSAgICAKICAgICAvLyBJTkRFWF9TSVpFX0VSUjog
UmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgb2Zmc2V0IGlzIG5lZ2F0aXZlIG9yIGdyZWF0ZXIgdGhh
bgogICAgIC8vIHRoZSBudW1iZXIgb2YgMTYtYml0IHVuaXRzIGluIGRhdGEuCiAgICAgaWYgKG9m
ZnNldCA+IG1fZGF0YS0+bGVuZ3RoKCkpIHsKQEAgLTgyLDYgKzc4LDkgQEAgUGFzc1JlZlB0cjxU
ZXh0PiBUZXh0OjpzcGxpdFRleHQodW5zaWduZQogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJu
IDA7CiAKKyAgICBpZiAocGFyZW50Tm9kZSgpKQorICAgICAgICBkb2N1bWVudCgpLT50ZXh0Tm9k
ZVNwbGl0KHRoaXMpOworCiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHN0YXRpY19jYXN0
PFJlbmRlclRleHQqPihyZW5kZXJlcigpKS0+c2V0VGV4dChtX2RhdGEpOwogCkBAIC0yNTIsMTEg
KzI1MSwxMiBAQCB2b2lkIFRleHQ6OmF0dGFjaCgpCiAgICAgQ2hhcmFjdGVyRGF0YTo6YXR0YWNo
KCk7CiB9CiAKLXZvaWQgVGV4dDo6cmVjYWxjU3R5bGUoIFN0eWxlQ2hhbmdlIGNoYW5nZSApCit2
b2lkIFRleHQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKIHsKLSAgICBpZiAoY2hh
bmdlICE9IE5vQ2hhbmdlICYmIHBhcmVudE5vZGUoKSkKKyAgICBpZiAoY2hhbmdlICE9IE5vQ2hh
bmdlICYmIHBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAocmVuZGVyZXIoKSkKICAgICAgICAg
ICAgIHJlbmRlcmVyKCktPnNldFN0eWxlKHBhcmVudE5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUo
KSk7CisgICAgfQogICAgIGlmIChjaGFuZ2VkKCkgJiYgcmVuZGVyZXIoKSAmJiByZW5kZXJlcigp
LT5pc1RleHQoKSkKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHJlbmRlcmVyKCkp
LT5zZXRUZXh0KG1fZGF0YSk7CiAgICAgc2V0Q2hhbmdlZChOb1N0eWxlQ2hhbmdlKTsKQEAgLTI3
NSw3ICsyNzUsNiBAQCBQYXNzUmVmUHRyPFRleHQ+IFRleHQ6OmNyZWF0ZU5ldyhQYXNzUmVmCiAK
IFN0cmluZyBUZXh0Ojp0b1N0cmluZygpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IHN1YnN0aXR1
dGUgZW50aXR5IHJlZmVyZW5jZXMgYXMgbmVlZGVkIQogICAgIHJldHVybiBub2RlVmFsdWUoKTsK
IH0KIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAz
MTA1MykKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY1Niw4ICs2NTYsOCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlu
bGluZVN0eWxlCiAgICAgICAgIGlmIChzdGFydCA9PSBlbmQgJiYgc3RhcnQubm9kZSgpLT5oYXNU
YWdOYW1lKGJyVGFnKSkKICAgICAgICAgICAgIGVuZCA9IHBvc2l0aW9uQWZ0ZXJOb2RlKHN0YXJ0
Lm5vZGUoKSk7CiAgICAgICAgIC8vIEFkZCB0aGUgc3R5bGUgdG8gc2VsZWN0ZWQgaW5saW5lIHJ1
bnMuCi0gICAgICAgIE5vZGUqIHBhc3RFbmQgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHJh
bmdlQ29tcGxpYW50RXF1aXZhbGVudChzdGFydCksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChl
bmQpKS0+cGFzdExhc3ROb2RlKCk7Ci0gICAgICAgIGZvciAoTm9kZSogbmV4dDsgbm9kZSAmJiBu
b2RlICE9IHBhc3RFbmQ7IG5vZGUgPSBuZXh0KSB7CisgICAgICAgIE5vZGUqIHBhc3RMYXN0ID0g
UmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoc3RhcnQp
LCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoZW5kKSktPnBhc3RMYXN0Tm9kZSgpOworICAgICAg
ICBmb3IgKE5vZGUqIG5leHQ7IG5vZGUgJiYgbm9kZSAhPSBwYXN0TGFzdDsgbm9kZSA9IG5leHQp
IHsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dE5v
ZGUoKTsKICAgICAgICAgICAgIApAQCAtNjkxLDcgKzY5MSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNv
bW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICAgICAgICAgIE5vZGUqIHJ1blN0YXJ0ID0gbm9k
ZTsKICAgICAgICAgICAgIC8vIEZpbmQgdGhlIGVuZCBvZiB0aGUgcnVuLgogICAgICAgICAgICAg
Tm9kZSogc2libGluZyA9IG5vZGUtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICB3aGlsZSAo
c2libGluZyAmJiBzaWJsaW5nICE9IHBhc3RFbmQgJiYgKCFzaWJsaW5nLT5pc0VsZW1lbnROb2Rl
KCkgfHwgc2libGluZy0+aGFzVGFnTmFtZShiclRhZykpICYmICFpc0Jsb2NrKHNpYmxpbmcpKSB7
CisgICAgICAgICAgICB3aGlsZSAoc2libGluZyAmJiBzaWJsaW5nICE9IHBhc3RMYXN0ICYmICgh
c2libGluZy0+aXNFbGVtZW50Tm9kZSgpIHx8IHNpYmxpbmctPmhhc1RhZ05hbWUoYnJUYWcpKSAm
JiAhaXNCbG9jayhzaWJsaW5nKSkgewogICAgICAgICAgICAgICAgIG5vZGUgPSBzaWJsaW5nOwog
ICAgICAgICAgICAgICAgIHNpYmxpbmcgPSBub2RlLT5uZXh0U2libGluZygpOwogICAgICAgICAg
ICAgfQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9kby13ZWJjb3JlLXJlbmFtZQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL2RvLXdlYmNvcmUtcmVuYW1lCShyZXZpc2lvbiAz
MTA1MykKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvZG8td2ViY29yZS1yZW5hbWUJKHdvcmtpbmcg
Y29weSkKQEAgLTY4LDYgKzY4LDkgQEAgc3ViIHdhbnRlZAogfQogCiBteSAlcmVuYW1lcyA9ICgK
KyAgICAiREVMRVRFX0NPTlRFTlRTIiA9PiAiRGVsZXRlIiwKKyAgICAiRVhUUkFDVF9DT05URU5U
UyIgPT4gIkV4dHJhY3QiLAorICAgICJDTE9ORV9DT05URU5UUyIgPT4gIkNsb25lIiwKICAgICAi
WFNMVFByb2Nlc3NvclByb3RvdHlwZVRhYmxlIiA9PiAiSlNYU0xUUHJvY2Vzc29yUHJvdG90eXBl
VGFibGUiLAogICAgICJBY3RpdmF0aW9uSW1wIiA9PiAiQWN0aXZhdGlvbiIsCiAgICAgIkFjdGl2
YXRpb25JbXBEYXRhIiA9PiAiQWN0aXZhdGlvbkRhdGEiLApJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMzEw
NTMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
MyBAQAorMjAwOC0wMy0xMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSB0ZXN0IGNoYW5nZXMg
Zm9yIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTk3CisgICAgICAg
ICAgUmFuZ2VzIGFyZSBub3QgZml4ZWQgYWZ0ZXIgbXV0YXRpb24gKGFmZmVjdHMgQWNpZDMgdGVz
dCAxMykKKworICAgICAgICAqIGZhc3QvZG9tL1JhbmdlL211dGF0aW9uLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogZmFzdC9kb20vUmFuZ2UvbXV0YXRpb24uaHRtbDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9kb20vUmFuZ2UvcmVzb3VyY2VzL211dGF0aW9uLmpzOiBBZGRlZC4KKwor
ICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvNDkyMDc0Mi0yLWV4cGVjdGVkLnR4dDogVXBk
YXRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kLzQ5MjA3NDItMi5odG1sOiBVcGRh
dGVkIHRoaXMgdGVzdC4gSXQgd2FzIHRlc3RpbmcgZm9yIGEgY3Jhc2ggaW4gYQorICAgICAgICBj
YXNlIHRoYXQncyBubyBsb25nZXIgcG9zc2libGUgLS0geW91IGNhbid0IG1ha2UgYSByYW5nZSB3
aGVyZSBvbmUgZW5kcG9pbnQgaXMgaW4gdGhlCisgICAgICAgIGRvY3VtZW50IGFuZCB0aGUgb3Ro
ZXIgaXMgbm90LgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL2VkaXRpbmcvZXhlY0NvbW1hbmQv
NDkyMDQ4OC1leHBlY3RlZC50eHQ6IFJlbW92ZWQgV1JPTkdfRE9DVU1FTlRfRVJSLgorICAgICAg
ICBUaGUgZmFjdCB0aGF0IGEgdGVzdCB3YXMgZ2V0dGluZyB0aGlzIGV4Y2VwdGlvbiB3YXMgYSBi
dWcsIHNpbWlsYXIgdG8gdGhlIGNhc2UgYWJvdmUuCisgICAgICAgICogcGxhdGZvcm0vcXQvZWRp
dGluZy9leGVjQ29tbWFuZC80OTIwNDg4LWV4cGVjdGVkLnR4dDogRGl0dG8uCisKIDIwMDgtMDMt
MTMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IE1pdHouCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kLzQ5MjA3NDIt
Mi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29t
bWFuZC80OTIwNzQyLTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAzMTA1MykKKysrIExheW91dFRl
c3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvNDkyMDc0Mi0yLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMSw0ICsxLDYgQEAKLVRoaXMgdGVzdHMgZm9yIGEgY3Jhc2ggd2hlbiBwZXJmb3Jt
aW5nIFJhbmdlOjpleHRyYWN0Q29udGVudHMgb24gYSByYW5nZSB0aGF0IGhhcyBoYWQgdGhlIHN0
YXJ0IG9yIGVuZCByZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50LiBXaGVuIGV4dHJhY3RDb250ZW50
cyBpcyBjYWxsZWQgb24gdGhpcyBraW5kIG9mIGludmFsaWQgcmFuZ2UsIGFuIGV4Y2VwdGlvbiBz
aG91bGQgYmUgdGhyb3duLgorVGhpcyB0ZXN0ZWQgZm9yIGEgY3Jhc2ggd2hlbiBwZXJmb3JtaW5n
IFJhbmdlOjpleHRyYWN0Q29udGVudHMgb24gYSByYW5nZSB0aGF0IGhhcyBoYWQgdGhlIHN0YXJ0
IG9yIGVuZCByZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50LgogCi1saW5rCitJdCdzIG5vdyBpbXBv
c3NpYmxlIHRvIGNyZWF0ZSBhIHJhbmdlIGxpa2UgdGhpcywgYnV0IGF0IG9uZSBwb2ludCB3aXRo
IGFuIGVhcmxpZXIgdmVyc2lvbiBvZiBXZWJLaXQsIGl0IHdhcyBwb3NzaWJsZS4KIAorbGluawor
Tm8gY3Jhc2ggbWVhbnMgc3VjY2VzcyEKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0Nv
bW1hbmQvNDkyMDc0Mi0yLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9l
eGVjQ29tbWFuZC80OTIwNzQyLTIuaHRtbAkocmV2aXNpb24gMzEwNTMpCisrKyBMYXlvdXRUZXN0
cy9lZGl0aW5nL2V4ZWNDb21tYW5kLzQ5MjA3NDItMi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDQgKzEsNSBAQAotPHA+VGhpcyB0ZXN0cyBmb3IgYSBjcmFzaCB3aGVuIHBlcmZvcm1pbmcgUmFu
Z2U6OmV4dHJhY3RDb250ZW50cyBvbiBhIHJhbmdlIHRoYXQgaGFzIGhhZCB0aGUgc3RhcnQgb3Ig
ZW5kIHJlbW92ZWQgZnJvbSB0aGUgZG9jdW1lbnQuICBXaGVuIGV4dHJhY3RDb250ZW50cyBpcyBj
YWxsZWQgb24gdGhpcyBraW5kIG9mIGludmFsaWQgcmFuZ2UsIGFuIGV4Y2VwdGlvbiBzaG91bGQg
YmUgdGhyb3duLjwvcD4KKzxwPlRoaXMgdGVzdGVkIGZvciBhIGNyYXNoIHdoZW4gcGVyZm9ybWlu
ZyBSYW5nZTo6ZXh0cmFjdENvbnRlbnRzIG9uIGEgcmFuZ2UgdGhhdCBoYXMgaGFkIHRoZSBzdGFy
dCBvciBlbmQgcmVtb3ZlZCBmcm9tIHRoZSBkb2N1bWVudC48L3A+Cis8cD5JdCdzIG5vdyBpbXBv
c3NpYmxlIHRvIGNyZWF0ZSBhIHJhbmdlIGxpa2UgdGhpcywgYnV0IGF0IG9uZSBwb2ludCB3aXRo
IGFuIGVhcmxpZXIgdmVyc2lvbiBvZiBXZWJLaXQsIGl0IHdhcyBwb3NzaWJsZS48L3A+CiA8ZGl2
IGlkPSJkaXYiIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSI+dGV4dCA8YSBocmVmPSJodHRwOi8vd3d3
LmFwcGxlLmNvbS8iPmxpbms8L2E+PC9kaXY+CiA8dWwgaWQ9ImNvbnNvbGUiPjwvdWw+CiAKQEAg
LTE5LDE1ICsyMCw3IEBAIHZhciBsaW5rID0gZGl2Lmxhc3RDaGlsZDsKIHZhciByID0gZG9jdW1l
bnQuY3JlYXRlUmFuZ2UoKTsKIHIuc2V0U3RhcnQodGV4dCwgMCk7CiByLnNldEVuZChsaW5rLCAw
KTsKLQogdGV4dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRleHQpOwotCi10cnkgewotICAgIHIu
ZXh0cmFjdENvbnRlbnRzKCk7Ci0gICAgbG9nKCJGYWlsdXJlLiAgRXhwZWN0ZWQgYW4gZXhjZXB0
aW9uIHRvIGJlIHRocm93bi4iKTsKLX0gY2F0Y2ggKGUpIHsKLSAgICB2YXIgZXhwZWN0ZWQgPSAi
RXJyb3I6IFdST05HX0RPQ1VNRU5UX0VSUjogRE9NIEV4Y2VwdGlvbiA0IjsKLSAgICBpZiAoZSAh
PSBleHBlY3RlZCkKLSAgICAgICAgbG9nKCJGYWlsdXJlLiBFeHBlY3RlZDogIiArIGV4cGVjdGVk
KTsKLX0KK3IuZXh0cmFjdENvbnRlbnRzKCk7Citsb2coIk5vIGNyYXNoIG1lYW5zIHN1Y2Nlc3Mh
Iik7CiA8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL211dGF0aW9u
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9t
dXRhdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9SYW5nZS9tdXRhdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzUg
QEAKK1BBU1MgZGVzY3JpcHRpb24ocmFuZ2UpIGlzICJ0ZXh0LDI0IC0+IHRleHQsMzI6IFkgYmxh
aCBpIgorUEFTUyBkZXNjcmlwdGlvbihyYW5nZSkgaXMgInRleHQsMTEgLT4gdGV4dCwzMjogaW5z
ZXJ0ZWQgdGV4dFkgYmxhaCBpIgorUEFTUyBkZXNjcmlwdGlvbihyYW5nZSkgaXMgInRleHQsMTEg
LT4gdGV4dCwzMjogWWluc2VydGVkIHRleHQgYmxhaCBpIgorUEFTUyBkZXNjcmlwdGlvbihyYW5n
ZSkgaXMgInRleHQsMTEgLT4gdGV4dCwzMjogWSBibGFoaW5zZXJ0ZWQgdGV4dCBpIgorUEFTUyBk
ZXNjcmlwdGlvbihyYW5nZSkgaXMgInRleHQsMTEgLT4gdGV4dCwzMjogWSBibGFoIGluc2VydGVk
IHRleHRpIgorUEFTUyBkZXNjcmlwdGlvbihyYW5nZSkgaXMgInRleHQsMTEgLT4gdGV4dCwxOTog
WSBibGFoIGkiCitQQVNTIGRlc2NyaXB0aW9uKHJhbmdlKSBpcyAidGV4dCw1IC0+IHRleHQsMTM6
ICBSYW5nZSBpIgorUEFTUyBkZXNjcmlwdGlvbihyYW5nZSkgaXMgInRleHQsNSAtPiB0ZXh0LDU6
ICIKK1BBU1MgZGVzY3JpcHRpb24ocmFuZ2UpIGlzICJ0ZXh0MSw1IC0+IHRleHQyLDQ6IGFuZ2Ui
CitQQVNTIGRlc2NyaXB0aW9uKHJhbmdlKSBpcyAidGV4dCw1IC0+IHRleHQsMTU6IGhlIFJhbmdl
IGkiCitQQVNTIHBhcmFncmFwaC5jaGlsZE5vZGVzLmxlbmd0aCBpcyAyCitQQVNTIHRleHQxLmxl
bmd0aCBpcyA1CitQQVNTIGRlc2NyaXB0aW9uKHJhbmdlKSBpcyAicGFyYWdyYXBoLDEgLT4gcGFy
YWdyYXBoLDE6ICIKK1BBU1MgcGFyYWdyYXBoLmNoaWxkTm9kZXMubGVuZ3RoIGlzIDEKK1BBU1Mg
dGV4dDEubGVuZ3RoIGlzIDcKK1BBU1MgZGVzY3JpcHRpb24ocmFuZ2UpIGlzICJ0ZXh0MSw1IC0+
IHRleHQxLDU6ICIKK1BBU1MgZGVzY3JpcHRpb24ocmFuZ2UpIGlzICJwYXJhZ3JhcGgsMiAtPiBw
YXJhZ3JhcGgsNDogYmMiCitQQVNTIGRlc2NyaXB0aW9uKHJhbmdlKSBpcyAicGFyYWdyYXBoLDEg
LT4gcGFyYWdyYXBoLDQ6IGViYyIKK1BBU1MgZGVzY3JpcHRpb24ocmFuZ2UpIGlzICJwYXJhZ3Jh
cGgsMSAtPiBwYXJhZ3JhcGgsNDogYmVjIgorUEFTUyBkZXNjcmlwdGlvbihyYW5nZSkgaXMgInBh
cmFncmFwaCwxIC0+IHBhcmFncmFwaCwzOiBiYyIKK1BBU1MgZGVzY3JpcHRpb24ocmFuZ2UpIGlz
ICJwYXJhZ3JhcGgsMSAtPiBwYXJhZ3JhcGgsMzogYmMiCitQQVNTIGRlc2NyaXB0aW9uKHJhbmdl
KSBpcyAicGFyYWdyYXBoLDEgLT4gZCwxOiBjZCIKK1BBU1MgZGVzY3JpcHRpb24ocmFuZ2UpIGlz
ICJwYXJhZ3JhcGgsMSAtPiBkLDA6IGMiCitQQVNTIGRlc2NyaXB0aW9uKHJhbmdlKSBpcyAiYiww
IC0+IHBhcmFncmFwaCwzOiBiYyIKK1BBU1MgZGVzY3JpcHRpb24ocmFuZ2UpIGlzICJiLDEgLT4g
cGFyYWdyYXBoLDM6IGMiCitQQVNTIGRlc2NyaXB0aW9uKHJhbmdlKSBpcyAiYSwxIC0+IGEsMzog
eGIiCitQQVNTIGRlc2NyaXB0aW9uKHJhbmdlKSBpcyAiYSwxIC0+IGIsMjogYmMiCitQQVNTIGRl
c2NyaXB0aW9uKHJhbmdlKSBpcyAiYSwxIC0+IGIsMTogYmMiCitQQVNTIGRlc2NyaXB0aW9uKHJh
bmdlKSBpcyAiYSwxIC0+IGEsMzogYmMiCitQQVNTIGRlc2NyaXB0aW9uKHJhbmdlKSBpcyAiYSwy
IC0+IHNlY3Rpb24sMTogY2RlIgorUEFTUyBkZXNjcmlwdGlvbihyYW5nZSkgaXMgInNlY3Rpb24s
MCAtPiBzZWN0aW9uLDA6ICIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9S
YW5nZS9tdXRhdGlvbi1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxl
CiAgICsgbmF0aXZlCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvbXV0YXRpb24u
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9tdXRhdGlvbi5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvbXV0YXRpb24u
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9tdXRhdGlvbi5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9SYW5nZS9tdXRhdGlvbi5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlw
ZQogICArIHRleHQvaHRtbApOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvcmVzb3VyY2VzL211dGF0aW9uLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3Jlc291cmNlcy9tdXRhdGlvbi5qcwko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3Jlc291cmNlcy9tdXRh
dGlvbi5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOTggQEAKK2Rlc2NyaXB0aW9uKAorIlRo
aXMgdGVzdCBjaGVja3MgbXV0YXRpb24gb2YgdGhlIERPTSBhbmQgaG93IGl0IGFmZmVjdHMgUmFu
Z2VzLiIKKyk7CisKK3ZhciBhOwordmFyIGI7Cit2YXIgYzsKK3ZhciBkOwordmFyIGU7Cit2YXIg
cGFyYWdyYXBoOwordmFyIHNlY3Rpb247Cit2YXIgdGV4dDsKK3ZhciB0ZXh0MTsKK3ZhciB0ZXh0
MjsKK3ZhciB0ZXh0MzsKKworZnVuY3Rpb24gbmFtZShub2RlKQoreworICAgIGlmIChub2RlID09
IGEpCisgICAgICAgIHJldHVybiAiYSI7CisgICAgaWYgKG5vZGUgPT0gYikKKyAgICAgICAgcmV0
dXJuICJiIjsKKyAgICBpZiAobm9kZSA9PSBjKQorICAgICAgICByZXR1cm4gImMiOworICAgIGlm
IChub2RlID09IGQpCisgICAgICAgIHJldHVybiAiZCI7CisgICAgaWYgKG5vZGUgPT0gZSkKKyAg
ICAgICAgcmV0dXJuICJlIjsKKyAgICBpZiAobm9kZSA9PSBwYXJhZ3JhcGgpCisgICAgICAgIHJl
dHVybiAicGFyYWdyYXBoIjsKKyAgICBpZiAobm9kZSA9PSBzZWN0aW9uKQorICAgICAgICByZXR1
cm4gInNlY3Rpb24iOworICAgIGlmIChub2RlID09IHRleHQpCisgICAgICAgIHJldHVybiAidGV4
dCI7CisgICAgaWYgKG5vZGUgPT0gdGV4dDEpCisgICAgICAgIHJldHVybiAidGV4dDEiOworICAg
IGlmIChub2RlID09IHRleHQyKQorICAgICAgICByZXR1cm4gInRleHQyIjsKKyAgICBpZiAobm9k
ZSA9PSB0ZXh0MykKKyAgICAgICAgcmV0dXJuICJ0ZXh0MyI7CisgICAgcmV0dXJuICI/Pz8iOwor
fQorCitmdW5jdGlvbiBkZXNjcmlwdGlvbihyYW5nZSkKK3sKKyAgICByZXR1cm4gbmFtZShyYW5n
ZS5zdGFydENvbnRhaW5lcikgKyAiLCIgKyByYW5nZS5zdGFydE9mZnNldCArICIgLT4gIiArIG5h
bWUocmFuZ2UuZW5kQ29udGFpbmVyKSArICIsIiArIHJhbmdlLmVuZE9mZnNldCArICI6ICIgKyBy
YW5nZS50b1N0cmluZygpOworfQorCitmdW5jdGlvbiBtYWtlUmFuZ2Uoc2MsIHNvLCBlYywgZW8p
Cit7CisgICAgdmFyIG5ld1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKKyAgICBuZXdS
YW5nZS5zZXRTdGFydChzYywgc28pOworICAgIG5ld1JhbmdlLnNldEVuZChlYywgZW8pOworICAg
IHJldHVybiBuZXdSYW5nZTsKK30KKworZnVuY3Rpb24gc2V0VXAxKCkKK3sKKyAgICBwYXJhZ3Jh
cGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7CisgICAgdGV4dCA9IGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKCJBYmNkIGVmZ2ggWFkgYmxhaCBpamtsIik7CisgICAgcGFyYWdyYXBoLmFw
cGVuZENoaWxkKHRleHQpOworICAgIHJhbmdlID0gbWFrZVJhbmdlKHRleHQsIDExLCB0ZXh0LCAx
OSk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRlc3RFbGVtZW50KG5hbWUpCit7CisgICAgdmFyIGVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJlbSIpOworICAgIHZhciB0ZXh0ID0gZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUobmFtZSk7CisgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0
KTsKKyAgICByZXR1cm4gZWxlbWVudDsKK30KKworZnVuY3Rpb24gc2V0VXAyKCkKK3sKKyAgICBw
YXJhZ3JhcGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7CisgICAgYSA9IGNyZWF0ZVRl
c3RFbGVtZW50KCJhIik7CisgICAgYiA9IGNyZWF0ZVRlc3RFbGVtZW50KCJiIik7CisgICAgYyA9
IGNyZWF0ZVRlc3RFbGVtZW50KCJjIik7CisgICAgZCA9IGNyZWF0ZVRlc3RFbGVtZW50KCJkIik7
CisgICAgZSA9IGNyZWF0ZVRlc3RFbGVtZW50KCJlIik7CisKKyAgICBwYXJhZ3JhcGguYXBwZW5k
Q2hpbGQoYSk7CisgICAgcGFyYWdyYXBoLmFwcGVuZENoaWxkKGIpOworICAgIHBhcmFncmFwaC5h
cHBlbmRDaGlsZChjKTsKKyAgICBwYXJhZ3JhcGguYXBwZW5kQ2hpbGQoZCk7CisgICAgcmFuZ2Ug
PSBtYWtlUmFuZ2UocGFyYWdyYXBoLCAxLCBwYXJhZ3JhcGgsIDMpOworfQorCitmdW5jdGlvbiBz
ZXRVcDMoKQoreworICAgIHBhcmFncmFwaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsK
KyAgICBhID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImF4Iik7CisgICAgYiA9IGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKCJieSIpOworCisgICAgcGFyYWdyYXBoLmFwcGVuZENoaWxkKGEpOwor
ICAgIHBhcmFncmFwaC5hcHBlbmRDaGlsZChiKTsKKworICAgIHJhbmdlID0gbWFrZVJhbmdlKGEs
IDEsIGIsIDEpOworfQorCitmdW5jdGlvbiBzZXRVcDQoKQoreworICAgIHBhcmFncmFwaCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsKKyAgICBhID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUoImFiY2QiKTsKKworICAgIHBhcmFncmFwaC5hcHBlbmRDaGlsZChhKTsKKworICAgIHJhbmdl
ID0gbWFrZVJhbmdlKGEsIDEsIGEsIDMpOworfQorCitmdW5jdGlvbiBzZXRVcDUoKQoreworICAg
IHNlY3Rpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICBwYXJhZ3JhcGgg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7CisgICAgYSA9IGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKCJhYmNkZSIpOworCisgICAgc2VjdGlvbi5hcHBlbmRDaGlsZChwYXJhZ3JhcGgpOwor
ICAgIHBhcmFncmFwaC5hcHBlbmRDaGlsZChhKTsKKworICAgIHJhbmdlID0gbWFrZVJhbmdlKGEs
IDIsIHNlY3Rpb24sIDEpOworfQorCisvLyBGaXJzdCwgdGVzdHMgZnJvbSB0aGUgRE9NIExldmVs
IDIgc3BlY2lmaWNhdGlvbi4KKworLy8gRE9NIExldmVsIDIgVHJhdmVyc2FsIFJhbmdlLCAyLjEy
LjEuIEluc2VydGlvbnMsIGV4YW1wbGUgMS4KK3NldFVwMSgpOwordGV4dC5pbnNlcnREYXRhKDEw
LCAiaW5zZXJ0ZWQgdGV4dCIpOworc2hvdWxkQmUoJ2Rlc2NyaXB0aW9uKHJhbmdlKScsICcidGV4
dCwyNCAtPiB0ZXh0LDMyOiBZIGJsYWggaSInKTsKKworLy8gRE9NIExldmVsIDIgVHJhdmVyc2Fs
IFJhbmdlLCAyLjEyLjEuIEluc2VydGlvbnMsIGV4YW1wbGUgMi4KKy8vIEZpcmVmb3ggZG9lcyBu
b3QgbWF0Y2ggdGhlIERPTSBMZXZlbCAyIHNwZWNpZmljYXRpb24gb24gdGhpcyBvbmUuCitzZXRV
cDEoKTsKK3RleHQuaW5zZXJ0RGF0YSgxMSwgImluc2VydGVkIHRleHQiKTsKK3Nob3VsZEJlKCdk
ZXNjcmlwdGlvbihyYW5nZSknLCAnInRleHQsMTEgLT4gdGV4dCwzMjogaW5zZXJ0ZWQgdGV4dFkg
YmxhaCBpIicpOworCisvLyBET00gTGV2ZWwgMiBUcmF2ZXJzYWwgUmFuZ2UsIDIuMTIuMS4gSW5z
ZXJ0aW9ucywgZXhhbXBsZSAzLgorc2V0VXAxKCk7Cit0ZXh0Lmluc2VydERhdGEoMTIsICJpbnNl
cnRlZCB0ZXh0Iik7CitzaG91bGRCZSgnZGVzY3JpcHRpb24ocmFuZ2UpJywgJyJ0ZXh0LDExIC0+
IHRleHQsMzI6IFlpbnNlcnRlZCB0ZXh0IGJsYWggaSInKTsKKworLy8gRE9NIExldmVsIDIgVHJh
dmVyc2FsIFJhbmdlLCAyLjEyLjEuIEluc2VydGlvbnMsIGV4YW1wbGUgNC4KK3NldFVwMSgpOwor
dGV4dC5pbnNlcnREYXRhKDE3LCAiaW5zZXJ0ZWQgdGV4dCIpOworc2hvdWxkQmUoJ2Rlc2NyaXB0
aW9uKHJhbmdlKScsICcidGV4dCwxMSAtPiB0ZXh0LDMyOiBZIGJsYWhpbnNlcnRlZCB0ZXh0IGki
Jyk7CisKKy8vIFNpbWlsYXIgdGVzdCBhdCB0aGUgcmFuZ2UgZW5kLgorc2V0VXAxKCk7Cit0ZXh0
Lmluc2VydERhdGEoMTgsICJpbnNlcnRlZCB0ZXh0Iik7CitzaG91bGRCZSgnZGVzY3JpcHRpb24o
cmFuZ2UpJywgJyJ0ZXh0LDExIC0+IHRleHQsMzI6IFkgYmxhaCBpbnNlcnRlZCB0ZXh0aSInKTsK
KworLy8gU2ltaWxhciB0ZXN0IGF0IHRoZSByYW5nZSBlbmQuCitzZXRVcDEoKTsKK3RleHQuaW5z
ZXJ0RGF0YSgxOSwgImluc2VydGVkIHRleHQiKTsKK3Nob3VsZEJlKCdkZXNjcmlwdGlvbihyYW5n
ZSknLCAnInRleHQsMTEgLT4gdGV4dCwxOTogWSBibGFoIGkiJyk7CisKKy8vIERPTSBMZXZlbCAy
IFRyYXZlcnNhbCBSYW5nZSwgMi4xMi4yLiBEZWxldGlvbnMsIGV4YW1wbGUgMS4KK3BhcmFncmFw
aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsKK3RleHQgPSBkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSgiQWJjZCBlZmdoIFRoZSBSYW5nZSBpamtsIik7CitwYXJhZ3JhcGguYXBwZW5kQ2hp
bGQodGV4dCk7CityYW5nZSA9IG1ha2VSYW5nZSh0ZXh0LCAxMSwgdGV4dCwgMjEpOwordGV4dC5k
ZWxldGVEYXRhKDUsIDgpOworc2hvdWxkQmUoJ2Rlc2NyaXB0aW9uKHJhbmdlKScsICcidGV4dCw1
IC0+IHRleHQsMTM6ICBSYW5nZSBpIicpOworCisvLyBET00gTGV2ZWwgMiBUcmF2ZXJzYWwgUmFu
Z2UsIDIuMTIuMi4gRGVsZXRpb25zLCBleGFtcGxlIDIuCitwYXJhZ3JhcGggPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJwIik7Cit0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIkFiY2Qg
ZWZnaCBUaGUgUmFuZ2UgaWprbCIpOworcGFyYWdyYXBoLmFwcGVuZENoaWxkKHRleHQpOworcmFu
Z2UgPSBtYWtlUmFuZ2UodGV4dCwgMTEsIHRleHQsIDIxKTsKK3RleHQuZGVsZXRlRGF0YSg1LCAx
Nyk7CitzaG91bGRCZSgnZGVzY3JpcHRpb24ocmFuZ2UpJywgJyJ0ZXh0LDUgLT4gdGV4dCw1OiAi
Jyk7CisKKy8vIERPTSBMZXZlbCAyIFRyYXZlcnNhbCBSYW5nZSwgMi4xMi4yLiBEZWxldGlvbnMs
IGV4YW1wbGUgMy4KKy8vIEZpcmVmb3ggZG9lcyBub3QgbWF0Y2ggdGhlIERPTSBMZXZlbCAyIHNw
ZWNpZmljYXRpb24gb24gdGhpcyBvbmUuCisvLyBPciBtYXliZSBJIHdyb3RlIHRoZSB0ZXN0IHdy
b25nPworcGFyYWdyYXBoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOwordGV4dDEgPSBk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiQUJDRCBlZmdoIFRoZSAiKTsKK3BhcmFncmFwaC5hcHBl
bmRDaGlsZCh0ZXh0MSk7CitlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImVtIik7CitwYXJh
Z3JhcGguYXBwZW5kQ2hpbGQoZW0pOwordGV4dDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgi
UmFuZ2UiKTsKK2VtLmFwcGVuZENoaWxkKHRleHQyKTsKK3RleHQzID0gZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoIiBpamtsIik7CitwYXJhZ3JhcGguYXBwZW5kQ2hpbGQodGV4dDMpOworcmFuZ2Ug
PSBtYWtlUmFuZ2UodGV4dDEsIDExLCB0ZXh0MiwgNSk7CittYWtlUmFuZ2UodGV4dDEsIDUsIHRl
eHQyLCAxKS5kZWxldGVDb250ZW50cygpOworc2hvdWxkQmUoJ2Rlc2NyaXB0aW9uKHJhbmdlKScs
ICcidGV4dDEsNSAtPiB0ZXh0Miw0OiBhbmdlIicpOworCisvLyBET00gTGV2ZWwgMiBUcmF2ZXJz
YWwgUmFuZ2UsIDIuMTIuMi4gRGVsZXRpb25zLCBleGFtcGxlIDQuCitwYXJhZ3JhcGggPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJwIik7Cit0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
IkFiY2QgZWZnaCBUaGUgUmFuZ2UgaWprbCIpOworcGFyYWdyYXBoLmFwcGVuZENoaWxkKHRleHQp
OworcmFuZ2UgPSBtYWtlUmFuZ2UodGV4dCwgMTEsIHRleHQsIDIxKTsKK3RleHQuZGVsZXRlRGF0
YSg1LCA2KTsKK3Nob3VsZEJlKCdkZXNjcmlwdGlvbihyYW5nZSknLCAnInRleHQsNSAtPiB0ZXh0
LDE1OiBoZSBSYW5nZSBpIicpOworCisvLyBET00gTGV2ZWwgMiBUcmF2ZXJzYWwgUmFuZ2UsIDIu
MTIuMi4gRGVsZXRpb25zLCBleGFtcGxlIDUuCitwYXJhZ3JhcGggPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJwIik7Cit0ZXh0MSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJBYmNkICIpOwor
cGFyYWdyYXBoLmFwcGVuZENoaWxkKHRleHQxKTsKK2VtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZW0iKTsKK3BhcmFncmFwaC5hcHBlbmRDaGlsZChlbSk7Cit0ZXh0MiA9IGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKCJlZmdoIFRoZSBSYW5nZSBpaiIpOworZW0uYXBwZW5kQ2hpbGQodGV4dDIp
OwordGV4dDMgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgia2wiKTsKK3BhcmFncmFwaC5hcHBl
bmRDaGlsZCh0ZXh0Myk7CityYW5nZSA9IG1ha2VSYW5nZSh0ZXh0MiwgNiwgdGV4dDIsIDE2KTsK
K21ha2VSYW5nZShwYXJhZ3JhcGgsIDEsIHBhcmFncmFwaCwgMikuZGVsZXRlQ29udGVudHMoKTsK
K3Nob3VsZEJlKCdwYXJhZ3JhcGguY2hpbGROb2Rlcy5sZW5ndGgnLCAnMicpOworc2hvdWxkQmUo
J3RleHQxLmxlbmd0aCcsICc1Jyk7CitzaG91bGRCZSgnZGVzY3JpcHRpb24ocmFuZ2UpJywgJyJw
YXJhZ3JhcGgsMSAtPiBwYXJhZ3JhcGgsMTogIicpOworcGFyYWdyYXBoLm5vcm1hbGl6ZSgpOwor
c2hvdWxkQmUoJ3BhcmFncmFwaC5jaGlsZE5vZGVzLmxlbmd0aCcsICcxJyk7CitzaG91bGRCZSgn
dGV4dDEubGVuZ3RoJywgJzcnKTsKK3Nob3VsZEJlKCdkZXNjcmlwdGlvbihyYW5nZSknLCAnInRl
eHQxLDUgLT4gdGV4dDEsNTogIicpOworCisvLyBJbnNlcnRpbmcgYSBub2RlIGluIHRoZSBzdGFy
dCBjb250YWluZXIsIGJlZm9yZSB0aGUgcmFuZ2Ugc3RhcnQgb2Zmc2V0Lgorc2V0VXAyKCk7Citw
YXJhZ3JhcGguaW5zZXJ0QmVmb3JlKGUsIGEpOworc2hvdWxkQmUoJ2Rlc2NyaXB0aW9uKHJhbmdl
KScsICcicGFyYWdyYXBoLDIgLT4gcGFyYWdyYXBoLDQ6IGJjIicpOworCisvLyBJbnNlcnRpbmcg
YSBub2RlIGluIHRoZSBzdGFydCBjb250YWluZXIsIGF0IHRoZSByYW5nZSBzdGFydCBvZmZzZXQu
CitzZXRVcDIoKTsKK3BhcmFncmFwaC5pbnNlcnRCZWZvcmUoZSwgYik7CitzaG91bGRCZSgnZGVz
Y3JpcHRpb24ocmFuZ2UpJywgJyJwYXJhZ3JhcGgsMSAtPiBwYXJhZ3JhcGgsNDogZWJjIicpOwor
CisvLyBJbnNlcnRpbmcgYSBub2RlIGluIHRoZSBzdGFydCBjb250YWluZXIsIGJldHdlZW4gc3Rh
cnQgYW5kIGVuZC4KK3NldFVwMigpOworcGFyYWdyYXBoLmluc2VydEJlZm9yZShlLCBjKTsKK3No
b3VsZEJlKCdkZXNjcmlwdGlvbihyYW5nZSknLCAnInBhcmFncmFwaCwxIC0+IHBhcmFncmFwaCw0
OiBiZWMiJyk7CisKKy8vIEluc2VydGluZyBhIG5vZGUgaW4gdGhlIGVuZCBjb250YWluZXIsIGF0
IHRoZSByYW5nZSBlbmQgb2Zmc2V0Lgorc2V0VXAyKCk7CitwYXJhZ3JhcGguaW5zZXJ0QmVmb3Jl
KGUsIGQpOworc2hvdWxkQmUoJ2Rlc2NyaXB0aW9uKHJhbmdlKScsICcicGFyYWdyYXBoLDEgLT4g
cGFyYWdyYXBoLDM6IGJjIicpOworCisvLyBJbnNlcnRpbmcgYSBub2RlIGluIHRoZSBlbmQgY29u
dGFpbmVyLCBhZnRlciB0aGUgcmFuZ2UgZW5kIG9mZnNldC4KK3NldFVwMigpOworcGFyYWdyYXBo
LmFwcGVuZENoaWxkKGUpOworc2hvdWxkQmUoJ2Rlc2NyaXB0aW9uKHJhbmdlKScsICcicGFyYWdy
YXBoLDEgLT4gcGFyYWdyYXBoLDM6IGJjIicpOworCisvLyBSZW1vdmluZyB0aGUgc3RhcnQgY29u
dGFpbmVyIG9mIGEgcmFuZ2UuCitzZXRVcDIoKTsKK3JhbmdlID0gbWFrZVJhbmdlKGIsIDAsIGQs
IDEpOworcGFyYWdyYXBoLnJlbW92ZUNoaWxkKGIpOworc2hvdWxkQmUoJ2Rlc2NyaXB0aW9uKHJh
bmdlKScsICcicGFyYWdyYXBoLDEgLT4gZCwxOiBjZCInKTsKK3NldFVwMigpOworcmFuZ2UgPSBt
YWtlUmFuZ2UoYiwgMSwgZCwgMCk7CitwYXJhZ3JhcGgucmVtb3ZlQ2hpbGQoYik7CitzaG91bGRC
ZSgnZGVzY3JpcHRpb24ocmFuZ2UpJywgJyJwYXJhZ3JhcGgsMSAtPiBkLDA6IGMiJyk7CisKKy8v
IFJlbW92aW5nIHRoZSBlbmQgY29udGFpbmVyIG9mIGEgcmFuZ2UuCitzZXRVcDIoKTsKK3Jhbmdl
ID0gbWFrZVJhbmdlKGIsIDAsIGQsIDEpOworcGFyYWdyYXBoLnJlbW92ZUNoaWxkKGQpOworc2hv
dWxkQmUoJ2Rlc2NyaXB0aW9uKHJhbmdlKScsICciYiwwIC0+IHBhcmFncmFwaCwzOiBiYyInKTsK
K3NldFVwMigpOworcmFuZ2UgPSBtYWtlUmFuZ2UoYiwgMSwgZCwgMCk7CitwYXJhZ3JhcGgucmVt
b3ZlQ2hpbGQoZCk7CitzaG91bGRCZSgnZGVzY3JpcHRpb24ocmFuZ2UpJywgJyJiLDEgLT4gcGFy
YWdyYXBoLDM6IGMiJyk7CisKKy8vIENhbGxpbmcgbm9ybWFsaXplIHdpdGggYSByYW5nZSB0aGF0
IGhhcyBhbiBlbmRwb2ludCBpbiBhIHRleHQgbm9kZSB0aGF0IGdldHMgbWVyZ2VkIGludG8gYW5v
dGhlci4KKy8vIEZpcmVmb3ggZG9lcyBub3QgZG8gd2hhdCB0aGUgRE9NIExldmVsIDIgc3BlY2lm
aWNhdGlvbiBzZWVtcyB0byBjYWxsIGZvciBvbiB0aGlzIG9uZS4KK3NldFVwMygpOworcGFyYWdy
YXBoLm5vcm1hbGl6ZSgpOworc2hvdWxkQmUoJ2Rlc2NyaXB0aW9uKHJhbmdlKScsICciYSwxIC0+
IGEsMzogeGIiJyk7CisKKy8vIENhbGxpbmcgc3BsaXRUZXh0IHdoZW4gYSByYW5nZSBoYXMgYW4g
ZW5kcG9pbnQgb24gaW4gdGhlIHBpZWNlIHRoYXQgZ2V0cyBtYWRlIGludG8gYSBuZXcgdGV4dCBu
b2RlLgorLy8gRmlyZWZveCBkb2VzIG5vdCBkbyB3aGF0IHRoZSBET00gTGV2ZWwgMiBzcGVjaWZp
Y2F0aW9uIHNlZW1zIHRvIGNhbGwgZm9yIG9uIHRoaXMgb25lLgorc2V0VXA0KCk7CitiID0gYS5z
cGxpdFRleHQoMSk7CitzaG91bGRCZSgnZGVzY3JpcHRpb24ocmFuZ2UpJywgJyJhLDEgLT4gYiwy
OiBiYyInKTsKK3NldFVwNCgpOworYiA9IGEuc3BsaXRUZXh0KDIpOworc2hvdWxkQmUoJ2Rlc2Ny
aXB0aW9uKHJhbmdlKScsICciYSwxIC0+IGIsMTogYmMiJyk7CitzZXRVcDQoKTsKK2IgPSBhLnNw
bGl0VGV4dCgzKTsKK3Nob3VsZEJlKCdkZXNjcmlwdGlvbihyYW5nZSknLCAnImEsMSAtPiBhLDM6
IGJjIicpOworCisvLyBSYW5nZSB0ZXN0IGluIEFjaWQzLgorc2V0VXA1KCk7CitzaG91bGRCZSgn
ZGVzY3JpcHRpb24ocmFuZ2UpJywgJyJhLDIgLT4gc2VjdGlvbiwxOiBjZGUiJyk7CitzZWN0aW9u
LnJlbW92ZUNoaWxkKHBhcmFncmFwaCk7CitzaG91bGRCZSgnZGVzY3JpcHRpb24ocmFuZ2UpJywg
JyJzZWN0aW9uLDAgLT4gc2VjdGlvbiwwOiAiJyk7CisKKy8vIENoaWxkcmVuIGluIGEgcmFuZ2Ug
YmVpbmcgcmVtb3ZlZCwgYnV0IGJ5IERPTSBtdXRhdGlvbiAobm90IENoYXJhY3RlckRhdGEgbXV0
YXRpb24pLgorLy8gVGVzdCBDaGFyYWN0ZXJEYXRhLnJlcGxhY2VEYXRhIGNhc2VzPworLy8gVGVz
dCBFbGVtZW50LmlubmVySFRNTCBjYXNlcyAoc2V0dGluZyBpdCk/CisvLyBUZXN0IEVsZW1lbnQu
aW5uZXJUZXh0IGNhc2VzIChzZXR0aW5nIGl0KT8KKy8vIFRlc3QgRWxlbWVudC5vdXRlckhUTUwg
Y2FzZXMgKHNldHRpbmcgaXQpPworLy8gVGVzdCBFbGVtZW50Lm91dGVyVGV4dCBjYXNlcyAoc2V0
dGluZyBpdCk/CisvLyBUZXN0IE5vZGUucmVwbGFjZUNoaWxkIGNhc2VzPworLy8gVGVzdCBjYXNl
cyB3aGVyZSBOb2RlLmluc2VydEJlZm9yZS9hcHBlbmRDaGlsZCBoYXMgYSBzaWRlIGVmZmVjdCBv
ZiBkZWxldGluZyB0aGUgbm9kZSBmcm9tIGEgcmFuZ2UuCisvLyBUZXN0IFJhbmdlLmRlbGV0ZUNv
bnRlbnRzIGNhc2VzPworLy8gVGVzdCBSYW5nZS5leHRyYWN0Q29udGVudHMgY2FzZXM/CisvLyBU
ZXN0IFJhbmdlLnN1cnJvdW5kQ29udGVudHMgY2FzZXM/CisvLyBUZXN0IFRleHQucmVwbGFjZVdo
b2xlVGV4dCBjYXNlcz8KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9leGVjQ29tbWFuZC80OTIwNDg4LWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9l
eGVjQ29tbWFuZC80OTIwNDg4LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMzEwNTMpCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9leGVjQ29tbWFuZC80OTIwNDg4LWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDMgQEAKLUNPTlNPTEUgTUVTU0FHRTogbGlu
ZSAxNzogRXJyb3I6IFdST05HX0RPQ1VNRU5UX0VSUjogRE9NIEV4Y2VwdGlvbiA0CiBsYXllciBh
dCAoMCwwKSBzaXplIDgwMHg2MDAKICAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAK
IGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvZWRpdGluZy9leGVjQ29tbWFuZC80OTIwNDg4LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9lZGl0aW5nL2V4ZWNDb21tYW5kLzQ5MjA0ODgtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAzMTA1MykKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Vk
aXRpbmcvZXhlY0NvbW1hbmQvNDkyMDQ4OC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTEsNCArMSwzIEBACi1DT05TT0xFIE1FU1NBR0U6IGxpbmUgMTc6IEVycm9yOiBXUk9OR19ET0NV
TUVOVF9FUlI6IERPTSBFeGNlcHRpb24gNAogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAg
IFJlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiBsYXllciBhdCAoMCwwKSBzaXplIDgw
MHg2MDAK
</data>
<flag name="review"
          id="8651"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>