<?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>154818</bug_id>
          
          <creation_ts>2016-02-29 09:07:38 -0800</creation_ts>
          <short_desc>[css-grid] Get rid of GridResolvedPosition</short_desc>
          <delta_ts>2016-03-01 08:54:16 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>153488</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Manuel Rego Casasnovas">rego</reporter>
          <assigned_to name="Manuel Rego Casasnovas">rego</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>jfernandez</cc>
    
    <cc>rego</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1169152</commentid>
    <comment_count>0</comment_count>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2016-02-29 09:07:38 -0800</bug_when>
    <thetext>Port this patch from Blink: https://codereview.chromium.org/1500433003/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169163</commentid>
    <comment_count>1</comment_count>
      <attachid>272493</attachid>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2016-02-29 09:28:48 -0800</bug_when>
    <thetext>Created attachment 272493
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169180</commentid>
    <comment_count>2</comment_count>
      <attachid>272493</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-29 09:55:51 -0800</bug_when>
    <thetext>Comment on attachment 272493
Patch

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

Biggest mistake here is the ++ operator on the iterator class.

I see a lot of +1 and -1 here and I don’t know how we are certain that overflow and underflow are not an issue in each case. I commented on the first few I saw but then stopped because there were so many.

&gt; Source/WebCore/ChangeLog:2429
&gt; -        No new tests, no change of behavior.
&gt; +        no new tests, no change of behavior.

Why this change?

