<?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>5870</bug_id>
          
          <creation_ts>2005-11-28 21:08:28 -0800</creation_ts>
          <short_desc>Double-clicking on an SVG dies in HTML editing code</short_desc>
          <delta_ts>2006-01-11 18:29:13 -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>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</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>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>6455</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Justin Garcia">justin.garcia</assigned_to>
          <cc>ap</cc>
    
    <cc>justin.garcia</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>24813</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-28 21:08:28 -0800</bug_when>
    <thetext>This assert:
    ASSERT(result != *this);

visible_position.cpp line 132.

Fails when double-clicking on an SVG.


#0	0x018fa45c in khtml::VisiblePosition::previous at visible_position.cpp:132
#1	0x01905844 in khtml::endOfWord at visible_units.cpp:237
#2	0x018f5f60 in khtml::SelectionController::validate at SelectionController.cpp:904
#3	0x018f6d90 in khtml::SelectionController::expandUsingGranularity at SelectionController.cpp:494
#4	0x016b7c68 in KHTMLPart::selectClosestWordFromMouseEvent at khtml_part.cpp:2539
#5	0x016b7ddc in KHTMLPart::handleMousePressEventDoubleClick at khtml_part.cpp:2565
#6	0x016c039c in KHTMLPart::khtmlMousePressEvent at khtml_part.cpp:2677
#7	0x01647ae8 in KWQKHTMLPart::khtmlMousePressEvent at KWQKHTMLPart.mm:2050
#8	0x016b6c4c in KHTMLPart::customEvent at khtml_part.cpp:2465
#9	0x01a11fc0 in KParts::Part::event at KWQKPartsPart.h:56
#10	0x01a22304 in QApplication::sendEvent at KWQApplication.h:39
#11	0x016c92d8 in KHTMLView::viewportMousePressEvent at khtmlview.cpp:646
#12	0x0164cd10 in KWQKHTMLPart::mouseDown at KWQKHTMLPart.mm:2692
#13	0x016a9398 in -[WebCoreBridge mouseDown:] at WebCoreBridge.mm:885
#14	0x0037d16c in -[WebHTMLView mouseDown:] at WebHTMLView.m:2580
#15	0x936ce660 in -[NSWindow sendEvent:]
#16	0x0001d3b0 in ??
#17	0x936776f4 in -[NSApplication sendEvent:]
#18	0x0001a388 in ??
#19	0x9366eb30 in -[NSApplication run]
#20	0x9375f618 in NSApplicationMain
#21	0x0000265c in ??
#22	0x00056d1c in ??</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24815</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-28 21:26:05 -0800</bug_when>
    <thetext>I think possibly this method needs to be enhanced:

bool Position::atStart() const
{
    NodeImpl *n = node();
    if (!n)
        return true;
    
    return offset() &lt;= 0 &amp;&amp; n-&gt;parent() == 0;
}

perhaps if (!n || n-&gt;isSVGElement()) ?

Not sure that makes sense.  Selection will eventually make sense in an SVGDocument, or at least text 
selection will:

http://www.w3.org/TR/SVG/text.html#TextSelection</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28086</commentid>
    <comment_count>2</comment_count>
      <attachid>5576</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-09 18:10:42 -0800</bug_when>
    <thetext>Created attachment 5576
patch

Account for replaced elements with children in VisiblePosition::isCandidate and
maxDeepOffset.	
Define and use a single isAtomicNode and maxDeepOffset (they now live in
htmlediting.cpp).
Stop at candidates inside VisiblePosition::deepEquivalent(const Position &amp;). 
If it was allowed to descend, it would return a position that was not visually
equivalent to the input position.
Fixed a regression where the caret rect was incorrect for carets before/after
replaced elements.  SelectionController computed m_caretRect at layout time
using a different position than the one used at paint time to adjust the caret
for scrolling.
Removed VisiblePosition::downstreamDeepEquivalent().  It&apos;s just equal to
position().downstream().

Now use a single method for finding the deepest equivalent position that is
visually equivalent to the input position.  That method is
VisiblePosition::deepEquivalent(const Position &amp;).
Renamed VisiblePosition::equivalentDeepPosition() to
VisiblePosition::deepEquivalent().
Renamed VisiblePositions private field for the canonical position from
m_deepPosition to m_position, and renamed the accessor to position().
Now use a single method for finding range compliant positions
(Position::equivalentRangeCompliantPosition).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28087</commentid>
    <comment_count>3</comment_count>
      <attachid>5577</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-09 18:48:08 -0800</bug_when>
    <thetext>Created attachment 5577
patch

a few tweaks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28088</commentid>
    <comment_count>4</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-09 18:59:50 -0800</bug_when>
    <thetext>I should probably justify the renaming of m_deepPosition to m_position and 
VisiblePosition::deepEquivalent() to VisiblePosition::position():

1) Avoid confusion with Position::deepEquivalent()
2) A VisiblePosition&apos;s associated position can be visually equivalent to many positions (think collapsed 
whitespace).  Many of those equivalent positions can be &apos;deep&apos; in the sense that they are as far down in the 
DOM as it is possible to go.  Asking for &apos;deepEquivalent&apos; then seems ambiguous, i.e. &apos;which deep 
equivalent?&apos;.  Yes, I know, &apos;position&apos; is even more ambiguous.  We could use 
VisiblePosition::canonicalPosition(), but I think it&apos;s too verbose.  What if VisiblePosition were a subclass of 
Position?  Then the VisiblePosition itself represents the canonical DOM position + an affinity.  I&apos;d like to 
ask darin since he was the one who gave birth to VisiblePosition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28089</commentid>
    <comment_count>5</comment_count>
      <attachid>5577</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-09 19:14:02 -0800</bug_when>
    <thetext>Comment on attachment 5577
patch

So I looked at the patch briefly, it looks OK.	I think it&apos;s best if Darin or
dave look through this one though.

I also think it would be very intersesting to see a patch w/o the renames, as
combining both functional changes and renames into a single patch makes it
harder to read. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28094</commentid>
    <comment_count>6</comment_count>
      <attachid>5581</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-09 21:04:20 -0800</bug_when>
    <thetext>Created attachment 5581
patch

Redid the patch on TOT, w/o the VisiblePosition::deepEquivalent() -&gt;
VisiblePosition::position() rename.  Also, I previously forgot to mention the
small fix to is{First,Last}VisiblePositionInNode (check to see that the
position is actually in the node :-)).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28097</commentid>
    <comment_count>7</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-09 21:14:54 -0800</bug_when>
    <thetext>Retouching my ChangeLog notes from above, there were a few mistakes:

- Account for replaced elements with children in VisiblePosition::isCandidate and maxDeepOffset.
- Define and use a single isAtomicNode and maxDeepOffset (they now live in htmlediting.cpp).

- Stop at candidates inside VisiblePosition::deepEquivalent(const Position &amp;).  If the function is allowed to descend past a candidate, it will return a position 
that is not visually equivalent to the input position.  For example:
&lt;table&gt;&lt;tr&gt;&lt;td&gt;hello&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
[table, 0] and [text, 0] are two distinct visible positions, but [text, 0] would be reached if deepEquivalent descended past candidates.

- Removed a comment in previousVisiblePosition.  It is no longer correct because deepEquivalent() will not descend past candidates.
- Fixed a regression where the caret rect was incorrect for carets before/after replaced elements.  SelectionController computed m_caretRect at layout time
using a different position than the one used at paint time to adjust the caret for scrolling.
- Removed VisiblePosition::downstreamDeepEquivalent().  It&apos;s just equal to deepEquivalent().downstream().
- Now use a single method for finding the deepest equivalent position that is visually equivalent to an input position.  That method is
- VisiblePosition::deepEquivalent(const Position &amp;).  Removed Position::equivalentDeepPosition().
- Now use a single method for finding range compliant positions.  That method is Position::equivalentRangeCompliantPosition().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28098</commentid>
    <comment_count>8</comment_count>
      <attachid>5583</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-09 21:32:13 -0800</bug_when>
    <thetext>Created attachment 5583
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28192</commentid>
    <comment_count>9</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-10 15:03:28 -0800</bug_when>
    <thetext>I was wrong about downstreamDeepEquivalent, its not just the deepEquivalent().downstream().  In the case 
where two candidates correspond to the same VP, we chose the one that&apos;s farther upstream.  
downstreamDeepEquivalent returns the one that&apos;s farther downstream, or deepEquivalent if there is only 
one candidate.  I&apos;m still not sure if it&apos;s necessary, looking into it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28199</commentid>
    <comment_count>10</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-10 17:52:45 -0800</bug_when>
    <thetext>I&apos;m leaving the removal of downstreamDeepEquivalent in this patch, I filed 6476 to cover the problems 
that occur when two different candidates straddle a line wrap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28223</commentid>
    <comment_count>11</comment_count>
      <attachid>5583</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-10 21:58:04 -0800</bug_when>
    <thetext>Comment on attachment 5583
patch

This could be improved:

+    // Allows [br, 1] as a position, though that is incorrect
+    if (node-&gt;hasTagName(brTag) || (renderer &amp;&amp; (renderer-&gt;isReplaced() ||
renderer-&gt;isWidget())))
+	 return 1;

The isWidget check isn&apos;t needed, because all widgets are replaced. Also, the
comment mentions &lt;br&gt;, but the same &quot;wrongness&quot; is true about replaced elements
with offset 1, so the comment should mention both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28224</commentid>
    <comment_count>12</comment_count>
      <attachid>5583</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-10 21:58:04 -0800</bug_when>
    <thetext>Comment on attachment 5583
patch

This could be improved:

+    // Allows [br, 1] as a position, though that is incorrect
+    if (node-&gt;hasTagName(brTag) || (renderer &amp;&amp; (renderer-&gt;isReplaced() ||
renderer-&gt;isWidget())))
+	 return 1;

The isWidget check isn&apos;t needed, because all widgets are replaced. Also, the
comment mentions &lt;br&gt;, but the same &quot;wrongness&quot; is true about replaced elements
with offset 1, so the comment should mention both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28262</commentid>
    <comment_count>13</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-11 16:09:55 -0800</bug_when>
    <thetext>When I double click on an SVG with TOT WebKit (w/o my patch applied), I can&apos;t get the ASSERT to fire 
anymore.  Eric, Alexey, Alice, what about you guys?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28263</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-11 16:30:26 -0800</bug_when>
    <thetext>Yeah it stopped ASSERTing a while back.  I&apos;m not sure why, I figured you had fixed some related editing 
bug a while back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28264</commentid>
    <comment_count>15</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-11 16:52:08 -0800</bug_when>
    <thetext>It looks like the fix for 5354 sent the double click down a different path (one where 
VisiblePosition::previous is never called).  You can still see this assert by following the steps in this bug:
&lt;rdar://problem/4393815&gt; Assertion failure: result != *this (khtml::VisiblePosition::previous())
Which is fixed with this patch.  

I&apos;m going to land this w/o a layout test for the double-click an SVG case b/c I&apos;m not sure what the 
expected behavior should be.  Right now, double clicking on an SVG creates a caret selection after the SVG 
(you can&apos;t see it because we don&apos;t paint carets in non-editable areas).  This is probably wrong, but we&apos;re 
going to address this in 6455.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28270</commentid>
    <comment_count>16</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-11 18:29:13 -0800</bug_when>
    <thetext>landing</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5576</attachid>
            <date>2006-01-09 18:10:42 -0800</date>
            <delta_ts>2006-01-09 18:48:08 -0800</delta_ts>
            <desc>patch</desc>
            <filename>5870.txt</filename>
            <type>text/plain</type>
            <size>52835</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2todG1sX2V2ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwva2h0bWxfZXZlbnRzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xNgpkaWZmIC11IC1yMS4xNiBraHRtbF9ldmVudHMuY3BwCi0tLSBraHRtbC9raHRtbF9ldmVu
dHMuY3BwCTMgT2N0IDIwMDUgMjE6MTI6MDQgLTAwMDAJMS4xNgorKysga2h0bWwva2h0bWxfZXZl
bnRzLmNwcAkxMCBKYW4gMjAwNiAwMTo1MTo0MCAtMDAwMApAQCAtNjEsNyArNjEsNyBAQAogICAg
ICAgICBpZiAoaW5uZXItPmlzVGV4dE5vZGUoKSkKICAgICAgICAgICAgIGlubmVyID0gaW5uZXIt
PnBhcmVudE5vZGUoKTsKICAgICAgICAgaWYgKGlubmVyLT5yZW5kZXJlcigpKQotICAgICAgICAg
ICAgcG9zID0gaW5uZXItPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMobV94LCBt
X3kpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICBwb3MgPSBpbm5lci0+cmVuZGVyZXIo
KS0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhtX3gsIG1feSkucG9zaXRpb24oKTsKICAgICB9CiAg
ICAgcmV0dXJuIHBvcy5vZmZzZXQoKTsKIH0KSW5kZXg6IGtodG1sL2todG1sX3BhcnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2todG1sX3BhcnQuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM3NgpkaWZmIC11IC1yMS4zNzYga2h0bWxfcGFydC5j
cHAKLS0tIGtodG1sL2todG1sX3BhcnQuY3BwCTMgSmFuIDIwMDYgMTI6Mjg6MjMgLTAwMDAJMS4z
NzYKKysrIGtodG1sL2todG1sX3BhcnQuY3BwCTEwIEphbiAyMDA2IDAxOjUxOjQwIC0wMDAwCkBA
IC0yMzQxLDcgKzIzNDEsNyBAQAogICAgIGlmICghaW5uZXJOb2RlIHx8ICFpbm5lck5vZGUtPnJl
bmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBQb3NpdGlvbiBwb3Mo
aW5uZXJOb2RlLT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvckNvb3JkaW5hdGVzKHgsIHkpLmRlZXBF
cXVpdmFsZW50KCkpOworICAgIFBvc2l0aW9uIHBvcyhpbm5lck5vZGUtPnJlbmRlcmVyKCktPnBv
c2l0aW9uRm9yQ29vcmRpbmF0ZXMoeCwgeSkucG9zaXRpb24oKSk7CiAgICAgaWYgKHBvcy5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yNDQ4LDcgKzI0NDgsNyBAQAogICAg
ICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MoaW5uZXJOb2RlLT5yZW5kZXJlcigp
LT5wb3NpdGlvbkZvckNvb3JkaW5hdGVzKGV2ZW50LT54KCksIGV2ZW50LT55KCkpKTsKICAgICAg
ICAgICAgIGlmICh2aXNpYmxlUG9zLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIHZpc2libGVQ
b3MgPSBWaXNpYmxlUG9zaXRpb24oaW5uZXJOb2RlLCBpbm5lck5vZGUtPmNhcmV0TWluT2Zmc2V0
KCksIGtodG1sOjpET1dOU1RSRUFNKTsKLSAgICAgICAgICAgIFBvc2l0aW9uIHBvcyA9IHZpc2li
bGVQb3MuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgIFBvc2l0aW9uIHBvcyA9IHZpc2li
bGVQb3MucG9zaXRpb24oKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc2VsID0gc2VsZWN0
aW9uKCk7CiAgICAgICAgICAgICBpZiAoZXh0ZW5kU2VsZWN0aW9uICYmIHNlbC5pc0NhcmV0T3JS
YW5nZSgpKSB7CkBAIC0yNjg3LDcgKzI2ODcsNyBAQAogCiBib29sIEtIVE1MUGFydDo6c2VsZWN0
Q29udGVudHNPZk5vZGUoTm9kZUltcGwqIG5vZGUpCiB7Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxl
ciBzZWwgPSBTZWxlY3Rpb25Db250cm9sbGVyKFBvc2l0aW9uKG5vZGUsIDApLCBraHRtbDo6RE9X
TlNUUkVBTSwgUG9zaXRpb24obm9kZSwgbm9kZS0+bWF4RGVlcE9mZnNldCgpKSwga2h0bWw6OkRP
V05TVFJFQU0pOyAgICAKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbCA9IFNlbGVjdGlvbkNv
bnRyb2xsZXIoUG9zaXRpb24obm9kZSwgMCksIGtodG1sOjpET1dOU1RSRUFNLCBQb3NpdGlvbihu
b2RlLCBtYXhEZWVwT2Zmc2V0KG5vZGUpKSwga2h0bWw6OkRPV05TVFJFQU0pOyAgICAKICAgICBp
ZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbCkpIHsKICAgICAgICAgc2V0U2VsZWN0aW9uKHNl
bCk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjk0Nyw3ICsyOTQ3LDcgQEAKICAgICAgICAg
bXV0YWJsZVN0eWxlLT5yZWYoKTsKICAgICB9CiAKLSAgICBOb2RlSW1wbCAqbm9kZSA9IFZpc2li
bGVQb3NpdGlvbihzZWxlY3Rpb24oKS5zdGFydCgpLCBzZWxlY3Rpb24oKS5zdGFydEFmZmluaXR5
KCkpLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOworICAgIE5vZGVJbXBsICpub2RlID0gVmlzaWJs
ZVBvc2l0aW9uKHNlbGVjdGlvbigpLnN0YXJ0KCksIHNlbGVjdGlvbigpLnN0YXJ0QWZmaW5pdHko
KSkucG9zaXRpb24oKS5ub2RlKCk7CiAgICAgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uSW1w
bCBjb21wdXRlZFN0eWxlKG5vZGUpOwogICAgIGNvbXB1dGVkU3R5bGUuZGlmZihtdXRhYmxlU3R5
bGUpOwogICAgIApJbmRleDoga2h0bWwvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL1NlbGVj
dGlvbkNvbnRyb2xsZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwOApkaWZmIC11IC1y
MS4xMDggU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKLS0tIGtodG1sL2VkaXRpbmcvU2VsZWN0aW9u
Q29udHJvbGxlci5jcHAJMyBKYW4gMjAwNiAxMjoyODoyNSAtMDAwMAkxLjEwOAorKysga2h0bWwv
ZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkxMCBKYW4gMjAwNiAwMTo1MTo0MCAtMDAw
MApAQCAtMzIsNiArMzIsNyBAQAogCiAjaW5jbHVkZSAiZG9tL2RvbV9ub2RlLmgiCiAjaW5jbHVk
ZSAiZG9tL2RvbV9zdHJpbmcuaCIKKyNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUg
ImtodG1sX3BhcnQuaCIKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKICNpbmNsdWRlICJyZW5kZXJp
bmcvcmVuZGVyX29iamVjdC5oIgpAQCAtMTU4LDggKzE1OSw4IEBACiB7CiAgICAgLy8gRklYTUU6
IHVzZSBleHRlbnRBZmZpbml0eQogICAgIG1fYWZmaW5pdHkgPSBwb3MuYWZmaW5pdHkoKTsKLSAg
ICBtX2Jhc2UgPSBwb3MuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBtX2V4dGVudCA9IHBvcy5kZWVw
RXF1aXZhbGVudCgpOworICAgIG1fYmFzZSA9IHBvcy5wb3NpdGlvbigpOworICAgIG1fZXh0ZW50
ID0gcG9zLnBvc2l0aW9uKCk7CiAgICAgdmFsaWRhdGUoKTsKIH0KIApAQCAtMTY3LDggKzE2OCw4
IEBACiB7CiAgICAgLy8gRklYTUU6IHVzZSBleHRlbnRBZmZpbml0eQogICAgIG1fYWZmaW5pdHkg
PSBiYXNlLmFmZmluaXR5KCk7Ci0gICAgbV9iYXNlID0gYmFzZS5kZWVwRXF1aXZhbGVudCgpOwot
ICAgIG1fZXh0ZW50ID0gZXh0ZW50LmRlZXBFcXVpdmFsZW50KCk7CisgICAgbV9iYXNlID0gYmFz
ZS5wb3NpdGlvbigpOworICAgIG1fZXh0ZW50ID0gZXh0ZW50LnBvc2l0aW9uKCk7CiAgICAgdmFs
aWRhdGUoKTsKIH0KIApAQCAtNDQ5LDcgKzQ1MCw3IEBACiAvLyBGSVhNRTogTWF5YmUgYmFzZWxp
bmUgd291bGQgYmUgYmV0dGVyPwogc3RhdGljIGJvb2wgY2FyZXRZKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmYywgaW50ICZ5KQogewotICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVpdmFsZW50KCk7
CisgICAgUG9zaXRpb24gcCA9IGMucG9zaXRpb24oKTsKICAgICBOb2RlSW1wbCAqbiA9IHAubm9k
ZSgpOwogICAgIGlmICghbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTY3LDE0ICs1Njgs
OCBAQAogICAgICAgICByZXR1cm4geDsKICAgICAgICAgCiAgICAgaWYgKHJlY2FsYyB8fCBwYXJ0
LT54UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oKSA9PSBLSFRNTFBhcnQ6Ok5vWFBvc0Zv
clZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKSB7Ci0gICAgICAgIHN3aXRjaCAobV9hZmZpbml0eSkg
ewotICAgICAgICAgICAgY2FzZSBET1dOU1RSRUFNOgotICAgICAgICAgICAgICAgIHBvcyA9IFZp
c2libGVQb3NpdGlvbihwb3MsIG1fYWZmaW5pdHkpLmRvd25zdHJlYW1EZWVwRXF1aXZhbGVudCgp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVUFNUUkVBTToKLSAg
ICAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBtX2FmZmluaXR5KS5kZWVw
RXF1aXZhbGVudCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAg
IFZpc2libGVQb3NpdGlvbiB2KHBvcywgbV9hZmZpbml0eSk7CisgICAgICAgIHBvcyA9IHYucG9z
aXRpb24oKTsKICAgICAgICAgeCA9IHBvcy5ub2RlKCktPnJlbmRlcmVyKCktPmNhcmV0UmVjdChw
b3Mub2Zmc2V0KCksIG1fYWZmaW5pdHkpLngoKTsKICAgICAgICAgcGFydC0+c2V0WFBvc0ZvclZl
cnRpY2FsQXJyb3dOYXZpZ2F0aW9uKHgpOwogICAgIH0KQEAgLTU5NSwxNCArNTkwLDE0IEBACiB2
b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEJhc2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZw
b3MpCiB7CiAgICAgbV9hZmZpbml0eSA9IHBvcy5hZmZpbml0eSgpOwotICAgIG1fYmFzZSA9IHBv
cy5kZWVwRXF1aXZhbGVudCgpOworICAgIG1fYmFzZSA9IHBvcy5wb3NpdGlvbigpOwogICAgIHZh
bGlkYXRlKCk7CiB9CiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0RXh0ZW50KGNvbnN0
IFZpc2libGVQb3NpdGlvbiAmcG9zKQogewogICAgIC8vIEZJWE1FOiBTdXBwb3J0IGV4dGVudEFm
ZmluaXR5Ci0gICAgbV9leHRlbnQgPSBwb3MuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBtX2V4dGVu
dCA9IHBvcy5wb3NpdGlvbigpOwogICAgIHZhbGlkYXRlKCk7CiB9CiAKQEAgLTcwMyw3ICs2OTgs
NyBAQAogCiBQYXNzUmVmUHRyPFJhbmdlSW1wbD4gU2VsZWN0aW9uQ29udHJvbGxlcjo6Z2V0UmFu
Z2VBdChpbnQgaW5kZXgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGluZGV4ID09IDAgPyBQYXNzUmVm
UHRyPFJhbmdlSW1wbD4odG9SYW5nZSgpKSA6IFBhc3NSZWZQdHI8UmFuZ2VJbXBsPigpOworICAg
IHJldHVybiBpbmRleCA9PSAwID8gdG9SYW5nZSgpIDogUGFzc1JlZlB0cjxSYW5nZUltcGw+KCk7
CiB9CiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0QmFzZUFuZEV4dGVudChOb2RlSW1w
bCAqYmFzZU5vZGUsIGludCBiYXNlT2Zmc2V0LCBOb2RlSW1wbCAqZXh0ZW50Tm9kZSwgaW50IGV4
dGVudE9mZnNldCkKQEAgLTc1OSwxNCArNzU0LDggQEAKICAgICAgICAgCiAgICAgaWYgKGlzQ2Fy
ZXQoKSkgewogICAgICAgICBQb3NpdGlvbiBwb3MgPSBtX3N0YXJ0OwotICAgICAgICBzd2l0Y2gg
KG1fYWZmaW5pdHkpIHsKLSAgICAgICAgICAgIGNhc2UgRE9XTlNUUkVBTToKLSAgICAgICAgICAg
ICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9hZmZpbml0eSkuZG93bnN0cmVh
bURlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIFVQU1RSRUFNOgotICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3N0
YXJ0LCBtX2FmZmluaXR5KS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9CisgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2Fm
ZmluaXR5KS5wb3NpdGlvbigpOworCiAgICAgICAgIGlmIChwb3MuaXNOb3ROdWxsKCkpIHsKICAg
ICAgICAgICAgIEFTU0VSVChwb3Mubm9kZSgpLT5yZW5kZXJlcigpKTsKICAgICAgICAgICAgIG1f
Y2FyZXRSZWN0ID0gcG9zLm5vZGUoKS0+cmVuZGVyZXIoKS0+Y2FyZXRSZWN0KHBvcy5vZmZzZXQo
KSwgbV9hZmZpbml0eSk7CkBAIC04NzIsMTIgKzg2MSwxMiBAQAogICAgICAgICAvLyBJZiB0aGUg
c3RhcnQgaXMgb3V0c2lkZSB0aGUgYmFzZSdzIGVkaXRhYmxlIHJvb3QsIGNhcCBpdCBhdCB0aGUg
c3RhcnQgb2YgdGhhdCBlZGl0YWJsZSByb290LgogICAgICAgICBpZiAoYmFzZVJvb3QgIT0gc3Rh
cnRSb290KSB7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3QoUG9zaXRpb24oYmFz
ZVJvb3QsIDApKTsKLSAgICAgICAgICAgIG1fc3RhcnQgPSBmaXJzdC5kZWVwRXF1aXZhbGVudCgp
OworICAgICAgICAgICAgbV9zdGFydCA9IGZpcnN0LnBvc2l0aW9uKCk7CiAgICAgICAgIH0KICAg
ICAgICAgLy8gSWYgdGhlIGVuZCBpcyBvdXRzaWRlIHRoZSBiYXNlJ3MgZWRpdGFibGUgcm9vdCwg
Y2FwIGl0IGF0IHRoZSBlbmQgb2YgdGhhdCBlZGl0YWJsZSByb290LgogICAgICAgICBpZiAoYmFz
ZVJvb3QgIT0gZW5kUm9vdCkgewotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGxhc3QoUG9z
aXRpb24oYmFzZVJvb3QsIGJhc2VSb290LT5tYXhEZWVwT2Zmc2V0KCkpKTsKLSAgICAgICAgICAg
IG1fZW5kID0gbGFzdC5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIGxhc3QoUG9zaXRpb24oYmFzZVJvb3QsIG1heERlZXBPZmZzZXQoYmFzZVJvb3QpKSk7Cisg
ICAgICAgICAgICBtX2VuZCA9IGxhc3QucG9zaXRpb24oKTsKICAgICAgICAgfQogICAgIC8vIFRo
ZSBzZWxlY3Rpb24gaXMgYmFzZWQgb3V0c2lkZSBlZGl0YWJsZSBjb250ZW50LiAgS2VlcCBib3Ro
IHNpZGVzIGZyb20gcmVhY2hpbmcgaW50byBlZGl0YWJsZSBjb250ZW50LgogICAgIH0gZWxzZSB7
CkBAIC04ODYsMjIgKzg3NSwyMiBAQAogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZp
b3VzOwogICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgIHByZXZpb3VzID0gVmlzaWJs
ZVBvc2l0aW9uKFBvc2l0aW9uKGVuZFJvb3QsIDApKS5wcmV2aW91cygpOwotICAgICAgICAgICAg
ICAgIGVuZFJvb3QgPSBwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+cm9vdEVkaXRh
YmxlRWxlbWVudCgpOworICAgICAgICAgICAgICAgIGVuZFJvb3QgPSBwcmV2aW91cy5wb3NpdGlv
bigpLm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgICAgICAgICAgfSB3aGlsZSAo
ZW5kUm9vdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFTU0VSVCghcHJldmlvdXMuaXNO
dWxsKCkpOwotICAgICAgICAgICAgbV9lbmQgPSBwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpOwor
ICAgICAgICAgICAgbV9lbmQgPSBwcmV2aW91cy5wb3NpdGlvbigpOwogICAgICAgICB9CiAgICAg
ICAgIC8vIFRoZSBzZWxlY3Rpb24gc3RhcnRzIGluIGVkaXRhYmxlIGNvbnRlbnQsIG1vdmUgZm9y
d2FyZCB1bnRpbCBub24tZWRpdGFibGUgY29udGVudCBpcyByZWFjaGVkLgogICAgICAgICBpZiAo
c3RhcnRSb290KSB7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dDsKICAgICAgICAg
ICAgIGRvIHsKLSAgICAgICAgICAgICAgICBuZXh0ID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9u
KHN0YXJ0Um9vdCwgc3RhcnRSb290LT5tYXhEZWVwT2Zmc2V0KCkpKS5uZXh0KCk7Ci0gICAgICAg
ICAgICAgICAgc3RhcnRSb290ID0gbmV4dC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+cm9vdEVk
aXRhYmxlRWxlbWVudCgpOworICAgICAgICAgICAgICAgIG5leHQgPSBWaXNpYmxlUG9zaXRpb24o
UG9zaXRpb24oc3RhcnRSb290LCBtYXhEZWVwT2Zmc2V0KHN0YXJ0Um9vdCkpKS5uZXh0KCk7Cisg
ICAgICAgICAgICAgICAgc3RhcnRSb290ID0gbmV4dC5wb3NpdGlvbigpLm5vZGUoKS0+cm9vdEVk
aXRhYmxlRWxlbWVudCgpOwogICAgICAgICAgICAgfSB3aGlsZSAoc3RhcnRSb290KTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgQVNTRVJUKCFuZXh0LmlzTnVsbCgpKTsKLSAgICAgICAgICAg
IG1fc3RhcnQgPSBuZXh0LmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICBtX3N0YXJ0ID0g
bmV4dC5wb3NpdGlvbigpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtOTE2LDEyICs5MDUs
MTIgQEAKICAgICBQb3NpdGlvbiBvcmlnaW5hbEJhc2UobV9iYXNlKTsKICAgICBib29sIGJhc2VB
bmRFeHRlbnRFcXVhbCA9IG1fYmFzZSA9PSBtX2V4dGVudDsKICAgICBpZiAobV9iYXNlLmlzTm90
TnVsbCgpKSB7Ci0gICAgICAgIG1fYmFzZSA9IFZpc2libGVQb3NpdGlvbihtX2Jhc2UsIG1fYWZm
aW5pdHkpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgIG1fYmFzZSA9IFZpc2libGVQb3NpdGlv
bihtX2Jhc2UsIG1fYWZmaW5pdHkpLnBvc2l0aW9uKCk7CiAgICAgICAgIGlmIChiYXNlQW5kRXh0
ZW50RXF1YWwpCiAgICAgICAgICAgICBtX2V4dGVudCA9IG1fYmFzZTsKICAgICB9CiAgICAgaWYg
KG1fZXh0ZW50LmlzTm90TnVsbCgpICYmICFiYXNlQW5kRXh0ZW50RXF1YWwpIHsKLSAgICAgICAg
bV9leHRlbnQgPSBWaXNpYmxlUG9zaXRpb24obV9leHRlbnQsIG1fYWZmaW5pdHkpLmRlZXBFcXVp
dmFsZW50KCk7CisgICAgICAgIG1fZXh0ZW50ID0gVmlzaWJsZVBvc2l0aW9uKG1fZXh0ZW50LCBt
X2FmZmluaXR5KS5wb3NpdGlvbigpOwogICAgIH0KIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBkbyBu
b3QgaGF2ZSBhIGRhbmdsaW5nIHN0YXJ0IG9yIGVuZApAQCAtOTc2LDE2ICs5NjUsMTYgQEAKICAg
ICAgICAgICAgIEVXb3JkU2lkZSBzaWRlID0gUmlnaHRXb3JkSWZPbkJvdW5kYXJ5OwogICAgICAg
ICAgICAgaWYgKGlzRW5kT2ZEb2N1bWVudChzdGFydCkgfHwgKGlzRW5kT2ZMaW5lKHN0YXJ0KSAm
JiAhaXNTdGFydE9mTGluZShzdGFydCkgJiYgIWlzRW5kT2ZQYXJhZ3JhcGgoc3RhcnQpKSkKICAg
ICAgICAgICAgICAgICBzaWRlID0gTGVmdFdvcmRJZk9uQm91bmRhcnk7Ci0gICAgICAgICAgICBt
X3N0YXJ0ID0gc3RhcnRPZldvcmQoc3RhcnQsIHNpZGUpLmRlZXBFcXVpdmFsZW50KCk7CisgICAg
ICAgICAgICBtX3N0YXJ0ID0gc3RhcnRPZldvcmQoc3RhcnQsIHNpZGUpLnBvc2l0aW9uKCk7CiAg
ICAgICAgICAgICBzaWRlID0gUmlnaHRXb3JkSWZPbkJvdW5kYXJ5OwogICAgICAgICAgICAgaWYg
KGlzRW5kT2ZEb2N1bWVudChlbmQpIHx8IChpc0VuZE9mTGluZShlbmQpICYmICFpc1N0YXJ0T2ZM
aW5lKGVuZCkgJiYgIWlzRW5kT2ZQYXJhZ3JhcGgoZW5kKSkpCiAgICAgICAgICAgICAgICAgc2lk
ZSA9IExlZnRXb3JkSWZPbkJvdW5kYXJ5OwotICAgICAgICAgICAgbV9lbmQgPSBlbmRPZldvcmQo
ZW5kLCBzaWRlKS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgbV9lbmQgPSBlbmRPZldv
cmQoZW5kLCBzaWRlKS5wb3NpdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgY2FzZSBMSU5FOiB7Ci0gICAgICAgICAgICBtX3N0
YXJ0ID0gc3RhcnRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKS5k
ZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgbV9zdGFydCA9IHN0YXJ0T2ZMaW5lKFZpc2li
bGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KSkucG9zaXRpb24oKTsKICAgICAgICAgICAg
IFZpc2libGVQb3NpdGlvbiBlbmQgPSBlbmRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fZW5kLCBt
X2FmZmluaXR5KSk7CiAgICAgICAgICAgICAvLyBJZiB0aGUgZW5kIG9mIHRoaXMgbGluZSBpcyBh
dCB0aGUgZW5kIG9mIGEgcGFyYWdyYXBoLCBpbmNsdWRlIHRoZSBzcGFjZSAKICAgICAgICAgICAg
IC8vIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGxpbmUgaW4gdGhlIHNlbGVjdGlvbi4KQEAgLTk5NCwz
MSArOTgzLDMxIEBACiAgICAgICAgICAgICAgICAgaWYgKG5leHQuaXNOb3ROdWxsKCkpCiAgICAg
ICAgICAgICAgICAgICAgIGVuZCA9IG5leHQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBt
X2VuZCA9IGVuZC5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgbV9lbmQgPSBlbmQucG9z
aXRpb24oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTElO
RV9CT1VOREFSWToKLSAgICAgICAgICAgIG1fc3RhcnQgPSBzdGFydE9mTGluZShWaXNpYmxlUG9z
aXRpb24obV9zdGFydCwgbV9hZmZpbml0eSkpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgICAg
ICBtX2VuZCA9IGVuZE9mTGluZShWaXNpYmxlUG9zaXRpb24obV9lbmQsIG1fYWZmaW5pdHkpKS5k
ZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgbV9zdGFydCA9IHN0YXJ0T2ZMaW5lKFZpc2li
bGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KSkucG9zaXRpb24oKTsKKyAgICAgICAgICAg
IG1fZW5kID0gZW5kT2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX2VuZCwgbV9hZmZpbml0eSkpLnBv
c2l0aW9uKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBQQVJBR1JBUEg6IHsK
ICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3MobV9zdGFydCwgbV9hZmZpbml0eSk7CiAg
ICAgICAgICAgICBpZiAoaXNTdGFydE9mTGluZShwb3MpICYmIGlzRW5kT2ZEb2N1bWVudChwb3Mp
KQogICAgICAgICAgICAgICAgIHBvcyA9IHBvcy5wcmV2aW91cygpOwotICAgICAgICAgICAgbV9z
dGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgocG9zKS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAg
ICAgbV9zdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgocG9zKS5wb3NpdGlvbigpOwogICAgICAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChW
aXNpYmxlUG9zaXRpb24obV9lbmQsIG1fYWZmaW5pdHkpKTsKICAgICAgICAgICAgIC8vIEluY2x1
ZGUgdGhlIHNwYWNlIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHBhcmFncmFwaCBpbiB0aGUgc2VsZWN0
aW9uLgogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZOZXh0UGFyYWdyYXBoID0g
dmlzaWJsZVBhcmFncmFwaEVuZC5uZXh0KCk7Ci0gICAgICAgICAgICBtX2VuZCA9IHN0YXJ0T2ZO
ZXh0UGFyYWdyYXBoLmlzTm90TnVsbCgpID8gc3RhcnRPZk5leHRQYXJhZ3JhcGguZGVlcEVxdWl2
YWxlbnQoKSA6IHZpc2libGVQYXJhZ3JhcGhFbmQuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAg
ICAgIG1fZW5kID0gc3RhcnRPZk5leHRQYXJhZ3JhcGguaXNOb3ROdWxsKCkgPyBzdGFydE9mTmV4
dFBhcmFncmFwaC5wb3NpdGlvbigpIDogdmlzaWJsZVBhcmFncmFwaEVuZC5wb3NpdGlvbigpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBET0NVTUVOVF9CT1VO
REFSWToKLSAgICAgICAgICAgIG1fc3RhcnQgPSBzdGFydE9mRG9jdW1lbnQoVmlzaWJsZVBvc2l0
aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAgICAg
bV9lbmQgPSBlbmRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihtX2VuZCwgbV9hZmZpbml0eSkp
LmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICBtX3N0YXJ0ID0gc3RhcnRPZkRvY3VtZW50
KFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KSkucG9zaXRpb24oKTsKKyAgICAg
ICAgICAgIG1fZW5kID0gZW5kT2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24obV9lbmQsIG1fYWZm
aW5pdHkpKS5wb3NpdGlvbigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUEFS
QUdSQVBIX0JPVU5EQVJZOgotICAgICAgICAgICAgbV9zdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgo
VmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOwot
ICAgICAgICAgICAgbV9lbmQgPSBlbmRPZlBhcmFncmFwaChWaXNpYmxlUG9zaXRpb24obV9lbmQs
IG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgbV9zdGFydCA9IHN0
YXJ0T2ZQYXJhZ3JhcGgoVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKS5wb3Np
dGlvbigpOworICAgICAgICAgICAgbV9lbmQgPSBlbmRPZlBhcmFncmFwaChWaXNpYmxlUG9zaXRp
b24obV9lbmQsIG1fYWZmaW5pdHkpKS5wb3NpdGlvbigpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIApJbmRleDoga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2FwcGx5
X3N0eWxlX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI0CmRpZmYgLXUgLXIx
LjI0IGFwcGx5X3N0eWxlX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2FwcGx5X3N0eWxl
X2NvbW1hbmQuY3BwCTMgSmFuIDIwMDYgMDk6MTk6MDMgLTAwMDAJMS4yNAorKysga2h0bWwvZWRp
dGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAkxMCBKYW4gMjAwNiAwMTo1MTo0MCAtMDAwMApA
QCAtMTA1NSw3ICsxMDU1LDcgQEAKICAgICBOb2RlSW1wbCAqc3RhcnROb2RlID0gc3RhcnQubm9k
ZSgpOwogICAgIGludCBzdGFydE9mZnNldCA9IHN0YXJ0Lm9mZnNldCgpOwogCi0gICAgaWYgKHN0
YXJ0Lm5vZGUoKS0+aXNBdG9taWNOb2RlKCkpIHsKKyAgICBpZiAoaXNBdG9taWNOb2RlKHN0YXJ0
Lm5vZGUoKSkpIHsKICAgICAgICAgaWYgKHN0YXJ0Lm9mZnNldCgpICE9IDApCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTEwOTUsNyArMTA5NSw3IEBACiAgICAgTm9kZUltcGwgKmVu
ZE5vZGUgPSBlbmQubm9kZSgpOwogICAgIGludCBlbmRPZmZzZXQgPSBlbmQub2Zmc2V0KCk7CiAK
LSAgICBpZiAoZW5kTm9kZS0+aXNBdG9taWNOb2RlKCkpIHsKKyAgICBpZiAoaXNBdG9taWNOb2Rl
KGVuZE5vZGUpKSB7CiAgICAgICAgIGlmIChlbmRPZmZzZXQgPCBlbmROb2RlLT5jYXJldE1heE9m
ZnNldCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBraHRtbC9lZGl0aW5n
L2NvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMjMKZGlmZiAtdSAtcjEuMjMgY29tcG9zaXRlX2VkaXRfY29tbWFu
ZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5jcHAJMyBKYW4g
MjAwNiAwOToxOTowMyAtMDAwMAkxLjIzCisrKyBraHRtbC9lZGl0aW5nL2NvbXBvc2l0ZV9lZGl0
X2NvbW1hbmQuY3BwCTEwIEphbiAyMDA2IDAxOjUxOjQwIC0wMDAwCkBAIC00NTIsNyArNDUyLDcg
QEAKIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWduaWZpY2FudFRleHRE
b3duc3RyZWFtKGNvbnN0IERPTTo6UG9zaXRpb24gJnBvcykKIHsKLSAgICBQb3NpdGlvbiBlbmQg
PSBWaXNpYmxlUG9zaXRpb24ocG9zLCBWUF9ERUZBVUxUX0FGRklOSVRZKS5uZXh0KCkuZGVlcEVx
dWl2YWxlbnQoKS5kb3duc3RyZWFtKCk7CisgICAgUG9zaXRpb24gZW5kID0gVmlzaWJsZVBvc2l0
aW9uKHBvcywgVlBfREVGQVVMVF9BRkZJTklUWSkubmV4dCgpLnBvc2l0aW9uKCkuZG93bnN0cmVh
bSgpOwogICAgIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KHBvcywgZW5kKTsKIH0KIApAQCAtNTQ5
LDggKzU0OSw4IEBACiAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHQgPSB2aXNpYmxlUGFyYWdyYXBo
RW5kLm5leHQoKTsKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZCA9IG5leHQuaXNOb3RO
dWxsKCkgPyBuZXh0IDogdmlzaWJsZVBhcmFncmFwaEVuZDsKICAgICAKLSAgICBQb3NpdGlvbiBw
YXJhZ3JhcGhTdGFydCA9IHZpc2libGVQYXJhZ3JhcGhTdGFydC5kZWVwRXF1aXZhbGVudCgpLnVw
c3RyZWFtKCk7Ci0gICAgUG9zaXRpb24gZW5kID0gdmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgp
LnVwc3RyZWFtKCk7CisgICAgUG9zaXRpb24gcGFyYWdyYXBoU3RhcnQgPSB2aXNpYmxlUGFyYWdy
YXBoU3RhcnQucG9zaXRpb24oKS51cHN0cmVhbSgpOworICAgIFBvc2l0aW9uIGVuZCA9IHZpc2li
bGVFbmQucG9zaXRpb24oKS51cHN0cmVhbSgpOwogICAgIAogICAgIC8vIFBlcmZvcm0gc29tZSBj
aGVja3MgdG8gc2VlIGlmIHdlIG5lZWQgdG8gcGVyZm9ybSB3b3JrIGluIHRoaXMgZnVuY3Rpb24u
CiAgICAgaWYgKHBhcmFncmFwaFN0YXJ0Lm5vZGUoKS0+aXNCbG9ja0Zsb3coKSkgewpJbmRleDog
a2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9j
b21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNQpkaWZmIC11IC1yMS4yNSBkZWxl
dGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rp
b25fY29tbWFuZC5jcHAJMyBKYW4gMjAwNiAwOToxOTowMyAtMDAwMAkxLjI1CisrKyBraHRtbC9l
ZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJMTAgSmFuIDIwMDYgMDE6NTE6NDAg
LTAwMDAKQEAgLTY5LDE3ICs2OSw2IEBACiAgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUobWVu
dVRhZyk7CiB9CiAKLXN0YXRpYyBpbnQgbWF4RGVlcE9mZnNldChOb2RlSW1wbCAqbikKLXsKLSAg
ICBpZiAobi0+aXNBdG9taWNOb2RlKCkpCi0gICAgICAgIHJldHVybiBuLT5jYXJldE1heE9mZnNl
dCgpOwotCi0gICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIG4tPmNo
aWxkTm9kZUNvdW50KCk7Ci0KLSAgICByZXR1cm4gMTsKLX0KLQogc3RhdGljIHZvaWQgZGVidWdQ
b3NpdGlvbihjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IFBvc2l0aW9uICZwb3MpCiB7CiAgICAg
aWYgKCFwcmVmaXgpCkBAIC0xNjksNyArMTU4LDcgQEAKICAgICBpZiAobV9zbWFydERlbGV0ZSkg
ewogICAgIAogICAgICAgICAvLyBza2lwIHNtYXJ0IGRlbGV0ZSBpZiB0aGUgc2VsZWN0aW9uIHRv
IGRlbGV0ZSBhbHJlYWR5IHN0YXJ0cyBvciBlbmRzIHdpdGggd2hpdGVzcGFjZQotICAgICAgICBQ
b3NpdGlvbiBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV91cHN0cmVhbVN0YXJ0LCBtX3NlbGVjdGlv
blRvRGVsZXRlLnN0YXJ0QWZmaW5pdHkoKSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgUG9z
aXRpb24gcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fdXBzdHJlYW1TdGFydCwgbV9zZWxlY3Rpb25U
b0RlbGV0ZS5zdGFydEFmZmluaXR5KCkpLnBvc2l0aW9uKCk7CiAgICAgICAgIGJvb2wgc2tpcFNt
YXJ0RGVsZXRlID0gcG9zLnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKFZQX0RFRkFVTFRfQUZG
SU5JVFksIHRydWUpLmlzTm90TnVsbCgpOwogICAgICAgICBpZiAoIXNraXBTbWFydERlbGV0ZSkK
ICAgICAgICAgICAgIHNraXBTbWFydERlbGV0ZSA9IG1fZG93bnN0cmVhbUVuZC5sZWFkaW5nV2hp
dGVzcGFjZVBvc2l0aW9uKFZQX0RFRkFVTFRfQUZGSU5JVFksIHRydWUpLmlzTm90TnVsbCgpOwpA
QCAtMTc4LDcgKzE2Nyw3IEBACiAgICAgICAgIGJvb2wgaGFzTGVhZGluZ1doaXRlc3BhY2VCZWZv
cmVBZGp1c3RtZW50ID0gbV91cHN0cmVhbVN0YXJ0LmxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24o
bV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydEFmZmluaXR5KCksIHRydWUpLmlzTm90TnVsbCgpOwog
ICAgICAgICBpZiAoIXNraXBTbWFydERlbGV0ZSAmJiBoYXNMZWFkaW5nV2hpdGVzcGFjZUJlZm9y
ZUFkanVzdG1lbnQpIHsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0g
VmlzaWJsZVBvc2l0aW9uKHN0YXJ0LCBtX3NlbGVjdGlvblRvRGVsZXRlLnN0YXJ0QWZmaW5pdHko
KSkucHJldmlvdXMoKTsKLSAgICAgICAgICAgIHBvcyA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxl
bnQoKTsKKyAgICAgICAgICAgIHBvcyA9IHZpc2libGVQb3MucG9zaXRpb24oKTsKICAgICAgICAg
ICAgIC8vIEV4cGFuZCBvdXQgb25lIGNoYXJhY3RlciB1cHN0cmVhbSBmb3Igc21hcnQgZGVsZXRl
IGFuZCByZWNhbGN1bGF0ZQogICAgICAgICAgICAgLy8gcG9zaXRpb25zIGJhc2VkIG9uIHRoaXMg
Y2hhbmdlLgogICAgICAgICAgICAgbV91cHN0cmVhbVN0YXJ0ID0gcG9zLnVwc3RyZWFtKCk7CkBA
IC0xOTEsNyArMTgwLDcgQEAKICAgICAgICAgaWYgKCFza2lwU21hcnREZWxldGUgJiYgIWhhc0xl
YWRpbmdXaGl0ZXNwYWNlQmVmb3JlQWRqdXN0bWVudCAmJiBtX2Rvd25zdHJlYW1FbmQudHJhaWxp
bmdXaGl0ZXNwYWNlUG9zaXRpb24oVlBfREVGQVVMVF9BRkZJTklUWSwgdHJ1ZSkuaXNOb3ROdWxs
KCkpIHsKICAgICAgICAgICAgIC8vIEV4cGFuZCBvdXQgb25lIGNoYXJhY3RlciBkb3duc3RyZWFt
IGZvciBzbWFydCBkZWxldGUgYW5kIHJlY2FsY3VsYXRlCiAgICAgICAgICAgICAvLyBwb3NpdGlv
bnMgYmFzZWQgb24gdGhpcyBjaGFuZ2UuCi0gICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRp
b24oZW5kLCBtX3NlbGVjdGlvblRvRGVsZXRlLmVuZEFmZmluaXR5KCkpLm5leHQoKS5kZWVwRXF1
aXZhbGVudCgpOworICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKGVuZCwgbV9zZWxl
Y3Rpb25Ub0RlbGV0ZS5lbmRBZmZpbml0eSgpKS5uZXh0KCkucG9zaXRpb24oKTsKICAgICAgICAg
ICAgIG1fdXBzdHJlYW1FbmQgPSBwb3MudXBzdHJlYW0oKTsKICAgICAgICAgICAgIG1fZG93bnN0
cmVhbUVuZCA9IHBvcy5kb3duc3RyZWFtKCk7CiAgICAgICAgICAgICBtX3RyYWlsaW5nV2hpdGVz
cGFjZSA9IG1fZG93bnN0cmVhbUVuZC50cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbihWUF9ERUZB
VUxUX0FGRklOSVRZKTsKQEAgLTIxMyw3ICsyMDIsNyBAQAogICAgIC8vCiAgICAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVFbmQoZW5kLCBtX3NlbGVjdGlvblRvRGVsZXRlLmVuZEFmZmluaXR5KCkp
OwogICAgIGlmIChpc0VuZE9mUGFyYWdyYXBoKHZpc2libGVFbmQpKSB7Ci0gICAgICAgIFBvc2l0
aW9uIHByZXZpb3VzTGluZVN0YXJ0ID0gcHJldmlvdXNMaW5lUG9zaXRpb24odmlzaWJsZUVuZCwg
MCkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgUG9zaXRpb24gcHJldmlvdXNMaW5lU3RhcnQg
PSBwcmV2aW91c0xpbmVQb3NpdGlvbih2aXNpYmxlRW5kLCAwKS5wb3NpdGlvbigpOwogICAgICAg
ICBpZiAocHJldmlvdXNMaW5lU3RhcnQuaXNOdWxsKCkgfHwgUmFuZ2VJbXBsOjpjb21wYXJlQm91
bmRhcnlQb2ludHMocHJldmlvdXNMaW5lU3RhcnQsIG1fZG93bnN0cmVhbVN0YXJ0KSA+PSAwKQog
ICAgICAgICAgICAgbV9tZXJnZUJsb2Nrc0FmdGVyRGVsZXRlID0gZmFsc2U7CiAgICAgfQpAQCAt
MjkwLDcgKzI3OSw2IEBACiAgICAgaWYgKGlzQlJPbkxpbmVCeUl0c2VsZikgewogICAgICAgICBt
X2VuZGluZ1Bvc2l0aW9uID0gUG9zaXRpb24obV9kb3duc3RyZWFtU3RhcnQubm9kZSgpLT5wYXJl
bnROb2RlKCksIG1fZG93bnN0cmVhbVN0YXJ0Lm5vZGUoKS0+bm9kZUluZGV4KCkpOwogICAgICAg
ICByZW1vdmVOb2RlKG1fZG93bnN0cmVhbVN0YXJ0Lm5vZGUoKSk7Ci0gICAgICAgIG1fZW5kaW5n
UG9zaXRpb24gPSBtX2VuZGluZ1Bvc2l0aW9uLmVxdWl2YWxlbnREZWVwUG9zaXRpb24oKTsKICAg
ICAgICAgbV9tZXJnZUJsb2Nrc0FmdGVyRGVsZXRlID0gZmFsc2U7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KQEAgLTMzNSw3ICszMjMsNyBAQAogICAgICAgICB9CiAgICAgfQogICAgIGVs
c2UgaWYgKHN0YXJ0T2Zmc2V0ID49IG1fc3RhcnROb2RlLT5jYXJldE1heE9mZnNldCgpICYmCi0g
ICAgICAgICAgICAgKG1fc3RhcnROb2RlLT5pc0F0b21pY05vZGUoKSB8fCBzdGFydE9mZnNldCA9
PSAwKSkgeworICAgICAgICAgICAgIChpc0F0b21pY05vZGUobV9zdGFydE5vZGUuZ2V0KCkpIHx8
IHN0YXJ0T2Zmc2V0ID09IDApKSB7CiAgICAgICAgIC8vIE1vdmUgdGhlIHN0YXJ0IG5vZGUgdG8g
dGhlIG5leHQgbm9kZSBpbiB0aGUgdHJlZSBzaW5jZSB0aGUgc3RhcnRPZmZzZXQgaXMgZXF1YWwg
dG8KICAgICAgICAgLy8gb3IgYmV5b25kIHRoZSBzdGFydCBub2RlJ3MgY2FyZXRNYXhPZmZzZXQg
VGhpcyBtZWFucyB0aGVyZSBpcyBub3RoaW5nIHZpc2libGUgdG8gZGVsZXRlLiAKICAgICAgICAg
Ly8gQnV0IGRvbid0IGRvIHRoaXMgaWYgdGhlIG5vZGUgaXMgbm90IGF0b21pYyAtIHdlIGRvbid0
IHdhbnQgdG8gbW92ZSBpbnRvIHRoZSBmaXJzdCBjaGlsZC4KSW5kZXg6IGtodG1sL2VkaXRpbmcv
aHRtbGVkaXRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI2Mgpk
aWZmIC11IC1yMS4yNjIgaHRtbGVkaXRpbmcuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2h0bWxlZGl0
aW5nLmNwcAkyMSBOb3YgMjAwNSAwMToyMDowMiAtMDAwMAkxLjI2MgorKysga2h0bWwvZWRpdGlu
Zy9odG1sZWRpdGluZy5jcHAJMTAgSmFuIDIwMDYgMDE6NTE6NDAgLTAwMDAKQEAgLTkxLDYgKzkx
LDI4IEBACiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKKy8vIEF0b21pYyBtZWFucyB0aGF0IHRoZSBj
b250ZW50cyBvZiB0aGUgbm9kZSBzaG91bGQgYmUgaWdub3JlZCBmb3IgdGhlIHB1cnBvc2VzIG9m
IGVkaXRpbmcuCitib29sIGlzQXRvbWljTm9kZShjb25zdCBOb2RlSW1wbCAqbm9kZSkKK3sKKyAg
ICByZXR1cm4gbm9kZSAmJiAoIW5vZGUtPmhhc0NoaWxkTm9kZXMoKSB8fCBub2RlLT5yZW5kZXJl
cigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzV2lkZ2V0KCkpOworfQorCitpbnQgbWF4RGVlcE9m
ZnNldChjb25zdCBOb2RlSW1wbCAqbm9kZSkKK3sKKyAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgp
KQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dEltcGwqPihub2RlKS0+bGVu
Z3RoKCk7CisgICAgICAgIAorICAgIGlmIChub2RlLT5oYXNDaGlsZE5vZGVzKCkpCisgICAgICAg
IHJldHVybiBub2RlLT5jaGlsZE5vZGVDb3VudCgpOworICAgIAorICAgIFJlbmRlck9iamVjdCAq
cmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIC8vIEFsbG93cyBbYnIsIDFdIGFzIGEg
cG9zaXRpb24sIHRob3VnaCB0aGF0IGlzIGluY29ycmVjdAorICAgIGlmIChub2RlLT5oYXNUYWdO
YW1lKGJyVGFnKSB8fCAocmVuZGVyZXIgJiYgKHJlbmRlcmVyLT5pc1JlcGxhY2VkKCkgfHwgcmVu
ZGVyZXItPmlzV2lkZ2V0KCkpKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gMDsK
K30KKwogdm9pZCByZWJhbGFuY2VXaGl0ZXNwYWNlSW5UZXh0Tm9kZShOb2RlSW1wbCAqbm9kZSwg
dW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQogewogICAgIHN0YXRpYyBR
UmVnRXhwIG5vblJlZ3VsYXJXaGl0ZXNwYWNlKCJbXHhhMFxuXSIpOwpAQCAtMjM4LDcgKzI2MCw4
IEBACiBib29sIGlzTGFzdFZpc2libGVQb3NpdGlvbkluU3BlY2lhbEVsZW1lbnQoY29uc3QgUG9z
aXRpb24mIHBvcykKIHsKICAgICAvLyBtYWtlIHN1cmUgdG8gZ2V0IGEgcmFuZ2UtY29tcGxpYW50
IHZlcnNpb24gb2YgdGhlIHBvc2l0aW9uCi0gICAgUG9zaXRpb24gcmFuZ2VQb3MgPSBWaXNpYmxl
UG9zaXRpb24ocG9zLCBET1dOU1RSRUFNKS5wb3NpdGlvbigpOworICAgIC8vIEZJWE1FOiByYW5n
ZVBvcyBpc24ndCBiZWluZyB1c2VkIHRvIGNyZWF0ZSBET00gUmFuZ2VzLCBzbyB3aHkgZG9lcyBp
dCBuZWVkIHRvIGJlIHJhbmdlIGNvbXBsaWFudD8KKyAgICBQb3NpdGlvbiByYW5nZVBvcyA9IFZp
c2libGVQb3NpdGlvbihwb3MsIERPV05TVFJFQU0pLnBvc2l0aW9uKCkuZXF1aXZhbGVudFJhbmdl
Q29tcGxpYW50UG9zaXRpb24oKTsKIAogICAgIFZpc2libGVQb3NpdGlvbiB2UG9zID0gVmlzaWJs
ZVBvc2l0aW9uKHJhbmdlUG9zLCBET1dOU1RSRUFNKTsKIApAQCAtMjY0LDcgKzI4Nyw4IEBACiAg
ICAgQVNTRVJUKGlzTGFzdFZpc2libGVQb3NpdGlvbkluU3BlY2lhbEVsZW1lbnQocG9zKSk7CiAK
ICAgICAvLyBtYWtlIHN1cmUgdG8gZ2V0IGEgcmFuZ2UtY29tcGxpYW50IHZlcnNpb24gb2YgdGhl
IHBvc2l0aW9uCi0gICAgUG9zaXRpb24gcmFuZ2VQb3MgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBE
T1dOU1RSRUFNKS5wb3NpdGlvbigpOworICAgIC8vIEZJWE1FOiByYW5nZVBvcyBpc24ndCBiZWlu
ZyB1c2VkIHRvIGNyZWF0ZSBET00gUmFuZ2VzLCBzbyB3aHkgZG9lcyBpdCBuZWVkIHRvIGJlIHJh
bmdlIGNvbXBsaWFudD8KKyAgICBQb3NpdGlvbiByYW5nZVBvcyA9IFZpc2libGVQb3NpdGlvbihw
b3MsIERPV05TVFJFQU0pLnBvc2l0aW9uKCkuZXF1aXZhbGVudFJhbmdlQ29tcGxpYW50UG9zaXRp
b24oKTsKIAogICAgIFZpc2libGVQb3NpdGlvbiB2UG9zID0gVmlzaWJsZVBvc2l0aW9uKHJhbmdl
UG9zLCBET1dOU1RSRUFNKTsKIApJbmRleDoga2h0bWwvZWRpdGluZy9odG1sZWRpdGluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvaHRtbGVk
aXRpbmcuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMTMKZGlmZiAtdSAtcjEuMTEzIGh0bWxl
ZGl0aW5nLmgKLS0tIGtodG1sL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAk5IE5vdiAyMDA1IDE5OjU2
OjQ4IC0wMDAwCTEuMTEzCisrKyBraHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmgJMTAgSmFuIDIw
MDYgMDE6NTE6NDAgLTAwMDAKQEAgLTU0LDYgKzU0LDkgQEAKIAogbmFtZXNwYWNlIGtodG1sIHsK
IAorYm9vbCBpc0F0b21pY05vZGUoY29uc3QgRE9NOjpOb2RlSW1wbCAqbm9kZSk7CitpbnQgbWF4
RGVlcE9mZnNldChjb25zdCBET006Ok5vZGVJbXBsICpub2RlKTsKKwogdm9pZCByZWJhbGFuY2VX
aGl0ZXNwYWNlSW5UZXh0Tm9kZShET006Ok5vZGVJbXBsICpub2RlLCB1bnNpZ25lZCBpbnQgc3Rh
cnQsIHVuc2lnbmVkIGludCBsZW5ndGgpOwogRE9NOjpET01TdHJpbmcgJm5vbkJyZWFraW5nU3Bh
Y2VTdHJpbmcoKTsKIHZvaWQgZGVyZWZOb2Rlc0luTGlzdChRUHRyTGlzdDxET006Ok5vZGVJbXBs
PiAmbGlzdCk7CkluZGV4OiBraHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcv
aW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIK
ZGlmZiAtdSAtcjEuMTIgaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAKLS0tIGtodG1sL2Vk
aXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAJMjIgRGVjIDIwMDUgMDQ6MTE6MzYg
LTAwMDAJMS4xMgorKysga2h0bWwvZWRpdGluZy9pbnNlcnRfbGluZV9icmVha19jb21tYW5kLmNw
cAkxMCBKYW4gMjAwNiAwMTo1MTo0MCAtMDAwMApAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgCiAg
ICAgaWYgKHR5cGluZ1N0eWxlICYmIHR5cGluZ1N0eWxlLT5sZW5ndGgoKSA+IDApIHsKICAgICAg
ICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb25CZWZvcmVTdHlsZSA9IGVuZGluZ1NlbGVj
dGlvbigpOwotICAgICAgICBhcHBseVN0eWxlKHR5cGluZ1N0eWxlLCBQb3NpdGlvbihub2RlVG9J
bnNlcnQsIDApLCBQb3NpdGlvbihub2RlVG9JbnNlcnQsIG5vZGVUb0luc2VydC0+bWF4RGVlcE9m
ZnNldCgpKSk7CisgICAgICAgIGFwcGx5U3R5bGUodHlwaW5nU3R5bGUsIFBvc2l0aW9uKG5vZGVU
b0luc2VydCwgMCksIFBvc2l0aW9uKG5vZGVUb0luc2VydCwgbWF4RGVlcE9mZnNldChub2RlVG9J
bnNlcnQpKSk7CiAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihzZWxlY3Rpb25CZWZvcmVTdHls
ZSk7CiAgICAgfQogCkluZGV4OiBraHRtbC9lZGl0aW5nL2luc2VydF90ZXh0X2NvbW1hbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvaW5z
ZXJ0X3RleHRfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAtdSAt
cjEuMTQgaW5zZXJ0X3RleHRfY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvaW5zZXJ0X3Rl
eHRfY29tbWFuZC5jcHAJMjEgTm92IDIwMDUgMDE6MjA6MDMgLTAwMDAJMS4xNAorKysga2h0bWwv
ZWRpdGluZy9pbnNlcnRfdGV4dF9jb21tYW5kLmNwcAkxMCBKYW4gMjAwNiAwMTo1MTo0MCAtMDAw
MApAQCAtMTYyLDcgKzE2Miw3IEBACiAKIERPTTo6UG9zaXRpb24gSW5zZXJ0VGV4dENvbW1hbmQ6
Omluc2VydFRhYihQb3NpdGlvbiBwb3MpCiB7Ci0gICAgUG9zaXRpb24gaW5zZXJ0UG9zID0gVmlz
aWJsZVBvc2l0aW9uKHBvcywgRE9XTlNUUkVBTSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBQb3Np
dGlvbiBpbnNlcnRQb3MgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBET1dOU1RSRUFNKS5wb3NpdGlv
bigpOwogICAgIE5vZGVJbXBsICpub2RlID0gaW5zZXJ0UG9zLm5vZGUoKTsKICAgICB1bnNpZ25l
ZCBpbnQgb2Zmc2V0ID0gaW5zZXJ0UG9zLm9mZnNldCgpOwogCkluZGV4OiBraHRtbC9lZGl0aW5n
L3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjMKZGlmZiAtdSAtcjEuMjMgcmVwbGFjZV9zZWxlY3Rp
b25fY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29tbWFu
ZC5jcHAJMyBKYW4gMjAwNiAwOToxOTowNiAtMDAwMAkxLjIzCisrKyBraHRtbC9lZGl0aW5nL3Jl
cGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTEwIEphbiAyMDA2IDAxOjUxOjQwIC0wMDAwCkBA
IC0zMjQsNyArMzI0LDcgQEAKICAgICAgICAgLy8gSWYgdGhlIGRlc2lyZWRTdHlsZSBpcyBub24t
emVybyBsZW5ndGgsIHRoYXQgbWVhbnMgdGhlIGN1cnJlbnQgc3R5bGUgZGlmZmVycwogICAgICAg
ICAvLyBmcm9tIHRoZSBkZXNpcmVkIGJ5IHRoZSBzdHlsZXMgcmVtYWluaW5nIGluIHRoZSBkZXNp
cmVkU3R5bGUgZGVjbGFyYXRpb24uCiAgICAgICAgIGlmIChkZXNpcmVkU3R5bGUtPmxlbmd0aCgp
ID4gMCkKLQkgICAgYXBwbHlTdHlsZShkZXNpcmVkU3R5bGUsIFBvc2l0aW9uKG5vZGUsIDApLCBQ
b3NpdGlvbihub2RlLCBub2RlLT5tYXhEZWVwT2Zmc2V0KCkpKTsKKwkgICAgYXBwbHlTdHlsZShk
ZXNpcmVkU3R5bGUsIFBvc2l0aW9uKG5vZGUsIDApLCBQb3NpdGlvbihub2RlLCBtYXhEZWVwT2Zm
c2V0KG5vZGUpKSk7CiAgICAgfQogfQogCkBAIC02ODcsNyArNjg3LDcgQEAKICAgICAgICAgICAg
IGluc2VydE5vZGVBZnRlckFuZFVwZGF0ZU5vZGVzSW5zZXJ0ZWQocmVmTm9kZSwgaW5zZXJ0aW9u
QmxvY2spOwogICAgICAgICAvLyBJbnNlcnQgdGhlIHJlc3Qgb2YgdGhlIGZyYWdtZW50IGF0IHRo
ZSBORVhUIHZpc2libGUgcG9zaXRpb24gT05MWSBJRiBwYXJ0IG9mIHRoZSBmcmFnbWVudCB3YXMg
YWxyZWFkeSBtZXJnZWQgQU5EICFpc1Byb2JhYmx5QmxvY2sKICAgICAgICAgfSBlbHNlIGlmICht
X2xhc3ROb2RlSW5zZXJ0ZWQgJiYgIWlzUHJvYmFibHlCbG9jayhyZWZOb2RlKSkgewotICAgICAg
ICAgICAgUG9zaXRpb24gcG9zID0gdmlzaWJsZVBvcy5uZXh0KCkuZGVlcEVxdWl2YWxlbnQoKS5k
b3duc3RyZWFtKCk7CisgICAgICAgICAgICBQb3NpdGlvbiBwb3MgPSB2aXNpYmxlUG9zLm5leHQo
KS5wb3NpdGlvbigpLmRvd25zdHJlYW0oKTsKICAgICAgICAgICAgIGluc2VydE5vZGVBdEFuZFVw
ZGF0ZU5vZGVzSW5zZXJ0ZWQocmVmTm9kZSwgcG9zLm5vZGUoKSwgcG9zLm9mZnNldCgpKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGluc2VydE5vZGVBdEFuZFVwZGF0ZU5vZGVzSW5z
ZXJ0ZWQocmVmTm9kZSwgaW5zZXJ0aW9uUG9zLm5vZGUoKSwgaW5zZXJ0aW9uUG9zLm9mZnNldCgp
KTsKQEAgLTc2NCwxMiArNzY0LDEyIEBACiAgICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IG5leHQgPSBwb3MubmV4dCgpOwogCiAgICAgICAgICAgICAgICAgLy8gU2VsZWN0IHVwIHRvIHRo
ZSBwYXJhZ3JhcGggc2VwYXJhdG9yIHRoYXQgd2FzIGFkZGVkLgotICAgICAgICAgICAgICAgIGxh
c3RQb3NpdGlvblRvU2VsZWN0ID0gbmV4dC5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKTsK
KyAgICAgICAgICAgICAgICBsYXN0UG9zaXRpb25Ub1NlbGVjdCA9IG5leHQucG9zaXRpb24oKS5k
b3duc3RyZWFtKCk7CiAgICAgICAgICAgICAgICAgdXBkYXRlTm9kZXNJbnNlcnRlZChsYXN0UG9z
aXRpb25Ub1NlbGVjdC5ub2RlKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAvLyBTZWxlY3QgdXAgdG8gdGhlIHByZWV4aXNpbmcgcGFyYWdyYXBoIHNlcGFyYXRvci4K
ICAgICAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IHBvcy5uZXh0KCk7Ci0gICAg
ICAgICAgICAgICAgbGFzdFBvc2l0aW9uVG9TZWxlY3QgPSBuZXh0LmRlZXBFcXVpdmFsZW50KCku
ZG93bnN0cmVhbSgpOworICAgICAgICAgICAgICAgIGxhc3RQb3NpdGlvblRvU2VsZWN0ID0gbmV4
dC5wb3NpdGlvbigpLmRvd25zdHJlYW0oKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0gCkBAIC03OTQsMTAgKzc5NCwxMCBAQAogICAgICAgICAgICAgTm9kZUltcGwgKm5vZGUgPSBi
ZXlvbmRFbmROb2RlOwogICAgICAgICAgICAgTm9kZUltcGwgKnJlZk5vZGUgPSBtX2xhc3ROb2Rl
SW5zZXJ0ZWQuZ2V0KCk7CiAgICAgICAgICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICAgICAg
ICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgICAgICAg
ICAgICAgIC8vIFN0b3AgYXQgdGhlIGZpcnN0IHRhYmxlIG9yIGJsb2NrLgotICAgICAgICAgICAg
ICAgIGlmIChyZW5kZXJlciAmJiAocmVuZGVyZXItPmlzQmxvY2tGbG93KCkgfHwgcmVuZGVyZXIt
PmlzVGFibGUoKSkpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmlzQmxvY2tGbG93T3JUYWJs
ZSgpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgTm9kZUltcGwgKm5leHQgPSBub2RlLT5uZXh0U2libGluZygpOwogICAg
ICAgICAgICAgICAgIGJsb2Nrcy5hcHBlbmQobm9kZS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVu
dCgpKTsKICAgICAgICAgICAgICAgICBjb21wdXRlQW5kU3RvcmVOb2RlRGVzaXJlZFN0eWxlKG5v
ZGUsIHN0eWxlcyk7CkluZGV4OiBraHRtbC9lZGl0aW5nL3R5cGluZ19jb21tYW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3R5cGluZ19j
b21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXUgLXIxLjUgdHlwaW5n
X2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL3R5cGluZ19jb21tYW5kLmNwcAkyMSBOb3Yg
MjAwNSAwMToyMDowNSAtMDAwMAkxLjUKKysrIGtodG1sL2VkaXRpbmcvdHlwaW5nX2NvbW1hbmQu
Y3BwCTEwIEphbiAyMDA2IDAxOjUxOjQwIC0wMDAwCkBAIC0zMzUsOCArMzM1LDggQEAKICAgICAg
ICAgICAgIC8vIERvIG5vdGhpbmcgaW4gdGhlIGNhc2UgdGhhdCB0aGUgY2FyZXQgaXMgYXQgdGhl
IHN0YXJ0IG9mIGEKICAgICAgICAgICAgIC8vIHJvb3QgZWRpdGFibGUgZWxlbWVudCBvciBhdCB0
aGUgc3RhcnQgb2YgYSBkb2N1bWVudC4KICAgICAgICAgICAgIFBvc2l0aW9uIHBvcyhlbmRpbmdT
ZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAgICAgICAgICAgIFBvc2l0aW9uIHN0YXJ0ID0gVmlzaWJs
ZVBvc2l0aW9uKHBvcywgZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnRBZmZpbml0eSgpKS5wcmV2aW91
cygpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgICAgICBQb3NpdGlvbiBlbmQgPSBWaXNpYmxl
UG9zaXRpb24ocG9zLCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydEFmZmluaXR5KCkpLmRlZXBFcXVp
dmFsZW50KCk7CisgICAgICAgICAgICBQb3NpdGlvbiBzdGFydCA9IFZpc2libGVQb3NpdGlvbihw
b3MsIGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0QWZmaW5pdHkoKSkucHJldmlvdXMoKS5wb3NpdGlv
bigpOworICAgICAgICAgICAgUG9zaXRpb24gZW5kID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgZW5k
aW5nU2VsZWN0aW9uKCkuc3RhcnRBZmZpbml0eSgpKS5wb3NpdGlvbigpOwogICAgICAgICAgICAg
aWYgKHN0YXJ0LmlzTm90TnVsbCgpICYmIGVuZC5pc05vdE51bGwoKSAmJiBzdGFydC5ub2RlKCkt
PnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSBlbmQubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50
KCkpCiAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVG9EZWxldGUgPSBTZWxlY3Rpb25Db250cm9s
bGVyKHN0YXJ0LCBTRUxfREVGQVVMVF9BRkZJTklUWSwgZW5kLCBTRUxfREVGQVVMVF9BRkZJTklU
WSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTM2Niw4ICszNjYsOCBAQAogICAgICAgICAgICAg
Ly8gRG8gbm90aGluZyBpbiB0aGUgY2FzZSB0aGF0IHRoZSBjYXJldCBpcyBhdCB0aGUgc3RhcnQg
b2YgYQogICAgICAgICAgICAgLy8gcm9vdCBlZGl0YWJsZSBlbGVtZW50IG9yIGF0IHRoZSBzdGFy
dCBvZiBhIGRvY3VtZW50LgogICAgICAgICAgICAgUG9zaXRpb24gcG9zKGVuZGluZ1NlbGVjdGlv
bigpLnN0YXJ0KCkpOwotICAgICAgICAgICAgUG9zaXRpb24gc3RhcnQgPSBWaXNpYmxlUG9zaXRp
b24ocG9zLCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydEFmZmluaXR5KCkpLm5leHQoKS5kZWVwRXF1
aXZhbGVudCgpOwotICAgICAgICAgICAgUG9zaXRpb24gZW5kID0gVmlzaWJsZVBvc2l0aW9uKHBv
cywgZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnRBZmZpbml0eSgpKS5kZWVwRXF1aXZhbGVudCgpOwor
ICAgICAgICAgICAgUG9zaXRpb24gc3RhcnQgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBlbmRpbmdT
ZWxlY3Rpb24oKS5zdGFydEFmZmluaXR5KCkpLm5leHQoKS5wb3NpdGlvbigpOworICAgICAgICAg
ICAgUG9zaXRpb24gZW5kID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgZW5kaW5nU2VsZWN0aW9uKCku
c3RhcnRBZmZpbml0eSgpKS5wb3NpdGlvbigpOwogICAgICAgICAgICAgaWYgKHN0YXJ0LmlzTm90
TnVsbCgpICYmIGVuZC5pc05vdE51bGwoKSAmJiBzdGFydC5ub2RlKCktPnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKSA9PSBlbmQubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkpCiAgICAgICAgICAg
ICAgICAgc2VsZWN0aW9uVG9EZWxldGUgPSBTZWxlY3Rpb25Db250cm9sbGVyKHN0YXJ0LCBTRUxf
REVGQVVMVF9BRkZJTklUWSwgZW5kLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7CiAgICAgICAgICAg
ICBicmVhazsKSW5kZXg6IGtodG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3Bv
c2l0aW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42OApkaWZmIC11IC1yMS42OCB2aXNp
YmxlX3Bvc2l0aW9uLmNwcAotLS0ga2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAkz
IEphbiAyMDA2IDEyOjI4OjI1IC0wMDAwCTEuNjgKKysrIGtodG1sL2VkaXRpbmcvdmlzaWJsZV9w
b3NpdGlvbi5jcHAJMTAgSmFuIDIwMDYgMDE6NTE6NDAgLTAwMDAKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5j
bHVkZSAidmlzaWJsZV91bml0cy5oIgotCisjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNs
dWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2xpbmUuaCIKICNp
bmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgpAQCAtMjIyLDcgKzIyMiw3IEBACiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChyZW5kZXJlci0+aXNSZXBsYWNlZCgpKQot
ICAgICAgICByZXR1cm4gcG9zLm9mZnNldCgpID09IDAgfHwgcG9zLm9mZnNldCgpID09IDE7Cisg
ICAgICAgIHJldHVybiBwb3Mub2Zmc2V0KCkgPT0gMCB8fCBwb3Mub2Zmc2V0KCkgPT0gbWF4RGVl
cE9mZnNldChwb3Mubm9kZSgpKTsKIAogICAgIGlmIChyZW5kZXJlci0+aXNCUigpKSB7CiAgICAg
ICAgIGlmIChwb3Mub2Zmc2V0KCkgPT0gMCkgewpAQCAtMjM3LDExICsyMzcsMTEgQEAKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKKyAgICAvLyBUcnVlIGlmIGF0IGEgcmVuZGVy
ZWQgb2Zmc2V0IGluIGEgdGV4dCBub2RlCiAgICAgaWYgKHJlbmRlcmVyLT5pc1RleHQoKSkgewog
ICAgICAgICBSZW5kZXJUZXh0ICp0ZXh0UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0
ICo+KHJlbmRlcmVyKTsKICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94ICpib3ggPSB0ZXh0UmVu
ZGVyZXItPmZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewog
ICAgICAgICAgICAgaWYgKHBvcy5vZmZzZXQoKSA+PSBib3gtPm1fc3RhcnQgJiYgcG9zLm9mZnNl
dCgpIDw9IGJveC0+bV9zdGFydCArIGJveC0+bV9sZW4pIHsKLSAgICAgICAgICAgICAgICAvLyBy
ZXR1cm4gdHJ1ZSBpZiBpbiBhIHRleHQgbm9kZQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNTAsNyArMjUwLDYgQEAKICAgICBpZiAo
cmVuZGVyZXItPmlzQmxvY2tGbG93KCkgJiYKICAgICAgICAhaGFzUmVuZGVyZWRDaGlsZHJlbldp
dGhIZWlnaHQocmVuZGVyZXIpICYmCiAgICAgICAgKHJlbmRlcmVyLT5oZWlnaHQoKSB8fCBwb3Mu
bm9kZSgpLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSkgewotICAgICAgICAvLyByZXR1cm4gdHJ1ZSBm
b3Igb2Zmc2V0IDAgaW50byByZW5kZXJlZCBibG9ja3MgdGhhdCBhcmUgZW1wdHkgb2YgcmVuZGVy
ZWQga2lkcywgYnV0IGhhdmUgYSBoZWlnaHQKICAgICAgICAgcmV0dXJuIHBvcy5vZmZzZXQoKSA9
PSAwOwogICAgIH0KICAgICAKQEAgLTI2NSw3ICsyNjQsNyBAQAogICAgIGlmICghbm9kZSkKICAg
ICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAgICAgCi0gICAgaWYgKGlzQXRvbWljTm9kZShub2Rl
KSkKKyAgICBpZiAoaXNDYW5kaWRhdGUocG9zKSB8fCBpc0F0b21pY05vZGUobm9kZSkpCiAgICAg
ICAgIHJldHVybiBwb3M7CiAKICAgICBpZiAob2Zmc2V0ID49IChpbnQpbm9kZS0+Y2hpbGROb2Rl
Q291bnQoKSkgewpAQCAtMjc0LDEzICsyNzMsMTMgQEAKICAgICAgICAgICAgIGlmICghY2hpbGQp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBub2RlID0gY2hpbGQ7Ci0gICAg
ICAgIH0gd2hpbGUgKCFpc0F0b21pY05vZGUobm9kZSkpOworICAgICAgICB9IHdoaWxlICghaXNB
dG9taWNOb2RlKG5vZGUpICYmICFpc0NhbmRpZGF0ZShQb3NpdGlvbihub2RlLCBub2RlLT5jYXJl
dE1heE9mZnNldCgpKSkpOwogICAgICAgICByZXR1cm4gUG9zaXRpb24obm9kZSwgbm9kZS0+Y2Fy
ZXRNYXhPZmZzZXQoKSk7CiAgICAgfQogICAgIAogICAgIG5vZGUgPSBub2RlLT5jaGlsZE5vZGUo
b2Zmc2V0KTsKICAgICBBU1NFUlQobm9kZSk7Ci0gICAgd2hpbGUgKCFpc0F0b21pY05vZGUobm9k
ZSkpIHsKKyAgICB3aGlsZSAoIWlzQXRvbWljTm9kZShub2RlKSAmJiAhaXNDYW5kaWRhdGUoUG9z
aXRpb24obm9kZSwgbm9kZS0+Y2FyZXRNYXhPZmZzZXQoKSkpKSB7CiAgICAgICAgIE5vZGVJbXBs
ICpjaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgaWYgKCFjaGlsZCkKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMjg5LDU0ICsyODgsMTEgQEAKICAgICByZXR1cm4gUG9zaXRpb24o
bm9kZSwgMCk7CiB9CiAKLVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6ZG93bnN0cmVhbURlZXBF
cXVpdmFsZW50KCkgY29uc3QKLXsKLSAgICBQb3NpdGlvbiBwb3MgPSBtX2RlZXBQb3NpdGlvbjsK
LSAgICAKLSAgICBpZiAocG9zLmlzTnVsbCgpIHx8IHBvcy5hdEVuZCgpKQotICAgICAgICByZXR1
cm4gcG9zOwotCi0gICAgUG9zaXRpb24gZG93bnN0cmVhbVRlc3QgPSBwb3MuZG93bnN0cmVhbSgp
OwotCi0gICAgUG9zaXRpb24gY3VycmVudCA9IHBvczsKLSAgICB3aGlsZSAoIWN1cnJlbnQuYXRF
bmQoKSkgewotICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0KFVzaW5nQ29tcG9zZWRDaGFy
YWN0ZXJzKTsKLSAgICAgICAgaWYgKGlzQ2FuZGlkYXRlKGN1cnJlbnQpKSB7Ci0gICAgICAgICAg
ICBpZiAoZG93bnN0cmVhbVRlc3QgIT0gY3VycmVudC5kb3duc3RyZWFtKCkpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBwb3MgPSBjdXJyZW50OwotICAgICAgICB9Ci0gICAg
fQotICAgIAotICAgIHJldHVybiBwb3M7Ci19Ci0KLVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6
cmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGNvbnN0IFBvc2l0aW9uICZwb3MpCi17Ci0gICAgTm9k
ZUltcGwgKm5vZGUgPSBwb3Mubm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJu
IFBvc2l0aW9uKCk7Ci0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgY2xhbXBzIG91dC1vZi1yYW5n
ZSB2YWx1ZXMuCi0gICAgLy8gSW5zdGVhZCB3ZSBzaG91bGQgcHJvYmFibHkgYXNzZXJ0LCBhbmQg
bm90IHVzZSBzdWNoIHZhbHVlcy4KLQotICAgIGludCBvZmZzZXQgPSBwb3Mub2Zmc2V0KCk7Ci0g
ICAgaWYgKCFvZmZzZXRJbkNoYXJhY3RlcnMobm9kZS0+bm9kZVR5cGUoKSkgJiYgaXNBdG9taWNO
b2RlKG5vZGUpICYmIG9mZnNldCA+IDApCi0gICAgICAgIHJldHVybiBQb3NpdGlvbihub2RlLT5w
YXJlbnROb2RlKCksIG5vZGUtPm5vZGVJbmRleCgpICsgMSk7Ci0KLSAgICByZXR1cm4gUG9zaXRp
b24obm9kZSwga01heCgwLCBrTWluKG9mZnNldCwgbWF4T2Zmc2V0KG5vZGUpKSkpOwotfQotCiBp
bnQgVmlzaWJsZVBvc2l0aW9uOjptYXhPZmZzZXQoY29uc3QgTm9kZUltcGwgKm5vZGUpCiB7CiAg
ICAgcmV0dXJuIG9mZnNldEluQ2hhcmFjdGVycyhub2RlLT5ub2RlVHlwZSgpKSA/IChpbnQpc3Rh
dGljX2Nhc3Q8Y29uc3QgQ2hhcmFjdGVyRGF0YUltcGwgKj4obm9kZSktPmxlbmd0aCgpIDogKGlu
dClub2RlLT5jaGlsZE5vZGVDb3VudCgpOwogfQogCi1ib29sIFZpc2libGVQb3NpdGlvbjo6aXNB
dG9taWNOb2RlKGNvbnN0IE5vZGVJbXBsICpub2RlKQotewotICAgIHJldHVybiBub2RlICYmICgh
bm9kZS0+aGFzQ2hpbGROb2RlcygpIHx8IChub2RlLT5oYXNUYWdOYW1lKG9iamVjdFRhZykgJiYg
bm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkpKTsKLX0K
LQogUUNoYXIgVmlzaWJsZVBvc2l0aW9uOjpjaGFyYWN0ZXIoKSBjb25zdAogewogICAgIFBvc2l0
aW9uIHBvcyA9IHBvc2l0aW9uKCk7CkBAIC0zOTMsOCArMzQ5LDggQEAKIAogUGFzc1JlZlB0cjxS
YW5nZUltcGw+IG1ha2VSYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnN0YXJ0LCBjb25zdCBW
aXNpYmxlUG9zaXRpb24gJmVuZCkKIHsKLSAgICBQb3NpdGlvbiBzID0gc3RhcnQucG9zaXRpb24o
KTsKLSAgICBQb3NpdGlvbiBlID0gZW5kLnBvc2l0aW9uKCk7CisgICAgUG9zaXRpb24gcyA9IHN0
YXJ0LnBvc2l0aW9uKCkuZXF1aXZhbGVudFJhbmdlQ29tcGxpYW50UG9zaXRpb24oKTsKKyAgICBQ
b3NpdGlvbiBlID0gZW5kLnBvc2l0aW9uKCkuZXF1aXZhbGVudFJhbmdlQ29tcGxpYW50UG9zaXRp
b24oKTsKICAgICByZXR1cm4gbmV3IFJhbmdlSW1wbChzLm5vZGUoKS0+Z2V0RG9jdW1lbnQoKSwg
cy5ub2RlKCksIHMub2Zmc2V0KCksIGUubm9kZSgpLCBlLm9mZnNldCgpKTsKIH0KIApAQCAtNDEw
LDUwICszNjYsNTYgQEAKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHItPmVuZENvbnRhaW5l
cihleGNlcHRpb24pLCByLT5lbmRPZmZzZXQoZXhjZXB0aW9uKSwgYWZmaW5pdHkpOwogfQogCi1i
b29sIHNldFN0YXJ0KFJhbmdlSW1wbCAqciwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQorYm9v
bCBzZXRTdGFydChSYW5nZUltcGwgKnIsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBv
c2l0aW9uKQogewogICAgIGlmICghcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFBvc2l0
aW9uIHAgPSBjLnBvc2l0aW9uKCk7CisgICAgUG9zaXRpb24gcCA9IHZpc2libGVQb3NpdGlvbi5w
b3NpdGlvbigpLmVxdWl2YWxlbnRSYW5nZUNvbXBsaWFudFBvc2l0aW9uKCk7CiAgICAgaW50IGNv
ZGUgPSAwOwogICAgIHItPnNldFN0YXJ0KHAubm9kZSgpLCBwLm9mZnNldCgpLCBjb2RlKTsKICAg
ICByZXR1cm4gY29kZSA9PSAwOwogfQogCi1ib29sIHNldEVuZChSYW5nZUltcGwgKnIsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiAmYykKK2Jvb2wgc2V0RW5kKFJhbmdlSW1wbCAqciwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9zaXRpb24pCiB7CiAgICAgaWYgKCFyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgUG9zaXRpb24gcCA9IGMucG9zaXRpb24oKTsKKyAgICBQb3NpdGlv
biBwID0gdmlzaWJsZVBvc2l0aW9uLnBvc2l0aW9uKCkuZXF1aXZhbGVudFJhbmdlQ29tcGxpYW50
UG9zaXRpb24oKTsKICAgICBpbnQgY29kZSA9IDA7CiAgICAgci0+c2V0RW5kKHAubm9kZSgpLCBw
Lm9mZnNldCgpLCBjb2RlKTsKICAgICByZXR1cm4gY29kZSA9PSAwOwogfQogCi1ET006Ok5vZGVJ
bXBsICplbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdnAp
CitET006Ok5vZGVJbXBsICplbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KGNvbnN0IFZpc2libGVQ
b3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uKQogewotICAgIGlmICh2cC5pc051bGwoKSkKKyAgICBp
ZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAg
IHJldHVybiB2cC5wb3NpdGlvbigpLm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgp
OworICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb24ucG9zaXRpb24oKS5ub2RlKCktPmVuY2xvc2lu
Z0Jsb2NrRmxvd0VsZW1lbnQoKTsKIH0KIAotYm9vbCBpc0ZpcnN0VmlzaWJsZVBvc2l0aW9uSW5O
b2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcG9zLCBjb25zdCBOb2RlSW1wbCAqbm9kZSkKK2Jv
b2wgaXNGaXJzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZp
c2libGVQb3NpdGlvbiwgY29uc3QgTm9kZUltcGwgKm5vZGUpCiB7Ci0gICAgaWYgKHBvcy5pc051
bGwoKSkKKyAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgaWYgKCF2aXNpYmxlUG9zaXRpb24ucG9zaXRpb24oKS5ub2RlKCkt
PmlzQW5jZXN0b3Iobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAg
VmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzID0gcG9zLnByZXZpb3VzKCk7Ci0gICAgcmV0dXJuIHBy
ZXZpb3VzLmlzTnVsbCgpIHx8ICFwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNB
bmNlc3Rvcihub2RlKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMgPSB2aXNpYmxlUG9z
aXRpb24ucHJldmlvdXMoKTsKKyAgICByZXR1cm4gcHJldmlvdXMuaXNOdWxsKCkgfHwgIXByZXZp
b3VzLnBvc2l0aW9uKCkubm9kZSgpLT5pc0FuY2VzdG9yKG5vZGUpOwogfQogCi1ib29sIGlzTGFz
dFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcywgY29uc3Qg
Tm9kZUltcGwgKm5vZGUpCitib29sIGlzTGFzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBW
aXNpYmxlUG9zaXRpb24gJnZpc2libGVQb3NpdGlvbiwgY29uc3QgTm9kZUltcGwgKm5vZGUpCiB7
Ci0gICAgaWYgKHBvcy5pc051bGwoKSkKKyAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCF2aXNpYmxlUG9zaXRpb24u
cG9zaXRpb24oKS5ub2RlKCktPmlzQW5jZXN0b3Iobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIG5leHQgPSBwb3MubmV4dCgpOwotICAg
IHJldHVybiBuZXh0LmlzTnVsbCgpIHx8ICFuZXh0LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5p
c0FuY2VzdG9yKG5vZGUpOworICAgIFZpc2libGVQb3NpdGlvbiBuZXh0ID0gdmlzaWJsZVBvc2l0
aW9uLm5leHQoKTsKKyAgICByZXR1cm4gbmV4dC5pc051bGwoKSB8fCAhbmV4dC5wb3NpdGlvbigp
Lm5vZGUoKS0+aXNBbmNlc3Rvcihub2RlKTsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIERPTQpJbmRl
eDoga2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMzUKZGlmZiAtdSAtcjEuMzUgdmlzaWJsZV9wb3NpdGlvbi5oCi0t
LSBraHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uaAkzIEphbiAyMDA2IDA5OjE5OjA3IC0w
MDAwCTEuMzUKKysrIGtodG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5oCTEwIEphbiAyMDA2
IDAxOjUxOjQwIC0wMDAwCkBAIC03MSwxMiArNzEsMTAgQEAKICAgICBib29sIGlzTnVsbCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVlcFBvc2l0aW9uLmlzTnVsbCgpOyB9CiAgICAgYm9vbCBpc05vdE51
bGwoKSBjb25zdCB7IHJldHVybiBtX2RlZXBQb3NpdGlvbi5pc05vdE51bGwoKTsgfQogCi0gICAg
UG9zaXRpb24gcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiByYW5nZUNvbXBsaWFudEVxdWl2YWxl
bnQobV9kZWVwUG9zaXRpb24pOyB9Ci0gICAgUG9zaXRpb24gZGVlcEVxdWl2YWxlbnQoKSBjb25z
dCB7IHJldHVybiBtX2RlZXBQb3NpdGlvbjsgfQorICAgIFBvc2l0aW9uIHBvc2l0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9kZWVwUG9zaXRpb247IH0KKyAgICAKICAgICBFQWZmaW5pdHkgYWZmaW5p
dHkoKSBjb25zdCB7IGFzc2VydChtX2FmZmluaXR5ID09IFVQU1RSRUFNIHx8IG1fYWZmaW5pdHkg
PT0gRE9XTlNUUkVBTSk7IHJldHVybiBtX2FmZmluaXR5OyB9CiAgICAgdm9pZCBzZXRBZmZpbml0
eShFQWZmaW5pdHkgYWZmaW5pdHkpIHsgbV9hZmZpbml0eSA9IGFmZmluaXR5OyB9Ci0gICAgCi0g
ICAgUG9zaXRpb24gZG93bnN0cmVhbURlZXBFcXVpdmFsZW50KCkgY29uc3Q7CiAKICAgICBmcmll
bmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYSwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICZiKTsKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZpc2libGVQ
b3NpdGlvbiAmYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZiKTsKQEAgLTkzLDYgKzkxLDggQEAK
ICAgICBRQ2hhciBjaGFyYWN0ZXIoKSBjb25zdDsKICAgICAKICAgICB2b2lkIGRlYnVnUG9zaXRp
b24oY29uc3QgY2hhciAqbXNnID0gIiIpIGNvbnN0OworICAgIAorICAgIHN0YXRpYyBQb3NpdGlv
biBkZWVwRXF1aXZhbGVudChjb25zdCBQb3NpdGlvbiAmcG9zaXRpb24pOwogCiAjaWZuZGVmIE5E
RUJVRwogICAgIHZvaWQgZm9ybWF0Rm9yRGVidWdnZXIoY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBs
ZW5ndGgpIGNvbnN0OwpAQCAtMTA0LDExICsxMDQsNyBAQAogICAgIHZvaWQgaW5pdFVwc3RyZWFt
KGNvbnN0IFBvc2l0aW9uICYpOwogICAgIHZvaWQgaW5pdERvd25zdHJlYW0oY29uc3QgUG9zaXRp
b24gJik7CiAKLSAgICBzdGF0aWMgUG9zaXRpb24gZGVlcEVxdWl2YWxlbnQoY29uc3QgUG9zaXRp
b24gJik7Ci0gICAgc3RhdGljIFBvc2l0aW9uIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChjb25z
dCBQb3NpdGlvbiAmKTsKLQogICAgIHN0YXRpYyBpbnQgbWF4T2Zmc2V0KGNvbnN0IE5vZGVJbXBs
ICopOwotICAgIHN0YXRpYyBib29sIGlzQXRvbWljTm9kZShjb25zdCBOb2RlSW1wbCAqKTsKICAg
ICAKICAgICBzdGF0aWMgUG9zaXRpb24gcHJldmlvdXNWaXNpYmxlUG9zaXRpb24oY29uc3QgUG9z
aXRpb24gJik7CiAgICAgc3RhdGljIFBvc2l0aW9uIG5leHRWaXNpYmxlUG9zaXRpb24oY29uc3Qg
UG9zaXRpb24gJik7CkluZGV4OiBraHRtbC9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV91
bml0cy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDcKZGlmZiAtdSAtcjEuNDcgdmlzaWJs
ZV91bml0cy5jcHAKLS0tIGtodG1sL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJMjIgRGVjIDIw
MDUgMDQ6MTE6MzcgLTAwMDAJMS40NworKysga2h0bWwvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNw
cAkxMCBKYW4gMjAwNiAwMTo1MTo0MCAtMDAwMApAQCAtNDksNyArNDksNyBAQAogCiBzdGF0aWMg
VmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZj
LCB1bnNpZ25lZCAoKnNlYXJjaEZ1bmN0aW9uKShjb25zdCBRQ2hhciAqLCB1bnNpZ25lZCkpCiB7
Ci0gICAgUG9zaXRpb24gcG9zID0gYy5kZWVwRXF1aXZhbGVudCgpOworICAgIFBvc2l0aW9uIHBv
cyA9IGMucG9zaXRpb24oKTsKICAgICBOb2RlSW1wbCAqbiA9IHBvcy5ub2RlKCk7CiAgICAgaWYg
KCFuKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CkBAIC0xMjYsNyArMTI2LDcg
QEAKIAogc3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBv
c2l0aW9uICZjLCB1bnNpZ25lZCAoKnNlYXJjaEZ1bmN0aW9uKShjb25zdCBRQ2hhciAqLCB1bnNp
Z25lZCkpCiB7Ci0gICAgUG9zaXRpb24gcG9zID0gYy5kZWVwRXF1aXZhbGVudCgpOworICAgIFBv
c2l0aW9uIHBvcyA9IGMucG9zaXRpb24oKTsKICAgICBOb2RlSW1wbCAqbiA9IHBvcy5ub2RlKCk7
CiAgICAgaWYgKCFuKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CkBAIC0yNzIs
NyArMjcyLDcgQEAKIAogc3RhdGljIFJvb3RJbmxpbmVCb3ggKnJvb3RCb3hGb3JMaW5lKGNvbnN0
IFZpc2libGVQb3NpdGlvbiAmYykKIHsKLSAgICBQb3NpdGlvbiBwID0gYy5kZWVwRXF1aXZhbGVu
dCgpOworICAgIFBvc2l0aW9uIHAgPSBjLnBvc2l0aW9uKCk7CiAgICAgTm9kZUltcGwgKm5vZGUg
PSBwLm5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzYxLDcg
KzM2MSw3IEBACiAKIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0xpbmVQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24gJmMsIGludCB4KQogewotICAgIFBvc2l0aW9uIHAgPSBjLmFmZmluaXR5
KCkgPT0gVVBTVFJFQU0gPyBjLmRlZXBFcXVpdmFsZW50KCkgOiBjLmRvd25zdHJlYW1EZWVwRXF1
aXZhbGVudCgpOworICAgIFBvc2l0aW9uIHAgPSBjLnBvc2l0aW9uKCk7CiAgICAgTm9kZUltcGwg
Km5vZGUgPSBwLm5vZGUoKTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmdldERvY3VtZW50KCkp
CiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKQEAgLTQyNCw3ICs0MjQsNyBAQAog
CiBWaXNpYmxlUG9zaXRpb24gbmV4dExpbmVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24g
JmMsIGludCB4KQogewotICAgIFBvc2l0aW9uIHAgPSBjLmFmZmluaXR5KCkgPT0gVVBTVFJFQU0g
PyBjLmRlZXBFcXVpdmFsZW50KCkgOiBjLmRvd25zdHJlYW1EZWVwRXF1aXZhbGVudCgpOworICAg
IFBvc2l0aW9uIHAgPSBjLnBvc2l0aW9uKCk7CiAgICAgTm9kZUltcGwgKm5vZGUgPSBwLm5vZGUo
KTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmdldERvY3VtZW50KCkpCiAgICAgICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oKTsKQEAgLTUzNCw3ICs1MzQsNyBAQAogCiBWaXNpYmxlUG9zaXRp
b24gc3RhcnRPZlBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMpCiB7Ci0gICAgUG9z
aXRpb24gcCA9IGMuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBQb3NpdGlvbiBwID0gYy5wb3NpdGlv
bigpOwogICAgIE5vZGVJbXBsICpzdGFydE5vZGUgPSBwLm5vZGUoKTsKICAgICBpZiAoIXN0YXJ0
Tm9kZSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwpAQCAtNTgxLDcgKzU4MSw3
IEBACiAgICAgaWYgKGMuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24o
KTsKIAotICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVpdmFsZW50KCk7CisgICAgUG9zaXRpb24g
cCA9IGMucG9zaXRpb24oKTsKICAgICBOb2RlSW1wbCAqc3RhcnROb2RlID0gcC5ub2RlKCk7CiAg
ICAgTm9kZUltcGwgKnN0YXJ0QmxvY2sgPSBzdGFydE5vZGUtPmVuY2xvc2luZ0Jsb2NrRmxvd0Vs
ZW1lbnQoKTsKICAgICBOb2RlSW1wbCAqc3RheUluc2lkZUJsb2NrID0gc3RhcnRCbG9jazsKQEAg
LTY3MCw3ICs2NzAsNyBAQAogCiBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZkJsb2NrKGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmYykKIHsKLSAgICBQb3NpdGlvbiBwID0gYy5kZWVwRXF1aXZhbGVudCgp
OworICAgIFBvc2l0aW9uIHAgPSBjLnBvc2l0aW9uKCk7CiAgICAgTm9kZUltcGwgKnN0YXJ0Tm9k
ZSA9IHAubm9kZSgpOwogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKCk7CkBAIC02NzksNyArNjc5LDcgQEAKIAogVmlzaWJsZVBvc2l0aW9uIGVuZE9m
QmxvY2soY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQogewotICAgIFBvc2l0aW9uIHAgPSBjLmRl
ZXBFcXVpdmFsZW50KCk7CisgICAgUG9zaXRpb24gcCA9IGMucG9zaXRpb24oKTsKIAogICAgIE5v
ZGVJbXBsICpzdGFydE5vZGUgPSBwLm5vZGUoKTsKICAgICBpZiAoIXN0YXJ0Tm9kZSkKQEAgLTcw
OSw3ICs3MDksNyBAQAogCiBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZkRvY3VtZW50KGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmYykKIHsKLSAgICBQb3NpdGlvbiBwID0gYy5kZWVwRXF1aXZhbGVudCgp
OworICAgIFBvc2l0aW9uIHAgPSBjLnBvc2l0aW9uKCk7CiAgICAgTm9kZUltcGwgKm5vZGUgPSBw
Lm5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24o
KTsKQEAgLTcyMyw3ICs3MjMsNyBAQAogCiBWaXNpYmxlUG9zaXRpb24gZW5kT2ZEb2N1bWVudChj
b25zdCBWaXNpYmxlUG9zaXRpb24gJmMpCiB7Ci0gICAgUG9zaXRpb24gcCA9IGMuZGVlcEVxdWl2
YWxlbnQoKTsKKyAgICBQb3NpdGlvbiBwID0gYy5wb3NpdGlvbigpOwogICAgIE5vZGVJbXBsICpu
b2RlID0gcC5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKCk7CkBAIC03NDEsMTEgKzc0MSwxMSBAQAogCiBib29sIGluU2FtZURvY3VtZW50KGNv
bnN0IFZpc2libGVQb3NpdGlvbiAmYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZiKQogewotICAg
IFBvc2l0aW9uIGFwID0gYS5kZWVwRXF1aXZhbGVudCgpOworICAgIFBvc2l0aW9uIGFwID0gYS5w
b3NpdGlvbigpOwogICAgIE5vZGVJbXBsICphbiA9IGFwLm5vZGUoKTsKICAgICBpZiAoIWFuKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUG9zaXRpb24gYnAgPSBiLmRlZXBFcXVpdmFsZW50
KCk7CisgICAgUG9zaXRpb24gYnAgPSBiLnBvc2l0aW9uKCk7CiAgICAgTm9kZUltcGwgKmJuID0g
YnAubm9kZSgpOwogICAgIGlmIChhbiA9PSBibikKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC03
NjcsNyArNzY3LDcgQEAKIAogVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZFZGl0YWJsZUNvbnRlbnQo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQogewotICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVp
dmFsZW50KCk7CisgICAgUG9zaXRpb24gcCA9IGMucG9zaXRpb24oKTsKICAgICBOb2RlSW1wbCAq
bm9kZSA9IHAubm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbigpOwpAQCAtNzc3LDcgKzc3Nyw3IEBACiAKIFZpc2libGVQb3NpdGlvbiBlbmRPZkVk
aXRhYmxlQ29udGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMpCiB7Ci0gICAgUG9zaXRpb24g
cCA9IGMuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBQb3NpdGlvbiBwID0gYy5wb3NpdGlvbigpOwog
ICAgIE5vZGVJbXBsICpub2RlID0gcC5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CkBAIC03OTEsMTIgKzc5MSwxMiBAQAogCiBib29sIGlu
U2FtZUVkaXRhYmxlQ29udGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24gJmEsIGNvbnN0IFZpc2li
bGVQb3NpdGlvbiAmYikKIHsKLSAgICBQb3NpdGlvbiBhcCA9IGEuZGVlcEVxdWl2YWxlbnQoKTsK
KyAgICBQb3NpdGlvbiBhcCA9IGEucG9zaXRpb24oKTsKICAgICBOb2RlSW1wbCAqYW4gPSBhcC5u
b2RlKCk7CiAgICAgaWYgKCFhbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAg
ICBQb3NpdGlvbiBicCA9IGIuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBQb3NpdGlvbiBicCA9IGIu
cG9zaXRpb24oKTsKICAgICBOb2RlSW1wbCAqYm4gPSBicC5ub2RlKCk7CiAgICAgaWYgKCFibikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDoga2h0bWwveG1sL2RvbTJfcmFuZ2VpbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tMl9y
YW5nZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ3CmRpZmYgLXUgLXIxLjQ3IGRv
bTJfcmFuZ2VpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbTJfcmFuZ2VpbXBsLmNwcAkxIERlYyAy
MDA1IDEwOjMyOjI1IC0wMDAwCTEuNDcKKysrIGtodG1sL3htbC9kb20yX3JhbmdlaW1wbC5jcHAJ
MTAgSmFuIDIwMDYgMDE6NTE6NDAgLTAwMDAKQEAgLTEzMjksMjMgKzEzMjksMjMgQEAKICAgICAv
LyBJdCBpcyBpbXBvcnRhbnQgdG8gc2tpcCBjZXJ0YWluIGlycmVsZXZhbnQgY29udGVudCBhdCB0
aGUgc3RhcnQgb2YgdGhlIHNlbGVjdGlvbiwgc28gd2UgZG8gbm90IHdpbmQgdXAgCiAgICAgLy8g
d2l0aCBhIHNwdXJpb3VzICJtaXhlZCIgc3R5bGUuCiAgICAgCi0gICAgVmlzaWJsZVBvc2l0aW9u
IHBvcyhtX3N0YXJ0Q29udGFpbmVyLCBtX3N0YXJ0T2Zmc2V0LCBWUF9ERUZBVUxUX0FGRklOSVRZ
KTsKLSAgICBpZiAocG9zLmlzTnVsbCgpKQorICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9z
aXRpb24obV9zdGFydENvbnRhaW5lciwgbV9zdGFydE9mZnNldCwgVlBfREVGQVVMVF9BRkZJTklU
WSk7CisgICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFBv
c2l0aW9uKCk7CiAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CiAgICAgLy8gaWYgdGhlIHNl
bGVjdGlvbiBpcyBhIGNhcmV0LCBqdXN0IHJldHVybiB0aGUgcG9zaXRpb24sIHNpbmNlIHRoZSBz
dHlsZQogICAgIC8vIGJlaGluZCB1cyBpcyByZWxldmFudAogICAgIGlmIChjb2xsYXBzZWQoZXhj
ZXB0aW9uQ29kZSkpCi0gICAgICAgIHJldHVybiBwb3MucG9zaXRpb24oKTsKKyAgICAgICAgcmV0
dXJuIHZpc2libGVQb3NpdGlvbi5wb3NpdGlvbigpOwogCiAgICAgLy8gaWYgdGhlIHNlbGVjdGlv
biBzdGFydHMganVzdCBiZWZvcmUgYSBwYXJhZ3JhcGggYnJlYWssIHNraXAgb3ZlciBpdAotICAg
IGlmIChpc0VuZE9mUGFyYWdyYXBoKHBvcykpCi0gICAgICAgIHJldHVybiBwb3MubmV4dCgpLnBv
c2l0aW9uKCkuZG93bnN0cmVhbSgpOworICAgIGlmIChpc0VuZE9mUGFyYWdyYXBoKHZpc2libGVQ
b3NpdGlvbikpCisgICAgICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb24ubmV4dCgpLnBvc2l0aW9u
KCkuZG93bnN0cmVhbSgpOwogCiAgICAgLy8gb3RoZXJ3aXNlLCBtYWtlIHN1cmUgdG8gYmUgYXQg
dGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBzZWxlY3RlZCBub2RlLAogICAgIC8vIGluc3RlYWQgb2Yg
cG9zc2libHkgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBub2RlIGJlZm9yZSB0aGUgc2VsZWN0aW9u
Ci0gICAgcmV0dXJuIHBvcy5wb3NpdGlvbigpLmRvd25zdHJlYW0oKTsKKyAgICByZXR1cm4gdmlz
aWJsZVBvc2l0aW9uLnBvc2l0aW9uKCkuZG93bnN0cmVhbSgpOwogfQogCiBOb2RlSW1wbCAqUmFu
Z2VJbXBsOjpwYXN0RW5kTm9kZSgpIGNvbnN0CkluZGV4OiBraHRtbC94bWwvZG9tX2RvY2ltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21f
ZG9jaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjk3CmRpZmYgLXUgLXIxLjI5NyBk
b21fZG9jaW1wbC5jcHAKLS0tIGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAJMyBKYW4gMjAwNiAx
MDowNTo0NCAtMDAwMAkxLjI5NworKysga2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAkxMCBKYW4g
MjAwNiAwMTo1MTo0MCAtMDAwMApAQCAtMTMwMCw4ICsxMzAwLDggQEAKICAgICAgICAgY2FudmFz
LT5jbGVhclNlbGVjdGlvbigpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgUG9zaXRpb24g
c3RhcnRQb3MgPSBWaXNpYmxlUG9zaXRpb24ocy5zdGFydCgpLCBzLnN0YXJ0QWZmaW5pdHkoKSku
ZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAgICAgUG9zaXRpb24gZW5kUG9zID0gVmlzaWJsZVBvc2l0
aW9uKHMuZW5kKCksIHMuZW5kQWZmaW5pdHkoKSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAg
UG9zaXRpb24gc3RhcnRQb3MgPSBWaXNpYmxlUG9zaXRpb24ocy5zdGFydCgpLCBzLnN0YXJ0QWZm
aW5pdHkoKSkucG9zaXRpb24oKTsKKyAgICAgICAgUG9zaXRpb24gZW5kUG9zID0gVmlzaWJsZVBv
c2l0aW9uKHMuZW5kKCksIHMuZW5kQWZmaW5pdHkoKSkucG9zaXRpb24oKTsKICAgICAgICAgaWYg
KHN0YXJ0UG9zLmlzTm90TnVsbCgpICYmIGVuZFBvcy5pc05vdE51bGwoKSkgewogICAgICAgICAg
ICAgUmVuZGVyT2JqZWN0ICpzdGFydFJlbmRlcmVyID0gc3RhcnRQb3Mubm9kZSgpLT5yZW5kZXJl
cigpOwogICAgICAgICAgICAgUmVuZGVyT2JqZWN0ICplbmRSZW5kZXJlciA9IGVuZFBvcy5ub2Rl
KCktPnJlbmRlcmVyKCk7CkluZGV4OiBraHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMjYKZGlmZiAtdSAtcjEuMjI2IGRvbV9ub2RlaW1w
bC5jcHAKLS0tIGtodG1sL3htbC9kb21fbm9kZWltcGwuY3BwCTIzIERlYyAyMDA1IDE4OjQ0OjI5
IC0wMDAwCTEuMjI2CisrKyBraHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAkxMCBKYW4gMjAwNiAw
MTo1MTo0MCAtMDAwMApAQCAtMTQ3OCwxNyArMTQ3OCw2IEBACiAKIC8vIEZJWE1FOiBTaG91bGRu
J3QgdGhlc2UgZnVuY3Rpb25zIGJlIGluIHRoZSBlZGl0aW5nIGNvZGU/ICBDb2RlIHRoYXQgYXNr
cyBxdWVzdGlvbnMgYWJvdXQgSFRNTCBpbiB0aGUgY29yZSBET00gY2xhc3MKIC8vIGlzIG9idmlv
dXNseSBtaXNwbGFjZWQuCi0vLyBtZXRob2QgZm9yIGVkaXRpbmcgbWFkbmVzcywgd2hpY2ggYWxs
b3dzIEJSLDEgYXMgYSBwb3NpdGlvbiwgdGhvdWdoIHRoYXQgaXMgaW5jb3JyZWN0Ci1pbnQgTm9k
ZUltcGw6Om1heERlZXBPZmZzZXQoKSBjb25zdAotewotICAgIGlmIChpc1RleHROb2RlKCkpCi0g
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBUZXh0SW1wbCo+KHRoaXMpLT5sZW5ndGgo
KTsKLSAgICAgICAgCi0gICAgaWYgKGhhc1RhZ05hbWUoYnJUYWcpIHx8IChyZW5kZXJlcigpICYm
IHJlbmRlcmVyKCktPmlzUmVwbGFjZWQoKSkpCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgcmV0
dXJuIGNoaWxkTm9kZUNvdW50KCk7Ci19CiAKIGludCBOb2RlSW1wbDo6Y2FyZXRNaW5PZmZzZXQo
KSBjb25zdAogewpAQCAtMTUyMiw3ICsxNTExLDcgQEAKIAogYm9vbCBOb2RlSW1wbDo6aXNCbG9j
a0Zsb3dPclRhYmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVuZGVyZXIoKSAmJiAocmVuZGVy
ZXIoKS0+aXNCbG9ja0Zsb3coKSB8fCByZW5kZXJlcigpLT5pc1RhYmxlKCkpOworICAgIHJldHVy
biByZW5kZXJlcigpICYmIChyZW5kZXJlcigpLT5pc0Jsb2NrRmxvdygpIHx8IHJlbmRlcmVyKCkt
PmlzVGFibGUoKSAmJiAhcmVuZGVyZXIoKS0+aXNJbmxpbmUoKSk7CiB9CiAKIGJvb2wgTm9kZUlt
cGw6OmlzRWRpdGFibGVCbG9jaygpIGNvbnN0CkluZGV4OiBraHRtbC94bWwvZG9tX25vZGVpbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9u
b2RlaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyMApkaWZmIC11IC1yMS4xMjAgZG9t
X25vZGVpbXBsLmgKLS0tIGtodG1sL3htbC9kb21fbm9kZWltcGwuaAkxOCBEZWMgMjAwNSAyMzo0
MDoxMyAtMDAwMAkxLjEyMAorKysga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oCTEwIEphbiAyMDA2
IDAxOjUxOjQwIC0wMDAwCkBAIC0zNTIsNyArMzUyLDYgQEAKIAl2aXJ0dWFsIGJvb2wgY2hpbGRB
bGxvd2VkKE5vZGVJbXBsICpuZXdDaGlsZCk7CQkJCSAgIC8vIEVycm9yLWNoZWNraW5nIGR1cmlu
ZyBwYXJzaW5nIHRoYXQgY2hlY2tzIHRoZSBEVEQKIAkKICAgICB2aXJ0dWFsIGludCBtYXhPZmZz
ZXQoKSBjb25zdDsKLSAgICBpbnQgbWF4RGVlcE9mZnNldCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
aW50IGNhcmV0TWluT2Zmc2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgY2FyZXRNYXhPZmZz
ZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGNhcmV0TWF4UmVuZGVyZWRPZmZzZXQo
KSBjb25zdDsKSW5kZXg6IGtodG1sL3htbC9kb21fcG9zaXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fcG9zaXRpb24uY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjgyCmRpZmYgLXUgLXIxLjgyIGRvbV9wb3NpdGlvbi5jcHAKLS0t
IGtodG1sL3htbC9kb21fcG9zaXRpb24uY3BwCTIxIE5vdiAyMDA1IDAxOjIwOjQyIC0wMDAwCTEu
ODIKKysrIGtodG1sL3htbC9kb21fcG9zaXRpb24uY3BwCTEwIEphbiAyMDA2IDAxOjUxOjQwIC0w
MDAwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiZG9tMl9yYW5nZWltcGwuaCIKICNpbmNs
dWRlICJkb20yX3ZpZXdzaW1wbC5oIgogI2luY2x1ZGUgImhlbHBlci5oIgorI2luY2x1ZGUgImh0
bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAidGV4dF9hZmZpbml0eS5oIgogI2luY2x1ZGUgInZpc2li
bGVfcG9zaXRpb24uaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCkBAIC0xNzAsNyArMTcx
LDcgQEAKICAgICBpZiAobyA+IDApIHsKICAgICAgICAgTm9kZUltcGwgKmNoaWxkID0gbi0+Y2hp
bGROb2RlKG8gLSAxKTsKICAgICAgICAgaWYgKGNoaWxkKSB7Ci0gICAgICAgICAgICByZXR1cm4g
UG9zaXRpb24oY2hpbGQsIGNoaWxkLT5tYXhEZWVwT2Zmc2V0KCkpOworICAgICAgICAgICAgcmV0
dXJuIFBvc2l0aW9uKGNoaWxkLCBtYXhEZWVwT2Zmc2V0KGNoaWxkKSk7CiAgICAgICAgIH0KICAg
ICAgICAgLy8gVGhlcmUgYXJlIHR3byByZWFzb25zIGNoaWxkIG1pZ2h0IGJlIDA6CiAgICAgICAg
IC8vICAgMSkgVGhlIG5vZGUgaXMgbm9kZSBsaWtlIGEgdGV4dCBub2RlIHRoYXQgaXMgbm90IGFu
IGVsZW1lbnQsIGFuZCB0aGVyZWZvcmUgaGFzIG5vIGNoaWxkcmVuLgpAQCAtMTk2LDcgKzE5Nyw3
IEBACiAgICAgaW50IG8gPSBvZmZzZXQoKTsKICAgICBhc3NlcnQobyA+PSAwKTsKIAotICAgIGlm
IChvIDwgbi0+bWF4RGVlcE9mZnNldCgpKSB7CisgICAgaWYgKG8gPCBtYXhEZWVwT2Zmc2V0KG4p
KSB7CiAgICAgICAgIE5vZGVJbXBsICpjaGlsZCA9IG4tPmNoaWxkTm9kZShvKTsKICAgICAgICAg
aWYgKGNoaWxkKSB7CiAgICAgICAgICAgICByZXR1cm4gUG9zaXRpb24oY2hpbGQsIDApOwpAQCAt
MjMxLDcgKzIzMiw3IEBACiAgICAgaWYgKCFuKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAK
LSAgICByZXR1cm4gb2Zmc2V0KCkgPj0gbi0+bWF4RGVlcE9mZnNldCgpICYmIG4tPnBhcmVudCgp
ID09IDA7CisgICAgcmV0dXJuIG9mZnNldCgpID49IG1heERlZXBPZmZzZXQobikgJiYgbi0+cGFy
ZW50KCkgPT0gMDsKIH0KIAogaW50IFBvc2l0aW9uOjpyZW5kZXJlZE9mZnNldCgpIGNvbnN0CkBA
IC0zMTYsMTYgKzMxNywxNSBAQAogCiAvLyB1cHN0cmVhbSgpIGFuZCBkb3duc3RyZWFtKCkgd2Fu
dCB0byByZXR1cm4gcG9zaXRpb25zIHRoYXQgYXJlIGVpdGhlciBpbiBhCiAvLyB0ZXh0IG5vZGUg
b3IgYXQganVzdCBiZWZvcmUgYSBub24tdGV4dCBub2RlLiAgVGhpcyBtZXRob2QgY2hlY2tzIGZv
ciB0aGF0Lgotc3RhdGljIGJvb2wgaXNTdHJlYW1lciAoUG9zaXRpb24gcG9zKQorc3RhdGljIGJv
b2wgaXNTdHJlYW1lcihjb25zdCBQb3NpdGlvbiAmcG9zKQogewotICAgIE5vZGVJbXBsICpjdXJy
ZW50Tm9kZSA9IHBvcy5ub2RlKCk7Ci0gICAgaWYgKCFjdXJyZW50Tm9kZSkKKyAgICBpZiAocG9z
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCi0gICAgaWYgKGN1cnJl
bnROb2RlLT5pc0F0b21pY05vZGUoKSkKKyAgICBpZiAoaXNBdG9taWNOb2RlKHBvcy5ub2RlKCkp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCi0gICAgcmV0dXJuIChwb3Mub2Zmc2V0
KCkgPT0gMCk7CisgICAgcmV0dXJuIHBvcy5vZmZzZXQoKSA9PSAwOwogfQogCiAvLyBBRkFJSyBu
byBvbmUgaGFzIGEgY2xlYXIsIGNvbXBsZXRlIGRlZmluaXRpb24gZm9yIHRoaXMgbWV0aG9kIGFu
ZCBob3cgaXQgaXMgdXNlZC4KQEAgLTM0MCw3ICszNDAsNyBAQAogUG9zaXRpb24gUG9zaXRpb246
OnVwc3RyZWFtKCkgY29uc3QKIHsKICAgICAvLyBzdGFydCBhdCBlcXVpdmFsZW50IGRlZXAgcG9z
aXRpb24KLSAgICBQb3NpdGlvbiBzdGFydCA9IGVxdWl2YWxlbnREZWVwUG9zaXRpb24oKTsKKyAg
ICBQb3NpdGlvbiBzdGFydCA9IFZpc2libGVQb3NpdGlvbjo6ZGVlcEVxdWl2YWxlbnQoKnRoaXMp
OwogICAgIE5vZGVJbXBsICpzdGFydE5vZGUgPSBzdGFydC5ub2RlKCk7CiAgICAgaWYgKCFzdGFy
dE5vZGUpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwpAQCAtNDE1LDcgKzQxNSw3IEBACiBQ
b3NpdGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbSgpIGNvbnN0CiB7CiAgICAgLy8gc3RhcnQgYXQg
ZXF1aXZhbGVudCBkZWVwIHBvc2l0aW9uCi0gICAgUG9zaXRpb24gc3RhcnQgPSBlcXVpdmFsZW50
RGVlcFBvc2l0aW9uKCk7CisgICAgUG9zaXRpb24gc3RhcnQgPSBWaXNpYmxlUG9zaXRpb246OmRl
ZXBFcXVpdmFsZW50KCp0aGlzKTsKICAgICBOb2RlSW1wbCAqc3RhcnROb2RlID0gc3RhcnQubm9k
ZSgpOwogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKQEAg
LTUzOCwzNiArNTM4LDYgQEAKICAgICByZXR1cm4gUG9zaXRpb24ocGFyZW50LCBjb25zdHJhaW5l
ZE9mZnNldCk7CiB9CiAKLVBvc2l0aW9uIFBvc2l0aW9uOjplcXVpdmFsZW50RGVlcFBvc2l0aW9u
KCkgY29uc3QKLXsKLSAgICBpZiAoaXNOdWxsKCkgfHwgbm9kZSgpLT5pc0F0b21pY05vZGUoKSkK
LSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgTm9kZUltcGwgKmNoaWxkID0gMDsKLSAgICBQ
b3NpdGlvbiBwb3MoKnRoaXMpOwotICAgIGlmIChvZmZzZXQoKSA+PSAoaW50KW5vZGUoKS0+Y2hp
bGROb2RlQ291bnQoKSkgewotICAgICAgICBjaGlsZCA9IG5vZGUoKS0+bGFzdENoaWxkKCk7Ci0g
ICAgICAgIHBvcyA9IFBvc2l0aW9uKGNoaWxkLCBjaGlsZC0+Y2FyZXRNYXhPZmZzZXQoKSk7Ci0g
ICAgICAgIEFTU0VSVChjaGlsZCk7Ci0gICAgICAgIHdoaWxlICghY2hpbGQtPmlzQXRvbWljTm9k
ZSgpICYmIHBvcy5ub2RlKCktPmhhc0NoaWxkTm9kZXMoKSkgewotICAgICAgICAgICAgY2hpbGQg
PSBwb3Mubm9kZSgpLT5sYXN0Q2hpbGQoKTsKLSAgICAgICAgICAgIEFTU0VSVChjaGlsZCk7Ci0g
ICAgICAgICAgICBwb3MgPSBQb3NpdGlvbihjaGlsZCwgY2hpbGQtPmNhcmV0TWF4T2Zmc2V0KCkp
OwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBjaGlsZCA9IG5vZGUoKS0+
Y2hpbGROb2RlKG9mZnNldCgpKTsKLSAgICAgICAgQVNTRVJUKGNoaWxkKTsKLSAgICAgICAgcG9z
ID0gUG9zaXRpb24oY2hpbGQsIDApOwotICAgICAgICB3aGlsZSAoIWNoaWxkLT5pc0F0b21pY05v
ZGUoKSAmJiBwb3Mubm9kZSgpLT5oYXNDaGlsZE5vZGVzKCkpIHsKLSAgICAgICAgICAgIGNoaWxk
ID0gcG9zLm5vZGUoKS0+Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgQVNTRVJUKGNoaWxkKTsK
LSAgICAgICAgICAgIHBvcyA9IFBvc2l0aW9uKGNoaWxkLCAwKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gcG9zOwotfQotCiBib29sIFBvc2l0aW9uOjppblJlbmRlcmVkQ29udGVudCgp
IGNvbnN0CiB7CiAgICAgaWYgKGlzTnVsbCgpKQpJbmRleDoga2h0bWwveG1sL2RvbV9wb3NpdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21f
cG9zaXRpb24uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNQpkaWZmIC11IC1yMS4zNSBkb21f
cG9zaXRpb24uaAotLS0ga2h0bWwveG1sL2RvbV9wb3NpdGlvbi5oCTE2IFNlcCAyMDA1IDIyOjQy
OjIwIC0wMDAwCTEuMzUKKysrIGtodG1sL3htbC9kb21fcG9zaXRpb24uaAkxMCBKYW4gMjAwNiAw
MTo1MTo0MCAtMDAwMApAQCAtODMsNyArODMsNiBAQAogICAgIFBvc2l0aW9uIGRvd25zdHJlYW0o
KSBjb25zdDsKICAgICAKICAgICBQb3NpdGlvbiBlcXVpdmFsZW50UmFuZ2VDb21wbGlhbnRQb3Np
dGlvbigpIGNvbnN0OwotICAgIFBvc2l0aW9uIGVxdWl2YWxlbnREZWVwUG9zaXRpb24oKSBjb25z
dDsKICAgICBib29sIGluUmVuZGVyZWRDb250ZW50KCkgY29uc3Q7CiAgICAgYm9vbCBpc1JlbmRl
cmVkQ2hhcmFjdGVyKCkgY29uc3Q7CiAgICAgYm9vbCByZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlv
bihjb25zdCBQb3NpdGlvbiAmcG9zKSBjb25zdDsKSW5kZXg6IGt3cS9LV1FBY2NPYmplY3QubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUFjY09iamVjdC5t
bSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44NwpkaWZmIC11IC1yMS44NyBLV1FBY2NPYmplY3Qu
bW0KLS0tIGt3cS9LV1FBY2NPYmplY3QubW0JMjkgTm92IDIwMDUgMjI6MTQ6MDkgLTAwMDAJMS44
NworKysga3dxL0tXUUFjY09iamVjdC5tbQkxMCBKYW4gMjAwNiAwMTo1MTo0MCAtMDAwMApAQCAt
MTE2OSw3ICsxMTY5LDcgQEAKICAgICAvLyB0cnkgdG8gdXNlIHRoZSBkb2N1bWVudCB2aWV3IGZy
b20gdGhlIHNlbGVjdGlvbiwgc28gdGhhdCBuZXN0ZWQgV2ViQXJlYXMgd29yaywKICAgICAvLyBi
dXQgZmFsbCBiYWNrIHRvIHRoZSB0b3AgbGV2ZWwgZG9jIGlmIHdlIGRvIG5vdCBmaW5kIGl0IGVh
c2lseQogICAgIEtIVE1MVmlldyAqZG9jVmlldyA9IE5VTEw7Ci0gICAgUmVuZGVyT2JqZWN0ICog
cmVuZGVyZXIgPSBzdGFydFZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+
cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJPYmplY3QgKiByZW5kZXJlciA9IHN0YXJ0VmlzaWJsZVBv
c2l0aW9uLnBvc2l0aW9uKCkubm9kZSgpLT5yZW5kZXJlcigpOwogICAgIGlmIChyZW5kZXJlcikg
ewogICAgICAgICBEb2N1bWVudEltcGwqIGRvYyA9IHJlbmRlcmVyLT5kb2N1bWVudCgpOwogICAg
ICAgICBpZiAoZG9jKQpJbmRleDoga3dxL0tXUUFjY09iamVjdENhY2hlLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FBY2NPYmplY3RDYWNoZS5tbSx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xMQpkaWZmIC11IC1yMS4xMSBLV1FBY2NPYmplY3RDYWNoZS5t
bQotLS0ga3dxL0tXUUFjY09iamVjdENhY2hlLm1tCTMgT2N0IDIwMDUgMjE6MTM6MDEgLTAwMDAJ
MS4xMQorKysga3dxL0tXUUFjY09iamVjdENhY2hlLm1tCTEwIEphbiAyMDA2IDAxOjUxOjQwIC0w
MDAwCkBAIC0xNTgsNyArMTU4LDcgQEAKIAogV2ViQ29yZVRleHRNYXJrZXIgKktXUUFjY09iamVj
dENhY2hlOjp0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uIChjb25zdCBWaXNpYmxlUG9zaXRp
b24gJnZpc2libGVQb3MpCiB7Ci0gICAgRE9NOjpQb3NpdGlvbiBkZWVwUG9zID0gdmlzaWJsZVBv
cy5kZWVwRXF1aXZhbGVudCgpOworICAgIERPTTo6UG9zaXRpb24gZGVlcFBvcyA9IHZpc2libGVQ
b3MucG9zaXRpb24oKTsKICAgICBET006Ok5vZGVJbXBsKiBkb21Ob2RlID0gZGVlcFBvcy5ub2Rl
KCk7CiAgICAgQVNTRVJUKGRvbU5vZGUgIT0gTlVMTCk7CiAgICAgaWYgKGRvbU5vZGUgPT0gTlVM
TCkKSW5kZXg6IGt3cS9LV1FLSFRNTFBhcnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43
MTUKZGlmZiAtdSAtcjEuNzE1IEtXUUtIVE1MUGFydC5tbQotLS0ga3dxL0tXUUtIVE1MUGFydC5t
bQk2IEphbiAyMDA2IDE5OjI0OjA0IC0wMDAwCTEuNzE1CisrKyBrd3EvS1dRS0hUTUxQYXJ0Lm1t
CTEwIEphbiAyMDA2IDAxOjUxOjQwIC0wMDAwCkBAIC0zNDc1LDcgKzM0NzUsNyBAQAogICAgIGlm
IChkLT5tX3NlbGVjdGlvbi5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAg
UG9zaXRpb24gcG9zID0gVmlzaWJsZVBvc2l0aW9uKGQtPm1fc2VsZWN0aW9uLnN0YXJ0KCksIGQt
Pm1fc2VsZWN0aW9uLnN0YXJ0QWZmaW5pdHkoKSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBQb3Np
dGlvbiBwb3MgPSBWaXNpYmxlUG9zaXRpb24oZC0+bV9zZWxlY3Rpb24uc3RhcnQoKSwgZC0+bV9z
ZWxlY3Rpb24uc3RhcnRBZmZpbml0eSgpKS5wb3NpdGlvbigpOwogICAgIGlmICghcG9zLmluUmVu
ZGVyZWRDb250ZW50KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIE5vZGVJbXBsICpub2RlID0g
cG9zLm5vZGUoKTsKQEAgLTM2MjUsNyArMzYyNSw3IEBACiB7CiAgICAgTlNXcml0aW5nRGlyZWN0
aW9uIHJlc3VsdCA9IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0OwogCi0gICAgUG9zaXRp
b24gcG9zID0gVmlzaWJsZVBvc2l0aW9uKGQtPm1fc2VsZWN0aW9uLnN0YXJ0KCksIGQtPm1fc2Vs
ZWN0aW9uLnN0YXJ0QWZmaW5pdHkoKSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBQb3NpdGlvbiBw
b3MgPSBWaXNpYmxlUG9zaXRpb24oZC0+bV9zZWxlY3Rpb24uc3RhcnQoKSwgZC0+bV9zZWxlY3Rp
b24uc3RhcnRBZmZpbml0eSgpKS5wb3NpdGlvbigpOwogICAgIE5vZGVJbXBsICpub2RlID0gcG9z
Lm5vZGUoKTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkgfHwgIW5vZGUtPnJl
bmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpKQogICAgICAgICByZXR1cm4gcmVzdWx0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5577</attachid>
            <date>2006-01-09 18:48:08 -0800</date>
            <delta_ts>2006-01-09 21:04:20 -0800</delta_ts>
            <desc>patch</desc>
            <filename>5870.txt</filename>
            <type>text/plain</type>
            <size>57460</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2todG1sX2V2ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwva2h0bWxfZXZlbnRzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xNgpkaWZmIC11IC1yMS4xNiBraHRtbF9ldmVudHMuY3BwCi0tLSBraHRtbC9raHRtbF9ldmVu
dHMuY3BwCTMgT2N0IDIwMDUgMjE6MTI6MDQgLTAwMDAJMS4xNgorKysga2h0bWwva2h0bWxfZXZl
bnRzLmNwcAkxMCBKYW4gMjAwNiAwMjoxNzoxOCAtMDAwMApAQCAtNjEsNyArNjEsNyBAQAogICAg
ICAgICBpZiAoaW5uZXItPmlzVGV4dE5vZGUoKSkKICAgICAgICAgICAgIGlubmVyID0gaW5uZXIt
PnBhcmVudE5vZGUoKTsKICAgICAgICAgaWYgKGlubmVyLT5yZW5kZXJlcigpKQotICAgICAgICAg
ICAgcG9zID0gaW5uZXItPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMobV94LCBt
X3kpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICBwb3MgPSBpbm5lci0+cmVuZGVyZXIo
KS0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhtX3gsIG1feSkucG9zaXRpb24oKTsKICAgICB9CiAg
ICAgcmV0dXJuIHBvcy5vZmZzZXQoKTsKIH0KSW5kZXg6IGtodG1sL2todG1sX3BhcnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2todG1sX3BhcnQuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM3NgpkaWZmIC11IC1yMS4zNzYga2h0bWxfcGFydC5j
cHAKLS0tIGtodG1sL2todG1sX3BhcnQuY3BwCTMgSmFuIDIwMDYgMTI6Mjg6MjMgLTAwMDAJMS4z
NzYKKysrIGtodG1sL2todG1sX3BhcnQuY3BwCTEwIEphbiAyMDA2IDAyOjE3OjE4IC0wMDAwCkBA
IC0yMzQxLDcgKzIzNDEsNyBAQAogICAgIGlmICghaW5uZXJOb2RlIHx8ICFpbm5lck5vZGUtPnJl
bmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBQb3NpdGlvbiBwb3Mo
aW5uZXJOb2RlLT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvckNvb3JkaW5hdGVzKHgsIHkpLmRlZXBF
cXVpdmFsZW50KCkpOworICAgIFBvc2l0aW9uIHBvcyhpbm5lck5vZGUtPnJlbmRlcmVyKCktPnBv
c2l0aW9uRm9yQ29vcmRpbmF0ZXMoeCwgeSkucG9zaXRpb24oKSk7CiAgICAgaWYgKHBvcy5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yNDQ4LDcgKzI0NDgsNyBAQAogICAg
ICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MoaW5uZXJOb2RlLT5yZW5kZXJlcigp
LT5wb3NpdGlvbkZvckNvb3JkaW5hdGVzKGV2ZW50LT54KCksIGV2ZW50LT55KCkpKTsKICAgICAg
ICAgICAgIGlmICh2aXNpYmxlUG9zLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIHZpc2libGVQ
b3MgPSBWaXNpYmxlUG9zaXRpb24oaW5uZXJOb2RlLCBpbm5lck5vZGUtPmNhcmV0TWluT2Zmc2V0
KCksIGtodG1sOjpET1dOU1RSRUFNKTsKLSAgICAgICAgICAgIFBvc2l0aW9uIHBvcyA9IHZpc2li
bGVQb3MuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgIFBvc2l0aW9uIHBvcyA9IHZpc2li
bGVQb3MucG9zaXRpb24oKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc2VsID0gc2VsZWN0
aW9uKCk7CiAgICAgICAgICAgICBpZiAoZXh0ZW5kU2VsZWN0aW9uICYmIHNlbC5pc0NhcmV0T3JS
YW5nZSgpKSB7CkBAIC0yNjg3LDcgKzI2ODcsNyBAQAogCiBib29sIEtIVE1MUGFydDo6c2VsZWN0
Q29udGVudHNPZk5vZGUoTm9kZUltcGwqIG5vZGUpCiB7Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxl
ciBzZWwgPSBTZWxlY3Rpb25Db250cm9sbGVyKFBvc2l0aW9uKG5vZGUsIDApLCBraHRtbDo6RE9X
TlNUUkVBTSwgUG9zaXRpb24obm9kZSwgbm9kZS0+bWF4RGVlcE9mZnNldCgpKSwga2h0bWw6OkRP
V05TVFJFQU0pOyAgICAKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbCA9IFNlbGVjdGlvbkNv
bnRyb2xsZXIoUG9zaXRpb24obm9kZSwgMCksIGtodG1sOjpET1dOU1RSRUFNLCBQb3NpdGlvbihu
b2RlLCBtYXhEZWVwT2Zmc2V0KG5vZGUpKSwga2h0bWw6OkRPV05TVFJFQU0pOyAgICAKICAgICBp
ZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbCkpIHsKICAgICAgICAgc2V0U2VsZWN0aW9uKHNl
bCk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjk0Nyw3ICsyOTQ3LDcgQEAKICAgICAgICAg
bXV0YWJsZVN0eWxlLT5yZWYoKTsKICAgICB9CiAKLSAgICBOb2RlSW1wbCAqbm9kZSA9IFZpc2li
bGVQb3NpdGlvbihzZWxlY3Rpb24oKS5zdGFydCgpLCBzZWxlY3Rpb24oKS5zdGFydEFmZmluaXR5
KCkpLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOworICAgIE5vZGVJbXBsICpub2RlID0gVmlzaWJs
ZVBvc2l0aW9uKHNlbGVjdGlvbigpLnN0YXJ0KCksIHNlbGVjdGlvbigpLnN0YXJ0QWZmaW5pdHko
KSkucG9zaXRpb24oKS5ub2RlKCk7CiAgICAgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uSW1w
bCBjb21wdXRlZFN0eWxlKG5vZGUpOwogICAgIGNvbXB1dGVkU3R5bGUuZGlmZihtdXRhYmxlU3R5
bGUpOwogICAgIApJbmRleDoga2h0bWwvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL1NlbGVj
dGlvbkNvbnRyb2xsZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwOApkaWZmIC11IC1y
MS4xMDggU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKLS0tIGtodG1sL2VkaXRpbmcvU2VsZWN0aW9u
Q29udHJvbGxlci5jcHAJMyBKYW4gMjAwNiAxMjoyODoyNSAtMDAwMAkxLjEwOAorKysga2h0bWwv
ZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkxMCBKYW4gMjAwNiAwMjoxNzoxOCAtMDAw
MApAQCAtMzIsNiArMzIsNyBAQAogCiAjaW5jbHVkZSAiZG9tL2RvbV9ub2RlLmgiCiAjaW5jbHVk
ZSAiZG9tL2RvbV9zdHJpbmcuaCIKKyNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUg
ImtodG1sX3BhcnQuaCIKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKICNpbmNsdWRlICJyZW5kZXJp
bmcvcmVuZGVyX29iamVjdC5oIgpAQCAtMTU4LDggKzE1OSw4IEBACiB7CiAgICAgLy8gRklYTUU6
IHVzZSBleHRlbnRBZmZpbml0eQogICAgIG1fYWZmaW5pdHkgPSBwb3MuYWZmaW5pdHkoKTsKLSAg
ICBtX2Jhc2UgPSBwb3MuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBtX2V4dGVudCA9IHBvcy5kZWVw
RXF1aXZhbGVudCgpOworICAgIG1fYmFzZSA9IHBvcy5wb3NpdGlvbigpOworICAgIG1fZXh0ZW50
ID0gcG9zLnBvc2l0aW9uKCk7CiAgICAgdmFsaWRhdGUoKTsKIH0KIApAQCAtMTY3LDggKzE2OCw4
IEBACiB7CiAgICAgLy8gRklYTUU6IHVzZSBleHRlbnRBZmZpbml0eQogICAgIG1fYWZmaW5pdHkg
PSBiYXNlLmFmZmluaXR5KCk7Ci0gICAgbV9iYXNlID0gYmFzZS5kZWVwRXF1aXZhbGVudCgpOwot
ICAgIG1fZXh0ZW50ID0gZXh0ZW50LmRlZXBFcXVpdmFsZW50KCk7CisgICAgbV9iYXNlID0gYmFz
ZS5wb3NpdGlvbigpOworICAgIG1fZXh0ZW50ID0gZXh0ZW50LnBvc2l0aW9uKCk7CiAgICAgdmFs
aWRhdGUoKTsKIH0KIApAQCAtNDQ5LDcgKzQ1MCw3IEBACiAvLyBGSVhNRTogTWF5YmUgYmFzZWxp
bmUgd291bGQgYmUgYmV0dGVyPwogc3RhdGljIGJvb2wgY2FyZXRZKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmYywgaW50ICZ5KQogewotICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVpdmFsZW50KCk7
CisgICAgUG9zaXRpb24gcCA9IGMucG9zaXRpb24oKTsKICAgICBOb2RlSW1wbCAqbiA9IHAubm9k
ZSgpOwogICAgIGlmICghbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTY3LDE0ICs1Njgs
OCBAQAogICAgICAgICByZXR1cm4geDsKICAgICAgICAgCiAgICAgaWYgKHJlY2FsYyB8fCBwYXJ0
LT54UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oKSA9PSBLSFRNTFBhcnQ6Ok5vWFBvc0Zv
clZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKSB7Ci0gICAgICAgIHN3aXRjaCAobV9hZmZpbml0eSkg
ewotICAgICAgICAgICAgY2FzZSBET1dOU1RSRUFNOgotICAgICAgICAgICAgICAgIHBvcyA9IFZp
c2libGVQb3NpdGlvbihwb3MsIG1fYWZmaW5pdHkpLmRvd25zdHJlYW1EZWVwRXF1aXZhbGVudCgp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVUFNUUkVBTToKLSAg
ICAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBtX2FmZmluaXR5KS5kZWVw
RXF1aXZhbGVudCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAg
IFZpc2libGVQb3NpdGlvbiB2KHBvcywgbV9hZmZpbml0eSk7CisgICAgICAgIHBvcyA9IHYucG9z
aXRpb24oKTsKICAgICAgICAgeCA9IHBvcy5ub2RlKCktPnJlbmRlcmVyKCktPmNhcmV0UmVjdChw
b3Mub2Zmc2V0KCksIG1fYWZmaW5pdHkpLngoKTsKICAgICAgICAgcGFydC0+c2V0WFBvc0ZvclZl
cnRpY2FsQXJyb3dOYXZpZ2F0aW9uKHgpOwogICAgIH0KQEAgLTU5NSwxNCArNTkwLDE0IEBACiB2
b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEJhc2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZw
b3MpCiB7CiAgICAgbV9hZmZpbml0eSA9IHBvcy5hZmZpbml0eSgpOwotICAgIG1fYmFzZSA9IHBv
cy5kZWVwRXF1aXZhbGVudCgpOworICAgIG1fYmFzZSA9IHBvcy5wb3NpdGlvbigpOwogICAgIHZh
bGlkYXRlKCk7CiB9CiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0RXh0ZW50KGNvbnN0
IFZpc2libGVQb3NpdGlvbiAmcG9zKQogewogICAgIC8vIEZJWE1FOiBTdXBwb3J0IGV4dGVudEFm
ZmluaXR5Ci0gICAgbV9leHRlbnQgPSBwb3MuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBtX2V4dGVu
dCA9IHBvcy5wb3NpdGlvbigpOwogICAgIHZhbGlkYXRlKCk7CiB9CiAKQEAgLTcwMyw3ICs2OTgs
NyBAQAogCiBQYXNzUmVmUHRyPFJhbmdlSW1wbD4gU2VsZWN0aW9uQ29udHJvbGxlcjo6Z2V0UmFu
Z2VBdChpbnQgaW5kZXgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGluZGV4ID09IDAgPyBQYXNzUmVm
UHRyPFJhbmdlSW1wbD4odG9SYW5nZSgpKSA6IFBhc3NSZWZQdHI8UmFuZ2VJbXBsPigpOworICAg
IHJldHVybiBpbmRleCA9PSAwID8gdG9SYW5nZSgpIDogUGFzc1JlZlB0cjxSYW5nZUltcGw+KCk7
CiB9CiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0QmFzZUFuZEV4dGVudChOb2RlSW1w
bCAqYmFzZU5vZGUsIGludCBiYXNlT2Zmc2V0LCBOb2RlSW1wbCAqZXh0ZW50Tm9kZSwgaW50IGV4
dGVudE9mZnNldCkKQEAgLTc1OSwxNCArNzU0LDggQEAKICAgICAgICAgCiAgICAgaWYgKGlzQ2Fy
ZXQoKSkgewogICAgICAgICBQb3NpdGlvbiBwb3MgPSBtX3N0YXJ0OwotICAgICAgICBzd2l0Y2gg
KG1fYWZmaW5pdHkpIHsKLSAgICAgICAgICAgIGNhc2UgRE9XTlNUUkVBTToKLSAgICAgICAgICAg
ICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9hZmZpbml0eSkuZG93bnN0cmVh
bURlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIFVQU1RSRUFNOgotICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3N0
YXJ0LCBtX2FmZmluaXR5KS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9CisgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2Fm
ZmluaXR5KS5wb3NpdGlvbigpOworCiAgICAgICAgIGlmIChwb3MuaXNOb3ROdWxsKCkpIHsKICAg
ICAgICAgICAgIEFTU0VSVChwb3Mubm9kZSgpLT5yZW5kZXJlcigpKTsKICAgICAgICAgICAgIG1f
Y2FyZXRSZWN0ID0gcG9zLm5vZGUoKS0+cmVuZGVyZXIoKS0+Y2FyZXRSZWN0KHBvcy5vZmZzZXQo
KSwgbV9hZmZpbml0eSk7CkBAIC04NzIsMTIgKzg2MSwxMiBAQAogICAgICAgICAvLyBJZiB0aGUg
c3RhcnQgaXMgb3V0c2lkZSB0aGUgYmFzZSdzIGVkaXRhYmxlIHJvb3QsIGNhcCBpdCBhdCB0aGUg
c3RhcnQgb2YgdGhhdCBlZGl0YWJsZSByb290LgogICAgICAgICBpZiAoYmFzZVJvb3QgIT0gc3Rh
cnRSb290KSB7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3QoUG9zaXRpb24oYmFz
ZVJvb3QsIDApKTsKLSAgICAgICAgICAgIG1fc3RhcnQgPSBmaXJzdC5kZWVwRXF1aXZhbGVudCgp
OworICAgICAgICAgICAgbV9zdGFydCA9IGZpcnN0LnBvc2l0aW9uKCk7CiAgICAgICAgIH0KICAg
ICAgICAgLy8gSWYgdGhlIGVuZCBpcyBvdXRzaWRlIHRoZSBiYXNlJ3MgZWRpdGFibGUgcm9vdCwg
Y2FwIGl0IGF0IHRoZSBlbmQgb2YgdGhhdCBlZGl0YWJsZSByb290LgogICAgICAgICBpZiAoYmFz
ZVJvb3QgIT0gZW5kUm9vdCkgewotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGxhc3QoUG9z
aXRpb24oYmFzZVJvb3QsIGJhc2VSb290LT5tYXhEZWVwT2Zmc2V0KCkpKTsKLSAgICAgICAgICAg
IG1fZW5kID0gbGFzdC5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIGxhc3QoUG9zaXRpb24oYmFzZVJvb3QsIG1heERlZXBPZmZzZXQoYmFzZVJvb3QpKSk7Cisg
ICAgICAgICAgICBtX2VuZCA9IGxhc3QucG9zaXRpb24oKTsKICAgICAgICAgfQogICAgIC8vIFRo
ZSBzZWxlY3Rpb24gaXMgYmFzZWQgb3V0c2lkZSBlZGl0YWJsZSBjb250ZW50LiAgS2VlcCBib3Ro
IHNpZGVzIGZyb20gcmVhY2hpbmcgaW50byBlZGl0YWJsZSBjb250ZW50LgogICAgIH0gZWxzZSB7
CkBAIC04ODYsMjIgKzg3NSwyMiBAQAogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZp
b3VzOwogICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgIHByZXZpb3VzID0gVmlzaWJs
ZVBvc2l0aW9uKFBvc2l0aW9uKGVuZFJvb3QsIDApKS5wcmV2aW91cygpOwotICAgICAgICAgICAg
ICAgIGVuZFJvb3QgPSBwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+cm9vdEVkaXRh
YmxlRWxlbWVudCgpOworICAgICAgICAgICAgICAgIGVuZFJvb3QgPSBwcmV2aW91cy5wb3NpdGlv
bigpLm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgICAgICAgICAgfSB3aGlsZSAo
ZW5kUm9vdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFTU0VSVCghcHJldmlvdXMuaXNO
dWxsKCkpOwotICAgICAgICAgICAgbV9lbmQgPSBwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpOwor
ICAgICAgICAgICAgbV9lbmQgPSBwcmV2aW91cy5wb3NpdGlvbigpOwogICAgICAgICB9CiAgICAg
ICAgIC8vIFRoZSBzZWxlY3Rpb24gc3RhcnRzIGluIGVkaXRhYmxlIGNvbnRlbnQsIG1vdmUgZm9y
d2FyZCB1bnRpbCBub24tZWRpdGFibGUgY29udGVudCBpcyByZWFjaGVkLgogICAgICAgICBpZiAo
c3RhcnRSb290KSB7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dDsKICAgICAgICAg
ICAgIGRvIHsKLSAgICAgICAgICAgICAgICBuZXh0ID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9u
KHN0YXJ0Um9vdCwgc3RhcnRSb290LT5tYXhEZWVwT2Zmc2V0KCkpKS5uZXh0KCk7Ci0gICAgICAg
ICAgICAgICAgc3RhcnRSb290ID0gbmV4dC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+cm9vdEVk
aXRhYmxlRWxlbWVudCgpOworICAgICAgICAgICAgICAgIG5leHQgPSBWaXNpYmxlUG9zaXRpb24o
UG9zaXRpb24oc3RhcnRSb290LCBtYXhEZWVwT2Zmc2V0KHN0YXJ0Um9vdCkpKS5uZXh0KCk7Cisg
ICAgICAgICAgICAgICAgc3RhcnRSb290ID0gbmV4dC5wb3NpdGlvbigpLm5vZGUoKS0+cm9vdEVk
aXRhYmxlRWxlbWVudCgpOwogICAgICAgICAgICAgfSB3aGlsZSAoc3RhcnRSb290KTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgQVNTRVJUKCFuZXh0LmlzTnVsbCgpKTsKLSAgICAgICAgICAg
IG1fc3RhcnQgPSBuZXh0LmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICBtX3N0YXJ0ID0g
bmV4dC5wb3NpdGlvbigpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtOTE2LDEyICs5MDUs
MTIgQEAKICAgICBQb3NpdGlvbiBvcmlnaW5hbEJhc2UobV9iYXNlKTsKICAgICBib29sIGJhc2VB
bmRFeHRlbnRFcXVhbCA9IG1fYmFzZSA9PSBtX2V4dGVudDsKICAgICBpZiAobV9iYXNlLmlzTm90
TnVsbCgpKSB7Ci0gICAgICAgIG1fYmFzZSA9IFZpc2libGVQb3NpdGlvbihtX2Jhc2UsIG1fYWZm
aW5pdHkpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgIG1fYmFzZSA9IFZpc2libGVQb3NpdGlv
bihtX2Jhc2UsIG1fYWZmaW5pdHkpLnBvc2l0aW9uKCk7CiAgICAgICAgIGlmIChiYXNlQW5kRXh0
ZW50RXF1YWwpCiAgICAgICAgICAgICBtX2V4dGVudCA9IG1fYmFzZTsKICAgICB9CiAgICAgaWYg
KG1fZXh0ZW50LmlzTm90TnVsbCgpICYmICFiYXNlQW5kRXh0ZW50RXF1YWwpIHsKLSAgICAgICAg
bV9leHRlbnQgPSBWaXNpYmxlUG9zaXRpb24obV9leHRlbnQsIG1fYWZmaW5pdHkpLmRlZXBFcXVp
dmFsZW50KCk7CisgICAgICAgIG1fZXh0ZW50ID0gVmlzaWJsZVBvc2l0aW9uKG1fZXh0ZW50LCBt
X2FmZmluaXR5KS5wb3NpdGlvbigpOwogICAgIH0KIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBkbyBu
b3QgaGF2ZSBhIGRhbmdsaW5nIHN0YXJ0IG9yIGVuZApAQCAtOTc2LDE2ICs5NjUsMTYgQEAKICAg
ICAgICAgICAgIEVXb3JkU2lkZSBzaWRlID0gUmlnaHRXb3JkSWZPbkJvdW5kYXJ5OwogICAgICAg
ICAgICAgaWYgKGlzRW5kT2ZEb2N1bWVudChzdGFydCkgfHwgKGlzRW5kT2ZMaW5lKHN0YXJ0KSAm
JiAhaXNTdGFydE9mTGluZShzdGFydCkgJiYgIWlzRW5kT2ZQYXJhZ3JhcGgoc3RhcnQpKSkKICAg
ICAgICAgICAgICAgICBzaWRlID0gTGVmdFdvcmRJZk9uQm91bmRhcnk7Ci0gICAgICAgICAgICBt
X3N0YXJ0ID0gc3RhcnRPZldvcmQoc3RhcnQsIHNpZGUpLmRlZXBFcXVpdmFsZW50KCk7CisgICAg
ICAgICAgICBtX3N0YXJ0ID0gc3RhcnRPZldvcmQoc3RhcnQsIHNpZGUpLnBvc2l0aW9uKCk7CiAg
ICAgICAgICAgICBzaWRlID0gUmlnaHRXb3JkSWZPbkJvdW5kYXJ5OwogICAgICAgICAgICAgaWYg
KGlzRW5kT2ZEb2N1bWVudChlbmQpIHx8IChpc0VuZE9mTGluZShlbmQpICYmICFpc1N0YXJ0T2ZM
aW5lKGVuZCkgJiYgIWlzRW5kT2ZQYXJhZ3JhcGgoZW5kKSkpCiAgICAgICAgICAgICAgICAgc2lk
ZSA9IExlZnRXb3JkSWZPbkJvdW5kYXJ5OwotICAgICAgICAgICAgbV9lbmQgPSBlbmRPZldvcmQo
ZW5kLCBzaWRlKS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgbV9lbmQgPSBlbmRPZldv
cmQoZW5kLCBzaWRlKS5wb3NpdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgY2FzZSBMSU5FOiB7Ci0gICAgICAgICAgICBtX3N0
YXJ0ID0gc3RhcnRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKS5k
ZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgbV9zdGFydCA9IHN0YXJ0T2ZMaW5lKFZpc2li
bGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KSkucG9zaXRpb24oKTsKICAgICAgICAgICAg
IFZpc2libGVQb3NpdGlvbiBlbmQgPSBlbmRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fZW5kLCBt
X2FmZmluaXR5KSk7CiAgICAgICAgICAgICAvLyBJZiB0aGUgZW5kIG9mIHRoaXMgbGluZSBpcyBh
dCB0aGUgZW5kIG9mIGEgcGFyYWdyYXBoLCBpbmNsdWRlIHRoZSBzcGFjZSAKICAgICAgICAgICAg
IC8vIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGxpbmUgaW4gdGhlIHNlbGVjdGlvbi4KQEAgLTk5NCwz
MSArOTgzLDMxIEBACiAgICAgICAgICAgICAgICAgaWYgKG5leHQuaXNOb3ROdWxsKCkpCiAgICAg
ICAgICAgICAgICAgICAgIGVuZCA9IG5leHQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBt
X2VuZCA9IGVuZC5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgbV9lbmQgPSBlbmQucG9z
aXRpb24oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTElO
RV9CT1VOREFSWToKLSAgICAgICAgICAgIG1fc3RhcnQgPSBzdGFydE9mTGluZShWaXNpYmxlUG9z
aXRpb24obV9zdGFydCwgbV9hZmZpbml0eSkpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgICAg
ICBtX2VuZCA9IGVuZE9mTGluZShWaXNpYmxlUG9zaXRpb24obV9lbmQsIG1fYWZmaW5pdHkpKS5k
ZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgbV9zdGFydCA9IHN0YXJ0T2ZMaW5lKFZpc2li
bGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KSkucG9zaXRpb24oKTsKKyAgICAgICAgICAg
IG1fZW5kID0gZW5kT2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX2VuZCwgbV9hZmZpbml0eSkpLnBv
c2l0aW9uKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBQQVJBR1JBUEg6IHsK
ICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3MobV9zdGFydCwgbV9hZmZpbml0eSk7CiAg
ICAgICAgICAgICBpZiAoaXNTdGFydE9mTGluZShwb3MpICYmIGlzRW5kT2ZEb2N1bWVudChwb3Mp
KQogICAgICAgICAgICAgICAgIHBvcyA9IHBvcy5wcmV2aW91cygpOwotICAgICAgICAgICAgbV9z
dGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgocG9zKS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAg
ICAgbV9zdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgocG9zKS5wb3NpdGlvbigpOwogICAgICAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChW
aXNpYmxlUG9zaXRpb24obV9lbmQsIG1fYWZmaW5pdHkpKTsKICAgICAgICAgICAgIC8vIEluY2x1
ZGUgdGhlIHNwYWNlIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHBhcmFncmFwaCBpbiB0aGUgc2VsZWN0
aW9uLgogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZOZXh0UGFyYWdyYXBoID0g
dmlzaWJsZVBhcmFncmFwaEVuZC5uZXh0KCk7Ci0gICAgICAgICAgICBtX2VuZCA9IHN0YXJ0T2ZO
ZXh0UGFyYWdyYXBoLmlzTm90TnVsbCgpID8gc3RhcnRPZk5leHRQYXJhZ3JhcGguZGVlcEVxdWl2
YWxlbnQoKSA6IHZpc2libGVQYXJhZ3JhcGhFbmQuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAg
ICAgIG1fZW5kID0gc3RhcnRPZk5leHRQYXJhZ3JhcGguaXNOb3ROdWxsKCkgPyBzdGFydE9mTmV4
dFBhcmFncmFwaC5wb3NpdGlvbigpIDogdmlzaWJsZVBhcmFncmFwaEVuZC5wb3NpdGlvbigpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBET0NVTUVOVF9CT1VO
REFSWToKLSAgICAgICAgICAgIG1fc3RhcnQgPSBzdGFydE9mRG9jdW1lbnQoVmlzaWJsZVBvc2l0
aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAgICAg
bV9lbmQgPSBlbmRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihtX2VuZCwgbV9hZmZpbml0eSkp
LmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICBtX3N0YXJ0ID0gc3RhcnRPZkRvY3VtZW50
KFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KSkucG9zaXRpb24oKTsKKyAgICAg
ICAgICAgIG1fZW5kID0gZW5kT2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24obV9lbmQsIG1fYWZm
aW5pdHkpKS5wb3NpdGlvbigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUEFS
QUdSQVBIX0JPVU5EQVJZOgotICAgICAgICAgICAgbV9zdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgo
VmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOwot
ICAgICAgICAgICAgbV9lbmQgPSBlbmRPZlBhcmFncmFwaChWaXNpYmxlUG9zaXRpb24obV9lbmQs
IG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgbV9zdGFydCA9IHN0
YXJ0T2ZQYXJhZ3JhcGgoVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKS5wb3Np
dGlvbigpOworICAgICAgICAgICAgbV9lbmQgPSBlbmRPZlBhcmFncmFwaChWaXNpYmxlUG9zaXRp
b24obV9lbmQsIG1fYWZmaW5pdHkpKS5wb3NpdGlvbigpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIApJbmRleDoga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2FwcGx5
X3N0eWxlX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI0CmRpZmYgLXUgLXIx
LjI0IGFwcGx5X3N0eWxlX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2FwcGx5X3N0eWxl
X2NvbW1hbmQuY3BwCTMgSmFuIDIwMDYgMDk6MTk6MDMgLTAwMDAJMS4yNAorKysga2h0bWwvZWRp
dGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAkxMCBKYW4gMjAwNiAwMjoxNzoxOCAtMDAwMApA
QCAtMTA1NSw3ICsxMDU1LDcgQEAKICAgICBOb2RlSW1wbCAqc3RhcnROb2RlID0gc3RhcnQubm9k
ZSgpOwogICAgIGludCBzdGFydE9mZnNldCA9IHN0YXJ0Lm9mZnNldCgpOwogCi0gICAgaWYgKHN0
YXJ0Lm5vZGUoKS0+aXNBdG9taWNOb2RlKCkpIHsKKyAgICBpZiAoaXNBdG9taWNOb2RlKHN0YXJ0
Lm5vZGUoKSkpIHsKICAgICAgICAgaWYgKHN0YXJ0Lm9mZnNldCgpICE9IDApCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTEwOTUsNyArMTA5NSw3IEBACiAgICAgTm9kZUltcGwgKmVu
ZE5vZGUgPSBlbmQubm9kZSgpOwogICAgIGludCBlbmRPZmZzZXQgPSBlbmQub2Zmc2V0KCk7CiAK
LSAgICBpZiAoZW5kTm9kZS0+aXNBdG9taWNOb2RlKCkpIHsKKyAgICBpZiAoaXNBdG9taWNOb2Rl
KGVuZE5vZGUpKSB7CiAgICAgICAgIGlmIChlbmRPZmZzZXQgPCBlbmROb2RlLT5jYXJldE1heE9m
ZnNldCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBraHRtbC9lZGl0aW5n
L2NvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMjMKZGlmZiAtdSAtcjEuMjMgY29tcG9zaXRlX2VkaXRfY29tbWFu
ZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5jcHAJMyBKYW4g
MjAwNiAwOToxOTowMyAtMDAwMAkxLjIzCisrKyBraHRtbC9lZGl0aW5nL2NvbXBvc2l0ZV9lZGl0
X2NvbW1hbmQuY3BwCTEwIEphbiAyMDA2IDAyOjE3OjE4IC0wMDAwCkBAIC00NTIsNyArNDUyLDcg
QEAKIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWduaWZpY2FudFRleHRE
b3duc3RyZWFtKGNvbnN0IERPTTo6UG9zaXRpb24gJnBvcykKIHsKLSAgICBQb3NpdGlvbiBlbmQg
PSBWaXNpYmxlUG9zaXRpb24ocG9zLCBWUF9ERUZBVUxUX0FGRklOSVRZKS5uZXh0KCkuZGVlcEVx
dWl2YWxlbnQoKS5kb3duc3RyZWFtKCk7CisgICAgUG9zaXRpb24gZW5kID0gVmlzaWJsZVBvc2l0
aW9uKHBvcywgVlBfREVGQVVMVF9BRkZJTklUWSkubmV4dCgpLnBvc2l0aW9uKCkuZG93bnN0cmVh
bSgpOwogICAgIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KHBvcywgZW5kKTsKIH0KIApAQCAtNTQ5
LDggKzU0OSw4IEBACiAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHQgPSB2aXNpYmxlUGFyYWdyYXBo
RW5kLm5leHQoKTsKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZCA9IG5leHQuaXNOb3RO
dWxsKCkgPyBuZXh0IDogdmlzaWJsZVBhcmFncmFwaEVuZDsKICAgICAKLSAgICBQb3NpdGlvbiBw
YXJhZ3JhcGhTdGFydCA9IHZpc2libGVQYXJhZ3JhcGhTdGFydC5kZWVwRXF1aXZhbGVudCgpLnVw
c3RyZWFtKCk7Ci0gICAgUG9zaXRpb24gZW5kID0gdmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgp
LnVwc3RyZWFtKCk7CisgICAgUG9zaXRpb24gcGFyYWdyYXBoU3RhcnQgPSB2aXNpYmxlUGFyYWdy
YXBoU3RhcnQucG9zaXRpb24oKS51cHN0cmVhbSgpOworICAgIFBvc2l0aW9uIGVuZCA9IHZpc2li
bGVFbmQucG9zaXRpb24oKS51cHN0cmVhbSgpOwogICAgIAogICAgIC8vIFBlcmZvcm0gc29tZSBj
aGVja3MgdG8gc2VlIGlmIHdlIG5lZWQgdG8gcGVyZm9ybSB3b3JrIGluIHRoaXMgZnVuY3Rpb24u
CiAgICAgaWYgKHBhcmFncmFwaFN0YXJ0Lm5vZGUoKS0+aXNCbG9ja0Zsb3coKSkgewpJbmRleDog
a2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9j
b21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNQpkaWZmIC11IC1yMS4yNSBkZWxl
dGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rp
b25fY29tbWFuZC5jcHAJMyBKYW4gMjAwNiAwOToxOTowMyAtMDAwMAkxLjI1CisrKyBraHRtbC9l
ZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJMTAgSmFuIDIwMDYgMDI6MTc6MTgg
LTAwMDAKQEAgLTY5LDE3ICs2OSw2IEBACiAgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUobWVu
dVRhZyk7CiB9CiAKLXN0YXRpYyBpbnQgbWF4RGVlcE9mZnNldChOb2RlSW1wbCAqbikKLXsKLSAg
ICBpZiAobi0+aXNBdG9taWNOb2RlKCkpCi0gICAgICAgIHJldHVybiBuLT5jYXJldE1heE9mZnNl
dCgpOwotCi0gICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIG4tPmNo
aWxkTm9kZUNvdW50KCk7Ci0KLSAgICByZXR1cm4gMTsKLX0KLQogc3RhdGljIHZvaWQgZGVidWdQ
b3NpdGlvbihjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IFBvc2l0aW9uICZwb3MpCiB7CiAgICAg
aWYgKCFwcmVmaXgpCkBAIC0xNjksNyArMTU4LDcgQEAKICAgICBpZiAobV9zbWFydERlbGV0ZSkg
ewogICAgIAogICAgICAgICAvLyBza2lwIHNtYXJ0IGRlbGV0ZSBpZiB0aGUgc2VsZWN0aW9uIHRv
IGRlbGV0ZSBhbHJlYWR5IHN0YXJ0cyBvciBlbmRzIHdpdGggd2hpdGVzcGFjZQotICAgICAgICBQ
b3NpdGlvbiBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV91cHN0cmVhbVN0YXJ0LCBtX3NlbGVjdGlv
blRvRGVsZXRlLnN0YXJ0QWZmaW5pdHkoKSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgUG9z
aXRpb24gcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fdXBzdHJlYW1TdGFydCwgbV9zZWxlY3Rpb25U
b0RlbGV0ZS5zdGFydEFmZmluaXR5KCkpLnBvc2l0aW9uKCk7CiAgICAgICAgIGJvb2wgc2tpcFNt
YXJ0RGVsZXRlID0gcG9zLnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKFZQX0RFRkFVTFRfQUZG
SU5JVFksIHRydWUpLmlzTm90TnVsbCgpOwogICAgICAgICBpZiAoIXNraXBTbWFydERlbGV0ZSkK
ICAgICAgICAgICAgIHNraXBTbWFydERlbGV0ZSA9IG1fZG93bnN0cmVhbUVuZC5sZWFkaW5nV2hp
dGVzcGFjZVBvc2l0aW9uKFZQX0RFRkFVTFRfQUZGSU5JVFksIHRydWUpLmlzTm90TnVsbCgpOwpA
QCAtMTc4LDcgKzE2Nyw3IEBACiAgICAgICAgIGJvb2wgaGFzTGVhZGluZ1doaXRlc3BhY2VCZWZv
cmVBZGp1c3RtZW50ID0gbV91cHN0cmVhbVN0YXJ0LmxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24o
bV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydEFmZmluaXR5KCksIHRydWUpLmlzTm90TnVsbCgpOwog
ICAgICAgICBpZiAoIXNraXBTbWFydERlbGV0ZSAmJiBoYXNMZWFkaW5nV2hpdGVzcGFjZUJlZm9y
ZUFkanVzdG1lbnQpIHsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0g
VmlzaWJsZVBvc2l0aW9uKHN0YXJ0LCBtX3NlbGVjdGlvblRvRGVsZXRlLnN0YXJ0QWZmaW5pdHko
KSkucHJldmlvdXMoKTsKLSAgICAgICAgICAgIHBvcyA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxl
bnQoKTsKKyAgICAgICAgICAgIHBvcyA9IHZpc2libGVQb3MucG9zaXRpb24oKTsKICAgICAgICAg
ICAgIC8vIEV4cGFuZCBvdXQgb25lIGNoYXJhY3RlciB1cHN0cmVhbSBmb3Igc21hcnQgZGVsZXRl
IGFuZCByZWNhbGN1bGF0ZQogICAgICAgICAgICAgLy8gcG9zaXRpb25zIGJhc2VkIG9uIHRoaXMg
Y2hhbmdlLgogICAgICAgICAgICAgbV91cHN0cmVhbVN0YXJ0ID0gcG9zLnVwc3RyZWFtKCk7CkBA
IC0xOTEsNyArMTgwLDcgQEAKICAgICAgICAgaWYgKCFza2lwU21hcnREZWxldGUgJiYgIWhhc0xl
YWRpbmdXaGl0ZXNwYWNlQmVmb3JlQWRqdXN0bWVudCAmJiBtX2Rvd25zdHJlYW1FbmQudHJhaWxp
bmdXaGl0ZXNwYWNlUG9zaXRpb24oVlBfREVGQVVMVF9BRkZJTklUWSwgdHJ1ZSkuaXNOb3ROdWxs
KCkpIHsKICAgICAgICAgICAgIC8vIEV4cGFuZCBvdXQgb25lIGNoYXJhY3RlciBkb3duc3RyZWFt
IGZvciBzbWFydCBkZWxldGUgYW5kIHJlY2FsY3VsYXRlCiAgICAgICAgICAgICAvLyBwb3NpdGlv
bnMgYmFzZWQgb24gdGhpcyBjaGFuZ2UuCi0gICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRp
b24oZW5kLCBtX3NlbGVjdGlvblRvRGVsZXRlLmVuZEFmZmluaXR5KCkpLm5leHQoKS5kZWVwRXF1
aXZhbGVudCgpOworICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKGVuZCwgbV9zZWxl
Y3Rpb25Ub0RlbGV0ZS5lbmRBZmZpbml0eSgpKS5uZXh0KCkucG9zaXRpb24oKTsKICAgICAgICAg
ICAgIG1fdXBzdHJlYW1FbmQgPSBwb3MudXBzdHJlYW0oKTsKICAgICAgICAgICAgIG1fZG93bnN0
cmVhbUVuZCA9IHBvcy5kb3duc3RyZWFtKCk7CiAgICAgICAgICAgICBtX3RyYWlsaW5nV2hpdGVz
cGFjZSA9IG1fZG93bnN0cmVhbUVuZC50cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbihWUF9ERUZB
VUxUX0FGRklOSVRZKTsKQEAgLTIxMyw3ICsyMDIsNyBAQAogICAgIC8vCiAgICAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVFbmQoZW5kLCBtX3NlbGVjdGlvblRvRGVsZXRlLmVuZEFmZmluaXR5KCkp
OwogICAgIGlmIChpc0VuZE9mUGFyYWdyYXBoKHZpc2libGVFbmQpKSB7Ci0gICAgICAgIFBvc2l0
aW9uIHByZXZpb3VzTGluZVN0YXJ0ID0gcHJldmlvdXNMaW5lUG9zaXRpb24odmlzaWJsZUVuZCwg
MCkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgUG9zaXRpb24gcHJldmlvdXNMaW5lU3RhcnQg
PSBwcmV2aW91c0xpbmVQb3NpdGlvbih2aXNpYmxlRW5kLCAwKS5wb3NpdGlvbigpOwogICAgICAg
ICBpZiAocHJldmlvdXNMaW5lU3RhcnQuaXNOdWxsKCkgfHwgUmFuZ2VJbXBsOjpjb21wYXJlQm91
bmRhcnlQb2ludHMocHJldmlvdXNMaW5lU3RhcnQsIG1fZG93bnN0cmVhbVN0YXJ0KSA+PSAwKQog
ICAgICAgICAgICAgbV9tZXJnZUJsb2Nrc0FmdGVyRGVsZXRlID0gZmFsc2U7CiAgICAgfQpAQCAt
MjkwLDcgKzI3OSw2IEBACiAgICAgaWYgKGlzQlJPbkxpbmVCeUl0c2VsZikgewogICAgICAgICBt
X2VuZGluZ1Bvc2l0aW9uID0gUG9zaXRpb24obV9kb3duc3RyZWFtU3RhcnQubm9kZSgpLT5wYXJl
bnROb2RlKCksIG1fZG93bnN0cmVhbVN0YXJ0Lm5vZGUoKS0+bm9kZUluZGV4KCkpOwogICAgICAg
ICByZW1vdmVOb2RlKG1fZG93bnN0cmVhbVN0YXJ0Lm5vZGUoKSk7Ci0gICAgICAgIG1fZW5kaW5n
UG9zaXRpb24gPSBtX2VuZGluZ1Bvc2l0aW9uLmVxdWl2YWxlbnREZWVwUG9zaXRpb24oKTsKICAg
ICAgICAgbV9tZXJnZUJsb2Nrc0FmdGVyRGVsZXRlID0gZmFsc2U7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KQEAgLTMzNSw3ICszMjMsNyBAQAogICAgICAgICB9CiAgICAgfQogICAgIGVs
c2UgaWYgKHN0YXJ0T2Zmc2V0ID49IG1fc3RhcnROb2RlLT5jYXJldE1heE9mZnNldCgpICYmCi0g
ICAgICAgICAgICAgKG1fc3RhcnROb2RlLT5pc0F0b21pY05vZGUoKSB8fCBzdGFydE9mZnNldCA9
PSAwKSkgeworICAgICAgICAgICAgIChpc0F0b21pY05vZGUobV9zdGFydE5vZGUuZ2V0KCkpIHx8
IHN0YXJ0T2Zmc2V0ID09IDApKSB7CiAgICAgICAgIC8vIE1vdmUgdGhlIHN0YXJ0IG5vZGUgdG8g
dGhlIG5leHQgbm9kZSBpbiB0aGUgdHJlZSBzaW5jZSB0aGUgc3RhcnRPZmZzZXQgaXMgZXF1YWwg
dG8KICAgICAgICAgLy8gb3IgYmV5b25kIHRoZSBzdGFydCBub2RlJ3MgY2FyZXRNYXhPZmZzZXQg
VGhpcyBtZWFucyB0aGVyZSBpcyBub3RoaW5nIHZpc2libGUgdG8gZGVsZXRlLiAKICAgICAgICAg
Ly8gQnV0IGRvbid0IGRvIHRoaXMgaWYgdGhlIG5vZGUgaXMgbm90IGF0b21pYyAtIHdlIGRvbid0
IHdhbnQgdG8gbW92ZSBpbnRvIHRoZSBmaXJzdCBjaGlsZC4KSW5kZXg6IGtodG1sL2VkaXRpbmcv
aHRtbGVkaXRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI2Mgpk
aWZmIC11IC1yMS4yNjIgaHRtbGVkaXRpbmcuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2h0bWxlZGl0
aW5nLmNwcAkyMSBOb3YgMjAwNSAwMToyMDowMiAtMDAwMAkxLjI2MgorKysga2h0bWwvZWRpdGlu
Zy9odG1sZWRpdGluZy5jcHAJMTAgSmFuIDIwMDYgMDI6MTc6MTggLTAwMDAKQEAgLTkxLDYgKzkx
LDI4IEBACiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKKy8vIEF0b21pYyBtZWFucyB0aGF0IHRoZSBj
b250ZW50cyBvZiB0aGUgbm9kZSBzaG91bGQgYmUgaWdub3JlZCBmb3IgdGhlIHB1cnBvc2VzIG9m
IGVkaXRpbmcuCitib29sIGlzQXRvbWljTm9kZShjb25zdCBOb2RlSW1wbCAqbm9kZSkKK3sKKyAg
ICByZXR1cm4gbm9kZSAmJiAoIW5vZGUtPmhhc0NoaWxkTm9kZXMoKSB8fCBub2RlLT5yZW5kZXJl
cigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzV2lkZ2V0KCkpOworfQorCitpbnQgbWF4RGVlcE9m
ZnNldChjb25zdCBOb2RlSW1wbCAqbm9kZSkKK3sKKyAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgp
KQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dEltcGwqPihub2RlKS0+bGVu
Z3RoKCk7CisgICAgICAgIAorICAgIGlmIChub2RlLT5oYXNDaGlsZE5vZGVzKCkpCisgICAgICAg
IHJldHVybiBub2RlLT5jaGlsZE5vZGVDb3VudCgpOworICAgIAorICAgIFJlbmRlck9iamVjdCAq
cmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIC8vIEFsbG93cyBbYnIsIDFdIGFzIGEg
cG9zaXRpb24sIHRob3VnaCB0aGF0IGlzIGluY29ycmVjdAorICAgIGlmIChub2RlLT5oYXNUYWdO
YW1lKGJyVGFnKSB8fCAocmVuZGVyZXIgJiYgKHJlbmRlcmVyLT5pc1JlcGxhY2VkKCkgfHwgcmVu
ZGVyZXItPmlzV2lkZ2V0KCkpKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gMDsK
K30KKwogdm9pZCByZWJhbGFuY2VXaGl0ZXNwYWNlSW5UZXh0Tm9kZShOb2RlSW1wbCAqbm9kZSwg
dW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQogewogICAgIHN0YXRpYyBR
UmVnRXhwIG5vblJlZ3VsYXJXaGl0ZXNwYWNlKCJbXHhhMFxuXSIpOwpAQCAtMjM4LDcgKzI2MCw4
IEBACiBib29sIGlzTGFzdFZpc2libGVQb3NpdGlvbkluU3BlY2lhbEVsZW1lbnQoY29uc3QgUG9z
aXRpb24mIHBvcykKIHsKICAgICAvLyBtYWtlIHN1cmUgdG8gZ2V0IGEgcmFuZ2UtY29tcGxpYW50
IHZlcnNpb24gb2YgdGhlIHBvc2l0aW9uCi0gICAgUG9zaXRpb24gcmFuZ2VQb3MgPSBWaXNpYmxl
UG9zaXRpb24ocG9zLCBET1dOU1RSRUFNKS5wb3NpdGlvbigpOworICAgIC8vIEZJWE1FOiByYW5n
ZVBvcyBpc24ndCBiZWluZyB1c2VkIHRvIGNyZWF0ZSBET00gUmFuZ2VzLCBzbyB3aHkgZG9lcyBp
dCBuZWVkIHRvIGJlIHJhbmdlIGNvbXBsaWFudD8KKyAgICBQb3NpdGlvbiByYW5nZVBvcyA9IFZp
c2libGVQb3NpdGlvbihwb3MsIERPV05TVFJFQU0pLnBvc2l0aW9uKCkuZXF1aXZhbGVudFJhbmdl
Q29tcGxpYW50UG9zaXRpb24oKTsKIAogICAgIFZpc2libGVQb3NpdGlvbiB2UG9zID0gVmlzaWJs
ZVBvc2l0aW9uKHJhbmdlUG9zLCBET1dOU1RSRUFNKTsKIApAQCAtMjY0LDcgKzI4Nyw4IEBACiAg
ICAgQVNTRVJUKGlzTGFzdFZpc2libGVQb3NpdGlvbkluU3BlY2lhbEVsZW1lbnQocG9zKSk7CiAK
ICAgICAvLyBtYWtlIHN1cmUgdG8gZ2V0IGEgcmFuZ2UtY29tcGxpYW50IHZlcnNpb24gb2YgdGhl
IHBvc2l0aW9uCi0gICAgUG9zaXRpb24gcmFuZ2VQb3MgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBE
T1dOU1RSRUFNKS5wb3NpdGlvbigpOworICAgIC8vIEZJWE1FOiByYW5nZVBvcyBpc24ndCBiZWlu
ZyB1c2VkIHRvIGNyZWF0ZSBET00gUmFuZ2VzLCBzbyB3aHkgZG9lcyBpdCBuZWVkIHRvIGJlIHJh
bmdlIGNvbXBsaWFudD8KKyAgICBQb3NpdGlvbiByYW5nZVBvcyA9IFZpc2libGVQb3NpdGlvbihw
b3MsIERPV05TVFJFQU0pLnBvc2l0aW9uKCkuZXF1aXZhbGVudFJhbmdlQ29tcGxpYW50UG9zaXRp
b24oKTsKIAogICAgIFZpc2libGVQb3NpdGlvbiB2UG9zID0gVmlzaWJsZVBvc2l0aW9uKHJhbmdl
UG9zLCBET1dOU1RSRUFNKTsKIApJbmRleDoga2h0bWwvZWRpdGluZy9odG1sZWRpdGluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvaHRtbGVk
aXRpbmcuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMTMKZGlmZiAtdSAtcjEuMTEzIGh0bWxl
ZGl0aW5nLmgKLS0tIGtodG1sL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAk5IE5vdiAyMDA1IDE5OjU2
OjQ4IC0wMDAwCTEuMTEzCisrKyBraHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmgJMTAgSmFuIDIw
MDYgMDI6MTc6MTggLTAwMDAKQEAgLTU0LDYgKzU0LDkgQEAKIAogbmFtZXNwYWNlIGtodG1sIHsK
IAorYm9vbCBpc0F0b21pY05vZGUoY29uc3QgRE9NOjpOb2RlSW1wbCAqbm9kZSk7CitpbnQgbWF4
RGVlcE9mZnNldChjb25zdCBET006Ok5vZGVJbXBsICpub2RlKTsKKwogdm9pZCByZWJhbGFuY2VX
aGl0ZXNwYWNlSW5UZXh0Tm9kZShET006Ok5vZGVJbXBsICpub2RlLCB1bnNpZ25lZCBpbnQgc3Rh
cnQsIHVuc2lnbmVkIGludCBsZW5ndGgpOwogRE9NOjpET01TdHJpbmcgJm5vbkJyZWFraW5nU3Bh
Y2VTdHJpbmcoKTsKIHZvaWQgZGVyZWZOb2Rlc0luTGlzdChRUHRyTGlzdDxET006Ok5vZGVJbXBs
PiAmbGlzdCk7CkluZGV4OiBraHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcv
aW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIK
ZGlmZiAtdSAtcjEuMTIgaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAKLS0tIGtodG1sL2Vk
aXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAJMjIgRGVjIDIwMDUgMDQ6MTE6MzYg
LTAwMDAJMS4xMgorKysga2h0bWwvZWRpdGluZy9pbnNlcnRfbGluZV9icmVha19jb21tYW5kLmNw
cAkxMCBKYW4gMjAwNiAwMjoxNzoxOCAtMDAwMApAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgCiAg
ICAgaWYgKHR5cGluZ1N0eWxlICYmIHR5cGluZ1N0eWxlLT5sZW5ndGgoKSA+IDApIHsKICAgICAg
ICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb25CZWZvcmVTdHlsZSA9IGVuZGluZ1NlbGVj
dGlvbigpOwotICAgICAgICBhcHBseVN0eWxlKHR5cGluZ1N0eWxlLCBQb3NpdGlvbihub2RlVG9J
bnNlcnQsIDApLCBQb3NpdGlvbihub2RlVG9JbnNlcnQsIG5vZGVUb0luc2VydC0+bWF4RGVlcE9m
ZnNldCgpKSk7CisgICAgICAgIGFwcGx5U3R5bGUodHlwaW5nU3R5bGUsIFBvc2l0aW9uKG5vZGVU
b0luc2VydCwgMCksIFBvc2l0aW9uKG5vZGVUb0luc2VydCwgbWF4RGVlcE9mZnNldChub2RlVG9J
bnNlcnQpKSk7CiAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihzZWxlY3Rpb25CZWZvcmVTdHls
ZSk7CiAgICAgfQogCkluZGV4OiBraHRtbC9lZGl0aW5nL2luc2VydF90ZXh0X2NvbW1hbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvaW5z
ZXJ0X3RleHRfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAtdSAt
cjEuMTQgaW5zZXJ0X3RleHRfY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvaW5zZXJ0X3Rl
eHRfY29tbWFuZC5jcHAJMjEgTm92IDIwMDUgMDE6MjA6MDMgLTAwMDAJMS4xNAorKysga2h0bWwv
ZWRpdGluZy9pbnNlcnRfdGV4dF9jb21tYW5kLmNwcAkxMCBKYW4gMjAwNiAwMjoxNzoxOCAtMDAw
MApAQCAtMTYyLDcgKzE2Miw3IEBACiAKIERPTTo6UG9zaXRpb24gSW5zZXJ0VGV4dENvbW1hbmQ6
Omluc2VydFRhYihQb3NpdGlvbiBwb3MpCiB7Ci0gICAgUG9zaXRpb24gaW5zZXJ0UG9zID0gVmlz
aWJsZVBvc2l0aW9uKHBvcywgRE9XTlNUUkVBTSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBQb3Np
dGlvbiBpbnNlcnRQb3MgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBET1dOU1RSRUFNKS5wb3NpdGlv
bigpOwogICAgIE5vZGVJbXBsICpub2RlID0gaW5zZXJ0UG9zLm5vZGUoKTsKICAgICB1bnNpZ25l
ZCBpbnQgb2Zmc2V0ID0gaW5zZXJ0UG9zLm9mZnNldCgpOwogCkluZGV4OiBraHRtbC9lZGl0aW5n
L3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjMKZGlmZiAtdSAtcjEuMjMgcmVwbGFjZV9zZWxlY3Rp
b25fY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29tbWFu
ZC5jcHAJMyBKYW4gMjAwNiAwOToxOTowNiAtMDAwMAkxLjIzCisrKyBraHRtbC9lZGl0aW5nL3Jl
cGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTEwIEphbiAyMDA2IDAyOjE3OjE4IC0wMDAwCkBA
IC0zMjQsNyArMzI0LDcgQEAKICAgICAgICAgLy8gSWYgdGhlIGRlc2lyZWRTdHlsZSBpcyBub24t
emVybyBsZW5ndGgsIHRoYXQgbWVhbnMgdGhlIGN1cnJlbnQgc3R5bGUgZGlmZmVycwogICAgICAg
ICAvLyBmcm9tIHRoZSBkZXNpcmVkIGJ5IHRoZSBzdHlsZXMgcmVtYWluaW5nIGluIHRoZSBkZXNp
cmVkU3R5bGUgZGVjbGFyYXRpb24uCiAgICAgICAgIGlmIChkZXNpcmVkU3R5bGUtPmxlbmd0aCgp
ID4gMCkKLQkgICAgYXBwbHlTdHlsZShkZXNpcmVkU3R5bGUsIFBvc2l0aW9uKG5vZGUsIDApLCBQ
b3NpdGlvbihub2RlLCBub2RlLT5tYXhEZWVwT2Zmc2V0KCkpKTsKKwkgICAgYXBwbHlTdHlsZShk
ZXNpcmVkU3R5bGUsIFBvc2l0aW9uKG5vZGUsIDApLCBQb3NpdGlvbihub2RlLCBtYXhEZWVwT2Zm
c2V0KG5vZGUpKSk7CiAgICAgfQogfQogCkBAIC02ODcsNyArNjg3LDcgQEAKICAgICAgICAgICAg
IGluc2VydE5vZGVBZnRlckFuZFVwZGF0ZU5vZGVzSW5zZXJ0ZWQocmVmTm9kZSwgaW5zZXJ0aW9u
QmxvY2spOwogICAgICAgICAvLyBJbnNlcnQgdGhlIHJlc3Qgb2YgdGhlIGZyYWdtZW50IGF0IHRo
ZSBORVhUIHZpc2libGUgcG9zaXRpb24gT05MWSBJRiBwYXJ0IG9mIHRoZSBmcmFnbWVudCB3YXMg
YWxyZWFkeSBtZXJnZWQgQU5EICFpc1Byb2JhYmx5QmxvY2sKICAgICAgICAgfSBlbHNlIGlmICht
X2xhc3ROb2RlSW5zZXJ0ZWQgJiYgIWlzUHJvYmFibHlCbG9jayhyZWZOb2RlKSkgewotICAgICAg
ICAgICAgUG9zaXRpb24gcG9zID0gdmlzaWJsZVBvcy5uZXh0KCkuZGVlcEVxdWl2YWxlbnQoKS5k
b3duc3RyZWFtKCk7CisgICAgICAgICAgICBQb3NpdGlvbiBwb3MgPSB2aXNpYmxlUG9zLm5leHQo
KS5wb3NpdGlvbigpLmRvd25zdHJlYW0oKTsKICAgICAgICAgICAgIGluc2VydE5vZGVBdEFuZFVw
ZGF0ZU5vZGVzSW5zZXJ0ZWQocmVmTm9kZSwgcG9zLm5vZGUoKSwgcG9zLm9mZnNldCgpKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGluc2VydE5vZGVBdEFuZFVwZGF0ZU5vZGVzSW5z
ZXJ0ZWQocmVmTm9kZSwgaW5zZXJ0aW9uUG9zLm5vZGUoKSwgaW5zZXJ0aW9uUG9zLm9mZnNldCgp
KTsKQEAgLTc2NCwxMiArNzY0LDEyIEBACiAgICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IG5leHQgPSBwb3MubmV4dCgpOwogCiAgICAgICAgICAgICAgICAgLy8gU2VsZWN0IHVwIHRvIHRo
ZSBwYXJhZ3JhcGggc2VwYXJhdG9yIHRoYXQgd2FzIGFkZGVkLgotICAgICAgICAgICAgICAgIGxh
c3RQb3NpdGlvblRvU2VsZWN0ID0gbmV4dC5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKTsK
KyAgICAgICAgICAgICAgICBsYXN0UG9zaXRpb25Ub1NlbGVjdCA9IG5leHQucG9zaXRpb24oKS5k
b3duc3RyZWFtKCk7CiAgICAgICAgICAgICAgICAgdXBkYXRlTm9kZXNJbnNlcnRlZChsYXN0UG9z
aXRpb25Ub1NlbGVjdC5ub2RlKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAvLyBTZWxlY3QgdXAgdG8gdGhlIHByZWV4aXNpbmcgcGFyYWdyYXBoIHNlcGFyYXRvci4K
ICAgICAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IHBvcy5uZXh0KCk7Ci0gICAg
ICAgICAgICAgICAgbGFzdFBvc2l0aW9uVG9TZWxlY3QgPSBuZXh0LmRlZXBFcXVpdmFsZW50KCku
ZG93bnN0cmVhbSgpOworICAgICAgICAgICAgICAgIGxhc3RQb3NpdGlvblRvU2VsZWN0ID0gbmV4
dC5wb3NpdGlvbigpLmRvd25zdHJlYW0oKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0gCkBAIC03OTQsMTAgKzc5NCwxMCBAQAogICAgICAgICAgICAgTm9kZUltcGwgKm5vZGUgPSBi
ZXlvbmRFbmROb2RlOwogICAgICAgICAgICAgTm9kZUltcGwgKnJlZk5vZGUgPSBtX2xhc3ROb2Rl
SW5zZXJ0ZWQuZ2V0KCk7CiAgICAgICAgICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICAgICAg
ICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgICAgICAg
ICAgICAgIC8vIFN0b3AgYXQgdGhlIGZpcnN0IHRhYmxlIG9yIGJsb2NrLgotICAgICAgICAgICAg
ICAgIGlmIChyZW5kZXJlciAmJiAocmVuZGVyZXItPmlzQmxvY2tGbG93KCkgfHwgcmVuZGVyZXIt
PmlzVGFibGUoKSkpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmlzQmxvY2tGbG93T3JUYWJs
ZSgpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgTm9kZUltcGwgKm5leHQgPSBub2RlLT5uZXh0U2libGluZygpOwogICAg
ICAgICAgICAgICAgIGJsb2Nrcy5hcHBlbmQobm9kZS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVu
dCgpKTsKICAgICAgICAgICAgICAgICBjb21wdXRlQW5kU3RvcmVOb2RlRGVzaXJlZFN0eWxlKG5v
ZGUsIHN0eWxlcyk7CkluZGV4OiBraHRtbC9lZGl0aW5nL3R5cGluZ19jb21tYW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3R5cGluZ19j
b21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXUgLXIxLjUgdHlwaW5n
X2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL3R5cGluZ19jb21tYW5kLmNwcAkyMSBOb3Yg
MjAwNSAwMToyMDowNSAtMDAwMAkxLjUKKysrIGtodG1sL2VkaXRpbmcvdHlwaW5nX2NvbW1hbmQu
Y3BwCTEwIEphbiAyMDA2IDAyOjE3OjE4IC0wMDAwCkBAIC0zMzUsOCArMzM1LDggQEAKICAgICAg
ICAgICAgIC8vIERvIG5vdGhpbmcgaW4gdGhlIGNhc2UgdGhhdCB0aGUgY2FyZXQgaXMgYXQgdGhl
IHN0YXJ0IG9mIGEKICAgICAgICAgICAgIC8vIHJvb3QgZWRpdGFibGUgZWxlbWVudCBvciBhdCB0
aGUgc3RhcnQgb2YgYSBkb2N1bWVudC4KICAgICAgICAgICAgIFBvc2l0aW9uIHBvcyhlbmRpbmdT
ZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAgICAgICAgICAgIFBvc2l0aW9uIHN0YXJ0ID0gVmlzaWJs
ZVBvc2l0aW9uKHBvcywgZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnRBZmZpbml0eSgpKS5wcmV2aW91
cygpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgICAgICBQb3NpdGlvbiBlbmQgPSBWaXNpYmxl
UG9zaXRpb24ocG9zLCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydEFmZmluaXR5KCkpLmRlZXBFcXVp
dmFsZW50KCk7CisgICAgICAgICAgICBQb3NpdGlvbiBzdGFydCA9IFZpc2libGVQb3NpdGlvbihw
b3MsIGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0QWZmaW5pdHkoKSkucHJldmlvdXMoKS5wb3NpdGlv
bigpOworICAgICAgICAgICAgUG9zaXRpb24gZW5kID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgZW5k
aW5nU2VsZWN0aW9uKCkuc3RhcnRBZmZpbml0eSgpKS5wb3NpdGlvbigpOwogICAgICAgICAgICAg
aWYgKHN0YXJ0LmlzTm90TnVsbCgpICYmIGVuZC5pc05vdE51bGwoKSAmJiBzdGFydC5ub2RlKCkt
PnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSBlbmQubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50
KCkpCiAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVG9EZWxldGUgPSBTZWxlY3Rpb25Db250cm9s
bGVyKHN0YXJ0LCBTRUxfREVGQVVMVF9BRkZJTklUWSwgZW5kLCBTRUxfREVGQVVMVF9BRkZJTklU
WSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTM2Niw4ICszNjYsOCBAQAogICAgICAgICAgICAg
Ly8gRG8gbm90aGluZyBpbiB0aGUgY2FzZSB0aGF0IHRoZSBjYXJldCBpcyBhdCB0aGUgc3RhcnQg
b2YgYQogICAgICAgICAgICAgLy8gcm9vdCBlZGl0YWJsZSBlbGVtZW50IG9yIGF0IHRoZSBzdGFy
dCBvZiBhIGRvY3VtZW50LgogICAgICAgICAgICAgUG9zaXRpb24gcG9zKGVuZGluZ1NlbGVjdGlv
bigpLnN0YXJ0KCkpOwotICAgICAgICAgICAgUG9zaXRpb24gc3RhcnQgPSBWaXNpYmxlUG9zaXRp
b24ocG9zLCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydEFmZmluaXR5KCkpLm5leHQoKS5kZWVwRXF1
aXZhbGVudCgpOwotICAgICAgICAgICAgUG9zaXRpb24gZW5kID0gVmlzaWJsZVBvc2l0aW9uKHBv
cywgZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnRBZmZpbml0eSgpKS5kZWVwRXF1aXZhbGVudCgpOwor
ICAgICAgICAgICAgUG9zaXRpb24gc3RhcnQgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBlbmRpbmdT
ZWxlY3Rpb24oKS5zdGFydEFmZmluaXR5KCkpLm5leHQoKS5wb3NpdGlvbigpOworICAgICAgICAg
ICAgUG9zaXRpb24gZW5kID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgZW5kaW5nU2VsZWN0aW9uKCku
c3RhcnRBZmZpbml0eSgpKS5wb3NpdGlvbigpOwogICAgICAgICAgICAgaWYgKHN0YXJ0LmlzTm90
TnVsbCgpICYmIGVuZC5pc05vdE51bGwoKSAmJiBzdGFydC5ub2RlKCktPnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKSA9PSBlbmQubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkpCiAgICAgICAgICAg
ICAgICAgc2VsZWN0aW9uVG9EZWxldGUgPSBTZWxlY3Rpb25Db250cm9sbGVyKHN0YXJ0LCBTRUxf
REVGQVVMVF9BRkZJTklUWSwgZW5kLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7CiAgICAgICAgICAg
ICBicmVhazsKSW5kZXg6IGtodG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3Bv
c2l0aW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42OApkaWZmIC11IC1yMS42OCB2aXNp
YmxlX3Bvc2l0aW9uLmNwcAotLS0ga2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAkz
IEphbiAyMDA2IDEyOjI4OjI1IC0wMDAwCTEuNjgKKysrIGtodG1sL2VkaXRpbmcvdmlzaWJsZV9w
b3NpdGlvbi5jcHAJMTAgSmFuIDIwMDYgMDI6MTc6MTggLTAwMDAKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5j
bHVkZSAidmlzaWJsZV91bml0cy5oIgotCisjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNs
dWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2xpbmUuaCIKICNp
bmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgpAQCAtNjMsNyArNjMsNyBAQAogCiBW
aXNpYmxlUG9zaXRpb246OlZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJm90
aGVyKQogewotICAgIG1fZGVlcFBvc2l0aW9uID0gb3RoZXIubV9kZWVwUG9zaXRpb247CisgICAg
bV9wb3NpdGlvbiA9IG90aGVyLm1fcG9zaXRpb247CiAgICAgbV9hZmZpbml0eSA9IG90aGVyLm1f
YWZmaW5pdHk7CiB9CiAKQEAgLTcyLDMwICs3MiwzMCBAQAogICAgIG1fYWZmaW5pdHkgPSBhZmZp
bml0eTsKICAgICAKICAgICBpZiAocG9zLmlzTnVsbCgpKSB7Ci0gICAgICAgIG1fZGVlcFBvc2l0
aW9uID0gUG9zaXRpb24oKTsKKyAgICAgICAgbV9wb3NpdGlvbiA9IFBvc2l0aW9uKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgcG9zLm5vZGUoKS0+Z2V0RG9jdW1lbnQoKS0+
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgUG9zaXRpb24gZGVl
cFBvcyA9IGRlZXBFcXVpdmFsZW50KHBvcyk7CiAgICAgaWYgKGlzQ2FuZGlkYXRlKGRlZXBQb3Mp
KSB7Ci0gICAgICAgIG1fZGVlcFBvc2l0aW9uID0gZGVlcFBvczsKKyAgICAgICAgbV9wb3NpdGlv
biA9IGRlZXBQb3M7CiAgICAgICAgIFBvc2l0aW9uIHByZXZpb3VzID0gcHJldmlvdXNWaXNpYmxl
UG9zaXRpb24oZGVlcFBvcyk7CiAgICAgICAgIGlmIChwcmV2aW91cy5pc05vdE51bGwoKSkgewog
ICAgICAgICAgICAgUG9zaXRpb24gbmV4dCA9IG5leHRWaXNpYmxlUG9zaXRpb24ocHJldmlvdXMp
OwogICAgICAgICAgICAgaWYgKG5leHQuaXNOb3ROdWxsKCkpCi0gICAgICAgICAgICAgICAgbV9k
ZWVwUG9zaXRpb24gPSBuZXh0OworICAgICAgICAgICAgICAgIG1fcG9zaXRpb24gPSBuZXh0Owog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgUG9zaXRpb24gbmV4dCA9IG5leHRWaXNp
YmxlUG9zaXRpb24oZGVlcFBvcyk7CiAgICAgICAgIFBvc2l0aW9uIHByZXYgPSBwcmV2aW91c1Zp
c2libGVQb3NpdGlvbihkZWVwUG9zKTsKICAgICAgICAgCiAgICAgICAgIGlmIChuZXh0LmlzTnVs
bCgpICYmIHByZXYuaXNOdWxsKCkpCi0gICAgICAgICAgICBtX2RlZXBQb3NpdGlvbiA9IFBvc2l0
aW9uKCk7CisgICAgICAgICAgICBtX3Bvc2l0aW9uID0gUG9zaXRpb24oKTsKICAgICAgICAgZWxz
ZSBpZiAobmV4dC5pc051bGwoKSkKLSAgICAgICAgICAgIG1fZGVlcFBvc2l0aW9uID0gcHJldjsK
KyAgICAgICAgICAgIG1fcG9zaXRpb24gPSBwcmV2OwogICAgICAgICBlbHNlIGlmIChwcmV2Lmlz
TnVsbCgpKQotICAgICAgICAgICAgbV9kZWVwUG9zaXRpb24gPSBuZXh0OworICAgICAgICAgICAg
bV9wb3NpdGlvbiA9IG5leHQ7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgTm9kZUltcGwg
Km9yaWdpbmFsQmxvY2sgPSBwb3Mubm9kZSgpID8gcG9zLm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tG
bG93RWxlbWVudCgpIDogMDsKICAgICAgICAgICAgIGJvb2wgbmV4dElzT3V0c2lkZU9yaWdpbmFs
QmxvY2sgPSAhbmV4dC5ub2RlKCktPmlzQW5jZXN0b3Iob3JpZ2luYWxCbG9jaykgJiYgbmV4dC5u
b2RlKCkgIT0gb3JpZ2luYWxCbG9jazsKQEAgLTEwMyw5ICsxMDMsOSBAQAogICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAobmV4dElzT3V0c2lkZU9yaWdpbmFsQmxvY2sgJiYgIXByZXZJc091
dHNpZGVPcmlnaW5hbEJsb2NrIHx8IAogICAgICAgICAgICAgICAgIChkZWVwUG9zLm5vZGUoKS0+
aGFzVGFnTmFtZShiclRhZykgJiYgZGVlcFBvcy5vZmZzZXQoKSA9PSAwKSkKLSAgICAgICAgICAg
ICAgICBtX2RlZXBQb3NpdGlvbiA9IHByZXY7CisgICAgICAgICAgICAgICAgbV9wb3NpdGlvbiA9
IHByZXY7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9kZWVwUG9zaXRpb24g
PSBuZXh0OworICAgICAgICAgICAgICAgIG1fcG9zaXRpb24gPSBuZXh0OwogICAgICAgICB9CiAg
ICAgfQogCkBAIC0xMTYsMTMgKzExNiwxMyBAQAogCiBWaXNpYmxlUG9zaXRpb24gVmlzaWJsZVBv
c2l0aW9uOjpuZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG5leHRW
aXNpYmxlUG9zaXRpb24obV9kZWVwUG9zaXRpb24pLCBtX2FmZmluaXR5KTsKKyAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKG5leHRWaXNpYmxlUG9zaXRpb24obV9wb3NpdGlvbiksIG1fYWZmaW5p
dHkpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpwcmV2aW91cygpIGNv
bnN0CiB7CiAgICAgLy8gZmluZCBmaXJzdCBwcmV2aW91cyBET00gcG9zaXRpb24gdGhhdCBpcyB2
aXNpYmxlCi0gICAgUG9zaXRpb24gcG9zID0gbV9kZWVwUG9zaXRpb247CisgICAgUG9zaXRpb24g
cG9zID0gbV9wb3NpdGlvbjsKICAgICB3aGlsZSAoIXBvcy5hdFN0YXJ0KCkpIHsKICAgICAgICAg
cG9zID0gcG9zLnByZXZpb3VzKFVzaW5nQ29tcG9zZWRDaGFyYWN0ZXJzKTsKICAgICAgICAgaWYg
KGlzQ2FuZGlkYXRlKHBvcykpCkBAIC0yMjIsNyArMjIyLDcgQEAKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgaWYgKHJlbmRlcmVyLT5pc1JlcGxhY2VkKCkpCi0gICAgICAgIHJldHVybiBw
b3Mub2Zmc2V0KCkgPT0gMCB8fCBwb3Mub2Zmc2V0KCkgPT0gMTsKKyAgICAgICAgcmV0dXJuIHBv
cy5vZmZzZXQoKSA9PSAwIHx8IHBvcy5vZmZzZXQoKSA9PSBtYXhEZWVwT2Zmc2V0KHBvcy5ub2Rl
KCkpOwogCiAgICAgaWYgKHJlbmRlcmVyLT5pc0JSKCkpIHsKICAgICAgICAgaWYgKHBvcy5vZmZz
ZXQoKSA9PSAwKSB7CkBAIC0yMzcsMTEgKzIzNywxMSBAQAogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIAorICAgIC8vIFRydWUgaWYgYXQgYSByZW5kZXJlZCBvZmZzZXQgaW4gYSB0
ZXh0IG5vZGUKICAgICBpZiAocmVuZGVyZXItPmlzVGV4dCgpKSB7CiAgICAgICAgIFJlbmRlclRl
eHQgKnRleHRSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4ocmVuZGVyZXIpOwog
ICAgICAgICBmb3IgKElubGluZVRleHRCb3ggKmJveCA9IHRleHRSZW5kZXJlci0+Zmlyc3RUZXh0
Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CiAgICAgICAgICAgICBpZiAo
cG9zLm9mZnNldCgpID49IGJveC0+bV9zdGFydCAmJiBwb3Mub2Zmc2V0KCkgPD0gYm94LT5tX3N0
YXJ0ICsgYm94LT5tX2xlbikgewotICAgICAgICAgICAgICAgIC8vIHJldHVybiB0cnVlIGlmIGlu
IGEgdGV4dCBub2RlCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KQEAgLTI1MCw3ICsyNTAsNiBAQAogICAgIGlmIChyZW5kZXJlci0+aXNCbG9j
a0Zsb3coKSAmJgogICAgICAgICFoYXNSZW5kZXJlZENoaWxkcmVuV2l0aEhlaWdodChyZW5kZXJl
cikgJiYKICAgICAgICAocmVuZGVyZXItPmhlaWdodCgpIHx8IHBvcy5ub2RlKCktPmhhc1RhZ05h
bWUoYm9keVRhZykpKSB7Ci0gICAgICAgIC8vIHJldHVybiB0cnVlIGZvciBvZmZzZXQgMCBpbnRv
IHJlbmRlcmVkIGJsb2NrcyB0aGF0IGFyZSBlbXB0eSBvZiByZW5kZXJlZCBraWRzLCBidXQgaGF2
ZSBhIGhlaWdodAogICAgICAgICByZXR1cm4gcG9zLm9mZnNldCgpID09IDA7CiAgICAgfQogICAg
IApAQCAtMjY1LDcgKzI2NCw3IEBACiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gUG9z
aXRpb24oKTsKICAgICAKLSAgICBpZiAoaXNBdG9taWNOb2RlKG5vZGUpKQorICAgIGlmIChpc0Nh
bmRpZGF0ZShwb3MpIHx8IGlzQXRvbWljTm9kZShub2RlKSkKICAgICAgICAgcmV0dXJuIHBvczsK
IAogICAgIGlmIChvZmZzZXQgPj0gKGludClub2RlLT5jaGlsZE5vZGVDb3VudCgpKSB7CkBAIC0y
NzQsMTMgKzI3MywxMyBAQAogICAgICAgICAgICAgaWYgKCFjaGlsZCkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIG5vZGUgPSBjaGlsZDsKLSAgICAgICAgfSB3aGlsZSAoIWlz
QXRvbWljTm9kZShub2RlKSk7CisgICAgICAgIH0gd2hpbGUgKCFpc0F0b21pY05vZGUobm9kZSkg
JiYgIWlzQ2FuZGlkYXRlKFBvc2l0aW9uKG5vZGUsIG5vZGUtPmNhcmV0TWF4T2Zmc2V0KCkpKSk7
CiAgICAgICAgIHJldHVybiBQb3NpdGlvbihub2RlLCBub2RlLT5jYXJldE1heE9mZnNldCgpKTsK
ICAgICB9CiAgICAgCiAgICAgbm9kZSA9IG5vZGUtPmNoaWxkTm9kZShvZmZzZXQpOwogICAgIEFT
U0VSVChub2RlKTsKLSAgICB3aGlsZSAoIWlzQXRvbWljTm9kZShub2RlKSkgeworICAgIHdoaWxl
ICghaXNBdG9taWNOb2RlKG5vZGUpICYmICFpc0NhbmRpZGF0ZShQb3NpdGlvbihub2RlLCBub2Rl
LT5jYXJldE1heE9mZnNldCgpKSkpIHsKICAgICAgICAgTm9kZUltcGwgKmNoaWxkID0gbm9kZS0+
Zmlyc3RDaGlsZCgpOwogICAgICAgICBpZiAoIWNoaWxkKQogICAgICAgICAgICAgYnJlYWs7CkBA
IC0yODksNTQgKzI4OCwxMSBAQAogICAgIHJldHVybiBQb3NpdGlvbihub2RlLCAwKTsKIH0KIAot
UG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpkb3duc3RyZWFtRGVlcEVxdWl2YWxlbnQoKSBjb25z
dAotewotICAgIFBvc2l0aW9uIHBvcyA9IG1fZGVlcFBvc2l0aW9uOwotICAgIAotICAgIGlmIChw
b3MuaXNOdWxsKCkgfHwgcG9zLmF0RW5kKCkpCi0gICAgICAgIHJldHVybiBwb3M7Ci0KLSAgICBQ
b3NpdGlvbiBkb3duc3RyZWFtVGVzdCA9IHBvcy5kb3duc3RyZWFtKCk7Ci0KLSAgICBQb3NpdGlv
biBjdXJyZW50ID0gcG9zOwotICAgIHdoaWxlICghY3VycmVudC5hdEVuZCgpKSB7Ci0gICAgICAg
IGN1cnJlbnQgPSBjdXJyZW50Lm5leHQoVXNpbmdDb21wb3NlZENoYXJhY3RlcnMpOwotICAgICAg
ICBpZiAoaXNDYW5kaWRhdGUoY3VycmVudCkpIHsKLSAgICAgICAgICAgIGlmIChkb3duc3RyZWFt
VGVzdCAhPSBjdXJyZW50LmRvd25zdHJlYW0oKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIHBvcyA9IGN1cnJlbnQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIHBvczsKLX0KLQotUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpyYW5nZUNvbXBsaWFudEVx
dWl2YWxlbnQoY29uc3QgUG9zaXRpb24gJnBvcykKLXsKLSAgICBOb2RlSW1wbCAqbm9kZSA9IHBv
cy5ub2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKLSAg
ICAKLSAgICAvLyBGSVhNRTogVGhpcyBjbGFtcHMgb3V0LW9mLXJhbmdlIHZhbHVlcy4KLSAgICAv
LyBJbnN0ZWFkIHdlIHNob3VsZCBwcm9iYWJseSBhc3NlcnQsIGFuZCBub3QgdXNlIHN1Y2ggdmFs
dWVzLgotCi0gICAgaW50IG9mZnNldCA9IHBvcy5vZmZzZXQoKTsKLSAgICBpZiAoIW9mZnNldElu
Q2hhcmFjdGVycyhub2RlLT5ub2RlVHlwZSgpKSAmJiBpc0F0b21pY05vZGUobm9kZSkgJiYgb2Zm
c2V0ID4gMCkKLSAgICAgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUtPnBhcmVudE5vZGUoKSwgbm9k
ZS0+bm9kZUluZGV4KCkgKyAxKTsKLQotICAgIHJldHVybiBQb3NpdGlvbihub2RlLCBrTWF4KDAs
IGtNaW4ob2Zmc2V0LCBtYXhPZmZzZXQobm9kZSkpKSk7Ci19Ci0KIGludCBWaXNpYmxlUG9zaXRp
b246Om1heE9mZnNldChjb25zdCBOb2RlSW1wbCAqbm9kZSkKIHsKICAgICByZXR1cm4gb2Zmc2V0
SW5DaGFyYWN0ZXJzKG5vZGUtPm5vZGVUeXBlKCkpID8gKGludClzdGF0aWNfY2FzdDxjb25zdCBD
aGFyYWN0ZXJEYXRhSW1wbCAqPihub2RlKS0+bGVuZ3RoKCkgOiAoaW50KW5vZGUtPmNoaWxkTm9k
ZUNvdW50KCk7CiB9CiAKLWJvb2wgVmlzaWJsZVBvc2l0aW9uOjppc0F0b21pY05vZGUoY29uc3Qg
Tm9kZUltcGwgKm5vZGUpCi17Ci0gICAgcmV0dXJuIG5vZGUgJiYgKCFub2RlLT5oYXNDaGlsZE5v
ZGVzKCkgfHwgKG5vZGUtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSAmJiBub2RlLT5yZW5kZXJlcigp
ICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzUmVwbGFjZWQoKSkpOwotfQotCiBRQ2hhciBWaXNpYmxl
UG9zaXRpb246OmNoYXJhY3RlcigpIGNvbnN0CiB7CiAgICAgUG9zaXRpb24gcG9zID0gcG9zaXRp
b24oKTsKQEAgLTM1NCw3ICszMTAsNyBAQAogCiBib29sIGlzRXF1YWxJZ25vcmluZ0FmZmluaXR5
KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZiKQogewot
ICAgIGJvb2wgcmVzdWx0ID0gYS5tX2RlZXBQb3NpdGlvbiA9PSBiLm1fZGVlcFBvc2l0aW9uOwor
ICAgIGJvb2wgcmVzdWx0ID0gYS5tX3Bvc2l0aW9uID09IGIubV9wb3NpdGlvbjsKICAgICBpZiAo
cmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHdhbnQgdG8gY2F0Y2ggY2FzZXMgd2hlcmUgcG9zaXRp
b25zIGFyZSBlcXVhbCwgYnV0IGFmZmluaXRpZXMgYXJlIG5vdCwgc2luY2UKICAgICAgICAgLy8g
dGhpcyBpcyB2ZXJ5IGxpa2VseSBhIGJ1ZywgZ2l2ZW4gdGhlIHBsYWNlcyB3aGVyZSB0aGlzIGNh
bGwgaXMgdXNlZC4gVGhlIGRpZmZlcmVuY2UKQEAgLTM3NSwyNiArMzMxLDI2IEBACiAgICAgaWYg
KGlzTnVsbCgpKQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBvc2l0aW9uIFslc106IG51bGxc
biIsIG1zZyk7CiAgICAgZWxzZQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBvc2l0aW9uIFsl
c106ICVzIFslcF0gYXQgJWRcbiIsIG1zZywgbV9kZWVwUG9zaXRpb24ubm9kZSgpLT5ub2RlTmFt
ZSgpLnFzdHJpbmcoKS5sYXRpbjEoKSwgbV9kZWVwUG9zaXRpb24ubm9kZSgpLCBtX2RlZXBQb3Np
dGlvbi5vZmZzZXQoKSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUG9zaXRpb24gWyVzXTog
JXMgWyVwXSBhdCAlZFxuIiwgbXNnLCBtX3Bvc2l0aW9uLm5vZGUoKS0+bm9kZU5hbWUoKS5xc3Ry
aW5nKCkubGF0aW4xKCksIG1fcG9zaXRpb24ubm9kZSgpLCBtX3Bvc2l0aW9uLm9mZnNldCgpKTsK
IH0KIAogI2lmbmRlZiBOREVCVUcKIHZvaWQgVmlzaWJsZVBvc2l0aW9uOjpmb3JtYXRGb3JEZWJ1
Z2dlcihjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKIHsKLSAgICBtX2RlZXBQ
b3NpdGlvbi5mb3JtYXRGb3JEZWJ1Z2dlcihidWZmZXIsIGxlbmd0aCk7CisgICAgbV9wb3NpdGlv
bi5mb3JtYXRGb3JEZWJ1Z2dlcihidWZmZXIsIGxlbmd0aCk7CiB9CiAKIHZvaWQgVmlzaWJsZVBv
c2l0aW9uOjpzaG93VHJlZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZGVlcFBvc2l0aW9uLm5vZGUo
KSkKLSAgICAgICAgbV9kZWVwUG9zaXRpb24ubm9kZSgpLT5zaG93VHJlZUFuZE1hcmsobV9kZWVw
UG9zaXRpb24ubm9kZSgpLCAiKiIsIE5VTEwsIE5VTEwpOworICAgIGlmIChtX3Bvc2l0aW9uLm5v
ZGUoKSkKKyAgICAgICAgbV9wb3NpdGlvbi5ub2RlKCktPnNob3dUcmVlQW5kTWFyayhtX3Bvc2l0
aW9uLm5vZGUoKSwgIioiLCBOVUxMLCBOVUxMKTsKIH0KICNlbmRpZgogCiBQYXNzUmVmUHRyPFJh
bmdlSW1wbD4gbWFrZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmc3RhcnQsIGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmZW5kKQogewotICAgIFBvc2l0aW9uIHMgPSBzdGFydC5wb3NpdGlvbigp
OwotICAgIFBvc2l0aW9uIGUgPSBlbmQucG9zaXRpb24oKTsKKyAgICBQb3NpdGlvbiBzID0gc3Rh
cnQucG9zaXRpb24oKS5lcXVpdmFsZW50UmFuZ2VDb21wbGlhbnRQb3NpdGlvbigpOworICAgIFBv
c2l0aW9uIGUgPSBlbmQucG9zaXRpb24oKS5lcXVpdmFsZW50UmFuZ2VDb21wbGlhbnRQb3NpdGlv
bigpOwogICAgIHJldHVybiBuZXcgUmFuZ2VJbXBsKHMubm9kZSgpLT5nZXREb2N1bWVudCgpLCBz
Lm5vZGUoKSwgcy5vZmZzZXQoKSwgZS5ub2RlKCksIGUub2Zmc2V0KCkpOwogfQogCkBAIC00MTAs
NTAgKzM2Niw1NiBAQAogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oci0+ZW5kQ29udGFpbmVy
KGV4Y2VwdGlvbiksIHItPmVuZE9mZnNldChleGNlcHRpb24pLCBhZmZpbml0eSk7CiB9CiAKLWJv
b2wgc2V0U3RhcnQoUmFuZ2VJbXBsICpyLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMpCitib29s
IHNldFN0YXJ0KFJhbmdlSW1wbCAqciwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9z
aXRpb24pCiB7CiAgICAgaWYgKCFyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUG9zaXRp
b24gcCA9IGMucG9zaXRpb24oKTsKKyAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLnBv
c2l0aW9uKCkuZXF1aXZhbGVudFJhbmdlQ29tcGxpYW50UG9zaXRpb24oKTsKICAgICBpbnQgY29k
ZSA9IDA7CiAgICAgci0+c2V0U3RhcnQocC5ub2RlKCksIHAub2Zmc2V0KCksIGNvZGUpOwogICAg
IHJldHVybiBjb2RlID09IDA7CiB9CiAKLWJvb2wgc2V0RW5kKFJhbmdlSW1wbCAqciwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICZjKQorYm9vbCBzZXRFbmQoUmFuZ2VJbXBsICpyLCBjb25zdCBWaXNp
YmxlUG9zaXRpb24gJnZpc2libGVQb3NpdGlvbikKIHsKICAgICBpZiAoIXIpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBQb3NpdGlvbiBwID0gYy5wb3NpdGlvbigpOworICAgIFBvc2l0aW9u
IHAgPSB2aXNpYmxlUG9zaXRpb24ucG9zaXRpb24oKS5lcXVpdmFsZW50UmFuZ2VDb21wbGlhbnRQ
b3NpdGlvbigpOwogICAgIGludCBjb2RlID0gMDsKICAgICByLT5zZXRFbmQocC5ub2RlKCksIHAu
b2Zmc2V0KCksIGNvZGUpOwogICAgIHJldHVybiBjb2RlID09IDA7CiB9CiAKLURPTTo6Tm9kZUlt
cGwgKmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2cCkK
K0RPTTo6Tm9kZUltcGwgKmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoY29uc3QgVmlzaWJsZVBv
c2l0aW9uICZ2aXNpYmxlUG9zaXRpb24pCiB7Ci0gICAgaWYgKHZwLmlzTnVsbCgpKQorICAgIGlm
ICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAg
cmV0dXJuIHZwLnBvc2l0aW9uKCkubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7
CisgICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbi5wb3NpdGlvbigpLm5vZGUoKS0+ZW5jbG9zaW5n
QmxvY2tGbG93RWxlbWVudCgpOwogfQogCi1ib29sIGlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5v
ZGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIGNvbnN0IE5vZGVJbXBsICpub2RlKQorYm9v
bCBpc0ZpcnN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlz
aWJsZVBvc2l0aW9uLCBjb25zdCBOb2RlSW1wbCAqbm9kZSkKIHsKLSAgICBpZiAocG9zLmlzTnVs
bCgpKQorICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBpZiAoIXZpc2libGVQb3NpdGlvbi5wb3NpdGlvbigpLm5vZGUoKS0+
aXNBbmNlc3Rvcihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICBW
aXNpYmxlUG9zaXRpb24gcHJldmlvdXMgPSBwb3MucHJldmlvdXMoKTsKLSAgICByZXR1cm4gcHJl
dmlvdXMuaXNOdWxsKCkgfHwgIXByZXZpb3VzLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0Fu
Y2VzdG9yKG5vZGUpOworICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHZpc2libGVQb3Np
dGlvbi5wcmV2aW91cygpOworICAgIHJldHVybiBwcmV2aW91cy5pc051bGwoKSB8fCAhcHJldmlv
dXMucG9zaXRpb24oKS5ub2RlKCktPmlzQW5jZXN0b3Iobm9kZSk7CiB9CiAKLWJvb2wgaXNMYXN0
VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcG9zLCBjb25zdCBO
b2RlSW1wbCAqbm9kZSkKK2Jvb2wgaXNMYXN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uLCBjb25zdCBOb2RlSW1wbCAqbm9kZSkKIHsK
LSAgICBpZiAocG9zLmlzTnVsbCgpKQorICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoIXZpc2libGVQb3NpdGlvbi5w
b3NpdGlvbigpLm5vZGUoKS0+aXNBbmNlc3Rvcihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IHBvcy5uZXh0KCk7Ci0gICAg
cmV0dXJuIG5leHQuaXNOdWxsKCkgfHwgIW5leHQuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmlz
QW5jZXN0b3Iobm9kZSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIG5leHQgPSB2aXNpYmxlUG9zaXRp
b24ubmV4dCgpOworICAgIHJldHVybiBuZXh0LmlzTnVsbCgpIHx8ICFuZXh0LnBvc2l0aW9uKCku
bm9kZSgpLT5pc0FuY2VzdG9yKG5vZGUpOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgRE9NCkluZGV4
OiBraHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4zNQpkaWZmIC11IC1yMS4zNSB2aXNpYmxlX3Bvc2l0aW9uLmgKLS0t
IGtodG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5oCTMgSmFuIDIwMDYgMDk6MTk6MDcgLTAw
MDAJMS4zNQorKysga2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmgJMTAgSmFuIDIwMDYg
MDI6MTc6MTggLTAwMDAKQEAgLTY2LDE3ICs2NiwxNSBAQAogICAgIFZpc2libGVQb3NpdGlvbihj
b25zdCBQb3NpdGlvbiAmcG9zLCBFQWZmaW5pdHkgYWZmaW5pdHkgPSBWUF9ERUZBVUxUX0FGRklO
SVRZKTsKICAgICBWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOwogCi0g
ICAgdm9pZCBjbGVhcigpIHsgbV9kZWVwUG9zaXRpb24uY2xlYXIoKTsgfQorICAgIHZvaWQgY2xl
YXIoKSB7IG1fcG9zaXRpb24uY2xlYXIoKTsgfQogCi0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7
IHJldHVybiBtX2RlZXBQb3NpdGlvbi5pc051bGwoKTsgfQotICAgIGJvb2wgaXNOb3ROdWxsKCkg
Y29uc3QgeyByZXR1cm4gbV9kZWVwUG9zaXRpb24uaXNOb3ROdWxsKCk7IH0KKyAgICBib29sIGlz
TnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24uaXNOdWxsKCk7IH0KKyAgICBib29sIGlz
Tm90TnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24uaXNOb3ROdWxsKCk7IH0KIAotICAg
IFBvc2l0aW9uIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gcmFuZ2VDb21wbGlhbnRFcXVpdmFs
ZW50KG1fZGVlcFBvc2l0aW9uKTsgfQotICAgIFBvc2l0aW9uIGRlZXBFcXVpdmFsZW50KCkgY29u
c3QgeyByZXR1cm4gbV9kZWVwUG9zaXRpb247IH0KKyAgICBQb3NpdGlvbiBwb3NpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKyAgICAKICAgICBFQWZmaW5pdHkgYWZmaW5pdHko
KSBjb25zdCB7IGFzc2VydChtX2FmZmluaXR5ID09IFVQU1RSRUFNIHx8IG1fYWZmaW5pdHkgPT0g
RE9XTlNUUkVBTSk7IHJldHVybiBtX2FmZmluaXR5OyB9CiAgICAgdm9pZCBzZXRBZmZpbml0eShF
QWZmaW5pdHkgYWZmaW5pdHkpIHsgbV9hZmZpbml0eSA9IGFmZmluaXR5OyB9Ci0gICAgCi0gICAg
UG9zaXRpb24gZG93bnN0cmVhbURlZXBFcXVpdmFsZW50KCkgY29uc3Q7CiAKICAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYSwgY29uc3QgVmlzaWJsZVBv
c2l0aW9uICZiKTsKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZiKTsKQEAgLTkzLDYgKzkxLDggQEAKICAg
ICBRQ2hhciBjaGFyYWN0ZXIoKSBjb25zdDsKICAgICAKICAgICB2b2lkIGRlYnVnUG9zaXRpb24o
Y29uc3QgY2hhciAqbXNnID0gIiIpIGNvbnN0OworICAgIAorICAgIHN0YXRpYyBQb3NpdGlvbiBk
ZWVwRXF1aXZhbGVudChjb25zdCBQb3NpdGlvbiAmcG9zaXRpb24pOwogCiAjaWZuZGVmIE5ERUJV
RwogICAgIHZvaWQgZm9ybWF0Rm9yRGVidWdnZXIoY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsZW5n
dGgpIGNvbnN0OwpAQCAtMTA0LDI0ICsxMDQsMjAgQEAKICAgICB2b2lkIGluaXRVcHN0cmVhbShj
b25zdCBQb3NpdGlvbiAmKTsKICAgICB2b2lkIGluaXREb3duc3RyZWFtKGNvbnN0IFBvc2l0aW9u
ICYpOwogCi0gICAgc3RhdGljIFBvc2l0aW9uIGRlZXBFcXVpdmFsZW50KGNvbnN0IFBvc2l0aW9u
ICYpOwotICAgIHN0YXRpYyBQb3NpdGlvbiByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoY29uc3Qg
UG9zaXRpb24gJik7Ci0KICAgICBzdGF0aWMgaW50IG1heE9mZnNldChjb25zdCBOb2RlSW1wbCAq
KTsKLSAgICBzdGF0aWMgYm9vbCBpc0F0b21pY05vZGUoY29uc3QgTm9kZUltcGwgKik7CiAgICAg
CiAgICAgc3RhdGljIFBvc2l0aW9uIHByZXZpb3VzVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFBvc2l0
aW9uICYpOwogICAgIHN0YXRpYyBQb3NpdGlvbiBuZXh0VmlzaWJsZVBvc2l0aW9uKGNvbnN0IFBv
c2l0aW9uICYpOwogCiAgICAgc3RhdGljIGJvb2wgaXNDYW5kaWRhdGUoY29uc3QgUG9zaXRpb24g
Jik7CiAgICAgICAgIAotICAgIFBvc2l0aW9uIG1fZGVlcFBvc2l0aW9uOworICAgIFBvc2l0aW9u
IG1fcG9zaXRpb247CiAgICAgRUFmZmluaXR5IG1fYWZmaW5pdHk7CiB9OwogCiBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYSwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uICZiKQogewotICAgIHJldHVybiBhLm1fZGVlcFBvc2l0aW9uID09IGIubV9kZWVwUG9zaXRp
b24gJiYgYS5tX2FmZmluaXR5ID09IGIubV9hZmZpbml0eTsKKyAgICByZXR1cm4gYS5tX3Bvc2l0
aW9uID09IGIubV9wb3NpdGlvbiAmJiBhLm1fYWZmaW5pdHkgPT0gYi5tX2FmZmluaXR5OwogfQog
IAogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWaXNpYmxlUG9zaXRpb24gJmEsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiAmYikKSW5kZXg6IGtodG1sL2VkaXRpbmcvdmlzaWJsZV91bml0cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy92
aXNpYmxlX3VuaXRzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40NwpkaWZmIC11IC1yMS40
NyB2aXNpYmxlX3VuaXRzLmNwcAotLS0ga2h0bWwvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAky
MiBEZWMgMjAwNSAwNDoxMTozNyAtMDAwMAkxLjQ3CisrKyBraHRtbC9lZGl0aW5nL3Zpc2libGVf
dW5pdHMuY3BwCTEwIEphbiAyMDA2IDAyOjE3OjE4IC0wMDAwCkBAIC00OSw3ICs0OSw3IEBACiAK
IHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9z
aXRpb24gJmMsIHVuc2lnbmVkICgqc2VhcmNoRnVuY3Rpb24pKGNvbnN0IFFDaGFyICosIHVuc2ln
bmVkKSkKIHsKLSAgICBQb3NpdGlvbiBwb3MgPSBjLmRlZXBFcXVpdmFsZW50KCk7CisgICAgUG9z
aXRpb24gcG9zID0gYy5wb3NpdGlvbigpOwogICAgIE5vZGVJbXBsICpuID0gcG9zLm5vZGUoKTsK
ICAgICBpZiAoIW4pCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKQEAgLTEyNiw3
ICsxMjYsNyBAQAogCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRCb3VuZGFyeShjb25zdCBW
aXNpYmxlUG9zaXRpb24gJmMsIHVuc2lnbmVkICgqc2VhcmNoRnVuY3Rpb24pKGNvbnN0IFFDaGFy
ICosIHVuc2lnbmVkKSkKIHsKLSAgICBQb3NpdGlvbiBwb3MgPSBjLmRlZXBFcXVpdmFsZW50KCk7
CisgICAgUG9zaXRpb24gcG9zID0gYy5wb3NpdGlvbigpOwogICAgIE5vZGVJbXBsICpuID0gcG9z
Lm5vZGUoKTsKICAgICBpZiAoIW4pCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsK
QEAgLTI3Miw3ICsyNzIsNyBAQAogCiBzdGF0aWMgUm9vdElubGluZUJveCAqcm9vdEJveEZvckxp
bmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQogewotICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBF
cXVpdmFsZW50KCk7CisgICAgUG9zaXRpb24gcCA9IGMucG9zaXRpb24oKTsKICAgICBOb2RlSW1w
bCAqbm9kZSA9IHAubm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CkBA
IC0zNjEsNyArMzYxLDcgQEAKIAogVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzTGluZVBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYywgaW50IHgpCiB7Ci0gICAgUG9zaXRpb24gcCA9IGMu
YWZmaW5pdHkoKSA9PSBVUFNUUkVBTSA/IGMuZGVlcEVxdWl2YWxlbnQoKSA6IGMuZG93bnN0cmVh
bURlZXBFcXVpdmFsZW50KCk7CisgICAgUG9zaXRpb24gcCA9IGMucG9zaXRpb24oKTsKICAgICBO
b2RlSW1wbCAqbm9kZSA9IHAubm9kZSgpOwogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+Z2V0RG9j
dW1lbnQoKSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwpAQCAtNDI0LDcgKzQy
NCw3IEBACiAKIFZpc2libGVQb3NpdGlvbiBuZXh0TGluZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiAmYywgaW50IHgpCiB7Ci0gICAgUG9zaXRpb24gcCA9IGMuYWZmaW5pdHkoKSA9PSBV
UFNUUkVBTSA/IGMuZGVlcEVxdWl2YWxlbnQoKSA6IGMuZG93bnN0cmVhbURlZXBFcXVpdmFsZW50
KCk7CisgICAgUG9zaXRpb24gcCA9IGMucG9zaXRpb24oKTsKICAgICBOb2RlSW1wbCAqbm9kZSA9
IHAubm9kZSgpOwogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+Z2V0RG9jdW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwpAQCAtNTM0LDcgKzUzNCw3IEBACiAKIFZpc2li
bGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYykKIHsK
LSAgICBQb3NpdGlvbiBwID0gYy5kZWVwRXF1aXZhbGVudCgpOworICAgIFBvc2l0aW9uIHAgPSBj
LnBvc2l0aW9uKCk7CiAgICAgTm9kZUltcGwgKnN0YXJ0Tm9kZSA9IHAubm9kZSgpOwogICAgIGlm
ICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CkBAIC01ODEs
NyArNTgxLDcgQEAKICAgICBpZiAoYy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbigpOwogCi0gICAgUG9zaXRpb24gcCA9IGMuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBQ
b3NpdGlvbiBwID0gYy5wb3NpdGlvbigpOwogICAgIE5vZGVJbXBsICpzdGFydE5vZGUgPSBwLm5v
ZGUoKTsKICAgICBOb2RlSW1wbCAqc3RhcnRCbG9jayA9IHN0YXJ0Tm9kZS0+ZW5jbG9zaW5nQmxv
Y2tGbG93RWxlbWVudCgpOwogICAgIE5vZGVJbXBsICpzdGF5SW5zaWRlQmxvY2sgPSBzdGFydEJs
b2NrOwpAQCAtNjcwLDcgKzY3MCw3IEBACiAKIFZpc2libGVQb3NpdGlvbiBzdGFydE9mQmxvY2so
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQogewotICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVp
dmFsZW50KCk7CisgICAgUG9zaXRpb24gcCA9IGMucG9zaXRpb24oKTsKICAgICBOb2RlSW1wbCAq
c3RhcnROb2RlID0gcC5ub2RlKCk7CiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oKTsKQEAgLTY3OSw3ICs2NzksNyBAQAogCiBWaXNpYmxlUG9zaXRp
b24gZW5kT2ZCbG9jayhjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMpCiB7Ci0gICAgUG9zaXRpb24g
cCA9IGMuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBQb3NpdGlvbiBwID0gYy5wb3NpdGlvbigpOwog
CiAgICAgTm9kZUltcGwgKnN0YXJ0Tm9kZSA9IHAubm9kZSgpOwogICAgIGlmICghc3RhcnROb2Rl
KQpAQCAtNzA5LDcgKzcwOSw3IEBACiAKIFZpc2libGVQb3NpdGlvbiBzdGFydE9mRG9jdW1lbnQo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQogewotICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVp
dmFsZW50KCk7CisgICAgUG9zaXRpb24gcCA9IGMucG9zaXRpb24oKTsKICAgICBOb2RlSW1wbCAq
bm9kZSA9IHAubm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbigpOwpAQCAtNzIzLDcgKzcyMyw3IEBACiAKIFZpc2libGVQb3NpdGlvbiBlbmRPZkRv
Y3VtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYykKIHsKLSAgICBQb3NpdGlvbiBwID0gYy5k
ZWVwRXF1aXZhbGVudCgpOworICAgIFBvc2l0aW9uIHAgPSBjLnBvc2l0aW9uKCk7CiAgICAgTm9k
ZUltcGwgKm5vZGUgPSBwLm5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oKTsKQEAgLTc0MSwxMSArNzQxLDExIEBACiAKIGJvb2wgaW5TYW1lRG9j
dW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJmIp
CiB7Ci0gICAgUG9zaXRpb24gYXAgPSBhLmRlZXBFcXVpdmFsZW50KCk7CisgICAgUG9zaXRpb24g
YXAgPSBhLnBvc2l0aW9uKCk7CiAgICAgTm9kZUltcGwgKmFuID0gYXAubm9kZSgpOwogICAgIGlm
ICghYW4pCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBQb3NpdGlvbiBicCA9IGIuZGVlcEVx
dWl2YWxlbnQoKTsKKyAgICBQb3NpdGlvbiBicCA9IGIucG9zaXRpb24oKTsKICAgICBOb2RlSW1w
bCAqYm4gPSBicC5ub2RlKCk7CiAgICAgaWYgKGFuID09IGJuKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTc2Nyw3ICs3NjcsNyBAQAogCiBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZkVkaXRhYmxl
Q29udGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMpCiB7Ci0gICAgUG9zaXRpb24gcCA9IGMu
ZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBQb3NpdGlvbiBwID0gYy5wb3NpdGlvbigpOwogICAgIE5v
ZGVJbXBsICpub2RlID0gcC5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKCk7CkBAIC03NzcsNyArNzc3LDcgQEAKIAogVmlzaWJsZVBvc2l0aW9u
IGVuZE9mRWRpdGFibGVDb250ZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYykKIHsKLSAgICBQ
b3NpdGlvbiBwID0gYy5kZWVwRXF1aXZhbGVudCgpOworICAgIFBvc2l0aW9uIHAgPSBjLnBvc2l0
aW9uKCk7CiAgICAgTm9kZUltcGwgKm5vZGUgPSBwLm5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAg
ICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKQEAgLTc5MSwxMiArNzkxLDEyIEBACiAK
IGJvb2wgaW5TYW1lRWRpdGFibGVDb250ZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYSwgY29u
c3QgVmlzaWJsZVBvc2l0aW9uICZiKQogewotICAgIFBvc2l0aW9uIGFwID0gYS5kZWVwRXF1aXZh
bGVudCgpOworICAgIFBvc2l0aW9uIGFwID0gYS5wb3NpdGlvbigpOwogICAgIE5vZGVJbXBsICph
biA9IGFwLm5vZGUoKTsKICAgICBpZiAoIWFuKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIAotICAgIFBvc2l0aW9uIGJwID0gYi5kZWVwRXF1aXZhbGVudCgpOworICAgIFBvc2l0aW9u
IGJwID0gYi5wb3NpdGlvbigpOwogICAgIE5vZGVJbXBsICpibiA9IGJwLm5vZGUoKTsKICAgICBp
ZiAoIWJuKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBraHRtbC94bWwvZG9tMl9yYW5n
ZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3ht
bC9kb20yX3JhbmdlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDcKZGlmZiAtdSAt
cjEuNDcgZG9tMl9yYW5nZWltcGwuY3BwCi0tLSBraHRtbC94bWwvZG9tMl9yYW5nZWltcGwuY3Bw
CTEgRGVjIDIwMDUgMTA6MzI6MjUgLTAwMDAJMS40NworKysga2h0bWwveG1sL2RvbTJfcmFuZ2Vp
bXBsLmNwcAkxMCBKYW4gMjAwNiAwMjoxNzoxOCAtMDAwMApAQCAtMTMyOSwyMyArMTMyOSwyMyBA
QAogICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byBza2lwIGNlcnRhaW4gaXJyZWxldmFudCBjb250
ZW50IGF0IHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uLCBzbyB3ZSBkbyBub3Qgd2luZCB1cCAK
ICAgICAvLyB3aXRoIGEgc3B1cmlvdXMgIm1peGVkIiBzdHlsZS4KICAgICAKLSAgICBWaXNpYmxl
UG9zaXRpb24gcG9zKG1fc3RhcnRDb250YWluZXIsIG1fc3RhcnRPZmZzZXQsIFZQX0RFRkFVTFRf
QUZGSU5JVFkpOwotICAgIGlmIChwb3MuaXNOdWxsKCkpCisgICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVQb3NpdGlvbihtX3N0YXJ0Q29udGFpbmVyLCBtX3N0YXJ0T2Zmc2V0LCBWUF9ERUZBVUxU
X0FGRklOSVRZKTsKKyAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICBy
ZXR1cm4gUG9zaXRpb24oKTsKIAogICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKICAgICAvLyBp
ZiB0aGUgc2VsZWN0aW9uIGlzIGEgY2FyZXQsIGp1c3QgcmV0dXJuIHRoZSBwb3NpdGlvbiwgc2lu
Y2UgdGhlIHN0eWxlCiAgICAgLy8gYmVoaW5kIHVzIGlzIHJlbGV2YW50CiAgICAgaWYgKGNvbGxh
cHNlZChleGNlcHRpb25Db2RlKSkKLSAgICAgICAgcmV0dXJuIHBvcy5wb3NpdGlvbigpOworICAg
ICAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uLnBvc2l0aW9uKCk7CiAKICAgICAvLyBpZiB0aGUg
c2VsZWN0aW9uIHN0YXJ0cyBqdXN0IGJlZm9yZSBhIHBhcmFncmFwaCBicmVhaywgc2tpcCBvdmVy
IGl0Ci0gICAgaWYgKGlzRW5kT2ZQYXJhZ3JhcGgocG9zKSkKLSAgICAgICAgcmV0dXJuIHBvcy5u
ZXh0KCkucG9zaXRpb24oKS5kb3duc3RyZWFtKCk7CisgICAgaWYgKGlzRW5kT2ZQYXJhZ3JhcGgo
dmlzaWJsZVBvc2l0aW9uKSkKKyAgICAgICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbi5uZXh0KCku
cG9zaXRpb24oKS5kb3duc3RyZWFtKCk7CiAKICAgICAvLyBvdGhlcndpc2UsIG1ha2Ugc3VyZSB0
byBiZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IHNlbGVjdGVkIG5vZGUsCiAgICAgLy8gaW5z
dGVhZCBvZiBwb3NzaWJseSBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IG5vZGUgYmVmb3JlIHRoZSBz
ZWxlY3Rpb24KLSAgICByZXR1cm4gcG9zLnBvc2l0aW9uKCkuZG93bnN0cmVhbSgpOworICAgIHJl
dHVybiB2aXNpYmxlUG9zaXRpb24ucG9zaXRpb24oKS5kb3duc3RyZWFtKCk7CiB9CiAKIE5vZGVJ
bXBsICpSYW5nZUltcGw6OnBhc3RFbmROb2RlKCkgY29uc3QKSW5kZXg6IGtodG1sL3htbC9kb21f
ZG9jaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
eG1sL2RvbV9kb2NpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yOTcKZGlmZiAtdSAt
cjEuMjk3IGRvbV9kb2NpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAkzIEph
biAyMDA2IDEwOjA1OjQ0IC0wMDAwCTEuMjk3CisrKyBraHRtbC94bWwvZG9tX2RvY2ltcGwuY3Bw
CTEwIEphbiAyMDA2IDAyOjE3OjE4IC0wMDAwCkBAIC0xMzAwLDggKzEzMDAsOCBAQAogICAgICAg
ICBjYW52YXMtPmNsZWFyU2VsZWN0aW9uKCk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBQ
b3NpdGlvbiBzdGFydFBvcyA9IFZpc2libGVQb3NpdGlvbihzLnN0YXJ0KCksIHMuc3RhcnRBZmZp
bml0eSgpKS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICBQb3NpdGlvbiBlbmRQb3MgPSBWaXNp
YmxlUG9zaXRpb24ocy5lbmQoKSwgcy5lbmRBZmZpbml0eSgpKS5kZWVwRXF1aXZhbGVudCgpOwor
ICAgICAgICBQb3NpdGlvbiBzdGFydFBvcyA9IFZpc2libGVQb3NpdGlvbihzLnN0YXJ0KCksIHMu
c3RhcnRBZmZpbml0eSgpKS5wb3NpdGlvbigpOworICAgICAgICBQb3NpdGlvbiBlbmRQb3MgPSBW
aXNpYmxlUG9zaXRpb24ocy5lbmQoKSwgcy5lbmRBZmZpbml0eSgpKS5wb3NpdGlvbigpOwogICAg
ICAgICBpZiAoc3RhcnRQb3MuaXNOb3ROdWxsKCkgJiYgZW5kUG9zLmlzTm90TnVsbCgpKSB7CiAg
ICAgICAgICAgICBSZW5kZXJPYmplY3QgKnN0YXJ0UmVuZGVyZXIgPSBzdGFydFBvcy5ub2RlKCkt
PnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QgKmVuZFJlbmRlcmVyID0gZW5k
UG9zLm5vZGUoKS0+cmVuZGVyZXIoKTsKSW5kZXg6IGtodG1sL3htbC9kb21fbm9kZWltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fbm9k
ZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIyNgpkaWZmIC11IC1yMS4yMjYgZG9t
X25vZGVpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAJMjMgRGVjIDIwMDUg
MTg6NDQ6MjkgLTAwMDAJMS4yMjYKKysrIGtodG1sL3htbC9kb21fbm9kZWltcGwuY3BwCTEwIEph
biAyMDA2IDAyOjE3OjE4IC0wMDAwCkBAIC0xNDc4LDE3ICsxNDc4LDYgQEAKIAogLy8gRklYTUU6
IFNob3VsZG4ndCB0aGVzZSBmdW5jdGlvbnMgYmUgaW4gdGhlIGVkaXRpbmcgY29kZT8gIENvZGUg
dGhhdCBhc2tzIHF1ZXN0aW9ucyBhYm91dCBIVE1MIGluIHRoZSBjb3JlIERPTSBjbGFzcwogLy8g
aXMgb2J2aW91c2x5IG1pc3BsYWNlZC4KLS8vIG1ldGhvZCBmb3IgZWRpdGluZyBtYWRuZXNzLCB3
aGljaCBhbGxvd3MgQlIsMSBhcyBhIHBvc2l0aW9uLCB0aG91Z2ggdGhhdCBpcyBpbmNvcnJlY3QK
LWludCBOb2RlSW1wbDo6bWF4RGVlcE9mZnNldCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzVGV4dE5v
ZGUoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFRleHRJbXBsKj4odGhpcykt
Pmxlbmd0aCgpOwotICAgICAgICAKLSAgICBpZiAoaGFzVGFnTmFtZShiclRhZykgfHwgKHJlbmRl
cmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgpKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0K
LSAgICByZXR1cm4gY2hpbGROb2RlQ291bnQoKTsKLX0KIAogaW50IE5vZGVJbXBsOjpjYXJldE1p
bk9mZnNldCgpIGNvbnN0CiB7CkBAIC0xNTIyLDcgKzE1MTEsNyBAQAogCiBib29sIE5vZGVJbXBs
Ojppc0Jsb2NrRmxvd09yVGFibGUoKSBjb25zdAogewotICAgIHJldHVybiByZW5kZXJlcigpICYm
IChyZW5kZXJlcigpLT5pc0Jsb2NrRmxvdygpIHx8IHJlbmRlcmVyKCktPmlzVGFibGUoKSk7Cisg
ICAgcmV0dXJuIHJlbmRlcmVyKCkgJiYgKHJlbmRlcmVyKCktPmlzQmxvY2tGbG93KCkgfHwgcmVu
ZGVyZXIoKS0+aXNUYWJsZSgpICYmICFyZW5kZXJlcigpLT5pc0lubGluZSgpKTsKIH0KIAogYm9v
bCBOb2RlSW1wbDo6aXNFZGl0YWJsZUJsb2NrKCkgY29uc3QKSW5kZXg6IGtodG1sL3htbC9kb21f
bm9kZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94
bWwvZG9tX25vZGVpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIwCmRpZmYgLXUgLXIx
LjEyMCBkb21fbm9kZWltcGwuaAotLS0ga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oCTE4IERlYyAy
MDA1IDIzOjQwOjEzIC0wMDAwCTEuMTIwCisrKyBraHRtbC94bWwvZG9tX25vZGVpbXBsLmgJMTAg
SmFuIDIwMDYgMDI6MTc6MTggLTAwMDAKQEAgLTM1Miw3ICszNTIsNiBAQAogCXZpcnR1YWwgYm9v
bCBjaGlsZEFsbG93ZWQoTm9kZUltcGwgKm5ld0NoaWxkKTsJCQkJICAgLy8gRXJyb3ItY2hlY2tp
bmcgZHVyaW5nIHBhcnNpbmcgdGhhdCBjaGVja3MgdGhlIERURAogCQogICAgIHZpcnR1YWwgaW50
IG1heE9mZnNldCgpIGNvbnN0OwotICAgIGludCBtYXhEZWVwT2Zmc2V0KCkgY29uc3Q7CiAgICAg
dmlydHVhbCBpbnQgY2FyZXRNaW5PZmZzZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBjYXJl
dE1heE9mZnNldCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgY2FyZXRNYXhSZW5kZXJl
ZE9mZnNldCgpIGNvbnN0OwpJbmRleDoga2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9wb3NpdGlvbi5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODIKZGlmZiAtdSAtcjEuODIgZG9tX3Bvc2l0aW9u
LmNwcAotLS0ga2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAJMjEgTm92IDIwMDUgMDE6MjA6NDIg
LTAwMDAJMS44MgorKysga2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAJMTAgSmFuIDIwMDYgMDI6
MTc6MTggLTAwMDAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJkb20yX3JhbmdlaW1wbC5o
IgogI2luY2x1ZGUgImRvbTJfdmlld3NpbXBsLmgiCiAjaW5jbHVkZSAiaGVscGVyLmgiCisjaW5j
bHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJ0ZXh0X2FmZmluaXR5LmgiCiAjaW5jbHVk
ZSAidmlzaWJsZV9wb3NpdGlvbi5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKQEAgLTE3
MCw3ICsxNzEsNyBAQAogICAgIGlmIChvID4gMCkgewogICAgICAgICBOb2RlSW1wbCAqY2hpbGQg
PSBuLT5jaGlsZE5vZGUobyAtIDEpOwogICAgICAgICBpZiAoY2hpbGQpIHsKLSAgICAgICAgICAg
IHJldHVybiBQb3NpdGlvbihjaGlsZCwgY2hpbGQtPm1heERlZXBPZmZzZXQoKSk7CisgICAgICAg
ICAgICByZXR1cm4gUG9zaXRpb24oY2hpbGQsIG1heERlZXBPZmZzZXQoY2hpbGQpKTsKICAgICAg
ICAgfQogICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHJlYXNvbnMgY2hpbGQgbWlnaHQgYmUgMDoK
ICAgICAgICAgLy8gICAxKSBUaGUgbm9kZSBpcyBub2RlIGxpa2UgYSB0ZXh0IG5vZGUgdGhhdCBp
cyBub3QgYW4gZWxlbWVudCwgYW5kIHRoZXJlZm9yZSBoYXMgbm8gY2hpbGRyZW4uCkBAIC0xOTYs
NyArMTk3LDcgQEAKICAgICBpbnQgbyA9IG9mZnNldCgpOwogICAgIGFzc2VydChvID49IDApOwog
Ci0gICAgaWYgKG8gPCBuLT5tYXhEZWVwT2Zmc2V0KCkpIHsKKyAgICBpZiAobyA8IG1heERlZXBP
ZmZzZXQobikpIHsKICAgICAgICAgTm9kZUltcGwgKmNoaWxkID0gbi0+Y2hpbGROb2RlKG8pOwog
ICAgICAgICBpZiAoY2hpbGQpIHsKICAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbihjaGlsZCwg
MCk7CkBAIC0yMzEsNyArMjMyLDcgQEAKICAgICBpZiAoIW4pCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIAotICAgIHJldHVybiBvZmZzZXQoKSA+PSBuLT5tYXhEZWVwT2Zmc2V0KCkgJiYgbi0+
cGFyZW50KCkgPT0gMDsKKyAgICByZXR1cm4gb2Zmc2V0KCkgPj0gbWF4RGVlcE9mZnNldChuKSAm
JiBuLT5wYXJlbnQoKSA9PSAwOwogfQogCiBpbnQgUG9zaXRpb246OnJlbmRlcmVkT2Zmc2V0KCkg
Y29uc3QKQEAgLTMxNiwxNiArMzE3LDE1IEBACiAKIC8vIHVwc3RyZWFtKCkgYW5kIGRvd25zdHJl
YW0oKSB3YW50IHRvIHJldHVybiBwb3NpdGlvbnMgdGhhdCBhcmUgZWl0aGVyIGluIGEKIC8vIHRl
eHQgbm9kZSBvciBhdCBqdXN0IGJlZm9yZSBhIG5vbi10ZXh0IG5vZGUuICBUaGlzIG1ldGhvZCBj
aGVja3MgZm9yIHRoYXQuCi1zdGF0aWMgYm9vbCBpc1N0cmVhbWVyIChQb3NpdGlvbiBwb3MpCitz
dGF0aWMgYm9vbCBpc1N0cmVhbWVyKGNvbnN0IFBvc2l0aW9uICZwb3MpCiB7Ci0gICAgTm9kZUlt
cGwgKmN1cnJlbnROb2RlID0gcG9zLm5vZGUoKTsKLSAgICBpZiAoIWN1cnJlbnROb2RlKQorICAg
IGlmIChwb3MuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKLSAgICBp
ZiAoY3VycmVudE5vZGUtPmlzQXRvbWljTm9kZSgpKQorICAgIGlmIChpc0F0b21pY05vZGUocG9z
Lm5vZGUoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKLSAgICByZXR1cm4gKHBv
cy5vZmZzZXQoKSA9PSAwKTsKKyAgICByZXR1cm4gcG9zLm9mZnNldCgpID09IDA7CiB9CiAKIC8v
IEFGQUlLIG5vIG9uZSBoYXMgYSBjbGVhciwgY29tcGxldGUgZGVmaW5pdGlvbiBmb3IgdGhpcyBt
ZXRob2QgYW5kIGhvdyBpdCBpcyB1c2VkLgpAQCAtMzQwLDcgKzM0MCw3IEBACiBQb3NpdGlvbiBQ
b3NpdGlvbjo6dXBzdHJlYW0oKSBjb25zdAogewogICAgIC8vIHN0YXJ0IGF0IGVxdWl2YWxlbnQg
ZGVlcCBwb3NpdGlvbgotICAgIFBvc2l0aW9uIHN0YXJ0ID0gZXF1aXZhbGVudERlZXBQb3NpdGlv
bigpOworICAgIFBvc2l0aW9uIHN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9uOjpkZWVwRXF1aXZhbGVu
dCgqdGhpcyk7CiAgICAgTm9kZUltcGwgKnN0YXJ0Tm9kZSA9IHN0YXJ0Lm5vZGUoKTsKICAgICBp
ZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CkBAIC00MTUsNyArNDE1
LDcgQEAKIFBvc2l0aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFtKCkgY29uc3QKIHsKICAgICAvLyBz
dGFydCBhdCBlcXVpdmFsZW50IGRlZXAgcG9zaXRpb24KLSAgICBQb3NpdGlvbiBzdGFydCA9IGVx
dWl2YWxlbnREZWVwUG9zaXRpb24oKTsKKyAgICBQb3NpdGlvbiBzdGFydCA9IFZpc2libGVQb3Np
dGlvbjo6ZGVlcEVxdWl2YWxlbnQoKnRoaXMpOwogICAgIE5vZGVJbXBsICpzdGFydE5vZGUgPSBz
dGFydC5ub2RlKCk7CiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVybiBQb3NpdGlv
bigpOwpAQCAtNTM4LDM2ICs1MzgsNiBAQAogICAgIHJldHVybiBQb3NpdGlvbihwYXJlbnQsIGNv
bnN0cmFpbmVkT2Zmc2V0KTsKIH0KIAotUG9zaXRpb24gUG9zaXRpb246OmVxdWl2YWxlbnREZWVw
UG9zaXRpb24oKSBjb25zdAotewotICAgIGlmIChpc051bGwoKSB8fCBub2RlKCktPmlzQXRvbWlj
Tm9kZSgpKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICBOb2RlSW1wbCAqY2hpbGQgPSAw
OwotICAgIFBvc2l0aW9uIHBvcygqdGhpcyk7Ci0gICAgaWYgKG9mZnNldCgpID49IChpbnQpbm9k
ZSgpLT5jaGlsZE5vZGVDb3VudCgpKSB7Ci0gICAgICAgIGNoaWxkID0gbm9kZSgpLT5sYXN0Q2hp
bGQoKTsKLSAgICAgICAgcG9zID0gUG9zaXRpb24oY2hpbGQsIGNoaWxkLT5jYXJldE1heE9mZnNl
dCgpKTsKLSAgICAgICAgQVNTRVJUKGNoaWxkKTsKLSAgICAgICAgd2hpbGUgKCFjaGlsZC0+aXNB
dG9taWNOb2RlKCkgJiYgcG9zLm5vZGUoKS0+aGFzQ2hpbGROb2RlcygpKSB7Ci0gICAgICAgICAg
ICBjaGlsZCA9IHBvcy5ub2RlKCktPmxhc3RDaGlsZCgpOwotICAgICAgICAgICAgQVNTRVJUKGNo
aWxkKTsKLSAgICAgICAgICAgIHBvcyA9IFBvc2l0aW9uKGNoaWxkLCBjaGlsZC0+Y2FyZXRNYXhP
ZmZzZXQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNoaWxkID0g
bm9kZSgpLT5jaGlsZE5vZGUob2Zmc2V0KCkpOwotICAgICAgICBBU1NFUlQoY2hpbGQpOwotICAg
ICAgICBwb3MgPSBQb3NpdGlvbihjaGlsZCwgMCk7Ci0gICAgICAgIHdoaWxlICghY2hpbGQtPmlz
QXRvbWljTm9kZSgpICYmIHBvcy5ub2RlKCktPmhhc0NoaWxkTm9kZXMoKSkgewotICAgICAgICAg
ICAgY2hpbGQgPSBwb3Mubm9kZSgpLT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICBBU1NFUlQo
Y2hpbGQpOwotICAgICAgICAgICAgcG9zID0gUG9zaXRpb24oY2hpbGQsIDApOwotICAgICAgICB9
Ci0gICAgfQotICAgIHJldHVybiBwb3M7Ci19Ci0KIGJvb2wgUG9zaXRpb246OmluUmVuZGVyZWRD
b250ZW50KCkgY29uc3QKIHsKICAgICBpZiAoaXNOdWxsKCkpCkluZGV4OiBraHRtbC94bWwvZG9t
X3Bvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
eG1sL2RvbV9wb3NpdGlvbi5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM1CmRpZmYgLXUgLXIx
LjM1IGRvbV9wb3NpdGlvbi5oCi0tLSBraHRtbC94bWwvZG9tX3Bvc2l0aW9uLmgJMTYgU2VwIDIw
MDUgMjI6NDI6MjAgLTAwMDAJMS4zNQorKysga2h0bWwveG1sL2RvbV9wb3NpdGlvbi5oCTEwIEph
biAyMDA2IDAyOjE3OjE4IC0wMDAwCkBAIC04Myw3ICs4Myw2IEBACiAgICAgUG9zaXRpb24gZG93
bnN0cmVhbSgpIGNvbnN0OwogICAgIAogICAgIFBvc2l0aW9uIGVxdWl2YWxlbnRSYW5nZUNvbXBs
aWFudFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgUG9zaXRpb24gZXF1aXZhbGVudERlZXBQb3NpdGlv
bigpIGNvbnN0OwogICAgIGJvb2wgaW5SZW5kZXJlZENvbnRlbnQoKSBjb25zdDsKICAgICBib29s
IGlzUmVuZGVyZWRDaGFyYWN0ZXIoKSBjb25zdDsKICAgICBib29sIHJlbmRlcnNJbkRpZmZlcmVu
dFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uICZwb3MpIGNvbnN0OwpJbmRleDoga3dxL0tXUUFjY09i
amVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRQWNj
T2JqZWN0Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjg3CmRpZmYgLXUgLXIxLjg3IEtXUUFj
Y09iamVjdC5tbQotLS0ga3dxL0tXUUFjY09iamVjdC5tbQkyOSBOb3YgMjAwNSAyMjoxNDowOSAt
MDAwMAkxLjg3CisrKyBrd3EvS1dRQWNjT2JqZWN0Lm1tCTEwIEphbiAyMDA2IDAyOjE3OjE5IC0w
MDAwCkBAIC0xMTY5LDcgKzExNjksNyBAQAogICAgIC8vIHRyeSB0byB1c2UgdGhlIGRvY3VtZW50
IHZpZXcgZnJvbSB0aGUgc2VsZWN0aW9uLCBzbyB0aGF0IG5lc3RlZCBXZWJBcmVhcyB3b3JrLAog
ICAgIC8vIGJ1dCBmYWxsIGJhY2sgdG8gdGhlIHRvcCBsZXZlbCBkb2MgaWYgd2UgZG8gbm90IGZp
bmQgaXQgZWFzaWx5CiAgICAgS0hUTUxWaWV3ICpkb2NWaWV3ID0gTlVMTDsKLSAgICBSZW5kZXJP
YmplY3QgKiByZW5kZXJlciA9IHN0YXJ0VmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCku
bm9kZSgpLT5yZW5kZXJlcigpOworICAgIFJlbmRlck9iamVjdCAqIHJlbmRlcmVyID0gc3RhcnRW
aXNpYmxlUG9zaXRpb24ucG9zaXRpb24oKS5ub2RlKCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKHJl
bmRlcmVyKSB7CiAgICAgICAgIERvY3VtZW50SW1wbCogZG9jID0gcmVuZGVyZXItPmRvY3VtZW50
KCk7CiAgICAgICAgIGlmIChkb2MpCkluZGV4OiBrd3EvS1dRQWNjT2JqZWN0Q2FjaGUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUFjY09iamVjdENhY2hl
Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXUgLXIxLjExIEtXUUFjY09iamVj
dENhY2hlLm1tCi0tLSBrd3EvS1dRQWNjT2JqZWN0Q2FjaGUubW0JMyBPY3QgMjAwNSAyMToxMzow
MSAtMDAwMAkxLjExCisrKyBrd3EvS1dRQWNjT2JqZWN0Q2FjaGUubW0JMTAgSmFuIDIwMDYgMDI6
MTc6MTkgLTAwMDAKQEAgLTE1OCw3ICsxNTgsNyBAQAogCiBXZWJDb3JlVGV4dE1hcmtlciAqS1dR
QWNjT2JqZWN0Q2FjaGU6OnRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24gKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiAmdmlzaWJsZVBvcykKIHsKLSAgICBET006OlBvc2l0aW9uIGRlZXBQb3MgPSB2
aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCk7CisgICAgRE9NOjpQb3NpdGlvbiBkZWVwUG9zID0g
dmlzaWJsZVBvcy5wb3NpdGlvbigpOwogICAgIERPTTo6Tm9kZUltcGwqIGRvbU5vZGUgPSBkZWVw
UG9zLm5vZGUoKTsKICAgICBBU1NFUlQoZG9tTm9kZSAhPSBOVUxMKTsKICAgICBpZiAoZG9tTm9k
ZSA9PSBOVUxMKQpJbmRleDoga3dxL0tXUUtIVE1MUGFydC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0Lm1tLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjcxNQpkaWZmIC11IC1yMS43MTUgS1dRS0hUTUxQYXJ0Lm1tCi0tLSBrd3EvS1dRS0hU
TUxQYXJ0Lm1tCTYgSmFuIDIwMDYgMTk6MjQ6MDQgLTAwMDAJMS43MTUKKysrIGt3cS9LV1FLSFRN
TFBhcnQubW0JMTAgSmFuIDIwMDYgMDI6MTc6MTkgLTAwMDAKQEAgLTM0NzUsNyArMzQ3NSw3IEBA
CiAgICAgaWYgKGQtPm1fc2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gMDsKICAg
ICAKLSAgICBQb3NpdGlvbiBwb3MgPSBWaXNpYmxlUG9zaXRpb24oZC0+bV9zZWxlY3Rpb24uc3Rh
cnQoKSwgZC0+bV9zZWxlY3Rpb24uc3RhcnRBZmZpbml0eSgpKS5kZWVwRXF1aXZhbGVudCgpOwor
ICAgIFBvc2l0aW9uIHBvcyA9IFZpc2libGVQb3NpdGlvbihkLT5tX3NlbGVjdGlvbi5zdGFydCgp
LCBkLT5tX3NlbGVjdGlvbi5zdGFydEFmZmluaXR5KCkpLnBvc2l0aW9uKCk7CiAgICAgaWYgKCFw
b3MuaW5SZW5kZXJlZENvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgTm9kZUltcGwg
Km5vZGUgPSBwb3Mubm9kZSgpOwpAQCAtMzYyNSw3ICszNjI1LDcgQEAKIHsKICAgICBOU1dyaXRp
bmdEaXJlY3Rpb24gcmVzdWx0ID0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ7CiAKLSAg
ICBQb3NpdGlvbiBwb3MgPSBWaXNpYmxlUG9zaXRpb24oZC0+bV9zZWxlY3Rpb24uc3RhcnQoKSwg
ZC0+bV9zZWxlY3Rpb24uc3RhcnRBZmZpbml0eSgpKS5kZWVwRXF1aXZhbGVudCgpOworICAgIFBv
c2l0aW9uIHBvcyA9IFZpc2libGVQb3NpdGlvbihkLT5tX3NlbGVjdGlvbi5zdGFydCgpLCBkLT5t
X3NlbGVjdGlvbi5zdGFydEFmZmluaXR5KCkpLnBvc2l0aW9uKCk7CiAgICAgTm9kZUltcGwgKm5v
ZGUgPSBwb3Mubm9kZSgpOwogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSB8fCAh
bm9kZS0+cmVuZGVyZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCkpCiAgICAgICAgIHJldHVybiByZXN1
bHQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5581</attachid>
            <date>2006-01-09 21:04:20 -0800</date>
            <delta_ts>2006-01-09 21:32:13 -0800</delta_ts>
            <desc>patch</desc>
            <filename>svn-5870.txt</filename>
            <type>text/plain</type>
            <size>30040</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25f
Y29tbWFuZC5jcHAJKHJldmlzaW9uIDExOTc2KQorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Jl
cGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsNyArMzI0
LDcgQEAKICAgICAgICAgLy8gSWYgdGhlIGRlc2lyZWRTdHlsZSBpcyBub24temVybyBsZW5ndGgs
IHRoYXQgbWVhbnMgdGhlIGN1cnJlbnQgc3R5bGUgZGlmZmVycwogICAgICAgICAvLyBmcm9tIHRo
ZSBkZXNpcmVkIGJ5IHRoZSBzdHlsZXMgcmVtYWluaW5nIGluIHRoZSBkZXNpcmVkU3R5bGUgZGVj
bGFyYXRpb24uCiAgICAgICAgIGlmIChkZXNpcmVkU3R5bGUtPmxlbmd0aCgpID4gMCkKLQkgICAg
YXBwbHlTdHlsZShkZXNpcmVkU3R5bGUsIFBvc2l0aW9uKG5vZGUsIDApLCBQb3NpdGlvbihub2Rl
LCBub2RlLT5tYXhEZWVwT2Zmc2V0KCkpKTsKKwkgICAgYXBwbHlTdHlsZShkZXNpcmVkU3R5bGUs
IFBvc2l0aW9uKG5vZGUsIDApLCBQb3NpdGlvbihub2RlLCBtYXhEZWVwT2Zmc2V0KG5vZGUpKSk7
CiAgICAgfQogfQogCkBAIC03OTQsMTAgKzc5NCw5IEBACiAgICAgICAgICAgICBOb2RlSW1wbCAq
bm9kZSA9IGJleW9uZEVuZE5vZGU7CiAgICAgICAgICAgICBOb2RlSW1wbCAqcmVmTm9kZSA9IG1f
bGFzdE5vZGVJbnNlcnRlZC5nZXQoKTsKICAgICAgICAgICAgIHdoaWxlIChub2RlKSB7Ci0gICAg
ICAgICAgICAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0g
ICAgICAgICAgICAgICAgLy8gU3RvcCBhdCB0aGUgZmlyc3QgdGFibGUgb3IgYmxvY2suCi0gICAg
ICAgICAgICAgICAgaWYgKHJlbmRlcmVyICYmIChyZW5kZXJlci0+aXNCbG9ja0Zsb3coKSB8fCBy
ZW5kZXJlci0+aXNUYWJsZSgpKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+aXNCbG9ja0Zs
b3dPclRhYmxlKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBOb2RlSW1wbCAqbmV4dCA9IG5vZGUtPm5leHRTaWJsaW5n
KCk7CiAgICAgICAgICAgICAgICAgYmxvY2tzLmFwcGVuZChub2RlLT5lbmNsb3NpbmdCbG9ja0Zs
b3dFbGVtZW50KCkpOwogICAgICAgICAgICAgICAgIGNvbXB1dGVBbmRTdG9yZU5vZGVEZXNpcmVk
U3R5bGUobm9kZSwgc3R5bGVzKTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxl
X3Bvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVf
cG9zaXRpb24uaAkocmV2aXNpb24gMTE5NzYpCisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvdmlz
aWJsZV9wb3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxMiArNzEsOSBAQAogICAgIGJv
b2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9kZWVwUG9zaXRpb24uaXNOdWxsKCk7IH0KICAg
ICBib29sIGlzTm90TnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVlcFBvc2l0aW9uLmlzTm90TnVs
bCgpOyB9CiAKLSAgICBQb3NpdGlvbiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIHJhbmdlQ29t
cGxpYW50RXF1aXZhbGVudChtX2RlZXBQb3NpdGlvbik7IH0KICAgICBQb3NpdGlvbiBkZWVwRXF1
aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVlcFBvc2l0aW9uOyB9CiAgICAgRUFmZmluaXR5
IGFmZmluaXR5KCkgY29uc3QgeyBhc3NlcnQobV9hZmZpbml0eSA9PSBVUFNUUkVBTSB8fCBtX2Fm
ZmluaXR5ID09IERPV05TVFJFQU0pOyByZXR1cm4gbV9hZmZpbml0eTsgfQogICAgIHZvaWQgc2V0
QWZmaW5pdHkoRUFmZmluaXR5IGFmZmluaXR5KSB7IG1fYWZmaW5pdHkgPSBhZmZpbml0eTsgfQot
ICAgIAotICAgIFBvc2l0aW9uIGRvd25zdHJlYW1EZWVwRXF1aXZhbGVudCgpIGNvbnN0OwogCiAg
ICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWaXNpYmxlUG9zaXRpb24gJmEsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiAmYik7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBW
aXNpYmxlUG9zaXRpb24gJmEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYik7CkBAIC05Myw2ICs5
MCw4IEBACiAgICAgUUNoYXIgY2hhcmFjdGVyKCkgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBkZWJ1
Z1Bvc2l0aW9uKGNvbnN0IGNoYXIgKm1zZyA9ICIiKSBjb25zdDsKKyAgICAKKyAgICBzdGF0aWMg
UG9zaXRpb24gZGVlcEVxdWl2YWxlbnQoY29uc3QgUG9zaXRpb24gJik7CiAKICNpZm5kZWYgTkRF
QlVHCiAgICAgdm9pZCBmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxl
bmd0aCkgY29uc3Q7CkBAIC0xMDEsMTQgKzEwMCw4IEBACiAgICAgCiBwcml2YXRlOgogICAgIHZv
aWQgaW5pdChjb25zdCBQb3NpdGlvbiAmLCBFQWZmaW5pdHkpOwotICAgIHZvaWQgaW5pdFVwc3Ry
ZWFtKGNvbnN0IFBvc2l0aW9uICYpOwotICAgIHZvaWQgaW5pdERvd25zdHJlYW0oY29uc3QgUG9z
aXRpb24gJik7CiAKLSAgICBzdGF0aWMgUG9zaXRpb24gZGVlcEVxdWl2YWxlbnQoY29uc3QgUG9z
aXRpb24gJik7Ci0gICAgc3RhdGljIFBvc2l0aW9uIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChj
b25zdCBQb3NpdGlvbiAmKTsKLQogICAgIHN0YXRpYyBpbnQgbWF4T2Zmc2V0KGNvbnN0IE5vZGVJ
bXBsICopOwotICAgIHN0YXRpYyBib29sIGlzQXRvbWljTm9kZShjb25zdCBOb2RlSW1wbCAqKTsK
ICAgICAKICAgICBzdGF0aWMgUG9zaXRpb24gcHJldmlvdXNWaXNpYmxlUG9zaXRpb24oY29uc3Qg
UG9zaXRpb24gJik7CiAgICAgc3RhdGljIFBvc2l0aW9uIG5leHRWaXNpYmxlUG9zaXRpb24oY29u
c3QgUG9zaXRpb24gJik7CkBAIC0xMjksOSArMTIyLDkgQEAKICAgICByZXR1cm4gIShhID09IGIp
OwogfQogCi1QYXNzUmVmUHRyPERPTTo6UmFuZ2VJbXBsPiBtYWtlUmFuZ2UoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICZzdGFydCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZlbmQpOwotYm9vbCBzZXRT
dGFydChET006OlJhbmdlSW1wbCAqLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJnN0YXJ0KTsKLWJv
b2wgc2V0RW5kKERPTTo6UmFuZ2VJbXBsICosIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmc3RhcnQp
OworUGFzc1JlZlB0cjxET006OlJhbmdlSW1wbD4gbWFrZVJhbmdlKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7Citib29sIHNldFN0YXJ0KERPTTo6UmFu
Z2VJbXBsICosIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKK2Jvb2wgc2V0RW5kKERPTTo6UmFu
Z2VJbXBsICosIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKIFZpc2libGVQb3NpdGlvbiBzdGFy
dFZpc2libGVQb3NpdGlvbihjb25zdCBET006OlJhbmdlSW1wbCAqLCBFQWZmaW5pdHkpOwogVmlz
aWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3NpdGlvbihjb25zdCBET006OlJhbmdlSW1wbCAqLCBF
QWZmaW5pdHkpOwogCkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJl
YWtfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2Vy
dF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwCShyZXZpc2lvbiAxMTk3NikKKysrIFdlYkNvcmUva2h0
bWwvZWRpdGluZy9pbnNlcnRfbGluZV9icmVha19jb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTcxLDcgKzE3MSw3IEBACiAgICAgCiAgICAgaWYgKHR5cGluZ1N0eWxlICYmIHR5cGluZ1N0
eWxlLT5sZW5ndGgoKSA+IDApIHsKICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rp
b25CZWZvcmVTdHlsZSA9IGVuZGluZ1NlbGVjdGlvbigpOwotICAgICAgICBhcHBseVN0eWxlKHR5
cGluZ1N0eWxlLCBQb3NpdGlvbihub2RlVG9JbnNlcnQsIDApLCBQb3NpdGlvbihub2RlVG9JbnNl
cnQsIG5vZGVUb0luc2VydC0+bWF4RGVlcE9mZnNldCgpKSk7CisgICAgICAgIGFwcGx5U3R5bGUo
dHlwaW5nU3R5bGUsIFBvc2l0aW9uKG5vZGVUb0luc2VydCwgMCksIFBvc2l0aW9uKG5vZGVUb0lu
c2VydCwgbWF4RGVlcE9mZnNldChub2RlVG9JbnNlcnQpKSk7CiAgICAgICAgIHNldEVuZGluZ1Nl
bGVjdGlvbihzZWxlY3Rpb25CZWZvcmVTdHlsZSk7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL2to
dG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
aHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uY3BwCShyZXZpc2lvbiAxMTk3NikKKysrIFdl
YkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgInZpc2libGVf
cG9zaXRpb24uaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCi0KKyNpbmNsdWRlICJodG1s
ZWRpdGluZy5oIgogI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9y
ZW5kZXJfbGluZS5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCkBAIC0x
NTcsMTUgKzE1Nyw2IEBACiAgICAgUG9zaXRpb24gZG93bnN0cmVhbVRlc3QgPSB0ZXN0LmRvd25z
dHJlYW0oKTsKICAgICBib29sIGFjY2VwdEFueVZpc2libGVQb3NpdGlvbiA9ICFpc0NhbmRpZGF0
ZSh0ZXN0KTsKIAotICAgIC8vIE5PVEU6IFRoZSBmaXJzdCBwb3NpdGlvbiBleGFtaW5lZCBpcyB0
aGUgZGVlcEVxdWl2YWxlbnQgb2YgcG9zLiAgVGhpcywKLSAgICAvLyBvZiBjb3Vyc2UsIGlzIG9m
dGVuIGFmdGVyIHBvcyBpbiB0aGUgRE9NLiAgU29tZSBjYXJlIGlzIHRha2VuIHRvIG5vdCByZXR1
cm4KLSAgICAvLyBhIHBvc2l0aW9uIGxhdGVyIHRoYW4gcG9zLCBidXQgaXQgaXMgY2xlYXJseSBw
b3NzaWJsZSB0byByZXR1cm4gcG9zCi0gICAgLy8gaXRzZWxmIChpZiBpdCBpcyBhIGNhbmRpZGF0
ZSkgd2hlbiBpdGVyYXRpbmcgYmFjayBmcm9tIGEgZGVlcEVxdWl2YWxlbnQKLSAgICAvLyB0aGF0
IGlzIG5vdCBhIGNhbmRpZGF0ZS4gIFRoYXQgaXMgd3JvbmchICBIb3dldmVyLCBvdXIgY2xpZW50
cyBzZWVtIHRvCi0gICAgLy8gbGlrZSBpdC4gIEdvdHRhIGxvc2UgdGhvc2UgY2xpZW50cyEgKGlu
aXREb3duc3RyZWFtIGFuZCBpbml0VXBzdHJlYW0pCi0gICAgCi0gICAgLy8gSG93IGFib3V0ICJp
ZiBpc0NhbmRpZGF0ZShwb3MpIGJhY2sgdXAgdG8gdGhlIHByZXZpb3VzIGNhbmRpZGF0ZSwgZWxz
ZQotICAgIC8vIGJhY2sgdXAgdG8gdGhlIHNlY29uZCBwcmV2aW91cyBjYW5kaWRhdGUiPwogICAg
IFBvc2l0aW9uIGN1cnJlbnQgPSB0ZXN0OwogICAgIHdoaWxlICghY3VycmVudC5hdFN0YXJ0KCkp
IHsKICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucHJldmlvdXMoVXNpbmdDb21wb3NlZENoYXJh
Y3RlcnMpOwpAQCAtMjIyLDcgKzIxMyw3IEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmIChyZW5kZXJlci0+aXNSZXBsYWNlZCgpKQotICAgICAgICByZXR1cm4gcG9zLm9mZnNldCgp
ID09IDAgfHwgcG9zLm9mZnNldCgpID09IDE7CisgICAgICAgIHJldHVybiBwb3Mub2Zmc2V0KCkg
PT0gMCB8fCBwb3Mub2Zmc2V0KCkgPT0gbWF4RGVlcE9mZnNldChwb3Mubm9kZSgpKTsKIAogICAg
IGlmIChyZW5kZXJlci0+aXNCUigpKSB7CiAgICAgICAgIGlmIChwb3Mub2Zmc2V0KCkgPT0gMCkg
ewpAQCAtMjM3LDIyICsyMjgsMTkgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAg
ICAKKyAgICAvLyBUcnVlIGlmIGF0IGEgcmVuZGVyZWQgb2Zmc2V0IGluc2lkZSBhIHRleHQgbm9k
ZQogICAgIGlmIChyZW5kZXJlci0+aXNUZXh0KCkpIHsKICAgICAgICAgUmVuZGVyVGV4dCAqdGV4
dFJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihyZW5kZXJlcik7CiAgICAgICAg
IGZvciAoSW5saW5lVGV4dEJveCAqYm94ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsg
Ym94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKICAgICAgICAgICAgIGlmIChwb3Mub2Zm
c2V0KCkgPj0gYm94LT5tX3N0YXJ0ICYmIHBvcy5vZmZzZXQoKSA8PSBib3gtPm1fc3RhcnQgKyBi
b3gtPm1fbGVuKSB7Ci0gICAgICAgICAgICAgICAgLy8gcmV0dXJuIHRydWUgaWYgaW4gYSB0ZXh0
IG5vZGUKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICBpZiAocmVuZGVyZXItPmlzQmxvY2tGbG93KCkgJiYKLSAg
ICAgICAhaGFzUmVuZGVyZWRDaGlsZHJlbldpdGhIZWlnaHQocmVuZGVyZXIpICYmCi0gICAgICAg
KHJlbmRlcmVyLT5oZWlnaHQoKSB8fCBwb3Mubm9kZSgpLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSkg
ewotICAgICAgICAvLyByZXR1cm4gdHJ1ZSBmb3Igb2Zmc2V0IDAgaW50byByZW5kZXJlZCBibG9j
a3MgdGhhdCBhcmUgZW1wdHkgb2YgcmVuZGVyZWQga2lkcywgYnV0IGhhdmUgYSBoZWlnaHQKLSAg
ICAgICAgcmV0dXJuIHBvcy5vZmZzZXQoKSA9PSAwOwotICAgIH0KKyAgICBpZiAocmVuZGVyZXIt
PmlzQmxvY2tGbG93KCkgJiYgIWhhc1JlbmRlcmVkQ2hpbGRyZW5XaXRoSGVpZ2h0KHJlbmRlcmVy
KSAmJgorICAgICAgIChyZW5kZXJlci0+aGVpZ2h0KCkgfHwgcG9zLm5vZGUoKS0+aGFzVGFnTmFt
ZShib2R5VGFnKSkpCisgICAgICAgcmV0dXJuIHBvcy5vZmZzZXQoKSA9PSAwOwogICAgIAogICAg
IHJldHVybiBmYWxzZTsKIH0KQEAgLTI2NSw3ICsyNTMsNyBAQAogICAgIGlmICghbm9kZSkKICAg
ICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAgICAgCi0gICAgaWYgKGlzQXRvbWljTm9kZShub2Rl
KSkKKyAgICBpZiAoaXNDYW5kaWRhdGUocG9zKSB8fCBpc0F0b21pY05vZGUobm9kZSkpCiAgICAg
ICAgIHJldHVybiBwb3M7CiAKICAgICBpZiAob2Zmc2V0ID49IChpbnQpbm9kZS0+Y2hpbGROb2Rl
Q291bnQoKSkgewpAQCAtMjc0LDEzICsyNjIsMTMgQEAKICAgICAgICAgICAgIGlmICghY2hpbGQp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBub2RlID0gY2hpbGQ7Ci0gICAg
ICAgIH0gd2hpbGUgKCFpc0F0b21pY05vZGUobm9kZSkpOworICAgICAgICB9IHdoaWxlICghaXND
YW5kaWRhdGUoUG9zaXRpb24obm9kZSwgbm9kZS0+Y2FyZXRNYXhPZmZzZXQoKSkpICYmICFpc0F0
b21pY05vZGUobm9kZSkpOwogICAgICAgICByZXR1cm4gUG9zaXRpb24obm9kZSwgbm9kZS0+Y2Fy
ZXRNYXhPZmZzZXQoKSk7CiAgICAgfQogICAgIAogICAgIG5vZGUgPSBub2RlLT5jaGlsZE5vZGUo
b2Zmc2V0KTsKICAgICBBU1NFUlQobm9kZSk7Ci0gICAgd2hpbGUgKCFpc0F0b21pY05vZGUobm9k
ZSkpIHsKKyAgICB3aGlsZSAoIWlzQ2FuZGlkYXRlKFBvc2l0aW9uKG5vZGUsIDApKSAmJiAhaXNB
dG9taWNOb2RlKG5vZGUpKSB7CiAgICAgICAgIE5vZGVJbXBsICpjaGlsZCA9IG5vZGUtPmZpcnN0
Q2hpbGQoKTsKICAgICAgICAgaWYgKCFjaGlsZCkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjg5
LDU3ICsyNzcsMTQgQEAKICAgICByZXR1cm4gUG9zaXRpb24obm9kZSwgMCk7CiB9CiAKLVBvc2l0
aW9uIFZpc2libGVQb3NpdGlvbjo6ZG93bnN0cmVhbURlZXBFcXVpdmFsZW50KCkgY29uc3QKLXsK
LSAgICBQb3NpdGlvbiBwb3MgPSBtX2RlZXBQb3NpdGlvbjsKLSAgICAKLSAgICBpZiAocG9zLmlz
TnVsbCgpIHx8IHBvcy5hdEVuZCgpKQotICAgICAgICByZXR1cm4gcG9zOwotCi0gICAgUG9zaXRp
b24gZG93bnN0cmVhbVRlc3QgPSBwb3MuZG93bnN0cmVhbSgpOwotCi0gICAgUG9zaXRpb24gY3Vy
cmVudCA9IHBvczsKLSAgICB3aGlsZSAoIWN1cnJlbnQuYXRFbmQoKSkgewotICAgICAgICBjdXJy
ZW50ID0gY3VycmVudC5uZXh0KFVzaW5nQ29tcG9zZWRDaGFyYWN0ZXJzKTsKLSAgICAgICAgaWYg
KGlzQ2FuZGlkYXRlKGN1cnJlbnQpKSB7Ci0gICAgICAgICAgICBpZiAoZG93bnN0cmVhbVRlc3Qg
IT0gY3VycmVudC5kb3duc3RyZWFtKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBwb3MgPSBjdXJyZW50OwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBw
b3M7Ci19Ci0KLVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cmFuZ2VDb21wbGlhbnRFcXVpdmFs
ZW50KGNvbnN0IFBvc2l0aW9uICZwb3MpCi17Ci0gICAgTm9kZUltcGwgKm5vZGUgPSBwb3Mubm9k
ZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7Ci0gICAgCi0g
ICAgLy8gRklYTUU6IFRoaXMgY2xhbXBzIG91dC1vZi1yYW5nZSB2YWx1ZXMuCi0gICAgLy8gSW5z
dGVhZCB3ZSBzaG91bGQgcHJvYmFibHkgYXNzZXJ0LCBhbmQgbm90IHVzZSBzdWNoIHZhbHVlcy4K
LQotICAgIGludCBvZmZzZXQgPSBwb3Mub2Zmc2V0KCk7Ci0gICAgaWYgKCFvZmZzZXRJbkNoYXJh
Y3RlcnMobm9kZS0+bm9kZVR5cGUoKSkgJiYgaXNBdG9taWNOb2RlKG5vZGUpICYmIG9mZnNldCA+
IDApCi0gICAgICAgIHJldHVybiBQb3NpdGlvbihub2RlLT5wYXJlbnROb2RlKCksIG5vZGUtPm5v
ZGVJbmRleCgpICsgMSk7Ci0KLSAgICByZXR1cm4gUG9zaXRpb24obm9kZSwga01heCgwLCBrTWlu
KG9mZnNldCwgbWF4T2Zmc2V0KG5vZGUpKSkpOwotfQotCiBpbnQgVmlzaWJsZVBvc2l0aW9uOjpt
YXhPZmZzZXQoY29uc3QgTm9kZUltcGwgKm5vZGUpCiB7CiAgICAgcmV0dXJuIG9mZnNldEluQ2hh
cmFjdGVycyhub2RlLT5ub2RlVHlwZSgpKSA/IChpbnQpc3RhdGljX2Nhc3Q8Y29uc3QgQ2hhcmFj
dGVyRGF0YUltcGwgKj4obm9kZSktPmxlbmd0aCgpIDogKGludClub2RlLT5jaGlsZE5vZGVDb3Vu
dCgpOwogfQogCi1ib29sIFZpc2libGVQb3NpdGlvbjo6aXNBdG9taWNOb2RlKGNvbnN0IE5vZGVJ
bXBsICpub2RlKQotewotICAgIHJldHVybiBub2RlICYmICghbm9kZS0+aGFzQ2hpbGROb2Rlcygp
IHx8IChub2RlLT5oYXNUYWdOYW1lKG9iamVjdFRhZykgJiYgbm9kZS0+cmVuZGVyZXIoKSAmJiBu
b2RlLT5yZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkpKTsKLX0KLQogUUNoYXIgVmlzaWJsZVBvc2l0
aW9uOjpjaGFyYWN0ZXIoKSBjb25zdAogewotICAgIFBvc2l0aW9uIHBvcyA9IHBvc2l0aW9uKCk7
CisgICAgUG9zaXRpb24gcG9zID0gbV9kZWVwUG9zaXRpb247CiAgICAgTm9kZUltcGwgKm5vZGUg
PSBwb3Mubm9kZSgpOwogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNUZXh0Tm9kZSgpKSB7CiAg
ICAgICAgIHJldHVybiBRQ2hhcigpOwpAQCAtMzkzLDggKzMzOCw4IEBACiAKIFBhc3NSZWZQdHI8
UmFuZ2VJbXBsPiBtYWtlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZzdGFydCwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICZlbmQpCiB7Ci0gICAgUG9zaXRpb24gcyA9IHN0YXJ0LnBvc2l0aW9u
KCk7Ci0gICAgUG9zaXRpb24gZSA9IGVuZC5wb3NpdGlvbigpOworICAgIFBvc2l0aW9uIHMgPSBz
dGFydC5kZWVwRXF1aXZhbGVudCgpLmVxdWl2YWxlbnRSYW5nZUNvbXBsaWFudFBvc2l0aW9uKCk7
CisgICAgUG9zaXRpb24gZSA9IGVuZC5kZWVwRXF1aXZhbGVudCgpLmVxdWl2YWxlbnRSYW5nZUNv
bXBsaWFudFBvc2l0aW9uKCk7CiAgICAgcmV0dXJuIG5ldyBSYW5nZUltcGwocy5ub2RlKCktPmdl
dERvY3VtZW50KCksIHMubm9kZSgpLCBzLm9mZnNldCgpLCBlLm5vZGUoKSwgZS5vZmZzZXQoKSk7
CiB9CiAKQEAgLTQxMCw0OSArMzU1LDU1IEBACiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihy
LT5lbmRDb250YWluZXIoZXhjZXB0aW9uKSwgci0+ZW5kT2Zmc2V0KGV4Y2VwdGlvbiksIGFmZmlu
aXR5KTsKIH0KIAotYm9vbCBzZXRTdGFydChSYW5nZUltcGwgKnIsIGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmYykKK2Jvb2wgc2V0U3RhcnQoUmFuZ2VJbXBsICpyLCBjb25zdCBWaXNpYmxlUG9zaXRp
b24gJnZpc2libGVQb3NpdGlvbikKIHsKICAgICBpZiAoIXIpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBQb3NpdGlvbiBwID0gYy5wb3NpdGlvbigpOworICAgIFBvc2l0aW9uIHAgPSB2aXNp
YmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5lcXVpdmFsZW50UmFuZ2VDb21wbGlhbnRQb3Np
dGlvbigpOwogICAgIGludCBjb2RlID0gMDsKICAgICByLT5zZXRTdGFydChwLm5vZGUoKSwgcC5v
ZmZzZXQoKSwgY29kZSk7CiAgICAgcmV0dXJuIGNvZGUgPT0gMDsKIH0KIAotYm9vbCBzZXRFbmQo
UmFuZ2VJbXBsICpyLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMpCitib29sIHNldEVuZChSYW5n
ZUltcGwgKnIsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uKQogewogICAg
IGlmICghcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFBvc2l0aW9uIHAgPSBjLnBvc2l0
aW9uKCk7CisgICAgUG9zaXRpb24gcCA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
LmVxdWl2YWxlbnRSYW5nZUNvbXBsaWFudFBvc2l0aW9uKCk7CiAgICAgaW50IGNvZGUgPSAwOwog
ICAgIHItPnNldEVuZChwLm5vZGUoKSwgcC5vZmZzZXQoKSwgY29kZSk7CiAgICAgcmV0dXJuIGNv
ZGUgPT0gMDsKIH0KIAotRE9NOjpOb2RlSW1wbCAqZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChj
b25zdCBWaXNpYmxlUG9zaXRpb24gJnZwKQorRE9NOjpOb2RlSW1wbCAqZW5jbG9zaW5nQmxvY2tG
bG93RWxlbWVudChjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQb3NpdGlvbikKIHsKLSAg
ICBpZiAodnAuaXNOdWxsKCkpCisgICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKICAg
ICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByZXR1cm4gdnAucG9zaXRpb24oKS5ub2RlKCktPmVu
Y2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKKyAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uLmRl
ZXBFcXVpdmFsZW50KCkubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7CiB9CiAK
LWJvb2wgaXNGaXJzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24g
JnBvcywgY29uc3QgTm9kZUltcGwgKm5vZGUpCitib29sIGlzRmlyc3RWaXNpYmxlUG9zaXRpb25J
bk5vZGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9zaXRpb24sIGNvbnN0IE5vZGVJ
bXBsICpub2RlKQogewotICAgIGlmIChwb3MuaXNOdWxsKCkpCisgICAgaWYgKHZpc2libGVQb3Np
dGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghdmlz
aWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0FuY2VzdG9yKG5vZGUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBwcmV2
aW91cyA9IHBvcy5wcmV2aW91cygpOworICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHZp
c2libGVQb3NpdGlvbi5wcmV2aW91cygpOwogICAgIHJldHVybiBwcmV2aW91cy5pc051bGwoKSB8
fCAhcHJldmlvdXMuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmlzQW5jZXN0b3Iobm9kZSk7CiB9
CiAKLWJvb2wgaXNMYXN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlv
biAmcG9zLCBjb25zdCBOb2RlSW1wbCAqbm9kZSkKK2Jvb2wgaXNMYXN0VmlzaWJsZVBvc2l0aW9u
SW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uLCBjb25zdCBOb2Rl
SW1wbCAqbm9kZSkKIHsKLSAgICBpZiAocG9zLmlzTnVsbCgpKQorICAgIGlmICh2aXNpYmxlUG9z
aXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgVmlz
aWJsZVBvc2l0aW9uIG5leHQgPSBwb3MubmV4dCgpOworICAgIAorICAgIGlmICghdmlzaWJsZVBv
c2l0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0FuY2VzdG9yKG5vZGUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgCisgICAgVmlzaWJsZVBvc2l0aW9uIG5l
eHQgPSB2aXNpYmxlUG9zaXRpb24ubmV4dCgpOwogICAgIHJldHVybiBuZXh0LmlzTnVsbCgpIHx8
ICFuZXh0LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0FuY2VzdG9yKG5vZGUpOwogfQogCklu
ZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva2h0bWwvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDExOTc2KQor
KysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODksNiArODksMjggQEAKIAogbmFtZXNwYWNlIGtodG1sIHsKIAorLy8gQXRvbWljIG1lYW5z
IHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBub2RlIHNob3VsZCBiZSBpZ25vcmVkIGZvciB0aGUg
cHVycG9zZXMgb2YgZWRpdGluZy4KK2Jvb2wgaXNBdG9taWNOb2RlKGNvbnN0IE5vZGVJbXBsICpu
b2RlKQoreworICAgIHJldHVybiBub2RlICYmICghbm9kZS0+aGFzQ2hpbGROb2RlcygpIHx8IG5v
ZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNXaWRnZXQoKSk7Cit9CisKK2lu
dCBtYXhEZWVwT2Zmc2V0KGNvbnN0IE5vZGVJbXBsICpub2RlKQoreworICAgIGlmIChub2RlLT5p
c1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBUZXh0SW1wbCo+
KG5vZGUpLT5sZW5ndGgoKTsKKyAgICAgICAgCisgICAgaWYgKG5vZGUtPmhhc0NoaWxkTm9kZXMo
KSkKKyAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkTm9kZUNvdW50KCk7CisgICAgCisgICAgUmVu
ZGVyT2JqZWN0ICpyZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgLy8gQWxsb3dzIFti
ciwgMV0gYXMgYSBwb3NpdGlvbiwgdGhvdWdoIHRoYXQgaXMgaW5jb3JyZWN0CisgICAgaWYgKG5v
ZGUtPmhhc1RhZ05hbWUoYnJUYWcpIHx8IChyZW5kZXJlciAmJiAocmVuZGVyZXItPmlzUmVwbGFj
ZWQoKSB8fCByZW5kZXJlci0+aXNXaWRnZXQoKSkpKQorICAgICAgICByZXR1cm4gMTsKKworICAg
IHJldHVybiAwOworfQorCiB2b2lkIHJlYmFsYW5jZVdoaXRlc3BhY2VJblRleHROb2RlKE5vZGVJ
bXBsICpub2RlLCB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7CiAg
ICAgc3RhdGljIFFSZWdFeHAgbm9uUmVndWxhcldoaXRlc3BhY2UoIltceGEwXG5dIik7CkBAIC0y
MzYsNyArMjU4LDggQEAKIGJvb2wgaXNMYXN0VmlzaWJsZVBvc2l0aW9uSW5TcGVjaWFsRWxlbWVu
dChjb25zdCBQb3NpdGlvbiYgcG9zKQogewogICAgIC8vIG1ha2Ugc3VyZSB0byBnZXQgYSByYW5n
ZS1jb21wbGlhbnQgdmVyc2lvbiBvZiB0aGUgcG9zaXRpb24KLSAgICBQb3NpdGlvbiByYW5nZVBv
cyA9IFZpc2libGVQb3NpdGlvbihwb3MsIERPV05TVFJFQU0pLnBvc2l0aW9uKCk7CisgICAgLy8g
RklYTUU6IHJhbmdlUG9zIGlzbid0IGJlaW5nIHVzZWQgdG8gY3JlYXRlIERPTSBSYW5nZXMsIHNv
IHdoeSBkb2VzIGl0IG5lZWQgdG8gYmUgcmFuZ2UgY29tcGxpYW50PworICAgIFBvc2l0aW9uIHJh
bmdlUG9zID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgRE9XTlNUUkVBTSkuZGVlcEVxdWl2YWxlbnQo
KS5lcXVpdmFsZW50UmFuZ2VDb21wbGlhbnRQb3NpdGlvbigpOwogCiAgICAgVmlzaWJsZVBvc2l0
aW9uIHZQb3MgPSBWaXNpYmxlUG9zaXRpb24ocmFuZ2VQb3MsIERPV05TVFJFQU0pOwogCkBAIC0y
NjIsNyArMjg1LDggQEAKICAgICBBU1NFUlQoaXNMYXN0VmlzaWJsZVBvc2l0aW9uSW5TcGVjaWFs
RWxlbWVudChwb3MpKTsKIAogICAgIC8vIG1ha2Ugc3VyZSB0byBnZXQgYSByYW5nZS1jb21wbGlh
bnQgdmVyc2lvbiBvZiB0aGUgcG9zaXRpb24KLSAgICBQb3NpdGlvbiByYW5nZVBvcyA9IFZpc2li
bGVQb3NpdGlvbihwb3MsIERPV05TVFJFQU0pLnBvc2l0aW9uKCk7CisgICAgLy8gRklYTUU6IHJh
bmdlUG9zIGlzbid0IGJlaW5nIHVzZWQgdG8gY3JlYXRlIERPTSBSYW5nZXMsIHNvIHdoeSBkb2Vz
IGl0IG5lZWQgdG8gYmUgcmFuZ2UgY29tcGxpYW50PworICAgIFBvc2l0aW9uIHJhbmdlUG9zID0g
VmlzaWJsZVBvc2l0aW9uKHBvcywgRE9XTlNUUkVBTSkuZGVlcEVxdWl2YWxlbnQoKS5lcXVpdmFs
ZW50UmFuZ2VDb21wbGlhbnRQb3NpdGlvbigpOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHZQb3Mg
PSBWaXNpYmxlUG9zaXRpb24ocmFuZ2VQb3MsIERPV05TVFJFQU0pOwogCkluZGV4OiBXZWJDb3Jl
L2todG1sL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
aHRtbC9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCShyZXZpc2lvbiAxMTk3NikKKysrIFdlYkNv
cmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU5
LDkgKzM1OSw5IEBACiAgICAgcmV0dXJuIHAuaXNOb3ROdWxsKCkgJiYgcCA9PSBlbmRPZkxpbmUo
cCk7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBwcmV2aW91c0xpbmVQb3NpdGlvbihjb25zdCBWaXNp
YmxlUG9zaXRpb24gJmMsIGludCB4KQorVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzTGluZVBvc2l0
aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uLCBpbnQgeCkKIHsKLSAg
ICBQb3NpdGlvbiBwID0gYy5hZmZpbml0eSgpID09IFVQU1RSRUFNID8gYy5kZWVwRXF1aXZhbGVu
dCgpIDogYy5kb3duc3RyZWFtRGVlcEVxdWl2YWxlbnQoKTsKKyAgICBQb3NpdGlvbiBwID0gdmlz
aWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgTm9kZUltcGwgKm5vZGUgPSBwLm5v
ZGUoKTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmdldERvY3VtZW50KCkpCiAgICAgICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oKTsKQEAgLTM3NCw3ICszNzQsNyBAQAogCiAgICAgUmVuZGVy
QmxvY2sgKmNvbnRhaW5pbmdCbG9jayA9IDA7CiAgICAgUm9vdElubGluZUJveCAqcm9vdCA9IDA7
Ci0gICAgSW5saW5lQm94ICpib3ggPSByZW5kZXJlci0+aW5saW5lQm94KHAub2Zmc2V0KCksIGMu
YWZmaW5pdHkoKSk7CisgICAgSW5saW5lQm94ICpib3ggPSByZW5kZXJlci0+aW5saW5lQm94KHAu
b2Zmc2V0KCksIHZpc2libGVQb3NpdGlvbi5hZmZpbml0eSgpKTsKICAgICBpZiAoYm94KSB7CiAg
ICAgICAgIHJvb3QgPSBib3gtPnJvb3QoKS0+cHJldlJvb3RCb3goKTsKICAgICAgICAgaWYgKHJv
b3QpCkBAIC00MjIsOSArNDIyLDkgQEAKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG5vZGUt
PnJvb3RFZGl0YWJsZUVsZW1lbnQoKSwgMCwgRE9XTlNUUkVBTSk7CiB9CiAKLVZpc2libGVQb3Np
dGlvbiBuZXh0TGluZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYywgaW50IHgpCitW
aXNpYmxlUG9zaXRpb24gbmV4dExpbmVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZp
c2libGVQb3NpdGlvbiwgaW50IHgpCiB7Ci0gICAgUG9zaXRpb24gcCA9IGMuYWZmaW5pdHkoKSA9
PSBVUFNUUkVBTSA/IGMuZGVlcEVxdWl2YWxlbnQoKSA6IGMuZG93bnN0cmVhbURlZXBFcXVpdmFs
ZW50KCk7CisgICAgUG9zaXRpb24gcCA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
OwogICAgIE5vZGVJbXBsICpub2RlID0gcC5ub2RlKCk7CiAgICAgaWYgKCFub2RlIHx8ICFub2Rl
LT5nZXREb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CkBAIC00
MzcsNyArNDM3LDcgQEAKIAogICAgIFJlbmRlckJsb2NrICpjb250YWluaW5nQmxvY2sgPSAwOwog
ICAgIFJvb3RJbmxpbmVCb3ggKnJvb3QgPSAwOwotICAgIElubGluZUJveCAqYm94ID0gcmVuZGVy
ZXItPmlubGluZUJveChwLm9mZnNldCgpLCBjLmFmZmluaXR5KCkpOworICAgIElubGluZUJveCAq
Ym94ID0gcmVuZGVyZXItPmlubGluZUJveChwLm9mZnNldCgpLCB2aXNpYmxlUG9zaXRpb24uYWZm
aW5pdHkoKSk7CiAgICAgaWYgKGJveCkgewogICAgICAgICByb290ID0gYm94LT5yb290KCktPm5l
eHRSb290Qm94KCk7CiAgICAgICAgIGlmIChyb290KQpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0
aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwv
ZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMTE5NzYpCisrKyBXZWJD
b3JlL2todG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJkb20vZG9tX25vZGUuaCIKICNpbmNsdWRlICJk
b20vZG9tX3N0cmluZy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiaHRtbGVkaXRp
bmcuaCIKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVy
X29iamVjdC5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfc3R5bGUuaCIKQEAgLTg1LDE0
ICs4NiwxNCBAQAogfQogCiBTZWxlY3Rpb25Db250cm9sbGVyOjpTZWxlY3Rpb25Db250cm9sbGVy
KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBvcykKLSAgICA6IG1fYmFzZSh2aXNpYmxl
UG9zLnBvc2l0aW9uKCkpLCBtX2V4dGVudCh2aXNpYmxlUG9zLnBvc2l0aW9uKCkpCisgICAgOiBt
X2Jhc2UodmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpKSwgbV9leHRlbnQodmlzaWJsZVBvcy5k
ZWVwRXF1aXZhbGVudCgpKQogewogICAgIGluaXQodmlzaWJsZVBvcy5hZmZpbml0eSgpKTsKICAg
ICB2YWxpZGF0ZSgpOwogfQogCiBTZWxlY3Rpb25Db250cm9sbGVyOjpTZWxlY3Rpb25Db250cm9s
bGVyKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYmFzZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZl
eHRlbnQpCi0gICAgOiBtX2Jhc2UoYmFzZS5wb3NpdGlvbigpKSwgbV9leHRlbnQoZXh0ZW50LnBv
c2l0aW9uKCkpCisgICAgOiBtX2Jhc2UoYmFzZS5kZWVwRXF1aXZhbGVudCgpKSwgbV9leHRlbnQo
ZXh0ZW50LmRlZXBFcXVpdmFsZW50KCkpCiB7CiAgICAgaW5pdChiYXNlLmFmZmluaXR5KCkpOwog
ICAgIHZhbGlkYXRlKCk7CkBAIC01NjcsMTQgKzU2OCw3IEBACiAgICAgICAgIHJldHVybiB4Owog
ICAgICAgICAKICAgICBpZiAocmVjYWxjIHx8IGZyYW1lLT54UG9zRm9yVmVydGljYWxBcnJvd05h
dmlnYXRpb24oKSA9PSBGcmFtZTo6Tm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24pIHsK
LSAgICAgICAgc3dpdGNoIChtX2FmZmluaXR5KSB7Ci0gICAgICAgICAgICBjYXNlIERPV05TVFJF
QU06Ci0gICAgICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgbV9hZmZpbml0
eSkuZG93bnN0cmVhbURlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIFVQU1RSRUFNOgotICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQ
b3NpdGlvbihwb3MsIG1fYWZmaW5pdHkpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKHBvcywg
bV9hZmZpbml0eSkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICAgICAgeCA9IHBvcy5ub2RlKCktPnJl
bmRlcmVyKCktPmNhcmV0UmVjdChwb3Mub2Zmc2V0KCksIG1fYWZmaW5pdHkpLngoKTsKICAgICAg
ICAgZnJhbWUtPnNldFhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbih4KTsKICAgICB9CkBA
IC03MDMsNyArNjk3LDcgQEAKIAogUGFzc1JlZlB0cjxSYW5nZUltcGw+IFNlbGVjdGlvbkNvbnRy
b2xsZXI6OmdldFJhbmdlQXQoaW50IGluZGV4KSBjb25zdAogewotICAgIHJldHVybiBpbmRleCA9
PSAwID8gUGFzc1JlZlB0cjxSYW5nZUltcGw+KHRvUmFuZ2UoKSkgOiBQYXNzUmVmUHRyPFJhbmdl
SW1wbD4oKTsKKyAgICByZXR1cm4gaW5kZXggPT0gMCA/IHRvUmFuZ2UoKSA6IDA7CiB9CiAKIHZv
aWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0QmFzZUFuZEV4dGVudChOb2RlSW1wbCAqYmFzZU5v
ZGUsIGludCBiYXNlT2Zmc2V0LCBOb2RlSW1wbCAqZXh0ZW50Tm9kZSwgaW50IGV4dGVudE9mZnNl
dCkKQEAgLTc1OSwxNCArNzUzLDcgQEAKICAgICAgICAgCiAgICAgaWYgKGlzQ2FyZXQoKSkgewog
ICAgICAgICBQb3NpdGlvbiBwb3MgPSBtX3N0YXJ0OwotICAgICAgICBzd2l0Y2ggKG1fYWZmaW5p
dHkpIHsKLSAgICAgICAgICAgIGNhc2UgRE9XTlNUUkVBTToKLSAgICAgICAgICAgICAgICBwb3Mg
PSBWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9hZmZpbml0eSkuZG93bnN0cmVhbURlZXBFcXVp
dmFsZW50KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVQU1RS
RUFNOgotICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2Fm
ZmluaXR5KS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9CisgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KS5k
ZWVwRXF1aXZhbGVudCgpOwogICAgICAgICBpZiAocG9zLmlzTm90TnVsbCgpKSB7CiAgICAgICAg
ICAgICBBU1NFUlQocG9zLm5vZGUoKS0+cmVuZGVyZXIoKSk7CiAgICAgICAgICAgICBtX2NhcmV0
UmVjdCA9IHBvcy5ub2RlKCktPnJlbmRlcmVyKCktPmNhcmV0UmVjdChwb3Mub2Zmc2V0KCksIG1f
YWZmaW5pdHkpOwpAQCAtODc2LDcgKzg2Myw3IEBACiAgICAgICAgIH0KICAgICAgICAgLy8gSWYg
dGhlIGVuZCBpcyBvdXRzaWRlIHRoZSBiYXNlJ3MgZWRpdGFibGUgcm9vdCwgY2FwIGl0IGF0IHRo
ZSBlbmQgb2YgdGhhdCBlZGl0YWJsZSByb290LgogICAgICAgICBpZiAoYmFzZVJvb3QgIT0gZW5k
Um9vdCkgewotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGxhc3QoUG9zaXRpb24oYmFzZVJv
b3QsIGJhc2VSb290LT5tYXhEZWVwT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIFZpc2libGVQb3Np
dGlvbiBsYXN0KFBvc2l0aW9uKGJhc2VSb290LCBtYXhEZWVwT2Zmc2V0KGJhc2VSb290KSkpOwog
ICAgICAgICAgICAgbV9lbmQgPSBsYXN0LmRlZXBFcXVpdmFsZW50KCk7CiAgICAgICAgIH0KICAg
ICAvLyBUaGUgc2VsZWN0aW9uIGlzIGJhc2VkIG91dHNpZGUgZWRpdGFibGUgY29udGVudC4gIEtl
ZXAgYm90aCBzaWRlcyBmcm9tIHJlYWNoaW5nIGludG8gZWRpdGFibGUgY29udGVudC4KQEAgLTg5
Niw3ICs4ODMsNyBAQAogICAgICAgICBpZiAoc3RhcnRSb290KSB7CiAgICAgICAgICAgICBWaXNp
YmxlUG9zaXRpb24gbmV4dDsKICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBuZXh0
ID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHN0YXJ0Um9vdCwgc3RhcnRSb290LT5tYXhEZWVw
T2Zmc2V0KCkpKS5uZXh0KCk7CisgICAgICAgICAgICAgICAgbmV4dCA9IFZpc2libGVQb3NpdGlv
bihQb3NpdGlvbihzdGFydFJvb3QsIG1heERlZXBPZmZzZXQoc3RhcnRSb290KSkpLm5leHQoKTsK
ICAgICAgICAgICAgICAgICBzdGFydFJvb3QgPSBuZXh0LmRlZXBFcXVpdmFsZW50KCkubm9kZSgp
LT5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgICAgICAgICB9IHdoaWxlIChzdGFydFJvb3Qp
OwogICAgICAgICAgICAgCkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVj
dGlvbl9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvZGVs
ZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAkocmV2aXNpb24gMTE5NzYpCisrKyBXZWJDb3JlL2to
dG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjksMTcgKzY5LDYgQEAKICAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShtZW51VGFnKTsK
IH0KIAotc3RhdGljIGludCBtYXhEZWVwT2Zmc2V0KE5vZGVJbXBsICpuKQotewotICAgIGlmIChu
LT5pc0F0b21pY05vZGUoKSkKLSAgICAgICAgcmV0dXJuIG4tPmNhcmV0TWF4T2Zmc2V0KCk7Ci0K
LSAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICByZXR1cm4gbi0+Y2hpbGROb2Rl
Q291bnQoKTsKLQotICAgIHJldHVybiAxOwotfQotCiBzdGF0aWMgdm9pZCBkZWJ1Z1Bvc2l0aW9u
KGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgUG9zaXRpb24gJnBvcykKIHsKICAgICBpZiAoIXBy
ZWZpeCkKQEAgLTI5MCw3ICsyNzksNiBAQAogICAgIGlmIChpc0JST25MaW5lQnlJdHNlbGYpIHsK
ICAgICAgICAgbV9lbmRpbmdQb3NpdGlvbiA9IFBvc2l0aW9uKG1fZG93bnN0cmVhbVN0YXJ0Lm5v
ZGUoKS0+cGFyZW50Tm9kZSgpLCBtX2Rvd25zdHJlYW1TdGFydC5ub2RlKCktPm5vZGVJbmRleCgp
KTsKICAgICAgICAgcmVtb3ZlTm9kZShtX2Rvd25zdHJlYW1TdGFydC5ub2RlKCkpOwotICAgICAg
ICBtX2VuZGluZ1Bvc2l0aW9uID0gbV9lbmRpbmdQb3NpdGlvbi5lcXVpdmFsZW50RGVlcFBvc2l0
aW9uKCk7CiAgICAgICAgIG1fbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSA9IGZhbHNlOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvaHRtbGVk
aXRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvaHRtbGVkaXRpbmcu
aAkocmV2aXNpb24gMTE5NzYpCisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvaHRtbGVkaXRpbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsOSBAQAogCiBuYW1lc3BhY2Uga2h0bWwgewog
CitpbnQgbWF4RGVlcE9mZnNldChjb25zdCBET006Ok5vZGVJbXBsICpub2RlKTsKK2Jvb2wgaXNB
dG9taWNOb2RlKGNvbnN0IERPTTo6Tm9kZUltcGwgKm5vZGUpOworCiB2b2lkIHJlYmFsYW5jZVdo
aXRlc3BhY2VJblRleHROb2RlKERPTTo6Tm9kZUltcGwgKm5vZGUsIHVuc2lnbmVkIGludCBzdGFy
dCwgdW5zaWduZWQgaW50IGxlbmd0aCk7CiBET006OkRPTVN0cmluZyAmbm9uQnJlYWtpbmdTcGFj
ZVN0cmluZygpOwogdm9pZCBkZXJlZk5vZGVzSW5MaXN0KFFQdHJMaXN0PERPTTo6Tm9kZUltcGw+
ICZsaXN0KTsKSW5kZXg6IFdlYkNvcmUva2h0bWwveG1sL2RvbV9wb3NpdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva2h0bWwveG1sL2RvbV9wb3NpdGlvbi5oCShyZXZpc2lvbiAxMTk3NikK
KysrIFdlYkNvcmUva2h0bWwveG1sL2RvbV9wb3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Myw3ICs4Myw2IEBACiAgICAgUG9zaXRpb24gZG93bnN0cmVhbSgpIGNvbnN0OwogICAgIAogICAg
IFBvc2l0aW9uIGVxdWl2YWxlbnRSYW5nZUNvbXBsaWFudFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAg
UG9zaXRpb24gZXF1aXZhbGVudERlZXBQb3NpdGlvbigpIGNvbnN0OwogICAgIGJvb2wgaW5SZW5k
ZXJlZENvbnRlbnQoKSBjb25zdDsKICAgICBib29sIGlzUmVuZGVyZWRDaGFyYWN0ZXIoKSBjb25z
dDsKICAgICBib29sIHJlbmRlcnNJbkRpZmZlcmVudFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uICZw
b3MpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmgJKHJldmlzaW9uIDExOTc2
KQorKysgV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1Miw3ICszNTIsNiBAQAogCXZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQoTm9kZUltcGwgKm5l
d0NoaWxkKTsJCQkJICAgLy8gRXJyb3ItY2hlY2tpbmcgZHVyaW5nIHBhcnNpbmcgdGhhdCBjaGVj
a3MgdGhlIERURAogCQogICAgIHZpcnR1YWwgaW50IG1heE9mZnNldCgpIGNvbnN0OwotICAgIGlu
dCBtYXhEZWVwT2Zmc2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgY2FyZXRNaW5PZmZzZXQo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBjYXJldE1heE9mZnNldCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgdW5zaWduZWQgY2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpIGNvbnN0OwpJbmRleDogV2Vi
Q29yZS9raHRtbC94bWwvZG9tMl9yYW5nZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a2h0bWwveG1sL2RvbTJfcmFuZ2VpbXBsLmNwcAkocmV2aXNpb24gMTE5NzYpCisrKyBXZWJDb3Jl
L2todG1sL3htbC9kb20yX3JhbmdlaW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMjksMjMg
KzEzMjksMjMgQEAKICAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdG8gc2tpcCBjZXJ0YWluIGlycmVs
ZXZhbnQgY29udGVudCBhdCB0aGUgc3RhcnQgb2YgdGhlIHNlbGVjdGlvbiwgc28gd2UgZG8gbm90
IHdpbmQgdXAgCiAgICAgLy8gd2l0aCBhIHNwdXJpb3VzICJtaXhlZCIgc3R5bGUuCiAgICAgCi0g
ICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhtX3N0YXJ0Q29udGFpbmVyLCBtX3N0YXJ0T2Zmc2V0LCBW
UF9ERUZBVUxUX0FGRklOSVRZKTsKLSAgICBpZiAocG9zLmlzTnVsbCgpKQorICAgIFZpc2libGVQ
b3NpdGlvbiB2aXNpYmxlUG9zaXRpb24obV9zdGFydENvbnRhaW5lciwgbV9zdGFydE9mZnNldCwg
VlBfREVGQVVMVF9BRkZJTklUWSk7CisgICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7
CiAgICAgLy8gaWYgdGhlIHNlbGVjdGlvbiBpcyBhIGNhcmV0LCBqdXN0IHJldHVybiB0aGUgcG9z
aXRpb24sIHNpbmNlIHRoZSBzdHlsZQogICAgIC8vIGJlaGluZCB1cyBpcyByZWxldmFudAogICAg
IGlmIChjb2xsYXBzZWQoZXhjZXB0aW9uQ29kZSkpCi0gICAgICAgIHJldHVybiBwb3MucG9zaXRp
b24oKTsKKyAgICAgICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwog
CiAgICAgLy8gaWYgdGhlIHNlbGVjdGlvbiBzdGFydHMganVzdCBiZWZvcmUgYSBwYXJhZ3JhcGgg
YnJlYWssIHNraXAgb3ZlciBpdAotICAgIGlmIChpc0VuZE9mUGFyYWdyYXBoKHBvcykpCi0gICAg
ICAgIHJldHVybiBwb3MubmV4dCgpLnBvc2l0aW9uKCkuZG93bnN0cmVhbSgpOworICAgIGlmIChp
c0VuZE9mUGFyYWdyYXBoKHZpc2libGVQb3NpdGlvbikpCisgICAgICAgIHJldHVybiB2aXNpYmxl
UG9zaXRpb24ubmV4dCgpLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpOwogCiAgICAgLy8g
b3RoZXJ3aXNlLCBtYWtlIHN1cmUgdG8gYmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBzZWxl
Y3RlZCBub2RlLAogICAgIC8vIGluc3RlYWQgb2YgcG9zc2libHkgYXQgdGhlIGVuZCBvZiB0aGUg
bGFzdCBub2RlIGJlZm9yZSB0aGUgc2VsZWN0aW9uCi0gICAgcmV0dXJuIHBvcy5wb3NpdGlvbigp
LmRvd25zdHJlYW0oKTsKKyAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50
KCkuZG93bnN0cmVhbSgpOwogfQogCiBOb2RlSW1wbCAqUmFuZ2VJbXBsOjpwYXN0RW5kTm9kZSgp
IGNvbnN0CkluZGV4OiBXZWJDb3JlL2todG1sL3htbC9kb21fcG9zaXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAJKHJldmlzaW9uIDExOTc2
KQorKysgV2ViQ29yZS9raHRtbC94bWwvZG9tX3Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgImRvbTJfcmFuZ2VpbXBsLmgiCiAjaW5jbHVkZSAi
ZG9tMl92aWV3c2ltcGwuaCIKICNpbmNsdWRlICJoZWxwZXIuaCIKKyNpbmNsdWRlICJodG1sZWRp
dGluZy5oIgogI2luY2x1ZGUgInRleHRfYWZmaW5pdHkuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3Bv
c2l0aW9uLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgpAQCAtMTcwLDcgKzE3MSw3IEBA
CiAgICAgaWYgKG8gPiAwKSB7CiAgICAgICAgIE5vZGVJbXBsICpjaGlsZCA9IG4tPmNoaWxkTm9k
ZShvIC0gMSk7CiAgICAgICAgIGlmIChjaGlsZCkgewotICAgICAgICAgICAgcmV0dXJuIFBvc2l0
aW9uKGNoaWxkLCBjaGlsZC0+bWF4RGVlcE9mZnNldCgpKTsKKyAgICAgICAgICAgIHJldHVybiBQ
b3NpdGlvbihjaGlsZCwgbWF4RGVlcE9mZnNldChjaGlsZCkpOwogICAgICAgICB9CiAgICAgICAg
IC8vIFRoZXJlIGFyZSB0d28gcmVhc29ucyBjaGlsZCBtaWdodCBiZSAwOgogICAgICAgICAvLyAg
IDEpIFRoZSBub2RlIGlzIG5vZGUgbGlrZSBhIHRleHQgbm9kZSB0aGF0IGlzIG5vdCBhbiBlbGVt
ZW50LCBhbmQgdGhlcmVmb3JlIGhhcyBubyBjaGlsZHJlbi4KQEAgLTE5Niw3ICsxOTcsNyBAQAog
ICAgIGludCBvID0gb2Zmc2V0KCk7CiAgICAgYXNzZXJ0KG8gPj0gMCk7CiAKLSAgICBpZiAobyA8
IG4tPm1heERlZXBPZmZzZXQoKSkgeworICAgIGlmIChvIDwgbWF4RGVlcE9mZnNldChuKSkgewog
ICAgICAgICBOb2RlSW1wbCAqY2hpbGQgPSBuLT5jaGlsZE5vZGUobyk7CiAgICAgICAgIGlmIChj
aGlsZCkgewogICAgICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKGNoaWxkLCAwKTsKQEAgLTIzMSw3
ICsyMzIsNyBAQAogICAgIGlmICghbikKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCi0gICAg
cmV0dXJuIG9mZnNldCgpID49IG4tPm1heERlZXBPZmZzZXQoKSAmJiBuLT5wYXJlbnQoKSA9PSAw
OworICAgIHJldHVybiBvZmZzZXQoKSA+PSBtYXhEZWVwT2Zmc2V0KG4pICYmIG4tPnBhcmVudCgp
ID09IDA7CiB9CiAKIGludCBQb3NpdGlvbjo6cmVuZGVyZWRPZmZzZXQoKSBjb25zdApAQCAtMzE2
LDE2ICszMTcsMTUgQEAKIAogLy8gdXBzdHJlYW0oKSBhbmQgZG93bnN0cmVhbSgpIHdhbnQgdG8g
cmV0dXJuIHBvc2l0aW9ucyB0aGF0IGFyZSBlaXRoZXIgaW4gYQogLy8gdGV4dCBub2RlIG9yIGF0
IGp1c3QgYmVmb3JlIGEgbm9uLXRleHQgbm9kZS4gIFRoaXMgbWV0aG9kIGNoZWNrcyBmb3IgdGhh
dC4KLXN0YXRpYyBib29sIGlzU3RyZWFtZXIgKFBvc2l0aW9uIHBvcykKK3N0YXRpYyBib29sIGlz
U3RyZWFtZXIoY29uc3QgUG9zaXRpb24gJnBvcykKIHsKLSAgICBOb2RlSW1wbCAqY3VycmVudE5v
ZGUgPSBwb3Mubm9kZSgpOwotICAgIGlmICghY3VycmVudE5vZGUpCisgICAgaWYgKHBvcy5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAotICAgIGlmIChjdXJyZW50Tm9k
ZS0+aXNBdG9taWNOb2RlKCkpCisgICAgaWYgKGlzQXRvbWljTm9kZShwb3Mubm9kZSgpKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAotICAgIHJldHVybiAocG9zLm9mZnNldCgpID09
IDApOworICAgIHJldHVybiBwb3Mub2Zmc2V0KCkgPT0gMDsKIH0KIAogLy8gQUZBSUsgbm8gb25l
IGhhcyBhIGNsZWFyLCBjb21wbGV0ZSBkZWZpbml0aW9uIGZvciB0aGlzIG1ldGhvZCBhbmQgaG93
IGl0IGlzIHVzZWQuCkBAIC0zNDAsNyArMzQwLDcgQEAKIFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0
cmVhbSgpIGNvbnN0CiB7CiAgICAgLy8gc3RhcnQgYXQgZXF1aXZhbGVudCBkZWVwIHBvc2l0aW9u
Ci0gICAgUG9zaXRpb24gc3RhcnQgPSBlcXVpdmFsZW50RGVlcFBvc2l0aW9uKCk7CisgICAgUG9z
aXRpb24gc3RhcnQgPSBWaXNpYmxlUG9zaXRpb246OmRlZXBFcXVpdmFsZW50KCp0aGlzKTsKICAg
ICBOb2RlSW1wbCAqc3RhcnROb2RlID0gc3RhcnQubm9kZSgpOwogICAgIGlmICghc3RhcnROb2Rl
KQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKQEAgLTQxNCw4ICs0MTQsNyBAQAogLy8gaW4g
YW4gYXRvbWljIG5vZGUgKGkuZS4gdGV4dCkgb3IgaXMgYXQgb2Zmc2V0IDAuCiBQb3NpdGlvbiBQ
b3NpdGlvbjo6ZG93bnN0cmVhbSgpIGNvbnN0CiB7Ci0gICAgLy8gc3RhcnQgYXQgZXF1aXZhbGVu
dCBkZWVwIHBvc2l0aW9uCi0gICAgUG9zaXRpb24gc3RhcnQgPSBlcXVpdmFsZW50RGVlcFBvc2l0
aW9uKCk7CisgICAgUG9zaXRpb24gc3RhcnQgPSBWaXNpYmxlUG9zaXRpb246OmRlZXBFcXVpdmFs
ZW50KCp0aGlzKTsKICAgICBOb2RlSW1wbCAqc3RhcnROb2RlID0gc3RhcnQubm9kZSgpOwogICAg
IGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKQEAgLTUzOCwzNiAr
NTM3LDYgQEAKICAgICByZXR1cm4gUG9zaXRpb24ocGFyZW50LCBjb25zdHJhaW5lZE9mZnNldCk7
CiB9CiAKLVBvc2l0aW9uIFBvc2l0aW9uOjplcXVpdmFsZW50RGVlcFBvc2l0aW9uKCkgY29uc3QK
LXsKLSAgICBpZiAoaXNOdWxsKCkgfHwgbm9kZSgpLT5pc0F0b21pY05vZGUoKSkKLSAgICAgICAg
cmV0dXJuICp0aGlzOwotCi0gICAgTm9kZUltcGwgKmNoaWxkID0gMDsKLSAgICBQb3NpdGlvbiBw
b3MoKnRoaXMpOwotICAgIGlmIChvZmZzZXQoKSA+PSAoaW50KW5vZGUoKS0+Y2hpbGROb2RlQ291
bnQoKSkgewotICAgICAgICBjaGlsZCA9IG5vZGUoKS0+bGFzdENoaWxkKCk7Ci0gICAgICAgIHBv
cyA9IFBvc2l0aW9uKGNoaWxkLCBjaGlsZC0+Y2FyZXRNYXhPZmZzZXQoKSk7Ci0gICAgICAgIEFT
U0VSVChjaGlsZCk7Ci0gICAgICAgIHdoaWxlICghY2hpbGQtPmlzQXRvbWljTm9kZSgpICYmIHBv
cy5ub2RlKCktPmhhc0NoaWxkTm9kZXMoKSkgewotICAgICAgICAgICAgY2hpbGQgPSBwb3Mubm9k
ZSgpLT5sYXN0Q2hpbGQoKTsKLSAgICAgICAgICAgIEFTU0VSVChjaGlsZCk7Ci0gICAgICAgICAg
ICBwb3MgPSBQb3NpdGlvbihjaGlsZCwgY2hpbGQtPmNhcmV0TWF4T2Zmc2V0KCkpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBjaGlsZCA9IG5vZGUoKS0+Y2hpbGROb2Rl
KG9mZnNldCgpKTsKLSAgICAgICAgQVNTRVJUKGNoaWxkKTsKLSAgICAgICAgcG9zID0gUG9zaXRp
b24oY2hpbGQsIDApOwotICAgICAgICB3aGlsZSAoIWNoaWxkLT5pc0F0b21pY05vZGUoKSAmJiBw
b3Mubm9kZSgpLT5oYXNDaGlsZE5vZGVzKCkpIHsKLSAgICAgICAgICAgIGNoaWxkID0gcG9zLm5v
ZGUoKS0+Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgQVNTRVJUKGNoaWxkKTsKLSAgICAgICAg
ICAgIHBvcyA9IFBvc2l0aW9uKGNoaWxkLCAwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4gcG9zOwotfQotCiBib29sIFBvc2l0aW9uOjppblJlbmRlcmVkQ29udGVudCgpIGNvbnN0CiB7
CiAgICAgaWYgKGlzTnVsbCgpKQpJbmRleDogV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuY3BwCShy
ZXZpc2lvbiAxMTk3NikKKysrIFdlYkNvcmUva2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0NzgsMTggKzE0NzgsNiBAQAogCiAvLyBGSVhNRTogU2hvdWxkbid0
IHRoZXNlIGZ1bmN0aW9ucyBiZSBpbiB0aGUgZWRpdGluZyBjb2RlPyAgQ29kZSB0aGF0IGFza3Mg
cXVlc3Rpb25zIGFib3V0IEhUTUwgaW4gdGhlIGNvcmUgRE9NIGNsYXNzCiAvLyBpcyBvYnZpb3Vz
bHkgbWlzcGxhY2VkLgotLy8gbWV0aG9kIGZvciBlZGl0aW5nIG1hZG5lc3MsIHdoaWNoIGFsbG93
cyBCUiwxIGFzIGEgcG9zaXRpb24sIHRob3VnaCB0aGF0IGlzIGluY29ycmVjdAotaW50IE5vZGVJ
bXBsOjptYXhEZWVwT2Zmc2V0KCkgY29uc3QKLXsKLSAgICBpZiAoaXNUZXh0Tm9kZSgpKQotICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dEltcGwqPih0aGlzKS0+bGVuZ3RoKCk7
Ci0gICAgICAgIAotICAgIGlmIChoYXNUYWdOYW1lKGJyVGFnKSB8fCAocmVuZGVyZXIoKSAmJiBy
ZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkpKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIHJldHVy
biBjaGlsZE5vZGVDb3VudCgpOwotfQotCiBpbnQgTm9kZUltcGw6OmNhcmV0TWluT2Zmc2V0KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gcmVuZGVyZXIoKSA/IHJlbmRlcmVyKCktPmNhcmV0TWluT2Zm
c2V0KCkgOiAwOwpAQCAtMTUyMiw3ICsxNTEwLDcgQEAKIAogYm9vbCBOb2RlSW1wbDo6aXNCbG9j
a0Zsb3dPclRhYmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVuZGVyZXIoKSAmJiAocmVuZGVy
ZXIoKS0+aXNCbG9ja0Zsb3coKSB8fCByZW5kZXJlcigpLT5pc1RhYmxlKCkpOworICAgIHJldHVy
biByZW5kZXJlcigpICYmIChyZW5kZXJlcigpLT5pc0Jsb2NrRmxvdygpIHx8IHJlbmRlcmVyKCkt
PmlzVGFibGUoKSAmJiAhcmVuZGVyZXIoKS0+aXNJbmxpbmUoKSk7CiB9CiAKIGJvb2wgTm9kZUlt
cGw6OmlzRWRpdGFibGVCbG9jaygpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2todG1sL0ZyYW1lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL0ZyYW1lLmNwcAkocmV2aXNpb24gMTE5NzYp
CisrKyBXZWJDb3JlL2todG1sL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0MCw3ICsy
NDQwLDcgQEAKIAogYm9vbCBGcmFtZTo6c2VsZWN0Q29udGVudHNPZk5vZGUoTm9kZUltcGwqIG5v
ZGUpCiB7Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWwgPSBTZWxlY3Rpb25Db250cm9sbGVy
KFBvc2l0aW9uKG5vZGUsIDApLCBraHRtbDo6RE9XTlNUUkVBTSwgUG9zaXRpb24obm9kZSwgbm9k
ZS0+bWF4RGVlcE9mZnNldCgpKSwga2h0bWw6OkRPV05TVFJFQU0pOyAgICAKKyAgICBTZWxlY3Rp
b25Db250cm9sbGVyIHNlbCA9IFNlbGVjdGlvbkNvbnRyb2xsZXIoUG9zaXRpb24obm9kZSwgMCks
IGtodG1sOjpET1dOU1RSRUFNLCBQb3NpdGlvbihub2RlLCBtYXhEZWVwT2Zmc2V0KG5vZGUpKSwg
a2h0bWw6OkRPV05TVFJFQU0pOyAgICAKICAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNl
bCkpIHsKICAgICAgICAgc2V0U2VsZWN0aW9uKHNlbCk7CiAgICAgICAgIHJldHVybiB0cnVlOwpJ
bmRleDogV2ViQ29yZS9rd3EvS1dRQWNjT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a3dxL0tXUUFjY09iamVjdC5tbQkocmV2aXNpb24gMTE5NzYpCisrKyBXZWJDb3JlL2t3cS9LV1FB
Y2NPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMTcsNyArMTAxNyw3IEBACiAgICAgaWYg
KHZpc2libGVQb3MuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBSZW5kZXJP
YmplY3QgKiBvYmogPSB2aXNpYmxlUG9zLnBvc2l0aW9uKCkubm9kZSgpLT5yZW5kZXJlcigpOwor
ICAgIFJlbmRlck9iamVjdCAqIG9iaiA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKS5ub2Rl
KCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFvYmopCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5583</attachid>
            <date>2006-01-09 21:32:13 -0800</date>
            <delta_ts>2006-01-10 21:58:04 -0800</delta_ts>
            <desc>patch</desc>
            <filename>svn-5870.txt</filename>
            <type>text/plain</type>
            <size>34261</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25f
Y29tbWFuZC5jcHAJKHJldmlzaW9uIDExOTc2KQorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Jl
cGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsNyArMzI0
LDcgQEAKICAgICAgICAgLy8gSWYgdGhlIGRlc2lyZWRTdHlsZSBpcyBub24temVybyBsZW5ndGgs
IHRoYXQgbWVhbnMgdGhlIGN1cnJlbnQgc3R5bGUgZGlmZmVycwogICAgICAgICAvLyBmcm9tIHRo
ZSBkZXNpcmVkIGJ5IHRoZSBzdHlsZXMgcmVtYWluaW5nIGluIHRoZSBkZXNpcmVkU3R5bGUgZGVj
bGFyYXRpb24uCiAgICAgICAgIGlmIChkZXNpcmVkU3R5bGUtPmxlbmd0aCgpID4gMCkKLQkgICAg
YXBwbHlTdHlsZShkZXNpcmVkU3R5bGUsIFBvc2l0aW9uKG5vZGUsIDApLCBQb3NpdGlvbihub2Rl
LCBub2RlLT5tYXhEZWVwT2Zmc2V0KCkpKTsKKwkgICAgYXBwbHlTdHlsZShkZXNpcmVkU3R5bGUs
IFBvc2l0aW9uKG5vZGUsIDApLCBQb3NpdGlvbihub2RlLCBtYXhEZWVwT2Zmc2V0KG5vZGUpKSk7
CiAgICAgfQogfQogCkBAIC03OTQsMTAgKzc5NCw5IEBACiAgICAgICAgICAgICBOb2RlSW1wbCAq
bm9kZSA9IGJleW9uZEVuZE5vZGU7CiAgICAgICAgICAgICBOb2RlSW1wbCAqcmVmTm9kZSA9IG1f
bGFzdE5vZGVJbnNlcnRlZC5nZXQoKTsKICAgICAgICAgICAgIHdoaWxlIChub2RlKSB7Ci0gICAg
ICAgICAgICAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0g
ICAgICAgICAgICAgICAgLy8gU3RvcCBhdCB0aGUgZmlyc3QgdGFibGUgb3IgYmxvY2suCi0gICAg
ICAgICAgICAgICAgaWYgKHJlbmRlcmVyICYmIChyZW5kZXJlci0+aXNCbG9ja0Zsb3coKSB8fCBy
ZW5kZXJlci0+aXNUYWJsZSgpKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+aXNCbG9ja0Zs
b3dPckJsb2NrVGFibGUoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIE5vZGVJbXBsICpuZXh0ID0gbm9kZS0+bmV4dFNp
YmxpbmcoKTsKICAgICAgICAgICAgICAgICBibG9ja3MuYXBwZW5kKG5vZGUtPmVuY2xvc2luZ0Js
b2NrRmxvd0VsZW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgY29tcHV0ZUFuZFN0b3JlTm9kZURl
c2lyZWRTdHlsZShub2RlLCBzdHlsZXMpOwpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zp
c2libGVfcG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvdmlz
aWJsZV9wb3NpdGlvbi5oCShyZXZpc2lvbiAxMTk3NikKKysrIFdlYkNvcmUva2h0bWwvZWRpdGlu
Zy92aXNpYmxlX3Bvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDEyICs3MSw5IEBACiAg
ICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX2RlZXBQb3NpdGlvbi5pc051bGwoKTsg
fQogICAgIGJvb2wgaXNOb3ROdWxsKCkgY29uc3QgeyByZXR1cm4gbV9kZWVwUG9zaXRpb24uaXNO
b3ROdWxsKCk7IH0KIAotICAgIFBvc2l0aW9uIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gcmFu
Z2VDb21wbGlhbnRFcXVpdmFsZW50KG1fZGVlcFBvc2l0aW9uKTsgfQogICAgIFBvc2l0aW9uIGRl
ZXBFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4gbV9kZWVwUG9zaXRpb247IH0KICAgICBFQWZm
aW5pdHkgYWZmaW5pdHkoKSBjb25zdCB7IGFzc2VydChtX2FmZmluaXR5ID09IFVQU1RSRUFNIHx8
IG1fYWZmaW5pdHkgPT0gRE9XTlNUUkVBTSk7IHJldHVybiBtX2FmZmluaXR5OyB9CiAgICAgdm9p
ZCBzZXRBZmZpbml0eShFQWZmaW5pdHkgYWZmaW5pdHkpIHsgbV9hZmZpbml0eSA9IGFmZmluaXR5
OyB9Ci0gICAgCi0gICAgUG9zaXRpb24gZG93bnN0cmVhbURlZXBFcXVpdmFsZW50KCkgY29uc3Q7
CiAKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYSwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICZiKTsKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFZpc2libGVQb3NpdGlvbiAmYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZiKTsKQEAgLTkz
LDYgKzkwLDggQEAKICAgICBRQ2hhciBjaGFyYWN0ZXIoKSBjb25zdDsKICAgICAKICAgICB2b2lk
IGRlYnVnUG9zaXRpb24oY29uc3QgY2hhciAqbXNnID0gIiIpIGNvbnN0OworICAgIAorICAgIHN0
YXRpYyBQb3NpdGlvbiBkZWVwRXF1aXZhbGVudChjb25zdCBQb3NpdGlvbiAmKTsKIAogI2lmbmRl
ZiBOREVCVUcKICAgICB2b2lkIGZvcm1hdEZvckRlYnVnZ2VyKGNoYXIgKmJ1ZmZlciwgdW5zaWdu
ZWQgbGVuZ3RoKSBjb25zdDsKQEAgLTEwMSwxNCArMTAwLDggQEAKICAgICAKIHByaXZhdGU6CiAg
ICAgdm9pZCBpbml0KGNvbnN0IFBvc2l0aW9uICYsIEVBZmZpbml0eSk7Ci0gICAgdm9pZCBpbml0
VXBzdHJlYW0oY29uc3QgUG9zaXRpb24gJik7Ci0gICAgdm9pZCBpbml0RG93bnN0cmVhbShjb25z
dCBQb3NpdGlvbiAmKTsKIAotICAgIHN0YXRpYyBQb3NpdGlvbiBkZWVwRXF1aXZhbGVudChjb25z
dCBQb3NpdGlvbiAmKTsKLSAgICBzdGF0aWMgUG9zaXRpb24gcmFuZ2VDb21wbGlhbnRFcXVpdmFs
ZW50KGNvbnN0IFBvc2l0aW9uICYpOwotCiAgICAgc3RhdGljIGludCBtYXhPZmZzZXQoY29uc3Qg
Tm9kZUltcGwgKik7Ci0gICAgc3RhdGljIGJvb2wgaXNBdG9taWNOb2RlKGNvbnN0IE5vZGVJbXBs
ICopOwogICAgIAogICAgIHN0YXRpYyBQb3NpdGlvbiBwcmV2aW91c1Zpc2libGVQb3NpdGlvbihj
b25zdCBQb3NpdGlvbiAmKTsKICAgICBzdGF0aWMgUG9zaXRpb24gbmV4dFZpc2libGVQb3NpdGlv
bihjb25zdCBQb3NpdGlvbiAmKTsKQEAgLTEyOSw5ICsxMjIsOSBAQAogICAgIHJldHVybiAhKGEg
PT0gYik7CiB9CiAKLVBhc3NSZWZQdHI8RE9NOjpSYW5nZUltcGw+IG1ha2VSYW5nZShjb25zdCBW
aXNpYmxlUG9zaXRpb24gJnN0YXJ0LCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJmVuZCk7Ci1ib29s
IHNldFN0YXJ0KERPTTo6UmFuZ2VJbXBsICosIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmc3RhcnQp
OwotYm9vbCBzZXRFbmQoRE9NOjpSYW5nZUltcGwgKiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZz
dGFydCk7CitQYXNzUmVmUHRyPERPTTo6UmFuZ2VJbXBsPiBtYWtlUmFuZ2UoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKK2Jvb2wgc2V0U3RhcnQoRE9N
OjpSYW5nZUltcGwgKiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOworYm9vbCBzZXRFbmQoRE9N
OjpSYW5nZUltcGwgKiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOwogVmlzaWJsZVBvc2l0aW9u
IHN0YXJ0VmlzaWJsZVBvc2l0aW9uKGNvbnN0IERPTTo6UmFuZ2VJbXBsICosIEVBZmZpbml0eSk7
CiBWaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJsZVBvc2l0aW9uKGNvbnN0IERPTTo6UmFuZ2VJbXBs
ICosIEVBZmZpbml0eSk7CiAKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9hcHBseV9zdHls
ZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvYXBwbHlf
c3R5bGVfY29tbWFuZC5jcHAJKHJldmlzaW9uIDExOTc2KQorKysgV2ViQ29yZS9raHRtbC9lZGl0
aW5nL2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDU1LDcgKzEw
NTUsNyBAQAogICAgIE5vZGVJbXBsICpzdGFydE5vZGUgPSBzdGFydC5ub2RlKCk7CiAgICAgaW50
IHN0YXJ0T2Zmc2V0ID0gc3RhcnQub2Zmc2V0KCk7CiAKLSAgICBpZiAoc3RhcnQubm9kZSgpLT5p
c0F0b21pY05vZGUoKSkgeworICAgIGlmIChpc0F0b21pY05vZGUoc3RhcnQubm9kZSgpKSkgewog
ICAgICAgICBpZiAoc3RhcnQub2Zmc2V0KCkgIT0gMCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtMTA5NSw3ICsxMDk1LDcgQEAKICAgICBOb2RlSW1wbCAqZW5kTm9kZSA9IGVuZC5u
b2RlKCk7CiAgICAgaW50IGVuZE9mZnNldCA9IGVuZC5vZmZzZXQoKTsKIAotICAgIGlmIChlbmRO
b2RlLT5pc0F0b21pY05vZGUoKSkgeworICAgIGlmIChpc0F0b21pY05vZGUoZW5kTm9kZSkpIHsK
ICAgICAgICAgaWYgKGVuZE9mZnNldCA8IGVuZE5vZGUtPmNhcmV0TWF4T2Zmc2V0KCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNl
cnRfbGluZV9icmVha19jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL2Vk
aXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAJKHJldmlzaW9uIDExOTc2KQorKysg
V2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzEsNyArMTcxLDcgQEAKICAgICAKICAgICBpZiAodHlwaW5nU3R5bGUg
JiYgdHlwaW5nU3R5bGUtPmxlbmd0aCgpID4gMCkgewogICAgICAgICBTZWxlY3Rpb25Db250cm9s
bGVyIHNlbGVjdGlvbkJlZm9yZVN0eWxlID0gZW5kaW5nU2VsZWN0aW9uKCk7Ci0gICAgICAgIGFw
cGx5U3R5bGUodHlwaW5nU3R5bGUsIFBvc2l0aW9uKG5vZGVUb0luc2VydCwgMCksIFBvc2l0aW9u
KG5vZGVUb0luc2VydCwgbm9kZVRvSW5zZXJ0LT5tYXhEZWVwT2Zmc2V0KCkpKTsKKyAgICAgICAg
YXBwbHlTdHlsZSh0eXBpbmdTdHlsZSwgUG9zaXRpb24obm9kZVRvSW5zZXJ0LCAwKSwgUG9zaXRp
b24obm9kZVRvSW5zZXJ0LCBtYXhEZWVwT2Zmc2V0KG5vZGVUb0luc2VydCkpKTsKICAgICAgICAg
c2V0RW5kaW5nU2VsZWN0aW9uKHNlbGVjdGlvbkJlZm9yZVN0eWxlKTsKICAgICB9CiAKSW5kZXg6
IFdlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5jcHAJKHJldmlzaW9uIDEx
OTc2KQorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAidmlzaWJsZV9wb3NpdGlvbi5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKLQorI2lu
Y2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAi
cmVuZGVyaW5nL3JlbmRlcl9saW5lLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9vYmpl
Y3QuaCIKQEAgLTE1NywxNSArMTU3LDYgQEAKICAgICBQb3NpdGlvbiBkb3duc3RyZWFtVGVzdCA9
IHRlc3QuZG93bnN0cmVhbSgpOwogICAgIGJvb2wgYWNjZXB0QW55VmlzaWJsZVBvc2l0aW9uID0g
IWlzQ2FuZGlkYXRlKHRlc3QpOwogCi0gICAgLy8gTk9URTogVGhlIGZpcnN0IHBvc2l0aW9uIGV4
YW1pbmVkIGlzIHRoZSBkZWVwRXF1aXZhbGVudCBvZiBwb3MuICBUaGlzLAotICAgIC8vIG9mIGNv
dXJzZSwgaXMgb2Z0ZW4gYWZ0ZXIgcG9zIGluIHRoZSBET00uICBTb21lIGNhcmUgaXMgdGFrZW4g
dG8gbm90IHJldHVybgotICAgIC8vIGEgcG9zaXRpb24gbGF0ZXIgdGhhbiBwb3MsIGJ1dCBpdCBp
cyBjbGVhcmx5IHBvc3NpYmxlIHRvIHJldHVybiBwb3MKLSAgICAvLyBpdHNlbGYgKGlmIGl0IGlz
IGEgY2FuZGlkYXRlKSB3aGVuIGl0ZXJhdGluZyBiYWNrIGZyb20gYSBkZWVwRXF1aXZhbGVudAot
ICAgIC8vIHRoYXQgaXMgbm90IGEgY2FuZGlkYXRlLiAgVGhhdCBpcyB3cm9uZyEgIEhvd2V2ZXIs
IG91ciBjbGllbnRzIHNlZW0gdG8KLSAgICAvLyBsaWtlIGl0LiAgR290dGEgbG9zZSB0aG9zZSBj
bGllbnRzISAoaW5pdERvd25zdHJlYW0gYW5kIGluaXRVcHN0cmVhbSkKLSAgICAKLSAgICAvLyBI
b3cgYWJvdXQgImlmIGlzQ2FuZGlkYXRlKHBvcykgYmFjayB1cCB0byB0aGUgcHJldmlvdXMgY2Fu
ZGlkYXRlLCBlbHNlCi0gICAgLy8gYmFjayB1cCB0byB0aGUgc2Vjb25kIHByZXZpb3VzIGNhbmRp
ZGF0ZSI/CiAgICAgUG9zaXRpb24gY3VycmVudCA9IHRlc3Q7CiAgICAgd2hpbGUgKCFjdXJyZW50
LmF0U3RhcnQoKSkgewogICAgICAgICBjdXJyZW50ID0gY3VycmVudC5wcmV2aW91cyhVc2luZ0Nv
bXBvc2VkQ2hhcmFjdGVycyk7CkBAIC0yMjIsNyArMjEzLDcgQEAKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgaWYgKHJlbmRlcmVyLT5pc1JlcGxhY2VkKCkpCi0gICAgICAgIHJldHVybiBw
b3Mub2Zmc2V0KCkgPT0gMCB8fCBwb3Mub2Zmc2V0KCkgPT0gMTsKKyAgICAgICAgcmV0dXJuIHBv
cy5vZmZzZXQoKSA9PSAwIHx8IHBvcy5vZmZzZXQoKSA9PSBtYXhEZWVwT2Zmc2V0KHBvcy5ub2Rl
KCkpOwogCiAgICAgaWYgKHJlbmRlcmVyLT5pc0JSKCkpIHsKICAgICAgICAgaWYgKHBvcy5vZmZz
ZXQoKSA9PSAwKSB7CkBAIC0yMzcsMjIgKzIyOCwxOSBAQAogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIAorICAgIC8vIFRydWUgaWYgYXQgYSByZW5kZXJlZCBvZmZzZXQgaW5zaWRl
IGEgdGV4dCBub2RlCiAgICAgaWYgKHJlbmRlcmVyLT5pc1RleHQoKSkgewogICAgICAgICBSZW5k
ZXJUZXh0ICp0ZXh0UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KHJlbmRlcmVy
KTsKICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94ICpib3ggPSB0ZXh0UmVuZGVyZXItPmZpcnN0
VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewogICAgICAgICAgICAg
aWYgKHBvcy5vZmZzZXQoKSA+PSBib3gtPm1fc3RhcnQgJiYgcG9zLm9mZnNldCgpIDw9IGJveC0+
bV9zdGFydCArIGJveC0+bV9sZW4pIHsKLSAgICAgICAgICAgICAgICAvLyByZXR1cm4gdHJ1ZSBp
ZiBpbiBhIHRleHQgbm9kZQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGlmIChyZW5kZXJlci0+aXNCbG9ja0Zs
b3coKSAmJgotICAgICAgICFoYXNSZW5kZXJlZENoaWxkcmVuV2l0aEhlaWdodChyZW5kZXJlcikg
JiYKLSAgICAgICAocmVuZGVyZXItPmhlaWdodCgpIHx8IHBvcy5ub2RlKCktPmhhc1RhZ05hbWUo
Ym9keVRhZykpKSB7Ci0gICAgICAgIC8vIHJldHVybiB0cnVlIGZvciBvZmZzZXQgMCBpbnRvIHJl
bmRlcmVkIGJsb2NrcyB0aGF0IGFyZSBlbXB0eSBvZiByZW5kZXJlZCBraWRzLCBidXQgaGF2ZSBh
IGhlaWdodAotICAgICAgICByZXR1cm4gcG9zLm9mZnNldCgpID09IDA7Ci0gICAgfQorICAgIGlm
IChyZW5kZXJlci0+aXNCbG9ja0Zsb3coKSAmJiAhaGFzUmVuZGVyZWRDaGlsZHJlbldpdGhIZWln
aHQocmVuZGVyZXIpICYmCisgICAgICAgKHJlbmRlcmVyLT5oZWlnaHQoKSB8fCBwb3Mubm9kZSgp
LT5oYXNUYWdOYW1lKGJvZHlUYWcpKSkKKyAgICAgICByZXR1cm4gcG9zLm9mZnNldCgpID09IDA7
CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjY1LDcgKzI1Myw3IEBACiAgICAgaWYg
KCFub2RlKQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKICAgICAKLSAgICBpZiAoaXNBdG9t
aWNOb2RlKG5vZGUpKQorICAgIGlmIChpc0NhbmRpZGF0ZShwb3MpIHx8IGlzQXRvbWljTm9kZShu
b2RlKSkKICAgICAgICAgcmV0dXJuIHBvczsKIAogICAgIGlmIChvZmZzZXQgPj0gKGludClub2Rl
LT5jaGlsZE5vZGVDb3VudCgpKSB7CkBAIC0yNzQsMTMgKzI2MiwxMyBAQAogICAgICAgICAgICAg
aWYgKCFjaGlsZCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIG5vZGUgPSBj
aGlsZDsKLSAgICAgICAgfSB3aGlsZSAoIWlzQXRvbWljTm9kZShub2RlKSk7Ci0gICAgICAgIHJl
dHVybiBQb3NpdGlvbihub2RlLCBub2RlLT5jYXJldE1heE9mZnNldCgpKTsKKyAgICAgICAgfSB3
aGlsZSAoIWlzQ2FuZGlkYXRlKFBvc2l0aW9uKG5vZGUsIG1heERlZXBPZmZzZXQobm9kZSkpKSAm
JiAhaXNBdG9taWNOb2RlKG5vZGUpKTsKKyAgICAgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUsIG1h
eERlZXBPZmZzZXQobm9kZSkpOwogICAgIH0KICAgICAKICAgICBub2RlID0gbm9kZS0+Y2hpbGRO
b2RlKG9mZnNldCk7CiAgICAgQVNTRVJUKG5vZGUpOwotICAgIHdoaWxlICghaXNBdG9taWNOb2Rl
KG5vZGUpKSB7CisgICAgd2hpbGUgKCFpc0NhbmRpZGF0ZShQb3NpdGlvbihub2RlLCAwKSkgJiYg
IWlzQXRvbWljTm9kZShub2RlKSkgewogICAgICAgICBOb2RlSW1wbCAqY2hpbGQgPSBub2RlLT5m
aXJzdENoaWxkKCk7CiAgICAgICAgIGlmICghY2hpbGQpCiAgICAgICAgICAgICBicmVhazsKQEAg
LTI4OSw1NyArMjc3LDE0IEBACiAgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUsIDApOwogfQogCi1Q
b3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmRvd25zdHJlYW1EZWVwRXF1aXZhbGVudCgpIGNvbnN0
Ci17Ci0gICAgUG9zaXRpb24gcG9zID0gbV9kZWVwUG9zaXRpb247Ci0gICAgCi0gICAgaWYgKHBv
cy5pc051bGwoKSB8fCBwb3MuYXRFbmQoKSkKLSAgICAgICAgcmV0dXJuIHBvczsKLQotICAgIFBv
c2l0aW9uIGRvd25zdHJlYW1UZXN0ID0gcG9zLmRvd25zdHJlYW0oKTsKLQotICAgIFBvc2l0aW9u
IGN1cnJlbnQgPSBwb3M7Ci0gICAgd2hpbGUgKCFjdXJyZW50LmF0RW5kKCkpIHsKLSAgICAgICAg
Y3VycmVudCA9IGN1cnJlbnQubmV4dChVc2luZ0NvbXBvc2VkQ2hhcmFjdGVycyk7Ci0gICAgICAg
IGlmIChpc0NhbmRpZGF0ZShjdXJyZW50KSkgewotICAgICAgICAgICAgaWYgKGRvd25zdHJlYW1U
ZXN0ICE9IGN1cnJlbnQuZG93bnN0cmVhbSgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgcG9zID0gY3VycmVudDsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gcG9zOwotfQotCi1Qb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OnJhbmdlQ29tcGxpYW50RXF1
aXZhbGVudChjb25zdCBQb3NpdGlvbiAmcG9zKQotewotICAgIE5vZGVJbXBsICpub2RlID0gcG9z
Lm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBQb3NpdGlvbigpOwotICAg
IAotICAgIC8vIEZJWE1FOiBUaGlzIGNsYW1wcyBvdXQtb2YtcmFuZ2UgdmFsdWVzLgotICAgIC8v
IEluc3RlYWQgd2Ugc2hvdWxkIHByb2JhYmx5IGFzc2VydCwgYW5kIG5vdCB1c2Ugc3VjaCB2YWx1
ZXMuCi0KLSAgICBpbnQgb2Zmc2V0ID0gcG9zLm9mZnNldCgpOwotICAgIGlmICghb2Zmc2V0SW5D
aGFyYWN0ZXJzKG5vZGUtPm5vZGVUeXBlKCkpICYmIGlzQXRvbWljTm9kZShub2RlKSAmJiBvZmZz
ZXQgPiAwKQotICAgICAgICByZXR1cm4gUG9zaXRpb24obm9kZS0+cGFyZW50Tm9kZSgpLCBub2Rl
LT5ub2RlSW5kZXgoKSArIDEpOwotCi0gICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUsIGtNYXgoMCwg
a01pbihvZmZzZXQsIG1heE9mZnNldChub2RlKSkpKTsKLX0KLQogaW50IFZpc2libGVQb3NpdGlv
bjo6bWF4T2Zmc2V0KGNvbnN0IE5vZGVJbXBsICpub2RlKQogewogICAgIHJldHVybiBvZmZzZXRJ
bkNoYXJhY3RlcnMobm9kZS0+bm9kZVR5cGUoKSkgPyAoaW50KXN0YXRpY19jYXN0PGNvbnN0IENo
YXJhY3RlckRhdGFJbXBsICo+KG5vZGUpLT5sZW5ndGgoKSA6IChpbnQpbm9kZS0+Y2hpbGROb2Rl
Q291bnQoKTsKIH0KIAotYm9vbCBWaXNpYmxlUG9zaXRpb246OmlzQXRvbWljTm9kZShjb25zdCBO
b2RlSW1wbCAqbm9kZSkKLXsKLSAgICByZXR1cm4gbm9kZSAmJiAoIW5vZGUtPmhhc0NoaWxkTm9k
ZXMoKSB8fCAobm9kZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpICYmIG5vZGUtPnJlbmRlcmVyKCkg
JiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgpKSk7Ci19Ci0KIFFDaGFyIFZpc2libGVQ
b3NpdGlvbjo6Y2hhcmFjdGVyKCkgY29uc3QKIHsKLSAgICBQb3NpdGlvbiBwb3MgPSBwb3NpdGlv
bigpOworICAgIFBvc2l0aW9uIHBvcyA9IG1fZGVlcFBvc2l0aW9uOwogICAgIE5vZGVJbXBsICpu
b2RlID0gcG9zLm5vZGUoKTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzVGV4dE5vZGUoKSkg
ewogICAgICAgICByZXR1cm4gUUNoYXIoKTsKQEAgLTM5Myw4ICszMzgsOCBAQAogCiBQYXNzUmVm
UHRyPFJhbmdlSW1wbD4gbWFrZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmc3RhcnQsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiAmZW5kKQogewotICAgIFBvc2l0aW9uIHMgPSBzdGFydC5wb3Np
dGlvbigpOwotICAgIFBvc2l0aW9uIGUgPSBlbmQucG9zaXRpb24oKTsKKyAgICBQb3NpdGlvbiBz
ID0gc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5lcXVpdmFsZW50UmFuZ2VDb21wbGlhbnRQb3NpdGlv
bigpOworICAgIFBvc2l0aW9uIGUgPSBlbmQuZGVlcEVxdWl2YWxlbnQoKS5lcXVpdmFsZW50UmFu
Z2VDb21wbGlhbnRQb3NpdGlvbigpOwogICAgIHJldHVybiBuZXcgUmFuZ2VJbXBsKHMubm9kZSgp
LT5nZXREb2N1bWVudCgpLCBzLm5vZGUoKSwgcy5vZmZzZXQoKSwgZS5ub2RlKCksIGUub2Zmc2V0
KCkpOwogfQogCkBAIC00MTAsNDkgKzM1NSw1NSBAQAogICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24oci0+ZW5kQ29udGFpbmVyKGV4Y2VwdGlvbiksIHItPmVuZE9mZnNldChleGNlcHRpb24pLCBh
ZmZpbml0eSk7CiB9CiAKLWJvb2wgc2V0U3RhcnQoUmFuZ2VJbXBsICpyLCBjb25zdCBWaXNpYmxl
UG9zaXRpb24gJmMpCitib29sIHNldFN0YXJ0KFJhbmdlSW1wbCAqciwgY29uc3QgVmlzaWJsZVBv
c2l0aW9uICZ2aXNpYmxlUG9zaXRpb24pCiB7CiAgICAgaWYgKCFyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgUG9zaXRpb24gcCA9IGMucG9zaXRpb24oKTsKKyAgICBQb3NpdGlvbiBwID0g
dmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZXF1aXZhbGVudFJhbmdlQ29tcGxpYW50
UG9zaXRpb24oKTsKICAgICBpbnQgY29kZSA9IDA7CiAgICAgci0+c2V0U3RhcnQocC5ub2RlKCks
IHAub2Zmc2V0KCksIGNvZGUpOwogICAgIHJldHVybiBjb2RlID09IDA7CiB9CiAKLWJvb2wgc2V0
RW5kKFJhbmdlSW1wbCAqciwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQorYm9vbCBzZXRFbmQo
UmFuZ2VJbXBsICpyLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQb3NpdGlvbikKIHsK
ICAgICBpZiAoIXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBQb3NpdGlvbiBwID0gYy5w
b3NpdGlvbigpOworICAgIFBvc2l0aW9uIHAgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxl
bnQoKS5lcXVpdmFsZW50UmFuZ2VDb21wbGlhbnRQb3NpdGlvbigpOwogICAgIGludCBjb2RlID0g
MDsKICAgICByLT5zZXRFbmQocC5ub2RlKCksIHAub2Zmc2V0KCksIGNvZGUpOwogICAgIHJldHVy
biBjb2RlID09IDA7CiB9CiAKLURPTTo6Tm9kZUltcGwgKmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1l
bnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2cCkKK0RPTTo6Tm9kZUltcGwgKmVuY2xvc2luZ0Js
b2NrRmxvd0VsZW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9zaXRpb24pCiB7
Ci0gICAgaWYgKHZwLmlzTnVsbCgpKQorICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkp
CiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcmV0dXJuIHZwLnBvc2l0aW9uKCkubm9kZSgp
LT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7CisgICAgcmV0dXJuIHZpc2libGVQb3NpdGlv
bi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOwog
fQogCi1ib29sIGlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJsZVBvc2l0
aW9uICZwb3MsIGNvbnN0IE5vZGVJbXBsICpub2RlKQorYm9vbCBpc0ZpcnN0VmlzaWJsZVBvc2l0
aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uLCBjb25zdCBO
b2RlSW1wbCAqbm9kZSkKIHsKLSAgICBpZiAocG9zLmlzTnVsbCgpKQorICAgIGlmICh2aXNpYmxl
UG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAo
IXZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNBbmNlc3Rvcihub2Rl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24g
cHJldmlvdXMgPSBwb3MucHJldmlvdXMoKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMg
PSB2aXNpYmxlUG9zaXRpb24ucHJldmlvdXMoKTsKICAgICByZXR1cm4gcHJldmlvdXMuaXNOdWxs
KCkgfHwgIXByZXZpb3VzLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0FuY2VzdG9yKG5vZGUp
OwogfQogCi1ib29sIGlzTGFzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9z
aXRpb24gJnBvcywgY29uc3QgTm9kZUltcGwgKm5vZGUpCitib29sIGlzTGFzdFZpc2libGVQb3Np
dGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQb3NpdGlvbiwgY29uc3Qg
Tm9kZUltcGwgKm5vZGUpCiB7Ci0gICAgaWYgKHBvcy5pc051bGwoKSkKKyAgICBpZiAodmlzaWJs
ZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAg
IFZpc2libGVQb3NpdGlvbiBuZXh0ID0gcG9zLm5leHQoKTsKKyAgICAKKyAgICBpZiAoIXZpc2li
bGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNBbmNlc3Rvcihub2RlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIAorICAgIFZpc2libGVQb3NpdGlv
biBuZXh0ID0gdmlzaWJsZVBvc2l0aW9uLm5leHQoKTsKICAgICByZXR1cm4gbmV4dC5pc051bGwo
KSB8fCAhbmV4dC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNBbmNlc3Rvcihub2RlKTsKIH0K
IApJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCShyZXZpc2lvbiAxMTk3
NikKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg5LDYgKzg5LDI4IEBACiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKKy8vIEF0b21pYyBt
ZWFucyB0aGF0IHRoZSBjb250ZW50cyBvZiB0aGUgbm9kZSBzaG91bGQgYmUgaWdub3JlZCBmb3Ig
dGhlIHB1cnBvc2VzIG9mIGVkaXRpbmcuCitib29sIGlzQXRvbWljTm9kZShjb25zdCBOb2RlSW1w
bCAqbm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZSAmJiAoIW5vZGUtPmhhc0NoaWxkTm9kZXMoKSB8
fCBub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzV2lkZ2V0KCkpOworfQor
CitpbnQgbWF4RGVlcE9mZnNldChjb25zdCBOb2RlSW1wbCAqbm9kZSkKK3sKKyAgICBpZiAobm9k
ZS0+aXNUZXh0Tm9kZSgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dElt
cGwqPihub2RlKS0+bGVuZ3RoKCk7CisgICAgICAgIAorICAgIGlmIChub2RlLT5oYXNDaGlsZE5v
ZGVzKCkpCisgICAgICAgIHJldHVybiBub2RlLT5jaGlsZE5vZGVDb3VudCgpOworICAgIAorICAg
IFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIC8vIEFsbG93
cyBbYnIsIDFdIGFzIGEgcG9zaXRpb24sIHRob3VnaCB0aGF0IGlzIGluY29ycmVjdAorICAgIGlm
IChub2RlLT5oYXNUYWdOYW1lKGJyVGFnKSB8fCAocmVuZGVyZXIgJiYgKHJlbmRlcmVyLT5pc1Jl
cGxhY2VkKCkgfHwgcmVuZGVyZXItPmlzV2lkZ2V0KCkpKSkKKyAgICAgICAgcmV0dXJuIDE7CisK
KyAgICByZXR1cm4gMDsKK30KKwogdm9pZCByZWJhbGFuY2VXaGl0ZXNwYWNlSW5UZXh0Tm9kZShO
b2RlSW1wbCAqbm9kZSwgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQog
ewogICAgIHN0YXRpYyBRUmVnRXhwIG5vblJlZ3VsYXJXaGl0ZXNwYWNlKCJbXHhhMFxuXSIpOwpA
QCAtMjM2LDcgKzI1OCw4IEBACiBib29sIGlzTGFzdFZpc2libGVQb3NpdGlvbkluU3BlY2lhbEVs
ZW1lbnQoY29uc3QgUG9zaXRpb24mIHBvcykKIHsKICAgICAvLyBtYWtlIHN1cmUgdG8gZ2V0IGEg
cmFuZ2UtY29tcGxpYW50IHZlcnNpb24gb2YgdGhlIHBvc2l0aW9uCi0gICAgUG9zaXRpb24gcmFu
Z2VQb3MgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBET1dOU1RSRUFNKS5wb3NpdGlvbigpOworICAg
IC8vIEZJWE1FOiByYW5nZVBvcyBpc24ndCBiZWluZyB1c2VkIHRvIGNyZWF0ZSBET00gUmFuZ2Vz
LCBzbyB3aHkgZG9lcyBpdCBuZWVkIHRvIGJlIHJhbmdlIGNvbXBsaWFudD8KKyAgICBQb3NpdGlv
biByYW5nZVBvcyA9IFZpc2libGVQb3NpdGlvbihwb3MsIERPV05TVFJFQU0pLmRlZXBFcXVpdmFs
ZW50KCkuZXF1aXZhbGVudFJhbmdlQ29tcGxpYW50UG9zaXRpb24oKTsKIAogICAgIFZpc2libGVQ
b3NpdGlvbiB2UG9zID0gVmlzaWJsZVBvc2l0aW9uKHJhbmdlUG9zLCBET1dOU1RSRUFNKTsKIApA
QCAtMjYyLDcgKzI4NSw4IEBACiAgICAgQVNTRVJUKGlzTGFzdFZpc2libGVQb3NpdGlvbkluU3Bl
Y2lhbEVsZW1lbnQocG9zKSk7CiAKICAgICAvLyBtYWtlIHN1cmUgdG8gZ2V0IGEgcmFuZ2UtY29t
cGxpYW50IHZlcnNpb24gb2YgdGhlIHBvc2l0aW9uCi0gICAgUG9zaXRpb24gcmFuZ2VQb3MgPSBW
aXNpYmxlUG9zaXRpb24ocG9zLCBET1dOU1RSRUFNKS5wb3NpdGlvbigpOworICAgIC8vIEZJWE1F
OiByYW5nZVBvcyBpc24ndCBiZWluZyB1c2VkIHRvIGNyZWF0ZSBET00gUmFuZ2VzLCBzbyB3aHkg
ZG9lcyBpdCBuZWVkIHRvIGJlIHJhbmdlIGNvbXBsaWFudD8KKyAgICBQb3NpdGlvbiByYW5nZVBv
cyA9IFZpc2libGVQb3NpdGlvbihwb3MsIERPV05TVFJFQU0pLmRlZXBFcXVpdmFsZW50KCkuZXF1
aXZhbGVudFJhbmdlQ29tcGxpYW50UG9zaXRpb24oKTsKIAogICAgIFZpc2libGVQb3NpdGlvbiB2
UG9zID0gVmlzaWJsZVBvc2l0aW9uKHJhbmdlUG9zLCBET1dOU1RSRUFNKTsKIApJbmRleDogV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNpb24gMTE5NzYpCisrKyBX
ZWJDb3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1OSw5ICszNTksOSBAQAogICAgIHJldHVybiBwLmlzTm90TnVsbCgpICYmIHAgPT0gZW5kT2ZM
aW5lKHApOwogfQogCi1WaXNpYmxlUG9zaXRpb24gcHJldmlvdXNMaW5lUG9zaXRpb24oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICZjLCBpbnQgeCkKK1Zpc2libGVQb3NpdGlvbiBwcmV2aW91c0xpbmVQ
b3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQb3NpdGlvbiwgaW50IHgpCiB7
Ci0gICAgUG9zaXRpb24gcCA9IGMuYWZmaW5pdHkoKSA9PSBVUFNUUkVBTSA/IGMuZGVlcEVxdWl2
YWxlbnQoKSA6IGMuZG93bnN0cmVhbURlZXBFcXVpdmFsZW50KCk7CisgICAgUG9zaXRpb24gcCA9
IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwogICAgIE5vZGVJbXBsICpub2RlID0g
cC5ub2RlKCk7CiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5nZXREb2N1bWVudCgpKQogICAgICAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CkBAIC0zNzQsNyArMzc0LDcgQEAKIAogICAgIFJl
bmRlckJsb2NrICpjb250YWluaW5nQmxvY2sgPSAwOwogICAgIFJvb3RJbmxpbmVCb3ggKnJvb3Qg
PSAwOwotICAgIElubGluZUJveCAqYm94ID0gcmVuZGVyZXItPmlubGluZUJveChwLm9mZnNldCgp
LCBjLmFmZmluaXR5KCkpOworICAgIElubGluZUJveCAqYm94ID0gcmVuZGVyZXItPmlubGluZUJv
eChwLm9mZnNldCgpLCB2aXNpYmxlUG9zaXRpb24uYWZmaW5pdHkoKSk7CiAgICAgaWYgKGJveCkg
ewogICAgICAgICByb290ID0gYm94LT5yb290KCktPnByZXZSb290Qm94KCk7CiAgICAgICAgIGlm
IChyb290KQpAQCAtNDIyLDkgKzQyMiw5IEBACiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihu
b2RlLT5yb290RWRpdGFibGVFbGVtZW50KCksIDAsIERPV05TVFJFQU0pOwogfQogCi1WaXNpYmxl
UG9zaXRpb24gbmV4dExpbmVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMsIGludCB4
KQorVmlzaWJsZVBvc2l0aW9uIG5leHRMaW5lUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICZ2aXNpYmxlUG9zaXRpb24sIGludCB4KQogewotICAgIFBvc2l0aW9uIHAgPSBjLmFmZmluaXR5
KCkgPT0gVVBTVFJFQU0gPyBjLmRlZXBFcXVpdmFsZW50KCkgOiBjLmRvd25zdHJlYW1EZWVwRXF1
aXZhbGVudCgpOworICAgIFBvc2l0aW9uIHAgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxl
bnQoKTsKICAgICBOb2RlSW1wbCAqbm9kZSA9IHAubm9kZSgpOwogICAgIGlmICghbm9kZSB8fCAh
bm9kZS0+Z2V0RG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwpA
QCAtNDM3LDcgKzQzNyw3IEBACiAKICAgICBSZW5kZXJCbG9jayAqY29udGFpbmluZ0Jsb2NrID0g
MDsKICAgICBSb290SW5saW5lQm94ICpyb290ID0gMDsKLSAgICBJbmxpbmVCb3ggKmJveCA9IHJl
bmRlcmVyLT5pbmxpbmVCb3gocC5vZmZzZXQoKSwgYy5hZmZpbml0eSgpKTsKKyAgICBJbmxpbmVC
b3ggKmJveCA9IHJlbmRlcmVyLT5pbmxpbmVCb3gocC5vZmZzZXQoKSwgdmlzaWJsZVBvc2l0aW9u
LmFmZmluaXR5KCkpOwogICAgIGlmIChib3gpIHsKICAgICAgICAgcm9vdCA9IGJveC0+cm9vdCgp
LT5uZXh0Um9vdEJveCgpOwogICAgICAgICBpZiAocm9vdCkKSW5kZXg6IFdlYkNvcmUva2h0bWwv
ZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2to
dG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDExOTc2KQorKysg
V2ViQ29yZS9raHRtbC9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiZG9tL2RvbV9ub2RlLmgiCiAjaW5jbHVk
ZSAiZG9tL2RvbV9zdHJpbmcuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgImh0bWxl
ZGl0aW5nLmgiCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3Jl
bmRlcl9vYmplY3QuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmgiCkBAIC04
NSwxNCArODYsMTQgQEAKIH0KIAogU2VsZWN0aW9uQ29udHJvbGxlcjo6U2VsZWN0aW9uQ29udHJv
bGxlcihjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQb3MpCi0gICAgOiBtX2Jhc2Uodmlz
aWJsZVBvcy5wb3NpdGlvbigpKSwgbV9leHRlbnQodmlzaWJsZVBvcy5wb3NpdGlvbigpKQorICAg
IDogbV9iYXNlKHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKSksIG1fZXh0ZW50KHZpc2libGVQ
b3MuZGVlcEVxdWl2YWxlbnQoKSkKIHsKICAgICBpbml0KHZpc2libGVQb3MuYWZmaW5pdHkoKSk7
CiAgICAgdmFsaWRhdGUoKTsKIH0KIAogU2VsZWN0aW9uQ29udHJvbGxlcjo6U2VsZWN0aW9uQ29u
dHJvbGxlcihjb25zdCBWaXNpYmxlUG9zaXRpb24gJmJhc2UsIGNvbnN0IFZpc2libGVQb3NpdGlv
biAmZXh0ZW50KQotICAgIDogbV9iYXNlKGJhc2UucG9zaXRpb24oKSksIG1fZXh0ZW50KGV4dGVu
dC5wb3NpdGlvbigpKQorICAgIDogbV9iYXNlKGJhc2UuZGVlcEVxdWl2YWxlbnQoKSksIG1fZXh0
ZW50KGV4dGVudC5kZWVwRXF1aXZhbGVudCgpKQogewogICAgIGluaXQoYmFzZS5hZmZpbml0eSgp
KTsKICAgICB2YWxpZGF0ZSgpOwpAQCAtNTY3LDE0ICs1NjgsNyBAQAogICAgICAgICByZXR1cm4g
eDsKICAgICAgICAgCiAgICAgaWYgKHJlY2FsYyB8fCBmcmFtZS0+eFBvc0ZvclZlcnRpY2FsQXJy
b3dOYXZpZ2F0aW9uKCkgPT0gRnJhbWU6Ok5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9u
KSB7Ci0gICAgICAgIHN3aXRjaCAobV9hZmZpbml0eSkgewotICAgICAgICAgICAgY2FzZSBET1dO
U1RSRUFNOgotICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihwb3MsIG1fYWZm
aW5pdHkpLmRvd25zdHJlYW1EZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBVUFNUUkVBTToKLSAgICAgICAgICAgICAgICBwb3MgPSBWaXNp
YmxlUG9zaXRpb24ocG9zLCBtX2FmZmluaXR5KS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihw
b3MsIG1fYWZmaW5pdHkpLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgICAgIHggPSBwb3Mubm9kZSgp
LT5yZW5kZXJlcigpLT5jYXJldFJlY3QocG9zLm9mZnNldCgpLCBtX2FmZmluaXR5KS54KCk7CiAg
ICAgICAgIGZyYW1lLT5zZXRYUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oeCk7CiAgICAg
fQpAQCAtNzAzLDcgKzY5Nyw3IEBACiAKIFBhc3NSZWZQdHI8UmFuZ2VJbXBsPiBTZWxlY3Rpb25D
b250cm9sbGVyOjpnZXRSYW5nZUF0KGludCBpbmRleCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5k
ZXggPT0gMCA/IFBhc3NSZWZQdHI8UmFuZ2VJbXBsPih0b1JhbmdlKCkpIDogUGFzc1JlZlB0cjxS
YW5nZUltcGw+KCk7CisgICAgcmV0dXJuIGluZGV4ID09IDAgPyB0b1JhbmdlKCkgOiAwOwogfQog
CiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEJhc2VBbmRFeHRlbnQoTm9kZUltcGwgKmJh
c2VOb2RlLCBpbnQgYmFzZU9mZnNldCwgTm9kZUltcGwgKmV4dGVudE5vZGUsIGludCBleHRlbnRP
ZmZzZXQpCkBAIC03NTksMTQgKzc1Myw3IEBACiAgICAgICAgIAogICAgIGlmIChpc0NhcmV0KCkp
IHsKICAgICAgICAgUG9zaXRpb24gcG9zID0gbV9zdGFydDsKLSAgICAgICAgc3dpdGNoIChtX2Fm
ZmluaXR5KSB7Ci0gICAgICAgICAgICBjYXNlIERPV05TVFJFQU06Ci0gICAgICAgICAgICAgICAg
cG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpLmRvd25zdHJlYW1EZWVw
RXF1aXZhbGVudCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBV
UFNUUkVBTToKLSAgICAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9zdGFydCwg
bV9hZmZpbml0eSkuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQorICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9hZmZpbml0
eSkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICAgICAgaWYgKHBvcy5pc05vdE51bGwoKSkgewogICAg
ICAgICAgICAgQVNTRVJUKHBvcy5ub2RlKCktPnJlbmRlcmVyKCkpOwogICAgICAgICAgICAgbV9j
YXJldFJlY3QgPSBwb3Mubm9kZSgpLT5yZW5kZXJlcigpLT5jYXJldFJlY3QocG9zLm9mZnNldCgp
LCBtX2FmZmluaXR5KTsKQEAgLTg3Niw3ICs4NjMsNyBAQAogICAgICAgICB9CiAgICAgICAgIC8v
IElmIHRoZSBlbmQgaXMgb3V0c2lkZSB0aGUgYmFzZSdzIGVkaXRhYmxlIHJvb3QsIGNhcCBpdCBh
dCB0aGUgZW5kIG9mIHRoYXQgZWRpdGFibGUgcm9vdC4KICAgICAgICAgaWYgKGJhc2VSb290ICE9
IGVuZFJvb3QpIHsKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBsYXN0KFBvc2l0aW9uKGJh
c2VSb290LCBiYXNlUm9vdC0+bWF4RGVlcE9mZnNldCgpKSk7CisgICAgICAgICAgICBWaXNpYmxl
UG9zaXRpb24gbGFzdChQb3NpdGlvbihiYXNlUm9vdCwgbWF4RGVlcE9mZnNldChiYXNlUm9vdCkp
KTsKICAgICAgICAgICAgIG1fZW5kID0gbGFzdC5kZWVwRXF1aXZhbGVudCgpOwogICAgICAgICB9
CiAgICAgLy8gVGhlIHNlbGVjdGlvbiBpcyBiYXNlZCBvdXRzaWRlIGVkaXRhYmxlIGNvbnRlbnQu
ICBLZWVwIGJvdGggc2lkZXMgZnJvbSByZWFjaGluZyBpbnRvIGVkaXRhYmxlIGNvbnRlbnQuCkBA
IC04OTYsNyArODgzLDcgQEAKICAgICAgICAgaWYgKHN0YXJ0Um9vdCkgewogICAgICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIG5leHQ7CiAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAg
bmV4dCA9IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihzdGFydFJvb3QsIHN0YXJ0Um9vdC0+bWF4
RGVlcE9mZnNldCgpKSkubmV4dCgpOworICAgICAgICAgICAgICAgIG5leHQgPSBWaXNpYmxlUG9z
aXRpb24oUG9zaXRpb24oc3RhcnRSb290LCBtYXhEZWVwT2Zmc2V0KHN0YXJ0Um9vdCkpKS5uZXh0
KCk7CiAgICAgICAgICAgICAgICAgc3RhcnRSb290ID0gbmV4dC5kZWVwRXF1aXZhbGVudCgpLm5v
ZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgICAgICAgICAgfSB3aGlsZSAoc3RhcnRS
b290KTsKICAgICAgICAgICAgIApJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL2RlbGV0ZV9z
ZWxlY3Rpb25fY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5n
L2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJKHJldmlzaW9uIDExOTc2KQorKysgV2ViQ29y
ZS9raHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY5LDE3ICs2OSw2IEBACiAgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUobWVudVRh
Zyk7CiB9CiAKLXN0YXRpYyBpbnQgbWF4RGVlcE9mZnNldChOb2RlSW1wbCAqbikKLXsKLSAgICBp
ZiAobi0+aXNBdG9taWNOb2RlKCkpCi0gICAgICAgIHJldHVybiBuLT5jYXJldE1heE9mZnNldCgp
OwotCi0gICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIG4tPmNoaWxk
Tm9kZUNvdW50KCk7Ci0KLSAgICByZXR1cm4gMTsKLX0KLQogc3RhdGljIHZvaWQgZGVidWdQb3Np
dGlvbihjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IFBvc2l0aW9uICZwb3MpCiB7CiAgICAgaWYg
KCFwcmVmaXgpCkBAIC0yOTAsNyArMjc5LDYgQEAKICAgICBpZiAoaXNCUk9uTGluZUJ5SXRzZWxm
KSB7CiAgICAgICAgIG1fZW5kaW5nUG9zaXRpb24gPSBQb3NpdGlvbihtX2Rvd25zdHJlYW1TdGFy
dC5ub2RlKCktPnBhcmVudE5vZGUoKSwgbV9kb3duc3RyZWFtU3RhcnQubm9kZSgpLT5ub2RlSW5k
ZXgoKSk7CiAgICAgICAgIHJlbW92ZU5vZGUobV9kb3duc3RyZWFtU3RhcnQubm9kZSgpKTsKLSAg
ICAgICAgbV9lbmRpbmdQb3NpdGlvbiA9IG1fZW5kaW5nUG9zaXRpb24uZXF1aXZhbGVudERlZXBQ
b3NpdGlvbigpOwogICAgICAgICBtX21lcmdlQmxvY2tzQWZ0ZXJEZWxldGUgPSBmYWxzZTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzM1LDcgKzMyMyw3IEBACiAgICAgICAgIH0K
ICAgICB9CiAgICAgZWxzZSBpZiAoc3RhcnRPZmZzZXQgPj0gbV9zdGFydE5vZGUtPmNhcmV0TWF4
T2Zmc2V0KCkgJiYKLSAgICAgICAgICAgICAobV9zdGFydE5vZGUtPmlzQXRvbWljTm9kZSgpIHx8
IHN0YXJ0T2Zmc2V0ID09IDApKSB7CisgICAgICAgICAgICAgKGlzQXRvbWljTm9kZShtX3N0YXJ0
Tm9kZS5nZXQoKSkgfHwgc3RhcnRPZmZzZXQgPT0gMCkpIHsKICAgICAgICAgLy8gTW92ZSB0aGUg
c3RhcnQgbm9kZSB0byB0aGUgbmV4dCBub2RlIGluIHRoZSB0cmVlIHNpbmNlIHRoZSBzdGFydE9m
ZnNldCBpcyBlcXVhbCB0bwogICAgICAgICAvLyBvciBiZXlvbmQgdGhlIHN0YXJ0IG5vZGUncyBj
YXJldE1heE9mZnNldCBUaGlzIG1lYW5zIHRoZXJlIGlzIG5vdGhpbmcgdmlzaWJsZSB0byBkZWxl
dGUuIAogICAgICAgICAvLyBCdXQgZG9uJ3QgZG8gdGhpcyBpZiB0aGUgbm9kZSBpcyBub3QgYXRv
bWljIC0gd2UgZG9uJ3Qgd2FudCB0byBtb3ZlIGludG8gdGhlIGZpcnN0IGNoaWxkLgpJbmRleDog
V2ViQ29yZS9raHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9raHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHJldmlzaW9uIDExOTc2KQorKysgV2ViQ29y
ZS9raHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0
LDkgQEAKIAogbmFtZXNwYWNlIGtodG1sIHsKIAoraW50IG1heERlZXBPZmZzZXQoY29uc3QgRE9N
OjpOb2RlSW1wbCAqbm9kZSk7Citib29sIGlzQXRvbWljTm9kZShjb25zdCBET006Ok5vZGVJbXBs
ICpub2RlKTsKKwogdm9pZCByZWJhbGFuY2VXaGl0ZXNwYWNlSW5UZXh0Tm9kZShET006Ok5vZGVJ
bXBsICpub2RlLCB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBsZW5ndGgpOwogRE9N
OjpET01TdHJpbmcgJm5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKTsKIHZvaWQgZGVyZWZOb2Rlc0lu
TGlzdChRUHRyTGlzdDxET006Ok5vZGVJbXBsPiAmbGlzdCk7CkluZGV4OiBXZWJDb3JlL2todG1s
L3htbC9kb21fcG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL3htbC9kb21f
cG9zaXRpb24uaAkocmV2aXNpb24gMTE5NzYpCisrKyBXZWJDb3JlL2todG1sL3htbC9kb21fcG9z
aXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNiBAQAogICAgIFBvc2l0aW9uIGRv
d25zdHJlYW0oKSBjb25zdDsKICAgICAKICAgICBQb3NpdGlvbiBlcXVpdmFsZW50UmFuZ2VDb21w
bGlhbnRQb3NpdGlvbigpIGNvbnN0OwotICAgIFBvc2l0aW9uIGVxdWl2YWxlbnREZWVwUG9zaXRp
b24oKSBjb25zdDsKICAgICBib29sIGluUmVuZGVyZWRDb250ZW50KCkgY29uc3Q7CiAgICAgYm9v
bCBpc1JlbmRlcmVkQ2hhcmFjdGVyKCkgY29uc3Q7CiAgICAgYm9vbCByZW5kZXJzSW5EaWZmZXJl
bnRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiAmcG9zKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUva2h0
bWwveG1sL2RvbV9ub2RlaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwveG1sL2Rv
bV9ub2RlaW1wbC5oCShyZXZpc2lvbiAxMTk3NikKKysrIFdlYkNvcmUva2h0bWwveG1sL2RvbV9u
b2RlaW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAKICAgICB2aXJ0dWFs
IGJvb2wgaXNDb21tZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzRG9jdW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29s
IGlzQmxvY2tGbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBpc0Jsb2NrRmxvd09yVGFibGUoKSBjb25z
dDsKKyAgICBib29sIGlzQmxvY2tGbG93T3JCbG9ja1RhYmxlKCkgY29uc3Q7CiAgICAgCiAgICAg
Ly8gVXNlZCBieSA8Zm9ybT4gZWxlbWVudHMgdG8gaW5kaWNhdGUgYSBtYWxmb3JtZWQgc3RhdGUg
b2Ygc29tZSBraW5kLCB0eXBpY2FsbHkKICAgICAvLyB1c2VkIHRvIGtlZXAgZnJvbSBhcHBseWlu
ZyB0aGUgYm90dG9tIG1hcmdpbiBvZiB0aGUgZm9ybS4KQEAgLTEzNiw3ICsxMzYsNiBAQAogICAg
IHZpcnR1YWwgdm9pZCBzZXRGaXJzdENoaWxkKE5vZGVJbXBsICpjaGlsZCk7CiAgICAgdmlydHVh
bCB2b2lkIHNldExhc3RDaGlsZChOb2RlSW1wbCAqY2hpbGQpOwogCi0gICAgYm9vbCBpc0F0b21p
Y05vZGUoKSBjb25zdDsKICAgICBOb2RlSW1wbCAqcHJldmlvdXNOb2RlQ29uc2lkZXJpbmdBdG9t
aWNOb2RlcygpIGNvbnN0OwogICAgIE5vZGVJbXBsICpuZXh0Tm9kZUNvbnNpZGVyaW5nQXRvbWlj
Tm9kZXMoKSBjb25zdDsKICAgICAKQEAgLTM1Miw3ICszNTEsNiBAQAogCXZpcnR1YWwgYm9vbCBj
aGlsZEFsbG93ZWQoTm9kZUltcGwgKm5ld0NoaWxkKTsJCQkJICAgLy8gRXJyb3ItY2hlY2tpbmcg
ZHVyaW5nIHBhcnNpbmcgdGhhdCBjaGVja3MgdGhlIERURAogCQogICAgIHZpcnR1YWwgaW50IG1h
eE9mZnNldCgpIGNvbnN0OwotICAgIGludCBtYXhEZWVwT2Zmc2V0KCkgY29uc3Q7CiAgICAgdmly
dHVhbCBpbnQgY2FyZXRNaW5PZmZzZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBjYXJldE1h
eE9mZnNldCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgY2FyZXRNYXhSZW5kZXJlZE9m
ZnNldCgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9raHRtbC94bWwvZG9tMl9yYW5nZWltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwveG1sL2RvbTJfcmFuZ2VpbXBsLmNwcAkocmV2
aXNpb24gMTE5NzYpCisrKyBXZWJDb3JlL2todG1sL3htbC9kb20yX3JhbmdlaW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMjksMjMgKzEzMjksMjMgQEAKICAgICAvLyBJdCBpcyBpbXBvcnRh
bnQgdG8gc2tpcCBjZXJ0YWluIGlycmVsZXZhbnQgY29udGVudCBhdCB0aGUgc3RhcnQgb2YgdGhl
IHNlbGVjdGlvbiwgc28gd2UgZG8gbm90IHdpbmQgdXAgCiAgICAgLy8gd2l0aCBhIHNwdXJpb3Vz
ICJtaXhlZCIgc3R5bGUuCiAgICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhtX3N0YXJ0Q29u
dGFpbmVyLCBtX3N0YXJ0T2Zmc2V0LCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKLSAgICBpZiAocG9z
LmlzTnVsbCgpKQorICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24obV9zdGFydENv
bnRhaW5lciwgbV9zdGFydE9mZnNldCwgVlBfREVGQVVMVF9BRkZJTklUWSk7CisgICAgaWYgKHZp
c2libGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAKICAg
ICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CiAgICAgLy8gaWYgdGhlIHNlbGVjdGlvbiBpcyBhIGNh
cmV0LCBqdXN0IHJldHVybiB0aGUgcG9zaXRpb24sIHNpbmNlIHRoZSBzdHlsZQogICAgIC8vIGJl
aGluZCB1cyBpcyByZWxldmFudAogICAgIGlmIChjb2xsYXBzZWQoZXhjZXB0aW9uQ29kZSkpCi0g
ICAgICAgIHJldHVybiBwb3MucG9zaXRpb24oKTsKKyAgICAgICAgcmV0dXJuIHZpc2libGVQb3Np
dGlvbi5kZWVwRXF1aXZhbGVudCgpOwogCiAgICAgLy8gaWYgdGhlIHNlbGVjdGlvbiBzdGFydHMg
anVzdCBiZWZvcmUgYSBwYXJhZ3JhcGggYnJlYWssIHNraXAgb3ZlciBpdAotICAgIGlmIChpc0Vu
ZE9mUGFyYWdyYXBoKHBvcykpCi0gICAgICAgIHJldHVybiBwb3MubmV4dCgpLnBvc2l0aW9uKCku
ZG93bnN0cmVhbSgpOworICAgIGlmIChpc0VuZE9mUGFyYWdyYXBoKHZpc2libGVQb3NpdGlvbikp
CisgICAgICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb24ubmV4dCgpLmRlZXBFcXVpdmFsZW50KCku
ZG93bnN0cmVhbSgpOwogCiAgICAgLy8gb3RoZXJ3aXNlLCBtYWtlIHN1cmUgdG8gYmUgYXQgdGhl
IHN0YXJ0IG9mIHRoZSBmaXJzdCBzZWxlY3RlZCBub2RlLAogICAgIC8vIGluc3RlYWQgb2YgcG9z
c2libHkgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBub2RlIGJlZm9yZSB0aGUgc2VsZWN0aW9uCi0g
ICAgcmV0dXJuIHBvcy5wb3NpdGlvbigpLmRvd25zdHJlYW0oKTsKKyAgICByZXR1cm4gdmlzaWJs
ZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpOwogfQogCiBOb2RlSW1wbCAq
UmFuZ2VJbXBsOjpwYXN0RW5kTm9kZSgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2todG1sL3htbC9k
b21fcG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwveG1sL2RvbV9wb3Np
dGlvbi5jcHAJKHJldmlzaW9uIDExOTc2KQorKysgV2ViQ29yZS9raHRtbC94bWwvZG9tX3Bvc2l0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgImRvbTJf
cmFuZ2VpbXBsLmgiCiAjaW5jbHVkZSAiZG9tMl92aWV3c2ltcGwuaCIKICNpbmNsdWRlICJoZWxw
ZXIuaCIKKyNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgInRleHRfYWZmaW5pdHku
aCIKICNpbmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0
cy5oIgpAQCAtMTcwLDcgKzE3MSw3IEBACiAgICAgaWYgKG8gPiAwKSB7CiAgICAgICAgIE5vZGVJ
bXBsICpjaGlsZCA9IG4tPmNoaWxkTm9kZShvIC0gMSk7CiAgICAgICAgIGlmIChjaGlsZCkgewot
ICAgICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKGNoaWxkLCBjaGlsZC0+bWF4RGVlcE9mZnNldCgp
KTsKKyAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbihjaGlsZCwgbWF4RGVlcE9mZnNldChjaGls
ZCkpOwogICAgICAgICB9CiAgICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcmVhc29ucyBjaGlsZCBt
aWdodCBiZSAwOgogICAgICAgICAvLyAgIDEpIFRoZSBub2RlIGlzIG5vZGUgbGlrZSBhIHRleHQg
bm9kZSB0aGF0IGlzIG5vdCBhbiBlbGVtZW50LCBhbmQgdGhlcmVmb3JlIGhhcyBubyBjaGlsZHJl
bi4KQEAgLTE5Niw3ICsxOTcsNyBAQAogICAgIGludCBvID0gb2Zmc2V0KCk7CiAgICAgYXNzZXJ0
KG8gPj0gMCk7CiAKLSAgICBpZiAobyA8IG4tPm1heERlZXBPZmZzZXQoKSkgeworICAgIGlmIChv
IDwgbWF4RGVlcE9mZnNldChuKSkgewogICAgICAgICBOb2RlSW1wbCAqY2hpbGQgPSBuLT5jaGls
ZE5vZGUobyk7CiAgICAgICAgIGlmIChjaGlsZCkgewogICAgICAgICAgICAgcmV0dXJuIFBvc2l0
aW9uKGNoaWxkLCAwKTsKQEAgLTIzMSw3ICsyMzIsNyBAQAogICAgIGlmICghbikKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgCi0gICAgcmV0dXJuIG9mZnNldCgpID49IG4tPm1heERlZXBPZmZz
ZXQoKSAmJiBuLT5wYXJlbnQoKSA9PSAwOworICAgIHJldHVybiBvZmZzZXQoKSA+PSBtYXhEZWVw
T2Zmc2V0KG4pICYmIG4tPnBhcmVudCgpID09IDA7CiB9CiAKIGludCBQb3NpdGlvbjo6cmVuZGVy
ZWRPZmZzZXQoKSBjb25zdApAQCAtMzE2LDE2ICszMTcsMTUgQEAKIAogLy8gdXBzdHJlYW0oKSBh
bmQgZG93bnN0cmVhbSgpIHdhbnQgdG8gcmV0dXJuIHBvc2l0aW9ucyB0aGF0IGFyZSBlaXRoZXIg
aW4gYQogLy8gdGV4dCBub2RlIG9yIGF0IGp1c3QgYmVmb3JlIGEgbm9uLXRleHQgbm9kZS4gIFRo
aXMgbWV0aG9kIGNoZWNrcyBmb3IgdGhhdC4KLXN0YXRpYyBib29sIGlzU3RyZWFtZXIgKFBvc2l0
aW9uIHBvcykKK3N0YXRpYyBib29sIGlzU3RyZWFtZXIoY29uc3QgUG9zaXRpb24gJnBvcykKIHsK
LSAgICBOb2RlSW1wbCAqY3VycmVudE5vZGUgPSBwb3Mubm9kZSgpOwotICAgIGlmICghY3VycmVu
dE5vZGUpCisgICAgaWYgKHBvcy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIAotICAgIGlmIChjdXJyZW50Tm9kZS0+aXNBdG9taWNOb2RlKCkpCisgICAgaWYgKGlzQXRv
bWljTm9kZShwb3Mubm9kZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAotICAg
IHJldHVybiAocG9zLm9mZnNldCgpID09IDApOworICAgIHJldHVybiBwb3Mub2Zmc2V0KCkgPT0g
MDsKIH0KIAogLy8gQUZBSUsgbm8gb25lIGhhcyBhIGNsZWFyLCBjb21wbGV0ZSBkZWZpbml0aW9u
IGZvciB0aGlzIG1ldGhvZCBhbmQgaG93IGl0IGlzIHVzZWQuCkBAIC0zNDAsNyArMzQwLDcgQEAK
IFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbSgpIGNvbnN0CiB7CiAgICAgLy8gc3RhcnQgYXQg
ZXF1aXZhbGVudCBkZWVwIHBvc2l0aW9uCi0gICAgUG9zaXRpb24gc3RhcnQgPSBlcXVpdmFsZW50
RGVlcFBvc2l0aW9uKCk7CisgICAgUG9zaXRpb24gc3RhcnQgPSBWaXNpYmxlUG9zaXRpb246OmRl
ZXBFcXVpdmFsZW50KCp0aGlzKTsKICAgICBOb2RlSW1wbCAqc3RhcnROb2RlID0gc3RhcnQubm9k
ZSgpOwogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKQEAg
LTQxNCw4ICs0MTQsNyBAQAogLy8gaW4gYW4gYXRvbWljIG5vZGUgKGkuZS4gdGV4dCkgb3IgaXMg
YXQgb2Zmc2V0IDAuCiBQb3NpdGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbSgpIGNvbnN0CiB7Ci0g
ICAgLy8gc3RhcnQgYXQgZXF1aXZhbGVudCBkZWVwIHBvc2l0aW9uCi0gICAgUG9zaXRpb24gc3Rh
cnQgPSBlcXVpdmFsZW50RGVlcFBvc2l0aW9uKCk7CisgICAgUG9zaXRpb24gc3RhcnQgPSBWaXNp
YmxlUG9zaXRpb246OmRlZXBFcXVpdmFsZW50KCp0aGlzKTsKICAgICBOb2RlSW1wbCAqc3RhcnRO
b2RlID0gc3RhcnQubm9kZSgpOwogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4g
UG9zaXRpb24oKTsKQEAgLTUzOCwzNiArNTM3LDYgQEAKICAgICByZXR1cm4gUG9zaXRpb24ocGFy
ZW50LCBjb25zdHJhaW5lZE9mZnNldCk7CiB9CiAKLVBvc2l0aW9uIFBvc2l0aW9uOjplcXVpdmFs
ZW50RGVlcFBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICBpZiAoaXNOdWxsKCkgfHwgbm9kZSgpLT5p
c0F0b21pY05vZGUoKSkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgTm9kZUltcGwgKmNo
aWxkID0gMDsKLSAgICBQb3NpdGlvbiBwb3MoKnRoaXMpOwotICAgIGlmIChvZmZzZXQoKSA+PSAo
aW50KW5vZGUoKS0+Y2hpbGROb2RlQ291bnQoKSkgewotICAgICAgICBjaGlsZCA9IG5vZGUoKS0+
bGFzdENoaWxkKCk7Ci0gICAgICAgIHBvcyA9IFBvc2l0aW9uKGNoaWxkLCBjaGlsZC0+Y2FyZXRN
YXhPZmZzZXQoKSk7Ci0gICAgICAgIEFTU0VSVChjaGlsZCk7Ci0gICAgICAgIHdoaWxlICghY2hp
bGQtPmlzQXRvbWljTm9kZSgpICYmIHBvcy5ub2RlKCktPmhhc0NoaWxkTm9kZXMoKSkgewotICAg
ICAgICAgICAgY2hpbGQgPSBwb3Mubm9kZSgpLT5sYXN0Q2hpbGQoKTsKLSAgICAgICAgICAgIEFT
U0VSVChjaGlsZCk7Ci0gICAgICAgICAgICBwb3MgPSBQb3NpdGlvbihjaGlsZCwgY2hpbGQtPmNh
cmV0TWF4T2Zmc2V0KCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBj
aGlsZCA9IG5vZGUoKS0+Y2hpbGROb2RlKG9mZnNldCgpKTsKLSAgICAgICAgQVNTRVJUKGNoaWxk
KTsKLSAgICAgICAgcG9zID0gUG9zaXRpb24oY2hpbGQsIDApOwotICAgICAgICB3aGlsZSAoIWNo
aWxkLT5pc0F0b21pY05vZGUoKSAmJiBwb3Mubm9kZSgpLT5oYXNDaGlsZE5vZGVzKCkpIHsKLSAg
ICAgICAgICAgIGNoaWxkID0gcG9zLm5vZGUoKS0+Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAg
QVNTRVJUKGNoaWxkKTsKLSAgICAgICAgICAgIHBvcyA9IFBvc2l0aW9uKGNoaWxkLCAwKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcG9zOwotfQotCiBib29sIFBvc2l0aW9uOjppblJl
bmRlcmVkQ29udGVudCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTnVsbCgpKQpJbmRleDogV2ViQ29y
ZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1s
L3htbC9kb21fbm9kZWltcGwuY3BwCShyZXZpc2lvbiAxMTk3NikKKysrIFdlYkNvcmUva2h0bWwv
eG1sL2RvbV9ub2RlaW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNp
bmNsdWRlICJ4bWwvRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgImNzcy9jc3NoZWxwZXIuaCIKICNp
bmNsdWRlICJjc3MvY3Nzc3R5bGVzZWxlY3Rvci5oIgorI2luY2x1ZGUgImVkaXRpbmcvaHRtbGVk
aXRpbmcuaCIKICNpbmNsdWRlICJlZGl0aW5nL2h0bWxfaW50ZXJjaGFuZ2UuaCIKICNpbmNsdWRl
ICJlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaCIKIApAQCAtMTM1MywxNiArMTM1NCwxMSBA
QAogfQogCiAvLyBGSVhNRTogVGhpcyBjb2RlIGlzIHVzZWQgYnkgZWRpdGluZy4gIFNlZW1zIGxp
a2UgaXQgY291bGQgbW92ZSBvdmVyIHRoZXJlIGFuZCBub3QgcG9sbHV0ZSBOb2RlSW1wbC4KLWJv
b2wgTm9kZUltcGw6OmlzQXRvbWljTm9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFoYXNDaGls
ZE5vZGVzKCkgfHwgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNXaWRnZXQoKSk7Ci19Ci0K
IE5vZGVJbXBsICpOb2RlSW1wbDo6cHJldmlvdXNOb2RlQ29uc2lkZXJpbmdBdG9taWNOb2Rlcygp
IGNvbnN0CiB7CiAgICAgaWYgKHByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgIE5vZGVJbXBs
ICpuID0gcHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgIHdoaWxlICghbi0+aXNBdG9taWNOb2Rl
KCkgJiYgbi0+bGFzdENoaWxkKCkpCisgICAgICAgIHdoaWxlICghaXNBdG9taWNOb2RlKG4pICYm
IG4tPmxhc3RDaGlsZCgpKQogICAgICAgICAgICAgbiA9IG4tPmxhc3RDaGlsZCgpOwogICAgICAg
ICByZXR1cm4gbjsKICAgICB9CkBAIC0xMzc2LDcgKzEzNzIsNyBAQAogCiBOb2RlSW1wbCAqTm9k
ZUltcGw6Om5leHROb2RlQ29uc2lkZXJpbmdBdG9taWNOb2RlcygpIGNvbnN0CiB7Ci0gICAgaWYg
KCFpc0F0b21pY05vZGUoKSAmJiBmaXJzdENoaWxkKCkpCisgICAgaWYgKCFpc0F0b21pY05vZGUo
dGhpcykgJiYgZmlyc3RDaGlsZCgpKQogCXJldHVybiBmaXJzdENoaWxkKCk7CiAgICAgaWYgKG5l
eHRTaWJsaW5nKCkpCiAJcmV0dXJuIG5leHRTaWJsaW5nKCk7CkBAIC0xMzkyLDcgKzEzODgsNyBA
QAogewogICAgIE5vZGVJbXBsICpub2RlID0gcHJldmlvdXNOb2RlQ29uc2lkZXJpbmdBdG9taWNO
b2RlcygpOwogICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIGlmIChub2RlLT5pc0F0b21pY05v
ZGUoKSkKKyAgICAgICAgaWYgKGlzQXRvbWljTm9kZShub2RlKSkKICAgICAgICAgICAgIHJldHVy
biBub2RlOwogICAgICAgICBub2RlID0gbm9kZS0+cHJldmlvdXNOb2RlQ29uc2lkZXJpbmdBdG9t
aWNOb2RlcygpOwogICAgIH0KQEAgLTE0MDMsNyArMTM5OSw3IEBACiB7CiAgICAgTm9kZUltcGwg
Km5vZGUgPSBuZXh0Tm9kZUNvbnNpZGVyaW5nQXRvbWljTm9kZXMoKTsKICAgICB3aGlsZSAobm9k
ZSkgewotICAgICAgICBpZiAobm9kZS0+aXNBdG9taWNOb2RlKCkpCisgICAgICAgIGlmIChpc0F0
b21pY05vZGUobm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgbm9kZSA9
IG5vZGUtPm5leHROb2RlQ29uc2lkZXJpbmdBdG9taWNOb2RlcygpOwogICAgIH0KQEAgLTE0Nzgs
MTggKzE0NzQsNiBAQAogCiAvLyBGSVhNRTogU2hvdWxkbid0IHRoZXNlIGZ1bmN0aW9ucyBiZSBp
biB0aGUgZWRpdGluZyBjb2RlPyAgQ29kZSB0aGF0IGFza3MgcXVlc3Rpb25zIGFib3V0IEhUTUwg
aW4gdGhlIGNvcmUgRE9NIGNsYXNzCiAvLyBpcyBvYnZpb3VzbHkgbWlzcGxhY2VkLgotLy8gbWV0
aG9kIGZvciBlZGl0aW5nIG1hZG5lc3MsIHdoaWNoIGFsbG93cyBCUiwxIGFzIGEgcG9zaXRpb24s
IHRob3VnaCB0aGF0IGlzIGluY29ycmVjdAotaW50IE5vZGVJbXBsOjptYXhEZWVwT2Zmc2V0KCkg
Y29uc3QKLXsKLSAgICBpZiAoaXNUZXh0Tm9kZSgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgVGV4dEltcGwqPih0aGlzKS0+bGVuZ3RoKCk7Ci0gICAgICAgIAotICAgIGlmICho
YXNUYWdOYW1lKGJyVGFnKSB8fCAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1JlcGxhY2Vk
KCkpKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIHJldHVybiBjaGlsZE5vZGVDb3VudCgpOwot
fQotCiBpbnQgTm9kZUltcGw6OmNhcmV0TWluT2Zmc2V0KCkgY29uc3QKIHsKICAgICByZXR1cm4g
cmVuZGVyZXIoKSA/IHJlbmRlcmVyKCktPmNhcmV0TWluT2Zmc2V0KCkgOiAwOwpAQCAtMTUyMCw5
ICsxNTA0LDkgQEAKICAgICByZXR1cm4gcmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc0Jsb2Nr
RmxvdygpOwogfQogCi1ib29sIE5vZGVJbXBsOjppc0Jsb2NrRmxvd09yVGFibGUoKSBjb25zdAor
Ym9vbCBOb2RlSW1wbDo6aXNCbG9ja0Zsb3dPckJsb2NrVGFibGUoKSBjb25zdAogewotICAgIHJl
dHVybiByZW5kZXJlcigpICYmIChyZW5kZXJlcigpLT5pc0Jsb2NrRmxvdygpIHx8IHJlbmRlcmVy
KCktPmlzVGFibGUoKSk7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkgJiYgKHJlbmRlcmVyKCktPmlz
QmxvY2tGbG93KCkgfHwgcmVuZGVyZXIoKS0+aXNUYWJsZSgpICYmICFyZW5kZXJlcigpLT5pc0lu
bGluZSgpKTsKIH0KIAogYm9vbCBOb2RlSW1wbDo6aXNFZGl0YWJsZUJsb2NrKCkgY29uc3QKQEAg
LTE1MzMsMTQgKzE1MTcsMTQgQEAKIEVsZW1lbnRJbXBsICpOb2RlSW1wbDo6ZW5jbG9zaW5nQmxv
Y2tGbG93T3JUYWJsZUVsZW1lbnQoKSBjb25zdAogewogICAgIE5vZGVJbXBsICpuID0gY29uc3Rf
Y2FzdDxOb2RlSW1wbCAqPih0aGlzKTsKLSAgICBpZiAoaXNCbG9ja0Zsb3dPclRhYmxlKCkpCisg
ICAgaWYgKGlzQmxvY2tGbG93T3JCbG9ja1RhYmxlKCkpCiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxFbGVtZW50SW1wbCAqPihuKTsKIAogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIG4gPSBu
LT5wYXJlbnROb2RlKCk7CiAgICAgICAgIGlmICghbikKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBpZiAobi0+aXNCbG9ja0Zsb3dPclRhYmxlKCkgfHwgbi0+aGFzVGFnTmFtZShib2R5VGFn
KSkKKyAgICAgICAgaWYgKG4tPmlzQmxvY2tGbG93T3JCbG9ja1RhYmxlKCkgfHwgbi0+aGFzVGFn
TmFtZShib2R5VGFnKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50SW1w
bCAqPihuKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CkluZGV4OiBXZWJDb3JlL2todG1sL0ZyYW1l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL0ZyYW1lLmNwcAkocmV2aXNpb24gMTE5
NzYpCisrKyBXZWJDb3JlL2todG1sL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0MCw3
ICsyNDQwLDcgQEAKIAogYm9vbCBGcmFtZTo6c2VsZWN0Q29udGVudHNPZk5vZGUoTm9kZUltcGwq
IG5vZGUpCiB7Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWwgPSBTZWxlY3Rpb25Db250cm9s
bGVyKFBvc2l0aW9uKG5vZGUsIDApLCBraHRtbDo6RE9XTlNUUkVBTSwgUG9zaXRpb24obm9kZSwg
bm9kZS0+bWF4RGVlcE9mZnNldCgpKSwga2h0bWw6OkRPV05TVFJFQU0pOyAgICAKKyAgICBTZWxl
Y3Rpb25Db250cm9sbGVyIHNlbCA9IFNlbGVjdGlvbkNvbnRyb2xsZXIoUG9zaXRpb24obm9kZSwg
MCksIGtodG1sOjpET1dOU1RSRUFNLCBQb3NpdGlvbihub2RlLCBtYXhEZWVwT2Zmc2V0KG5vZGUp
KSwga2h0bWw6OkRPV05TVFJFQU0pOyAgICAKICAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9u
KHNlbCkpIHsKICAgICAgICAgc2V0U2VsZWN0aW9uKHNlbCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwpJbmRleDogV2ViQ29yZS9rd3EvS1dRQWNjT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3dxL0tXUUFjY09iamVjdC5tbQkocmV2aXNpb24gMTE5NzYpCisrKyBXZWJDb3JlL2t3cS9L
V1FBY2NPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMTcsNyArMTAxNyw3IEBACiAgICAg
aWYgKHZpc2libGVQb3MuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBSZW5k
ZXJPYmplY3QgKiBvYmogPSB2aXNpYmxlUG9zLnBvc2l0aW9uKCkubm9kZSgpLT5yZW5kZXJlcigp
OworICAgIFJlbmRlck9iamVjdCAqIG9iaiA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKS5u
b2RlKCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFvYmopCiAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgCg==
</data>
<flag name="review"
          id="1237"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>