&gt; Source/WebCore/rendering/RenderGrid.cpp:665
&gt; +    for (auto resolvedPosition : tracksSpan) {
&gt; +        unsigned trackIndex = resolvedPosition;

Seems like trackIndex and resolvedPosition are the same thing. I suggest something more like this:

    for (auto trackIndex : tracksSpan) {

&gt; Source/WebCore/rendering/RenderGrid.cpp:868
&gt; +    const unsigned trackPosition = span.resolvedInitialPosition();

const here is OK bu not all that helpful

&gt; Source/WebCore/rendering/RenderGrid.cpp:1486
&gt; +        || (positions.resolvedFinalPosition() - 1 &gt; lastTrackIndex);

Is there something that prevents this from underflowing?

&gt; Source/WebCore/rendering/RenderGrid.cpp:1491
&gt; +    unsigned finalPosition = endIsAuto ? lastPosition : positions.resolvedFinalPosition() - 1;

Is there something that prevents this from underflowing?

&gt; Source/WebCore/rendering/RenderGrid.cpp:1557
&gt; +    LayoutUnit finalTrackPosition = linePositions[span.resolvedFinalPosition() - 1];

Does something prevent this from underflowing?

&gt; Source/WebCore/rendering/RenderGrid.cpp:1560
&gt; +    return finalTrackPosition - initialTrackPosition + tracks[span.resolvedFinalPosition() - 1].baseSize();

Does something prevent this from underflowing?

&gt; Source/WebCore/rendering/style/GridCoordinate.h:90
&gt; +        GridSpanIterator(unsigned v)
&gt; +            : value(v)
&gt; +        {
&gt; +        }

Even in a case like this our style normally doesn’t embrace one-letter names in WebKit. Could either use &quot;value&quot; (OK to use the same name for the argument, it works in this case) or &quot;initialValue&quot;.

&gt; Source/WebCore/rendering/style/GridCoordinate.h:93
&gt; +        unsigned operator++() { return value++; }

Normally we’d implement both pre-increment and post-increment, or leave out the return value. This uses the C++ syntax for implementing pre-increment, but it implements post-increment. That will be a problem. If I write:

    unsigned x = ++y;

And &quot;y&quot; is a GridSpanIterator, x will have the value *before* incrementing.

&gt; Source/WebCore/rendering/style/GridCoordinate.h:94
&gt; +        bool operator!=(GridSpanIterator other) const { return value != other.value; }

Peculiar to implement != but not ==.

&gt; Source/WebCore/rendering/style/GridResolvedPosition.cpp:201
&gt; +            return GridSpan::definiteGridSpan(resolvedOppositePosition -1, resolvedOppositePosition);

Missing space here after the &quot;-&quot;.

&gt; Source/WebCore/rendering/style/GridResolvedPosition.h:49
&gt; +// This is a utility class with all the code related to grid items positions resolution.

I don’t know what “a utility class” is. I think we should avoid that terminology.

&gt; Source/WebCore/rendering/style/GridResolvedPosition.h:58
&gt; +    static GridSpan resolveGridPositionsFromAutoPlacementPosition(const RenderStyle&amp;, const RenderBox&amp;, GridTrackSizingDirection, unsigned);
&gt;      static GridSpan resolveGridPositionsFromStyle(const RenderStyle&amp;, const RenderBox&amp;, GridTrackSizingDirection);
&gt;      static unsigned explicitGridColumnCount(const RenderStyle&amp;);
&gt;      static unsigned explicitGridRowCount(const RenderStyle&amp;);
&gt;      static bool isNonExistentNamedLineOrArea(const String&amp; lineName, const RenderStyle&amp;, GridPositionSide);

I suggest omitting the blank lines before and after these functions inside the class definition.

I’m not sure these functions benefit much from being grouped in a class. Given their names, I think they would be fine as WebCore-namespace-level functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169409</commentid>
    <comment_count>3</comment_count>
      <attachid>272557</attachid>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2016-03-01 03:59:12 -0800</bug_when>
    <thetext>Created attachment 272557
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169413</commentid>
    <comment_count>4</comment_count>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2016-03-01 04:07:36 -0800</bug_when>
    <thetext>Thanks for the review.

(In reply to comment #2)
&gt; I see a lot of +1 and -1 here and I don’t know how we are certain that
&gt; overflow and underflow are not an issue in each case. I commented on the
&gt; first few I saw but then stopped because there were so many.

In the patch I&apos;m adding an ASSERT in GridSpan::resolvedFinalPosition():
    ASSERT(m_resolvedFinalPosition);

And when we&apos;re doing &quot;-1&quot; we&apos;re always getting the final position and subtracting one. So we should be safe.

On top of that, this will be changed to &quot;int&quot; in next patches.
As we need to store negative values too.

&gt; &gt; Source/WebCore/ChangeLog:2429
&gt; &gt; -        No new tests, no change of behavior.
&gt; &gt; +        no new tests, no change of behavior.
&gt; 
&gt; Why this change?

This was a mistake. Removed it.

&gt; &gt; Source/WebCore/rendering/RenderGrid.cpp:665
&gt; &gt; +    for (auto resolvedPosition : tracksSpan) {
&gt; &gt; +        unsigned trackIndex = resolvedPosition;
&gt; 
&gt; Seems like trackIndex and resolvedPosition are the same thing. I suggest
&gt; something more like this:
&gt; 
&gt;     for (auto trackIndex : tracksSpan) {

Ok.

&gt; &gt; Source/WebCore/rendering/RenderGrid.cpp:868
&gt; &gt; +    const unsigned trackPosition = span.resolvedInitialPosition();
&gt; 
&gt; const here is OK bu not all that helpful

Removed const.

&gt; &gt; Source/WebCore/rendering/RenderGrid.cpp:1486
&gt; &gt; +        || (positions.resolvedFinalPosition() - 1 &gt; lastTrackIndex);
&gt; 
&gt; Is there something that prevents this from underflowing?

As explained before, the ASSERT in GridSpan::resolvedFinalPosition().

&gt; &gt; Source/WebCore/rendering/RenderGrid.cpp:1491
&gt; &gt; +    unsigned finalPosition = endIsAuto ? lastPosition : positions.resolvedFinalPosition() - 1;
&gt; 
&gt; Is there something that prevents this from underflowing?

Ditto.

&gt; &gt; Source/WebCore/rendering/RenderGrid.cpp:1557
&gt; &gt; +    LayoutUnit finalTrackPosition = linePositions[span.resolvedFinalPosition() - 1];
&gt; 
&gt; Does something prevent this from underflowing?

Ditto.

&gt; &gt; Source/WebCore/rendering/RenderGrid.cpp:1560
&gt; &gt; +    return finalTrackPosition - initialTrackPosition + tracks[span.resolvedFinalPosition() - 1].baseSize();
&gt; 
&gt; Does something prevent this from underflowing?

Ditto.

&gt; &gt; Source/WebCore/rendering/style/GridCoordinate.h:90
&gt; &gt; +        GridSpanIterator(unsigned v)
&gt; &gt; +            : value(v)
&gt; &gt; +        {
&gt; &gt; +        }
&gt; 
&gt; Even in a case like this our style normally doesn’t embrace one-letter names
&gt; in WebKit. Could either use &quot;value&quot; (OK to use the same name for the
&gt; argument, it works in this case) or &quot;initialValue&quot;.

Done.

&gt; &gt; Source/WebCore/rendering/style/GridCoordinate.h:93
&gt; &gt; +        unsigned operator++() { return value++; }
&gt; 
&gt; Normally we’d implement both pre-increment and post-increment, or leave out
&gt; the return value. This uses the C++ syntax for implementing pre-increment,
&gt; but it implements post-increment. That will be a problem. If I write:
&gt; 
&gt;     unsigned x = ++y;
&gt; 
&gt; And &quot;y&quot; is a GridSpanIterator, x will have the value *before* incrementing.

Yes, this is wrong.

The iterator was implementing *, ++ and != because it was the only things mandatory for having it working.
Anyway, I&apos;ve changed it and now it&apos;s just overriding * and &amp;. That&apos;s enough and hopefully more clear.

&gt; &gt; Source/WebCore/rendering/style/GridResolvedPosition.cpp:201
&gt; &gt; +            return GridSpan::definiteGridSpan(resolvedOppositePosition -1, resolvedOppositePosition);
&gt; 
&gt; Missing space here after the &quot;-&quot;.

Fixed.

&gt; &gt; Source/WebCore/rendering/style/GridResolvedPosition.h:49
&gt; &gt; +// This is a utility class with all the code related to grid items positions resolution.
&gt; 
&gt; I don’t know what “a utility class” is. I think we should avoid that
&gt; terminology.

Removed it.

&gt; &gt; Source/WebCore/rendering/style/GridResolvedPosition.h:58
&gt; &gt; +    static GridSpan resolveGridPositionsFromAutoPlacementPosition(const RenderStyle&amp;, const RenderBox&amp;, GridTrackSizingDirection, unsigned);
&gt; &gt;      static GridSpan resolveGridPositionsFromStyle(const RenderStyle&amp;, const RenderBox&amp;, GridTrackSizingDirection);
&gt; &gt;      static unsigned explicitGridColumnCount(const RenderStyle&amp;);
&gt; &gt;      static unsigned explicitGridRowCount(const RenderStyle&amp;);
&gt; &gt;      static bool isNonExistentNamedLineOrArea(const String&amp; lineName, const RenderStyle&amp;, GridPositionSide);
&gt; 
&gt; I suggest omitting the blank lines before and after these functions inside
&gt; the class definition.

Done.

&gt; I’m not sure these functions benefit much from being grouped in a class.
&gt; Given their names, I think they would be fine as WebCore-namespace-level
&gt; functions.

Goo idea, maybe we can think about this in a follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169445</commentid>
    <comment_count>5</comment_count>
      <attachid>272557</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-01 08:54:12 -0800</bug_when>
    <thetext>Comment on attachment 272557
Patch

Clearing flags on attachment: 272557

Committed r197400: &lt;http://trac.webkit.org/changeset/197400&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169446</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-01 08:54:16 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272493</attachid>
            <date>2016-02-29 09:28:48 -0800</date>
            <delta_ts>2016-03-01 03:59:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154818-20160229182831.patch</filename>
            <type>text/plain</type>
            <size>47953</size>
            <attacher name="Manuel Rego Casasnovas">rego</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3MzI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDJjODc0MjQyODhjZTI3
MzY1OWQ0ZWJjZjNhNmQ1OGM4MDZhYWFhZS4uM2Q4ZmQxOGU1MjdlZjY5MTBhMDljOWQ2YTgzYmFk
MDE3MDc0OTZmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDE2LTAyLTI5ICBNYW51
ZWwgUmVnbyBDYXNhc25vdmFzICA8cmVnb0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gR2V0IHJpZCBvZiBHcmlkUmVzb2x2ZWRQb3NpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0ODE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR3JpZFJlc29sdmVkUG9zaXRpb24gd2FzIGEgc21h
bGwgY2xhc3MganVzdCB3cmFwcGluZyBhIHVuc2lnbmVkLgorICAgICAgICBJbiB0aGUgZnV0dXJl
IGl0IHNob3VsZCBhY3R1YWxseSB3cmFwIGFuIGludGVnZXIsCisgICAgICAgIGFzIHdlIHdhbnQg
dG8gc3VwcG9ydCBpbXBsaWNpdCB0cmFja3MgYmVmb3JlIHRoZSBleHBsaWNpdCBncmlkLgorCisg
ICAgICAgIFRoZSBjbGFzcyBpdHNlbGYgaXMgbm90IHByb3ZpZGluZyBhbnkgYmVuZWZpdCwKKyAg
ICAgICAgc28gd2UgY2FuIGdldCByaWQgb2YgaXQgYW5kIHN0b3JlIGRpcmVjdGx5IDIgdW5zaWdu
ZWQgaW4gR3JpZFNwYW4uCisKKyAgICAgICAgVGhpcyB3aWxsIG1ha2Ugc2ltcGxlciBmdXR1cmUg
Y2hhbmdlcyByZWxhdGVkIHRvIHRoaXMgdGFzay4KKworICAgICAgICBXZSBrZWVwIHRoZSBjbGFz
cyBqdXN0IGFzIGEgdXRpbGl0eSBmb3IgdGhlIG1ldGhvZHMKKyAgICAgICAgdGhhdCBkZWFsIHdp
dGggdGhlIHBvc2l0aW9ucyByZXNvbHV0aW9uLgorICAgICAgICBCdXQgaXQgc2hvdWxkIGJlIHJl
bmFtZWQgaW4gYSBmb2xsb3ctdXAgcGF0Y2guCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBj
aGFuZ2Ugb2YgYmVoYXZpb3IuCisKKyAgICAgICAgKiBjc3MvQ1NTR3JpZFRlbXBsYXRlQXJlYXNW
YWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdHJpbmdGb3JQb3NpdGlvbik6CisgICAgICAg
ICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNl
R3JpZFRlbXBsYXRlQXJlYXNSb3cpOgorICAgICAgICAqIGNzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlSW1w
bGljaXROYW1lZEdyaWRMaW5lc0Zyb21HcmlkQXJlYSk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckdyaWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Y29tcHV0ZVVzZWRC
cmVhZHRoT2ZHcmlkVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmZpbmRG
bGV4RmFjdG9yVW5pdFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6c3Bhbm5p
bmdJdGVtQ3Jvc3Nlc0ZsZXhpYmxlU2l6ZWRUcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyR3JpZDo6cmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNrU2l6aW5nRnVuY3Rpb25zRm9yTm9uU3Bh
bm5pbmdJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpyZXNvbHZlQ29udGVu
dEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnNGb3JJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJHcmlkOjppbnNlcnRJdGVtSW50b0dyaWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
R3JpZDo6cG9wdWxhdGVFeHBsaWNpdEdyaWRBbmRPcmRlckl0ZXJhdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckdyaWQ6OmNyZWF0ZUVtcHR5R3JpZEFyZWFBdFNwZWNpZmllZFBvc2l0aW9u
c091dHNpZGVHcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBsYWNlU3BlY2lm
aWVkTWFqb3JBeGlzSXRlbXNPbkdyaWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6
cGxhY2VBdXRvTWFqb3JBeGlzSXRlbU9uR3JpZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJH
cmlkOjpvZmZzZXRBbmRCcmVhZHRoRm9yUG9zaXRpb25lZENoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckdyaWQ6OmdyaWRBcmVhQnJlYWR0aEZvckNoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckdyaWQ6OmdyaWRBcmVhQnJlYWR0aEZvckNoaWxkSW5jbHVkaW5nQWxpZ25tZW50
T2Zmc2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpjb2x1bW5BeGlzT2Zmc2V0
Rm9yQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cm93QXhpc09mZnNldEZv
ckNoaWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvR3JpZENvb3JkaW5hdGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyaWRTcGFuOjpkZWZpbml0ZUdyaWRTcGFuKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyaWRTcGFuOjppbnRlZ2VyU3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpHcmlkU3Bh
bjo6cmVzb2x2ZWRJbml0aWFsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFNwYW46
OnJlc29sdmVkRmluYWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmlkU3Bhbjo6R3Jp
ZFNwYW5JdGVyYXRvcjo6R3JpZFNwYW5JdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmlk
U3Bhbjo6R3JpZFNwYW5JdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
aWRTcGFuOjpHcmlkU3Bhbkl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyaWRTcGFuOjpHcmlkU3Bhbkl0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyaWRTcGFuOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpHcmlkU3Bhbjo6ZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyaWRTcGFuOjpHcmlkU3Bhbik6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJl
c29sdmVOYW1lZEdyaWRMaW5lUG9zaXRpb25Gcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
cmVzb2x2ZVJvd1N0YXJ0Q29sdW1uU3RhcnROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bw
b3NpdGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlUm93RW5kQ29sdW1uRW5k
TmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6cmVzb2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3Np
dGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVz
b2x2ZUdyaWRQb3NpdGlvbnNGcm9tQXV0b1BsYWNlbWVudFBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OnJlc29sdmVHcmlkUG9zaXRpb25Gcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uaDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6b3BlcmF0b3Iq
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpvcGVy
YXRvcisrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9u
OjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBv
c2l0aW9uOjpvcGVyYXRvciE9KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyaWRSZXNv
bHZlZFBvc2l0aW9uOjpvcGVyYXRvcjwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jp
ZFJlc29sdmVkUG9zaXRpb246Om9wZXJhdG9yPik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6b3BlcmF0b3I8PSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6b3BlcmF0b3I+PSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6dG9JbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JpZFJlc29sdmVkUG9zaXRpb246Om5leHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JpZFJlc29sdmVkUG9zaXRpb246OnByZXYpOiBEZWxldGVkLgorCiAy
MDE2LTAyLTI4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICA6
OnNsb3R0ZWQgZG9lc24ndCB3b3JrIGluIG5lc3RlZCBzaGFkb3cgdHJlZXMKQEAgLTIzNDcsNyAr
MjQyNiw3IEBACiAgICAgICAgIE9uY2UgUmVuZGVyR3JpZDo6cGxhY2VJdGVtc09uR3JpZCgpIGlz
IG92ZXIsCiAgICAgICAgIGFsbCB0aGUgaXRlbXMgd2lsbCBoYXZlIGEgZGVmaW5pdGUgcG9zaXRp
b24gaW4gYm90aCBheGlzLgogCi0gICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gY2hhbmdlIG9mIGJl
aGF2aW9yLgorICAgICAgICBubyBuZXcgdGVzdHMsIG5vIGNoYW5nZSBvZiBiZWhhdmlvci4KIAog
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJHcmlkLmNwcDoKICAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckdyaWQ6Omluc2VydEl0ZW1JbnRvR3JpZCk6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5jcHAKaW5kZXggYjVkZWZjMTUxZjg4NmQxODdmNjRl
MjhlMGI3YTc4ZmNhMjExYWZhYS4uZDI3MmI3M2FkMjc3ZjU1ODhlNDEyNzA5MGVhYmM0MjgzM2M3
YmJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyaWRUZW1wbGF0ZUFyZWFz
VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmlkVGVtcGxhdGVBcmVhc1Zh
bHVlLmNwcApAQCAtNTUsMTMgKzU1LDEzIEBAIHN0YXRpYyBTdHJpbmcgc3RyaW5nRm9yUG9zaXRp
b24oY29uc3QgTmFtZWRHcmlkQXJlYU1hcCYgZ3JpZEFyZWFNYXAsIHNpemVfdCByb3csCiAKICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGl0IDogZ3JpZEFyZWFNYXApIHsKICAgICAgICAgY29uc3QgR3Jp
ZENvb3JkaW5hdGUmIGNvb3JkaW5hdGUgPSBpdC52YWx1ZTsKLSAgICAgICAgaWYgKHJvdyA+PSBj
b29yZGluYXRlLnJvd3MucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKS50b0ludCgpICYmIHJvdyA8
IGNvb3JkaW5hdGUucm93cy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS50b0ludCgpKQorICAgICAg
ICBpZiAocm93ID49IGNvb3JkaW5hdGUucm93cy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpICYm
IHJvdyA8IGNvb3JkaW5hdGUucm93cy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKSkKICAgICAgICAg
ICAgIGNhbmRpZGF0ZXMuYXBwZW5kKGl0LmtleSk7CiAgICAgfQogCiAgICAgZm9yIChjb25zdCBh
dXRvJiBpdCA6IGdyaWRBcmVhTWFwKSB7CiAgICAgICAgIGNvbnN0IEdyaWRDb29yZGluYXRlJiBj
b29yZGluYXRlID0gaXQudmFsdWU7Ci0gICAgICAgIGlmIChjb2x1bW4gPj0gY29vcmRpbmF0ZS5j
b2x1bW5zLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCkudG9JbnQoKSAmJiBjb2x1bW4gPCBjb29y
ZGluYXRlLmNvbHVtbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkudG9JbnQoKSAmJiBjYW5kaWRh
dGVzLmNvbnRhaW5zKGl0LmtleSkpCisgICAgICAgIGlmIChjb2x1bW4gPj0gY29vcmRpbmF0ZS5j
b2x1bW5zLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCkgJiYgY29sdW1uIDwgY29vcmRpbmF0ZS5j
b2x1bW5zLnJlc29sdmVkRmluYWxQb3NpdGlvbigpICYmIGNhbmRpZGF0ZXMuY29udGFpbnMoaXQu
a2V5KSkKICAgICAgICAgICAgIHJldHVybiBpdC5rZXk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuY3BwCmluZGV4IGNlMmZmYTBkZTBkYzQ1MDk2MjA5NTZmMDMwMTQ3NzY4ZjBhOTRkZGEu
LjIxY2I0M2Q0MjBhN2VmNWJiOTQ2MjcyZGUyMmMzMzk3ZTk2MmQ0OWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuY3BwCkBAIC02MjQ1LDE4ICs2MjQ1LDE4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUdyaWRUZW1wbGF0ZUFyZWFzUm93KE5hbWVkR3JpZEFyZWFNYXAmIGdyaWRBcmVhTWFwLCBjb25z
dCB1CiAKICAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY2hlY2tzIHRlc3QgdGhhdCB0aGUg
Z3JpZCBhcmVhIGlzIGEgc2luZ2xlIGZpbGxlZC1pbiByZWN0YW5nbGUuCiAgICAgICAgICAgICAv
LyAxLiBUaGUgbmV3IHJvdyBpcyBhZGphY2VudCB0byB0aGUgcHJldmlvdXNseSBwYXJzZWQgcm93
LgotICAgICAgICAgICAgaWYgKHJvd0NvdW50ICE9IGdyaWRDb29yZGluYXRlLnJvd3MucmVzb2x2
ZWRGaW5hbFBvc2l0aW9uKCkudG9JbnQoKSkKKyAgICAgICAgICAgIGlmIChyb3dDb3VudCAhPSBn
cmlkQ29vcmRpbmF0ZS5yb3dzLnJlc29sdmVkRmluYWxQb3NpdGlvbigpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgLy8gMi4gVGhlIG5ldyBhcmVhIHN0YXJ0
cyBhdCB0aGUgc2FtZSBwb3NpdGlvbiBhcyB0aGUgcHJldmlvdXNseSBwYXJzZWQgYXJlYS4KLSAg
ICAgICAgICAgIGlmIChjdXJyZW50Q29sdW1uICE9IGdyaWRDb29yZGluYXRlLmNvbHVtbnMucmVz
b2x2ZWRJbml0aWFsUG9zaXRpb24oKS50b0ludCgpKQorICAgICAgICAgICAgaWYgKGN1cnJlbnRD
b2x1bW4gIT0gZ3JpZENvb3JkaW5hdGUuY29sdW1ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgLy8gMy4gVGhl
IG5ldyBhcmVhIGVuZHMgYXQgdGhlIHNhbWUgcG9zaXRpb24gYXMgdGhlIHByZXZpb3VzbHkgcGFy
c2VkIGFyZWEuCi0gICAgICAgICAgICBpZiAobG9va0FoZWFkQ29sdW1uICE9IGdyaWRDb29yZGlu
YXRlLmNvbHVtbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkudG9JbnQoKSkKKyAgICAgICAgICAg
IGlmIChsb29rQWhlYWRDb2x1bW4gIT0gZ3JpZENvb3JkaW5hdGUuY29sdW1ucy5yZXNvbHZlZEZp
bmFsUG9zaXRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAg
ICAgIGdyaWRDb29yZGluYXRlLnJvd3MgPSBHcmlkU3Bhbjo6ZGVmaW5pdGVHcmlkU3Bhbihncmlk
Q29vcmRpbmF0ZS5yb3dzLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCksIGdyaWRDb29yZGluYXRl
LnJvd3MucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkubmV4dCgpKTsKKyAgICAgICAgICAgIGdyaWRD
b29yZGluYXRlLnJvd3MgPSBHcmlkU3Bhbjo6ZGVmaW5pdGVHcmlkU3BhbihncmlkQ29vcmRpbmF0
ZS5yb3dzLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCksIGdyaWRDb29yZGluYXRlLnJvd3MucmVz
b2x2ZWRGaW5hbFBvc2l0aW9uKCkgKyAxKTsKICAgICAgICAgfQogICAgICAgICBjdXJyZW50Q29s
dW1uID0gbG9va0FoZWFkQ29sdW1uIC0gMTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVCdWlsZGVyQ29udmVydGVyLmgKaW5kZXggMWNkM2Q3OGM0OWIxNWI2MDA3ZmU3ZjQ1NTJiNjA5
ZjZkZmYwNjc4Zi4uNjc3YTUzNzBhMTAxM2IzZWY4MTYzMGYzMmY3M2IwMTZiOGVkYjY1ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaApAQCAtODg2LDEyICs4
ODYsMTIgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVJbXBsaWNp
dE5hbWVkR3JpZExpbmVzRnJvbUdyaWRBcmVhKGNvbnMKICAgICAgICAgR3JpZFNwYW4gYXJlYVNw
YW4gPSBkaXJlY3Rpb24gPT0gRm9yUm93cyA/IGFyZWEudmFsdWUucm93cyA6IGFyZWEudmFsdWUu
Y29sdW1uczsKICAgICAgICAgewogICAgICAgICAgICAgYXV0byYgc3RhcnRWZWN0b3IgPSBuYW1l
ZEdyaWRMaW5lcy5hZGQoYXJlYS5rZXkgKyAiLXN0YXJ0IiwgVmVjdG9yPHVuc2lnbmVkPigpKS5p
dGVyYXRvci0+dmFsdWU7Ci0gICAgICAgICAgICBzdGFydFZlY3Rvci5hcHBlbmQoYXJlYVNwYW4u
cmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKS50b0ludCgpKTsKKyAgICAgICAgICAgIHN0YXJ0VmVj
dG9yLmFwcGVuZChhcmVhU3Bhbi5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpKTsKICAgICAgICAg
ICAgIHN0ZDo6c29ydChzdGFydFZlY3Rvci5iZWdpbigpLCBzdGFydFZlY3Rvci5lbmQoKSk7CiAg
ICAgICAgIH0KICAgICAgICAgewogICAgICAgICAgICAgYXV0byYgZW5kVmVjdG9yID0gbmFtZWRH
cmlkTGluZXMuYWRkKGFyZWEua2V5ICsgIi1lbmQiLCBWZWN0b3I8dW5zaWduZWQ+KCkpLml0ZXJh
dG9yLT52YWx1ZTsKLSAgICAgICAgICAgIGVuZFZlY3Rvci5hcHBlbmQoYXJlYVNwYW4ucmVzb2x2
ZWRGaW5hbFBvc2l0aW9uKCkudG9JbnQoKSk7CisgICAgICAgICAgICBlbmRWZWN0b3IuYXBwZW5k
KGFyZWFTcGFuLnJlc29sdmVkRmluYWxQb3NpdGlvbigpKTsKICAgICAgICAgICAgIHN0ZDo6c29y
dChlbmRWZWN0b3IuYmVnaW4oKSwgZW5kVmVjdG9yLmVuZCgpKTsKICAgICAgICAgfQogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcAppbmRleCBiZTczODkzNzljZDg5
NmNlYWYyYzUxYWE5ZGNiMTY4OWVlNzYyYmVjLi4wZDIxMzU0NGI2NDg0NDkxYzVjMDU0M2U1MDEx
NjFjMjdjYmI4ODc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
R3JpZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCkBA
IC01NzcsNyArNTc3LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpjb21wdXRlVXNlZEJyZWFkdGhPZkdy
aWRUcmFja3MoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGkKICAgICAgICAgICAgICAg
ICBjb25zdCBHcmlkU3BhbiBzcGFuID0gY2FjaGVkR3JpZFNwYW4oKmdyaWRJdGVtLCBkaXJlY3Rp
b24pOwogCiAgICAgICAgICAgICAgICAgLy8gRG8gbm90IGluY2x1ZGUgYWxyZWFkeSBwcm9jZXNz
ZWQgaXRlbXMuCi0gICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmIHNwYW4ucmVzb2x2ZWRJbml0
aWFsUG9zaXRpb24oKS50b0ludCgpIDw9IGZsZXhpYmxlU2l6ZWRUcmFja3NJbmRleFtpIC0gMV0p
CisgICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmIHNwYW4ucmVzb2x2ZWRJbml0aWFsUG9zaXRp
b24oKSA8PSBmbGV4aWJsZVNpemVkVHJhY2tzSW5kZXhbaSAtIDFdKQogICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgIGZsZXhGcmFjdGlvbiA9IHN0ZDo6bWF4
KGZsZXhGcmFjdGlvbiwgZmluZEZsZXhGYWN0b3JVbml0U2l6ZSh0cmFja3MsIHNwYW4sIGRpcmVj
dGlvbiwgbWF4Q29udGVudEZvckNoaWxkKCpncmlkSXRlbSwgZGlyZWN0aW9uLCBzaXppbmdEYXRh
LmNvbHVtblRyYWNrcykpKTsKQEAgLTY2MSw4ICs2NjEsOCBAQCBkb3VibGUgUmVuZGVyR3JpZDo6
ZmluZEZsZXhGYWN0b3JVbml0U2l6ZShjb25zdCBWZWN0b3I8R3JpZFRyYWNrPiYgdHJhY2tzLCBj
b25zdAogCiAgICAgZG91YmxlIGZsZXhGYWN0b3JTdW0gPSAwOwogICAgIFZlY3Rvcjx1bnNpZ25l
ZCwgOD4gZmxleGlibGVUcmFja3NJbmRleGVzOwotICAgIGZvciAoY29uc3QgYXV0byYgcmVzb2x2
ZWRQb3NpdGlvbiA6IHRyYWNrc1NwYW4pIHsKLSAgICAgICAgdW5zaWduZWQgdHJhY2tJbmRleCA9
IHJlc29sdmVkUG9zaXRpb24udG9JbnQoKTsKKyAgICBmb3IgKGF1dG8gcmVzb2x2ZWRQb3NpdGlv
biA6IHRyYWNrc1NwYW4pIHsKKyAgICAgICAgdW5zaWduZWQgdHJhY2tJbmRleCA9IHJlc29sdmVk
UG9zaXRpb247CiAgICAgICAgIEdyaWRUcmFja1NpemUgdHJhY2tTaXplID0gZ3JpZFRyYWNrU2l6
ZShkaXJlY3Rpb24sIHRyYWNrSW5kZXgpOwogICAgICAgICBpZiAoIXRyYWNrU2l6ZS5tYXhUcmFj
a0JyZWFkdGgoKS5pc0ZsZXgoKSkKICAgICAgICAgICAgIGxlZnRPdmVyU3BhY2UgLT0gdHJhY2tz
W3RyYWNrSW5kZXhdLmJhc2VTaXplKCk7CkBAIC04MTEsNyArODExLDcgQEAgcHJpdmF0ZToKIGJv
b2wgUmVuZGVyR3JpZDo6c3Bhbm5pbmdJdGVtQ3Jvc3Nlc0ZsZXhpYmxlU2l6ZWRUcmFja3MoY29u
c3QgR3JpZFNwYW4mIGl0ZW1TcGFuLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9u
KSBjb25zdAogewogICAgIGZvciAoYXV0byB0cmFja1Bvc2l0aW9uIDogaXRlbVNwYW4pIHsKLSAg
ICAgICAgY29uc3QgR3JpZFRyYWNrU2l6ZSYgdHJhY2tTaXplID0gZ3JpZFRyYWNrU2l6ZShkaXJl
Y3Rpb24sIHRyYWNrUG9zaXRpb24udG9JbnQoKSk7CisgICAgICAgIGNvbnN0IEdyaWRUcmFja1Np
emUmIHRyYWNrU2l6ZSA9IGdyaWRUcmFja1NpemUoZGlyZWN0aW9uLCB0cmFja1Bvc2l0aW9uKTsK
ICAgICAgICAgaWYgKHRyYWNrU2l6ZS5taW5UcmFja0JyZWFkdGgoKS5pc0ZsZXgoKSB8fCB0cmFj
a1NpemUubWF4VHJhY2tCcmVhZHRoKCkuaXNGbGV4KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CkBAIC04NjUsOCArODY1LDggQEAgdm9pZCBSZW5kZXJHcmlkOjpyZXNvbHZlQ29u
dGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnMoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW8KIAog
dm9pZCBSZW5kZXJHcmlkOjpyZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnNG
b3JOb25TcGFubmluZ0l0ZW1zKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNv
bnN0IEdyaWRTcGFuJiBzcGFuLCBSZW5kZXJCb3gmIGdyaWRJdGVtLCBHcmlkVHJhY2smIHRyYWNr
LCBWZWN0b3I8R3JpZFRyYWNrPiYgY29sdW1uVHJhY2tzKQogewotICAgIGNvbnN0IEdyaWRSZXNv
bHZlZFBvc2l0aW9uIHRyYWNrUG9zaXRpb24gPSBzcGFuLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9u
KCk7Ci0gICAgR3JpZFRyYWNrU2l6ZSB0cmFja1NpemUgPSBncmlkVHJhY2tTaXplKGRpcmVjdGlv
biwgdHJhY2tQb3NpdGlvbi50b0ludCgpKTsKKyAgICBjb25zdCB1bnNpZ25lZCB0cmFja1Bvc2l0
aW9uID0gc3Bhbi5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpOworICAgIEdyaWRUcmFja1NpemUg
dHJhY2tTaXplID0gZ3JpZFRyYWNrU2l6ZShkaXJlY3Rpb24sIHRyYWNrUG9zaXRpb24pOwogCiAg
ICAgaWYgKHRyYWNrU2l6ZS5oYXNNaW5Db250ZW50TWluVHJhY2tCcmVhZHRoKCkpCiAgICAgICAg
IHRyYWNrLnNldEJhc2VTaXplKHN0ZDo6bWF4KHRyYWNrLmJhc2VTaXplKCksIG1pbkNvbnRlbnRG
b3JDaGlsZChncmlkSXRlbSwgZGlyZWN0aW9uLCBjb2x1bW5UcmFja3MpKSk7CkBAIC0xMDIwLDkg
KzEwMjAsOSBAQCB2b2lkIFJlbmRlckdyaWQ6OnJlc29sdmVDb250ZW50QmFzZWRUcmFja1Npemlu
Z0Z1bmN0aW9uc0Zvckl0ZW1zKEdyaWRUcmFja1NpemluZwogICAgICAgICBzaXppbmdEYXRhLmZp
bHRlcmVkVHJhY2tzLnNocmluaygwKTsKICAgICAgICAgc2l6aW5nRGF0YS5ncm93QmV5b25kR3Jv
d3RoTGltaXRzVHJhY2tzLnNocmluaygwKTsKICAgICAgICAgTGF5b3V0VW5pdCBzcGFubmluZ1Ry
YWNrc1NpemU7Ci0gICAgICAgIGZvciAoYXV0byYgdHJhY2tQb3NpdGlvbiA6IGl0ZW1TcGFuKSB7
Ci0gICAgICAgICAgICBjb25zdCBHcmlkVHJhY2tTaXplJiB0cmFja1NpemUgPSBncmlkVHJhY2tT
aXplKGRpcmVjdGlvbiwgdHJhY2tQb3NpdGlvbi50b0ludCgpKTsKLSAgICAgICAgICAgIEdyaWRU
cmFjayYgdHJhY2sgPSAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gc2l6aW5nRGF0YS5jb2x1
bW5UcmFja3NbdHJhY2tQb3NpdGlvbi50b0ludCgpXSA6IHNpemluZ0RhdGEucm93VHJhY2tzW3Ry
YWNrUG9zaXRpb24udG9JbnQoKV07CisgICAgICAgIGZvciAoYXV0byB0cmFja1Bvc2l0aW9uIDog
aXRlbVNwYW4pIHsKKyAgICAgICAgICAgIGNvbnN0IEdyaWRUcmFja1NpemUmIHRyYWNrU2l6ZSA9
IGdyaWRUcmFja1NpemUoZGlyZWN0aW9uLCB0cmFja1Bvc2l0aW9uKTsKKyAgICAgICAgICAgIEdy
aWRUcmFjayYgdHJhY2sgPSAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gc2l6aW5nRGF0YS5j
b2x1bW5UcmFja3NbdHJhY2tQb3NpdGlvbl0gOiBzaXppbmdEYXRhLnJvd1RyYWNrc1t0cmFja1Bv
c2l0aW9uXTsKICAgICAgICAgICAgIHNwYW5uaW5nVHJhY2tzU2l6ZSArPSB0cmFja1NpemVGb3JU
cmFja1NpemVDb21wdXRhdGlvblBoYXNlKHBoYXNlLCB0cmFjaywgRm9yYmlkSW5maW5pdHkpOwog
ICAgICAgICAgICAgaWYgKCFzaG91bGRQcm9jZXNzVHJhY2tGb3JUcmFja1NpemVDb21wdXRhdGlv
blBoYXNlKHBoYXNlLCB0cmFja1NpemUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAt
MTEzOSwxMSArMTEzOSwxMSBAQCB2b2lkIFJlbmRlckdyaWQ6OmVuc3VyZUdyaWRTaXplKHVuc2ln
bmVkIG1heGltdW1Sb3dTaXplLCB1bnNpZ25lZCBtYXhpbXVtQ29sdW1uUwogdm9pZCBSZW5kZXJH
cmlkOjppbnNlcnRJdGVtSW50b0dyaWQoUmVuZGVyQm94JiBjaGlsZCwgY29uc3QgR3JpZENvb3Jk
aW5hdGUmIGNvb3JkaW5hdGUpCiB7CiAgICAgQVNTRVJUKGNvb3JkaW5hdGUucm93cy5pc0RlZmlu
aXRlKCkgJiYgY29vcmRpbmF0ZS5jb2x1bW5zLmlzRGVmaW5pdGUoKSk7Ci0gICAgZW5zdXJlR3Jp
ZFNpemUoY29vcmRpbmF0ZS5yb3dzLnJlc29sdmVkRmluYWxQb3NpdGlvbigpLnRvSW50KCksIGNv
b3JkaW5hdGUuY29sdW1ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS50b0ludCgpKTsKKyAgICBl
bnN1cmVHcmlkU2l6ZShjb29yZGluYXRlLnJvd3MucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCksIGNv
b3JkaW5hdGUuY29sdW1ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKSk7CiAKLSAgICBmb3IgKGF1
dG8mIHJvdyA6IGNvb3JkaW5hdGUucm93cykgewotICAgICAgICBmb3IgKGF1dG8mIGNvbHVtbiA6
IGNvb3JkaW5hdGUuY29sdW1ucykKLSAgICAgICAgICAgIG1fZ3JpZFtyb3cudG9JbnQoKV1bY29s
dW1uLnRvSW50KCldLmFwcGVuZCgmY2hpbGQpOworICAgIGZvciAoYXV0byByb3cgOiBjb29yZGlu
YXRlLnJvd3MpIHsKKyAgICAgICAgZm9yIChhdXRvIGNvbHVtbiA6IGNvb3JkaW5hdGUuY29sdW1u
cykKKyAgICAgICAgICAgIG1fZ3JpZFtyb3ddW2NvbHVtbl0uYXBwZW5kKCZjaGlsZCk7CiAgICAg
fQogfQogCkBAIC0xMjA1LDIwICsxMjA1LDIwIEBAIHZvaWQgUmVuZGVyR3JpZDo6cG9wdWxhdGVF
eHBsaWNpdEdyaWRBbmRPcmRlckl0ZXJhdG9yKCkKIAogICAgICAgICBHcmlkU3BhbiByb3dQb3Np
dGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5
bGUoc3R5bGUoKSwgKmNoaWxkLCBGb3JSb3dzKTsKICAgICAgICAgaWYgKHJvd1Bvc2l0aW9ucy5p
c0RlZmluaXRlKCkpIHsKLSAgICAgICAgICAgIG1heGltdW1Sb3dJbmRleCA9IHN0ZDo6bWF4KG1h
eGltdW1Sb3dJbmRleCwgcm93UG9zaXRpb25zLnJlc29sdmVkRmluYWxQb3NpdGlvbigpLnRvSW50
KCkpOworICAgICAgICAgICAgbWF4aW11bVJvd0luZGV4ID0gc3RkOjptYXgobWF4aW11bVJvd0lu
ZGV4LCByb3dQb3NpdGlvbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgLy8gR3JvdyB0aGUgZ3JpZCBmb3IgaXRlbXMgd2l0aCBhIGRlZmlu
aXRlIHJvdyBzcGFuLCBnZXR0aW5nIHRoZSBsYXJnZXN0IHN1Y2ggc3Bhbi4KLSAgICAgICAgICAg
IEdyaWRTcGFuIHBvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBv
c2l0aW9uc0Zyb21BdXRvUGxhY2VtZW50UG9zaXRpb24oc3R5bGUoKSwgKmNoaWxkLCBGb3JSb3dz
LCBHcmlkUmVzb2x2ZWRQb3NpdGlvbigwKSk7Ci0gICAgICAgICAgICBtYXhpbXVtUm93SW5kZXgg
PSBzdGQ6Om1heChtYXhpbXVtUm93SW5kZXgsIHBvc2l0aW9ucy5yZXNvbHZlZEZpbmFsUG9zaXRp
b24oKS50b0ludCgpKTsKKyAgICAgICAgICAgIEdyaWRTcGFuIHBvc2l0aW9ucyA9IEdyaWRSZXNv
bHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21BdXRvUGxhY2VtZW50UG9zaXRp
b24oc3R5bGUoKSwgKmNoaWxkLCBGb3JSb3dzLCAwKTsKKyAgICAgICAgICAgIG1heGltdW1Sb3dJ
bmRleCA9IHN0ZDo6bWF4KG1heGltdW1Sb3dJbmRleCwgcG9zaXRpb25zLnJlc29sdmVkRmluYWxQ
b3NpdGlvbigpKTsKICAgICAgICAgfQogCiAgICAgICAgIEdyaWRTcGFuIGNvbHVtblBvc2l0aW9u
cyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZShz
dHlsZSgpLCAqY2hpbGQsIEZvckNvbHVtbnMpOwogICAgICAgICBpZiAoY29sdW1uUG9zaXRpb25z
LmlzRGVmaW5pdGUoKSkgewotICAgICAgICAgICAgbWF4aW11bUNvbHVtbkluZGV4ID0gc3RkOjpt
YXgobWF4aW11bUNvbHVtbkluZGV4LCBjb2x1bW5Qb3NpdGlvbnMucmVzb2x2ZWRGaW5hbFBvc2l0
aW9uKCkudG9JbnQoKSk7CisgICAgICAgICAgICBtYXhpbXVtQ29sdW1uSW5kZXggPSBzdGQ6Om1h
eChtYXhpbXVtQ29sdW1uSW5kZXgsIGNvbHVtblBvc2l0aW9ucy5yZXNvbHZlZEZpbmFsUG9zaXRp
b24oKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBHcm93IHRoZSBncmlkIGZv
ciBpdGVtcyB3aXRoIGEgZGVmaW5pdGUgY29sdW1uIHNwYW4sIGdldHRpbmcgdGhlIGxhcmdlc3Qg
c3VjaCBzcGFuLgotICAgICAgICAgICAgR3JpZFNwYW4gcG9zaXRpb25zID0gR3JpZFJlc29sdmVk
UG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbUF1dG9QbGFjZW1lbnRQb3NpdGlvbihz
dHlsZSgpLCAqY2hpbGQsIEZvckNvbHVtbnMsIEdyaWRSZXNvbHZlZFBvc2l0aW9uKDApKTsKLSAg
ICAgICAgICAgIG1heGltdW1Db2x1bW5JbmRleCA9IHN0ZDo6bWF4KG1heGltdW1Db2x1bW5JbmRl
eCwgcG9zaXRpb25zLnJlc29sdmVkRmluYWxQb3NpdGlvbigpLnRvSW50KCkpOworICAgICAgICAg
ICAgR3JpZFNwYW4gcG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlk
UG9zaXRpb25zRnJvbUF1dG9QbGFjZW1lbnRQb3NpdGlvbihzdHlsZSgpLCAqY2hpbGQsIEZvckNv
bHVtbnMsIDApOworICAgICAgICAgICAgbWF4aW11bUNvbHVtbkluZGV4ID0gc3RkOjptYXgobWF4
aW11bUNvbHVtbkluZGV4LCBwb3NpdGlvbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkpOwogICAg
ICAgICB9CiAKICAgICAgICAgbV9ncmlkSXRlbUNvb3JkaW5hdGUuc2V0KGNoaWxkLCBHcmlkQ29v
cmRpbmF0ZShyb3dQb3NpdGlvbnMsIGNvbHVtblBvc2l0aW9ucykpOwpAQCAtMTIzMyw3ICsxMjMz
LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEdyaWRDb29yZGluYXRlPiBSZW5kZXJHcmlkOjpjcmVhdGVF
bXB0eUdyaWRBcmVhQXRTcGVjaWZpZWRQb3NpdGkKIHsKICAgICBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gY3Jvc3NEaXJlY3Rpb24gPSBzcGVjaWZpZWREaXJlY3Rpb24gPT0gRm9yQ29sdW1ucyA/
IEZvclJvd3MgOiBGb3JDb2x1bW5zOwogICAgIGNvbnN0IHVuc2lnbmVkIGVuZE9mQ3Jvc3NEaXJl
Y3Rpb24gPSBjcm9zc0RpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gZ3JpZENvbHVtbkNvdW50KCkg
OiBncmlkUm93Q291bnQoKTsKLSAgICBHcmlkU3BhbiBjcm9zc0RpcmVjdGlvblBvc2l0aW9ucyA9
IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21BdXRvUGxhY2Vt
ZW50UG9zaXRpb24oc3R5bGUoKSwgZ3JpZEl0ZW0sIGNyb3NzRGlyZWN0aW9uLCBHcmlkUmVzb2x2
ZWRQb3NpdGlvbihlbmRPZkNyb3NzRGlyZWN0aW9uKSk7CisgICAgR3JpZFNwYW4gY3Jvc3NEaXJl
Y3Rpb25Qb3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlv
bnNGcm9tQXV0b1BsYWNlbWVudFBvc2l0aW9uKHN0eWxlKCksIGdyaWRJdGVtLCBjcm9zc0RpcmVj
dGlvbiwgZW5kT2ZDcm9zc0RpcmVjdGlvbik7CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
R3JpZENvb3JkaW5hdGU+KHNwZWNpZmllZERpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gY3Jvc3NE
aXJlY3Rpb25Qb3NpdGlvbnMgOiBzcGVjaWZpZWRQb3NpdGlvbnMsIHNwZWNpZmllZERpcmVjdGlv
biA9PSBGb3JDb2x1bW5zID8gc3BlY2lmaWVkUG9zaXRpb25zIDogY3Jvc3NEaXJlY3Rpb25Qb3Np
dGlvbnMpOwogfQogCkBAIC0xMjUxLDEwICsxMjUxLDEwIEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxh
Y2VTcGVjaWZpZWRNYWpvckF4aXNJdGVtc09uR3JpZChjb25zdCBWZWN0b3I8UmVuZGVyQm94Kj4m
IGF1CiAgICAgICAgIEdyaWRTcGFuIG1ham9yQXhpc1Bvc2l0aW9ucyA9IGNhY2hlZEdyaWRTcGFu
KCphdXRvR3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSk7CiAgICAg
ICAgIEFTU0VSVChtYWpvckF4aXNQb3NpdGlvbnMuaXNEZWZpbml0ZSgpKTsKICAgICAgICAgQVNT
RVJUKCFjYWNoZWRHcmlkU3BhbigqYXV0b0dyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWlub3JBeGlz
RGlyZWN0aW9uKCkpLmlzRGVmaW5pdGUoKSk7Ci0gICAgICAgIEdyaWRTcGFuIG1pbm9yQXhpc1Bv
c2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21B
dXRvUGxhY2VtZW50UG9zaXRpb24oc3R5bGUoKSwgKmF1dG9HcmlkSXRlbSwgYXV0b1BsYWNlbWVu
dE1pbm9yQXhpc0RpcmVjdGlvbigpLCBHcmlkUmVzb2x2ZWRQb3NpdGlvbigwKSk7Ci0gICAgICAg
IHVuc2lnbmVkIG1ham9yQXhpc0luaXRpYWxQb3NpdGlvbiA9IG1ham9yQXhpc1Bvc2l0aW9ucy5y
ZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpLnRvSW50KCk7CisgICAgICAgIEdyaWRTcGFuIG1pbm9y
QXhpc1Bvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9u
c0Zyb21BdXRvUGxhY2VtZW50UG9zaXRpb24oc3R5bGUoKSwgKmF1dG9HcmlkSXRlbSwgYXV0b1Bs
YWNlbWVudE1pbm9yQXhpc0RpcmVjdGlvbigpLCAwKTsKKyAgICAgICAgdW5zaWduZWQgbWFqb3JB
eGlzSW5pdGlhbFBvc2l0aW9uID0gbWFqb3JBeGlzUG9zaXRpb25zLnJlc29sdmVkSW5pdGlhbFBv
c2l0aW9uKCk7CiAKLSAgICAgICAgR3JpZEl0ZXJhdG9yIGl0ZXJhdG9yKG1fZ3JpZCwgYXV0b1Bs
YWNlbWVudE1ham9yQXhpc0RpcmVjdGlvbigpLCBtYWpvckF4aXNQb3NpdGlvbnMucmVzb2x2ZWRJ
bml0aWFsUG9zaXRpb24oKS50b0ludCgpLCBpc0dyaWRBdXRvRmxvd0RlbnNlID8gMCA6IG1pbm9y
QXhpc0N1cnNvcnMuZ2V0KG1ham9yQXhpc0luaXRpYWxQb3NpdGlvbikpOworICAgICAgICBHcmlk
SXRlcmF0b3IgaXRlcmF0b3IobV9ncmlkLCBhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGlyZWN0aW9u
KCksIG1ham9yQXhpc1Bvc2l0aW9ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpLCBpc0dyaWRB
dXRvRmxvd0RlbnNlID8gMCA6IG1pbm9yQXhpc0N1cnNvcnMuZ2V0KG1ham9yQXhpc0luaXRpYWxQ
b3NpdGlvbikpOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JpZENvb3JkaW5hdGU+IGVtcHR5
R3JpZEFyZWEgPSBpdGVyYXRvci5uZXh0RW1wdHlHcmlkQXJlYShtYWpvckF4aXNQb3NpdGlvbnMu
aW50ZWdlclNwYW4oKSwgbWlub3JBeGlzUG9zaXRpb25zLmludGVnZXJTcGFuKCkpOwogICAgICAg
ICBpZiAoIWVtcHR5R3JpZEFyZWEpCiAgICAgICAgICAgICBlbXB0eUdyaWRBcmVhID0gY3JlYXRl
RW1wdHlHcmlkQXJlYUF0U3BlY2lmaWVkUG9zaXRpb25zT3V0c2lkZUdyaWQoKmF1dG9HcmlkSXRl
bSwgYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVjdGlvbigpLCBtYWpvckF4aXNQb3NpdGlvbnMp
OwpAQCAtMTI2Myw3ICsxMjYzLDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpwbGFjZVNwZWNpZmllZE1h
am9yQXhpc0l0ZW1zT25HcmlkKGNvbnN0IFZlY3RvcjxSZW5kZXJCb3gqPiYgYXUKICAgICAgICAg
aW5zZXJ0SXRlbUludG9HcmlkKCphdXRvR3JpZEl0ZW0sICplbXB0eUdyaWRBcmVhKTsKIAogICAg
ICAgICBpZiAoIWlzR3JpZEF1dG9GbG93RGVuc2UpCi0gICAgICAgICAgICBtaW5vckF4aXNDdXJz
b3JzLnNldChtYWpvckF4aXNJbml0aWFsUG9zaXRpb24sIGlzRm9yQ29sdW1ucyA/IGVtcHR5R3Jp
ZEFyZWEtPnJvd3MucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKS50b0ludCgpIDogZW1wdHlHcmlk
QXJlYS0+Y29sdW1ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpLnRvSW50KCkpOworICAgICAg
ICAgICAgbWlub3JBeGlzQ3Vyc29ycy5zZXQobWFqb3JBeGlzSW5pdGlhbFBvc2l0aW9uLCBpc0Zv
ckNvbHVtbnMgPyBlbXB0eUdyaWRBcmVhLT5yb3dzLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCkg
OiBlbXB0eUdyaWRBcmVhLT5jb2x1bW5zLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCkpOwogICAg
IH0KIH0KIApAQCAtMTI4NSw3ICsxMjg1LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpwbGFjZUF1dG9N
YWpvckF4aXNJdGVtc09uR3JpZChjb25zdCBWZWN0b3I8UmVuZGVyQm94Kj4mIGF1dG9HcmkKIHZv
aWQgUmVuZGVyR3JpZDo6cGxhY2VBdXRvTWFqb3JBeGlzSXRlbU9uR3JpZChSZW5kZXJCb3gmIGdy
aWRJdGVtLCBBdXRvUGxhY2VtZW50Q3Vyc29yJiBhdXRvUGxhY2VtZW50Q3Vyc29yKQogewogICAg
IEFTU0VSVCghY2FjaGVkR3JpZFNwYW4oZ3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNYWpvckF4aXNE
aXJlY3Rpb24oKSkuaXNEZWZpbml0ZSgpKTsKLSAgICBHcmlkU3BhbiBtYWpvckF4aXNQb3NpdGlv
bnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tQXV0b1Bs
YWNlbWVudFBvc2l0aW9uKHN0eWxlKCksIGdyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWFqb3JBeGlz
RGlyZWN0aW9uKCksIEdyaWRSZXNvbHZlZFBvc2l0aW9uKDApKTsKKyAgICBHcmlkU3BhbiBtYWpv
ckF4aXNQb3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlv
bnNGcm9tQXV0b1BsYWNlbWVudFBvc2l0aW9uKHN0eWxlKCksIGdyaWRJdGVtLCBhdXRvUGxhY2Vt
ZW50TWFqb3JBeGlzRGlyZWN0aW9uKCksIDApOwogCiAgICAgY29uc3QgdW5zaWduZWQgZW5kT2ZN
YWpvckF4aXMgPSAoYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVjdGlvbigpID09IEZvckNvbHVt
bnMpID8gZ3JpZENvbHVtbkNvdW50KCkgOiBncmlkUm93Q291bnQoKTsKICAgICB1bnNpZ25lZCBt
YWpvckF4aXNBdXRvUGxhY2VtZW50Q3Vyc29yID0gYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVj
dGlvbigpID09IEZvckNvbHVtbnMgPyBhdXRvUGxhY2VtZW50Q3Vyc29yLnNlY29uZCA6IGF1dG9Q
bGFjZW1lbnRDdXJzb3IuZmlyc3Q7CkBAIC0xMjk1LDE4ICsxMjk1LDE4IEBAIHZvaWQgUmVuZGVy
R3JpZDo6cGxhY2VBdXRvTWFqb3JBeGlzSXRlbU9uR3JpZChSZW5kZXJCb3gmIGdyaWRJdGVtLCBB
dXRvUGxhY2VtZW50CiAgICAgR3JpZFNwYW4gbWlub3JBeGlzUG9zaXRpb25zID0gY2FjaGVkR3Jp
ZFNwYW4oZ3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24oKSk7CiAgICAg
aWYgKG1pbm9yQXhpc1Bvc2l0aW9ucy5pc0RlZmluaXRlKCkpIHsKICAgICAgICAgLy8gTW92ZSB0
byB0aGUgbmV4dCB0cmFjayBpbiBtYWpvciBheGlzIGlmIGluaXRpYWwgcG9zaXRpb24gaW4gbWlu
b3IgYXhpcyBpcyBiZWZvcmUgYXV0by1wbGFjZW1lbnQgY3Vyc29yLgotICAgICAgICBpZiAobWlu
b3JBeGlzUG9zaXRpb25zLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCkudG9JbnQoKSA8IG1pbm9y
QXhpc0F1dG9QbGFjZW1lbnRDdXJzb3IpCisgICAgICAgIGlmIChtaW5vckF4aXNQb3NpdGlvbnMu
cmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKSA8IG1pbm9yQXhpc0F1dG9QbGFjZW1lbnRDdXJzb3Ip
CiAgICAgICAgICAgICBtYWpvckF4aXNBdXRvUGxhY2VtZW50Q3Vyc29yKys7CiAKICAgICAgICAg
aWYgKG1ham9yQXhpc0F1dG9QbGFjZW1lbnRDdXJzb3IgPCBlbmRPZk1ham9yQXhpcykgewotICAg
ICAgICAgICAgR3JpZEl0ZXJhdG9yIGl0ZXJhdG9yKG1fZ3JpZCwgYXV0b1BsYWNlbWVudE1pbm9y
QXhpc0RpcmVjdGlvbigpLCBtaW5vckF4aXNQb3NpdGlvbnMucmVzb2x2ZWRJbml0aWFsUG9zaXRp
b24oKS50b0ludCgpLCBtYWpvckF4aXNBdXRvUGxhY2VtZW50Q3Vyc29yKTsKKyAgICAgICAgICAg
IEdyaWRJdGVyYXRvciBpdGVyYXRvcihtX2dyaWQsIGF1dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJl
Y3Rpb24oKSwgbWlub3JBeGlzUG9zaXRpb25zLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCksIG1h
am9yQXhpc0F1dG9QbGFjZW1lbnRDdXJzb3IpOwogICAgICAgICAgICAgZW1wdHlHcmlkQXJlYSA9
IGl0ZXJhdG9yLm5leHRFbXB0eUdyaWRBcmVhKG1pbm9yQXhpc1Bvc2l0aW9ucy5pbnRlZ2VyU3Bh
bigpLCBtYWpvckF4aXNQb3NpdGlvbnMuaW50ZWdlclNwYW4oKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAoIWVtcHR5R3JpZEFyZWEpCiAgICAgICAgICAgICBlbXB0eUdyaWRBcmVhID0gY3Jl
YXRlRW1wdHlHcmlkQXJlYUF0U3BlY2lmaWVkUG9zaXRpb25zT3V0c2lkZUdyaWQoZ3JpZEl0ZW0s
IGF1dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24oKSwgbWlub3JBeGlzUG9zaXRpb25zKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBHcmlkU3BhbiBtaW5vckF4aXNQb3NpdGlvbnMgPSBHcmlk
UmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tQXV0b1BsYWNlbWVudFBv
c2l0aW9uKHN0eWxlKCksIGdyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWlub3JBeGlzRGlyZWN0aW9u
KCksIEdyaWRSZXNvbHZlZFBvc2l0aW9uKDApKTsKKyAgICAgICAgR3JpZFNwYW4gbWlub3JBeGlz
UG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJv
bUF1dG9QbGFjZW1lbnRQb3NpdGlvbihzdHlsZSgpLCBncmlkSXRlbSwgYXV0b1BsYWNlbWVudE1p
bm9yQXhpc0RpcmVjdGlvbigpLCAwKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIG1ham9yQXhp
c0luZGV4ID0gbWFqb3JBeGlzQXV0b1BsYWNlbWVudEN1cnNvcjsgbWFqb3JBeGlzSW5kZXggPCBl
bmRPZk1ham9yQXhpczsgKyttYWpvckF4aXNJbmRleCkgewogICAgICAgICAgICAgR3JpZEl0ZXJh
dG9yIGl0ZXJhdG9yKG1fZ3JpZCwgYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVjdGlvbigpLCBt
YWpvckF4aXNJbmRleCwgbWlub3JBeGlzQXV0b1BsYWNlbWVudEN1cnNvcik7CkBAIC0xMzE0LDkg
KzEzMTQsOSBAQCB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlQXV0b01ham9yQXhpc0l0ZW1PbkdyaWQo
UmVuZGVyQm94JiBncmlkSXRlbSwgQXV0b1BsYWNlbWVudAogCiAgICAgICAgICAgICBpZiAoZW1w
dHlHcmlkQXJlYSkgewogICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgZml0cyBpbiB0
aGUgbWlub3IgYXhpcyBkaXJlY3Rpb24sIGFzIHdlIHNob3VsZG4ndCBncm93IGluIHRoYXQgZGly
ZWN0aW9uIGhlcmUgKGl0IHdhcyBhbHJlYWR5IG1hbmFnZWQgaW4gcG9wdWxhdGVFeHBsaWNpdEdy
aWRBbmRPcmRlckl0ZXJhdG9yKCkpLgotICAgICAgICAgICAgICAgIEdyaWRSZXNvbHZlZFBvc2l0
aW9uIG1pbm9yQXhpc0ZpbmFsUG9zaXRpb25JbmRleCA9IGF1dG9QbGFjZW1lbnRNaW5vckF4aXNE
aXJlY3Rpb24oKSA9PSBGb3JDb2x1bW5zID8gZW1wdHlHcmlkQXJlYS0+Y29sdW1ucy5yZXNvbHZl
ZEZpbmFsUG9zaXRpb24oKSA6IGVtcHR5R3JpZEFyZWEtPnJvd3MucmVzb2x2ZWRGaW5hbFBvc2l0
aW9uKCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbWlub3JBeGlzRmluYWxQb3NpdGlvbklu
ZGV4ID0gYXV0b1BsYWNlbWVudE1pbm9yQXhpc0RpcmVjdGlvbigpID09IEZvckNvbHVtbnMgPyBl
bXB0eUdyaWRBcmVhLT5jb2x1bW5zLnJlc29sdmVkRmluYWxQb3NpdGlvbigpIDogZW1wdHlHcmlk
QXJlYS0+cm93cy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKTsKICAgICAgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBlbmRPZk1pbm9yQXhpcyA9IGF1dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rp
b24oKSA9PSBGb3JDb2x1bW5zID8gZ3JpZENvbHVtbkNvdW50KCkgOiBncmlkUm93Q291bnQoKTsK
LSAgICAgICAgICAgICAgICBpZiAobWlub3JBeGlzRmluYWxQb3NpdGlvbkluZGV4LnRvSW50KCkg
PD0gZW5kT2ZNaW5vckF4aXMpCisgICAgICAgICAgICAgICAgaWYgKG1pbm9yQXhpc0ZpbmFsUG9z
aXRpb25JbmRleCA8PSBlbmRPZk1pbm9yQXhpcykKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGVtcHR5IGdyaWQgYXJlYSBhcyBpdCBkb2Vz
IG5vdCBmaXQgaW4gdGhlIG1pbm9yIGF4aXMgZGlyZWN0aW9uLgpAQCAtMTMzNCw4ICsxMzM0LDgg
QEAgdm9pZCBSZW5kZXJHcmlkOjpwbGFjZUF1dG9NYWpvckF4aXNJdGVtT25HcmlkKFJlbmRlckJv
eCYgZ3JpZEl0ZW0sIEF1dG9QbGFjZW1lbnQKIAogICAgIG1fZ3JpZEl0ZW1Db29yZGluYXRlLnNl
dCgmZ3JpZEl0ZW0sICplbXB0eUdyaWRBcmVhKTsKICAgICBpbnNlcnRJdGVtSW50b0dyaWQoZ3Jp
ZEl0ZW0sICplbXB0eUdyaWRBcmVhKTsKLSAgICBhdXRvUGxhY2VtZW50Q3Vyc29yLmZpcnN0ID0g
ZW1wdHlHcmlkQXJlYS0+cm93cy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpLnRvSW50KCk7Ci0g
ICAgYXV0b1BsYWNlbWVudEN1cnNvci5zZWNvbmQgPSBlbXB0eUdyaWRBcmVhLT5jb2x1bW5zLnJl
c29sdmVkSW5pdGlhbFBvc2l0aW9uKCkudG9JbnQoKTsKKyAgICBhdXRvUGxhY2VtZW50Q3Vyc29y
LmZpcnN0ID0gZW1wdHlHcmlkQXJlYS0+cm93cy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpOwor
ICAgIGF1dG9QbGFjZW1lbnRDdXJzb3Iuc2Vjb25kID0gZW1wdHlHcmlkQXJlYS0+Y29sdW1ucy5y
ZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpOwogfQogCiBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24g
UmVuZGVyR3JpZDo6YXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVjdGlvbigpIGNvbnN0CkBAIC0x
NDgwLDIyICsxNDgwLDIyIEBAIHZvaWQgUmVuZGVyR3JpZDo6b2Zmc2V0QW5kQnJlYWR0aEZvclBv
c2l0aW9uZWRDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkCiAKICAgICBib29sIHN0
YXJ0SXNBdXRvID0gc3RhcnRQb3NpdGlvbi5pc0F1dG8oKQogICAgICAgICB8fCAoc3RhcnRQb3Np
dGlvbi5pc05hbWVkR3JpZEFyZWEoKSAmJiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6aXNOb25FeGlz
dGVudE5hbWVkTGluZU9yQXJlYShzdGFydFBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKSwgc3R5bGUo
KSwgKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IENvbHVtblN0YXJ0U2lkZSA6IFJvd1N0YXJ0
U2lkZSkpCi0gICAgICAgIHx8IChwb3NpdGlvbnMucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKS50
b0ludCgpID4gbGFzdFRyYWNrSW5kZXgpOworICAgICAgICB8fCAocG9zaXRpb25zLnJlc29sdmVk
SW5pdGlhbFBvc2l0aW9uKCkgPiBsYXN0VHJhY2tJbmRleCk7CiAgICAgYm9vbCBlbmRJc0F1dG8g
PSBlbmRQb3NpdGlvbi5pc0F1dG8oKQogICAgICAgICB8fCAoZW5kUG9zaXRpb24uaXNOYW1lZEdy
aWRBcmVhKCkgJiYgR3JpZFJlc29sdmVkUG9zaXRpb246OmlzTm9uRXhpc3RlbnROYW1lZExpbmVP
ckFyZWEoZW5kUG9zaXRpb24ubmFtZWRHcmlkTGluZSgpLCBzdHlsZSgpLCAoZGlyZWN0aW9uID09
IEZvckNvbHVtbnMpID8gQ29sdW1uRW5kU2lkZSA6IFJvd0VuZFNpZGUpKQotICAgICAgICB8fCAo
cG9zaXRpb25zLnJlc29sdmVkRmluYWxQb3NpdGlvbigpLnByZXYoKS50b0ludCgpID4gbGFzdFRy
YWNrSW5kZXgpOworICAgICAgICB8fCAocG9zaXRpb25zLnJlc29sdmVkRmluYWxQb3NpdGlvbigp
IC0gMSA+IGxhc3RUcmFja0luZGV4KTsKIAotICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uIGZpcnN0
UG9zaXRpb24gPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbigwKTsKLSAgICBHcmlkUmVzb2x2ZWRQb3Np
dGlvbiBpbml0aWFsUG9zaXRpb24gPSBzdGFydElzQXV0byA/IGZpcnN0UG9zaXRpb24gOiBwb3Np
dGlvbnMucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKTsKLSAgICBHcmlkUmVzb2x2ZWRQb3NpdGlv
biBsYXN0UG9zaXRpb24gPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbihsYXN0VHJhY2tJbmRleCk7Ci0g
ICAgR3JpZFJlc29sdmVkUG9zaXRpb24gZmluYWxQb3NpdGlvbiA9IGVuZElzQXV0byA/IGxhc3RQ
b3NpdGlvbiA6IHBvc2l0aW9ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS5wcmV2KCk7CisgICAg
dW5zaWduZWQgZmlyc3RQb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgaW5pdGlhbFBvc2l0aW9u
ID0gc3RhcnRJc0F1dG8gPyBmaXJzdFBvc2l0aW9uIDogcG9zaXRpb25zLnJlc29sdmVkSW5pdGlh
bFBvc2l0aW9uKCk7CisgICAgdW5zaWduZWQgbGFzdFBvc2l0aW9uID0gbGFzdFRyYWNrSW5kZXg7
CisgICAgdW5zaWduZWQgZmluYWxQb3NpdGlvbiA9IGVuZElzQXV0byA/IGxhc3RQb3NpdGlvbiA6
IHBvc2l0aW9ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKSAtIDE7CiAKICAgICAvLyBQb3NpdGlv
bmVkIGNoaWxkcmVuIGRvIG5vdCBncm93IHRoZSBncmlkLCBzbyB3ZSBuZWVkIHRvIGNsYW1wIHRo
ZSBwb3NpdGlvbnMgdG8gYXZvaWQgZW5kaW5nIHVwIG91dHNpZGUgb2YgaXQuCi0gICAgaW5pdGlh
bFBvc2l0aW9uID0gc3RkOjptaW48R3JpZFJlc29sdmVkUG9zaXRpb24+KGluaXRpYWxQb3NpdGlv
biwgbGFzdFBvc2l0aW9uKTsKLSAgICBmaW5hbFBvc2l0aW9uID0gc3RkOjptaW48R3JpZFJlc29s
dmVkUG9zaXRpb24+KGZpbmFsUG9zaXRpb24sIGxhc3RQb3NpdGlvbik7CisgICAgaW5pdGlhbFBv
c2l0aW9uID0gc3RkOjptaW4oaW5pdGlhbFBvc2l0aW9uLCBsYXN0UG9zaXRpb24pOworICAgIGZp
bmFsUG9zaXRpb24gPSBzdGQ6Om1pbihmaW5hbFBvc2l0aW9uLCBsYXN0UG9zaXRpb24pOwogCi0g
ICAgTGF5b3V0VW5pdCBzdGFydCA9IHN0YXJ0SXNBdXRvID8gTGF5b3V0VW5pdCgpIDogKGRpcmVj
dGlvbiA9PSBGb3JDb2x1bW5zKSA/ICBtX2NvbHVtblBvc2l0aW9uc1tpbml0aWFsUG9zaXRpb24u
dG9JbnQoKV0gOiBtX3Jvd1Bvc2l0aW9uc1tpbml0aWFsUG9zaXRpb24udG9JbnQoKV07Ci0gICAg
TGF5b3V0VW5pdCBlbmQgPSBlbmRJc0F1dG8gPyAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8g
bG9naWNhbFdpZHRoKCkgOiBsb2dpY2FsSGVpZ2h0KCkgOiAoZGlyZWN0aW9uID09IEZvckNvbHVt
bnMpID8gIG1fY29sdW1uUG9zaXRpb25zW2ZpbmFsUG9zaXRpb24ubmV4dCgpLnRvSW50KCldIDog
bV9yb3dQb3NpdGlvbnNbZmluYWxQb3NpdGlvbi5uZXh0KCkudG9JbnQoKV07CisgICAgTGF5b3V0
VW5pdCBzdGFydCA9IHN0YXJ0SXNBdXRvID8gTGF5b3V0VW5pdCgpIDogKGRpcmVjdGlvbiA9PSBG
b3JDb2x1bW5zKSA/ICBtX2NvbHVtblBvc2l0aW9uc1tpbml0aWFsUG9zaXRpb25dIDogbV9yb3dQ
b3NpdGlvbnNbaW5pdGlhbFBvc2l0aW9uXTsKKyAgICBMYXlvdXRVbml0IGVuZCA9IGVuZElzQXV0
byA/IChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyBsb2dpY2FsV2lkdGgoKSA6IGxvZ2ljYWxI
ZWlnaHQoKSA6IChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyAgbV9jb2x1bW5Qb3NpdGlvbnNb
ZmluYWxQb3NpdGlvbiArIDFdIDogbV9yb3dQb3NpdGlvbnNbZmluYWxQb3NpdGlvbiArIDFdOwog
CiAgICAgYnJlYWR0aCA9IGVuZCAtIHN0YXJ0OwogCkBAIC0xNTM3LDggKzE1MzcsOCBAQCBMYXlv
dXRVbml0IFJlbmRlckdyaWQ6OmdyaWRBcmVhQnJlYWR0aEZvckNoaWxkKGNvbnN0IFJlbmRlckJv
eCYgY2hpbGQsIEdyaWRUcmFjawogewogICAgIGNvbnN0IEdyaWRTcGFuJiBzcGFuID0gY2FjaGVk
R3JpZFNwYW4oY2hpbGQsIGRpcmVjdGlvbik7CiAgICAgTGF5b3V0VW5pdCBncmlkQXJlYUJyZWFk
dGggPSAwOwotICAgIGZvciAoYXV0byYgdHJhY2tQb3NpdGlvbiA6IHNwYW4pCi0gICAgICAgIGdy
aWRBcmVhQnJlYWR0aCArPSB0cmFja3NbdHJhY2tQb3NpdGlvbi50b0ludCgpXS5iYXNlU2l6ZSgp
OworICAgIGZvciAoYXV0byB0cmFja1Bvc2l0aW9uIDogc3BhbikKKyAgICAgICAgZ3JpZEFyZWFC
cmVhZHRoICs9IHRyYWNrc1t0cmFja1Bvc2l0aW9uXS5iYXNlU2l6ZSgpOwogCiAgICAgZ3JpZEFy
ZWFCcmVhZHRoICs9IGd1dHRlcnNTaXplKGRpcmVjdGlvbiwgc3Bhbi5pbnRlZ2VyU3BhbigpKTsK
IApAQCAtMTU1MywxMSArMTU1MywxMSBAQCBMYXlvdXRVbml0IFJlbmRlckdyaWQ6OmdyaWRBcmVh
QnJlYWR0aEZvckNoaWxkSW5jbHVkaW5nQWxpZ25tZW50T2Zmc2V0cyhjb25zdCBSZQogICAgIGNv
bnN0IGF1dG8mIHNwYW4gPSBjYWNoZWRHcmlkU3BhbihjaGlsZCwgZGlyZWN0aW9uKTsKICAgICBj
b25zdCBhdXRvJiBsaW5lUG9zaXRpb25zID0gKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IG1f
Y29sdW1uUG9zaXRpb25zIDogbV9yb3dQb3NpdGlvbnM7CiAKLSAgICBMYXlvdXRVbml0IGluaXRp
YWxUcmFja1Bvc2l0aW9uID0gbGluZVBvc2l0aW9uc1tzcGFuLnJlc29sdmVkSW5pdGlhbFBvc2l0
aW9uKCkudG9JbnQoKV07Ci0gICAgTGF5b3V0VW5pdCBmaW5hbFRyYWNrUG9zaXRpb24gPSBsaW5l
UG9zaXRpb25zW3NwYW4ucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkucHJldigpLnRvSW50KCldOwor
ICAgIExheW91dFVuaXQgaW5pdGlhbFRyYWNrUG9zaXRpb24gPSBsaW5lUG9zaXRpb25zW3NwYW4u
cmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKV07CisgICAgTGF5b3V0VW5pdCBmaW5hbFRyYWNrUG9z
aXRpb24gPSBsaW5lUG9zaXRpb25zW3NwYW4ucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkgLSAxXTsK
IAogICAgIC8vIFRyYWNrIFBvc2l0aW9ucyB2ZWN0b3Igc3RvcmVzIHRoZSAnc3RhcnQnIGdyaWQg
bGluZSBvZiBlYWNoIHRyYWNrLCBzbyB3ZSBoYXZlIHRvIGFkZCBsYXN0IHRyYWNrJ3MgYmFzZVNp
emUuCi0gICAgcmV0dXJuIGZpbmFsVHJhY2tQb3NpdGlvbiAtIGluaXRpYWxUcmFja1Bvc2l0aW9u
ICsgdHJhY2tzW3NwYW4ucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkucHJldigpLnRvSW50KCldLmJh
c2VTaXplKCk7CisgICAgcmV0dXJuIGZpbmFsVHJhY2tQb3NpdGlvbiAtIGluaXRpYWxUcmFja1Bv
c2l0aW9uICsgdHJhY2tzW3NwYW4ucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkgLSAxXS5iYXNlU2l6
ZSgpOwogfQogCiB2b2lkIFJlbmRlckdyaWQ6OnBvcHVsYXRlR3JpZFBvc2l0aW9ucyhHcmlkU2l6
aW5nRGF0YSYgc2l6aW5nRGF0YSkKQEAgLTE4MzYsNyArMTgzNiw3IEBAIHN0YXRpYyBpbmxpbmUg
TGF5b3V0VW5pdCBvZmZzZXRCZXR3ZWVuVHJhY2tzKENvbnRlbnREaXN0cmlidXRpb25UeXBlIGRp
c3RyaWJ1dGlvCiBMYXlvdXRVbml0IFJlbmRlckdyaWQ6OmNvbHVtbkF4aXNPZmZzZXRGb3JDaGls
ZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogewogICAgIGNvbnN0IEdyaWRTcGFuJiBy
b3dzU3BhbiA9IGNhY2hlZEdyaWRTcGFuKGNoaWxkLCBGb3JSb3dzKTsKLSAgICB1bnNpZ25lZCBj
aGlsZFN0YXJ0TGluZSA9IHJvd3NTcGFuLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCkudG9JbnQo
KTsKKyAgICB1bnNpZ25lZCBjaGlsZFN0YXJ0TGluZSA9IHJvd3NTcGFuLnJlc29sdmVkSW5pdGlh
bFBvc2l0aW9uKCk7CiAgICAgTGF5b3V0VW5pdCBzdGFydE9mUm93ID0gbV9yb3dQb3NpdGlvbnNb
Y2hpbGRTdGFydExpbmVdOwogICAgIExheW91dFVuaXQgc3RhcnRQb3NpdGlvbiA9IHN0YXJ0T2ZS
b3cgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZCk7CiAgICAgaWYgKGhhc0F1dG9NYXJnaW5z
SW5Db2x1bW5BeGlzKGNoaWxkKSkKQEAgLTE4NDcsNyArMTg0Nyw3IEBAIExheW91dFVuaXQgUmVu
ZGVyR3JpZDo6Y29sdW1uQXhpc09mZnNldEZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQp
IGNvbnN0CiAgICAgICAgIHJldHVybiBzdGFydFBvc2l0aW9uOwogICAgIGNhc2UgR3JpZEF4aXNF
bmQ6CiAgICAgY2FzZSBHcmlkQXhpc0NlbnRlcjogewotICAgICAgICB1bnNpZ25lZCBjaGlsZEVu
ZExpbmUgPSByb3dzU3Bhbi5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS50b0ludCgpOworICAgICAg
ICB1bnNpZ25lZCBjaGlsZEVuZExpbmUgPSByb3dzU3Bhbi5yZXNvbHZlZEZpbmFsUG9zaXRpb24o
KTsKICAgICAgICAgTGF5b3V0VW5pdCBlbmRPZlJvdyA9IG1fcm93UG9zaXRpb25zW2NoaWxkRW5k
TGluZV07CiAgICAgICAgIC8vIG1fcm93UG9zaXRpb25zIGluY2x1ZGUgZ3V0dGVycyBzbyB3ZSBu
ZWVkIHRvIHN1YnN0cmFjdCB0aGVtIHRvIGdldCB0aGUgYWN0dWFsIGVuZCBwb3NpdGlvbiBmb3Ig
YSBnaXZlbgogICAgICAgICAvLyByb3cgKHRoaXMgZG9lcyBub3QgaGF2ZSB0byBiZSBkb25lIGZv
ciB0aGUgbGFzdCB0cmFjayBhcyB0aGVyZSBhcmUgbm8gbW9yZSBtX3Jvd1Bvc2l0aW9ucyBhZnRl
ciBpdCkKQEAgLTE4NzAsNyArMTg3MCw3IEBAIExheW91dFVuaXQgUmVuZGVyR3JpZDo6Y29sdW1u
QXhpc09mZnNldEZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CiBMYXlvdXRV
bml0IFJlbmRlckdyaWQ6OnJvd0F4aXNPZmZzZXRGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNo
aWxkKSBjb25zdAogewogICAgIGNvbnN0IEdyaWRTcGFuJiBjb2x1bW5zU3BhbiA9IGNhY2hlZEdy
aWRTcGFuKGNoaWxkLCBGb3JDb2x1bW5zKTsKLSAgICB1bnNpZ25lZCBjaGlsZFN0YXJ0TGluZSA9
IGNvbHVtbnNTcGFuLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCkudG9JbnQoKTsKKyAgICB1bnNp
Z25lZCBjaGlsZFN0YXJ0TGluZSA9IGNvbHVtbnNTcGFuLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9u
KCk7CiAgICAgTGF5b3V0VW5pdCBzdGFydE9mQ29sdW1uID0gbV9jb2x1bW5Qb3NpdGlvbnNbY2hp
bGRTdGFydExpbmVdOwogICAgIExheW91dFVuaXQgc3RhcnRQb3NpdGlvbiA9IHN0YXJ0T2ZDb2x1
bW4gKyBtYXJnaW5TdGFydEZvckNoaWxkKGNoaWxkKTsKICAgICBpZiAoaGFzQXV0b01hcmdpbnNJ
blJvd0F4aXMoY2hpbGQpKQpAQCAtMTg4MSw3ICsxODgxLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJH
cmlkOjpyb3dBeGlzT2Zmc2V0Rm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkgY29uc3QK
ICAgICAgICAgcmV0dXJuIHN0YXJ0UG9zaXRpb247CiAgICAgY2FzZSBHcmlkQXhpc0VuZDoKICAg
ICBjYXNlIEdyaWRBeGlzQ2VudGVyOiB7Ci0gICAgICAgIHVuc2lnbmVkIGNoaWxkRW5kTGluZSA9
IGNvbHVtbnNTcGFuLnJlc29sdmVkRmluYWxQb3NpdGlvbigpLnRvSW50KCk7CisgICAgICAgIHVu
c2lnbmVkIGNoaWxkRW5kTGluZSA9IGNvbHVtbnNTcGFuLnJlc29sdmVkRmluYWxQb3NpdGlvbigp
OwogICAgICAgICBMYXlvdXRVbml0IGVuZE9mQ29sdW1uID0gbV9jb2x1bW5Qb3NpdGlvbnNbY2hp
bGRFbmRMaW5lXTsKICAgICAgICAgLy8gbV9jb2x1bW5Qb3NpdGlvbnMgaW5jbHVkZSBndXR0ZXJz
IHNvIHdlIG5lZWQgdG8gc3Vic3RyYWN0IHRoZW0gdG8gZ2V0IHRoZSBhY3R1YWwgZW5kIHBvc2l0
aW9uIGZvciBhIGdpdmVuCiAgICAgICAgIC8vIGNvbHVtbiAodGhpcyBkb2VzIG5vdCBoYXZlIHRv
IGJlIGRvbmUgZm9yIHRoZSBsYXN0IHRyYWNrIGFzIHRoZXJlIGFyZSBubyBtb3JlIG1fY29sdW1u
UG9zaXRpb25zIGFmdGVyIGl0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL0dyaWRDb29yZGluYXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
R3JpZENvb3JkaW5hdGUuaAppbmRleCAyMWUwNDBkYzI0ZDQ2OWNlMTFlMmNlMmZkZWM0MDliMjcw
MzY1M2RmLi4wMTI3ZDU4ZmMxNWQ5ZDJkZDhiZGQxNDExYmQ0YWNjYmY2N2I0ZDM0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZENvb3JkaW5hdGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZENvb3JkaW5hdGUuaApAQCAtNDks
NyArNDksNyBAQCBjb25zdCB1bnNpZ25lZCBrR3JpZE1heFRyYWNrcyA9IDEwMDAwMDA7CiBjbGFz
cyBHcmlkU3BhbiB7CiBwdWJsaWM6CiAKLSAgICBzdGF0aWMgR3JpZFNwYW4gZGVmaW5pdGVHcmlk
U3Bhbihjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgcmVzb2x2ZWRJbml0aWFsUG9zaXRpb24s
IGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZlZEZpbmFsUG9zaXRpb24pCisgICAg
c3RhdGljIEdyaWRTcGFuIGRlZmluaXRlR3JpZFNwYW4odW5zaWduZWQgcmVzb2x2ZWRJbml0aWFs
UG9zaXRpb24sIHVuc2lnbmVkIHJlc29sdmVkRmluYWxQb3NpdGlvbikKICAgICB7CiAgICAgICAg
IHJldHVybiBHcmlkU3BhbihyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgcmVzb2x2ZWRGaW5hbFBv
c2l0aW9uLCBEZWZpbml0ZSk7CiAgICAgfQpAQCAtNjcsMzAgKzY3LDQyIEBAIHB1YmxpYzoKICAg
ICB1bnNpZ25lZCBpbnRlZ2VyU3BhbigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNE
ZWZpbml0ZSgpKTsKLSAgICAgICAgcmV0dXJuIG1fcmVzb2x2ZWRGaW5hbFBvc2l0aW9uLnRvSW50
KCkgLSBtX3Jlc29sdmVkSW5pdGlhbFBvc2l0aW9uLnRvSW50KCk7CisgICAgICAgIHJldHVybiBt
X3Jlc29sdmVkRmluYWxQb3NpdGlvbiAtIG1fcmVzb2x2ZWRJbml0aWFsUG9zaXRpb247CiAgICAg
fQogCi0gICAgY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29sdmVkSW5pdGlhbFBvc2l0
aW9uKCkgY29uc3QKKyAgICB1bnNpZ25lZCByZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaXNEZWZpbml0ZSgpKTsKICAgICAgICAgcmV0dXJuIG1f
cmVzb2x2ZWRJbml0aWFsUG9zaXRpb247CiAgICAgfQogCi0gICAgY29uc3QgR3JpZFJlc29sdmVk
UG9zaXRpb24mIHJlc29sdmVkRmluYWxQb3NpdGlvbigpIGNvbnN0CisgICAgdW5zaWduZWQgcmVz
b2x2ZWRGaW5hbFBvc2l0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0RlZmlu
aXRlKCkpOworICAgICAgICBBU1NFUlQobV9yZXNvbHZlZEZpbmFsUG9zaXRpb24pOwogICAgICAg
ICByZXR1cm4gbV9yZXNvbHZlZEZpbmFsUG9zaXRpb247CiAgICAgfQogCi0gICAgdHlwZWRlZiBH
cmlkUmVzb2x2ZWRQb3NpdGlvbiBpdGVyYXRvcjsKKyAgICBzdHJ1Y3QgR3JpZFNwYW5JdGVyYXRv
ciB7CisgICAgICAgIEdyaWRTcGFuSXRlcmF0b3IodW5zaWduZWQgdikKKyAgICAgICAgICAgIDog
dmFsdWUodikKKyAgICAgICAgeworICAgICAgICB9CiAKLSAgICBpdGVyYXRvciBiZWdpbigpIGNv
bnN0CisgICAgICAgIHVuc2lnbmVkIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHZhbHVlOyB9
CisgICAgICAgIHVuc2lnbmVkIG9wZXJhdG9yKysoKSB7IHJldHVybiB2YWx1ZSsrOyB9CisgICAg
ICAgIGJvb2wgb3BlcmF0b3IhPShHcmlkU3Bhbkl0ZXJhdG9yIG90aGVyKSBjb25zdCB7IHJldHVy
biB2YWx1ZSAhPSBvdGhlci52YWx1ZTsgfQorCisgICAgICAgIHVuc2lnbmVkIHZhbHVlOworICAg
IH07CisKKyAgICBHcmlkU3Bhbkl0ZXJhdG9yIGJlZ2luKCkgY29uc3QKICAgICB7CiAgICAgICAg
IEFTU0VSVChpc0RlZmluaXRlKCkpOwogICAgICAgICByZXR1cm4gbV9yZXNvbHZlZEluaXRpYWxQ
b3NpdGlvbjsKICAgICB9CiAKLSAgICBpdGVyYXRvciBlbmQoKSBjb25zdAorICAgIEdyaWRTcGFu
SXRlcmF0b3IgZW5kKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0RlZmluaXRlKCkp
OwogICAgICAgICByZXR1cm4gbV9yZXNvbHZlZEZpbmFsUG9zaXRpb247CkBAIC0xMDUsMTYgKzEx
NywxNiBAQCBwcml2YXRlOgogCiAgICAgZW51bSBHcmlkU3BhblR5cGUge0RlZmluaXRlLCBJbmRl
ZmluaXRlfTsKIAotICAgIEdyaWRTcGFuKGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNv
bHZlZEluaXRpYWxQb3NpdGlvbiwgY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29sdmVk
RmluYWxQb3NpdGlvbiwgR3JpZFNwYW5UeXBlIHR5cGUpCi0gICAgICAgIDogbV9yZXNvbHZlZElu
aXRpYWxQb3NpdGlvbihzdGQ6Om1pbihyZXNvbHZlZEluaXRpYWxQb3NpdGlvbi50b0ludCgpLCBr
R3JpZE1heFRyYWNrcyAtIDEpKQotICAgICAgICAsIG1fcmVzb2x2ZWRGaW5hbFBvc2l0aW9uKHN0
ZDo6bWluKHJlc29sdmVkRmluYWxQb3NpdGlvbi50b0ludCgpLCBrR3JpZE1heFRyYWNrcykpCisg
ICAgR3JpZFNwYW4odW5zaWduZWQgcmVzb2x2ZWRJbml0aWFsUG9zaXRpb24sIHVuc2lnbmVkIHJl
c29sdmVkRmluYWxQb3NpdGlvbiwgR3JpZFNwYW5UeXBlIHR5cGUpCisgICAgICAgIDogbV9yZXNv
bHZlZEluaXRpYWxQb3NpdGlvbihzdGQ6Om1pbihyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwga0dy
aWRNYXhUcmFja3MgLSAxKSkKKyAgICAgICAgLCBtX3Jlc29sdmVkRmluYWxQb3NpdGlvbihzdGQ6
Om1pbihyZXNvbHZlZEZpbmFsUG9zaXRpb24sIGtHcmlkTWF4VHJhY2tzKSkKICAgICAgICAgLCBt
X3R5cGUodHlwZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChyZXNvbHZlZEluaXRpYWxQb3NpdGlv
biA8IHJlc29sdmVkRmluYWxQb3NpdGlvbik7CiAgICAgfQogCi0gICAgR3JpZFJlc29sdmVkUG9z
aXRpb24gbV9yZXNvbHZlZEluaXRpYWxQb3NpdGlvbjsKLSAgICBHcmlkUmVzb2x2ZWRQb3NpdGlv
biBtX3Jlc29sdmVkRmluYWxQb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBtX3Jlc29sdmVkSW5pdGlh
bFBvc2l0aW9uOworICAgIHVuc2lnbmVkIG1fcmVzb2x2ZWRGaW5hbFBvc2l0aW9uOwogICAgIEdy
aWRTcGFuVHlwZSBtX3R5cGU7CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHAKaW5kZXggN2MyMTAxYzgzMzYwODgx
MjBkMDdkMzhjOTg2MDc0N2E4MTg5Y2Q1Yy4uODFjOWI3ZTRiNzhjYzY1NGNmZDRjZDE2YjU3MDUy
NWU4OTk1NzBiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dy
aWRSZXNvbHZlZFBvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwCkBAIC0xMTYsNyArMTE2LDcgQEAgc3RhdGljIHVu
c2lnbmVkIGV4cGxpY2l0R3JpZFNpemVGb3JTaWRlKGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29u
dGFpbmVyU3R5bGUsIEcKICAgICByZXR1cm4gaXNDb2x1bW5TaWRlKHNpZGUpID8gR3JpZFJlc29s
dmVkUG9zaXRpb246OmV4cGxpY2l0R3JpZENvbHVtbkNvdW50KGdyaWRDb250YWluZXJTdHlsZSkg
OiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6ZXhwbGljaXRHcmlkUm93Q291bnQoZ3JpZENvbnRhaW5l
clN0eWxlKTsKIH0KIAotc3RhdGljIEdyaWRSZXNvbHZlZFBvc2l0aW9uIHJlc29sdmVOYW1lZEdy
aWRMaW5lUG9zaXRpb25Gcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJT
dHlsZSwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBzaWRl
KQorc3RhdGljIHVuc2lnbmVkIHJlc29sdmVOYW1lZEdyaWRMaW5lUG9zaXRpb25Gcm9tU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgY29uc3QgR3JpZFBvc2l0aW9u
JiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQogewogICAgIEFTU0VSVCghcG9zaXRp
b24ubmFtZWRHcmlkTGluZSgpLmlzTnVsbCgpKTsKIApAQCAtMTM3LDI1ICsxMzcsMjUgQEAgc3Rh
dGljIEdyaWRSZXNvbHZlZFBvc2l0aW9uIHJlc29sdmVOYW1lZEdyaWRMaW5lUG9zaXRpb25Gcm9t
U3R5bGUoY29uc3QgUmVuZGVyU3QKICAgICByZXR1cm4gaXQtPnZhbHVlW25hbWVkR3JpZExpbmVJ
bmRleF07CiB9CiAKLXN0YXRpYyBHcmlkU3BhbiByZXNvbHZlUm93U3RhcnRDb2x1bW5TdGFydE5h
bWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGNvbnN0IEdyaWRSZXNv
bHZlZFBvc2l0aW9uJiByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIGNvbnN0IEdyaWRQb3NpdGlv
biYgcG9zaXRpb24sIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGdyaWRMaW5lcykKK3N0YXRpYyBH
cmlkU3BhbiByZXNvbHZlUm93U3RhcnRDb2x1bW5TdGFydE5hbWVkR3JpZExpbmVQb3NpdGlvbkFn
YWluc3RPcHBvc2l0ZVBvc2l0aW9uKHVuc2lnbmVkIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwg
Y29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgZ3Jp
ZExpbmVzKQogewotICAgIGlmICghcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLnRvSW50KCkpCi0g
ICAgICAgIHJldHVybiBHcmlkU3Bhbjo6ZGVmaW5pdGVHcmlkU3BhbihyZXNvbHZlZE9wcG9zaXRl
UG9zaXRpb24sIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbi5uZXh0KCkpOworICAgIGlmICghcmVz
b2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKQorICAgICAgICByZXR1cm4gR3JpZFNwYW46OmRlZmluaXRl
R3JpZFNwYW4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRp
b24gKyAxKTsKIAogICAgIHVuc2lnbmVkIGZpcnN0TGluZUJlZm9yZVBvc2l0aW9uSW5kZXggPSAw
OwotICAgIGF1dG8gZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gPSBzdGQ6Omxvd2VyX2JvdW5kKGdy
aWRMaW5lcy5iZWdpbigpLCBncmlkTGluZXMuZW5kKCksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlv
bi50b0ludCgpKTsKKyAgICBhdXRvIGZpcnN0TGluZUJlZm9yZVBvc2l0aW9uID0gc3RkOjpsb3dl
cl9ib3VuZChncmlkTGluZXMuYmVnaW4oKSwgZ3JpZExpbmVzLmVuZCgpLCByZXNvbHZlZE9wcG9z
aXRlUG9zaXRpb24pOwogICAgIGlmIChmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiAhPSBncmlkTGlu
ZXMuZW5kKCkpCiAgICAgICAgIGZpcnN0TGluZUJlZm9yZVBvc2l0aW9uSW5kZXggPSBmaXJzdExp
bmVCZWZvcmVQb3NpdGlvbiAtIGdyaWRMaW5lcy5iZWdpbigpOwogCiAgICAgdW5zaWduZWQgZ3Jp
ZExpbmVJbmRleCA9IHN0ZDo6bWF4PGludD4oMCwgZmlyc3RMaW5lQmVmb3JlUG9zaXRpb25JbmRl
eCAtIHBvc2l0aW9uLnNwYW5Qb3NpdGlvbigpKTsKIAotICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9u
IHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uKGdyaWRMaW5l
c1tncmlkTGluZUluZGV4XSk7CisgICAgdW5zaWduZWQgcmVzb2x2ZWRHcmlkTGluZVBvc2l0aW9u
ID0gZ3JpZExpbmVzW2dyaWRMaW5lSW5kZXhdOwogICAgIGlmIChyZXNvbHZlZEdyaWRMaW5lUG9z
aXRpb24gPj0gcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKQotICAgICAgICByZXNvbHZlZEdyaWRM
aW5lUG9zaXRpb24gPSByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24ucHJldigpOwotICAgIHJldHVy
biBHcmlkU3Bhbjo6ZGVmaW5pdGVHcmlkU3BhbihzdGQ6Om1pbjxHcmlkUmVzb2x2ZWRQb3NpdGlv
bj4ocmVzb2x2ZWRHcmlkTGluZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pLCBy
ZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOworICAgICAgICByZXNvbHZlZEdyaWRMaW5lUG9zaXRp
b24gPSByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24gLSAxOworICAgIHJldHVybiBHcmlkU3Bhbjo6
ZGVmaW5pdGVHcmlkU3BhbihzdGQ6Om1pbihyZXNvbHZlZEdyaWRMaW5lUG9zaXRpb24sIHJlc29s
dmVkT3Bwb3NpdGVQb3NpdGlvbiksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CiB9CiAKLXN0
YXRpYyBHcmlkU3BhbiByZXNvbHZlUm93RW5kQ29sdW1uRW5kTmFtZWRHcmlkTGluZVBvc2l0aW9u
QWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29s
dmVkT3Bwb3NpdGVQb3NpdGlvbiwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3Qg
VmVjdG9yPHVuc2lnbmVkPiYgZ3JpZExpbmVzKQorc3RhdGljIEdyaWRTcGFuIHJlc29sdmVSb3dF
bmRDb2x1bW5FbmROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbih1
bnNpZ25lZCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIGNvbnN0IEdyaWRQb3NpdGlvbiYgcG9z
aXRpb24sIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGdyaWRMaW5lcykKIHsKICAgICBBU1NFUlQo
Z3JpZExpbmVzLnNpemUoKSk7CiAgICAgdW5zaWduZWQgZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBv
c2l0aW9uSW5kZXggPSBncmlkTGluZXMuc2l6ZSgpIC0gMTsKQEAgLTE2NCwxMyArMTY0LDEzIEBA
IHN0YXRpYyBHcmlkU3BhbiByZXNvbHZlUm93RW5kQ29sdW1uRW5kTmFtZWRHcmlkTGluZVBvc2l0
aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpCiAgICAgICAgIGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQ
b3NpdGlvbkluZGV4ID0gZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uIC0gZ3JpZExpbmVz
LmJlZ2luKCk7CiAKICAgICB1bnNpZ25lZCBncmlkTGluZUluZGV4ID0gc3RkOjptaW48dW5zaWdu
ZWQ+KGdyaWRMaW5lcy5zaXplKCkgLSAxLCBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb25J
bmRleCArIHBvc2l0aW9uLnNwYW5Qb3NpdGlvbigpIC0gMSk7Ci0gICAgR3JpZFJlc29sdmVkUG9z
aXRpb24gcmVzb2x2ZWRHcmlkTGluZVBvc2l0aW9uID0gZ3JpZExpbmVzW2dyaWRMaW5lSW5kZXhd
OworICAgIHVuc2lnbmVkIHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiA9IGdyaWRMaW5lc1tncmlk
TGluZUluZGV4XTsKICAgICBpZiAocmVzb2x2ZWRHcmlkTGluZVBvc2l0aW9uIDw9IHJlc29sdmVk
T3Bwb3NpdGVQb3NpdGlvbikKLSAgICAgICAgcmVzb2x2ZWRHcmlkTGluZVBvc2l0aW9uID0gcmVz
b2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLm5leHQoKTsKKyAgICAgICAgcmVzb2x2ZWRHcmlkTGluZVBv
c2l0aW9uID0gcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uICsgMTsKICAgICByZXR1cm4gR3JpZFNw
YW46OmRlZmluaXRlR3JpZFNwYW4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZlZEdy
aWRMaW5lUG9zaXRpb24pOwogfQogCi1zdGF0aWMgR3JpZFNwYW4gcmVzb2x2ZU5hbWVkR3JpZExp
bmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiBncmlk
Q29udGFpbmVyU3R5bGUsIGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZlZE9wcG9z
aXRlUG9zaXRpb24sIGNvbnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIEdyaWRQb3NpdGlvblNp
ZGUgc2lkZSkKK3N0YXRpYyBHcmlkU3BhbiByZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0aW9uQWdh
aW5zdE9wcG9zaXRlUG9zaXRpb24oY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHls
ZSwgdW5zaWduZWQgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBjb25zdCBHcmlkUG9zaXRpb24m
IHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCiB7CiAgICAgQVNTRVJUKHBvc2l0aW9u
LmlzU3BhbigpKTsKICAgICBBU1NFUlQoIXBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKS5pc051bGwo
KSk7CkBAIC0xODMsOSArMTgzLDkgQEAgc3RhdGljIEdyaWRTcGFuIHJlc29sdmVOYW1lZEdyaWRM
aW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihjb25zdCBSZW5kZXIKICAgICAvLyBJ
ZiB0aGVyZSBpcyBubyBuYW1lZCBncmlkIGxpbmUgb2YgdGhhdCBuYW1lLCB3ZSByZXNvbHZlIHRo
ZSBwb3NpdGlvbiB0byAnYXV0bycgKHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gJ3NwYW4gMScgaW4g
dGhpcyBjYXNlKS4KICAgICAvLyBTZWUgaHR0cDovL2xpc3RzLnczLm9yZy9BcmNoaXZlcy9QdWJs
aWMvd3d3LXN0eWxlLzIwMTNKdW4vMDM5NC5odG1sLgogICAgIGlmIChpdCA9PSBncmlkTGluZXNO
YW1lcy5lbmQoKSkgewotICAgICAgICBpZiAoaXNTdGFydFNpZGUoc2lkZSkgJiYgcmVzb2x2ZWRP
cHBvc2l0ZVBvc2l0aW9uLnRvSW50KCkpCi0gICAgICAgICAgICByZXR1cm4gR3JpZFNwYW46OmRl
ZmluaXRlR3JpZFNwYW4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLnByZXYoKSwgcmVzb2x2ZWRP
cHBvc2l0ZVBvc2l0aW9uKTsKLSAgICAgICAgcmV0dXJuIEdyaWRTcGFuOjpkZWZpbml0ZUdyaWRT
cGFuKHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLm5l
eHQoKSk7CisgICAgICAgIGlmIChpc1N0YXJ0U2lkZShzaWRlKSAmJiByZXNvbHZlZE9wcG9zaXRl
UG9zaXRpb24pCisgICAgICAgICAgICByZXR1cm4gR3JpZFNwYW46OmRlZmluaXRlR3JpZFNwYW4o
cmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uIC0gMSwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsK
KyAgICAgICAgcmV0dXJuIEdyaWRTcGFuOjpkZWZpbml0ZUdyaWRTcGFuKHJlc29sdmVkT3Bwb3Np
dGVQb3NpdGlvbiwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uICsgMSk7CiAgICAgfQogCiAgICAg
aWYgKHNpZGUgPT0gUm93U3RhcnRTaWRlIHx8IHNpZGUgPT0gQ29sdW1uU3RhcnRTaWRlKQpAQCAt
MTk0LDEyICsxOTQsMTIgQEAgc3RhdGljIEdyaWRTcGFuIHJlc29sdmVOYW1lZEdyaWRMaW5lUG9z
aXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihjb25zdCBSZW5kZXIKICAgICByZXR1cm4gcmVz
b2x2ZVJvd0VuZENvbHVtbkVuZE5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBv
c2l0aW9uKHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgcG9zaXRpb24sIGl0LT52YWx1ZSk7CiB9
CiAKLXN0YXRpYyBHcmlkU3BhbiByZXNvbHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9z
aXRpb24oY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgY29uc3QgR3JpZFJl
c29sdmVkUG9zaXRpb24mIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgY29uc3QgR3JpZFBvc2l0
aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQorc3RhdGljIEdyaWRTcGFuIHJl
c29sdmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihjb25zdCBSZW5kZXJTdHls
ZSYgZ3JpZENvbnRhaW5lclN0eWxlLCB1bnNpZ25lZCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24s
IGNvbnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIEdyaWRQb3NpdGlvblNpZGUgc2lkZSkKIHsK
ICAgICBpZiAocG9zaXRpb24uaXNBdXRvKCkpIHsKLSAgICAgICAgaWYgKGlzU3RhcnRTaWRlKHNp
ZGUpICYmIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbi50b0ludCgpKQotICAgICAgICAgICAgcmV0
dXJuIEdyaWRTcGFuOjpkZWZpbml0ZUdyaWRTcGFuKHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbi5w
cmV2KCksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7Ci0gICAgICAgIHJldHVybiBHcmlkU3Bh
bjo6ZGVmaW5pdGVHcmlkU3BhbihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHJlc29sdmVkT3Bw
b3NpdGVQb3NpdGlvbi5uZXh0KCkpOworICAgICAgICBpZiAoaXNTdGFydFNpZGUoc2lkZSkgJiYg
cmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKQorICAgICAgICAgICAgcmV0dXJuIEdyaWRTcGFuOjpk
ZWZpbml0ZUdyaWRTcGFuKHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiAtMSwgcmVzb2x2ZWRPcHBv
c2l0ZVBvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIEdyaWRTcGFuOjpkZWZpbml0ZUdyaWRTcGFu
KHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uICsgMSk7
CiAgICAgfQogCiAgICAgQVNTRVJUKHBvc2l0aW9uLmlzU3BhbigpKTsKQEAgLTIxNCwxNyArMjE0
LDE3IEBAIHN0YXRpYyBHcmlkU3BhbiByZXNvbHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9wcG9zaXRl
UG9zaXRpb24oY29uc3QgUmVuZGVyU3R5bGUmIGdyCiAgICAgLy8gVGhhdCdzIHdoeSB0aGUgQ1NT
IHNwYW4gdmFsdWUgaXMgb25lIG1vcmUgdGhhbiB0aGUgb2Zmc2V0IHdlIGFwcGx5LgogICAgIHVu
c2lnbmVkIHBvc2l0aW9uT2Zmc2V0ID0gcG9zaXRpb24uc3BhblBvc2l0aW9uKCk7CiAgICAgaWYg
KGlzU3RhcnRTaWRlKHNpZGUpKSB7Ci0gICAgICAgIGlmICghcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0
aW9uLnRvSW50KCkpCi0gICAgICAgICAgICByZXR1cm4gR3JpZFNwYW46OmRlZmluaXRlR3JpZFNw
YW4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24ubmV4
dCgpKTsKKyAgICAgICAgaWYgKCFyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pCisgICAgICAgICAg
ICByZXR1cm4gR3JpZFNwYW46OmRlZmluaXRlR3JpZFNwYW4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0
aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24gKyAxKTsKIAotICAgICAgICB1bnNpZ25lZCBp
bml0aWFsUmVzb2x2ZWRQb3NpdGlvbiA9IHN0ZDo6bWF4PGludD4oMCwgcmVzb2x2ZWRPcHBvc2l0
ZVBvc2l0aW9uLnRvSW50KCkgLSBwb3NpdGlvbk9mZnNldCk7CisgICAgICAgIHVuc2lnbmVkIGlu
aXRpYWxSZXNvbHZlZFBvc2l0aW9uID0gc3RkOjptYXg8aW50PigwLCByZXNvbHZlZE9wcG9zaXRl
UG9zaXRpb24gLSBwb3NpdGlvbk9mZnNldCk7CiAgICAgICAgIHJldHVybiBHcmlkU3Bhbjo6ZGVm
aW5pdGVHcmlkU3Bhbihpbml0aWFsUmVzb2x2ZWRQb3NpdGlvbiwgcmVzb2x2ZWRPcHBvc2l0ZVBv
c2l0aW9uKTsKICAgICB9CiAKLSAgICByZXR1cm4gR3JpZFNwYW46OmRlZmluaXRlR3JpZFNwYW4o
cmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24udG9JbnQo
KSArIHBvc2l0aW9uT2Zmc2V0KTsKKyAgICByZXR1cm4gR3JpZFNwYW46OmRlZmluaXRlR3JpZFNw
YW4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24gKyBw
b3NpdGlvbk9mZnNldCk7CiB9CiAKLUdyaWRTcGFuIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNv
bHZlR3JpZFBvc2l0aW9uc0Zyb21BdXRvUGxhY2VtZW50UG9zaXRpb24oY29uc3QgUmVuZGVyU3R5
bGUmIGdyaWRDb250YWluZXJTdHlsZSwgY29uc3QgUmVuZGVyQm94JiBncmlkSXRlbSwgR3JpZFRy
YWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24m
IHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKQorR3JpZFNwYW4gR3JpZFJlc29sdmVkUG9zaXRpb246
OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbUF1dG9QbGFjZW1lbnRQb3NpdGlvbihjb25zdCBSZW5k
ZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBSZW5kZXJCb3gmIGdyaWRJdGVtLCBH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCB1bnNpZ25lZCByZXNvbHZlZEluaXRp
YWxQb3NpdGlvbikKIHsKICAgICBHcmlkUG9zaXRpb24gaW5pdGlhbFBvc2l0aW9uLCBmaW5hbFBv
c2l0aW9uOwogICAgIGFkanVzdEdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoZ3JpZENvbnRhaW5lclN0
eWxlLCBncmlkSXRlbSwgZGlyZWN0aW9uLCBpbml0aWFsUG9zaXRpb24sIGZpbmFsUG9zaXRpb24p
OwpAQCAtMjMzLDcgKzIzMyw3IEBAIEdyaWRTcGFuIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNv
bHZlR3JpZFBvc2l0aW9uc0Zyb21BdXRvUGxhY2VtZW50UG9zaXRpb24oY29uCiAgICAgLy8gVGhp
cyBtZXRob2Qgd2lsbCBvbmx5IGJlIHVzZWQgd2hlbiBib3RoIHBvc2l0aW9ucyBuZWVkIHRvIGJl
IHJlc29sdmVkIGFnYWluc3QgdGhlIG9wcG9zaXRlIG9uZS4KICAgICBBU1NFUlQoaW5pdGlhbFBv
c2l0aW9uLnNob3VsZEJlUmVzb2x2ZWRBZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbigpICYmIGZpbmFs
UG9zaXRpb24uc2hvdWxkQmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkpOwogCi0g
ICAgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZWRGaW5hbFBvc2l0aW9uID0gcmVzb2x2ZWRJ
bml0aWFsUG9zaXRpb24ubmV4dCgpOworICAgIHVuc2lnbmVkIHJlc29sdmVkRmluYWxQb3NpdGlv
biA9IHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uICsgMTsKIAogICAgIGlmIChpbml0aWFsUG9zaXRp
b24uaXNTcGFuKCkpCiAgICAgICAgIHJldHVybiByZXNvbHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9w
cG9zaXRlUG9zaXRpb24oZ3JpZENvbnRhaW5lclN0eWxlLCByZXNvbHZlZEluaXRpYWxQb3NpdGlv
biwgaW5pdGlhbFBvc2l0aW9uLCBmaW5hbFNpZGUpOwpAQCAtMjQzLDcgKzI0Myw3IEBAIEdyaWRT
cGFuIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21BdXRvUGxh
Y2VtZW50UG9zaXRpb24oY29uCiAgICAgcmV0dXJuIEdyaWRTcGFuOjpkZWZpbml0ZUdyaWRTcGFu
KHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCByZXNvbHZlZEZpbmFsUG9zaXRpb24pOwogfQogCi1z
dGF0aWMgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShj
b25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBHcmlkUG9zaXRpb24m
IHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCitzdGF0aWMgdW5zaWduZWQgcmVzb2x2
ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0
eWxlLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUp
CiB7CiAgICAgc3dpdGNoIChwb3NpdGlvbi50eXBlKCkpIHsKICAgICBjYXNlIEV4cGxpY2l0UG9z
aXRpb246IHsKQEAgLTI5NCwxMCArMjk0LDEwIEBAIHN0YXRpYyBHcmlkUmVzb2x2ZWRQb3NpdGlv
biByZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBncmlkCiAg
ICAgY2FzZSBTcGFuUG9zaXRpb246CiAgICAgICAgIC8vICdhdXRvJyBhbmQgc3BhbiBkZXBlbmQg
b24gdGhlIG9wcG9zaXRlIHBvc2l0aW9uIGZvciByZXNvbHV0aW9uIChlLmcuIGdyaWQtcm93OiBh
dXRvIC8gMSBvciBncmlkLWNvbHVtbjogc3BhbiAzIC8gIm15SGVhZGVyIikuCiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gR3JpZFJlc29sdmVkUG9zaXRpb24o
MCk7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gR3JpZFJlc29sdmVkUG9zaXRpb24oMCk7CisgICAgcmV0dXJuIDA7CiB9CiAK
IEdyaWRTcGFuIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21T
dHlsZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBSZW5kZXJC
b3gmIGdyaWRJdGVtLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQpAQCAtMzI0
LDEzICszMjQsMTMgQEAgR3JpZFNwYW4gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlk
UG9zaXRpb25zRnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJgogICAgICAgICByZXR1cm4gcmVz
b2x2ZUdyaWRQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGdyaWRDb250YWluZXJTdHls
ZSwgaW5pdGlhbFJlc29sdmVkUG9zaXRpb24sIGZpbmFsUG9zaXRpb24sIGZpbmFsU2lkZSk7CiAg
ICAgfQogCi0gICAgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZWRJbml0aWFsUG9zaXRpb24g
PSByZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgaW5pdGlh
bFBvc2l0aW9uLCBpbml0aWFsU2lkZSk7Ci0gICAgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2
ZWRGaW5hbFBvc2l0aW9uID0gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFp
bmVyU3R5bGUsIGZpbmFsUG9zaXRpb24sIGZpbmFsU2lkZSk7CisgICAgdW5zaWduZWQgcmVzb2x2
ZWRJbml0aWFsUG9zaXRpb24gPSByZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKGdyaWRDb250
YWluZXJTdHlsZSwgaW5pdGlhbFBvc2l0aW9uLCBpbml0aWFsU2lkZSk7CisgICAgdW5zaWduZWQg
cmVzb2x2ZWRGaW5hbFBvc2l0aW9uID0gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShncmlk
Q29udGFpbmVyU3R5bGUsIGZpbmFsUG9zaXRpb24sIGZpbmFsU2lkZSk7CiAKICAgICBpZiAocmVz
b2x2ZWRJbml0aWFsUG9zaXRpb24gPiByZXNvbHZlZEZpbmFsUG9zaXRpb24pCiAgICAgICAgIHN0
ZDo6c3dhcChyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uKTsK
ICAgICBlbHNlIGlmIChyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiA9PSByZXNvbHZlZEZpbmFsUG9z
aXRpb24pCi0gICAgICAgIHJlc29sdmVkRmluYWxQb3NpdGlvbiA9IHJlc29sdmVkSW5pdGlhbFBv
c2l0aW9uLm5leHQoKTsKKyAgICAgICAgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uID0gcmVzb2x2ZWRJ
bml0aWFsUG9zaXRpb24gKyAxOwogCiAgICAgcmV0dXJuIEdyaWRTcGFuOjpkZWZpbml0ZUdyaWRT
cGFuKHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCBzdGQ6Om1heChyZXNvbHZlZEluaXRpYWxQb3Np
dGlvbiwgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5oCmluZGV4IDNkOTFlZWNi
MGJjZDUzZmQwZTIxMjJhNmZiNTBjYTVjMDZjMjMyMGEuLmIwM2VjYjkzNDJkNTkzZjYyNDBiODIz
ZWEwNTM5MDU2NWQ4YzY2OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5oCkBAIC00Niw3OSArNDYsMTcgQEAgZW51bSBH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gewogICAgIEZvclJvd3MKIH07CiAKLS8vIFRoaXMgY2xh
c3MgcmVwcmVzZW50cyBhIGxpbmUgaW5kZXggaW50byBvbmUgb2YgdGhlIGRpbWVuc2lvbnMgb2Yg
dGhlIGdyaWQgYXJyYXkuCi0vLyBXcmFwcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGp1c3QgZm9yIHRo
ZSBwdXJwb3NlIG9mIGtub3dpbmcgd2hhdCB3ZSBtYW5pcHVsYXRlIGluIHRoZSBncmlkIGNvZGUu
CisvLyBUaGlzIGlzIGEgdXRpbGl0eSBjbGFzcyB3aXRoIGFsbCB0aGUgY29kZSByZWxhdGVkIHRv
IGdyaWQgaXRlbXMgcG9zaXRpb25zIHJlc29sdXRpb24uCisvLyBUT0RPKHJlZ28pOiBSZW5hbWUg
Y2xhc3MgdG8gR3JpZFBvc2l0aW9uc1Jlc29sdmVyLgogY2xhc3MgR3JpZFJlc29sdmVkUG9zaXRp
b24gewogcHVibGljOgotICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9u
KQotICAgICAgICA6IG1faW50ZWdlclBvc2l0aW9uKHBvc2l0aW9uKQotICAgIHsKLSAgICB9CiAK
LSAgICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgb3BlcmF0b3IqKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgb3BlcmF0b3Ir
KygpCi0gICAgewotICAgICAgICBtX2ludGVnZXJQb3NpdGlvbisrOwotICAgICAgICByZXR1cm4g
KnRoaXM7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdyaWRSZXNvbHZlZFBv
c2l0aW9uJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ludGVnZXJQb3Np
dGlvbiA9PSBvdGhlci5tX2ludGVnZXJQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIG90aGVyKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1faW50ZWdlclBvc2l0aW9uICE9IG90aGVyLm1faW50ZWdlclBvc2l0aW9u
OwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9u
JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ludGVnZXJQb3NpdGlvbiA8
IG90aGVyLm1faW50ZWdlclBvc2l0aW9uOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I+KGNv
bnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2ludGVnZXJQb3NpdGlvbiA+IG90aGVyLm1faW50ZWdlclBvc2l0aW9uOwotICAgIH0K
LQotICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgb3RoZXIp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9pbnRlZ2VyUG9zaXRpb24gPD0gb3RoZXIu
bV9pbnRlZ2VyUG9zaXRpb247Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IEdy
aWRSZXNvbHZlZFBvc2l0aW9uJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2ludGVnZXJQb3NpdGlvbiA+PSBvdGhlci5tX2ludGVnZXJQb3NpdGlvbjsKLSAgICB9Ci0KLSAg
ICB1bnNpZ25lZCB0b0ludCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9pbnRlZ2Vy
UG9zaXRpb247Ci0gICAgfQotCi0gICAgR3JpZFJlc29sdmVkUG9zaXRpb24gbmV4dCgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gR3JpZFJlc29sdmVkUG9zaXRpb24obV9pbnRlZ2VyUG9z
aXRpb24gKyAxKTsKLSAgICB9Ci0KLSAgICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiBwcmV2KCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ludGVnZXJQb3NpdGlvbiA/IG1faW50ZWdlclBv
c2l0aW9uIC0gMSA6IDA7Ci0gICAgfQotCi0gICAgc3RhdGljIEdyaWRTcGFuIHJlc29sdmVHcmlk
UG9zaXRpb25zRnJvbUF1dG9QbGFjZW1lbnRQb3NpdGlvbihjb25zdCBSZW5kZXJTdHlsZSYsIGNv
bnN0IFJlbmRlckJveCYsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiwgY29uc3QgR3JpZFJlc29s
dmVkUG9zaXRpb24mKTsKKyAgICBzdGF0aWMgR3JpZFNwYW4gcmVzb2x2ZUdyaWRQb3NpdGlvbnNG
cm9tQXV0b1BsYWNlbWVudFBvc2l0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVy
Qm94JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCB1bnNpZ25lZCk7CiAgICAgc3RhdGljIEdy
aWRTcGFuIHJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiwg
Y29uc3QgUmVuZGVyQm94JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKTsKICAgICBzdGF0aWMg
dW5zaWduZWQgZXhwbGljaXRHcmlkQ29sdW1uQ291bnQoY29uc3QgUmVuZGVyU3R5bGUmKTsKICAg
ICBzdGF0aWMgdW5zaWduZWQgZXhwbGljaXRHcmlkUm93Q291bnQoY29uc3QgUmVuZGVyU3R5bGUm
KTsKICAgICBzdGF0aWMgYm9vbCBpc05vbkV4aXN0ZW50TmFtZWRMaW5lT3JBcmVhKGNvbnN0IFN0
cmluZyYgbGluZU5hbWUsIGNvbnN0IFJlbmRlclN0eWxlJiwgR3JpZFBvc2l0aW9uU2lkZSk7CiAK
LXByaXZhdGU6Ci0gICAgdW5zaWduZWQgbV9pbnRlZ2VyUG9zaXRpb247CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272557</attachid>
            <date>2016-03-01 03:59:12 -0800</date>
            <delta_ts>2016-03-01 08:54:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154818-20160301125855.patch</filename>
            <type>text/plain</type>
            <size>47461</size>
            <attacher name="Manuel Rego Casasnovas">rego</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3MzI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDJjODc0MjQyODhjZTI3
MzY1OWQ0ZWJjZjNhNmQ1OGM4MDZhYWFhZS4uODA0NTcxM2Y2ZTFiYzJkNjdlMjNjYmI5ZDQ0OWQx
ZjFiOTJmOWYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDE2LTAyLTI5ICBNYW51
ZWwgUmVnbyBDYXNhc25vdmFzICA8cmVnb0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gR2V0IHJpZCBvZiBHcmlkUmVzb2x2ZWRQb3NpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0ODE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCisKKyAgICAgICAgR3JpZFJlc29sdmVkUG9zaXRpb24gd2FzIGEgc21hbGwg
Y2xhc3MganVzdCB3cmFwcGluZyBhIHVuc2lnbmVkLgorICAgICAgICBJbiB0aGUgZnV0dXJlIGl0
IHNob3VsZCBhY3R1YWxseSB3cmFwIGFuIGludGVnZXIsCisgICAgICAgIGFzIHdlIHdhbnQgdG8g
c3VwcG9ydCBpbXBsaWNpdCB0cmFja3MgYmVmb3JlIHRoZSBleHBsaWNpdCBncmlkLgorCisgICAg
ICAgIFRoZSBjbGFzcyBpdHNlbGYgaXMgbm90IHByb3ZpZGluZyBhbnkgYmVuZWZpdCwKKyAgICAg
ICAgc28gd2UgY2FuIGdldCByaWQgb2YgaXQgYW5kIHN0b3JlIGRpcmVjdGx5IDIgdW5zaWduZWQg
aW4gR3JpZFNwYW4uCisKKyAgICAgICAgVGhpcyB3aWxsIG1ha2Ugc2ltcGxlciBmdXR1cmUgY2hh
bmdlcyByZWxhdGVkIHRvIHRoaXMgdGFzay4KKworICAgICAgICBXZSBrZWVwIHRoZSBjbGFzcyBq
dXN0IGFzIGEgdXRpbGl0eSBmb3IgdGhlIG1ldGhvZHMKKyAgICAgICAgdGhhdCBkZWFsIHdpdGgg
dGhlIHBvc2l0aW9ucyByZXNvbHV0aW9uLgorICAgICAgICBCdXQgaXQgc2hvdWxkIGJlIHJlbmFt
ZWQgaW4gYSBmb2xsb3ctdXAgcGF0Y2guCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBjaGFu
Z2Ugb2YgYmVoYXZpb3IuCisKKyAgICAgICAgKiBjc3MvQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdHJpbmdGb3JQb3NpdGlvbik6CisgICAgICAgICog
Y3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlR3Jp
ZFRlbXBsYXRlQXJlYXNSb3cpOgorICAgICAgICAqIGNzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlSW1wbGlj
aXROYW1lZEdyaWRMaW5lc0Zyb21HcmlkQXJlYSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckdyaWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Y29tcHV0ZVVzZWRCcmVh
ZHRoT2ZHcmlkVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmZpbmRGbGV4
RmFjdG9yVW5pdFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6c3Bhbm5pbmdJ
dGVtQ3Jvc3Nlc0ZsZXhpYmxlU2l6ZWRUcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
R3JpZDo6cmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNrU2l6aW5nRnVuY3Rpb25zRm9yTm9uU3Bhbm5p
bmdJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpyZXNvbHZlQ29udGVudEJh
c2VkVHJhY2tTaXppbmdGdW5jdGlvbnNGb3JJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJHcmlkOjppbnNlcnRJdGVtSW50b0dyaWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3Jp
ZDo6cG9wdWxhdGVFeHBsaWNpdEdyaWRBbmRPcmRlckl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckdyaWQ6OmNyZWF0ZUVtcHR5R3JpZEFyZWFBdFNwZWNpZmllZFBvc2l0aW9uc091
dHNpZGVHcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBsYWNlU3BlY2lmaWVk
TWFqb3JBeGlzSXRlbXNPbkdyaWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cGxh
Y2VBdXRvTWFqb3JBeGlzSXRlbU9uR3JpZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlk
OjpvZmZzZXRBbmRCcmVhZHRoRm9yUG9zaXRpb25lZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckdyaWQ6OmdyaWRBcmVhQnJlYWR0aEZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckdyaWQ6OmdyaWRBcmVhQnJlYWR0aEZvckNoaWxkSW5jbHVkaW5nQWxpZ25tZW50T2Zm
c2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpjb2x1bW5BeGlzT2Zmc2V0Rm9y
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cm93QXhpc09mZnNldEZvckNo
aWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvR3JpZENvb3JkaW5hdGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyaWRTcGFuOjpkZWZpbml0ZUdyaWRTcGFuKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyaWRTcGFuOjppbnRlZ2VyU3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpHcmlkU3Bhbjo6
cmVzb2x2ZWRJbml0aWFsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFNwYW46OnJl
c29sdmVkRmluYWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmlkU3Bhbjo6R3JpZFNw
YW5JdGVyYXRvcjo6R3JpZFNwYW5JdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmlkU3Bh
bjo6R3JpZFNwYW5JdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRT
cGFuOjpHcmlkU3Bhbkl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
aWRTcGFuOjpHcmlkU3Bhbkl0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyaWRTcGFuOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpHcmlkU3Bhbjo6ZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyaWRTcGFuOjpHcmlkU3Bhbik6CisgICAgICAgICogcmVuZGVyaW5n
L3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlc29s
dmVOYW1lZEdyaWRMaW5lUG9zaXRpb25Gcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6cmVz
b2x2ZVJvd1N0YXJ0Q29sdW1uU3RhcnROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3Np
dGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlUm93RW5kQ29sdW1uRW5kTmFt
ZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6cmVzb2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQ
b3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2
ZUdyaWRQb3NpdGlvbnNGcm9tQXV0b1BsYWNlbWVudFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OnJlc29sdmVHcmlkUG9zaXRpb25Gcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jp
ZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6b3BlcmF0b3IqKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpvcGVyYXRv
cisrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpv
cGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0
aW9uOjpvcGVyYXRvciE9KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZl
ZFBvc2l0aW9uOjpvcGVyYXRvcjwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JpZFJl
c29sdmVkUG9zaXRpb246Om9wZXJhdG9yPik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmlkUmVzb2x2ZWRQb3NpdGlvbjo6b3BlcmF0b3I8PSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6b3BlcmF0b3I+PSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6dG9JbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JpZFJlc29sdmVkUG9zaXRpb246Om5leHQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JpZFJlc29sdmVkUG9zaXRpb246OnByZXYpOiBEZWxldGVkLgorCiAyMDE2
LTAyLTI4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICA6OnNs
b3R0ZWQgZG9lc24ndCB3b3JrIGluIG5lc3RlZCBzaGFkb3cgdHJlZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlLmNwcAppbmRleCBiNWRlZmMxNTFm
ODg2ZDE4N2Y2NGUyOGUwYjdhNzhmY2EyMTFhZmFhLi5kMjcyYjczYWQyNzdmNTU4OGU0MTI3MDkw
ZWFiYzQyODMzYzdiYmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JpZFRl
bXBsYXRlQXJlYXNWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyaWRUZW1w
bGF0ZUFyZWFzVmFsdWUuY3BwCkBAIC01NSwxMyArNTUsMTMgQEAgc3RhdGljIFN0cmluZyBzdHJp
bmdGb3JQb3NpdGlvbihjb25zdCBOYW1lZEdyaWRBcmVhTWFwJiBncmlkQXJlYU1hcCwgc2l6ZV90
IHJvdywKIAogICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiBncmlkQXJlYU1hcCkgewogICAgICAg
ICBjb25zdCBHcmlkQ29vcmRpbmF0ZSYgY29vcmRpbmF0ZSA9IGl0LnZhbHVlOwotICAgICAgICBp
ZiAocm93ID49IGNvb3JkaW5hdGUucm93cy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpLnRvSW50
KCkgJiYgcm93IDwgY29vcmRpbmF0ZS5yb3dzLnJlc29sdmVkRmluYWxQb3NpdGlvbigpLnRvSW50
KCkpCisgICAgICAgIGlmIChyb3cgPj0gY29vcmRpbmF0ZS5yb3dzLnJlc29sdmVkSW5pdGlhbFBv
c2l0aW9uKCkgJiYgcm93IDwgY29vcmRpbmF0ZS5yb3dzLnJlc29sdmVkRmluYWxQb3NpdGlvbigp
KQogICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoaXQua2V5KTsKICAgICB9CiAKICAgICBm
b3IgKGNvbnN0IGF1dG8mIGl0IDogZ3JpZEFyZWFNYXApIHsKICAgICAgICAgY29uc3QgR3JpZENv
b3JkaW5hdGUmIGNvb3JkaW5hdGUgPSBpdC52YWx1ZTsKLSAgICAgICAgaWYgKGNvbHVtbiA+PSBj
b29yZGluYXRlLmNvbHVtbnMucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKS50b0ludCgpICYmIGNv
bHVtbiA8IGNvb3JkaW5hdGUuY29sdW1ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS50b0ludCgp
ICYmIGNhbmRpZGF0ZXMuY29udGFpbnMoaXQua2V5KSkKKyAgICAgICAgaWYgKGNvbHVtbiA+PSBj
b29yZGluYXRlLmNvbHVtbnMucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKSAmJiBjb2x1bW4gPCBj
b29yZGluYXRlLmNvbHVtbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkgJiYgY2FuZGlkYXRlcy5j
b250YWlucyhpdC5rZXkpKQogICAgICAgICAgICAgcmV0dXJuIGl0LmtleTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggY2UyZmZhMGRlMGRjNDUwOTYyMDk1NmYwMzAxNDc3
NjhmMGE5NGRkYS4uMjFjYjQzZDQyMGE3ZWY1YmI5NDYyNzJkZTIyYzMzOTdlOTYyZDQ5ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTYyNDUsMTggKzYyNDUsMTggQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlR3JpZFRlbXBsYXRlQXJlYXNSb3coTmFtZWRHcmlkQXJlYU1hcCYgZ3JpZEFy
ZWFNYXAsIGNvbnN0IHUKIAogICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjaGVja3MgdGVz
dCB0aGF0IHRoZSBncmlkIGFyZWEgaXMgYSBzaW5nbGUgZmlsbGVkLWluIHJlY3RhbmdsZS4KICAg
ICAgICAgICAgIC8vIDEuIFRoZSBuZXcgcm93IGlzIGFkamFjZW50IHRvIHRoZSBwcmV2aW91c2x5
IHBhcnNlZCByb3cuCi0gICAgICAgICAgICBpZiAocm93Q291bnQgIT0gZ3JpZENvb3JkaW5hdGUu
cm93cy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS50b0ludCgpKQorICAgICAgICAgICAgaWYgKHJv
d0NvdW50ICE9IGdyaWRDb29yZGluYXRlLnJvd3MucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAvLyAyLiBUaGUgbmV3
IGFyZWEgc3RhcnRzIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGFzIHRoZSBwcmV2aW91c2x5IHBhcnNl
ZCBhcmVhLgotICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2x1bW4gIT0gZ3JpZENvb3JkaW5hdGUu
Y29sdW1ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpLnRvSW50KCkpCisgICAgICAgICAgICBp
ZiAoY3VycmVudENvbHVtbiAhPSBncmlkQ29vcmRpbmF0ZS5jb2x1bW5zLnJlc29sdmVkSW5pdGlh
bFBvc2l0aW9uKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAg
ICAvLyAzLiBUaGUgbmV3IGFyZWEgZW5kcyBhdCB0aGUgc2FtZSBwb3NpdGlvbiBhcyB0aGUgcHJl
dmlvdXNseSBwYXJzZWQgYXJlYS4KLSAgICAgICAgICAgIGlmIChsb29rQWhlYWRDb2x1bW4gIT0g
Z3JpZENvb3JkaW5hdGUuY29sdW1ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS50b0ludCgpKQor
ICAgICAgICAgICAgaWYgKGxvb2tBaGVhZENvbHVtbiAhPSBncmlkQ29vcmRpbmF0ZS5jb2x1bW5z
LnJlc29sdmVkRmluYWxQb3NpdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICAgICAgZ3JpZENvb3JkaW5hdGUucm93cyA9IEdyaWRTcGFuOjpkZWZpbml0ZUdy
aWRTcGFuKGdyaWRDb29yZGluYXRlLnJvd3MucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKSwgZ3Jp
ZENvb3JkaW5hdGUucm93cy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS5uZXh0KCkpOworICAgICAg
ICAgICAgZ3JpZENvb3JkaW5hdGUucm93cyA9IEdyaWRTcGFuOjpkZWZpbml0ZUdyaWRTcGFuKGdy
aWRDb29yZGluYXRlLnJvd3MucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKSwgZ3JpZENvb3JkaW5h
dGUucm93cy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKSArIDEpOwogICAgICAgICB9CiAgICAgICAg
IGN1cnJlbnRDb2x1bW4gPSBsb29rQWhlYWRDb2x1bW4gLSAxOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAppbmRleCAxY2QzZDc4YzQ5YjE1YjYwMDdm
ZTdmNDU1MmI2MDlmNmRmZjA2NzhmLi42NzdhNTM3MGExMDEzYjNlZjgxNjMwZjMyZjczYjAxNmI4
ZWRiNjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ29udmVy
dGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCkBA
IC04ODYsMTIgKzg4NiwxMiBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNy
ZWF0ZUltcGxpY2l0TmFtZWRHcmlkTGluZXNGcm9tR3JpZEFyZWEoY29ucwogICAgICAgICBHcmlk
U3BhbiBhcmVhU3BhbiA9IGRpcmVjdGlvbiA9PSBGb3JSb3dzID8gYXJlYS52YWx1ZS5yb3dzIDog
YXJlYS52YWx1ZS5jb2x1bW5zOwogICAgICAgICB7CiAgICAgICAgICAgICBhdXRvJiBzdGFydFZl
Y3RvciA9IG5hbWVkR3JpZExpbmVzLmFkZChhcmVhLmtleSArICItc3RhcnQiLCBWZWN0b3I8dW5z
aWduZWQ+KCkpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgICAgIHN0YXJ0VmVjdG9yLmFwcGVu
ZChhcmVhU3Bhbi5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpLnRvSW50KCkpOworICAgICAgICAg
ICAgc3RhcnRWZWN0b3IuYXBwZW5kKGFyZWFTcGFuLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCkp
OwogICAgICAgICAgICAgc3RkOjpzb3J0KHN0YXJ0VmVjdG9yLmJlZ2luKCksIHN0YXJ0VmVjdG9y
LmVuZCgpKTsKICAgICAgICAgfQogICAgICAgICB7CiAgICAgICAgICAgICBhdXRvJiBlbmRWZWN0
b3IgPSBuYW1lZEdyaWRMaW5lcy5hZGQoYXJlYS5rZXkgKyAiLWVuZCIsIFZlY3Rvcjx1bnNpZ25l
ZD4oKSkuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICAgICAgZW5kVmVjdG9yLmFwcGVuZChhcmVh
U3Bhbi5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS50b0ludCgpKTsKKyAgICAgICAgICAgIGVuZFZl
Y3Rvci5hcHBlbmQoYXJlYVNwYW4ucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkpOwogICAgICAgICAg
ICAgc3RkOjpzb3J0KGVuZFZlY3Rvci5iZWdpbigpLCBlbmRWZWN0b3IuZW5kKCkpOwogICAgICAg
ICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdy
aWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCmluZGV4IGJl
NzM4OTM3OWNkODk2Y2VhZjJjNTFhYTlkY2IxNjg5ZWU3NjJiZWMuLjU2Mjk3N2ExMGVkNzQ2ODNk
NDU1OTZhZTVjMzc2Njc2YjQ2YTNhNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJHcmlkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
R3JpZC5jcHAKQEAgLTU3Nyw3ICs1NzcsNyBAQCB2b2lkIFJlbmRlckdyaWQ6OmNvbXB1dGVVc2Vk
QnJlYWR0aE9mR3JpZFRyYWNrcyhHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aQogICAg
ICAgICAgICAgICAgIGNvbnN0IEdyaWRTcGFuIHNwYW4gPSBjYWNoZWRHcmlkU3BhbigqZ3JpZEl0
ZW0sIGRpcmVjdGlvbik7CiAKICAgICAgICAgICAgICAgICAvLyBEbyBub3QgaW5jbHVkZSBhbHJl
YWR5IHByb2Nlc3NlZCBpdGVtcy4KLSAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgc3Bhbi5y
ZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpLnRvSW50KCkgPD0gZmxleGlibGVTaXplZFRyYWNrc0lu
ZGV4W2kgLSAxXSkKKyAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgc3Bhbi5yZXNvbHZlZElu
aXRpYWxQb3NpdGlvbigpIDw9IGZsZXhpYmxlU2l6ZWRUcmFja3NJbmRleFtpIC0gMV0pCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAgICAgZmxleEZyYWN0aW9u
ID0gc3RkOjptYXgoZmxleEZyYWN0aW9uLCBmaW5kRmxleEZhY3RvclVuaXRTaXplKHRyYWNrcywg
c3BhbiwgZGlyZWN0aW9uLCBtYXhDb250ZW50Rm9yQ2hpbGQoKmdyaWRJdGVtLCBkaXJlY3Rpb24s
IHNpemluZ0RhdGEuY29sdW1uVHJhY2tzKSkpOwpAQCAtNjYxLDggKzY2MSw3IEBAIGRvdWJsZSBS
ZW5kZXJHcmlkOjpmaW5kRmxleEZhY3RvclVuaXRTaXplKGNvbnN0IFZlY3RvcjxHcmlkVHJhY2s+
JiB0cmFja3MsIGNvbnN0CiAKICAgICBkb3VibGUgZmxleEZhY3RvclN1bSA9IDA7CiAgICAgVmVj
dG9yPHVuc2lnbmVkLCA4PiBmbGV4aWJsZVRyYWNrc0luZGV4ZXM7Ci0gICAgZm9yIChjb25zdCBh
dXRvJiByZXNvbHZlZFBvc2l0aW9uIDogdHJhY2tzU3BhbikgewotICAgICAgICB1bnNpZ25lZCB0
cmFja0luZGV4ID0gcmVzb2x2ZWRQb3NpdGlvbi50b0ludCgpOworICAgIGZvciAoYXV0byB0cmFj
a0luZGV4IDogdHJhY2tzU3BhbikgewogICAgICAgICBHcmlkVHJhY2tTaXplIHRyYWNrU2l6ZSA9
IGdyaWRUcmFja1NpemUoZGlyZWN0aW9uLCB0cmFja0luZGV4KTsKICAgICAgICAgaWYgKCF0cmFj
a1NpemUubWF4VHJhY2tCcmVhZHRoKCkuaXNGbGV4KCkpCiAgICAgICAgICAgICBsZWZ0T3ZlclNw
YWNlIC09IHRyYWNrc1t0cmFja0luZGV4XS5iYXNlU2l6ZSgpOwpAQCAtODExLDcgKzgxMCw3IEBA
IHByaXZhdGU6CiBib29sIFJlbmRlckdyaWQ6OnNwYW5uaW5nSXRlbUNyb3NzZXNGbGV4aWJsZVNp
emVkVHJhY2tzKGNvbnN0IEdyaWRTcGFuJiBpdGVtU3BhbiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0
aW9uIGRpcmVjdGlvbikgY29uc3QKIHsKICAgICBmb3IgKGF1dG8gdHJhY2tQb3NpdGlvbiA6IGl0
ZW1TcGFuKSB7Ci0gICAgICAgIGNvbnN0IEdyaWRUcmFja1NpemUmIHRyYWNrU2l6ZSA9IGdyaWRU
cmFja1NpemUoZGlyZWN0aW9uLCB0cmFja1Bvc2l0aW9uLnRvSW50KCkpOworICAgICAgICBjb25z
dCBHcmlkVHJhY2tTaXplJiB0cmFja1NpemUgPSBncmlkVHJhY2tTaXplKGRpcmVjdGlvbiwgdHJh
Y2tQb3NpdGlvbik7CiAgICAgICAgIGlmICh0cmFja1NpemUubWluVHJhY2tCcmVhZHRoKCkuaXNG
bGV4KCkgfHwgdHJhY2tTaXplLm1heFRyYWNrQnJlYWR0aCgpLmlzRmxleCgpKQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtODY1LDggKzg2NCw4IEBAIHZvaWQgUmVuZGVyR3Jp
ZDo6cmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNrU2l6aW5nRnVuY3Rpb25zKEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvCiAKIHZvaWQgUmVuZGVyR3JpZDo6cmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNrU2l6
aW5nRnVuY3Rpb25zRm9yTm9uU3Bhbm5pbmdJdGVtcyhHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBjb25zdCBHcmlkU3BhbiYgc3BhbiwgUmVuZGVyQm94JiBncmlkSXRlbSwgR3Jp
ZFRyYWNrJiB0cmFjaywgVmVjdG9yPEdyaWRUcmFjaz4mIGNvbHVtblRyYWNrcykKIHsKLSAgICBj
b25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiB0cmFja1Bvc2l0aW9uID0gc3Bhbi5yZXNvbHZlZElu
aXRpYWxQb3NpdGlvbigpOwotICAgIEdyaWRUcmFja1NpemUgdHJhY2tTaXplID0gZ3JpZFRyYWNr
U2l6ZShkaXJlY3Rpb24sIHRyYWNrUG9zaXRpb24udG9JbnQoKSk7CisgICAgdW5zaWduZWQgdHJh
Y2tQb3NpdGlvbiA9IHNwYW4ucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKTsKKyAgICBHcmlkVHJh
Y2tTaXplIHRyYWNrU2l6ZSA9IGdyaWRUcmFja1NpemUoZGlyZWN0aW9uLCB0cmFja1Bvc2l0aW9u
KTsKIAogICAgIGlmICh0cmFja1NpemUuaGFzTWluQ29udGVudE1pblRyYWNrQnJlYWR0aCgpKQog
ICAgICAgICB0cmFjay5zZXRCYXNlU2l6ZShzdGQ6Om1heCh0cmFjay5iYXNlU2l6ZSgpLCBtaW5D
b250ZW50Rm9yQ2hpbGQoZ3JpZEl0ZW0sIGRpcmVjdGlvbiwgY29sdW1uVHJhY2tzKSkpOwpAQCAt
MTAyMCw5ICsxMDE5LDkgQEAgdm9pZCBSZW5kZXJHcmlkOjpyZXNvbHZlQ29udGVudEJhc2VkVHJh
Y2tTaXppbmdGdW5jdGlvbnNGb3JJdGVtcyhHcmlkVHJhY2tTaXppbmcKICAgICAgICAgc2l6aW5n
RGF0YS5maWx0ZXJlZFRyYWNrcy5zaHJpbmsoMCk7CiAgICAgICAgIHNpemluZ0RhdGEuZ3Jvd0Jl
eW9uZEdyb3d0aExpbWl0c1RyYWNrcy5zaHJpbmsoMCk7CiAgICAgICAgIExheW91dFVuaXQgc3Bh
bm5pbmdUcmFja3NTaXplOwotICAgICAgICBmb3IgKGF1dG8mIHRyYWNrUG9zaXRpb24gOiBpdGVt
U3BhbikgewotICAgICAgICAgICAgY29uc3QgR3JpZFRyYWNrU2l6ZSYgdHJhY2tTaXplID0gZ3Jp
ZFRyYWNrU2l6ZShkaXJlY3Rpb24sIHRyYWNrUG9zaXRpb24udG9JbnQoKSk7Ci0gICAgICAgICAg
ICBHcmlkVHJhY2smIHRyYWNrID0gKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IHNpemluZ0Rh
dGEuY29sdW1uVHJhY2tzW3RyYWNrUG9zaXRpb24udG9JbnQoKV0gOiBzaXppbmdEYXRhLnJvd1Ry
YWNrc1t0cmFja1Bvc2l0aW9uLnRvSW50KCldOworICAgICAgICBmb3IgKGF1dG8gdHJhY2tQb3Np
dGlvbiA6IGl0ZW1TcGFuKSB7CisgICAgICAgICAgICBjb25zdCBHcmlkVHJhY2tTaXplJiB0cmFj
a1NpemUgPSBncmlkVHJhY2tTaXplKGRpcmVjdGlvbiwgdHJhY2tQb3NpdGlvbik7CisgICAgICAg
ICAgICBHcmlkVHJhY2smIHRyYWNrID0gKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IHNpemlu
Z0RhdGEuY29sdW1uVHJhY2tzW3RyYWNrUG9zaXRpb25dIDogc2l6aW5nRGF0YS5yb3dUcmFja3Nb
dHJhY2tQb3NpdGlvbl07CiAgICAgICAgICAgICBzcGFubmluZ1RyYWNrc1NpemUgKz0gdHJhY2tT
aXplRm9yVHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZShwaGFzZSwgdHJhY2ssIEZvcmJpZEluZmlu
aXR5KTsKICAgICAgICAgICAgIGlmICghc2hvdWxkUHJvY2Vzc1RyYWNrRm9yVHJhY2tTaXplQ29t
cHV0YXRpb25QaGFzZShwaGFzZSwgdHJhY2tTaXplKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTExMzksMTEgKzExMzgsMTEgQEAgdm9pZCBSZW5kZXJHcmlkOjplbnN1cmVHcmlkU2l6
ZSh1bnNpZ25lZCBtYXhpbXVtUm93U2l6ZSwgdW5zaWduZWQgbWF4aW11bUNvbHVtblMKIHZvaWQg
UmVuZGVyR3JpZDo6aW5zZXJ0SXRlbUludG9HcmlkKFJlbmRlckJveCYgY2hpbGQsIGNvbnN0IEdy
aWRDb29yZGluYXRlJiBjb29yZGluYXRlKQogewogICAgIEFTU0VSVChjb29yZGluYXRlLnJvd3Mu
aXNEZWZpbml0ZSgpICYmIGNvb3JkaW5hdGUuY29sdW1ucy5pc0RlZmluaXRlKCkpOwotICAgIGVu
c3VyZUdyaWRTaXplKGNvb3JkaW5hdGUucm93cy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS50b0lu
dCgpLCBjb29yZGluYXRlLmNvbHVtbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkudG9JbnQoKSk7
CisgICAgZW5zdXJlR3JpZFNpemUoY29vcmRpbmF0ZS5yb3dzLnJlc29sdmVkRmluYWxQb3NpdGlv
bigpLCBjb29yZGluYXRlLmNvbHVtbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkpOwogCi0gICAg
Zm9yIChhdXRvJiByb3cgOiBjb29yZGluYXRlLnJvd3MpIHsKLSAgICAgICAgZm9yIChhdXRvJiBj
b2x1bW4gOiBjb29yZGluYXRlLmNvbHVtbnMpCi0gICAgICAgICAgICBtX2dyaWRbcm93LnRvSW50
KCldW2NvbHVtbi50b0ludCgpXS5hcHBlbmQoJmNoaWxkKTsKKyAgICBmb3IgKGF1dG8gcm93IDog
Y29vcmRpbmF0ZS5yb3dzKSB7CisgICAgICAgIGZvciAoYXV0byBjb2x1bW4gOiBjb29yZGluYXRl
LmNvbHVtbnMpCisgICAgICAgICAgICBtX2dyaWRbcm93XVtjb2x1bW5dLmFwcGVuZCgmY2hpbGQp
OwogICAgIH0KIH0KIApAQCAtMTIwNSwyMCArMTIwNCwyMCBAQCB2b2lkIFJlbmRlckdyaWQ6OnBv
cHVsYXRlRXhwbGljaXRHcmlkQW5kT3JkZXJJdGVyYXRvcigpCiAKICAgICAgICAgR3JpZFNwYW4g
cm93UG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25z
RnJvbVN0eWxlKHN0eWxlKCksICpjaGlsZCwgRm9yUm93cyk7CiAgICAgICAgIGlmIChyb3dQb3Np
dGlvbnMuaXNEZWZpbml0ZSgpKSB7Ci0gICAgICAgICAgICBtYXhpbXVtUm93SW5kZXggPSBzdGQ6
Om1heChtYXhpbXVtUm93SW5kZXgsIHJvd1Bvc2l0aW9ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24o
KS50b0ludCgpKTsKKyAgICAgICAgICAgIG1heGltdW1Sb3dJbmRleCA9IHN0ZDo6bWF4KG1heGlt
dW1Sb3dJbmRleCwgcm93UG9zaXRpb25zLnJlc29sdmVkRmluYWxQb3NpdGlvbigpKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEdyb3cgdGhlIGdyaWQgZm9yIGl0ZW1zIHdpdGgg
YSBkZWZpbml0ZSByb3cgc3BhbiwgZ2V0dGluZyB0aGUgbGFyZ2VzdCBzdWNoIHNwYW4uCi0gICAg
ICAgICAgICBHcmlkU3BhbiBwb3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2
ZUdyaWRQb3NpdGlvbnNGcm9tQXV0b1BsYWNlbWVudFBvc2l0aW9uKHN0eWxlKCksICpjaGlsZCwg
Rm9yUm93cywgR3JpZFJlc29sdmVkUG9zaXRpb24oMCkpOwotICAgICAgICAgICAgbWF4aW11bVJv
d0luZGV4ID0gc3RkOjptYXgobWF4aW11bVJvd0luZGV4LCBwb3NpdGlvbnMucmVzb2x2ZWRGaW5h
bFBvc2l0aW9uKCkudG9JbnQoKSk7CisgICAgICAgICAgICBHcmlkU3BhbiBwb3NpdGlvbnMgPSBH
cmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tQXV0b1BsYWNlbWVu
dFBvc2l0aW9uKHN0eWxlKCksICpjaGlsZCwgRm9yUm93cywgMCk7CisgICAgICAgICAgICBtYXhp
bXVtUm93SW5kZXggPSBzdGQ6Om1heChtYXhpbXVtUm93SW5kZXgsIHBvc2l0aW9ucy5yZXNvbHZl
ZEZpbmFsUG9zaXRpb24oKSk7CiAgICAgICAgIH0KIAogICAgICAgICBHcmlkU3BhbiBjb2x1bW5Q
b3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9t
U3R5bGUoc3R5bGUoKSwgKmNoaWxkLCBGb3JDb2x1bW5zKTsKICAgICAgICAgaWYgKGNvbHVtblBv
c2l0aW9ucy5pc0RlZmluaXRlKCkpIHsKLSAgICAgICAgICAgIG1heGltdW1Db2x1bW5JbmRleCA9
IHN0ZDo6bWF4KG1heGltdW1Db2x1bW5JbmRleCwgY29sdW1uUG9zaXRpb25zLnJlc29sdmVkRmlu
YWxQb3NpdGlvbigpLnRvSW50KCkpOworICAgICAgICAgICAgbWF4aW11bUNvbHVtbkluZGV4ID0g
c3RkOjptYXgobWF4aW11bUNvbHVtbkluZGV4LCBjb2x1bW5Qb3NpdGlvbnMucmVzb2x2ZWRGaW5h
bFBvc2l0aW9uKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gR3JvdyB0aGUg
Z3JpZCBmb3IgaXRlbXMgd2l0aCBhIGRlZmluaXRlIGNvbHVtbiBzcGFuLCBnZXR0aW5nIHRoZSBs
YXJnZXN0IHN1Y2ggc3Bhbi4KLSAgICAgICAgICAgIEdyaWRTcGFuIHBvc2l0aW9ucyA9IEdyaWRS
ZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21BdXRvUGxhY2VtZW50UG9z
aXRpb24oc3R5bGUoKSwgKmNoaWxkLCBGb3JDb2x1bW5zLCBHcmlkUmVzb2x2ZWRQb3NpdGlvbigw
KSk7Ci0gICAgICAgICAgICBtYXhpbXVtQ29sdW1uSW5kZXggPSBzdGQ6Om1heChtYXhpbXVtQ29s
dW1uSW5kZXgsIHBvc2l0aW9ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS50b0ludCgpKTsKKyAg
ICAgICAgICAgIEdyaWRTcGFuIHBvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNv
bHZlR3JpZFBvc2l0aW9uc0Zyb21BdXRvUGxhY2VtZW50UG9zaXRpb24oc3R5bGUoKSwgKmNoaWxk
LCBGb3JDb2x1bW5zLCAwKTsKKyAgICAgICAgICAgIG1heGltdW1Db2x1bW5JbmRleCA9IHN0ZDo6
bWF4KG1heGltdW1Db2x1bW5JbmRleCwgcG9zaXRpb25zLnJlc29sdmVkRmluYWxQb3NpdGlvbigp
KTsKICAgICAgICAgfQogCiAgICAgICAgIG1fZ3JpZEl0ZW1Db29yZGluYXRlLnNldChjaGlsZCwg
R3JpZENvb3JkaW5hdGUocm93UG9zaXRpb25zLCBjb2x1bW5Qb3NpdGlvbnMpKTsKQEAgLTEyMzMs
NyArMTIzMiw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxHcmlkQ29vcmRpbmF0ZT4gUmVuZGVyR3JpZDo6
Y3JlYXRlRW1wdHlHcmlkQXJlYUF0U3BlY2lmaWVkUG9zaXRpCiB7CiAgICAgR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uIGNyb3NzRGlyZWN0aW9uID0gc3BlY2lmaWVkRGlyZWN0aW9uID09IEZvckNv
bHVtbnMgPyBGb3JSb3dzIDogRm9yQ29sdW1uczsKICAgICBjb25zdCB1bnNpZ25lZCBlbmRPZkNy
b3NzRGlyZWN0aW9uID0gY3Jvc3NEaXJlY3Rpb24gPT0gRm9yQ29sdW1ucyA/IGdyaWRDb2x1bW5D
b3VudCgpIDogZ3JpZFJvd0NvdW50KCk7Ci0gICAgR3JpZFNwYW4gY3Jvc3NEaXJlY3Rpb25Qb3Np
dGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tQXV0
b1BsYWNlbWVudFBvc2l0aW9uKHN0eWxlKCksIGdyaWRJdGVtLCBjcm9zc0RpcmVjdGlvbiwgR3Jp
ZFJlc29sdmVkUG9zaXRpb24oZW5kT2ZDcm9zc0RpcmVjdGlvbikpOworICAgIEdyaWRTcGFuIGNy
b3NzRGlyZWN0aW9uUG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlk
UG9zaXRpb25zRnJvbUF1dG9QbGFjZW1lbnRQb3NpdGlvbihzdHlsZSgpLCBncmlkSXRlbSwgY3Jv
c3NEaXJlY3Rpb24sIGVuZE9mQ3Jvc3NEaXJlY3Rpb24pOwogICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPEdyaWRDb29yZGluYXRlPihzcGVjaWZpZWREaXJlY3Rpb24gPT0gRm9yQ29sdW1ucyA/
IGNyb3NzRGlyZWN0aW9uUG9zaXRpb25zIDogc3BlY2lmaWVkUG9zaXRpb25zLCBzcGVjaWZpZWRE
aXJlY3Rpb24gPT0gRm9yQ29sdW1ucyA/IHNwZWNpZmllZFBvc2l0aW9ucyA6IGNyb3NzRGlyZWN0
aW9uUG9zaXRpb25zKTsKIH0KIApAQCAtMTI1MSwxMCArMTI1MCwxMCBAQCB2b2lkIFJlbmRlckdy
aWQ6OnBsYWNlU3BlY2lmaWVkTWFqb3JBeGlzSXRlbXNPbkdyaWQoY29uc3QgVmVjdG9yPFJlbmRl
ckJveCo+JiBhdQogICAgICAgICBHcmlkU3BhbiBtYWpvckF4aXNQb3NpdGlvbnMgPSBjYWNoZWRH
cmlkU3BhbigqYXV0b0dyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGlyZWN0aW9uKCkp
OwogICAgICAgICBBU1NFUlQobWFqb3JBeGlzUG9zaXRpb25zLmlzRGVmaW5pdGUoKSk7CiAgICAg
ICAgIEFTU0VSVCghY2FjaGVkR3JpZFNwYW4oKmF1dG9HcmlkSXRlbSwgYXV0b1BsYWNlbWVudE1p
bm9yQXhpc0RpcmVjdGlvbigpKS5pc0RlZmluaXRlKCkpOwotICAgICAgICBHcmlkU3BhbiBtaW5v
ckF4aXNQb3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlv
bnNGcm9tQXV0b1BsYWNlbWVudFBvc2l0aW9uKHN0eWxlKCksICphdXRvR3JpZEl0ZW0sIGF1dG9Q
bGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24oKSwgR3JpZFJlc29sdmVkUG9zaXRpb24oMCkpOwot
ICAgICAgICB1bnNpZ25lZCBtYWpvckF4aXNJbml0aWFsUG9zaXRpb24gPSBtYWpvckF4aXNQb3Np
dGlvbnMucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKS50b0ludCgpOworICAgICAgICBHcmlkU3Bh
biBtaW5vckF4aXNQb3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQ
b3NpdGlvbnNGcm9tQXV0b1BsYWNlbWVudFBvc2l0aW9uKHN0eWxlKCksICphdXRvR3JpZEl0ZW0s
IGF1dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24oKSwgMCk7CisgICAgICAgIHVuc2lnbmVk
IG1ham9yQXhpc0luaXRpYWxQb3NpdGlvbiA9IG1ham9yQXhpc1Bvc2l0aW9ucy5yZXNvbHZlZElu
aXRpYWxQb3NpdGlvbigpOwogCi0gICAgICAgIEdyaWRJdGVyYXRvciBpdGVyYXRvcihtX2dyaWQs
IGF1dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSwgbWFqb3JBeGlzUG9zaXRpb25zLnJl
c29sdmVkSW5pdGlhbFBvc2l0aW9uKCkudG9JbnQoKSwgaXNHcmlkQXV0b0Zsb3dEZW5zZSA/IDAg
OiBtaW5vckF4aXNDdXJzb3JzLmdldChtYWpvckF4aXNJbml0aWFsUG9zaXRpb24pKTsKKyAgICAg
ICAgR3JpZEl0ZXJhdG9yIGl0ZXJhdG9yKG1fZ3JpZCwgYXV0b1BsYWNlbWVudE1ham9yQXhpc0Rp
cmVjdGlvbigpLCBtYWpvckF4aXNQb3NpdGlvbnMucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKSwg
aXNHcmlkQXV0b0Zsb3dEZW5zZSA/IDAgOiBtaW5vckF4aXNDdXJzb3JzLmdldChtYWpvckF4aXNJ
bml0aWFsUG9zaXRpb24pKTsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdyaWRDb29yZGluYXRl
PiBlbXB0eUdyaWRBcmVhID0gaXRlcmF0b3IubmV4dEVtcHR5R3JpZEFyZWEobWFqb3JBeGlzUG9z
aXRpb25zLmludGVnZXJTcGFuKCksIG1pbm9yQXhpc1Bvc2l0aW9ucy5pbnRlZ2VyU3BhbigpKTsK
ICAgICAgICAgaWYgKCFlbXB0eUdyaWRBcmVhKQogICAgICAgICAgICAgZW1wdHlHcmlkQXJlYSA9
IGNyZWF0ZUVtcHR5R3JpZEFyZWFBdFNwZWNpZmllZFBvc2l0aW9uc091dHNpZGVHcmlkKCphdXRv
R3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSwgbWFqb3JBeGlzUG9z
aXRpb25zKTsKQEAgLTEyNjMsNyArMTI2Miw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VTcGVj
aWZpZWRNYWpvckF4aXNJdGVtc09uR3JpZChjb25zdCBWZWN0b3I8UmVuZGVyQm94Kj4mIGF1CiAg
ICAgICAgIGluc2VydEl0ZW1JbnRvR3JpZCgqYXV0b0dyaWRJdGVtLCAqZW1wdHlHcmlkQXJlYSk7
CiAKICAgICAgICAgaWYgKCFpc0dyaWRBdXRvRmxvd0RlbnNlKQotICAgICAgICAgICAgbWlub3JB
eGlzQ3Vyc29ycy5zZXQobWFqb3JBeGlzSW5pdGlhbFBvc2l0aW9uLCBpc0ZvckNvbHVtbnMgPyBl
bXB0eUdyaWRBcmVhLT5yb3dzLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCkudG9JbnQoKSA6IGVt
cHR5R3JpZEFyZWEtPmNvbHVtbnMucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKS50b0ludCgpKTsK
KyAgICAgICAgICAgIG1pbm9yQXhpc0N1cnNvcnMuc2V0KG1ham9yQXhpc0luaXRpYWxQb3NpdGlv
biwgaXNGb3JDb2x1bW5zID8gZW1wdHlHcmlkQXJlYS0+cm93cy5yZXNvbHZlZEluaXRpYWxQb3Np
dGlvbigpIDogZW1wdHlHcmlkQXJlYS0+Y29sdW1ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigp
KTsKICAgICB9CiB9CiAKQEAgLTEyODUsNyArMTI4NCw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxh
Y2VBdXRvTWFqb3JBeGlzSXRlbXNPbkdyaWQoY29uc3QgVmVjdG9yPFJlbmRlckJveCo+JiBhdXRv
R3JpCiB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlQXV0b01ham9yQXhpc0l0ZW1PbkdyaWQoUmVuZGVy
Qm94JiBncmlkSXRlbSwgQXV0b1BsYWNlbWVudEN1cnNvciYgYXV0b1BsYWNlbWVudEN1cnNvcikK
IHsKICAgICBBU1NFUlQoIWNhY2hlZEdyaWRTcGFuKGdyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWFq
b3JBeGlzRGlyZWN0aW9uKCkpLmlzRGVmaW5pdGUoKSk7Ci0gICAgR3JpZFNwYW4gbWFqb3JBeGlz
UG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJv
bUF1dG9QbGFjZW1lbnRQb3NpdGlvbihzdHlsZSgpLCBncmlkSXRlbSwgYXV0b1BsYWNlbWVudE1h
am9yQXhpc0RpcmVjdGlvbigpLCBHcmlkUmVzb2x2ZWRQb3NpdGlvbigwKSk7CisgICAgR3JpZFNw
YW4gbWFqb3JBeGlzUG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlk
UG9zaXRpb25zRnJvbUF1dG9QbGFjZW1lbnRQb3NpdGlvbihzdHlsZSgpLCBncmlkSXRlbSwgYXV0
b1BsYWNlbWVudE1ham9yQXhpc0RpcmVjdGlvbigpLCAwKTsKIAogICAgIGNvbnN0IHVuc2lnbmVk
IGVuZE9mTWFqb3JBeGlzID0gKGF1dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSA9PSBG
b3JDb2x1bW5zKSA/IGdyaWRDb2x1bW5Db3VudCgpIDogZ3JpZFJvd0NvdW50KCk7CiAgICAgdW5z
aWduZWQgbWFqb3JBeGlzQXV0b1BsYWNlbWVudEN1cnNvciA9IGF1dG9QbGFjZW1lbnRNYWpvckF4
aXNEaXJlY3Rpb24oKSA9PSBGb3JDb2x1bW5zID8gYXV0b1BsYWNlbWVudEN1cnNvci5zZWNvbmQg
OiBhdXRvUGxhY2VtZW50Q3Vyc29yLmZpcnN0OwpAQCAtMTI5NSwxOCArMTI5NCwxOCBAQCB2b2lk
IFJlbmRlckdyaWQ6OnBsYWNlQXV0b01ham9yQXhpc0l0ZW1PbkdyaWQoUmVuZGVyQm94JiBncmlk
SXRlbSwgQXV0b1BsYWNlbWVudAogICAgIEdyaWRTcGFuIG1pbm9yQXhpc1Bvc2l0aW9ucyA9IGNh
Y2hlZEdyaWRTcGFuKGdyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWlub3JBeGlzRGlyZWN0aW9uKCkp
OwogICAgIGlmIChtaW5vckF4aXNQb3NpdGlvbnMuaXNEZWZpbml0ZSgpKSB7CiAgICAgICAgIC8v
IE1vdmUgdG8gdGhlIG5leHQgdHJhY2sgaW4gbWFqb3IgYXhpcyBpZiBpbml0aWFsIHBvc2l0aW9u
IGluIG1pbm9yIGF4aXMgaXMgYmVmb3JlIGF1dG8tcGxhY2VtZW50IGN1cnNvci4KLSAgICAgICAg
aWYgKG1pbm9yQXhpc1Bvc2l0aW9ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpLnRvSW50KCkg
PCBtaW5vckF4aXNBdXRvUGxhY2VtZW50Q3Vyc29yKQorICAgICAgICBpZiAobWlub3JBeGlzUG9z
aXRpb25zLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCkgPCBtaW5vckF4aXNBdXRvUGxhY2VtZW50
Q3Vyc29yKQogICAgICAgICAgICAgbWFqb3JBeGlzQXV0b1BsYWNlbWVudEN1cnNvcisrOwogCiAg
ICAgICAgIGlmIChtYWpvckF4aXNBdXRvUGxhY2VtZW50Q3Vyc29yIDwgZW5kT2ZNYWpvckF4aXMp
IHsKLSAgICAgICAgICAgIEdyaWRJdGVyYXRvciBpdGVyYXRvcihtX2dyaWQsIGF1dG9QbGFjZW1l
bnRNaW5vckF4aXNEaXJlY3Rpb24oKSwgbWlub3JBeGlzUG9zaXRpb25zLnJlc29sdmVkSW5pdGlh
bFBvc2l0aW9uKCkudG9JbnQoKSwgbWFqb3JBeGlzQXV0b1BsYWNlbWVudEN1cnNvcik7CisgICAg
ICAgICAgICBHcmlkSXRlcmF0b3IgaXRlcmF0b3IobV9ncmlkLCBhdXRvUGxhY2VtZW50TWlub3JB
eGlzRGlyZWN0aW9uKCksIG1pbm9yQXhpc1Bvc2l0aW9ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlv
bigpLCBtYWpvckF4aXNBdXRvUGxhY2VtZW50Q3Vyc29yKTsKICAgICAgICAgICAgIGVtcHR5R3Jp
ZEFyZWEgPSBpdGVyYXRvci5uZXh0RW1wdHlHcmlkQXJlYShtaW5vckF4aXNQb3NpdGlvbnMuaW50
ZWdlclNwYW4oKSwgbWFqb3JBeGlzUG9zaXRpb25zLmludGVnZXJTcGFuKCkpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKCFlbXB0eUdyaWRBcmVhKQogICAgICAgICAgICAgZW1wdHlHcmlkQXJl
YSA9IGNyZWF0ZUVtcHR5R3JpZEFyZWFBdFNwZWNpZmllZFBvc2l0aW9uc091dHNpZGVHcmlkKGdy
aWRJdGVtLCBhdXRvUGxhY2VtZW50TWlub3JBeGlzRGlyZWN0aW9uKCksIG1pbm9yQXhpc1Bvc2l0
aW9ucyk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgR3JpZFNwYW4gbWlub3JBeGlzUG9zaXRpb25z
ID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbUF1dG9QbGFj
ZW1lbnRQb3NpdGlvbihzdHlsZSgpLCBncmlkSXRlbSwgYXV0b1BsYWNlbWVudE1pbm9yQXhpc0Rp
cmVjdGlvbigpLCBHcmlkUmVzb2x2ZWRQb3NpdGlvbigwKSk7CisgICAgICAgIEdyaWRTcGFuIG1p
bm9yQXhpc1Bvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0
aW9uc0Zyb21BdXRvUGxhY2VtZW50UG9zaXRpb24oc3R5bGUoKSwgZ3JpZEl0ZW0sIGF1dG9QbGFj
ZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24oKSwgMCk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBt
YWpvckF4aXNJbmRleCA9IG1ham9yQXhpc0F1dG9QbGFjZW1lbnRDdXJzb3I7IG1ham9yQXhpc0lu
ZGV4IDwgZW5kT2ZNYWpvckF4aXM7ICsrbWFqb3JBeGlzSW5kZXgpIHsKICAgICAgICAgICAgIEdy
aWRJdGVyYXRvciBpdGVyYXRvcihtX2dyaWQsIGF1dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rp
b24oKSwgbWFqb3JBeGlzSW5kZXgsIG1pbm9yQXhpc0F1dG9QbGFjZW1lbnRDdXJzb3IpOwpAQCAt
MTMxNCw5ICsxMzEzLDkgQEAgdm9pZCBSZW5kZXJHcmlkOjpwbGFjZUF1dG9NYWpvckF4aXNJdGVt
T25HcmlkKFJlbmRlckJveCYgZ3JpZEl0ZW0sIEF1dG9QbGFjZW1lbnQKIAogICAgICAgICAgICAg
aWYgKGVtcHR5R3JpZEFyZWEpIHsKICAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGZp
dHMgaW4gdGhlIG1pbm9yIGF4aXMgZGlyZWN0aW9uLCBhcyB3ZSBzaG91bGRuJ3QgZ3JvdyBpbiB0
aGF0IGRpcmVjdGlvbiBoZXJlIChpdCB3YXMgYWxyZWFkeSBtYW5hZ2VkIGluIHBvcHVsYXRlRXhw
bGljaXRHcmlkQW5kT3JkZXJJdGVyYXRvcigpKS4KLSAgICAgICAgICAgICAgICBHcmlkUmVzb2x2
ZWRQb3NpdGlvbiBtaW5vckF4aXNGaW5hbFBvc2l0aW9uSW5kZXggPSBhdXRvUGxhY2VtZW50TWlu
b3JBeGlzRGlyZWN0aW9uKCkgPT0gRm9yQ29sdW1ucyA/IGVtcHR5R3JpZEFyZWEtPmNvbHVtbnMu
cmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkgOiBlbXB0eUdyaWRBcmVhLT5yb3dzLnJlc29sdmVkRmlu
YWxQb3NpdGlvbigpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1pbm9yQXhpc0ZpbmFsUG9z
aXRpb25JbmRleCA9IGF1dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24oKSA9PSBGb3JDb2x1
bW5zID8gZW1wdHlHcmlkQXJlYS0+Y29sdW1ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKSA6IGVt
cHR5R3JpZEFyZWEtPnJvd3MucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCk7CiAgICAgICAgICAgICAg
ICAgY29uc3QgdW5zaWduZWQgZW5kT2ZNaW5vckF4aXMgPSBhdXRvUGxhY2VtZW50TWlub3JBeGlz
RGlyZWN0aW9uKCkgPT0gRm9yQ29sdW1ucyA/IGdyaWRDb2x1bW5Db3VudCgpIDogZ3JpZFJvd0Nv
dW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1pbm9yQXhpc0ZpbmFsUG9zaXRpb25JbmRleC50
b0ludCgpIDw9IGVuZE9mTWlub3JBeGlzKQorICAgICAgICAgICAgICAgIGlmIChtaW5vckF4aXNG
aW5hbFBvc2l0aW9uSW5kZXggPD0gZW5kT2ZNaW5vckF4aXMpCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgICAgICAgICAgLy8gRGlzY2FyZCBlbXB0eSBncmlkIGFyZWEgYXMg
aXQgZG9lcyBub3QgZml0IGluIHRoZSBtaW5vciBheGlzIGRpcmVjdGlvbi4KQEAgLTEzMzQsOCAr
MTMzMyw4IEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VBdXRvTWFqb3JBeGlzSXRlbU9uR3JpZChS
ZW5kZXJCb3gmIGdyaWRJdGVtLCBBdXRvUGxhY2VtZW50CiAKICAgICBtX2dyaWRJdGVtQ29vcmRp
bmF0ZS5zZXQoJmdyaWRJdGVtLCAqZW1wdHlHcmlkQXJlYSk7CiAgICAgaW5zZXJ0SXRlbUludG9H
cmlkKGdyaWRJdGVtLCAqZW1wdHlHcmlkQXJlYSk7Ci0gICAgYXV0b1BsYWNlbWVudEN1cnNvci5m
aXJzdCA9IGVtcHR5R3JpZEFyZWEtPnJvd3MucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKS50b0lu
dCgpOwotICAgIGF1dG9QbGFjZW1lbnRDdXJzb3Iuc2Vjb25kID0gZW1wdHlHcmlkQXJlYS0+Y29s
dW1ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpLnRvSW50KCk7CisgICAgYXV0b1BsYWNlbWVu
dEN1cnNvci5maXJzdCA9IGVtcHR5R3JpZEFyZWEtPnJvd3MucmVzb2x2ZWRJbml0aWFsUG9zaXRp
b24oKTsKKyAgICBhdXRvUGxhY2VtZW50Q3Vyc29yLnNlY29uZCA9IGVtcHR5R3JpZEFyZWEtPmNv
bHVtbnMucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKTsKIH0KIAogR3JpZFRyYWNrU2l6aW5nRGly
ZWN0aW9uIFJlbmRlckdyaWQ6OmF1dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSBjb25z
dApAQCAtMTQ4MCwyMiArMTQ3OSwyMiBAQCB2b2lkIFJlbmRlckdyaWQ6Om9mZnNldEFuZEJyZWFk
dGhGb3JQb3NpdGlvbmVkQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgR3JpZAogCiAgICAg
Ym9vbCBzdGFydElzQXV0byA9IHN0YXJ0UG9zaXRpb24uaXNBdXRvKCkKICAgICAgICAgfHwgKHN0
YXJ0UG9zaXRpb24uaXNOYW1lZEdyaWRBcmVhKCkgJiYgR3JpZFJlc29sdmVkUG9zaXRpb246Omlz
Tm9uRXhpc3RlbnROYW1lZExpbmVPckFyZWEoc3RhcnRQb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCks
IHN0eWxlKCksIChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyBDb2x1bW5TdGFydFNpZGUgOiBS
b3dTdGFydFNpZGUpKQotICAgICAgICB8fCAocG9zaXRpb25zLnJlc29sdmVkSW5pdGlhbFBvc2l0
aW9uKCkudG9JbnQoKSA+IGxhc3RUcmFja0luZGV4KTsKKyAgICAgICAgfHwgKHBvc2l0aW9ucy5y
ZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpID4gbGFzdFRyYWNrSW5kZXgpOwogICAgIGJvb2wgZW5k
SXNBdXRvID0gZW5kUG9zaXRpb24uaXNBdXRvKCkKICAgICAgICAgfHwgKGVuZFBvc2l0aW9uLmlz
TmFtZWRHcmlkQXJlYSgpICYmIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjppc05vbkV4aXN0ZW50TmFt
ZWRMaW5lT3JBcmVhKGVuZFBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKSwgc3R5bGUoKSwgKGRpcmVj
dGlvbiA9PSBGb3JDb2x1bW5zKSA/IENvbHVtbkVuZFNpZGUgOiBSb3dFbmRTaWRlKSkKLSAgICAg
ICAgfHwgKHBvc2l0aW9ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS5wcmV2KCkudG9JbnQoKSA+
IGxhc3RUcmFja0luZGV4KTsKKyAgICAgICAgfHwgKHBvc2l0aW9ucy5yZXNvbHZlZEZpbmFsUG9z
aXRpb24oKSAtIDEgPiBsYXN0VHJhY2tJbmRleCk7CiAKLSAgICBHcmlkUmVzb2x2ZWRQb3NpdGlv
biBmaXJzdFBvc2l0aW9uID0gR3JpZFJlc29sdmVkUG9zaXRpb24oMCk7Ci0gICAgR3JpZFJlc29s
dmVkUG9zaXRpb24gaW5pdGlhbFBvc2l0aW9uID0gc3RhcnRJc0F1dG8gPyBmaXJzdFBvc2l0aW9u
IDogcG9zaXRpb25zLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCk7Ci0gICAgR3JpZFJlc29sdmVk
UG9zaXRpb24gbGFzdFBvc2l0aW9uID0gR3JpZFJlc29sdmVkUG9zaXRpb24obGFzdFRyYWNrSW5k
ZXgpOwotICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uIGZpbmFsUG9zaXRpb24gPSBlbmRJc0F1dG8g
PyBsYXN0UG9zaXRpb24gOiBwb3NpdGlvbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkucHJldigp
OworICAgIHVuc2lnbmVkIGZpcnN0UG9zaXRpb24gPSAwOworICAgIHVuc2lnbmVkIGluaXRpYWxQ
b3NpdGlvbiA9IHN0YXJ0SXNBdXRvID8gZmlyc3RQb3NpdGlvbiA6IHBvc2l0aW9ucy5yZXNvbHZl
ZEluaXRpYWxQb3NpdGlvbigpOworICAgIHVuc2lnbmVkIGxhc3RQb3NpdGlvbiA9IGxhc3RUcmFj
a0luZGV4OworICAgIHVuc2lnbmVkIGZpbmFsUG9zaXRpb24gPSBlbmRJc0F1dG8gPyBsYXN0UG9z
aXRpb24gOiBwb3NpdGlvbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkgLSAxOwogCiAgICAgLy8g
UG9zaXRpb25lZCBjaGlsZHJlbiBkbyBub3QgZ3JvdyB0aGUgZ3JpZCwgc28gd2UgbmVlZCB0byBj
bGFtcCB0aGUgcG9zaXRpb25zIHRvIGF2b2lkIGVuZGluZyB1cCBvdXRzaWRlIG9mIGl0LgotICAg
IGluaXRpYWxQb3NpdGlvbiA9IHN0ZDo6bWluPEdyaWRSZXNvbHZlZFBvc2l0aW9uPihpbml0aWFs
UG9zaXRpb24sIGxhc3RQb3NpdGlvbik7Ci0gICAgZmluYWxQb3NpdGlvbiA9IHN0ZDo6bWluPEdy
aWRSZXNvbHZlZFBvc2l0aW9uPihmaW5hbFBvc2l0aW9uLCBsYXN0UG9zaXRpb24pOworICAgIGlu
aXRpYWxQb3NpdGlvbiA9IHN0ZDo6bWluKGluaXRpYWxQb3NpdGlvbiwgbGFzdFBvc2l0aW9uKTsK
KyAgICBmaW5hbFBvc2l0aW9uID0gc3RkOjptaW4oZmluYWxQb3NpdGlvbiwgbGFzdFBvc2l0aW9u
KTsKIAotICAgIExheW91dFVuaXQgc3RhcnQgPSBzdGFydElzQXV0byA/IExheW91dFVuaXQoKSA6
IChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyAgbV9jb2x1bW5Qb3NpdGlvbnNbaW5pdGlhbFBv
c2l0aW9uLnRvSW50KCldIDogbV9yb3dQb3NpdGlvbnNbaW5pdGlhbFBvc2l0aW9uLnRvSW50KCld
OwotICAgIExheW91dFVuaXQgZW5kID0gZW5kSXNBdXRvID8gKGRpcmVjdGlvbiA9PSBGb3JDb2x1
bW5zKSA/IGxvZ2ljYWxXaWR0aCgpIDogbG9naWNhbEhlaWdodCgpIDogKGRpcmVjdGlvbiA9PSBG
b3JDb2x1bW5zKSA/ICBtX2NvbHVtblBvc2l0aW9uc1tmaW5hbFBvc2l0aW9uLm5leHQoKS50b0lu
dCgpXSA6IG1fcm93UG9zaXRpb25zW2ZpbmFsUG9zaXRpb24ubmV4dCgpLnRvSW50KCldOworICAg
IExheW91dFVuaXQgc3RhcnQgPSBzdGFydElzQXV0byA/IExheW91dFVuaXQoKSA6IChkaXJlY3Rp
b24gPT0gRm9yQ29sdW1ucykgPyAgbV9jb2x1bW5Qb3NpdGlvbnNbaW5pdGlhbFBvc2l0aW9uXSA6
IG1fcm93UG9zaXRpb25zW2luaXRpYWxQb3NpdGlvbl07CisgICAgTGF5b3V0VW5pdCBlbmQgPSBl
bmRJc0F1dG8gPyAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gbG9naWNhbFdpZHRoKCkgOiBs
b2dpY2FsSGVpZ2h0KCkgOiAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gIG1fY29sdW1uUG9z
aXRpb25zW2ZpbmFsUG9zaXRpb24gKyAxXSA6IG1fcm93UG9zaXRpb25zW2ZpbmFsUG9zaXRpb24g
KyAxXTsKIAogICAgIGJyZWFkdGggPSBlbmQgLSBzdGFydDsKIApAQCAtMTUzNyw4ICsxNTM2LDgg
QEAgTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpncmlkQXJlYUJyZWFkdGhGb3JDaGlsZChjb25zdCBS
ZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2sKIHsKICAgICBjb25zdCBHcmlkU3BhbiYgc3BhbiA9
IGNhY2hlZEdyaWRTcGFuKGNoaWxkLCBkaXJlY3Rpb24pOwogICAgIExheW91dFVuaXQgZ3JpZEFy
ZWFCcmVhZHRoID0gMDsKLSAgICBmb3IgKGF1dG8mIHRyYWNrUG9zaXRpb24gOiBzcGFuKQotICAg
ICAgICBncmlkQXJlYUJyZWFkdGggKz0gdHJhY2tzW3RyYWNrUG9zaXRpb24udG9JbnQoKV0uYmFz
ZVNpemUoKTsKKyAgICBmb3IgKGF1dG8gdHJhY2tQb3NpdGlvbiA6IHNwYW4pCisgICAgICAgIGdy
aWRBcmVhQnJlYWR0aCArPSB0cmFja3NbdHJhY2tQb3NpdGlvbl0uYmFzZVNpemUoKTsKIAogICAg
IGdyaWRBcmVhQnJlYWR0aCArPSBndXR0ZXJzU2l6ZShkaXJlY3Rpb24sIHNwYW4uaW50ZWdlclNw
YW4oKSk7CiAKQEAgLTE1NTMsMTEgKzE1NTIsMTEgQEAgTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpn
cmlkQXJlYUJyZWFkdGhGb3JDaGlsZEluY2x1ZGluZ0FsaWdubWVudE9mZnNldHMoY29uc3QgUmUK
ICAgICBjb25zdCBhdXRvJiBzcGFuID0gY2FjaGVkR3JpZFNwYW4oY2hpbGQsIGRpcmVjdGlvbik7
CiAgICAgY29uc3QgYXV0byYgbGluZVBvc2l0aW9ucyA9IChkaXJlY3Rpb24gPT0gRm9yQ29sdW1u
cykgPyBtX2NvbHVtblBvc2l0aW9ucyA6IG1fcm93UG9zaXRpb25zOwogCi0gICAgTGF5b3V0VW5p
dCBpbml0aWFsVHJhY2tQb3NpdGlvbiA9IGxpbmVQb3NpdGlvbnNbc3Bhbi5yZXNvbHZlZEluaXRp
YWxQb3NpdGlvbigpLnRvSW50KCldOwotICAgIExheW91dFVuaXQgZmluYWxUcmFja1Bvc2l0aW9u
ID0gbGluZVBvc2l0aW9uc1tzcGFuLnJlc29sdmVkRmluYWxQb3NpdGlvbigpLnByZXYoKS50b0lu
dCgpXTsKKyAgICBMYXlvdXRVbml0IGluaXRpYWxUcmFja1Bvc2l0aW9uID0gbGluZVBvc2l0aW9u
c1tzcGFuLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCldOworICAgIExheW91dFVuaXQgZmluYWxU
cmFja1Bvc2l0aW9uID0gbGluZVBvc2l0aW9uc1tzcGFuLnJlc29sdmVkRmluYWxQb3NpdGlvbigp
IC0gMV07CiAKICAgICAvLyBUcmFjayBQb3NpdGlvbnMgdmVjdG9yIHN0b3JlcyB0aGUgJ3N0YXJ0
JyBncmlkIGxpbmUgb2YgZWFjaCB0cmFjaywgc28gd2UgaGF2ZSB0byBhZGQgbGFzdCB0cmFjaydz
IGJhc2VTaXplLgotICAgIHJldHVybiBmaW5hbFRyYWNrUG9zaXRpb24gLSBpbml0aWFsVHJhY2tQ
b3NpdGlvbiArIHRyYWNrc1tzcGFuLnJlc29sdmVkRmluYWxQb3NpdGlvbigpLnByZXYoKS50b0lu
dCgpXS5iYXNlU2l6ZSgpOworICAgIHJldHVybiBmaW5hbFRyYWNrUG9zaXRpb24gLSBpbml0aWFs
VHJhY2tQb3NpdGlvbiArIHRyYWNrc1tzcGFuLnJlc29sdmVkRmluYWxQb3NpdGlvbigpIC0gMV0u
YmFzZVNpemUoKTsKIH0KIAogdm9pZCBSZW5kZXJHcmlkOjpwb3B1bGF0ZUdyaWRQb3NpdGlvbnMo
R3JpZFNpemluZ0RhdGEmIHNpemluZ0RhdGEpCkBAIC0xODM2LDcgKzE4MzUsNyBAQCBzdGF0aWMg
aW5saW5lIExheW91dFVuaXQgb2Zmc2V0QmV0d2VlblRyYWNrcyhDb250ZW50RGlzdHJpYnV0aW9u
VHlwZSBkaXN0cmlidXRpbwogTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpjb2x1bW5BeGlzT2Zmc2V0
Rm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHsKICAgICBjb25zdCBHcmlk
U3BhbiYgcm93c1NwYW4gPSBjYWNoZWRHcmlkU3BhbihjaGlsZCwgRm9yUm93cyk7Ci0gICAgdW5z
aWduZWQgY2hpbGRTdGFydExpbmUgPSByb3dzU3Bhbi5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigp
LnRvSW50KCk7CisgICAgdW5zaWduZWQgY2hpbGRTdGFydExpbmUgPSByb3dzU3Bhbi5yZXNvbHZl
ZEluaXRpYWxQb3NpdGlvbigpOwogICAgIExheW91dFVuaXQgc3RhcnRPZlJvdyA9IG1fcm93UG9z
aXRpb25zW2NoaWxkU3RhcnRMaW5lXTsKICAgICBMYXlvdXRVbml0IHN0YXJ0UG9zaXRpb24gPSBz
dGFydE9mUm93ICsgbWFyZ2luQmVmb3JlRm9yQ2hpbGQoY2hpbGQpOwogICAgIGlmIChoYXNBdXRv
TWFyZ2luc0luQ29sdW1uQXhpcyhjaGlsZCkpCkBAIC0xODQ3LDcgKzE4NDYsNyBAQCBMYXlvdXRV
bml0IFJlbmRlckdyaWQ6OmNvbHVtbkF4aXNPZmZzZXRGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gm
IGNoaWxkKSBjb25zdAogICAgICAgICByZXR1cm4gc3RhcnRQb3NpdGlvbjsKICAgICBjYXNlIEdy
aWRBeGlzRW5kOgogICAgIGNhc2UgR3JpZEF4aXNDZW50ZXI6IHsKLSAgICAgICAgdW5zaWduZWQg
Y2hpbGRFbmRMaW5lID0gcm93c1NwYW4ucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkudG9JbnQoKTsK
KyAgICAgICAgdW5zaWduZWQgY2hpbGRFbmRMaW5lID0gcm93c1NwYW4ucmVzb2x2ZWRGaW5hbFBv
c2l0aW9uKCk7CiAgICAgICAgIExheW91dFVuaXQgZW5kT2ZSb3cgPSBtX3Jvd1Bvc2l0aW9uc1tj
aGlsZEVuZExpbmVdOwogICAgICAgICAvLyBtX3Jvd1Bvc2l0aW9ucyBpbmNsdWRlIGd1dHRlcnMg
c28gd2UgbmVlZCB0byBzdWJzdHJhY3QgdGhlbSB0byBnZXQgdGhlIGFjdHVhbCBlbmQgcG9zaXRp
b24gZm9yIGEgZ2l2ZW4KICAgICAgICAgLy8gcm93ICh0aGlzIGRvZXMgbm90IGhhdmUgdG8gYmUg
ZG9uZSBmb3IgdGhlIGxhc3QgdHJhY2sgYXMgdGhlcmUgYXJlIG5vIG1vcmUgbV9yb3dQb3NpdGlv
bnMgYWZ0ZXIgaXQpCkBAIC0xODcwLDcgKzE4NjksNyBAQCBMYXlvdXRVbml0IFJlbmRlckdyaWQ6
OmNvbHVtbkF4aXNPZmZzZXRGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAog
TGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpyb3dBeGlzT2Zmc2V0Rm9yQ2hpbGQoY29uc3QgUmVuZGVy
Qm94JiBjaGlsZCkgY29uc3QKIHsKICAgICBjb25zdCBHcmlkU3BhbiYgY29sdW1uc1NwYW4gPSBj
YWNoZWRHcmlkU3BhbihjaGlsZCwgRm9yQ29sdW1ucyk7Ci0gICAgdW5zaWduZWQgY2hpbGRTdGFy
dExpbmUgPSBjb2x1bW5zU3Bhbi5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpLnRvSW50KCk7Cisg
ICAgdW5zaWduZWQgY2hpbGRTdGFydExpbmUgPSBjb2x1bW5zU3Bhbi5yZXNvbHZlZEluaXRpYWxQ
b3NpdGlvbigpOwogICAgIExheW91dFVuaXQgc3RhcnRPZkNvbHVtbiA9IG1fY29sdW1uUG9zaXRp
b25zW2NoaWxkU3RhcnRMaW5lXTsKICAgICBMYXlvdXRVbml0IHN0YXJ0UG9zaXRpb24gPSBzdGFy
dE9mQ29sdW1uICsgbWFyZ2luU3RhcnRGb3JDaGlsZChjaGlsZCk7CiAgICAgaWYgKGhhc0F1dG9N
YXJnaW5zSW5Sb3dBeGlzKGNoaWxkKSkKQEAgLTE4ODEsNyArMTg4MCw3IEBAIExheW91dFVuaXQg
UmVuZGVyR3JpZDo6cm93QXhpc09mZnNldEZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQp
IGNvbnN0CiAgICAgICAgIHJldHVybiBzdGFydFBvc2l0aW9uOwogICAgIGNhc2UgR3JpZEF4aXNF
bmQ6CiAgICAgY2FzZSBHcmlkQXhpc0NlbnRlcjogewotICAgICAgICB1bnNpZ25lZCBjaGlsZEVu
ZExpbmUgPSBjb2x1bW5zU3Bhbi5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS50b0ludCgpOworICAg
ICAgICB1bnNpZ25lZCBjaGlsZEVuZExpbmUgPSBjb2x1bW5zU3Bhbi5yZXNvbHZlZEZpbmFsUG9z
aXRpb24oKTsKICAgICAgICAgTGF5b3V0VW5pdCBlbmRPZkNvbHVtbiA9IG1fY29sdW1uUG9zaXRp
b25zW2NoaWxkRW5kTGluZV07CiAgICAgICAgIC8vIG1fY29sdW1uUG9zaXRpb25zIGluY2x1ZGUg
Z3V0dGVycyBzbyB3ZSBuZWVkIHRvIHN1YnN0cmFjdCB0aGVtIHRvIGdldCB0aGUgYWN0dWFsIGVu
ZCBwb3NpdGlvbiBmb3IgYSBnaXZlbgogICAgICAgICAvLyBjb2x1bW4gKHRoaXMgZG9lcyBub3Qg
aGF2ZSB0byBiZSBkb25lIGZvciB0aGUgbGFzdCB0cmFjayBhcyB0aGVyZSBhcmUgbm8gbW9yZSBt
X2NvbHVtblBvc2l0aW9ucyBhZnRlciBpdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9HcmlkQ29vcmRpbmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL0dyaWRDb29yZGluYXRlLmgKaW5kZXggMjFlMDQwZGMyNGQ0NjljZTExZTJjZTJmZGVj
NDA5YjI3MDM2NTNkZi4uNTM1NGJkNmJlMGQ4NjA5NDY0YmVhOTc3ZWEwMGM5MTU2NzVmMjE5ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRDb29yZGluYXRl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRDb29yZGluYXRlLmgK
QEAgLTQ5LDcgKzQ5LDcgQEAgY29uc3QgdW5zaWduZWQga0dyaWRNYXhUcmFja3MgPSAxMDAwMDAw
OwogY2xhc3MgR3JpZFNwYW4gewogcHVibGljOgogCi0gICAgc3RhdGljIEdyaWRTcGFuIGRlZmlu
aXRlR3JpZFNwYW4oY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29sdmVkSW5pdGlhbFBv
c2l0aW9uLCBjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgcmVzb2x2ZWRGaW5hbFBvc2l0aW9u
KQorICAgIHN0YXRpYyBHcmlkU3BhbiBkZWZpbml0ZUdyaWRTcGFuKHVuc2lnbmVkIHJlc29sdmVk
SW5pdGlhbFBvc2l0aW9uLCB1bnNpZ25lZCByZXNvbHZlZEZpbmFsUG9zaXRpb24pCiAgICAgewog
ICAgICAgICByZXR1cm4gR3JpZFNwYW4ocmVzb2x2ZWRJbml0aWFsUG9zaXRpb24sIHJlc29sdmVk
RmluYWxQb3NpdGlvbiwgRGVmaW5pdGUpOwogICAgIH0KQEAgLTY3LDMwICs2Nyw0MSBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgaW50ZWdlclNwYW4oKSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKGlzRGVmaW5pdGUoKSk7Ci0gICAgICAgIHJldHVybiBtX3Jlc29sdmVkRmluYWxQb3NpdGlv
bi50b0ludCgpIC0gbV9yZXNvbHZlZEluaXRpYWxQb3NpdGlvbi50b0ludCgpOworICAgICAgICBy
ZXR1cm4gbV9yZXNvbHZlZEZpbmFsUG9zaXRpb24gLSBtX3Jlc29sdmVkSW5pdGlhbFBvc2l0aW9u
OwogICAgIH0KIAotICAgIGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZlZEluaXRp
YWxQb3NpdGlvbigpIGNvbnN0CisgICAgdW5zaWduZWQgcmVzb2x2ZWRJbml0aWFsUG9zaXRpb24o
KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzRGVmaW5pdGUoKSk7CiAgICAgICAgIHJl
dHVybiBtX3Jlc29sdmVkSW5pdGlhbFBvc2l0aW9uOwogICAgIH0KIAotICAgIGNvbnN0IEdyaWRS
ZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZlZEZpbmFsUG9zaXRpb24oKSBjb25zdAorICAgIHVuc2ln
bmVkIHJlc29sdmVkRmluYWxQb3NpdGlvbigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
aXNEZWZpbml0ZSgpKTsKKyAgICAgICAgQVNTRVJUKG1fcmVzb2x2ZWRGaW5hbFBvc2l0aW9uKTsK
ICAgICAgICAgcmV0dXJuIG1fcmVzb2x2ZWRGaW5hbFBvc2l0aW9uOwogICAgIH0KIAotICAgIHR5
cGVkZWYgR3JpZFJlc29sdmVkUG9zaXRpb24gaXRlcmF0b3I7CisgICAgc3RydWN0IEdyaWRTcGFu
SXRlcmF0b3IgeworICAgICAgICBHcmlkU3Bhbkl0ZXJhdG9yKHVuc2lnbmVkIHZhbHVlKQorICAg
ICAgICAgICAgOiB2YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICB9CiAKLSAgICBpdGVy
YXRvciBiZWdpbigpIGNvbnN0CisgICAgICAgIG9wZXJhdG9yIHVuc2lnbmVkJigpIHsgcmV0dXJu
IHZhbHVlOyB9CisgICAgICAgIHVuc2lnbmVkIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHZh
bHVlOyB9CisKKyAgICAgICAgdW5zaWduZWQgdmFsdWU7CisgICAgfTsKKworICAgIEdyaWRTcGFu
SXRlcmF0b3IgYmVnaW4oKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzRGVmaW5pdGUo
KSk7CiAgICAgICAgIHJldHVybiBtX3Jlc29sdmVkSW5pdGlhbFBvc2l0aW9uOwogICAgIH0KIAot
ICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0CisgICAgR3JpZFNwYW5JdGVyYXRvciBlbmQoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzRGVmaW5pdGUoKSk7CiAgICAgICAgIHJldHVybiBt
X3Jlc29sdmVkRmluYWxQb3NpdGlvbjsKQEAgLTEwNSwxNiArMTE2LDE2IEBAIHByaXZhdGU6CiAK
ICAgICBlbnVtIEdyaWRTcGFuVHlwZSB7RGVmaW5pdGUsIEluZGVmaW5pdGV9OwogCi0gICAgR3Jp
ZFNwYW4oY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29sdmVkSW5pdGlhbFBvc2l0aW9u
LCBjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uLCBHcmlk
U3BhblR5cGUgdHlwZSkKLSAgICAgICAgOiBtX3Jlc29sdmVkSW5pdGlhbFBvc2l0aW9uKHN0ZDo6
bWluKHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLnRvSW50KCksIGtHcmlkTWF4VHJhY2tzIC0gMSkp
Ci0gICAgICAgICwgbV9yZXNvbHZlZEZpbmFsUG9zaXRpb24oc3RkOjptaW4ocmVzb2x2ZWRGaW5h
bFBvc2l0aW9uLnRvSW50KCksIGtHcmlkTWF4VHJhY2tzKSkKKyAgICBHcmlkU3Bhbih1bnNpZ25l
ZCByZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgdW5zaWduZWQgcmVzb2x2ZWRGaW5hbFBvc2l0aW9u
LCBHcmlkU3BhblR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3Jlc29sdmVkSW5pdGlhbFBvc2l0aW9u
KHN0ZDo6bWluKHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCBrR3JpZE1heFRyYWNrcyAtIDEpKQor
ICAgICAgICAsIG1fcmVzb2x2ZWRGaW5hbFBvc2l0aW9uKHN0ZDo6bWluKHJlc29sdmVkRmluYWxQ
b3NpdGlvbiwga0dyaWRNYXhUcmFja3MpKQogICAgICAgICAsIG1fdHlwZSh0eXBlKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uIDwgcmVzb2x2ZWRGaW5hbFBv
c2l0aW9uKTsKICAgICB9CiAKLSAgICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiBtX3Jlc29sdmVkSW5p
dGlhbFBvc2l0aW9uOwotICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uIG1fcmVzb2x2ZWRGaW5hbFBv
c2l0aW9uOworICAgIHVuc2lnbmVkIG1fcmVzb2x2ZWRJbml0aWFsUG9zaXRpb247CisgICAgdW5z
aWduZWQgbV9yZXNvbHZlZEZpbmFsUG9zaXRpb247CiAgICAgR3JpZFNwYW5UeXBlIG1fdHlwZTsK
IAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29s
dmVkUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNv
bHZlZFBvc2l0aW9uLmNwcAppbmRleCA3YzIxMDFjODMzNjA4ODEyMGQwN2QzOGM5ODYwNzQ3YTgx
ODljZDVjLi42ZTU2NjNmYjI2ZTdkNmRjODhhODYzZTc2YWE2MWQwNjI4NDIwNDVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3Np
dGlvbi5jcHAKQEAgLTExNiw3ICsxMTYsNyBAQCBzdGF0aWMgdW5zaWduZWQgZXhwbGljaXRHcmlk
U2l6ZUZvclNpZGUoY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgRwogICAg
IHJldHVybiBpc0NvbHVtblNpZGUoc2lkZSkgPyBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6ZXhwbGlj
aXRHcmlkQ29sdW1uQ291bnQoZ3JpZENvbnRhaW5lclN0eWxlKSA6IEdyaWRSZXNvbHZlZFBvc2l0
aW9uOjpleHBsaWNpdEdyaWRSb3dDb3VudChncmlkQ29udGFpbmVyU3R5bGUpOwogfQogCi1zdGF0
aWMgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkZyb21T
dHlsZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBHcmlkUG9z
aXRpb24mIHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCitzdGF0aWMgdW5zaWduZWQg
cmVzb2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkZyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYg
Z3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBHcmlkUG9z
aXRpb25TaWRlIHNpZGUpCiB7CiAgICAgQVNTRVJUKCFwb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCku
aXNOdWxsKCkpOwogCkBAIC0xMzcsMjUgKzEzNywyNSBAQCBzdGF0aWMgR3JpZFJlc29sdmVkUG9z
aXRpb24gcmVzb2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkZyb21TdHlsZShjb25zdCBSZW5kZXJT
dAogICAgIHJldHVybiBpdC0+dmFsdWVbbmFtZWRHcmlkTGluZUluZGV4XTsKIH0KIAotc3RhdGlj
IEdyaWRTcGFuIHJlc29sdmVSb3dTdGFydENvbHVtblN0YXJ0TmFtZWRHcmlkTGluZVBvc2l0aW9u
QWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29s
dmVkT3Bwb3NpdGVQb3NpdGlvbiwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3Qg
VmVjdG9yPHVuc2lnbmVkPiYgZ3JpZExpbmVzKQorc3RhdGljIEdyaWRTcGFuIHJlc29sdmVSb3dT
dGFydENvbHVtblN0YXJ0TmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRp
b24odW5zaWduZWQgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBjb25zdCBHcmlkUG9zaXRpb24m
IHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBncmlkTGluZXMpCiB7Ci0gICAgaWYg
KCFyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24udG9JbnQoKSkKLSAgICAgICAgcmV0dXJuIEdyaWRT
cGFuOjpkZWZpbml0ZUdyaWRTcGFuKHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgcmVzb2x2ZWRP
cHBvc2l0ZVBvc2l0aW9uLm5leHQoKSk7CisgICAgaWYgKCFyZXNvbHZlZE9wcG9zaXRlUG9zaXRp
b24pCisgICAgICAgIHJldHVybiBHcmlkU3Bhbjo6ZGVmaW5pdGVHcmlkU3BhbihyZXNvbHZlZE9w
cG9zaXRlUG9zaXRpb24sIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiArIDEpOwogCiAgICAgdW5z
aWduZWQgZmlyc3RMaW5lQmVmb3JlUG9zaXRpb25JbmRleCA9IDA7Ci0gICAgYXV0byBmaXJzdExp
bmVCZWZvcmVQb3NpdGlvbiA9IHN0ZDo6bG93ZXJfYm91bmQoZ3JpZExpbmVzLmJlZ2luKCksIGdy
aWRMaW5lcy5lbmQoKSwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLnRvSW50KCkpOworICAgIGF1
dG8gZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gPSBzdGQ6Omxvd2VyX2JvdW5kKGdyaWRMaW5lcy5i
ZWdpbigpLCBncmlkTGluZXMuZW5kKCksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CiAgICAg
aWYgKGZpcnN0TGluZUJlZm9yZVBvc2l0aW9uICE9IGdyaWRMaW5lcy5lbmQoKSkKICAgICAgICAg
Zmlyc3RMaW5lQmVmb3JlUG9zaXRpb25JbmRleCA9IGZpcnN0TGluZUJlZm9yZVBvc2l0aW9uIC0g
Z3JpZExpbmVzLmJlZ2luKCk7CiAKICAgICB1bnNpZ25lZCBncmlkTGluZUluZGV4ID0gc3RkOjpt
YXg8aW50PigwLCBmaXJzdExpbmVCZWZvcmVQb3NpdGlvbkluZGV4IC0gcG9zaXRpb24uc3BhblBv
c2l0aW9uKCkpOwogCi0gICAgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZWRHcmlkTGluZVBv
c2l0aW9uID0gR3JpZFJlc29sdmVkUG9zaXRpb24oZ3JpZExpbmVzW2dyaWRMaW5lSW5kZXhdKTsK
KyAgICB1bnNpZ25lZCByZXNvbHZlZEdyaWRMaW5lUG9zaXRpb24gPSBncmlkTGluZXNbZ3JpZExp
bmVJbmRleF07CiAgICAgaWYgKHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiA+PSByZXNvbHZlZE9w
cG9zaXRlUG9zaXRpb24pCi0gICAgICAgIHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiA9IHJlc29s
dmVkT3Bwb3NpdGVQb3NpdGlvbi5wcmV2KCk7Ci0gICAgcmV0dXJuIEdyaWRTcGFuOjpkZWZpbml0
ZUdyaWRTcGFuKHN0ZDo6bWluPEdyaWRSZXNvbHZlZFBvc2l0aW9uPihyZXNvbHZlZEdyaWRMaW5l
UG9zaXRpb24sIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiksIHJlc29sdmVkT3Bwb3NpdGVQb3Np
dGlvbik7CisgICAgICAgIHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiA9IHJlc29sdmVkT3Bwb3Np
dGVQb3NpdGlvbiAtIDE7CisgICAgcmV0dXJuIEdyaWRTcGFuOjpkZWZpbml0ZUdyaWRTcGFuKHN0
ZDo6bWluKHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9u
KSwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsKIH0KIAotc3RhdGljIEdyaWRTcGFuIHJlc29s
dmVSb3dFbmRDb2x1bW5FbmROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3Np
dGlvbihjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9u
LCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBn
cmlkTGluZXMpCitzdGF0aWMgR3JpZFNwYW4gcmVzb2x2ZVJvd0VuZENvbHVtbkVuZE5hbWVkR3Jp
ZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKHVuc2lnbmVkIHJlc29sdmVkT3Bw
b3NpdGVQb3NpdGlvbiwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgVmVjdG9y
PHVuc2lnbmVkPiYgZ3JpZExpbmVzKQogewogICAgIEFTU0VSVChncmlkTGluZXMuc2l6ZSgpKTsK
ICAgICB1bnNpZ25lZCBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb25JbmRleCA9IGdyaWRM
aW5lcy5zaXplKCkgLSAxOwpAQCAtMTY0LDEzICsxNjQsMTMgQEAgc3RhdGljIEdyaWRTcGFuIHJl
c29sdmVSb3dFbmRDb2x1bW5FbmROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQ
b3NpdGkKICAgICAgICAgZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uSW5kZXggPSBmaXJz
dExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb24gLSBncmlkTGluZXMuYmVnaW4oKTsKIAogICAgIHVu
c2lnbmVkIGdyaWRMaW5lSW5kZXggPSBzdGQ6Om1pbjx1bnNpZ25lZD4oZ3JpZExpbmVzLnNpemUo
KSAtIDEsIGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbkluZGV4ICsgcG9zaXRpb24uc3Bh
blBvc2l0aW9uKCkgLSAxKTsKLSAgICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiByZXNvbHZlZEdyaWRM
aW5lUG9zaXRpb24gPSBncmlkTGluZXNbZ3JpZExpbmVJbmRleF07CisgICAgdW5zaWduZWQgcmVz
b2x2ZWRHcmlkTGluZVBvc2l0aW9uID0gZ3JpZExpbmVzW2dyaWRMaW5lSW5kZXhdOwogICAgIGlm
IChyZXNvbHZlZEdyaWRMaW5lUG9zaXRpb24gPD0gcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKQot
ICAgICAgICByZXNvbHZlZEdyaWRMaW5lUG9zaXRpb24gPSByZXNvbHZlZE9wcG9zaXRlUG9zaXRp
b24ubmV4dCgpOworICAgICAgICByZXNvbHZlZEdyaWRMaW5lUG9zaXRpb24gPSByZXNvbHZlZE9w
cG9zaXRlUG9zaXRpb24gKyAxOwogICAgIHJldHVybiBHcmlkU3Bhbjo6ZGVmaW5pdGVHcmlkU3Bh
bihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbik7CiB9
CiAKLXN0YXRpYyBHcmlkU3BhbiByZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9w
cG9zaXRlUG9zaXRpb24oY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgY29u
c3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgY29uc3Qg
R3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQorc3RhdGljIEdy
aWRTcGFuIHJlc29sdmVOYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlv
bihjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCB1bnNpZ25lZCByZXNvbHZl
ZE9wcG9zaXRlUG9zaXRpb24sIGNvbnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIEdyaWRQb3Np
dGlvblNpZGUgc2lkZSkKIHsKICAgICBBU1NFUlQocG9zaXRpb24uaXNTcGFuKCkpOwogICAgIEFT
U0VSVCghcG9zaXRpb24ubmFtZWRHcmlkTGluZSgpLmlzTnVsbCgpKTsKQEAgLTE4Myw5ICsxODMs
OSBAQCBzdGF0aWMgR3JpZFNwYW4gcmVzb2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RP
cHBvc2l0ZVBvc2l0aW9uKGNvbnN0IFJlbmRlcgogICAgIC8vIElmIHRoZXJlIGlzIG5vIG5hbWVk
IGdyaWQgbGluZSBvZiB0aGF0IG5hbWUsIHdlIHJlc29sdmUgdGhlIHBvc2l0aW9uIHRvICdhdXRv
JyAod2hpY2ggaXMgZXF1aXZhbGVudCB0byAnc3BhbiAxJyBpbiB0aGlzIGNhc2UpLgogICAgIC8v
IFNlZSBodHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy93d3ctc3R5bGUvMjAxM0p1
bi8wMzk0Lmh0bWwuCiAgICAgaWYgKGl0ID09IGdyaWRMaW5lc05hbWVzLmVuZCgpKSB7Ci0gICAg
ICAgIGlmIChpc1N0YXJ0U2lkZShzaWRlKSAmJiByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24udG9J
bnQoKSkKLSAgICAgICAgICAgIHJldHVybiBHcmlkU3Bhbjo6ZGVmaW5pdGVHcmlkU3BhbihyZXNv
bHZlZE9wcG9zaXRlUG9zaXRpb24ucHJldigpLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOwot
ICAgICAgICByZXR1cm4gR3JpZFNwYW46OmRlZmluaXRlR3JpZFNwYW4ocmVzb2x2ZWRPcHBvc2l0
ZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24ubmV4dCgpKTsKKyAgICAgICAgaWYg
KGlzU3RhcnRTaWRlKHNpZGUpICYmIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbikKKyAgICAgICAg
ICAgIHJldHVybiBHcmlkU3Bhbjo6ZGVmaW5pdGVHcmlkU3BhbihyZXNvbHZlZE9wcG9zaXRlUG9z
aXRpb24gLSAxLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOworICAgICAgICByZXR1cm4gR3Jp
ZFNwYW46OmRlZmluaXRlR3JpZFNwYW4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZl
ZE9wcG9zaXRlUG9zaXRpb24gKyAxKTsKICAgICB9CiAKICAgICBpZiAoc2lkZSA9PSBSb3dTdGFy
dFNpZGUgfHwgc2lkZSA9PSBDb2x1bW5TdGFydFNpZGUpCkBAIC0xOTQsMTIgKzE5NCwxMiBAQCBz
dGF0aWMgR3JpZFNwYW4gcmVzb2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0
ZVBvc2l0aW9uKGNvbnN0IFJlbmRlcgogICAgIHJldHVybiByZXNvbHZlUm93RW5kQ29sdW1uRW5k
TmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24ocmVzb2x2ZWRPcHBv
c2l0ZVBvc2l0aW9uLCBwb3NpdGlvbiwgaXQtPnZhbHVlKTsKIH0KIAotc3RhdGljIEdyaWRTcGFu
IHJlc29sdmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihjb25zdCBSZW5kZXJT
dHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgcmVz
b2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBHcmlk
UG9zaXRpb25TaWRlIHNpZGUpCitzdGF0aWMgR3JpZFNwYW4gcmVzb2x2ZUdyaWRQb3NpdGlvbkFn
YWluc3RPcHBvc2l0ZVBvc2l0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5
bGUsIHVuc2lnbmVkIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgY29uc3QgR3JpZFBvc2l0aW9u
JiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQogewogICAgIGlmIChwb3NpdGlvbi5p
c0F1dG8oKSkgewotICAgICAgICBpZiAoaXNTdGFydFNpZGUoc2lkZSkgJiYgcmVzb2x2ZWRPcHBv
c2l0ZVBvc2l0aW9uLnRvSW50KCkpCi0gICAgICAgICAgICByZXR1cm4gR3JpZFNwYW46OmRlZmlu
aXRlR3JpZFNwYW4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLnByZXYoKSwgcmVzb2x2ZWRPcHBv
c2l0ZVBvc2l0aW9uKTsKLSAgICAgICAgcmV0dXJuIEdyaWRTcGFuOjpkZWZpbml0ZUdyaWRTcGFu
KHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLm5leHQo
KSk7CisgICAgICAgIGlmIChpc1N0YXJ0U2lkZShzaWRlKSAmJiByZXNvbHZlZE9wcG9zaXRlUG9z
aXRpb24pCisgICAgICAgICAgICByZXR1cm4gR3JpZFNwYW46OmRlZmluaXRlR3JpZFNwYW4ocmVz
b2x2ZWRPcHBvc2l0ZVBvc2l0aW9uIC0gMSwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsKKyAg
ICAgICAgcmV0dXJuIEdyaWRTcGFuOjpkZWZpbml0ZUdyaWRTcGFuKHJlc29sdmVkT3Bwb3NpdGVQ
b3NpdGlvbiwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uICsgMSk7CiAgICAgfQogCiAgICAgQVNT
RVJUKHBvc2l0aW9uLmlzU3BhbigpKTsKQEAgLTIxNCwxNyArMjE0LDE3IEBAIHN0YXRpYyBHcmlk
U3BhbiByZXNvbHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oY29uc3QgUmVu
ZGVyU3R5bGUmIGdyCiAgICAgLy8gVGhhdCdzIHdoeSB0aGUgQ1NTIHNwYW4gdmFsdWUgaXMgb25l
IG1vcmUgdGhhbiB0aGUgb2Zmc2V0IHdlIGFwcGx5LgogICAgIHVuc2lnbmVkIHBvc2l0aW9uT2Zm
c2V0ID0gcG9zaXRpb24uc3BhblBvc2l0aW9uKCk7CiAgICAgaWYgKGlzU3RhcnRTaWRlKHNpZGUp
KSB7Ci0gICAgICAgIGlmICghcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLnRvSW50KCkpCi0gICAg
ICAgICAgICByZXR1cm4gR3JpZFNwYW46OmRlZmluaXRlR3JpZFNwYW4ocmVzb2x2ZWRPcHBvc2l0
ZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24ubmV4dCgpKTsKKyAgICAgICAgaWYg
KCFyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pCisgICAgICAgICAgICByZXR1cm4gR3JpZFNwYW46
OmRlZmluaXRlR3JpZFNwYW4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9z
aXRlUG9zaXRpb24gKyAxKTsKIAotICAgICAgICB1bnNpZ25lZCBpbml0aWFsUmVzb2x2ZWRQb3Np
dGlvbiA9IHN0ZDo6bWF4PGludD4oMCwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLnRvSW50KCkg
LSBwb3NpdGlvbk9mZnNldCk7CisgICAgICAgIHVuc2lnbmVkIGluaXRpYWxSZXNvbHZlZFBvc2l0
aW9uID0gc3RkOjptYXg8aW50PigwLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24gLSBwb3NpdGlv
bk9mZnNldCk7CiAgICAgICAgIHJldHVybiBHcmlkU3Bhbjo6ZGVmaW5pdGVHcmlkU3Bhbihpbml0
aWFsUmVzb2x2ZWRQb3NpdGlvbiwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsKICAgICB9CiAK
LSAgICByZXR1cm4gR3JpZFNwYW46OmRlZmluaXRlR3JpZFNwYW4ocmVzb2x2ZWRPcHBvc2l0ZVBv
c2l0aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24udG9JbnQoKSArIHBvc2l0aW9uT2Zmc2V0
KTsKKyAgICByZXR1cm4gR3JpZFNwYW46OmRlZmluaXRlR3JpZFNwYW4ocmVzb2x2ZWRPcHBvc2l0
ZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24gKyBwb3NpdGlvbk9mZnNldCk7CiB9
CiAKLUdyaWRTcGFuIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zy
b21BdXRvUGxhY2VtZW50UG9zaXRpb24oY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJT
dHlsZSwgY29uc3QgUmVuZGVyQm94JiBncmlkSXRlbSwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9u
IGRpcmVjdGlvbiwgY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29sdmVkSW5pdGlhbFBv
c2l0aW9uKQorR3JpZFNwYW4gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRp
b25zRnJvbUF1dG9QbGFjZW1lbnRQb3NpdGlvbihjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRh
aW5lclN0eWxlLCBjb25zdCBSZW5kZXJCb3gmIGdyaWRJdGVtLCBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gZGlyZWN0aW9uLCB1bnNpZ25lZCByZXNvbHZlZEluaXRpYWxQb3NpdGlvbikKIHsKICAg
ICBHcmlkUG9zaXRpb24gaW5pdGlhbFBvc2l0aW9uLCBmaW5hbFBvc2l0aW9uOwogICAgIGFkanVz
dEdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoZ3JpZENvbnRhaW5lclN0eWxlLCBncmlkSXRlbSwgZGly
ZWN0aW9uLCBpbml0aWFsUG9zaXRpb24sIGZpbmFsUG9zaXRpb24pOwpAQCAtMjMzLDcgKzIzMyw3
IEBAIEdyaWRTcGFuIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zy
b21BdXRvUGxhY2VtZW50UG9zaXRpb24oY29uCiAgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBvbmx5
IGJlIHVzZWQgd2hlbiBib3RoIHBvc2l0aW9ucyBuZWVkIHRvIGJlIHJlc29sdmVkIGFnYWluc3Qg
dGhlIG9wcG9zaXRlIG9uZS4KICAgICBBU1NFUlQoaW5pdGlhbFBvc2l0aW9uLnNob3VsZEJlUmVz
b2x2ZWRBZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbigpICYmIGZpbmFsUG9zaXRpb24uc2hvdWxkQmVS
ZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkpOwogCi0gICAgR3JpZFJlc29sdmVkUG9z
aXRpb24gcmVzb2x2ZWRGaW5hbFBvc2l0aW9uID0gcmVzb2x2ZWRJbml0aWFsUG9zaXRpb24ubmV4
dCgpOworICAgIHVuc2lnbmVkIHJlc29sdmVkRmluYWxQb3NpdGlvbiA9IHJlc29sdmVkSW5pdGlh
bFBvc2l0aW9uICsgMTsKIAogICAgIGlmIChpbml0aWFsUG9zaXRpb24uaXNTcGFuKCkpCiAgICAg
ICAgIHJldHVybiByZXNvbHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oZ3Jp
ZENvbnRhaW5lclN0eWxlLCByZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgaW5pdGlhbFBvc2l0aW9u
LCBmaW5hbFNpZGUpOwpAQCAtMjQzLDcgKzI0Myw3IEBAIEdyaWRTcGFuIEdyaWRSZXNvbHZlZFBv
c2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21BdXRvUGxhY2VtZW50UG9zaXRpb24oY29u
CiAgICAgcmV0dXJuIEdyaWRTcGFuOjpkZWZpbml0ZUdyaWRTcGFuKHJlc29sdmVkSW5pdGlhbFBv
c2l0aW9uLCByZXNvbHZlZEZpbmFsUG9zaXRpb24pOwogfQogCi1zdGF0aWMgR3JpZFJlc29sdmVk
UG9zaXRpb24gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYg
Z3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBHcmlkUG9z
aXRpb25TaWRlIHNpZGUpCitzdGF0aWMgdW5zaWduZWQgcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21T
dHlsZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBHcmlkUG9z
aXRpb24mIHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCiB7CiAgICAgc3dpdGNoIChw
b3NpdGlvbi50eXBlKCkpIHsKICAgICBjYXNlIEV4cGxpY2l0UG9zaXRpb246IHsKQEAgLTI5NCwx
MCArMjk0LDEwIEBAIHN0YXRpYyBHcmlkUmVzb2x2ZWRQb3NpdGlvbiByZXNvbHZlR3JpZFBvc2l0
aW9uRnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBncmlkCiAgICAgY2FzZSBTcGFuUG9zaXRp
b246CiAgICAgICAgIC8vICdhdXRvJyBhbmQgc3BhbiBkZXBlbmQgb24gdGhlIG9wcG9zaXRlIHBv
c2l0aW9uIGZvciByZXNvbHV0aW9uIChlLmcuIGdyaWQtcm93OiBhdXRvIC8gMSBvciBncmlkLWNv
bHVtbjogc3BhbiAzIC8gIm15SGVhZGVyIikuCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gR3JpZFJlc29sdmVkUG9zaXRpb24oMCk7CisgICAgICAgIHJldHVy
biAwOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gR3JpZFJl
c29sdmVkUG9zaXRpb24oMCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIEdyaWRTcGFuIEdyaWRSZXNv
bHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZShjb25zdCBSZW5kZXJT
dHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBSZW5kZXJCb3gmIGdyaWRJdGVtLCBHcmlk
VHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQpAQCAtMzI0LDEzICszMjQsMTMgQEAgR3Jp
ZFNwYW4gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxl
KGNvbnN0IFJlbmRlclN0eWxlJgogICAgICAgICByZXR1cm4gcmVzb2x2ZUdyaWRQb3NpdGlvbkFn
YWluc3RPcHBvc2l0ZVBvc2l0aW9uKGdyaWRDb250YWluZXJTdHlsZSwgaW5pdGlhbFJlc29sdmVk
UG9zaXRpb24sIGZpbmFsUG9zaXRpb24sIGZpbmFsU2lkZSk7CiAgICAgfQogCi0gICAgR3JpZFJl
c29sdmVkUG9zaXRpb24gcmVzb2x2ZWRJbml0aWFsUG9zaXRpb24gPSByZXNvbHZlR3JpZFBvc2l0
aW9uRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgaW5pdGlhbFBvc2l0aW9uLCBpbml0aWFs
U2lkZSk7Ci0gICAgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZWRGaW5hbFBvc2l0aW9uID0g
cmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFpbmVyU3R5bGUsIGZpbmFsUG9z
aXRpb24sIGZpbmFsU2lkZSk7CisgICAgdW5zaWduZWQgcmVzb2x2ZWRJbml0aWFsUG9zaXRpb24g
PSByZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgaW5pdGlh
bFBvc2l0aW9uLCBpbml0aWFsU2lkZSk7CisgICAgdW5zaWduZWQgcmVzb2x2ZWRGaW5hbFBvc2l0
aW9uID0gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFpbmVyU3R5bGUsIGZp
bmFsUG9zaXRpb24sIGZpbmFsU2lkZSk7CiAKICAgICBpZiAocmVzb2x2ZWRJbml0aWFsUG9zaXRp
b24gPiByZXNvbHZlZEZpbmFsUG9zaXRpb24pCiAgICAgICAgIHN0ZDo6c3dhcChyZXNvbHZlZElu
aXRpYWxQb3NpdGlvbiwgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uKTsKICAgICBlbHNlIGlmIChyZXNv
bHZlZEluaXRpYWxQb3NpdGlvbiA9PSByZXNvbHZlZEZpbmFsUG9zaXRpb24pCi0gICAgICAgIHJl
c29sdmVkRmluYWxQb3NpdGlvbiA9IHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLm5leHQoKTsKKyAg
ICAgICAgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uID0gcmVzb2x2ZWRJbml0aWFsUG9zaXRpb24gKyAx
OwogCiAgICAgcmV0dXJuIEdyaWRTcGFuOjpkZWZpbml0ZUdyaWRTcGFuKHJlc29sdmVkSW5pdGlh
bFBvc2l0aW9uLCBzdGQ6Om1heChyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgcmVzb2x2ZWRGaW5h
bFBvc2l0aW9uKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5oCmluZGV4IDNkOTFlZWNiMGJjZDUzZmQwZTIxMjJhNmZi
NTBjYTVjMDZjMjMyMGEuLmQzZDY5ZmFjMDE1ZmNkNzJjNGI4ZjlmMDlkNzk3MmI3ODMwODlkNGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQ
b3NpdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2
ZWRQb3NpdGlvbi5oCkBAIC00Niw3OSArNDYsMTUgQEAgZW51bSBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gewogICAgIEZvclJvd3MKIH07CiAKLS8vIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIGxp
bmUgaW5kZXggaW50byBvbmUgb2YgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGdyaWQgYXJyYXkuCi0v
LyBXcmFwcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGp1c3QgZm9yIHRoZSBwdXJwb3NlIG9mIGtub3dp
bmcgd2hhdCB3ZSBtYW5pcHVsYXRlIGluIHRoZSBncmlkIGNvZGUuCisvLyBDbGFzcyB3aXRoIGFs
bCB0aGUgY29kZSByZWxhdGVkIHRvIGdyaWQgaXRlbXMgcG9zaXRpb25zIHJlc29sdXRpb24uCisv
LyBUT0RPKHJlZ28pOiBSZW5hbWUgY2xhc3MgdG8gR3JpZFBvc2l0aW9uc1Jlc29sdmVyLgogY2xh
c3MgR3JpZFJlc29sdmVkUG9zaXRpb24gewogcHVibGljOgotICAgIEdyaWRSZXNvbHZlZFBvc2l0
aW9uKHVuc2lnbmVkIHBvc2l0aW9uKQotICAgICAgICA6IG1faW50ZWdlclBvc2l0aW9uKHBvc2l0
aW9uKQotICAgIHsKLSAgICB9Ci0KLSAgICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgb3BlcmF0b3Iq
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBHcmlkUmVzb2x2
ZWRQb3NpdGlvbiYgb3BlcmF0b3IrKygpCi0gICAgewotICAgICAgICBtX2ludGVnZXJQb3NpdGlv
bisrOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX2ludGVnZXJQb3NpdGlvbiA9PSBvdGhlci5tX2ludGVnZXJQb3NpdGlvbjsKLSAg
ICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIG90
aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW50ZWdlclBvc2l0aW9uICE9IG90
aGVyLm1faW50ZWdlclBvc2l0aW9uOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0
IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX2ludGVnZXJQb3NpdGlvbiA8IG90aGVyLm1faW50ZWdlclBvc2l0aW9uOwotICAgIH0KLQot
ICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiBvdGhlcikgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ludGVnZXJQb3NpdGlvbiA+IG90aGVyLm1faW50
ZWdlclBvc2l0aW9uOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBHcmlkUmVz
b2x2ZWRQb3NpdGlvbiYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9pbnRl
Z2VyUG9zaXRpb24gPD0gb3RoZXIubV9pbnRlZ2VyUG9zaXRpb247Ci0gICAgfQotCi0gICAgYm9v
bCBvcGVyYXRvcj49KGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiBvdGhlcikgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2ludGVnZXJQb3NpdGlvbiA+PSBvdGhlci5tX2ludGVnZXJQ
b3NpdGlvbjsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCB0b0ludCgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV9pbnRlZ2VyUG9zaXRpb247Ci0gICAgfQotCi0gICAgR3JpZFJlc29sdmVk
UG9zaXRpb24gbmV4dCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gR3JpZFJlc29sdmVk
UG9zaXRpb24obV9pbnRlZ2VyUG9zaXRpb24gKyAxKTsKLSAgICB9Ci0KLSAgICBHcmlkUmVzb2x2
ZWRQb3NpdGlvbiBwcmV2KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ludGVnZXJQ
b3NpdGlvbiA/IG1faW50ZWdlclBvc2l0aW9uIC0gMSA6IDA7Ci0gICAgfQotCi0gICAgc3RhdGlj
IEdyaWRTcGFuIHJlc29sdmVHcmlkUG9zaXRpb25zRnJvbUF1dG9QbGFjZW1lbnRQb3NpdGlvbihj
b25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlckJveCYsIEdyaWRUcmFja1NpemluZ0RpcmVj
dGlvbiwgY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mKTsKKyAgICBzdGF0aWMgR3JpZFNwYW4g
cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tQXV0b1BsYWNlbWVudFBvc2l0aW9uKGNvbnN0IFJlbmRl
clN0eWxlJiwgY29uc3QgUmVuZGVyQm94JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCB1bnNp
Z25lZCk7CiAgICAgc3RhdGljIEdyaWRTcGFuIHJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxl
KGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyQm94JiwgR3JpZFRyYWNrU2l6aW5nRGly
ZWN0aW9uKTsKICAgICBzdGF0aWMgdW5zaWduZWQgZXhwbGljaXRHcmlkQ29sdW1uQ291bnQoY29u
c3QgUmVuZGVyU3R5bGUmKTsKICAgICBzdGF0aWMgdW5zaWduZWQgZXhwbGljaXRHcmlkUm93Q291
bnQoY29uc3QgUmVuZGVyU3R5bGUmKTsKICAgICBzdGF0aWMgYm9vbCBpc05vbkV4aXN0ZW50TmFt
ZWRMaW5lT3JBcmVhKGNvbnN0IFN0cmluZyYgbGluZU5hbWUsIGNvbnN0IFJlbmRlclN0eWxlJiwg
R3JpZFBvc2l0aW9uU2lkZSk7Ci0KLXByaXZhdGU6Ci0gICAgdW5zaWduZWQgbV9pbnRlZ2VyUG9z
aXRpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>