<?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>139077</bug_id>
          
          <creation_ts>2014-11-27 07:40:17 -0800</creation_ts>
          <short_desc>[CSS Grid Layout] Simplify the interface of GridResolvedPosition</short_desc>
          <delta_ts>2015-06-01 08:41:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>60731</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergio Villar Senin">svillar</reporter>
          <assigned_to name="Sergio Villar Senin">svillar</assigned_to>
          <cc>benjamin</cc>
    
    <cc>bjonesbe</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>jfernandez</cc>
    
    <cc>kling</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rego</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1051172</commentid>
    <comment_count>0</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2014-11-27 07:40:17 -0800</bug_when>
    <thetext>It&apos;s full of static methods that are only internally used.

Apart from that the code that creates GridSpans should be moved to GridCoordinate.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051173</commentid>
    <comment_count>1</comment_count>
      <attachid>242253</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2014-11-27 07:47:30 -0800</bug_when>
    <thetext>Created attachment 242253
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1094147</commentid>
    <comment_count>2</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-05-12 06:43:28 -0700</bug_when>
    <thetext>Ping</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095935</commentid>
    <comment_count>3</comment_count>
      <attachid>242253</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-19 08:30:12 -0700</bug_when>
    <thetext>Comment on attachment 242253
Patch

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

&gt; Source/WebCore/rendering/style/GridCoordinate.h:54
&gt; +    static std::unique_ptr&lt;GridSpan&gt; create(const GridResolvedPosition&amp; resolvedInitialPosition, const GridResolvedPosition&amp; resolvedFinalPosition)
&gt; +    {
&gt; +        return std::make_unique&lt;GridSpan&gt;(resolvedInitialPosition, resolvedFinalPosition);
&gt; +    }

It seems wasteful to have this class designed so you always have to create it on the heap. There’s no polymorphism here so I suggest these functions just return GridSpan, not unique_ptr&lt;GridSpan&gt;. We can make sure GridSpan has move semantics to avoid unnecessary copying of things. That way we avoid a new/delete pair that slow the code down. If there’s some reason to put it on the heap it’s easy to do that by explicitly calling make_unique to move it there.

I personally don’t like having all these functions inside the class definition. I find it hard to read the class definition when it’s like that. So I prefer to put these inlines separately after the class.

I also don’t think it’s useful to have a create function that simply calls make_unique with the same arguments. So I would normally omit it. It’s not like a RefCounted class where we want to keep the number of call sites of adoptRef to an absolute minimum. There a create function is justified to make it hard to misuse the class. But there’s nothing special about putting something onto the heap with make_unique that makes it something the class has to do itself; best to do that where the client has a reason to put it on the heap, not in the class’s own functions.

&gt; Source/WebCore/rendering/style/GridCoordinate.h:60
&gt; +        unsigned positionOffset = position.spanPosition() - 1;

What guarantees spanPosition is not zero?

&gt; Source/WebCore/rendering/style/GridCoordinate.h:62
&gt; +            GridResolvedPosition initialResolvedPosition = GridResolvedPosition(std::max&lt;int&gt;(0, resolvedOppositePosition.toInt() - positionOffset));

Not sure it’s good for the name GridResolvedPosition to be mentioned twice here. One way to reduce it is to use auto. Another is to use some other technique to convert an int to a GridResolvedPosition. Maybe construction syntax with { } is the best style here?

&gt; Source/WebCore/rendering/style/GridCoordinate.h:63
&gt; +            return GridSpan::create(initialResolvedPosition, resolvedOppositePosition);

No need to call GridSpan::create when already inside the GridSpan class. Just create should do.

&gt; Source/WebCore/rendering/style/GridCoordinate.h:66
&gt; +        return GridSpan::create(resolvedOppositePosition, GridResolvedPosition(resolvedOppositePosition.toInt() + positionOffset));

No need to call GridSpan::create when already inside the GridSpan class. Just create should do.

&gt; Source/WebCore/rendering/style/GridCoordinate.h:82
&gt; +        const unsigned* firstLineBeforeOppositePosition = std::lower_bound(gridLines.begin(), gridLines.end(), resolvedOppositePosition.toInt());

I think auto is a better type here than const unsigned*.

&gt; Source/WebCore/rendering/style/GridCoordinate.h:93
&gt; +        GridResolvedPosition resolvedGridLinePosition = gridLines[gridLineIndex];
&gt; +        if (resolvedGridLinePosition &gt; resolvedOppositePosition)
&gt; +            resolvedGridLinePosition = resolvedOppositePosition;

Should we write this with std::min instead? Maybe without the local variable.

&gt; Source/WebCore/rendering/style/GridCoordinate.h:94
&gt; +        return GridSpan::create(resolvedGridLinePosition, resolvedOppositePosition);

No need to call GridSpan::create when already inside the GridSpan class. Just create should do.

&gt; Source/WebCore/rendering/style/GridResolvedPosition.cpp:239
&gt; +    const GridPositionSide initialPositionSide = (direction == ForColumns) ? ColumnStartSide : RowStartSide;

I don’t think the const here adds much. Maybe omit it? Maybe use auto for the type?

&gt; Source/WebCore/rendering/style/GridResolvedPosition.cpp:241
&gt; +    const GridPositionSide finalPositionSide = (direction == ForColumns) ? ColumnEndSide : RowEndSide;

I don’t think the const here adds much. Maybe omit it? Maybe use auto for the type?

&gt; Source/WebCore/rendering/style/GridResolvedPosition.cpp:246
&gt; +        // FIXME: Implement properly &quot;stack&quot; value in auto-placement algorithm.

The word “properly” should come after the word “value” for proper grammar.

&gt; Source/WebCore/rendering/style/GridResolvedPosition.cpp:256
&gt; +        const GridResolvedPosition finalResolvedPosition = resolveGridPositionFromStyle(gridContainerStyle, finalPosition, finalPositionSide);

I don’t think the const here adds much. Maybe omit it? Maybe we don’t need a local at all? Maybe use auto for the type?

&gt; Source/WebCore/rendering/style/GridResolvedPosition.cpp:262
&gt; +        const GridResolvedPosition initialResolvedPosition = resolveGridPositionFromStyle(gridContainerStyle, initialPosition, initialPositionSide);

I don’t think the const here adds much. Maybe omit it? Maybe we don’t need a local at all? Maybe use auto for the type?

&gt; Source/WebCore/rendering/style/GridResolvedPosition.cpp:271
&gt; +    if (resolvedFinalPosition &lt; resolvedInitialPosition)
&gt; +        resolvedFinalPosition = resolvedInitialPosition;

Again, how about std::min here instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097872</commentid>
    <comment_count>4</comment_count>
      <attachid>242253</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-05-28 02:52:06 -0700</bug_when>
    <thetext>Comment on attachment 242253
Patch

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

The main objective of the change was just to simplify the interface but I agree we could use it to improve the code a bit.

&gt;&gt; Source/WebCore/rendering/style/GridCoordinate.h:54
&gt;&gt; +    }
&gt; 
&gt; It seems wasteful to have this class designed so you always have to create it on the heap. There’s no polymorphism here so I suggest these functions just return GridSpan, not unique_ptr&lt;GridSpan&gt;. We can make sure GridSpan has move semantics to avoid unnecessary copying of things. That way we avoid a new/delete pair that slow the code down. If there’s some reason to put it on the heap it’s easy to do that by explicitly calling make_unique to move it there.
&gt; 
&gt; I personally don’t like having all these functions inside the class definition. I find it hard to read the class definition when it’s like that. So I prefer to put these inlines separately after the class.
&gt; 
&gt; I also don’t think it’s useful to have a create function that simply calls make_unique with the same arguments. So I would normally omit it. It’s not like a RefCounted class where we want to keep the number of call sites of adoptRef to an absolute minimum. There a create function is justified to make it hard to misuse the class. But there’s nothing special about putting something onto the heap with make_unique that makes it something the class has to do itself; best to do that where the client has a reason to put it on the heap, not in the class’s own functions.

Yeah totally agree. I was trying to minimize the changes and do only refactorings but indeed the new functions don&apos;t look much better. I&apos;ll switch to returning GridSpan and ensuring the move semantics are properly used.

&gt;&gt; Source/WebCore/rendering/style/GridCoordinate.h:60
&gt;&gt; +        unsigned positionOffset = position.spanPosition() - 1;
&gt; 
&gt; What guarantees spanPosition is not zero?

As you can see above there is an ASSERT to verify that

&gt;&gt; Source/WebCore/rendering/style/GridResolvedPosition.cpp:262
&gt;&gt; +        const GridResolvedPosition initialResolvedPosition = resolveGridPositionFromStyle(gridContainerStyle, initialPosition, initialPositionSide);
&gt; 
&gt; I don’t think the const here adds much. Maybe omit it? Maybe we don’t need a local at all? Maybe use auto for the type?

auto looks good to me. The local is just to avoid a very long line of code bellow.

&gt;&gt; Source/WebCore/rendering/style/GridResolvedPosition.cpp:271
&gt;&gt; +        resolvedFinalPosition = resolvedInitialPosition;
&gt; 
&gt; Again, how about std::min here instead?

I guess std::max you mean</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098492</commentid>
    <comment_count>5</comment_count>
      <attachid>253998</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-06-01 07:12:57 -0700</bug_when>
    <thetext>Created attachment 253998
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098494</commentid>
    <comment_count>6</comment_count>
      <attachid>254000</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-06-01 07:34:36 -0700</bug_when>
    <thetext>Created attachment 254000
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098500</commentid>
    <comment_count>7</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-06-01 08:41:16 -0700</bug_when>
    <thetext>Committed r185059: &lt;http://trac.webkit.org/changeset/185059&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242253</attachid>
            <date>2014-11-27 07:47:30 -0800</date>
            <delta_ts>2015-05-19 08:30:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139077-20141127164752.patch</filename>
            <type>text/plain</type>
            <size>30759</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2NTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTRmMDIxZWNkMmVjNGZm
YTFkNmFkYWFhMDM0YzgyMjg2ODUyYzBjMi4uOWM3YzRmMWEyOWE5N2UxNDk0Y2I0ODY2NTkyOWJh
ZmEyYzJjNzljNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE0LTExLTI3ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtDU1MgR3Jp
ZCBMYXlvdXRdIFNpbXBsaWZ5IHRoZSBpbnRlcmZhY2Ugb2YgR3JpZFJlc29sdmVkUG9zaXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTA3Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBpbnRl
cmZhY2Ugb2YgR3JpZFJlc29sdmVkUG9zaXRpb24gaXMgZnVsbCBvZiBzdGF0aWMgbWV0aG9kcwor
ICAgICAgICB0aGF0IGFyZSBqdXN0IHVzZWQgaW50ZXJuYWxseSwgd2Ugc2hvdWxkIG5vdCBleHBv
c2UgdGhlbS4gQXBhcnQKKyAgICAgICAgZnJvbSB0aGF0IHRoZSBjb2RlIHRoYXQgY3JlYXRlcyB0
aGUgR3JpZFNwYW5zIGZpdHMgbXVjaCBiZXR0ZXIgaW4KKyAgICAgICAgR3JpZENvb3JkaW5hdGUu
aC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhpcyBpcyBqdXN0IGFib3V0IG1vdmluZyBj
b2RlIGFyb3VuZC4KKworICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9HcmlkQ29vcmRpbmF0ZS5o
OgorICAgICAgICAoV2ViQ29yZTo6R3JpZFNwYW46OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmlkU3Bhbjo6Y3JlYXRlV2l0aFNwYW5BZ2FpbnN0T3Bwb3NpdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JpZFNwYW46OmNyZWF0ZVdpdGhOYW1lZFNwYW5BZ2FpbnN0T3Bwb3NpdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JpZFNwYW46OmNyZWF0ZVdpdGhJbml0aWFsTmFtZWRTcGFuQWdhaW5z
dE9wcG9zaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRTcGFuOjpjcmVhdGVXaXRoRmluYWxO
YW1lZFNwYW5BZ2FpbnN0T3Bwb3NpdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9Hcmlk
UG9zaXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRQb3NpdGlvbjo6YWRqdXN0R3JpZFBv
c2l0aW9uRm9yQWZ0ZXJFbmRTaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRQb3NpdGlvbjo6
YWRqdXN0R3JpZFBvc2l0aW9uRm9yU2lkZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0dy
aWRSZXNvbHZlZFBvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmltcGxpY2l0TmFtZWRH
cmlkTGluZUZvclNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0R3JpZFBvc2l0aW9uc0Zy
b21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0aW9u
QWdhaW5zdE9wcG9zaXRlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZUdyaWRQ
b3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRS
ZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21BdXRvUGxhY2VtZW50UG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkZy
b21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBv
c2l0aW9uc0Zyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjppc1N0YXJ0U2lkZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6YWRqdXN0R3JpZFBv
c2l0aW9uc0Zyb21TdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmlkUmVzb2x2
ZWRQb3NpdGlvbjo6cmVzb2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkZyb21TdHlsZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQ
b3NpdGlvbkZyb21TdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmlkUmVzb2x2
ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZl
TmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Zmlyc3ROYW1lZEdyaWRMaW5lQmVmb3JlUG9zaXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVSb3dT
dGFydENvbHVtblN0YXJ0TmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JpZFJlc29sdmVkUG9zaXRpb246OnJl
c29sdmVSb3dFbmRDb2x1bW5FbmROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQ
b3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNvbHZl
ZFBvc2l0aW9uLmg6CisKIDIwMTQtMTEtMjUgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNh
a0BnbWFpbC5jb20+CiAKICAgICAgICAgQWRkIHBhcnNpbmcgZm9yIDpkaXIoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRDb29yZGluYXRlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZENvb3JkaW5hdGUuaAppbmRleCAzM2ZjZWI1
MWU0MjI3ZWM4NmNkODUyN2MzYmE2NmE0OTAzMjNmZGE5Li5kOGVhM2EzODYwMzIzNzE0MzEzOGUx
ZTQ4ZDdhNGE3ZTM0OTJjNTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvR3JpZENvb3JkaW5hdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvR3JpZENvb3JkaW5hdGUuaApAQCAtNDgsNiArNDgsNjYgQEAgY29uc3QgdW5zaWduZWQga0dy
aWRNYXhUcmFja3MgPSAxMDAwMDAwOwogLy8gc3BhbiBzaG91bGQgaW5jbHVkZSBib3RoIHxyZXNv
bHZlZEluaXRpYWxQb3NpdGlvbnwgYW5kIHxyZXNvbHZlZEZpbmFsUG9zaXRpb258IHRvIGJlIGNv
cnJlY3QuCiBjbGFzcyBHcmlkU3BhbiB7CiBwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxHcmlkU3Bhbj4gY3JlYXRlKGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZl
ZEluaXRpYWxQb3NpdGlvbiwgY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29sdmVkRmlu
YWxQb3NpdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEdyaWRT
cGFuPihyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEdyaWRTcGFuPiBjcmVhdGVXaXRoU3Bh
bkFnYWluc3RPcHBvc2l0ZShjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgcmVzb2x2ZWRPcHBv
c2l0ZVBvc2l0aW9uLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBHcmlkUG9zaXRpb25T
aWRlIHNpZGUpCisgICAgeworICAgICAgICAvLyAnc3BhbiAxJyBpcyBjb250YWluZWQgaW5zaWRl
IGEgc2luZ2xlIGdyaWQgdHJhY2sgcmVnYXJkbGVzcyBvZiB0aGUgZGlyZWN0aW9uLgorICAgICAg
ICAvLyBUaGF0J3Mgd2h5IHRoZSBDU1Mgc3BhbiB2YWx1ZSBpcyBvbmUgbW9yZSB0aGFuIHRoZSBv
ZmZzZXQgd2UgYXBwbHkuCisgICAgICAgIHVuc2lnbmVkIHBvc2l0aW9uT2Zmc2V0ID0gcG9zaXRp
b24uc3BhblBvc2l0aW9uKCkgLSAxOworICAgICAgICBpZiAoc2lkZSA9PSBDb2x1bW5TdGFydFNp
ZGUgfHwgc2lkZSA9PSBSb3dTdGFydFNpZGUpIHsKKyAgICAgICAgICAgIEdyaWRSZXNvbHZlZFBv
c2l0aW9uIGluaXRpYWxSZXNvbHZlZFBvc2l0aW9uID0gR3JpZFJlc29sdmVkUG9zaXRpb24oc3Rk
OjptYXg8aW50PigwLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24udG9JbnQoKSAtIHBvc2l0aW9u
T2Zmc2V0KSk7CisgICAgICAgICAgICByZXR1cm4gR3JpZFNwYW46OmNyZWF0ZShpbml0aWFsUmVz
b2x2ZWRQb3NpdGlvbiwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBHcmlkU3Bhbjo6Y3JlYXRlKHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwg
R3JpZFJlc29sdmVkUG9zaXRpb24ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLnRvSW50KCkgKyBw
b3NpdGlvbk9mZnNldCkpOworICAgIH0KKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8R3Jp
ZFNwYW4+IGNyZWF0ZVdpdGhOYW1lZFNwYW5BZ2FpbnN0T3Bwb3NpdGUoY29uc3QgR3JpZFJlc29s
dmVkUG9zaXRpb24mIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgY29uc3QgR3JpZFBvc2l0aW9u
JiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+
JiBncmlkTGluZXMpCisgICAgeworICAgICAgICBpZiAoc2lkZSA9PSBSb3dTdGFydFNpZGUgfHwg
c2lkZSA9PSBDb2x1bW5TdGFydFNpZGUpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlV2l0aElu
aXRpYWxOYW1lZFNwYW5BZ2FpbnN0T3Bwb3NpdGUocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBw
b3NpdGlvbiwgZ3JpZExpbmVzKTsKKworICAgICAgICByZXR1cm4gY3JlYXRlV2l0aEZpbmFsTmFt
ZWRTcGFuQWdhaW5zdE9wcG9zaXRlKHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgcG9zaXRpb24s
IGdyaWRMaW5lcyk7CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHcmlkU3Bh
bj4gY3JlYXRlV2l0aEluaXRpYWxOYW1lZFNwYW5BZ2FpbnN0T3Bwb3NpdGUoY29uc3QgR3JpZFJl
c29sdmVkUG9zaXRpb24mIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgY29uc3QgR3JpZFBvc2l0
aW9uJiBwb3NpdGlvbiwgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgZ3JpZExpbmVzKQorICAgIHsK
KyAgICAgICAgLy8gVGhlIGdyaWQgbGluZSBpbmVxdWFsaXR5IG5lZWRzIHRvIGJlIHN0cmljdCAo
d2hpY2ggZG9lc24ndCBtYXRjaCB0aGUgYWZ0ZXIgLyBlbmQgY2FzZSkgYmVjYXVzZSB8cmVzb2x2
ZWRPcHBvc2l0ZVBvc2l0aW9ufAorICAgICAgICAvLyBpcyBhbHJlYWR5IGNvbnZlcnRlZCB0byBh
biBpbmRleCBpbiBvdXIgZ3JpZCByZXByZXNlbnRhdGlvbiAoaWUgb25lIHdhcyByZW1vdmVkIGZy
b20gdGhlIGdyaWQgbGluZSB0byBhY2NvdW50IGZvciB0aGUgc2lkZSkuCisgICAgICAgIHVuc2ln
bmVkIGZpcnN0TGluZUJlZm9yZU9wcG9zaXRlUG9zaXRpb25JbmRleCA9IDA7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkKiBmaXJzdExpbmVCZWZvcmVPcHBvc2l0ZVBvc2l0aW9uID0gc3RkOjpsb3dl
cl9ib3VuZChncmlkTGluZXMuYmVnaW4oKSwgZ3JpZExpbmVzLmVuZCgpLCByZXNvbHZlZE9wcG9z
aXRlUG9zaXRpb24udG9JbnQoKSk7CisgICAgICAgIGlmIChmaXJzdExpbmVCZWZvcmVPcHBvc2l0
ZVBvc2l0aW9uICE9IGdyaWRMaW5lcy5lbmQoKSkgeworICAgICAgICAgICAgaWYgKCpmaXJzdExp
bmVCZWZvcmVPcHBvc2l0ZVBvc2l0aW9uID4gcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLnRvSW50
KCkgJiYgZmlyc3RMaW5lQmVmb3JlT3Bwb3NpdGVQb3NpdGlvbiAhPSBncmlkTGluZXMuYmVnaW4o
KSkKKyAgICAgICAgICAgICAgICAtLWZpcnN0TGluZUJlZm9yZU9wcG9zaXRlUG9zaXRpb247CisK
KyAgICAgICAgICAgIGZpcnN0TGluZUJlZm9yZU9wcG9zaXRlUG9zaXRpb25JbmRleCA9IGZpcnN0
TGluZUJlZm9yZU9wcG9zaXRlUG9zaXRpb24gLSBncmlkTGluZXMuYmVnaW4oKTsKKyAgICAgICAg
fQorCisgICAgICAgIHVuc2lnbmVkIGdyaWRMaW5lSW5kZXggPSBzdGQ6Om1heDxpbnQ+KDAsIGZp
cnN0TGluZUJlZm9yZU9wcG9zaXRlUG9zaXRpb25JbmRleCAtIHBvc2l0aW9uLnNwYW5Qb3NpdGlv
bigpICsgMSk7CisgICAgICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uIHJlc29sdmVkR3JpZExpbmVQ
b3NpdGlvbiA9IGdyaWRMaW5lc1tncmlkTGluZUluZGV4XTsKKyAgICAgICAgaWYgKHJlc29sdmVk
R3JpZExpbmVQb3NpdGlvbiA+IHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbikKKyAgICAgICAgICAg
IHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiA9IHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbjsKKyAg
ICAgICAgcmV0dXJuIEdyaWRTcGFuOjpjcmVhdGUocmVzb2x2ZWRHcmlkTGluZVBvc2l0aW9uLCBy
ZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOworICAgIH0KKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8R3JpZFNwYW4+IGNyZWF0ZVdpdGhGaW5hbE5hbWVkU3BhbkFnYWluc3RPcHBvc2l0ZShj
b25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBjb25z
dCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBncmlkTGlu
ZXMpCisgICAgeworICAgICAgICB1bnNpZ25lZCBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRp
b25JbmRleCA9IGdyaWRMaW5lcy5zaXplKCkgLSAxOworICAgICAgICBjb25zdCB1bnNpZ25lZCog
Zmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uID0gc3RkOjp1cHBlcl9ib3VuZChncmlkTGlu
ZXMuYmVnaW4oKSwgZ3JpZExpbmVzLmVuZCgpLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24udG9J
bnQoKSk7CisgICAgICAgIGlmIChmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb24gIT0gZ3Jp
ZExpbmVzLmVuZCgpKQorICAgICAgICAgICAgZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9u
SW5kZXggPSBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb24gLSBncmlkTGluZXMuYmVnaW4o
KTsKKworICAgICAgICB1bnNpZ25lZCBncmlkTGluZUluZGV4ID0gc3RkOjptaW48dW5zaWduZWQ+
KGdyaWRMaW5lcy5zaXplKCkgLSAxLCBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb25JbmRl
eCArIHBvc2l0aW9uLnNwYW5Qb3NpdGlvbigpIC0gMSk7CisgICAgICAgIEdyaWRSZXNvbHZlZFBv
c2l0aW9uIHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiA9IEdyaWRQb3NpdGlvbjo6YWRqdXN0R3Jp
ZFBvc2l0aW9uRm9yQWZ0ZXJFbmRTaWRlKGdyaWRMaW5lc1tncmlkTGluZUluZGV4XSk7CisgICAg
ICAgIGlmIChyZXNvbHZlZEdyaWRMaW5lUG9zaXRpb24gPCByZXNvbHZlZE9wcG9zaXRlUG9zaXRp
b24pCisgICAgICAgICAgICByZXNvbHZlZEdyaWRMaW5lUG9zaXRpb24gPSByZXNvbHZlZE9wcG9z
aXRlUG9zaXRpb247CisgICAgICAgIHJldHVybiBHcmlkU3Bhbjo6Y3JlYXRlKHJlc29sdmVkT3Bw
b3NpdGVQb3NpdGlvbiwgcmVzb2x2ZWRHcmlkTGluZVBvc2l0aW9uKTsKKyAgICB9CisKICAgICBH
cmlkU3Bhbihjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgcmVzb2x2ZWRJbml0aWFsUG9zaXRp
b24sIGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZlZEZpbmFsUG9zaXRpb24pCiAg
ICAgICAgIDogcmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oc3RkOjptaW4ocmVzb2x2ZWRJbml0aWFs
UG9zaXRpb24udG9JbnQoKSwga0dyaWRNYXhUcmFja3MgLSAxKSkKICAgICAgICAgLCByZXNvbHZl
ZEZpbmFsUG9zaXRpb24oc3RkOjptaW4ocmVzb2x2ZWRGaW5hbFBvc2l0aW9uLnRvSW50KCksIGtH
cmlkTWF4VHJhY2tzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9HcmlkUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUG9z
aXRpb24uaAppbmRleCA1YTBhZjllZTQ3NjBiNGNjNDk0MzIxNGNhZGNiZmQ5NTZhNWViY2ZjLi44
ZGIxMDJkZTNkZjliMjk5YWY2M2RjNzQxMTliN2QzYWUzOThhMTgxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFBvc2l0aW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRQb3NpdGlvbi5oCkBAIC00NSw2ICs0NSwxMyBAQCBl
bnVtIEdyaWRQb3NpdGlvblR5cGUgewogICAgIE5hbWVkR3JpZEFyZWFQb3NpdGlvbiAvLyA8aWRl
bnQ+CiB9OwogCitlbnVtIEdyaWRQb3NpdGlvblNpZGUgeworICAgIENvbHVtblN0YXJ0U2lkZSwK
KyAgICBDb2x1bW5FbmRTaWRlLAorICAgIFJvd1N0YXJ0U2lkZSwKKyAgICBSb3dFbmRTaWRlCit9
OworCiBjbGFzcyBHcmlkUG9zaXRpb24gewogcHVibGljOgogICAgIEdyaWRQb3NpdGlvbigpCkBA
IC01Myw2ICs2MCwyMCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorICAgIHN0YXRpYyB1bnNp
Z25lZCBhZGp1c3RHcmlkUG9zaXRpb25Gb3JBZnRlckVuZFNpZGUodW5zaWduZWQgcmVzb2x2ZWRQ
b3NpdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiByZXNvbHZlZFBvc2l0aW9uID8gcmVzb2x2
ZWRQb3NpdGlvbiAtIDEgOiAwOworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBhZGp1c3RH
cmlkUG9zaXRpb25Gb3JTaWRlKHVuc2lnbmVkIHJlc29sdmVkUG9zaXRpb24sIEdyaWRQb3NpdGlv
blNpZGUgc2lkZSkKKyAgICB7CisgICAgICAgIC8vIEFuIGl0ZW0gZmluaXNoaW5nIG9uIHRoZSBO
LXRoIGxpbmUgYmVsb25ncyB0byB0aGUgTi0xLXRoIGNlbGwuCisgICAgICAgIGlmIChzaWRlID09
IENvbHVtbkVuZFNpZGUgfHwgc2lkZSA9PSBSb3dFbmRTaWRlKQorICAgICAgICAgICAgcmV0dXJu
IGFkanVzdEdyaWRQb3NpdGlvbkZvckFmdGVyRW5kU2lkZShyZXNvbHZlZFBvc2l0aW9uKTsKKwor
ICAgICAgICByZXR1cm4gcmVzb2x2ZWRQb3NpdGlvbjsKKyAgICB9CisKICAgICBib29sIGlzUG9z
aXRpdmUoKSBjb25zdCB7IHJldHVybiBpbnRlZ2VyUG9zaXRpb24oKSA+IDA7IH0KIAogICAgIEdy
aWRQb3NpdGlvblR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5j
cHAKaW5kZXggY2NkYzJhM2RjNmRhMmQ2NTM0YTdlYjYzNTA5ZTZiNDNiYWExZmQ3MS4uNGFhMzMx
ZDZkYzhiZDNiYWFmMmUzNGE3NGU0YTIwNTk5ZjM1NDIwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwCkBAIC00
MywxMSArNDMsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNDb2x1bW5TaWRlKEdyaWRQb3NpdGlv
blNpZGUgc2lkZSkKICAgICByZXR1cm4gc2lkZSA9PSBDb2x1bW5TdGFydFNpZGUgfHwgc2lkZSA9
PSBDb2x1bW5FbmRTaWRlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNTdGFydFNpZGUoR3Jp
ZFBvc2l0aW9uU2lkZSBzaWRlKQotewotICAgIHJldHVybiBzaWRlID09IENvbHVtblN0YXJ0U2lk
ZSB8fCBzaWRlID09IFJvd1N0YXJ0U2lkZTsKLX0KLQogdW5zaWduZWQgR3JpZFJlc29sdmVkUG9z
aXRpb246OmV4cGxpY2l0R3JpZENvbHVtbkNvdW50KGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29u
dGFpbmVyU3R5bGUpCiB7CiAgICAgcmV0dXJuIHN0ZDo6bWluPHVuc2lnbmVkPihncmlkQ29udGFp
bmVyU3R5bGUuZ3JpZENvbHVtbnMoKS5zaXplKCksIGtHcmlkTWF4VHJhY2tzKTsKQEAgLTYzLDI4
ICs1OCw2IEBAIHN0YXRpYyB1bnNpZ25lZCBleHBsaWNpdEdyaWRTaXplRm9yU2lkZShjb25zdCBS
ZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBHCiAgICAgcmV0dXJuIGlzQ29sdW1uU2lk
ZShzaWRlKSA/IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpleHBsaWNpdEdyaWRDb2x1bW5Db3VudChn
cmlkQ29udGFpbmVyU3R5bGUpIDogR3JpZFJlc29sdmVkUG9zaXRpb246OmV4cGxpY2l0R3JpZFJv
d0NvdW50KGdyaWRDb250YWluZXJTdHlsZSk7CiB9CiAKLUdyaWRTcGFuIEdyaWRSZXNvbHZlZFBv
c2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21BdXRvUGxhY2VtZW50UG9zaXRpb24oY29u
c3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgY29uc3QgUmVuZGVyQm94JiBncmlk
SXRlbSwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgR3JpZFJlc29s
dmVkUG9zaXRpb24mIHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKQotewotICAgIEdyaWRQb3NpdGlv
biBpbml0aWFsUG9zaXRpb24gPSAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gZ3JpZEl0ZW0u
c3R5bGUoKS5ncmlkSXRlbUNvbHVtblN0YXJ0KCkgOiBncmlkSXRlbS5zdHlsZSgpLmdyaWRJdGVt
Um93U3RhcnQoKTsKLSAgICBjb25zdCBHcmlkUG9zaXRpb25TaWRlIGluaXRpYWxQb3NpdGlvblNp
ZGUgPSAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gQ29sdW1uU3RhcnRTaWRlIDogUm93U3Rh
cnRTaWRlOwotICAgIEdyaWRQb3NpdGlvbiBmaW5hbFBvc2l0aW9uID0gKGRpcmVjdGlvbiA9PSBG
b3JDb2x1bW5zKSA/IGdyaWRJdGVtLnN0eWxlKCkuZ3JpZEl0ZW1Db2x1bW5FbmQoKSA6IGdyaWRJ
dGVtLnN0eWxlKCkuZ3JpZEl0ZW1Sb3dFbmQoKTsKLSAgICBjb25zdCBHcmlkUG9zaXRpb25TaWRl
IGZpbmFsUG9zaXRpb25TaWRlID0gKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IENvbHVtbkVu
ZFNpZGUgOiBSb3dFbmRTaWRlOwotCi0gICAgYWRqdXN0R3JpZFBvc2l0aW9uc0Zyb21TdHlsZShn
cmlkQ29udGFpbmVyU3R5bGUsIGluaXRpYWxQb3NpdGlvbiwgZmluYWxQb3NpdGlvbiwgaW5pdGlh
bFBvc2l0aW9uU2lkZSwgZmluYWxQb3NpdGlvblNpZGUpOwotCi0gICAgLy8gVGhpcyBtZXRob2Qg
d2lsbCBvbmx5IGJlIHVzZWQgd2hlbiBib3RoIHBvc2l0aW9ucyBuZWVkIHRvIGJlIHJlc29sdmVk
IGFnYWluc3QgdGhlIG9wcG9zaXRlIG9uZS4KLSAgICBBU1NFUlQoaW5pdGlhbFBvc2l0aW9uLnNo
b3VsZEJlUmVzb2x2ZWRBZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbigpICYmIGZpbmFsUG9zaXRpb24u
c2hvdWxkQmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkpOwotCi0gICAgR3JpZFJl
c29sdmVkUG9zaXRpb24gcmVzb2x2ZWRGaW5hbFBvc2l0aW9uID0gcmVzb2x2ZWRJbml0aWFsUG9z
aXRpb247Ci0KLSAgICBpZiAoaW5pdGlhbFBvc2l0aW9uLmlzU3BhbigpKQotICAgICAgICByZXNv
bHZlZEZpbmFsUG9zaXRpb24gPSByZXNvbHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9z
aXRpb24oZ3JpZENvbnRhaW5lclN0eWxlLCByZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgaW5pdGlh
bFBvc2l0aW9uLCBmaW5hbFBvc2l0aW9uU2lkZSktPnJlc29sdmVkRmluYWxQb3NpdGlvbjsKLSAg
ICBlbHNlIGlmIChmaW5hbFBvc2l0aW9uLmlzU3BhbigpKQotICAgICAgICByZXNvbHZlZEZpbmFs
UG9zaXRpb24gPSByZXNvbHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oZ3Jp
ZENvbnRhaW5lclN0eWxlLCByZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgZmluYWxQb3NpdGlvbiwg
ZmluYWxQb3NpdGlvblNpZGUpLT5yZXNvbHZlZEZpbmFsUG9zaXRpb247Ci0KLSAgICByZXR1cm4g
R3JpZFNwYW4ocmVzb2x2ZWRJbml0aWFsUG9zaXRpb24sIHJlc29sdmVkRmluYWxQb3NpdGlvbik7
Ci19Ci0KIHN0YXRpYyBpbmxpbmUgY29uc3QgTmFtZWRHcmlkTGluZXNNYXAmIGdyaWRMaW5lc0Zv
clNpZGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCiB7
CiAgICAgcmV0dXJuIGlzQ29sdW1uU2lkZShzaWRlKSA/IHN0eWxlLm5hbWVkR3JpZENvbHVtbkxp
bmVzKCkgOiBzdHlsZS5uYW1lZEdyaWRSb3dMaW5lcygpOwpAQCAtOTIsNyArNjUsNyBAQCBzdGF0
aWMgaW5saW5lIGNvbnN0IE5hbWVkR3JpZExpbmVzTWFwJiBncmlkTGluZXNGb3JTaWRlKGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZQogCiBzdGF0aWMgaW5saW5lIGNvbnN0IFN0cmluZyBpbXBsaWNp
dE5hbWVkR3JpZExpbmVGb3JTaWRlKGNvbnN0IFN0cmluZyYgbGluZU5hbWUsIEdyaWRQb3NpdGlv
blNpZGUgc2lkZSkKIHsKLSAgICByZXR1cm4gbGluZU5hbWUgKyAoaXNTdGFydFNpZGUoc2lkZSkg
PyAiLXN0YXJ0IiA6ICItZW5kIik7CisgICAgcmV0dXJuIGxpbmVOYW1lICsgKChzaWRlID09IENv
bHVtblN0YXJ0U2lkZSB8fCBzaWRlID09IFJvd1N0YXJ0U2lkZSkgPyAiLXN0YXJ0IiA6ICItZW5k
Iik7CiB9CiAKIHN0YXRpYyBib29sIGlzTm9uRXhpc3RlbnROYW1lZExpbmVPckFyZWEoY29uc3Qg
U3RyaW5nJiBsaW5lTmFtZSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBHcmlkUG9zaXRpb25T
aWRlIHNpZGUpCkBAIC0xMDEsNyArNzQsNyBAQCBzdGF0aWMgYm9vbCBpc05vbkV4aXN0ZW50TmFt
ZWRMaW5lT3JBcmVhKGNvbnN0IFN0cmluZyYgbGluZU5hbWUsIGNvbnN0IFJlbmRlclN0eQogICAg
IHJldHVybiAhZ3JpZExpbmVOYW1lcy5jb250YWlucyhpbXBsaWNpdE5hbWVkR3JpZExpbmVGb3JT
aWRlKGxpbmVOYW1lLCBzaWRlKSkgJiYgIWdyaWRMaW5lTmFtZXMuY29udGFpbnMobGluZU5hbWUp
OwogfQogCi12b2lkIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjphZGp1c3RHcmlkUG9zaXRpb25zRnJv
bVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIEdyaWRQb3NpdGlv
biYgaW5pdGlhbFBvc2l0aW9uLCBHcmlkUG9zaXRpb24mIGZpbmFsUG9zaXRpb24sIEdyaWRQb3Np
dGlvblNpZGUgaW5pdGlhbFBvc2l0aW9uU2lkZSwgR3JpZFBvc2l0aW9uU2lkZSBmaW5hbFBvc2l0
aW9uU2lkZSkKK3N0YXRpYyB2b2lkIGFkanVzdEdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoY29uc3Qg
UmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgR3JpZFBvc2l0aW9uJiBpbml0aWFsUG9z
aXRpb24sIEdyaWRQb3NpdGlvbiYgZmluYWxQb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBpbml0
aWFsUG9zaXRpb25TaWRlLCBHcmlkUG9zaXRpb25TaWRlIGZpbmFsUG9zaXRpb25TaWRlKQogewog
ICAgIEFTU0VSVChpc0NvbHVtblNpZGUoaW5pdGlhbFBvc2l0aW9uU2lkZSkgPT0gaXNDb2x1bW5T
aWRlKGZpbmFsUG9zaXRpb25TaWRlKSk7CiAKQEAgLTEyNiw3ICs5OSw0MSBAQCB2b2lkIEdyaWRS
ZXNvbHZlZFBvc2l0aW9uOjphZGp1c3RHcmlkUG9zaXRpb25zRnJvbVN0eWxlKGNvbnN0IFJlbmRl
clN0eWxlJiBncmlkQwogICAgICAgICBpbml0aWFsUG9zaXRpb24uc2V0U3BhblBvc2l0aW9uKDEs
IFN0cmluZygpKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEdyaWRTcGFuPiBHcmlkUmVzb2x2ZWRQ
b3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUm
IGdyaWRDb250YWluZXJTdHlsZSwgY29uc3QgUmVuZGVyQm94JiBncmlkSXRlbSwgR3JpZFRyYWNr
U2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8R3JpZFNw
YW4+IHJlc29sdmVOYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihj
b25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBHcmlkUmVzb2x2ZWRQ
b3NpdGlvbiYgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBjb25zdCBHcmlkUG9zaXRpb24mIHBv
c2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCit7CisgICAgQVNTRVJUKHBvc2l0aW9uLmlz
U3BhbigpKTsKKyAgICBBU1NFUlQoIXBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKS5pc051bGwoKSk7
CisgICAgLy8gTmVnYXRpdmUgcG9zaXRpb25zIGFyZSBub3QgYWxsb3dlZCBwZXIgdGhlIHNwZWNp
ZmljYXRpb24gYW5kIHNob3VsZCBoYXZlIGJlZW4gaGFuZGxlZCBkdXJpbmcgcGFyc2luZy4KKyAg
ICBBU1NFUlQocG9zaXRpb24uc3BhblBvc2l0aW9uKCkgPiAwKTsKKworICAgIGNvbnN0IE5hbWVk
R3JpZExpbmVzTWFwJiBncmlkTGluZXNOYW1lcyA9IGlzQ29sdW1uU2lkZShzaWRlKSA/IGdyaWRD
b250YWluZXJTdHlsZS5uYW1lZEdyaWRDb2x1bW5MaW5lcygpIDogZ3JpZENvbnRhaW5lclN0eWxl
Lm5hbWVkR3JpZFJvd0xpbmVzKCk7CisgICAgTmFtZWRHcmlkTGluZXNNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gZ3JpZExpbmVzTmFtZXMuZmluZChwb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCkpOwor
CisgICAgLy8gSWYgdGhlcmUgaXMgbm8gbmFtZWQgZ3JpZCBsaW5lIG9mIHRoYXQgbmFtZSwgd2Ug
cmVzb2x2ZSB0aGUgcG9zaXRpb24gdG8gJ2F1dG8nICh3aGljaCBpcyBlcXVpdmFsZW50IHRvICdz
cGFuIDEnIGluIHRoaXMgY2FzZSkuCisgICAgLy8gU2VlIGh0dHA6Ly9saXN0cy53My5vcmcvQXJj
aGl2ZXMvUHVibGljL3d3dy1zdHlsZS8yMDEzSnVuLzAzOTQuaHRtbC4KKyAgICBpZiAoaXQgPT0g
Z3JpZExpbmVzTmFtZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEdy
aWRTcGFuPihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlv
bik7CisKKyAgICByZXR1cm4gR3JpZFNwYW46OmNyZWF0ZVdpdGhOYW1lZFNwYW5BZ2FpbnN0T3Bw
b3NpdGUocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBwb3NpdGlvbiwgc2lkZSwgaXQtPnZhbHVl
KTsKK30KKworc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHcmlkU3Bhbj4gcmVzb2x2ZUdyaWRQb3Np
dGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFp
bmVyU3R5bGUsIGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZlZE9wcG9zaXRlUG9z
aXRpb24sIGNvbnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIEdyaWRQb3NpdGlvblNpZGUgc2lk
ZSkKK3sKKyAgICBpZiAocG9zaXRpb24uaXNBdXRvKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfdW5pcXVlPEdyaWRTcGFuPihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHJlc29sdmVkT3Bw
b3NpdGVQb3NpdGlvbik7CisKKyAgICBBU1NFUlQocG9zaXRpb24uaXNTcGFuKCkpOworICAgIEFT
U0VSVChwb3NpdGlvbi5zcGFuUG9zaXRpb24oKSA+IDApOworCisgICAgaWYgKCFwb3NpdGlvbi5u
YW1lZEdyaWRMaW5lKCkuaXNOdWxsKCkpIHsKKyAgICAgICAgLy8gc3BhbiAyICdjJyAtPiB3ZSBu
ZWVkIHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIGdyaWQgbGluZSBiZWZvcmUgLyBhZnRlciBvdXIg
b3Bwb3NpdGUgcG9zaXRpb24uCisgICAgICAgIHJldHVybiByZXNvbHZlTmFtZWRHcmlkTGluZVBv
c2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oZ3JpZENvbnRhaW5lclN0eWxlLCByZXNvbHZl
ZE9wcG9zaXRlUG9zaXRpb24sIHBvc2l0aW9uLCBzaWRlKTsKKyAgICB9CisKKyAgICByZXR1cm4g
R3JpZFNwYW46OmNyZWF0ZVdpdGhTcGFuQWdhaW5zdE9wcG9zaXRlKHJlc29sdmVkT3Bwb3NpdGVQ
b3NpdGlvbiwgcG9zaXRpb24sIHNpZGUpOworfQorCitHcmlkU3BhbiBHcmlkUmVzb2x2ZWRQb3Np
dGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tQXV0b1BsYWNlbWVudFBvc2l0aW9uKGNvbnN0
IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIGNvbnN0IFJlbmRlckJveCYgZ3JpZEl0
ZW0sIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEdyaWRSZXNvbHZl
ZFBvc2l0aW9uJiByZXNvbHZlZEluaXRpYWxQb3NpdGlvbikKIHsKICAgICBHcmlkUG9zaXRpb24g
aW5pdGlhbFBvc2l0aW9uID0gKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IGdyaWRJdGVtLnN0
eWxlKCkuZ3JpZEl0ZW1Db2x1bW5TdGFydCgpIDogZ3JpZEl0ZW0uc3R5bGUoKS5ncmlkSXRlbVJv
d1N0YXJ0KCk7CiAgICAgY29uc3QgR3JpZFBvc2l0aW9uU2lkZSBpbml0aWFsUG9zaXRpb25TaWRl
ID0gKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IENvbHVtblN0YXJ0U2lkZSA6IFJvd1N0YXJ0
U2lkZTsKQEAgLTEzNSwzOCArMTQyLDIwIEBAIHN0ZDo6dW5pcXVlX3B0cjxHcmlkU3Bhbj4gR3Jp
ZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKGNvCiAKICAg
ICBhZGp1c3RHcmlkUG9zaXRpb25zRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgaW5pdGlh
bFBvc2l0aW9uLCBmaW5hbFBvc2l0aW9uLCBpbml0aWFsUG9zaXRpb25TaWRlLCBmaW5hbFBvc2l0
aW9uU2lkZSk7CiAKLSAgICBpZiAoaW5pdGlhbFBvc2l0aW9uLnNob3VsZEJlUmVzb2x2ZWRBZ2Fp
bnN0T3Bwb3NpdGVQb3NpdGlvbigpICYmIGZpbmFsUG9zaXRpb24uc2hvdWxkQmVSZXNvbHZlZEFn
YWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBw
cm9wZXJseSAic3RhY2siIHZhbHVlIGluIGF1dG8tcGxhY2VtZW50IGFsZ29yaXRobS4KLSAgICAg
ICAgaWYgKGdyaWRDb250YWluZXJTdHlsZS5pc0dyaWRBdXRvRmxvd0FsZ29yaXRobVN0YWNrKCkp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxHcmlkU3Bhbj4oMCwgMCk7Ci0K
LSAgICAgICAgLy8gV2UgY2FuJ3QgZ2V0IG91ciBncmlkIHBvc2l0aW9ucyB3aXRob3V0IHJ1bm5p
bmcgdGhlIGF1dG8gcGxhY2VtZW50IGFsZ29yaXRobS4KLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotCi0gICAgaWYgKGluaXRpYWxQb3NpdGlvbi5zaG91bGRCZVJlc29sdmVkQWdhaW5z
dE9wcG9zaXRlUG9zaXRpb24oKSkgewotICAgICAgICAvLyBJbmZlciB0aGUgcG9zaXRpb24gZnJv
bSB0aGUgZmluYWwgcG9zaXRpb24gKCdhdXRvIC8gMScgb3IgJ3NwYW4gMiAvIDMnIGNhc2UpLgot
ICAgICAgICBjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiBmaW5hbFJlc29sdmVkUG9zaXRpb24g
PSByZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgZmluYWxQ
b3NpdGlvbiwgZmluYWxQb3NpdGlvblNpZGUpOwotICAgICAgICByZXR1cm4gcmVzb2x2ZUdyaWRQ
b3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGdyaWRDb250YWluZXJTdHlsZSwgZmluYWxS
ZXNvbHZlZFBvc2l0aW9uLCBpbml0aWFsUG9zaXRpb24sIGluaXRpYWxQb3NpdGlvblNpZGUpOwot
ICAgIH0KLQotICAgIGlmIChmaW5hbFBvc2l0aW9uLnNob3VsZEJlUmVzb2x2ZWRBZ2FpbnN0T3Bw
b3NpdGVQb3NpdGlvbigpKSB7Ci0gICAgICAgIC8vIEluZmVyIG91ciBwb3NpdGlvbiBmcm9tIHRo
ZSBpbml0aWFsIHBvc2l0aW9uICgnMSAvIGF1dG8nIG9yICczIC8gc3BhbiAyJyBjYXNlKS4KLSAg
ICAgICAgY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24gaW5pdGlhbFJlc29sdmVkUG9zaXRpb24g
PSByZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgaW5pdGlh
bFBvc2l0aW9uLCBpbml0aWFsUG9zaXRpb25TaWRlKTsKLSAgICAgICAgcmV0dXJuIHJlc29sdmVH
cmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihncmlkQ29udGFpbmVyU3R5bGUsIGlu
aXRpYWxSZXNvbHZlZFBvc2l0aW9uLCBmaW5hbFBvc2l0aW9uLCBmaW5hbFBvc2l0aW9uU2lkZSk7
Ci0gICAgfQorICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSB1c2VkIHdoZW4gYm90aCBw
b3NpdGlvbnMgbmVlZCB0byBiZSByZXNvbHZlZCBhZ2FpbnN0IHRoZSBvcHBvc2l0ZSBvbmUuCisg
ICAgQVNTRVJUKGluaXRpYWxQb3NpdGlvbi5zaG91bGRCZVJlc29sdmVkQWdhaW5zdE9wcG9zaXRl
UG9zaXRpb24oKSAmJiBmaW5hbFBvc2l0aW9uLnNob3VsZEJlUmVzb2x2ZWRBZ2FpbnN0T3Bwb3Np
dGVQb3NpdGlvbigpKTsKIAotICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uIHJlc29sdmVkSW5pdGlh
bFBvc2l0aW9uID0gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFpbmVyU3R5
bGUsIGluaXRpYWxQb3NpdGlvbiwgaW5pdGlhbFBvc2l0aW9uU2lkZSk7Ci0gICAgR3JpZFJlc29s
dmVkUG9zaXRpb24gcmVzb2x2ZWRGaW5hbFBvc2l0aW9uID0gcmVzb2x2ZUdyaWRQb3NpdGlvbkZy
b21TdHlsZShncmlkQ29udGFpbmVyU3R5bGUsIGZpbmFsUG9zaXRpb24sIGZpbmFsUG9zaXRpb25T
aWRlKTsKKyAgICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiByZXNvbHZlZEZpbmFsUG9zaXRpb24gPSBy
ZXNvbHZlZEluaXRpYWxQb3NpdGlvbjsKIAotICAgIC8vIElmICdncmlkLXJvdy1lbmQnIHNwZWNp
ZmllcyBhIGxpbmUgYXQgb3IgYmVmb3JlIHRoYXQgc3BlY2lmaWVkIGJ5ICdncmlkLXJvdy1zdGFy
dCcsIGl0IGNvbXB1dGVzIHRvICdzcGFuIDEnLgotICAgIGlmIChyZXNvbHZlZEZpbmFsUG9zaXRp
b24gPCByZXNvbHZlZEluaXRpYWxQb3NpdGlvbikKLSAgICAgICAgcmVzb2x2ZWRGaW5hbFBvc2l0
aW9uID0gcmVzb2x2ZWRJbml0aWFsUG9zaXRpb247CisgICAgaWYgKGluaXRpYWxQb3NpdGlvbi5p
c1NwYW4oKSkKKyAgICAgICAgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uID0gcmVzb2x2ZUdyaWRQb3Np
dGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGdyaWRDb250YWluZXJTdHlsZSwgcmVzb2x2ZWRJ
bml0aWFsUG9zaXRpb24sIGluaXRpYWxQb3NpdGlvbiwgZmluYWxQb3NpdGlvblNpZGUpLT5yZXNv
bHZlZEZpbmFsUG9zaXRpb247CisgICAgZWxzZSBpZiAoZmluYWxQb3NpdGlvbi5pc1NwYW4oKSkK
KyAgICAgICAgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uID0gcmVzb2x2ZUdyaWRQb3NpdGlvbkFnYWlu
c3RPcHBvc2l0ZVBvc2l0aW9uKGdyaWRDb250YWluZXJTdHlsZSwgcmVzb2x2ZWRJbml0aWFsUG9z
aXRpb24sIGZpbmFsUG9zaXRpb24sIGZpbmFsUG9zaXRpb25TaWRlKS0+cmVzb2x2ZWRGaW5hbFBv
c2l0aW9uOwogCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8R3JpZFNwYW4+KHJlc29sdmVk
SW5pdGlhbFBvc2l0aW9uLCByZXNvbHZlZEZpbmFsUG9zaXRpb24pOworICAgIHJldHVybiBHcmlk
U3BhbihyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uKTsKIH0K
IAotR3JpZFJlc29sdmVkUG9zaXRpb24gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVOYW1l
ZEdyaWRMaW5lUG9zaXRpb25Gcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWlu
ZXJTdHlsZSwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBz
aWRlKQorc3RhdGljIEdyaWRSZXNvbHZlZFBvc2l0aW9uIHJlc29sdmVOYW1lZEdyaWRMaW5lUG9z
aXRpb25Gcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgY29u
c3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQogewogICAg
IEFTU0VSVCghcG9zaXRpb24ubmFtZWRHcmlkTGluZSgpLmlzTnVsbCgpKTsKIApAQCAtMTg3LDcg
KzE3Niw3IEBAIEdyaWRSZXNvbHZlZFBvc2l0aW9uIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNv
bHZlTmFtZWRHcmlkTGluZVBvc2l0aW9uRnJvbVN0eWxlCiAgICAgcmV0dXJuIEdyaWRSZXNvbHZl
ZFBvc2l0aW9uOjphZGp1c3RHcmlkUG9zaXRpb25Gb3JTaWRlKGl0LT52YWx1ZVtuYW1lZEdyaWRM
aW5lSW5kZXhdLCBzaWRlKTsKIH0KIAotR3JpZFJlc29sdmVkUG9zaXRpb24gR3JpZFJlc29sdmVk
UG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25Gcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUm
IGdyaWRDb250YWluZXJTdHlsZSwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBv
c2l0aW9uU2lkZSBzaWRlKQorc3RhdGljIEdyaWRSZXNvbHZlZFBvc2l0aW9uIHJlc29sdmVHcmlk
UG9zaXRpb25Gcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwg
Y29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQogewog
ICAgIHN3aXRjaCAocG9zaXRpb24udHlwZSgpKSB7CiAgICAgY2FzZSBFeHBsaWNpdFBvc2l0aW9u
OiB7CkBAIC0yNDQsODkgKzIzMyw0NCBAQCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiBHcmlkUmVzb2x2
ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShjb25zdCBSZQogICAgIHJl
dHVybiBHcmlkUmVzb2x2ZWRQb3NpdGlvbigwKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEdyaWRT
cGFuPiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbkFnYWluc3RPcHBv
c2l0ZVBvc2l0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIGNvbnN0
IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIGNvbnN0IEdy
aWRQb3NpdGlvbiYgcG9zaXRpb24sIEdyaWRQb3NpdGlvblNpZGUgc2lkZSkKK3N0ZDo6dW5pcXVl
X3B0cjxHcmlkU3Bhbj4gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25z
RnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIGNvbnN0IFJl
bmRlckJveCYgZ3JpZEl0ZW0sIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7
Ci0gICAgaWYgKHBvc2l0aW9uLmlzQXV0bygpKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxHcmlkU3Bhbj4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRl
UG9zaXRpb24pOworICAgIEdyaWRQb3NpdGlvbiBpbml0aWFsUG9zaXRpb24gPSAoZGlyZWN0aW9u
ID09IEZvckNvbHVtbnMpID8gZ3JpZEl0ZW0uc3R5bGUoKS5ncmlkSXRlbUNvbHVtblN0YXJ0KCkg
OiBncmlkSXRlbS5zdHlsZSgpLmdyaWRJdGVtUm93U3RhcnQoKTsKKyAgICBjb25zdCBHcmlkUG9z
aXRpb25TaWRlIGluaXRpYWxQb3NpdGlvblNpZGUgPSAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMp
ID8gQ29sdW1uU3RhcnRTaWRlIDogUm93U3RhcnRTaWRlOworICAgIEdyaWRQb3NpdGlvbiBmaW5h
bFBvc2l0aW9uID0gKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IGdyaWRJdGVtLnN0eWxlKCku
Z3JpZEl0ZW1Db2x1bW5FbmQoKSA6IGdyaWRJdGVtLnN0eWxlKCkuZ3JpZEl0ZW1Sb3dFbmQoKTsK
KyAgICBjb25zdCBHcmlkUG9zaXRpb25TaWRlIGZpbmFsUG9zaXRpb25TaWRlID0gKGRpcmVjdGlv
biA9PSBGb3JDb2x1bW5zKSA/IENvbHVtbkVuZFNpZGUgOiBSb3dFbmRTaWRlOwogCi0gICAgQVNT
RVJUKHBvc2l0aW9uLmlzU3BhbigpKTsKLSAgICBBU1NFUlQocG9zaXRpb24uc3BhblBvc2l0aW9u
KCkgPiAwKTsKKyAgICBhZGp1c3RHcmlkUG9zaXRpb25zRnJvbVN0eWxlKGdyaWRDb250YWluZXJT
dHlsZSwgaW5pdGlhbFBvc2l0aW9uLCBmaW5hbFBvc2l0aW9uLCBpbml0aWFsUG9zaXRpb25TaWRl
LCBmaW5hbFBvc2l0aW9uU2lkZSk7CiAKLSAgICBpZiAoIXBvc2l0aW9uLm5hbWVkR3JpZExpbmUo
KS5pc051bGwoKSkgewotICAgICAgICAvLyBzcGFuIDIgJ2MnIC0+IHdlIG5lZWQgdG8gZmluZCB0
aGUgYXBwcm9wcmlhdGUgZ3JpZCBsaW5lIGJlZm9yZSAvIGFmdGVyIG91ciBvcHBvc2l0ZSBwb3Np
dGlvbi4KLSAgICAgICAgcmV0dXJuIHJlc29sdmVOYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0
T3Bwb3NpdGVQb3NpdGlvbihncmlkQ29udGFpbmVyU3R5bGUsIHJlc29sdmVkT3Bwb3NpdGVQb3Np
dGlvbiwgcG9zaXRpb24sIHNpZGUpOwotICAgIH0KKyAgICBpZiAoaW5pdGlhbFBvc2l0aW9uLnNo
b3VsZEJlUmVzb2x2ZWRBZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbigpICYmIGZpbmFsUG9zaXRpb24u
c2hvdWxkQmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkpIHsKKyAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCBwcm9wZXJseSAic3RhY2siIHZhbHVlIGluIGF1dG8tcGxhY2VtZW50
IGFsZ29yaXRobS4KKyAgICAgICAgaWYgKGdyaWRDb250YWluZXJTdHlsZS5pc0dyaWRBdXRvRmxv
d0FsZ29yaXRobVN0YWNrKCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxH
cmlkU3Bhbj4oMCwgMCk7CiAKLSAgICAvLyAnc3BhbiAxJyBpcyBjb250YWluZWQgaW5zaWRlIGEg
c2luZ2xlIGdyaWQgdHJhY2sgcmVnYXJkbGVzcyBvZiB0aGUgZGlyZWN0aW9uLgotICAgIC8vIFRo
YXQncyB3aHkgdGhlIENTUyBzcGFuIHZhbHVlIGlzIG9uZSBtb3JlIHRoYW4gdGhlIG9mZnNldCB3
ZSBhcHBseS4KLSAgICB1bnNpZ25lZCBwb3NpdGlvbk9mZnNldCA9IHBvc2l0aW9uLnNwYW5Qb3Np
dGlvbigpIC0gMTsKLSAgICBpZiAoaXNTdGFydFNpZGUoc2lkZSkpIHsKLSAgICAgICAgdW5zaWdu
ZWQgaW5pdGlhbFJlc29sdmVkUG9zaXRpb24gPSBzdGQ6Om1heDxpbnQ+KDAsIHJlc29sdmVkT3Bw
b3NpdGVQb3NpdGlvbi50b0ludCgpIC0gcG9zaXRpb25PZmZzZXQpOwotICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3VuaXF1ZTxHcmlkU3Bhbj4oaW5pdGlhbFJlc29sdmVkUG9zaXRpb24sIHJlc29s
dmVkT3Bwb3NpdGVQb3NpdGlvbik7CisgICAgICAgIC8vIFdlIGNhbid0IGdldCBvdXIgZ3JpZCBw
b3NpdGlvbnMgd2l0aG91dCBydW5uaW5nIHRoZSBhdXRvIHBsYWNlbWVudCBhbGdvcml0aG0uCisg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPEdyaWRTcGFuPihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHJlc29sdmVkT3Bwb3NpdGVQ
b3NpdGlvbi50b0ludCgpICsgcG9zaXRpb25PZmZzZXQpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8
R3JpZFNwYW4+IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0
aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWlu
ZXJTdHlsZSwgY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29sdmVkT3Bwb3NpdGVQb3Np
dGlvbiwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBzaWRl
KQotewotICAgIEFTU0VSVChwb3NpdGlvbi5pc1NwYW4oKSk7Ci0gICAgQVNTRVJUKCFwb3NpdGlv
bi5uYW1lZEdyaWRMaW5lKCkuaXNOdWxsKCkpOwotICAgIC8vIE5lZ2F0aXZlIHBvc2l0aW9ucyBh
cmUgbm90IGFsbG93ZWQgcGVyIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBzaG91bGQgaGF2ZSBiZWVu
IGhhbmRsZWQgZHVyaW5nIHBhcnNpbmcuCi0gICAgQVNTRVJUKHBvc2l0aW9uLnNwYW5Qb3NpdGlv
bigpID4gMCk7Ci0KLSAgICBjb25zdCBOYW1lZEdyaWRMaW5lc01hcCYgZ3JpZExpbmVzTmFtZXMg
PSBpc0NvbHVtblNpZGUoc2lkZSkgPyBncmlkQ29udGFpbmVyU3R5bGUubmFtZWRHcmlkQ29sdW1u
TGluZXMoKSA6IGdyaWRDb250YWluZXJTdHlsZS5uYW1lZEdyaWRSb3dMaW5lcygpOwotICAgIE5h
bWVkR3JpZExpbmVzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGdyaWRMaW5lc05hbWVzLmZpbmQo
cG9zaXRpb24ubmFtZWRHcmlkTGluZSgpKTsKLQotICAgIC8vIElmIHRoZXJlIGlzIG5vIG5hbWVk
IGdyaWQgbGluZSBvZiB0aGF0IG5hbWUsIHdlIHJlc29sdmUgdGhlIHBvc2l0aW9uIHRvICdhdXRv
JyAod2hpY2ggaXMgZXF1aXZhbGVudCB0byAnc3BhbiAxJyBpbiB0aGlzIGNhc2UpLgotICAgIC8v
IFNlZSBodHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy93d3ctc3R5bGUvMjAxM0p1
bi8wMzk0Lmh0bWwuCi0gICAgaWYgKGl0ID09IGdyaWRMaW5lc05hbWVzLmVuZCgpKQotICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxHcmlkU3Bhbj4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0
aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOwotCi0gICAgaWYgKHNpZGUgPT0gUm93U3Rh
cnRTaWRlIHx8IHNpZGUgPT0gQ29sdW1uU3RhcnRTaWRlKQotICAgICAgICByZXR1cm4gcmVzb2x2
ZVJvd1N0YXJ0Q29sdW1uU3RhcnROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQ
b3NpdGlvbihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHBvc2l0aW9uLCBpdC0+dmFsdWUpOwot
Ci0gICAgcmV0dXJuIHJlc29sdmVSb3dFbmRDb2x1bW5FbmROYW1lZEdyaWRMaW5lUG9zaXRpb25B
Z2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHBvc2l0aW9u
LCBpdC0+dmFsdWUpOwotfQorICAgIGlmIChpbml0aWFsUG9zaXRpb24uc2hvdWxkQmVSZXNvbHZl
ZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkpIHsKKyAgICAgICAgLy8gSW5mZXIgdGhlIHBvc2l0
aW9uIGZyb20gdGhlIGZpbmFsIHBvc2l0aW9uICgnYXV0byAvIDEnIG9yICdzcGFuIDIgLyAzJyBj
YXNlKS4KKyAgICAgICAgY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24gZmluYWxSZXNvbHZlZFBv
c2l0aW9uID0gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFpbmVyU3R5bGUs
IGZpbmFsUG9zaXRpb24sIGZpbmFsUG9zaXRpb25TaWRlKTsKKyAgICAgICAgcmV0dXJuIHJlc29s
dmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihncmlkQ29udGFpbmVyU3R5bGUs
IGZpbmFsUmVzb2x2ZWRQb3NpdGlvbiwgaW5pdGlhbFBvc2l0aW9uLCBpbml0aWFsUG9zaXRpb25T
aWRlKTsKKyAgICB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZmlyc3ROYW1lZEdyaWRMaW5l
QmVmb3JlUG9zaXRpb24odW5zaWduZWQgcG9zaXRpb24sIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4m
IGdyaWRMaW5lcykKLXsKLSAgICAvLyBUaGUgZ3JpZCBsaW5lIGluZXF1YWxpdHkgbmVlZHMgdG8g
YmUgc3RyaWN0ICh3aGljaCBkb2Vzbid0IG1hdGNoIHRoZSBhZnRlciAvIGVuZCBjYXNlKSBiZWNh
dXNlIHxwb3NpdGlvbnwgaXMKLSAgICAvLyBhbHJlYWR5IGNvbnZlcnRlZCB0byBhbiBpbmRleCBp
biBvdXIgZ3JpZCByZXByZXNlbnRhdGlvbiAoaWUgb25lIHdhcyByZW1vdmVkIGZyb20gdGhlIGdy
aWQgbGluZSB0byBhY2NvdW50IGZvcgotICAgIC8vIHRoZSBzaWRlKS4KLSAgICB1bnNpZ25lZCBm
aXJzdExpbmVCZWZvcmVQb3NpdGlvbkluZGV4ID0gMDsKLSAgICBjb25zdCB1bnNpZ25lZCogZmly
c3RMaW5lQmVmb3JlUG9zaXRpb24gPSBzdGQ6Omxvd2VyX2JvdW5kKGdyaWRMaW5lcy5iZWdpbigp
LCBncmlkTGluZXMuZW5kKCksIHBvc2l0aW9uKTsKLSAgICBpZiAoZmlyc3RMaW5lQmVmb3JlUG9z
aXRpb24gIT0gZ3JpZExpbmVzLmVuZCgpKSB7Ci0gICAgICAgIGlmICgqZmlyc3RMaW5lQmVmb3Jl
UG9zaXRpb24gPiBwb3NpdGlvbiAmJiBmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiAhPSBncmlkTGlu
ZXMuYmVnaW4oKSkKLSAgICAgICAgICAgIC0tZmlyc3RMaW5lQmVmb3JlUG9zaXRpb247Ci0KLSAg
ICAgICAgZmlyc3RMaW5lQmVmb3JlUG9zaXRpb25JbmRleCA9IGZpcnN0TGluZUJlZm9yZVBvc2l0
aW9uIC0gZ3JpZExpbmVzLmJlZ2luKCk7CisgICAgaWYgKGZpbmFsUG9zaXRpb24uc2hvdWxkQmVS
ZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkpIHsKKyAgICAgICAgLy8gSW5mZXIgb3Vy
IHBvc2l0aW9uIGZyb20gdGhlIGluaXRpYWwgcG9zaXRpb24gKCcxIC8gYXV0bycgb3IgJzMgLyBz
cGFuIDInIGNhc2UpLgorICAgICAgICBjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiBpbml0aWFs
UmVzb2x2ZWRQb3NpdGlvbiA9IHJlc29sdmVHcmlkUG9zaXRpb25Gcm9tU3R5bGUoZ3JpZENvbnRh
aW5lclN0eWxlLCBpbml0aWFsUG9zaXRpb24sIGluaXRpYWxQb3NpdGlvblNpZGUpOworICAgICAg
ICByZXR1cm4gcmVzb2x2ZUdyaWRQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGdyaWRD
b250YWluZXJTdHlsZSwgaW5pdGlhbFJlc29sdmVkUG9zaXRpb24sIGZpbmFsUG9zaXRpb24sIGZp
bmFsUG9zaXRpb25TaWRlKTsKICAgICB9Ci0gICAgcmV0dXJuIGZpcnN0TGluZUJlZm9yZVBvc2l0
aW9uSW5kZXg7Ci19CiAKLXN0ZDo6dW5pcXVlX3B0cjxHcmlkU3Bhbj4gR3JpZFJlc29sdmVkUG9z
aXRpb246OnJlc29sdmVSb3dTdGFydENvbHVtblN0YXJ0TmFtZWRHcmlkTGluZVBvc2l0aW9uQWdh
aW5zdE9wcG9zaXRlUG9zaXRpb24oY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29sdmVk
T3Bwb3NpdGVQb3NpdGlvbiwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgVmVj
dG9yPHVuc2lnbmVkPiYgZ3JpZExpbmVzKQotewotICAgIHVuc2lnbmVkIGdyaWRMaW5lSW5kZXgg
PSBzdGQ6Om1heDxpbnQ+KDAsIGZpcnN0TmFtZWRHcmlkTGluZUJlZm9yZVBvc2l0aW9uKHJlc29s
dmVkT3Bwb3NpdGVQb3NpdGlvbi50b0ludCgpLCBncmlkTGluZXMpIC0gcG9zaXRpb24uc3BhblBv
c2l0aW9uKCkgKyAxKTsKLSAgICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiByZXNvbHZlZEdyaWRMaW5l
UG9zaXRpb24gPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbihncmlkTGluZXNbZ3JpZExpbmVJbmRleF0p
OwotICAgIGlmIChyZXNvbHZlZEdyaWRMaW5lUG9zaXRpb24gPiByZXNvbHZlZE9wcG9zaXRlUG9z
aXRpb24pCi0gICAgICAgIHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiA9IHJlc29sdmVkT3Bwb3Np
dGVQb3NpdGlvbjsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxHcmlkU3Bhbj4ocmVzb2x2
ZWRHcmlkTGluZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOwotfQorICAgIEdy
aWRSZXNvbHZlZFBvc2l0aW9uIHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uID0gcmVzb2x2ZUdyaWRQ
b3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFpbmVyU3R5bGUsIGluaXRpYWxQb3NpdGlvbiwgaW5p
dGlhbFBvc2l0aW9uU2lkZSk7CisgICAgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZWRGaW5h
bFBvc2l0aW9uID0gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFpbmVyU3R5
bGUsIGZpbmFsUG9zaXRpb24sIGZpbmFsUG9zaXRpb25TaWRlKTsKIAotc3RkOjp1bmlxdWVfcHRy
PEdyaWRTcGFuPiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZVJvd0VuZENvbHVtbkVuZE5h
bWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGNvbnN0IEdyaWRSZXNv
bHZlZFBvc2l0aW9uJiByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIGNvbnN0IEdyaWRQb3NpdGlv
biYgcG9zaXRpb24sIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGdyaWRMaW5lcykKLXsKLSAgICBB
U1NFUlQoZ3JpZExpbmVzLnNpemUoKSk7Ci0gICAgdW5zaWduZWQgZmlyc3RMaW5lQWZ0ZXJPcHBv
c2l0ZVBvc2l0aW9uSW5kZXggPSBncmlkTGluZXMuc2l6ZSgpIC0gMTsKLSAgICBjb25zdCB1bnNp
Z25lZCogZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uID0gc3RkOjp1cHBlcl9ib3VuZChn
cmlkTGluZXMuYmVnaW4oKSwgZ3JpZExpbmVzLmVuZCgpLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRp
b24pOwotICAgIGlmIChmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb24gIT0gZ3JpZExpbmVz
LmVuZCgpKQotICAgICAgICBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb25JbmRleCA9IGZp
cnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbiAtIGdyaWRMaW5lcy5iZWdpbigpOwotCi0gICAg
dW5zaWduZWQgZ3JpZExpbmVJbmRleCA9IHN0ZDo6bWluPHVuc2lnbmVkPihncmlkTGluZXMuc2l6
ZSgpIC0gMSwgZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uSW5kZXggKyBwb3NpdGlvbi5z
cGFuUG9zaXRpb24oKSAtIDEpOwotICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uIHJlc29sdmVkR3Jp
ZExpbmVQb3NpdGlvbiA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjphZGp1c3RHcmlkUG9zaXRpb25G
b3JSb3dFbmRDb2x1bW5FbmRTaWRlKGdyaWRMaW5lc1tncmlkTGluZUluZGV4XSk7Ci0gICAgaWYg
KHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiA8IHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbikKLSAg
ICAgICAgcmVzb2x2ZWRHcmlkTGluZVBvc2l0aW9uID0gcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9u
OwotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEdyaWRTcGFuPihyZXNvbHZlZE9wcG9zaXRl
UG9zaXRpb24sIHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbik7CisgICAgLy8gSWYgJ2dyaWQtcm93
LWVuZCcgc3BlY2lmaWVzIGEgbGluZSBhdCBvciBiZWZvcmUgdGhhdCBzcGVjaWZpZWQgYnkgJ2dy
aWQtcm93LXN0YXJ0JywgaXQgY29tcHV0ZXMgdG8gJ3NwYW4gMScuCisgICAgaWYgKHJlc29sdmVk
RmluYWxQb3NpdGlvbiA8IHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKQorICAgICAgICByZXNvbHZl
ZEZpbmFsUG9zaXRpb24gPSByZXNvbHZlZEluaXRpYWxQb3NpdGlvbjsKKworICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEdyaWRTcGFuPihyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgcmVzb2x2
ZWRGaW5hbFBvc2l0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uaApp
bmRleCA5NTU1NmNkZWJlYmJiZGM0YjcxZWQyYzQxZGY1OTJhYjM5ZTNiZjU5Li4yYWZlNTc1Zjdm
MDY5NTcxNjM5NTM1ZTMzMmU4OWQ1NTA4ZWRlYzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uaApAQCAtNDEsMTMgKzQx
LDYgQEAgY2xhc3MgR3JpZFNwYW47CiBjbGFzcyBSZW5kZXJCb3g7CiBjbGFzcyBSZW5kZXJTdHls
ZTsKIAotZW51bSBHcmlkUG9zaXRpb25TaWRlIHsKLSAgICBDb2x1bW5TdGFydFNpZGUsCi0gICAg
Q29sdW1uRW5kU2lkZSwKLSAgICBSb3dTdGFydFNpZGUsCi0gICAgUm93RW5kU2lkZQotfTsKLQog
ZW51bSBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gewogICAgIEZvckNvbHVtbnMsCiAgICAgRm9y
Um93cwpAQCAtNzIsMTUgKzY1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBHcmlk
U3BhbiByZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21BdXRvUGxhY2VtZW50UG9zaXRpb24oY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJCb3gmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24s
IGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgYWRqdXN0TmFt
ZWRHcmlkSXRlbVBvc2l0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiwgR3JpZFBvc2l0aW9uJiwgR3Jp
ZFBvc2l0aW9uU2lkZSk7Ci0gICAgc3RhdGljIHZvaWQgYWRqdXN0R3JpZFBvc2l0aW9uc0Zyb21T
dHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIEdyaWRQb3NpdGlvbiYgaW5pdGlhbFBvc2l0aW9uLCBH
cmlkUG9zaXRpb24mIGZpbmFsUG9zaXRpb24sIEdyaWRQb3NpdGlvblNpZGUgaW5pdGlhbFBvc2l0
aW9uU2lkZSwgR3JpZFBvc2l0aW9uU2lkZSBmaW5hbFBvc2l0aW9uU2lkZSk7CiAgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxHcmlkU3Bhbj4gcmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJCb3gmLCBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24pOwotICAgIHN0YXRpYyBHcmlkUmVzb2x2ZWRQb3NpdGlvbiByZXNvbHZlTmFtZWRHcmlk
TGluZVBvc2l0aW9uRnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgR3JpZFBvc2l0
aW9uJiwgR3JpZFBvc2l0aW9uU2lkZSk7Ci0gICAgc3RhdGljIEdyaWRSZXNvbHZlZFBvc2l0aW9u
IHJlc29sdmVHcmlkUG9zaXRpb25Gcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBH
cmlkUG9zaXRpb24mLCBHcmlkUG9zaXRpb25TaWRlKTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEdyaWRTcGFuPiByZXNvbHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24o
Y29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYsIGNvbnN0IEdy
aWRQb3NpdGlvbiYsIEdyaWRQb3NpdGlvblNpZGUpOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8R3JpZFNwYW4+IHJlc29sdmVOYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQ
b3NpdGlvbihjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiwg
Y29uc3QgR3JpZFBvc2l0aW9uJiwgR3JpZFBvc2l0aW9uU2lkZSk7Ci0gICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxHcmlkU3Bhbj4gcmVzb2x2ZVJvd1N0YXJ0Q29sdW1uU3RhcnROYW1lZEdyaWRM
aW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihjb25zdCBHcmlkUmVzb2x2ZWRQb3Np
dGlvbiYsIGNvbnN0IEdyaWRQb3NpdGlvbiYsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mKTsKLSAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEdyaWRTcGFuPiByZXNvbHZlUm93RW5kQ29sdW1uRW5k
TmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oY29uc3QgR3JpZFJl
c29sdmVkUG9zaXRpb24mLCBjb25zdCBHcmlkUG9zaXRpb24mLCBjb25zdCBWZWN0b3I8dW5zaWdu
ZWQ+Jik7CiAKICAgICBHcmlkUmVzb2x2ZWRQb3NpdGlvbih1bnNpZ25lZCBwb3NpdGlvbikKICAg
ICAgICAgOiBtX2ludGVnZXJQb3NpdGlvbihwb3NpdGlvbikK
</data>
<flag name="review"
          id="267123"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253998</attachid>
            <date>2015-06-01 07:12:57 -0700</date>
            <delta_ts>2015-06-01 07:35:51 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-139077-20150601161237.patch</filename>
            <type>text/plain</type>
            <size>49180</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0ODU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTEzNTUyZjNkYjhmYjFm
OGQzMjdjYzRmNDc5ZmE3ZDg4YTNmYWZlZS4uNzA5ODNkMTNkMzhkZGIzZTI5Mzk2NDU1NTRmOTY0
ZGI3ZDhmZjQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE1LTA2LTAxICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtDU1MgR3Jp
ZCBMYXlvdXRdIFNpbXBsaWZ5IHRoZSBpbnRlcmZhY2Ugb2YgR3JpZFJlc29sdmVkUG9zaXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTA3Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFRoZSBpbnRlcmZh
Y2Ugb2YgR3JpZFJlc29sdmVkUG9zaXRpb24gaXMgZnVsbCBvZiBzdGF0aWMgbWV0aG9kcworICAg
ICAgICB0aGF0IGFyZSB1c2VkIG9ubHkgaW50ZXJuYWxseSwgd2Ugc2hvdWxkIG5vdCBleHBvc2Ug
dGhlbS4KKworICAgICAgICBBcGFydCBmcm9tIHRoYXQgcmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9t
U3R5bGUoKSBkbyBhbHdheXMgcmV0dXJuCisgICAgICAgIGEgdmFsaWQgR3JpZFNwYW4gZnJvbSBu
b3cgb24gbWVhbmluZyB0aGF0IHRoZSBjYWxsZXIgaGFzIHRvIGVuc3VyZQorICAgICAgICB0aGF0
IHRoZSByZXNvbHV0aW9uIGRvZXMgbm90IHJlcXVpcmUgcnVubmluZyB0aGUgYXV0by1wbGFjZW1l
bnQKKyAgICAgICAgYWxnb3JpdGhtLiBBIG5ldyBjbGFzcyBjYWxsZWQgR3JpZFVucmVzb2x2ZWRT
cGFuIHdhcyBhZGRlZCBmb3IKKyAgICAgICAgdGhhdCBwdXJwb3NlLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyBhcyB0aGlzIGlzIGEgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyR3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZUl0ZW1z
T25HcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBvcHVsYXRlRXhwbGljaXRH
cmlkQW5kT3JkZXJJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFj
ZVNwZWNpZmllZE1ham9yQXhpc0l0ZW1zT25HcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckdyaWQ6OnBsYWNlQXV0b01ham9yQXhpc0l0ZW1PbkdyaWQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdHlsZS9HcmlkUG9zaXRpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvR3JpZFJl
c29sdmVkUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z3JpZExpbmVzRm9yU2lkZSk6
CisgICAgICAgIChXZWJDb3JlOjppbXBsaWNpdE5hbWVkR3JpZExpbmVGb3JTaWRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmlzTm9uRXhpc3RlbnROYW1lZExpbmVPckFyZWEpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JpZFVucmVzb2x2ZWRTcGFuOjpyZXF1aXJlc0F1dG9QbGFjZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JpZFVucmVzb2x2ZWRTcGFuOjphZGp1c3RHcmlkUG9zaXRpb25zRnJvbVN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdEdyaWRQb3NpdGlvbkZvclJvd0VuZENvbHVt
bkVuZFNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0R3JpZFBvc2l0aW9uRm9yU2lkZSk6
CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0aW9uRnJvbVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0TmFtZWRHcmlkTGluZUJlZm9yZVBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVSb3dTdGFydENvbHVtblN0YXJ0TmFtZWRHcmlkTGlu
ZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6cmVz
b2x2ZVJvd0VuZENvbHVtbkVuZE5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVOYW1lZEdyaWRMaW5lUG9zaXRpb25B
Z2FpbnN0T3Bwb3NpdGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlR3JpZFBv
c2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFJl
c29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbUF1dG9QbGFjZW1lbnRQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpHcmlkUmVzb2x2ZWRQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6dW5yZXNvbHZl
ZFNwYW5Gcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFJlc29sdmVkUG9zaXRpb246
OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRS
ZXNvbHZlZFBvc2l0aW9uOjphZGp1c3RHcmlkUG9zaXRpb25zRnJvbVN0eWxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlTmFtZWRHcmlk
TGluZVBvc2l0aW9uRnJvbVN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyaWRS
ZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0
aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVOYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0
T3Bwb3NpdGVQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmlkUmVzb2x2
ZWRQb3NpdGlvbjo6cmVzb2x2ZVJvd1N0YXJ0Q29sdW1uU3RhcnROYW1lZEdyaWRMaW5lUG9zaXRp
b25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZVJvd0VuZENvbHVtbkVuZE5hbWVkR3JpZExpbmVQ
b3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5k
ZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
aWRVbnJlc29sdmVkU3Bhbjo6R3JpZFVucmVzb2x2ZWRTcGFuKTogTmV3IGNsYXNzLgorICAgICAg
ICAoV2ViQ29yZTo6R3JpZFVucmVzb2x2ZWRTcGFuOjppbml0aWFsUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JpZFVucmVzb2x2ZWRTcGFuOjpmaW5hbFBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyaWRVbnJlc29sdmVkU3Bhbjo6aW5pdGlhbFBvc2l0aW9uU2lkZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmlkVW5yZXNvbHZlZFNwYW46OmZpbmFsUG9zaXRpb25TaWRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjphZGp1c3RHcmlkUG9zaXRpb25G
b3JSb3dFbmRDb2x1bW5FbmRTaWRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyaWRS
ZXNvbHZlZFBvc2l0aW9uOjphZGp1c3RHcmlkUG9zaXRpb25Gb3JTaWRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpHcmlkUmVzb2x2ZWRQb3NpdGlv
bik6IERlbGV0ZWQuCisKIDIwMTUtMDUtMjUgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNv
bT4KIAogICAgICAgICBGaXhlZCBhIGZhaWxpbmcgYmluZGluZ3MgdGVzdCBhZnRlciByMTg0ODUz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCmluZGV4IDEzOTg0NjA2OTQ1
NzNkMWFhODNiYmRlZDVkNjczY2NiYWY1YTdhZDcuLjNiZDI2YTVlNzdiYWUwMDkzNzY4MzczNjc1
ZTE2NjIyYWQ1Mzc0MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJHcmlkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAK
QEAgLTk3NSwxNyArOTc1LDIyIEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VJdGVtc09uR3JpZCgp
CiAgICAgVmVjdG9yPFJlbmRlckJveCo+IGF1dG9NYWpvckF4aXNBdXRvR3JpZEl0ZW1zOwogICAg
IFZlY3RvcjxSZW5kZXJCb3gqPiBzcGVjaWZpZWRNYWpvckF4aXNBdXRvR3JpZEl0ZW1zOwogICAg
IGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci5maXJzdCgpOyBjaGlsZDsg
Y2hpbGQgPSBtX29yZGVySXRlcmF0b3IubmV4dCgpKSB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxHcmlkU3Bhbj4gcm93UG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVH
cmlkUG9zaXRpb25zRnJvbVN0eWxlKHN0eWxlKCksICpjaGlsZCwgRm9yUm93cyk7Ci0gICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxHcmlkU3Bhbj4gY29sdW1uUG9zaXRpb25zID0gR3JpZFJlc29sdmVk
UG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKHN0eWxlKCksICpjaGlsZCwg
Rm9yQ29sdW1ucyk7Ci0gICAgICAgIGlmICghcm93UG9zaXRpb25zIHx8ICFjb2x1bW5Qb3NpdGlv
bnMpIHsKLSAgICAgICAgICAgIEdyaWRTcGFuKiBtYWpvckF4aXNQb3NpdGlvbnMgPSAoYXV0b1Bs
YWNlbWVudE1ham9yQXhpc0RpcmVjdGlvbigpID09IEZvckNvbHVtbnMpID8gY29sdW1uUG9zaXRp
b25zLmdldCgpIDogcm93UG9zaXRpb25zLmdldCgpOwotICAgICAgICAgICAgaWYgKCFtYWpvckF4
aXNQb3NpdGlvbnMpCisgICAgICAgIGF1dG8gdW5yZXNvbHZlZFJvd1Bvc2l0aW9ucyA9IEdyaWRS
ZXNvbHZlZFBvc2l0aW9uOjp1bnJlc29sdmVkU3BhbkZyb21TdHlsZShzdHlsZSgpLCAqY2hpbGQs
IEZvclJvd3MpOworICAgICAgICBhdXRvIHVucmVzb2x2ZWRDb2x1bW5Qb3NpdGlvbnMgPSBHcmlk
UmVzb2x2ZWRQb3NpdGlvbjo6dW5yZXNvbHZlZFNwYW5Gcm9tU3R5bGUoc3R5bGUoKSwgKmNoaWxk
LCBGb3JDb2x1bW5zKTsKKworICAgICAgICBpZiAodW5yZXNvbHZlZFJvd1Bvc2l0aW9ucy5yZXF1
aXJlc0F1dG9QbGFjZW1lbnQoKSB8fCB1bnJlc29sdmVkQ29sdW1uUG9zaXRpb25zLnJlcXVpcmVz
QXV0b1BsYWNlbWVudCgpKSB7CisKKyAgICAgICAgICAgIGJvb2wgbWFqb3JBeGlzRGlyZWN0aW9u
SXNGb3JDb2x1bW5zID0gYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVjdGlvbigpID09IEZvckNv
bHVtbnM7CisgICAgICAgICAgICBpZiAoKG1ham9yQXhpc0RpcmVjdGlvbklzRm9yQ29sdW1ucyAm
JiB1bnJlc29sdmVkQ29sdW1uUG9zaXRpb25zLnJlcXVpcmVzQXV0b1BsYWNlbWVudCgpKQorICAg
ICAgICAgICAgICAgIHx8ICghbWFqb3JBeGlzRGlyZWN0aW9uSXNGb3JDb2x1bW5zICYmIHVucmVz
b2x2ZWRSb3dQb3NpdGlvbnMucmVxdWlyZXNBdXRvUGxhY2VtZW50KCkpKQogICAgICAgICAgICAg
ICAgIGF1dG9NYWpvckF4aXNBdXRvR3JpZEl0ZW1zLmFwcGVuZChjaGlsZCk7CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgc3BlY2lmaWVkTWFqb3JBeGlzQXV0b0dyaWRJdGVtcy5h
cHBlbmQoY2hpbGQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAg
aW5zZXJ0SXRlbUludG9HcmlkKCpjaGlsZCwgR3JpZENvb3JkaW5hdGUoKnJvd1Bvc2l0aW9ucywg
KmNvbHVtblBvc2l0aW9ucykpOworICAgICAgICBHcmlkU3BhbiByb3dQb3NpdGlvbnMgPSBHcmlk
UmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUodW5yZXNvbHZl
ZFJvd1Bvc2l0aW9ucywgc3R5bGUoKSk7CisgICAgICAgIEdyaWRTcGFuIGNvbHVtblBvc2l0aW9u
cyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZSh1
bnJlc29sdmVkQ29sdW1uUG9zaXRpb25zLCBzdHlsZSgpKTsKKyAgICAgICAgaW5zZXJ0SXRlbUlu
dG9HcmlkKCpjaGlsZCwgR3JpZENvb3JkaW5hdGUocm93UG9zaXRpb25zLCBjb2x1bW5Qb3NpdGlv
bnMpKTsKICAgICB9CiAKICAgICBBU1NFUlQoZ3JpZFJvd0NvdW50KCkgPj0gR3JpZFJlc29sdmVk
UG9zaXRpb246OmV4cGxpY2l0R3JpZFJvd0NvdW50KHN0eWxlKCkpKTsKQEAgLTEwMDQsMjIgKzEw
MDksMjEgQEAgdm9pZCBSZW5kZXJHcmlkOjpwb3B1bGF0ZUV4cGxpY2l0R3JpZEFuZE9yZGVySXRl
cmF0b3IoKQogICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKICAgICAgICAgcG9wdWxhdG9y
LmNvbGxlY3RDaGlsZCgqY2hpbGQpOwogCi0gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gYnlwYXNz
ZXMgdGhlIGNhY2hlIChjYWNoZWRHcmlkQ29vcmRpbmF0ZSgpKSBhcyBpdCBpcyB1c2VkIHRvIGJ1
aWxkIGl0LgotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JpZFNwYW4+IHJvd1Bvc2l0aW9ucyA9
IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZShzdHls
ZSgpLCAqY2hpbGQsIEZvclJvd3MpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JpZFNwYW4+
IGNvbHVtblBvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0
aW9uc0Zyb21TdHlsZShzdHlsZSgpLCAqY2hpbGQsIEZvckNvbHVtbnMpOwotCi0gICAgICAgIC8v
IHxwb3NpdGlvbnN8IGlzIDAgaWYgd2UgbmVlZCB0byBydW4gdGhlIGF1dG8tcGxhY2VtZW50IGFs
Z29yaXRobS4KLSAgICAgICAgaWYgKHJvd1Bvc2l0aW9ucykKLSAgICAgICAgICAgIG1heGltdW1S
b3dJbmRleCA9IHN0ZDo6bWF4KG1heGltdW1Sb3dJbmRleCwgcm93UG9zaXRpb25zLT5yZXNvbHZl
ZEZpbmFsUG9zaXRpb24ubmV4dCgpLnRvSW50KCkpOwotICAgICAgICBlbHNlIHsKKyAgICAgICAg
YXV0byB1bnJlc29sdmVkUm93UG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnVucmVz
b2x2ZWRTcGFuRnJvbVN0eWxlKHN0eWxlKCksICpjaGlsZCwgRm9yUm93cyk7CisgICAgICAgIGlm
ICghdW5yZXNvbHZlZFJvd1Bvc2l0aW9ucy5yZXF1aXJlc0F1dG9QbGFjZW1lbnQoKSkgeworICAg
ICAgICAgICAgR3JpZFNwYW4gcm93UG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnJl
c29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKHVucmVzb2x2ZWRSb3dQb3NpdGlvbnMsIHN0eWxl
KCkpOworICAgICAgICAgICAgbWF4aW11bVJvd0luZGV4ID0gc3RkOjptYXgobWF4aW11bVJvd0lu
ZGV4LCByb3dQb3NpdGlvbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uLm5leHQoKS50b0ludCgpKTsK
KyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEdyb3cgdGhlIGdyaWQgZm9yIGl0ZW1z
IHdpdGggYSBkZWZpbml0ZSByb3cgc3BhbiwgZ2V0dGluZyB0aGUgbGFyZ2VzdCBzdWNoIHNwYW4u
CiAgICAgICAgICAgICBHcmlkU3BhbiBwb3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6
cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tQXV0b1BsYWNlbWVudFBvc2l0aW9uKHN0eWxlKCksICpj
aGlsZCwgRm9yUm93cywgR3JpZFJlc29sdmVkUG9zaXRpb24oMCkpOwogICAgICAgICAgICAgbWF4
aW11bVJvd0luZGV4ID0gc3RkOjptYXgobWF4aW11bVJvd0luZGV4LCBwb3NpdGlvbnMucmVzb2x2
ZWRGaW5hbFBvc2l0aW9uLm5leHQoKS50b0ludCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChjb2x1bW5Qb3NpdGlvbnMpCi0gICAgICAgICAgICBtYXhpbXVtQ29sdW1uSW5kZXggPSBzdGQ6
Om1heChtYXhpbXVtQ29sdW1uSW5kZXgsIGNvbHVtblBvc2l0aW9ucy0+cmVzb2x2ZWRGaW5hbFBv
c2l0aW9uLm5leHQoKS50b0ludCgpKTsKLSAgICAgICAgZWxzZSB7CisgICAgICAgIGF1dG8gdW5y
ZXNvbHZlZENvbHVtblBvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjp1bnJlc29sdmVk
U3BhbkZyb21TdHlsZShzdHlsZSgpLCAqY2hpbGQsIEZvckNvbHVtbnMpOworICAgICAgICBpZiAo
IXVucmVzb2x2ZWRDb2x1bW5Qb3NpdGlvbnMucmVxdWlyZXNBdXRvUGxhY2VtZW50KCkpIHsKKyAg
ICAgICAgICAgIEdyaWRTcGFuIGNvbHVtblBvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9u
OjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZSh1bnJlc29sdmVkQ29sdW1uUG9zaXRpb25z
LCBzdHlsZSgpKTsKKyAgICAgICAgICAgIG1heGltdW1Db2x1bW5JbmRleCA9IHN0ZDo6bWF4KG1h
eGltdW1Db2x1bW5JbmRleCwgY29sdW1uUG9zaXRpb25zLnJlc29sdmVkRmluYWxQb3NpdGlvbi5u
ZXh0KCkudG9JbnQoKSk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBHcm93IHRo
ZSBncmlkIGZvciBpdGVtcyB3aXRoIGEgZGVmaW5pdGUgY29sdW1uIHNwYW4sIGdldHRpbmcgdGhl
IGxhcmdlc3Qgc3VjaCBzcGFuLgogICAgICAgICAgICAgR3JpZFNwYW4gcG9zaXRpb25zID0gR3Jp
ZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbUF1dG9QbGFjZW1lbnRQ
b3NpdGlvbihzdHlsZSgpLCAqY2hpbGQsIEZvckNvbHVtbnMsIEdyaWRSZXNvbHZlZFBvc2l0aW9u
KDApKTsKICAgICAgICAgICAgIG1heGltdW1Db2x1bW5JbmRleCA9IHN0ZDo6bWF4KG1heGltdW1D
b2x1bW5JbmRleCwgcG9zaXRpb25zLnJlc29sdmVkRmluYWxQb3NpdGlvbi5uZXh0KCkudG9JbnQo
KSk7CkBAIC0xMDUwLDE0ICsxMDU0LDE2IEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VTcGVjaWZp
ZWRNYWpvckF4aXNJdGVtc09uR3JpZChjb25zdCBWZWN0b3I8UmVuZGVyQm94Kj4mIGF1CiAgICAg
SGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQsIERlZmF1bHRIYXNoPHVuc2lnbmVkPjo6SGFzaCwg
V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+IG1pbm9yQXhpc0N1
cnNvcnM7CiAKICAgICBmb3IgKGF1dG8mIGF1dG9HcmlkSXRlbSA6IGF1dG9HcmlkSXRlbXMpIHsK
LSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdyaWRTcGFuPiBtYWpvckF4aXNQb3NpdGlvbnMgPSBH
cmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoc3R5bGUo
KSwgKmF1dG9HcmlkSXRlbSwgYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVjdGlvbigpKTsKKyAg
ICAgICAgYXV0byB1bnJlc29sdmVkTWFqb3JBeGlzUG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9z
aXRpb246OnVucmVzb2x2ZWRTcGFuRnJvbVN0eWxlKHN0eWxlKCksICphdXRvR3JpZEl0ZW0sIGF1
dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSk7CisgICAgICAgIEFTU0VSVCghdW5yZXNv
bHZlZE1ham9yQXhpc1Bvc2l0aW9ucy5yZXF1aXJlc0F1dG9QbGFjZW1lbnQoKSk7CisgICAgICAg
IEdyaWRTcGFuIG1ham9yQXhpc1Bvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNv
bHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZSh1bnJlc29sdmVkTWFqb3JBeGlzUG9zaXRpb25zLCBz
dHlsZSgpKTsKICAgICAgICAgR3JpZFNwYW4gbWlub3JBeGlzUG9zaXRpb25zID0gR3JpZFJlc29s
dmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbUF1dG9QbGFjZW1lbnRQb3NpdGlv
bihzdHlsZSgpLCAqYXV0b0dyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWlub3JBeGlzRGlyZWN0aW9u
KCksIEdyaWRSZXNvbHZlZFBvc2l0aW9uKDApKTsKLSAgICAgICAgdW5zaWduZWQgbWFqb3JBeGlz
SW5pdGlhbFBvc2l0aW9uID0gbWFqb3JBeGlzUG9zaXRpb25zLT5yZXNvbHZlZEluaXRpYWxQb3Np
dGlvbi50b0ludCgpOworICAgICAgICB1bnNpZ25lZCBtYWpvckF4aXNJbml0aWFsUG9zaXRpb24g
PSBtYWpvckF4aXNQb3NpdGlvbnMucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24udG9JbnQoKTsKIAot
ICAgICAgICBHcmlkSXRlcmF0b3IgaXRlcmF0b3IobV9ncmlkLCBhdXRvUGxhY2VtZW50TWFqb3JB
eGlzRGlyZWN0aW9uKCksIG1ham9yQXhpc1Bvc2l0aW9ucy0+cmVzb2x2ZWRJbml0aWFsUG9zaXRp
b24udG9JbnQoKSwgaXNHcmlkQXV0b0Zsb3dEZW5zZSA/IDAgOiBtaW5vckF4aXNDdXJzb3JzLmdl
dChtYWpvckF4aXNJbml0aWFsUG9zaXRpb24pKTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdy
aWRDb29yZGluYXRlPiBlbXB0eUdyaWRBcmVhID0gaXRlcmF0b3IubmV4dEVtcHR5R3JpZEFyZWEo
bWFqb3JBeGlzUG9zaXRpb25zLT5pbnRlZ2VyU3BhbigpLCBtaW5vckF4aXNQb3NpdGlvbnMuaW50
ZWdlclNwYW4oKSk7CisgICAgICAgIEdyaWRJdGVyYXRvciBpdGVyYXRvcihtX2dyaWQsIGF1dG9Q
bGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSwgbWFqb3JBeGlzUG9zaXRpb25zLnJlc29sdmVk
SW5pdGlhbFBvc2l0aW9uLnRvSW50KCksIGlzR3JpZEF1dG9GbG93RGVuc2UgPyAwIDogbWlub3JB
eGlzQ3Vyc29ycy5nZXQobWFqb3JBeGlzSW5pdGlhbFBvc2l0aW9uKSk7CisgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxHcmlkQ29vcmRpbmF0ZT4gZW1wdHlHcmlkQXJlYSA9IGl0ZXJhdG9yLm5leHRF
bXB0eUdyaWRBcmVhKG1ham9yQXhpc1Bvc2l0aW9ucy5pbnRlZ2VyU3BhbigpLCBtaW5vckF4aXNQ
b3NpdGlvbnMuaW50ZWdlclNwYW4oKSk7CiAgICAgICAgIGlmICghZW1wdHlHcmlkQXJlYSkKLSAg
ICAgICAgICAgIGVtcHR5R3JpZEFyZWEgPSBjcmVhdGVFbXB0eUdyaWRBcmVhQXRTcGVjaWZpZWRQ
b3NpdGlvbnNPdXRzaWRlR3JpZCgqYXV0b0dyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWFqb3JBeGlz
RGlyZWN0aW9uKCksICptYWpvckF4aXNQb3NpdGlvbnMpOworICAgICAgICAgICAgZW1wdHlHcmlk
QXJlYSA9IGNyZWF0ZUVtcHR5R3JpZEFyZWFBdFNwZWNpZmllZFBvc2l0aW9uc091dHNpZGVHcmlk
KCphdXRvR3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSwgbWFqb3JB
eGlzUG9zaXRpb25zKTsKICAgICAgICAgaW5zZXJ0SXRlbUludG9HcmlkKCphdXRvR3JpZEl0ZW0s
ICplbXB0eUdyaWRBcmVhKTsKIAogICAgICAgICBpZiAoIWlzR3JpZEF1dG9GbG93RGVuc2UpCkBA
IC0xMDgyLDggKzEwODgsNyBAQCB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlQXV0b01ham9yQXhpc0l0
ZW1zT25HcmlkKGNvbnN0IFZlY3RvcjxSZW5kZXJCb3gqPiYgYXV0b0dyaQogCiB2b2lkIFJlbmRl
ckdyaWQ6OnBsYWNlQXV0b01ham9yQXhpc0l0ZW1PbkdyaWQoUmVuZGVyQm94JiBncmlkSXRlbSwg
QXV0b1BsYWNlbWVudEN1cnNvciYgYXV0b1BsYWNlbWVudEN1cnNvcikKIHsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8R3JpZFNwYW4+IG1pbm9yQXhpc1Bvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0
aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZShzdHlsZSgpLCBncmlkSXRlbSwgYXV0
b1BsYWNlbWVudE1pbm9yQXhpc0RpcmVjdGlvbigpKTsKLSAgICBBU1NFUlQoIUdyaWRSZXNvbHZl
ZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZShzdHlsZSgpLCBncmlkSXRl
bSwgYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVjdGlvbigpKSk7CisgICAgQVNTRVJUKEdyaWRS
ZXNvbHZlZFBvc2l0aW9uOjp1bnJlc29sdmVkU3BhbkZyb21TdHlsZShzdHlsZSgpLCBncmlkSXRl
bSwgYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVjdGlvbigpKS5yZXF1aXJlc0F1dG9QbGFjZW1l
bnQoKSk7CiAgICAgR3JpZFNwYW4gbWFqb3JBeGlzUG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9z
aXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbUF1dG9QbGFjZW1lbnRQb3NpdGlvbihzdHls
ZSgpLCBncmlkSXRlbSwgYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVjdGlvbigpLCBHcmlkUmVz
b2x2ZWRQb3NpdGlvbigwKSk7CiAKICAgICBjb25zdCB1bnNpZ25lZCBlbmRPZk1ham9yQXhpcyA9
IChhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGlyZWN0aW9uKCkgPT0gRm9yQ29sdW1ucykgPyBncmlk
Q29sdW1uQ291bnQoKSA6IGdyaWRSb3dDb3VudCgpOwpAQCAtMTA5MSwxOCArMTA5NiwyMSBAQCB2
b2lkIFJlbmRlckdyaWQ6OnBsYWNlQXV0b01ham9yQXhpc0l0ZW1PbkdyaWQoUmVuZGVyQm94JiBn
cmlkSXRlbSwgQXV0b1BsYWNlbWVudAogICAgIHVuc2lnbmVkIG1pbm9yQXhpc0F1dG9QbGFjZW1l
bnRDdXJzb3IgPSBhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGlyZWN0aW9uKCkgPT0gRm9yQ29sdW1u
cyA/IGF1dG9QbGFjZW1lbnRDdXJzb3IuZmlyc3QgOiBhdXRvUGxhY2VtZW50Q3Vyc29yLnNlY29u
ZDsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmlkQ29vcmRpbmF0ZT4gZW1wdHlHcmlkQXJlYTsK
LSAgICBpZiAobWlub3JBeGlzUG9zaXRpb25zKSB7CisgICAgYXV0byB1bnJlc29sdmVkTWlub3JB
eGlzUG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnVucmVzb2x2ZWRTcGFuRnJvbVN0
eWxlKHN0eWxlKCksIGdyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWlub3JBeGlzRGlyZWN0aW9uKCkp
OworICAgIGlmICghdW5yZXNvbHZlZE1pbm9yQXhpc1Bvc2l0aW9ucy5yZXF1aXJlc0F1dG9QbGFj
ZW1lbnQoKSkgeworICAgICAgICBHcmlkU3BhbiBtaW5vckF4aXNQb3NpdGlvbnMgPSBHcmlkUmVz
b2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUodW5yZXNvbHZlZE1p
bm9yQXhpc1Bvc2l0aW9ucywgc3R5bGUoKSk7CisKICAgICAgICAgLy8gTW92ZSB0byB0aGUgbmV4
dCB0cmFjayBpbiBtYWpvciBheGlzIGlmIGluaXRpYWwgcG9zaXRpb24gaW4gbWlub3IgYXhpcyBp
cyBiZWZvcmUgYXV0by1wbGFjZW1lbnQgY3Vyc29yLgotICAgICAgICBpZiAobWlub3JBeGlzUG9z
aXRpb25zLT5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbi50b0ludCgpIDwgbWlub3JBeGlzQXV0b1Bs
YWNlbWVudEN1cnNvcikKKyAgICAgICAgaWYgKG1pbm9yQXhpc1Bvc2l0aW9ucy5yZXNvbHZlZElu
aXRpYWxQb3NpdGlvbi50b0ludCgpIDwgbWlub3JBeGlzQXV0b1BsYWNlbWVudEN1cnNvcikKICAg
ICAgICAgICAgIG1ham9yQXhpc0F1dG9QbGFjZW1lbnRDdXJzb3IrKzsKIAogICAgICAgICBpZiAo
bWFqb3JBeGlzQXV0b1BsYWNlbWVudEN1cnNvciA8IGVuZE9mTWFqb3JBeGlzKSB7Ci0gICAgICAg
ICAgICBHcmlkSXRlcmF0b3IgaXRlcmF0b3IobV9ncmlkLCBhdXRvUGxhY2VtZW50TWlub3JBeGlz
RGlyZWN0aW9uKCksIG1pbm9yQXhpc1Bvc2l0aW9ucy0+cmVzb2x2ZWRJbml0aWFsUG9zaXRpb24u
dG9JbnQoKSwgbWFqb3JBeGlzQXV0b1BsYWNlbWVudEN1cnNvcik7Ci0gICAgICAgICAgICBlbXB0
eUdyaWRBcmVhID0gaXRlcmF0b3IubmV4dEVtcHR5R3JpZEFyZWEobWlub3JBeGlzUG9zaXRpb25z
LT5pbnRlZ2VyU3BhbigpLCBtYWpvckF4aXNQb3NpdGlvbnMuaW50ZWdlclNwYW4oKSk7CisgICAg
ICAgICAgICBHcmlkSXRlcmF0b3IgaXRlcmF0b3IobV9ncmlkLCBhdXRvUGxhY2VtZW50TWlub3JB
eGlzRGlyZWN0aW9uKCksIG1pbm9yQXhpc1Bvc2l0aW9ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlv
bi50b0ludCgpLCBtYWpvckF4aXNBdXRvUGxhY2VtZW50Q3Vyc29yKTsKKyAgICAgICAgICAgIGVt
cHR5R3JpZEFyZWEgPSBpdGVyYXRvci5uZXh0RW1wdHlHcmlkQXJlYShtaW5vckF4aXNQb3NpdGlv
bnMuaW50ZWdlclNwYW4oKSwgbWFqb3JBeGlzUG9zaXRpb25zLmludGVnZXJTcGFuKCkpOwogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKCFlbXB0eUdyaWRBcmVhKQotICAgICAgICAgICAgZW1wdHlH
cmlkQXJlYSA9IGNyZWF0ZUVtcHR5R3JpZEFyZWFBdFNwZWNpZmllZFBvc2l0aW9uc091dHNpZGVH
cmlkKGdyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWlub3JBeGlzRGlyZWN0aW9uKCksICptaW5vckF4
aXNQb3NpdGlvbnMpOworICAgICAgICAgICAgZW1wdHlHcmlkQXJlYSA9IGNyZWF0ZUVtcHR5R3Jp
ZEFyZWFBdFNwZWNpZmllZFBvc2l0aW9uc091dHNpZGVHcmlkKGdyaWRJdGVtLCBhdXRvUGxhY2Vt
ZW50TWlub3JBeGlzRGlyZWN0aW9uKCksIG1pbm9yQXhpc1Bvc2l0aW9ucyk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgR3JpZFNwYW4gbWlub3JBeGlzUG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9z
aXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbUF1dG9QbGFjZW1lbnRQb3NpdGlvbihzdHls
ZSgpLCBncmlkSXRlbSwgYXV0b1BsYWNlbWVudE1pbm9yQXhpc0RpcmVjdGlvbigpLCBHcmlkUmVz
b2x2ZWRQb3NpdGlvbigwKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9HcmlkUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9H
cmlkUG9zaXRpb24uaAppbmRleCA1YTBhZjllZTQ3NjBiNGNjNDk0MzIxNGNhZGNiZmQ5NTZhNWVi
Y2ZjLi4wNzRhZTY4ZTI4ODdjZDY1NDE5YzliZDkzNDRkM2JmNjRkZWExODZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFBvc2l0aW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRQb3NpdGlvbi5oCkBAIC00NSw2ICs0NSwx
MyBAQCBlbnVtIEdyaWRQb3NpdGlvblR5cGUgewogICAgIE5hbWVkR3JpZEFyZWFQb3NpdGlvbiAv
LyA8aWRlbnQ+CiB9OwogCitlbnVtIEdyaWRQb3NpdGlvblNpZGUgeworICAgIENvbHVtblN0YXJ0
U2lkZSwKKyAgICBDb2x1bW5FbmRTaWRlLAorICAgIFJvd1N0YXJ0U2lkZSwKKyAgICBSb3dFbmRT
aWRlCit9OworCiBjbGFzcyBHcmlkUG9zaXRpb24gewogcHVibGljOgogICAgIEdyaWRQb3NpdGlv
bigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29s
dmVkUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNv
bHZlZFBvc2l0aW9uLmNwcAppbmRleCAzNWY5YmZlNmE5NDNjMWRkOGU2MjY1YTZmNzQwYTk2YjMy
M2Q4NTNkLi5mNmZhNmE0MWU5NDA1ZTAyYTRkZTg2Y2M3YTNkYjVkZjIxM2ZmMGQzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3Np
dGlvbi5jcHAKQEAgLTQ4LDQ5ICs0OCwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTdGFydFNp
ZGUoR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQogICAgIHJldHVybiBzaWRlID09IENvbHVtblN0YXJ0
U2lkZSB8fCBzaWRlID09IFJvd1N0YXJ0U2lkZTsKIH0KIAotdW5zaWduZWQgR3JpZFJlc29sdmVk
UG9zaXRpb246OmV4cGxpY2l0R3JpZENvbHVtbkNvdW50KGNvbnN0IFJlbmRlclN0eWxlJiBncmlk
Q29udGFpbmVyU3R5bGUpCi17Ci0gICAgcmV0dXJuIHN0ZDo6bWluPHVuc2lnbmVkPihncmlkQ29u
dGFpbmVyU3R5bGUuZ3JpZENvbHVtbnMoKS5zaXplKCksIGtHcmlkTWF4VHJhY2tzKTsKLX0KLQot
dW5zaWduZWQgR3JpZFJlc29sdmVkUG9zaXRpb246OmV4cGxpY2l0R3JpZFJvd0NvdW50KGNvbnN0
IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUpCi17Ci0gICAgcmV0dXJuIHN0ZDo6bWlu
PHVuc2lnbmVkPihncmlkQ29udGFpbmVyU3R5bGUuZ3JpZFJvd3MoKS5zaXplKCksIGtHcmlkTWF4
VHJhY2tzKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGV4cGxpY2l0R3JpZFNpemVGb3JTaWRlKGNv
bnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIEdyaWRQb3NpdGlvblNpZGUgc2lk
ZSkKLXsKLSAgICByZXR1cm4gaXNDb2x1bW5TaWRlKHNpZGUpID8gR3JpZFJlc29sdmVkUG9zaXRp
b246OmV4cGxpY2l0R3JpZENvbHVtbkNvdW50KGdyaWRDb250YWluZXJTdHlsZSkgOiBHcmlkUmVz
b2x2ZWRQb3NpdGlvbjo6ZXhwbGljaXRHcmlkUm93Q291bnQoZ3JpZENvbnRhaW5lclN0eWxlKTsK
LX0KLQotR3JpZFNwYW4gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25z
RnJvbUF1dG9QbGFjZW1lbnRQb3NpdGlvbihjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5l
clN0eWxlLCBjb25zdCBSZW5kZXJCb3gmIGdyaWRJdGVtLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rp
b24gZGlyZWN0aW9uLCBjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgcmVzb2x2ZWRJbml0aWFs
UG9zaXRpb24pCi17Ci0gICAgR3JpZFBvc2l0aW9uIGluaXRpYWxQb3NpdGlvbiA9IChkaXJlY3Rp
b24gPT0gRm9yQ29sdW1ucykgPyBncmlkSXRlbS5zdHlsZSgpLmdyaWRJdGVtQ29sdW1uU3RhcnQo
KSA6IGdyaWRJdGVtLnN0eWxlKCkuZ3JpZEl0ZW1Sb3dTdGFydCgpOwotICAgIGNvbnN0IEdyaWRQ
b3NpdGlvblNpZGUgaW5pdGlhbFBvc2l0aW9uU2lkZSA9IChkaXJlY3Rpb24gPT0gRm9yQ29sdW1u
cykgPyBDb2x1bW5TdGFydFNpZGUgOiBSb3dTdGFydFNpZGU7Ci0gICAgR3JpZFBvc2l0aW9uIGZp
bmFsUG9zaXRpb24gPSAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gZ3JpZEl0ZW0uc3R5bGUo
KS5ncmlkSXRlbUNvbHVtbkVuZCgpIDogZ3JpZEl0ZW0uc3R5bGUoKS5ncmlkSXRlbVJvd0VuZCgp
OwotICAgIGNvbnN0IEdyaWRQb3NpdGlvblNpZGUgZmluYWxQb3NpdGlvblNpZGUgPSAoZGlyZWN0
aW9uID09IEZvckNvbHVtbnMpID8gQ29sdW1uRW5kU2lkZSA6IFJvd0VuZFNpZGU7Ci0KLSAgICBh
ZGp1c3RHcmlkUG9zaXRpb25zRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgaW5pdGlhbFBv
c2l0aW9uLCBmaW5hbFBvc2l0aW9uLCBpbml0aWFsUG9zaXRpb25TaWRlLCBmaW5hbFBvc2l0aW9u
U2lkZSk7Ci0KLSAgICAvLyBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgdXNlZCB3aGVuIGJvdGgg
cG9zaXRpb25zIG5lZWQgdG8gYmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgb3Bwb3NpdGUgb25lLgot
ICAgIEFTU0VSVChpbml0aWFsUG9zaXRpb24uc2hvdWxkQmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0
ZVBvc2l0aW9uKCkgJiYgZmluYWxQb3NpdGlvbi5zaG91bGRCZVJlc29sdmVkQWdhaW5zdE9wcG9z
aXRlUG9zaXRpb24oKSk7Ci0KLSAgICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiByZXNvbHZlZEZpbmFs
UG9zaXRpb24gPSByZXNvbHZlZEluaXRpYWxQb3NpdGlvbjsKLQotICAgIGlmIChpbml0aWFsUG9z
aXRpb24uaXNTcGFuKCkpCi0gICAgICAgIHJldHVybiAqcmVzb2x2ZUdyaWRQb3NpdGlvbkFnYWlu
c3RPcHBvc2l0ZVBvc2l0aW9uKGdyaWRDb250YWluZXJTdHlsZSwgcmVzb2x2ZWRJbml0aWFsUG9z
aXRpb24sIGluaXRpYWxQb3NpdGlvbiwgZmluYWxQb3NpdGlvblNpZGUpOwotICAgIGVsc2UgaWYg
KGZpbmFsUG9zaXRpb24uaXNTcGFuKCkpCi0gICAgICAgIHJldHVybiAqcmVzb2x2ZUdyaWRQb3Np
dGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGdyaWRDb250YWluZXJTdHlsZSwgcmVzb2x2ZWRJ
bml0aWFsUG9zaXRpb24sIGZpbmFsUG9zaXRpb24sIGZpbmFsUG9zaXRpb25TaWRlKTsKLQotICAg
IHJldHVybiBHcmlkU3BhbihyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgcmVzb2x2ZWRGaW5hbFBv
c2l0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSBjb25zdCBOYW1lZEdyaWRMaW5lc01hcCYgZ3Jp
ZExpbmVzRm9yU2lkZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEdyaWRQb3NpdGlvblNpZGUg
c2lkZSkKK2NvbnN0IE5hbWVkR3JpZExpbmVzTWFwJiBncmlkTGluZXNGb3JTaWRlKGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQogewogICAgIHJldHVybiBp
c0NvbHVtblNpZGUoc2lkZSkgPyBzdHlsZS5uYW1lZEdyaWRDb2x1bW5MaW5lcygpIDogc3R5bGUu
bmFtZWRHcmlkUm93TGluZXMoKTsKIH0KIAotc3RhdGljIGlubGluZSBjb25zdCBTdHJpbmcgaW1w
bGljaXROYW1lZEdyaWRMaW5lRm9yU2lkZShjb25zdCBTdHJpbmcmIGxpbmVOYW1lLCBHcmlkUG9z
aXRpb25TaWRlIHNpZGUpCitzdGF0aWMgY29uc3QgU3RyaW5nIGltcGxpY2l0TmFtZWRHcmlkTGlu
ZUZvclNpZGUoY29uc3QgU3RyaW5nJiBsaW5lTmFtZSwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQog
ewogICAgIHJldHVybiBsaW5lTmFtZSArIChpc1N0YXJ0U2lkZShzaWRlKSA/ICItc3RhcnQiIDog
Ii1lbmQiKTsKIH0KQEAgLTEwMSw2NyArNjQsNjYgQEAgc3RhdGljIGJvb2wgaXNOb25FeGlzdGVu
dE5hbWVkTGluZU9yQXJlYShjb25zdCBTdHJpbmcmIGxpbmVOYW1lLCBjb25zdCBSZW5kZXJTdHkK
ICAgICByZXR1cm4gIWdyaWRMaW5lTmFtZXMuY29udGFpbnMoaW1wbGljaXROYW1lZEdyaWRMaW5l
Rm9yU2lkZShsaW5lTmFtZSwgc2lkZSkpICYmICFncmlkTGluZU5hbWVzLmNvbnRhaW5zKGxpbmVO
YW1lKTsKIH0KIAotdm9pZCBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6YWRqdXN0R3JpZFBvc2l0aW9u
c0Zyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBHcmlkUG9z
aXRpb24mIGluaXRpYWxQb3NpdGlvbiwgR3JpZFBvc2l0aW9uJiBmaW5hbFBvc2l0aW9uLCBHcmlk
UG9zaXRpb25TaWRlIGluaXRpYWxQb3NpdGlvblNpZGUsIEdyaWRQb3NpdGlvblNpZGUgZmluYWxQ
b3NpdGlvblNpZGUpCitib29sIEdyaWRVbnJlc29sdmVkU3Bhbjo6cmVxdWlyZXNBdXRvUGxhY2Vt
ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbml0aWFsUG9zaXRpb24uc2hvdWxkQmVSZXNv
bHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkgJiYgbV9maW5hbFBvc2l0aW9uLnNob3VsZEJl
UmVzb2x2ZWRBZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbigpOworfQorCit2b2lkIEdyaWRVbnJlc29s
dmVkU3Bhbjo6YWRqdXN0R3JpZFBvc2l0aW9uc0Zyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYg
Z3JpZENvbnRhaW5lclN0eWxlKQogewotICAgIEFTU0VSVChpc0NvbHVtblNpZGUoaW5pdGlhbFBv
c2l0aW9uU2lkZSkgPT0gaXNDb2x1bW5TaWRlKGZpbmFsUG9zaXRpb25TaWRlKSk7CisgICAgQVNT
RVJUKGlzQ29sdW1uU2lkZShtX2luaXRpYWxQb3NpdGlvblNpZGUpID09IGlzQ29sdW1uU2lkZSht
X2ZpbmFsUG9zaXRpb25TaWRlKSk7CiAKICAgICAvLyBXZSBtdXN0IGhhbmRsZSB0aGUgcGxhY2Vt
ZW50IGVycm9yIGhhbmRsaW5nIGNvZGUgaGVyZSBpbnN0ZWFkIG9mIGluIHRoZSBTdHlsZUFkanVz
dGVyIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0bwogICAgIC8vIG92ZXJ3cml0ZSB0aGUgc3BlY2lm
aWVkIHZhbHVlcy4KLSAgICBpZiAoaW5pdGlhbFBvc2l0aW9uLmlzU3BhbigpICYmIGZpbmFsUG9z
aXRpb24uaXNTcGFuKCkpCi0gICAgICAgIGZpbmFsUG9zaXRpb24uc2V0QXV0b1Bvc2l0aW9uKCk7
CisgICAgaWYgKG1faW5pdGlhbFBvc2l0aW9uLmlzU3BhbigpICYmIG1fZmluYWxQb3NpdGlvbi5p
c1NwYW4oKSkKKyAgICAgICAgbV9maW5hbFBvc2l0aW9uLnNldEF1dG9Qb3NpdGlvbigpOwogCiAg
ICAgLy8gVHJ5IHRvIGVhcmx5IGRldGVjdCB0aGUgY2FzZSBvZiBub24gZXhpc3RpbmcgbmFtZWQg
Z3JpZCBsaW5lcy4gVGhpcyB3YXkgd2UgY291bGQgYXNzdW1lIGxhdGVyIHRoYXQKICAgICAvLyBH
cmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaXNQb3NpdGlvbkZyb21TdHlsZSgpIHdvbid0
IHJlcXVpcmUgdGhlIGF1dG9wbGFjZW1lbnQgdG8gcnVuLCBpLmUuLCBpdCdsbCBhbHdheXMgcmV0
dXJuIGEKICAgICAvLyB2YWxpZCByZXNvbHZlZCBwb3NpdGlvbi4KLSAgICBpZiAoaW5pdGlhbFBv
c2l0aW9uLmlzTmFtZWRHcmlkQXJlYSgpICYmIGlzTm9uRXhpc3RlbnROYW1lZExpbmVPckFyZWEo
aW5pdGlhbFBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKSwgZ3JpZENvbnRhaW5lclN0eWxlLCBpbml0
aWFsUG9zaXRpb25TaWRlKSkKLSAgICAgICAgaW5pdGlhbFBvc2l0aW9uLnNldEF1dG9Qb3NpdGlv
bigpOworICAgIGlmIChtX2luaXRpYWxQb3NpdGlvbi5pc05hbWVkR3JpZEFyZWEoKSAmJiBpc05v
bkV4aXN0ZW50TmFtZWRMaW5lT3JBcmVhKG1faW5pdGlhbFBvc2l0aW9uLm5hbWVkR3JpZExpbmUo
KSwgZ3JpZENvbnRhaW5lclN0eWxlLCBtX2luaXRpYWxQb3NpdGlvblNpZGUpKQorICAgICAgICBt
X2luaXRpYWxQb3NpdGlvbi5zZXRBdXRvUG9zaXRpb24oKTsKIAotICAgIGlmIChmaW5hbFBvc2l0
aW9uLmlzTmFtZWRHcmlkQXJlYSgpICYmIGlzTm9uRXhpc3RlbnROYW1lZExpbmVPckFyZWEoZmlu
YWxQb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCksIGdyaWRDb250YWluZXJTdHlsZSwgZmluYWxQb3Np
dGlvblNpZGUpKQotICAgICAgICBmaW5hbFBvc2l0aW9uLnNldEF1dG9Qb3NpdGlvbigpOworICAg
IGlmIChtX2ZpbmFsUG9zaXRpb24uaXNOYW1lZEdyaWRBcmVhKCkgJiYgaXNOb25FeGlzdGVudE5h
bWVkTGluZU9yQXJlYShtX2ZpbmFsUG9zaXRpb24ubmFtZWRHcmlkTGluZSgpLCBncmlkQ29udGFp
bmVyU3R5bGUsIG1fZmluYWxQb3NpdGlvblNpZGUpKQorICAgICAgICBtX2ZpbmFsUG9zaXRpb24u
c2V0QXV0b1Bvc2l0aW9uKCk7CiAKICAgICAvLyBJZiB0aGUgZ3JpZCBpdGVtIGhhcyBhbiBhdXRv
bWF0aWMgcG9zaXRpb24gYW5kIGEgZ3JpZCBzcGFuIGZvciBhIG5hbWVkIGxpbmUgaW4gYSBnaXZl
biBkaW1lbnNpb24sIGluc3RlYWQgdHJlYXQgdGhlIGdyaWQgc3BhbiBhcyBvbmUuCi0gICAgaWYg
KGluaXRpYWxQb3NpdGlvbi5pc0F1dG8oKSAmJiBmaW5hbFBvc2l0aW9uLmlzU3BhbigpICYmICFm
aW5hbFBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKS5pc051bGwoKSkKLSAgICAgICAgZmluYWxQb3Np
dGlvbi5zZXRTcGFuUG9zaXRpb24oMSwgU3RyaW5nKCkpOwotICAgIGlmIChmaW5hbFBvc2l0aW9u
LmlzQXV0bygpICYmIGluaXRpYWxQb3NpdGlvbi5pc1NwYW4oKSAmJiAhaW5pdGlhbFBvc2l0aW9u
Lm5hbWVkR3JpZExpbmUoKS5pc051bGwoKSkKLSAgICAgICAgaW5pdGlhbFBvc2l0aW9uLnNldFNw
YW5Qb3NpdGlvbigxLCBTdHJpbmcoKSk7CisgICAgaWYgKG1faW5pdGlhbFBvc2l0aW9uLmlzQXV0
bygpICYmIG1fZmluYWxQb3NpdGlvbi5pc1NwYW4oKSAmJiAhbV9maW5hbFBvc2l0aW9uLm5hbWVk
R3JpZExpbmUoKS5pc051bGwoKSkKKyAgICAgICAgbV9maW5hbFBvc2l0aW9uLnNldFNwYW5Qb3Np
dGlvbigxLCBTdHJpbmcoKSk7CisgICAgaWYgKG1fZmluYWxQb3NpdGlvbi5pc0F1dG8oKSAmJiBt
X2luaXRpYWxQb3NpdGlvbi5pc1NwYW4oKSAmJiAhbV9pbml0aWFsUG9zaXRpb24ubmFtZWRHcmlk
TGluZSgpLmlzTnVsbCgpKQorICAgICAgICBtX2luaXRpYWxQb3NpdGlvbi5zZXRTcGFuUG9zaXRp
b24oMSwgU3RyaW5nKCkpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8R3JpZFNwYW4+IEdyaWRSZXNv
bHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZShjb25zdCBSZW5kZXJT
dHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBSZW5kZXJCb3gmIGdyaWRJdGVtLCBHcmlk
VHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQordW5zaWduZWQgR3JpZFJlc29sdmVkUG9z
aXRpb246OmV4cGxpY2l0R3JpZENvbHVtbkNvdW50KGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29u
dGFpbmVyU3R5bGUpCiB7Ci0gICAgR3JpZFBvc2l0aW9uIGluaXRpYWxQb3NpdGlvbiA9IChkaXJl
Y3Rpb24gPT0gRm9yQ29sdW1ucykgPyBncmlkSXRlbS5zdHlsZSgpLmdyaWRJdGVtQ29sdW1uU3Rh
cnQoKSA6IGdyaWRJdGVtLnN0eWxlKCkuZ3JpZEl0ZW1Sb3dTdGFydCgpOwotICAgIGNvbnN0IEdy
aWRQb3NpdGlvblNpZGUgaW5pdGlhbFBvc2l0aW9uU2lkZSA9IChkaXJlY3Rpb24gPT0gRm9yQ29s
dW1ucykgPyBDb2x1bW5TdGFydFNpZGUgOiBSb3dTdGFydFNpZGU7Ci0gICAgR3JpZFBvc2l0aW9u
IGZpbmFsUG9zaXRpb24gPSAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gZ3JpZEl0ZW0uc3R5
bGUoKS5ncmlkSXRlbUNvbHVtbkVuZCgpIDogZ3JpZEl0ZW0uc3R5bGUoKS5ncmlkSXRlbVJvd0Vu
ZCgpOwotICAgIGNvbnN0IEdyaWRQb3NpdGlvblNpZGUgZmluYWxQb3NpdGlvblNpZGUgPSAoZGly
ZWN0aW9uID09IEZvckNvbHVtbnMpID8gQ29sdW1uRW5kU2lkZSA6IFJvd0VuZFNpZGU7Ci0KLSAg
ICBhZGp1c3RHcmlkUG9zaXRpb25zRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgaW5pdGlh
bFBvc2l0aW9uLCBmaW5hbFBvc2l0aW9uLCBpbml0aWFsUG9zaXRpb25TaWRlLCBmaW5hbFBvc2l0
aW9uU2lkZSk7Ci0KLSAgICAvLyBXZSBjYW4ndCBnZXQgb3VyIGdyaWQgcG9zaXRpb25zIHdpdGhv
dXQgcnVubmluZyB0aGUgYXV0byBwbGFjZW1lbnQgYWxnb3JpdGhtLgotICAgIGlmIChpbml0aWFs
UG9zaXRpb24uc2hvdWxkQmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkgJiYgZmlu
YWxQb3NpdGlvbi5zaG91bGRCZVJlc29sdmVkQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHN0ZDo6bWluPHVuc2lnbmVkPihncmlk
Q29udGFpbmVyU3R5bGUuZ3JpZENvbHVtbnMoKS5zaXplKCksIGtHcmlkTWF4VHJhY2tzKTsKK30K
IAotICAgIGlmIChpbml0aWFsUG9zaXRpb24uc2hvdWxkQmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0
ZVBvc2l0aW9uKCkpIHsKLSAgICAgICAgLy8gSW5mZXIgdGhlIHBvc2l0aW9uIGZyb20gdGhlIGZp
bmFsIHBvc2l0aW9uICgnYXV0byAvIDEnIG9yICdzcGFuIDIgLyAzJyBjYXNlKS4KLSAgICAgICAg
Y29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24gZmluYWxSZXNvbHZlZFBvc2l0aW9uID0gcmVzb2x2
ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFpbmVyU3R5bGUsIGZpbmFsUG9zaXRpb24s
IGZpbmFsUG9zaXRpb25TaWRlKTsKLSAgICAgICAgcmV0dXJuIHJlc29sdmVHcmlkUG9zaXRpb25B
Z2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihncmlkQ29udGFpbmVyU3R5bGUsIGZpbmFsUmVzb2x2ZWRQ
b3NpdGlvbiwgaW5pdGlhbFBvc2l0aW9uLCBpbml0aWFsUG9zaXRpb25TaWRlKTsKLSAgICB9Cit1
bnNpZ25lZCBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6ZXhwbGljaXRHcmlkUm93Q291bnQoY29uc3Qg
UmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSkKK3sKKyAgICByZXR1cm4gc3RkOjptaW48
dW5zaWduZWQ+KGdyaWRDb250YWluZXJTdHlsZS5ncmlkUm93cygpLnNpemUoKSwga0dyaWRNYXhU
cmFja3MpOworfQogCi0gICAgaWYgKGZpbmFsUG9zaXRpb24uc2hvdWxkQmVSZXNvbHZlZEFnYWlu
c3RPcHBvc2l0ZVBvc2l0aW9uKCkpIHsKLSAgICAgICAgLy8gSW5mZXIgb3VyIHBvc2l0aW9uIGZy
b20gdGhlIGluaXRpYWwgcG9zaXRpb24gKCcxIC8gYXV0bycgb3IgJzMgLyBzcGFuIDInIGNhc2Up
LgotICAgICAgICBjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiBpbml0aWFsUmVzb2x2ZWRQb3Np
dGlvbiA9IHJlc29sdmVHcmlkUG9zaXRpb25Gcm9tU3R5bGUoZ3JpZENvbnRhaW5lclN0eWxlLCBp
bml0aWFsUG9zaXRpb24sIGluaXRpYWxQb3NpdGlvblNpZGUpOwotICAgICAgICByZXR1cm4gcmVz
b2x2ZUdyaWRQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGdyaWRDb250YWluZXJTdHls
ZSwgaW5pdGlhbFJlc29sdmVkUG9zaXRpb24sIGZpbmFsUG9zaXRpb24sIGZpbmFsUG9zaXRpb25T
aWRlKTsKLSAgICB9CitzdGF0aWMgdW5zaWduZWQgZXhwbGljaXRHcmlkU2l6ZUZvclNpZGUoY29u
c3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgR3JpZFBvc2l0aW9uU2lkZSBzaWRl
KQoreworICAgIHJldHVybiBpc0NvbHVtblNpZGUoc2lkZSkgPyBHcmlkUmVzb2x2ZWRQb3NpdGlv
bjo6ZXhwbGljaXRHcmlkQ29sdW1uQ291bnQoZ3JpZENvbnRhaW5lclN0eWxlKSA6IEdyaWRSZXNv
bHZlZFBvc2l0aW9uOjpleHBsaWNpdEdyaWRSb3dDb3VudChncmlkQ29udGFpbmVyU3R5bGUpOwor
fQogCi0gICAgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZWRJbml0aWFsUG9zaXRpb24gPSBy
ZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgaW5pdGlhbFBv
c2l0aW9uLCBpbml0aWFsUG9zaXRpb25TaWRlKTsKLSAgICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiBy
ZXNvbHZlZEZpbmFsUG9zaXRpb24gPSByZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKGdyaWRD
b250YWluZXJTdHlsZSwgZmluYWxQb3NpdGlvbiwgZmluYWxQb3NpdGlvblNpZGUpOworc3RhdGlj
IEdyaWRSZXNvbHZlZFBvc2l0aW9uIGFkanVzdEdyaWRQb3NpdGlvbkZvclJvd0VuZENvbHVtbkVu
ZFNpZGUodW5zaWduZWQgcmVzb2x2ZWRQb3NpdGlvbikKK3sKKyAgICByZXR1cm4gcmVzb2x2ZWRQ
b3NpdGlvbiA/IEdyaWRSZXNvbHZlZFBvc2l0aW9uKHJlc29sdmVkUG9zaXRpb24gLSAxKSA6IEdy
aWRSZXNvbHZlZFBvc2l0aW9uKDApOworfQogCi0gICAgLy8gSWYgJ2dyaWQtcm93LWVuZCcgc3Bl
Y2lmaWVzIGEgbGluZSBhdCBvciBiZWZvcmUgdGhhdCBzcGVjaWZpZWQgYnkgJ2dyaWQtcm93LXN0
YXJ0JywgaXQgY29tcHV0ZXMgdG8gJ3NwYW4gMScuCi0gICAgaWYgKHJlc29sdmVkRmluYWxQb3Np
dGlvbiA8IHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKQotICAgICAgICByZXNvbHZlZEZpbmFsUG9z
aXRpb24gPSByZXNvbHZlZEluaXRpYWxQb3NpdGlvbjsKK3N0YXRpYyBHcmlkUmVzb2x2ZWRQb3Np
dGlvbiBhZGp1c3RHcmlkUG9zaXRpb25Gb3JTaWRlKHVuc2lnbmVkIHJlc29sdmVkUG9zaXRpb24s
IEdyaWRQb3NpdGlvblNpZGUgc2lkZSkKK3sKKyAgICAvLyBBbiBpdGVtIGZpbmlzaGluZyBvbiB0
aGUgTi10aCBsaW5lIGJlbG9uZ3MgdG8gdGhlIE4tMS10aCBjZWxsLgorICAgIGlmIChzaWRlID09
IENvbHVtbkVuZFNpZGUgfHwgc2lkZSA9PSBSb3dFbmRTaWRlKQorICAgICAgICByZXR1cm4gYWRq
dXN0R3JpZFBvc2l0aW9uRm9yUm93RW5kQ29sdW1uRW5kU2lkZShyZXNvbHZlZFBvc2l0aW9uKTsK
IAotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEdyaWRTcGFuPihyZXNvbHZlZEluaXRpYWxQ
b3NpdGlvbiwgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uKTsKKyAgICByZXR1cm4gR3JpZFJlc29sdmVk
UG9zaXRpb24ocmVzb2x2ZWRQb3NpdGlvbik7CiB9CiAKLUdyaWRSZXNvbHZlZFBvc2l0aW9uIEdy
aWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0aW9uRnJvbVN0eWxl
KGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIGNvbnN0IEdyaWRQb3NpdGlv
biYgcG9zaXRpb24sIEdyaWRQb3NpdGlvblNpZGUgc2lkZSkKK3N0YXRpYyBHcmlkUmVzb2x2ZWRQ
b3NpdGlvbiByZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0aW9uRnJvbVN0eWxlKGNvbnN0IFJlbmRl
clN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIGNvbnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24s
IEdyaWRQb3NpdGlvblNpZGUgc2lkZSkKIHsKICAgICBBU1NFUlQoIXBvc2l0aW9uLm5hbWVkR3Jp
ZExpbmUoKS5pc051bGwoKSk7CiAKQEAgLTE3MSw3ICsxMzMsNyBAQCBHcmlkUmVzb2x2ZWRQb3Np
dGlvbiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkZy
b21TdHlsZQogICAgICAgICBpZiAocG9zaXRpb24uaXNQb3NpdGl2ZSgpKQogICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxhc3RMaW5lID0gZXhwbGljaXRHcmlk
U2l6ZUZvclNpZGUoZ3JpZENvbnRhaW5lclN0eWxlLCBzaWRlKTsKLSAgICAgICAgcmV0dXJuIEdy
aWRSZXNvbHZlZFBvc2l0aW9uOjphZGp1c3RHcmlkUG9zaXRpb25Gb3JTaWRlKGxhc3RMaW5lLCBz
aWRlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdEdyaWRQb3NpdGlvbkZvclNpZGUobGFzdExpbmUs
IHNpZGUpOwogICAgIH0KIAogICAgIHVuc2lnbmVkIG5hbWVkR3JpZExpbmVJbmRleDsKQEAgLTE3
OSwxMCArMTQxLDExMCBAQCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiBHcmlkUmVzb2x2ZWRQb3NpdGlv
bjo6cmVzb2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkZyb21TdHlsZQogICAgICAgICBuYW1lZEdy
aWRMaW5lSW5kZXggPSBzdGQ6Om1pbjx1bnNpZ25lZD4ocG9zaXRpb24uaW50ZWdlclBvc2l0aW9u
KCksIGl0LT52YWx1ZS5zaXplKCkpIC0gMTsKICAgICBlbHNlCiAgICAgICAgIG5hbWVkR3JpZExp
bmVJbmRleCA9IHN0ZDo6bWF4PGludD4oMCwgaXQtPnZhbHVlLnNpemUoKSAtIGFicyhwb3NpdGlv
bi5pbnRlZ2VyUG9zaXRpb24oKSkpOwotICAgIHJldHVybiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6
YWRqdXN0R3JpZFBvc2l0aW9uRm9yU2lkZShpdC0+dmFsdWVbbmFtZWRHcmlkTGluZUluZGV4XSwg
c2lkZSk7CisgICAgcmV0dXJuIGFkanVzdEdyaWRQb3NpdGlvbkZvclNpZGUoaXQtPnZhbHVlW25h
bWVkR3JpZExpbmVJbmRleF0sIHNpZGUpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGZp
cnN0TmFtZWRHcmlkTGluZUJlZm9yZVBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uLCBjb25zdCBW
ZWN0b3I8dW5zaWduZWQ+JiBncmlkTGluZXMpCit7CisgICAgLy8gVGhlIGdyaWQgbGluZSBpbmVx
dWFsaXR5IG5lZWRzIHRvIGJlIHN0cmljdCAod2hpY2ggZG9lc24ndCBtYXRjaCB0aGUgYWZ0ZXIg
LyBlbmQgY2FzZSkgYmVjYXVzZSB8cG9zaXRpb258IGlzCisgICAgLy8gYWxyZWFkeSBjb252ZXJ0
ZWQgdG8gYW4gaW5kZXggaW4gb3VyIGdyaWQgcmVwcmVzZW50YXRpb24gKGllIG9uZSB3YXMgcmVt
b3ZlZCBmcm9tIHRoZSBncmlkIGxpbmUgdG8gYWNjb3VudCBmb3IKKyAgICAvLyB0aGUgc2lkZSku
CisgICAgdW5zaWduZWQgZmlyc3RMaW5lQmVmb3JlUG9zaXRpb25JbmRleCA9IDA7CisgICAgYXV0
byBmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiA9IHN0ZDo6bG93ZXJfYm91bmQoZ3JpZExpbmVzLmJl
Z2luKCksIGdyaWRMaW5lcy5lbmQoKSwgcG9zaXRpb24pOworICAgIGlmIChmaXJzdExpbmVCZWZv
cmVQb3NpdGlvbiAhPSBncmlkTGluZXMuZW5kKCkpIHsKKyAgICAgICAgaWYgKCpmaXJzdExpbmVC
ZWZvcmVQb3NpdGlvbiA+IHBvc2l0aW9uICYmIGZpcnN0TGluZUJlZm9yZVBvc2l0aW9uICE9IGdy
aWRMaW5lcy5iZWdpbigpKQorICAgICAgICAgICAgLS1maXJzdExpbmVCZWZvcmVQb3NpdGlvbjsK
KworICAgICAgICBmaXJzdExpbmVCZWZvcmVQb3NpdGlvbkluZGV4ID0gZmlyc3RMaW5lQmVmb3Jl
UG9zaXRpb24gLSBncmlkTGluZXMuYmVnaW4oKTsKKyAgICB9CisgICAgcmV0dXJuIGZpcnN0TGlu
ZUJlZm9yZVBvc2l0aW9uSW5kZXg7Cit9CisKK3N0YXRpYyBHcmlkU3BhbiByZXNvbHZlUm93U3Rh
cnRDb2x1bW5TdGFydE5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9u
KGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIGNv
bnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIGdyaWRM
aW5lcykKK3sKKyAgICB1bnNpZ25lZCBncmlkTGluZUluZGV4ID0gc3RkOjptYXg8aW50PigwLCBm
aXJzdE5hbWVkR3JpZExpbmVCZWZvcmVQb3NpdGlvbihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24u
dG9JbnQoKSwgZ3JpZExpbmVzKSAtIHBvc2l0aW9uLnNwYW5Qb3NpdGlvbigpICsgMSk7CisgICAg
R3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZWRHcmlkTGluZVBvc2l0aW9uID0gR3JpZFJlc29s
dmVkUG9zaXRpb24oZ3JpZExpbmVzW2dyaWRMaW5lSW5kZXhdKTsKKyAgICByZXR1cm4gR3JpZFNw
YW4oc3RkOjptaW48R3JpZFJlc29sdmVkUG9zaXRpb24+KHJlc29sdmVkR3JpZExpbmVQb3NpdGlv
biwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKSwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsK
K30KKworc3RhdGljIEdyaWRTcGFuIHJlc29sdmVSb3dFbmRDb2x1bW5FbmROYW1lZEdyaWRMaW5l
UG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlv
biYgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9u
LCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBncmlkTGluZXMpCit7CisgICAgQVNTRVJUKGdyaWRM
aW5lcy5zaXplKCkpOworICAgIHVuc2lnbmVkIGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlv
bkluZGV4ID0gZ3JpZExpbmVzLnNpemUoKSAtIDE7CisgICAgY29uc3QgdW5zaWduZWQqIGZpcnN0
TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbiA9IHN0ZDo6dXBwZXJfYm91bmQoZ3JpZExpbmVzLmJl
Z2luKCksIGdyaWRMaW5lcy5lbmQoKSwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsKKyAgICBp
ZiAoZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uICE9IGdyaWRMaW5lcy5lbmQoKSkKKyAg
ICAgICAgZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uSW5kZXggPSBmaXJzdExpbmVBZnRl
ck9wcG9zaXRlUG9zaXRpb24gLSBncmlkTGluZXMuYmVnaW4oKTsKKworICAgIHVuc2lnbmVkIGdy
aWRMaW5lSW5kZXggPSBzdGQ6Om1pbjx1bnNpZ25lZD4oZ3JpZExpbmVzLnNpemUoKSAtIDEsIGZp
cnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbkluZGV4ICsgcG9zaXRpb24uc3BhblBvc2l0aW9u
KCkgLSAxKTsKKyAgICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiByZXNvbHZlZEdyaWRMaW5lUG9zaXRp
b24gPSBhZGp1c3RHcmlkUG9zaXRpb25Gb3JSb3dFbmRDb2x1bW5FbmRTaWRlKGdyaWRMaW5lc1tn
cmlkTGluZUluZGV4XSk7CisgICAgaWYgKHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiA8IHJlc29s
dmVkT3Bwb3NpdGVQb3NpdGlvbikKKyAgICAgICAgcmVzb2x2ZWRHcmlkTGluZVBvc2l0aW9uID0g
cmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uOworICAgIHJldHVybiBHcmlkU3BhbihyZXNvbHZlZE9w
cG9zaXRlUG9zaXRpb24sIHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbik7Cit9CisKK3N0YXRpYyBH
cmlkU3BhbiByZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRp
b24oY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgY29uc3QgR3JpZFJlc29s
dmVkUG9zaXRpb24mIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgY29uc3QgR3JpZFBvc2l0aW9u
JiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQoreworICAgIEFTU0VSVChwb3NpdGlv
bi5pc1NwYW4oKSk7CisgICAgQVNTRVJUKCFwb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCkuaXNOdWxs
KCkpOworICAgIC8vIE5lZ2F0aXZlIHBvc2l0aW9ucyBhcmUgbm90IGFsbG93ZWQgcGVyIHRoZSBz
cGVjaWZpY2F0aW9uIGFuZCBzaG91bGQgaGF2ZSBiZWVuIGhhbmRsZWQgZHVyaW5nIHBhcnNpbmcu
CisgICAgQVNTRVJUKHBvc2l0aW9uLnNwYW5Qb3NpdGlvbigpID4gMCk7CisKKyAgICBjb25zdCBO
YW1lZEdyaWRMaW5lc01hcCYgZ3JpZExpbmVzTmFtZXMgPSBpc0NvbHVtblNpZGUoc2lkZSkgPyBn
cmlkQ29udGFpbmVyU3R5bGUubmFtZWRHcmlkQ29sdW1uTGluZXMoKSA6IGdyaWRDb250YWluZXJT
dHlsZS5uYW1lZEdyaWRSb3dMaW5lcygpOworICAgIE5hbWVkR3JpZExpbmVzTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGdyaWRMaW5lc05hbWVzLmZpbmQocG9zaXRpb24ubmFtZWRHcmlkTGluZSgp
KTsKKworICAgIC8vIElmIHRoZXJlIGlzIG5vIG5hbWVkIGdyaWQgbGluZSBvZiB0aGF0IG5hbWUs
IHdlIHJlc29sdmUgdGhlIHBvc2l0aW9uIHRvICdhdXRvJyAod2hpY2ggaXMgZXF1aXZhbGVudCB0
byAnc3BhbiAxJyBpbiB0aGlzIGNhc2UpLgorICAgIC8vIFNlZSBodHRwOi8vbGlzdHMudzMub3Jn
L0FyY2hpdmVzL1B1YmxpYy93d3ctc3R5bGUvMjAxM0p1bi8wMzk0Lmh0bWwuCisgICAgaWYgKGl0
ID09IGdyaWRMaW5lc05hbWVzLmVuZCgpKQorICAgICAgICByZXR1cm4gR3JpZFNwYW4ocmVzb2x2
ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOworCisgICAgaWYg
KHNpZGUgPT0gUm93U3RhcnRTaWRlIHx8IHNpZGUgPT0gQ29sdW1uU3RhcnRTaWRlKQorICAgICAg
ICByZXR1cm4gcmVzb2x2ZVJvd1N0YXJ0Q29sdW1uU3RhcnROYW1lZEdyaWRMaW5lUG9zaXRpb25B
Z2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHBvc2l0aW9u
LCBpdC0+dmFsdWUpOworCisgICAgcmV0dXJuIHJlc29sdmVSb3dFbmRDb2x1bW5FbmROYW1lZEdy
aWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihyZXNvbHZlZE9wcG9zaXRlUG9z
aXRpb24sIHBvc2l0aW9uLCBpdC0+dmFsdWUpOworfQorCitzdGF0aWMgR3JpZFNwYW4gcmVzb2x2
ZUdyaWRQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiBn
cmlkQ29udGFpbmVyU3R5bGUsIGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZlZE9w
cG9zaXRlUG9zaXRpb24sIGNvbnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIEdyaWRQb3NpdGlv
blNpZGUgc2lkZSkKK3sKKyAgICBpZiAocG9zaXRpb24uaXNBdXRvKCkpCisgICAgICAgIHJldHVy
biBHcmlkU3BhbihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHJlc29sdmVkT3Bwb3NpdGVQb3Np
dGlvbik7CisKKyAgICBBU1NFUlQocG9zaXRpb24uaXNTcGFuKCkpOworICAgIEFTU0VSVChwb3Np
dGlvbi5zcGFuUG9zaXRpb24oKSA+IDApOworCisgICAgaWYgKCFwb3NpdGlvbi5uYW1lZEdyaWRM
aW5lKCkuaXNOdWxsKCkpIHsKKyAgICAgICAgLy8gc3BhbiAyICdjJyAtPiB3ZSBuZWVkIHRvIGZp
bmQgdGhlIGFwcHJvcHJpYXRlIGdyaWQgbGluZSBiZWZvcmUgLyBhZnRlciBvdXIgb3Bwb3NpdGUg
cG9zaXRpb24uCisgICAgICAgIHJldHVybiByZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0aW9uQWdh
aW5zdE9wcG9zaXRlUG9zaXRpb24oZ3JpZENvbnRhaW5lclN0eWxlLCByZXNvbHZlZE9wcG9zaXRl
UG9zaXRpb24sIHBvc2l0aW9uLCBzaWRlKTsKKyAgICB9CisKKyAgICAvLyAnc3BhbiAxJyBpcyBj
b250YWluZWQgaW5zaWRlIGEgc2luZ2xlIGdyaWQgdHJhY2sgcmVnYXJkbGVzcyBvZiB0aGUgZGly
ZWN0aW9uLgorICAgIC8vIFRoYXQncyB3aHkgdGhlIENTUyBzcGFuIHZhbHVlIGlzIG9uZSBtb3Jl
IHRoYW4gdGhlIG9mZnNldCB3ZSBhcHBseS4KKyAgICB1bnNpZ25lZCBwb3NpdGlvbk9mZnNldCA9
IHBvc2l0aW9uLnNwYW5Qb3NpdGlvbigpIC0gMTsKKyAgICBpZiAoaXNTdGFydFNpZGUoc2lkZSkp
IHsKKyAgICAgICAgdW5zaWduZWQgaW5pdGlhbFJlc29sdmVkUG9zaXRpb24gPSBzdGQ6Om1heDxp
bnQ+KDAsIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbi50b0ludCgpIC0gcG9zaXRpb25PZmZzZXQp
OworICAgICAgICByZXR1cm4gR3JpZFNwYW4oaW5pdGlhbFJlc29sdmVkUG9zaXRpb24sIHJlc29s
dmVkT3Bwb3NpdGVQb3NpdGlvbik7CisgICAgfQorCisgICAgcmV0dXJuIEdyaWRTcGFuKHJlc29s
dmVkT3Bwb3NpdGVQb3NpdGlvbiwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLnRvSW50KCkgKyBw
b3NpdGlvbk9mZnNldCk7Cit9CisKK0dyaWRTcGFuIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNv
bHZlR3JpZFBvc2l0aW9uc0Zyb21BdXRvUGxhY2VtZW50UG9zaXRpb24oY29uc3QgUmVuZGVyU3R5
bGUmIGdyaWRDb250YWluZXJTdHlsZSwgY29uc3QgUmVuZGVyQm94JiBncmlkSXRlbSwgR3JpZFRy
YWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24m
IHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKQoreworICAgIEdyaWRVbnJlc29sdmVkU3BhbiB1bnJl
c29sdmVkU3BhbiA9IHVucmVzb2x2ZWRTcGFuRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwg
Z3JpZEl0ZW0sIGRpcmVjdGlvbik7CisKKyAgICAvLyBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUg
dXNlZCB3aGVuIGJvdGggcG9zaXRpb25zIG5lZWQgdG8gYmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUg
b3Bwb3NpdGUgb25lLgorICAgIEFTU0VSVCh1bnJlc29sdmVkU3Bhbi5yZXF1aXJlc0F1dG9QbGFj
ZW1lbnQoKSk7CisKKyAgICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiByZXNvbHZlZEZpbmFsUG9zaXRp
b24gPSByZXNvbHZlZEluaXRpYWxQb3NpdGlvbjsKKworICAgIGlmICh1bnJlc29sdmVkU3Bhbi5p
bml0aWFsUG9zaXRpb24oKS5pc1NwYW4oKSkKKyAgICAgICAgcmV0dXJuIHJlc29sdmVHcmlkUG9z
aXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihncmlkQ29udGFpbmVyU3R5bGUsIHJlc29sdmVk
SW5pdGlhbFBvc2l0aW9uLCB1bnJlc29sdmVkU3Bhbi5pbml0aWFsUG9zaXRpb24oKSwgdW5yZXNv
bHZlZFNwYW4uZmluYWxQb3NpdGlvblNpZGUoKSk7CisgICAgaWYgKHVucmVzb2x2ZWRTcGFuLmZp
bmFsUG9zaXRpb24oKS5pc1NwYW4oKSkKKyAgICAgICAgcmV0dXJuIHJlc29sdmVHcmlkUG9zaXRp
b25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihncmlkQ29udGFpbmVyU3R5bGUsIHJlc29sdmVkSW5p
dGlhbFBvc2l0aW9uLCB1bnJlc29sdmVkU3Bhbi5maW5hbFBvc2l0aW9uKCksIHVucmVzb2x2ZWRT
cGFuLmZpbmFsUG9zaXRpb25TaWRlKCkpOworCisgICAgcmV0dXJuIEdyaWRTcGFuKHJlc29sdmVk
SW5pdGlhbFBvc2l0aW9uLCByZXNvbHZlZEZpbmFsUG9zaXRpb24pOwogfQogCi1HcmlkUmVzb2x2
ZWRQb3NpdGlvbiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21T
dHlsZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBHcmlkUG9z
aXRpb24mIHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCitzdGF0aWMgR3JpZFJlc29s
dmVkUG9zaXRpb24gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShjb25zdCBSZW5kZXJTdHls
ZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBHcmlk
UG9zaXRpb25TaWRlIHNpZGUpCiB7CiAgICAgc3dpdGNoIChwb3NpdGlvbi50eXBlKCkpIHsKICAg
ICBjYXNlIEV4cGxpY2l0UG9zaXRpb246IHsKQEAgLTE5Myw3ICsyNTUsNyBAQCBHcmlkUmVzb2x2
ZWRQb3NpdGlvbiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21T
dHlsZShjb25zdCBSZQogCiAgICAgICAgIC8vIEhhbmRsZSA8aW50ZWdlcj4gZXhwbGljaXQgcG9z
aXRpb24uCiAgICAgICAgIGlmIChwb3NpdGlvbi5pc1Bvc2l0aXZlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gR3JpZFJlc29sdmVkUG9zaXRpb246OmFkanVzdEdyaWRQb3NpdGlvbkZvclNpZGUocG9z
aXRpb24uaW50ZWdlclBvc2l0aW9uKCkgLSAxLCBzaWRlKTsKKyAgICAgICAgICAgIHJldHVybiBh
ZGp1c3RHcmlkUG9zaXRpb25Gb3JTaWRlKHBvc2l0aW9uLmludGVnZXJQb3NpdGlvbigpIC0gMSwg
c2lkZSk7CiAKICAgICAgICAgdW5zaWduZWQgcmVzb2x2ZWRQb3NpdGlvbiA9IGFicyhwb3NpdGlv
bi5pbnRlZ2VyUG9zaXRpb24oKSkgLSAxOwogICAgICAgICBjb25zdCB1bnNpZ25lZCBlbmRPZlRy
YWNrID0gZXhwbGljaXRHcmlkU2l6ZUZvclNpZGUoZ3JpZENvbnRhaW5lclN0eWxlLCBzaWRlKTsK
QEAgLTIwMiw3ICsyNjQsNyBAQCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiBHcmlkUmVzb2x2ZWRQb3Np
dGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShjb25zdCBSZQogICAgICAgICBpZiAo
ZW5kT2ZUcmFjayA8IHJlc29sdmVkUG9zaXRpb24pCiAgICAgICAgICAgICByZXR1cm4gMDsKIAot
ICAgICAgICByZXR1cm4gR3JpZFJlc29sdmVkUG9zaXRpb246OmFkanVzdEdyaWRQb3NpdGlvbkZv
clNpZGUoZW5kT2ZUcmFjayAtIHJlc29sdmVkUG9zaXRpb24sIHNpZGUpOworICAgICAgICByZXR1
cm4gYWRqdXN0R3JpZFBvc2l0aW9uRm9yU2lkZShlbmRPZlRyYWNrIC0gcmVzb2x2ZWRQb3NpdGlv
biwgc2lkZSk7CiAgICAgfQogICAgIGNhc2UgTmFtZWRHcmlkQXJlYVBvc2l0aW9uOgogICAgIHsK
QEAgLTIxNSwxMyArMjc3LDEzIEBAIEdyaWRSZXNvbHZlZFBvc2l0aW9uIEdyaWRSZXNvbHZlZFBv
c2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKGNvbnN0IFJlCiAgICAgICAgIGNv
bnN0IE5hbWVkR3JpZExpbmVzTWFwJiBncmlkTGluZU5hbWVzID0gZ3JpZExpbmVzRm9yU2lkZShn
cmlkQ29udGFpbmVyU3R5bGUsIHNpZGUpOwogICAgICAgICBhdXRvIGltcGxpY2l0TGluZSA9IGdy
aWRMaW5lTmFtZXMuZmluZChpbXBsaWNpdE5hbWVkR3JpZExpbmVGb3JTaWRlKG5hbWVkR3JpZExp
bmUsIHNpZGUpKTsKICAgICAgICAgaWYgKGltcGxpY2l0TGluZSAhPSBncmlkTGluZU5hbWVzLmVu
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjphZGp1c3RHcmlk
UG9zaXRpb25Gb3JTaWRlKGltcGxpY2l0TGluZS0+dmFsdWVbMF0sIHNpZGUpOworICAgICAgICAg
ICAgcmV0dXJuIGFkanVzdEdyaWRQb3NpdGlvbkZvclNpZGUoaW1wbGljaXRMaW5lLT52YWx1ZVsw
XSwgc2lkZSk7CiAKICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiB0aGVyZSBpcyBhIG5hbWVkIGxp
bmUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUsIGNvbnRyaWJ1dGVzIHRoZSBmaXJzdCBzdWNoIGxp
bmUgdG8gdGhlIGdyaWQKICAgICAgICAgLy8gaXRlbSdzIHBsYWNlbWVudC4KICAgICAgICAgYXV0
byBleHBsaWNpdExpbmUgPSBncmlkTGluZU5hbWVzLmZpbmQobmFtZWRHcmlkTGluZSk7CiAgICAg
ICAgIGlmIChleHBsaWNpdExpbmUgIT0gZ3JpZExpbmVOYW1lcy5lbmQoKSkKLSAgICAgICAgICAg
IHJldHVybiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6YWRqdXN0R3JpZFBvc2l0aW9uRm9yU2lkZShl
eHBsaWNpdExpbmUtPnZhbHVlWzBdLCBzaWRlKTsKKyAgICAgICAgICAgIHJldHVybiBhZGp1c3RH
cmlkUG9zaXRpb25Gb3JTaWRlKGV4cGxpY2l0TGluZS0+dmFsdWVbMF0sIHNpZGUpOwogCiAgICAg
ICAgIC8vIElmIG5vbmUgb2YgdGhlIGFib3ZlIHdvcmtzIHNwZWNzIG1hbmRhdGUgdXMgdG8gdHJl
YXQgaXQgYXMgYXV0byBCVVQgd2Ugc2hvdWxkIGhhdmUgZGV0ZWN0ZWQgaXQgYmVmb3JlIGNhbGxp
bmcKICAgICAgICAgLy8gdGhpcyBmdW5jdGlvbiBpbiByZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21T
dHlsZSgpLiBXZSBzaG91bGQgYmUgY292ZXJlZCBhbnl3YXkgYnkgdGhlIEFTU0VSVCBhdCB0aGUg
YmVnaW5uaW5nCkBAIC0yMzksODkgKzMwMSw0OCBAQCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiBHcmlk
UmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShjb25zdCBSZQog
ICAgIHJldHVybiBHcmlkUmVzb2x2ZWRQb3NpdGlvbigwKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRy
PEdyaWRTcGFuPiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbkFnYWlu
c3RPcHBvc2l0ZVBvc2l0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUs
IGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIGNv
bnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIEdyaWRQb3NpdGlvblNpZGUgc2lkZSkKK0dyaWRS
ZXNvbHZlZFBvc2l0aW9uOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbihjb25zdCBHcmlkUG9zaXRpb24m
IHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCiB7Ci0gICAgaWYgKHBvc2l0aW9uLmlz
QXV0bygpKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxHcmlkU3Bhbj4ocmVzb2x2
ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOwotCi0gICAgQVNT
RVJUKHBvc2l0aW9uLmlzU3BhbigpKTsKLSAgICBBU1NFUlQocG9zaXRpb24uc3BhblBvc2l0aW9u
KCkgPiAwKTsKLQotICAgIGlmICghcG9zaXRpb24ubmFtZWRHcmlkTGluZSgpLmlzTnVsbCgpKSB7
Ci0gICAgICAgIC8vIHNwYW4gMiAnYycgLT4gd2UgbmVlZCB0byBmaW5kIHRoZSBhcHByb3ByaWF0
ZSBncmlkIGxpbmUgYmVmb3JlIC8gYWZ0ZXIgb3VyIG9wcG9zaXRlIHBvc2l0aW9uLgotICAgICAg
ICByZXR1cm4gcmVzb2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0
aW9uKGdyaWRDb250YWluZXJTdHlsZSwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBwb3NpdGlv
biwgc2lkZSk7Ci0gICAgfQorICAgIEFTU0VSVChwb3NpdGlvbi5pbnRlZ2VyUG9zaXRpb24oKSk7
CisgICAgdW5zaWduZWQgaW50ZWdlclBvc2l0aW9uID0gcG9zaXRpb24uaW50ZWdlclBvc2l0aW9u
KCkgLSAxOwogCi0gICAgLy8gJ3NwYW4gMScgaXMgY29udGFpbmVkIGluc2lkZSBhIHNpbmdsZSBn
cmlkIHRyYWNrIHJlZ2FyZGxlc3Mgb2YgdGhlIGRpcmVjdGlvbi4KLSAgICAvLyBUaGF0J3Mgd2h5
IHRoZSBDU1Mgc3BhbiB2YWx1ZSBpcyBvbmUgbW9yZSB0aGFuIHRoZSBvZmZzZXQgd2UgYXBwbHku
Ci0gICAgdW5zaWduZWQgcG9zaXRpb25PZmZzZXQgPSBwb3NpdGlvbi5zcGFuUG9zaXRpb24oKSAt
IDE7Ci0gICAgaWYgKGlzU3RhcnRTaWRlKHNpZGUpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGluaXRp
YWxSZXNvbHZlZFBvc2l0aW9uID0gc3RkOjptYXg8aW50PigwLCByZXNvbHZlZE9wcG9zaXRlUG9z
aXRpb24udG9JbnQoKSAtIHBvc2l0aW9uT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8R3JpZFNwYW4+KGluaXRpYWxSZXNvbHZlZFBvc2l0aW9uLCByZXNvbHZlZE9wcG9z
aXRlUG9zaXRpb24pOwotICAgIH0KLQotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEdyaWRT
cGFuPihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbi50
b0ludCgpICsgcG9zaXRpb25PZmZzZXQpOworICAgIG1faW50ZWdlclBvc2l0aW9uID0gYWRqdXN0
R3JpZFBvc2l0aW9uRm9yU2lkZShpbnRlZ2VyUG9zaXRpb24sIHNpZGUpLm1faW50ZWdlclBvc2l0
aW9uOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8R3JpZFNwYW4+IEdyaWRSZXNvbHZlZFBvc2l0aW9u
OjpyZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oY29u
c3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgY29uc3QgR3JpZFJlc29sdmVkUG9z
aXRpb24mIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3Np
dGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQorR3JpZFVucmVzb2x2ZWRTcGFuIEdyaWRSZXNv
bHZlZFBvc2l0aW9uOjp1bnJlc29sdmVkU3BhbkZyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYg
Z3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBSZW5kZXJCb3gmIGdyaWRJdGVtLCBHcmlkVHJhY2tT
aXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAgIEFTU0VSVChwb3NpdGlvbi5pc1NwYW4o
KSk7Ci0gICAgQVNTRVJUKCFwb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCkuaXNOdWxsKCkpOwotICAg
IC8vIE5lZ2F0aXZlIHBvc2l0aW9ucyBhcmUgbm90IGFsbG93ZWQgcGVyIHRoZSBzcGVjaWZpY2F0
aW9uIGFuZCBzaG91bGQgaGF2ZSBiZWVuIGhhbmRsZWQgZHVyaW5nIHBhcnNpbmcuCi0gICAgQVNT
RVJUKHBvc2l0aW9uLnNwYW5Qb3NpdGlvbigpID4gMCk7Ci0KLSAgICBjb25zdCBOYW1lZEdyaWRM
aW5lc01hcCYgZ3JpZExpbmVzTmFtZXMgPSBpc0NvbHVtblNpZGUoc2lkZSkgPyBncmlkQ29udGFp
bmVyU3R5bGUubmFtZWRHcmlkQ29sdW1uTGluZXMoKSA6IGdyaWRDb250YWluZXJTdHlsZS5uYW1l
ZEdyaWRSb3dMaW5lcygpOwotICAgIE5hbWVkR3JpZExpbmVzTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGdyaWRMaW5lc05hbWVzLmZpbmQocG9zaXRpb24ubmFtZWRHcmlkTGluZSgpKTsKLQotICAg
IC8vIElmIHRoZXJlIGlzIG5vIG5hbWVkIGdyaWQgbGluZSBvZiB0aGF0IG5hbWUsIHdlIHJlc29s
dmUgdGhlIHBvc2l0aW9uIHRvICdhdXRvJyAod2hpY2ggaXMgZXF1aXZhbGVudCB0byAnc3BhbiAx
JyBpbiB0aGlzIGNhc2UpLgotICAgIC8vIFNlZSBodHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVz
L1B1YmxpYy93d3ctc3R5bGUvMjAxM0p1bi8wMzk0Lmh0bWwuCi0gICAgaWYgKGl0ID09IGdyaWRM
aW5lc05hbWVzLmVuZCgpKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxHcmlkU3Bh
bj4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOwor
ICAgIEdyaWRQb3NpdGlvbiBpbml0aWFsUG9zaXRpb24gPSAoZGlyZWN0aW9uID09IEZvckNvbHVt
bnMpID8gZ3JpZEl0ZW0uc3R5bGUoKS5ncmlkSXRlbUNvbHVtblN0YXJ0KCkgOiBncmlkSXRlbS5z
dHlsZSgpLmdyaWRJdGVtUm93U3RhcnQoKTsKKyAgICBhdXRvIGluaXRpYWxQb3NpdGlvblNpZGUg
PSAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gQ29sdW1uU3RhcnRTaWRlIDogUm93U3RhcnRT
aWRlOworICAgIEdyaWRQb3NpdGlvbiBmaW5hbFBvc2l0aW9uID0gKGRpcmVjdGlvbiA9PSBGb3JD
b2x1bW5zKSA/IGdyaWRJdGVtLnN0eWxlKCkuZ3JpZEl0ZW1Db2x1bW5FbmQoKSA6IGdyaWRJdGVt
LnN0eWxlKCkuZ3JpZEl0ZW1Sb3dFbmQoKTsKKyAgICBhdXRvIGZpbmFsUG9zaXRpb25TaWRlID0g
KGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IENvbHVtbkVuZFNpZGUgOiBSb3dFbmRTaWRlOwog
Ci0gICAgaWYgKHNpZGUgPT0gUm93U3RhcnRTaWRlIHx8IHNpZGUgPT0gQ29sdW1uU3RhcnRTaWRl
KQotICAgICAgICByZXR1cm4gcmVzb2x2ZVJvd1N0YXJ0Q29sdW1uU3RhcnROYW1lZEdyaWRMaW5l
UG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24s
IHBvc2l0aW9uLCBpdC0+dmFsdWUpOworICAgIEdyaWRVbnJlc29sdmVkU3BhbiB1bnJlc29sdmVk
U3Bhbihpbml0aWFsUG9zaXRpb24sIGluaXRpYWxQb3NpdGlvblNpZGUsIGZpbmFsUG9zaXRpb24s
IGZpbmFsUG9zaXRpb25TaWRlKTsKKyAgICB1bnJlc29sdmVkU3Bhbi5hZGp1c3RHcmlkUG9zaXRp
b25zRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSk7CiAKLSAgICByZXR1cm4gcmVzb2x2ZVJv
d0VuZENvbHVtbkVuZE5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9u
KHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgcG9zaXRpb24sIGl0LT52YWx1ZSk7CisgICAgcmV0
dXJuIHVucmVzb2x2ZWRTcGFuOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGZpcnN0TmFt
ZWRHcmlkTGluZUJlZm9yZVBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8
dW5zaWduZWQ+JiBncmlkTGluZXMpCitHcmlkU3BhbiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVz
b2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoY29uc3QgR3JpZFVucmVzb2x2ZWRTcGFuJiB1bnJl
c29sdmVkU3BhbiwgY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSkKIHsKLSAg
ICAvLyBUaGUgZ3JpZCBsaW5lIGluZXF1YWxpdHkgbmVlZHMgdG8gYmUgc3RyaWN0ICh3aGljaCBk
b2Vzbid0IG1hdGNoIHRoZSBhZnRlciAvIGVuZCBjYXNlKSBiZWNhdXNlIHxwb3NpdGlvbnwgaXMK
LSAgICAvLyBhbHJlYWR5IGNvbnZlcnRlZCB0byBhbiBpbmRleCBpbiBvdXIgZ3JpZCByZXByZXNl
bnRhdGlvbiAoaWUgb25lIHdhcyByZW1vdmVkIGZyb20gdGhlIGdyaWQgbGluZSB0byBhY2NvdW50
IGZvcgotICAgIC8vIHRoZSBzaWRlKS4KLSAgICB1bnNpZ25lZCBmaXJzdExpbmVCZWZvcmVQb3Np
dGlvbkluZGV4ID0gMDsKLSAgICBjb25zdCB1bnNpZ25lZCogZmlyc3RMaW5lQmVmb3JlUG9zaXRp
b24gPSBzdGQ6Omxvd2VyX2JvdW5kKGdyaWRMaW5lcy5iZWdpbigpLCBncmlkTGluZXMuZW5kKCks
IHBvc2l0aW9uKTsKLSAgICBpZiAoZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gIT0gZ3JpZExpbmVz
LmVuZCgpKSB7Ci0gICAgICAgIGlmICgqZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gPiBwb3NpdGlv
biAmJiBmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiAhPSBncmlkTGluZXMuYmVnaW4oKSkKLSAgICAg
ICAgICAgIC0tZmlyc3RMaW5lQmVmb3JlUG9zaXRpb247CisgICAgQVNTRVJUKCF1bnJlc29sdmVk
U3Bhbi5yZXF1aXJlc0F1dG9QbGFjZW1lbnQoKSk7CiAKLSAgICAgICAgZmlyc3RMaW5lQmVmb3Jl
UG9zaXRpb25JbmRleCA9IGZpcnN0TGluZUJlZm9yZVBvc2l0aW9uIC0gZ3JpZExpbmVzLmJlZ2lu
KCk7CisgICAgaWYgKHVucmVzb2x2ZWRTcGFuLmluaXRpYWxQb3NpdGlvbigpLnNob3VsZEJlUmVz
b2x2ZWRBZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbigpKSB7CisgICAgICAgIC8vIEluZmVyIHRoZSBw
b3NpdGlvbiBmcm9tIHRoZSBmaW5hbCBwb3NpdGlvbiAoJ2F1dG8gLyAxJyBvciAnc3BhbiAyIC8g
MycgY2FzZSkuCisgICAgICAgIGF1dG8gZmluYWxSZXNvbHZlZFBvc2l0aW9uID0gcmVzb2x2ZUdy
aWRQb3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFpbmVyU3R5bGUsIHVucmVzb2x2ZWRTcGFuLmZp
bmFsUG9zaXRpb24oKSwgdW5yZXNvbHZlZFNwYW4uZmluYWxQb3NpdGlvblNpZGUoKSk7CisgICAg
ICAgIHJldHVybiByZXNvbHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oZ3Jp
ZENvbnRhaW5lclN0eWxlLCBmaW5hbFJlc29sdmVkUG9zaXRpb24sIHVucmVzb2x2ZWRTcGFuLmlu
aXRpYWxQb3NpdGlvbigpLCB1bnJlc29sdmVkU3Bhbi5pbml0aWFsUG9zaXRpb25TaWRlKCkpOwog
ICAgIH0KLSAgICByZXR1cm4gZmlyc3RMaW5lQmVmb3JlUG9zaXRpb25JbmRleDsKLX0KIAotc3Rk
Ojp1bmlxdWVfcHRyPEdyaWRTcGFuPiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZVJvd1N0
YXJ0Q29sdW1uU3RhcnROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlv
bihjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBj
b25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBncmlk
TGluZXMpCi17Ci0gICAgdW5zaWduZWQgZ3JpZExpbmVJbmRleCA9IHN0ZDo6bWF4PGludD4oMCwg
Zmlyc3ROYW1lZEdyaWRMaW5lQmVmb3JlUG9zaXRpb24ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9u
LnRvSW50KCksIGdyaWRMaW5lcykgLSBwb3NpdGlvbi5zcGFuUG9zaXRpb24oKSArIDEpOwotICAg
IEdyaWRSZXNvbHZlZFBvc2l0aW9uIHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiA9IEdyaWRSZXNv
bHZlZFBvc2l0aW9uKGdyaWRMaW5lc1tncmlkTGluZUluZGV4XSk7Ci0gICAgaWYgKHJlc29sdmVk
R3JpZExpbmVQb3NpdGlvbiA+IHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbikKLSAgICAgICAgcmVz
b2x2ZWRHcmlkTGluZVBvc2l0aW9uID0gcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uOwotICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEdyaWRTcGFuPihyZXNvbHZlZEdyaWRMaW5lUG9zaXRpb24s
IHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7Ci19CisgICAgaWYgKHVucmVzb2x2ZWRTcGFuLmZp
bmFsUG9zaXRpb24oKS5zaG91bGRCZVJlc29sdmVkQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oKSkg
eworICAgICAgICAvLyBJbmZlciBvdXIgcG9zaXRpb24gZnJvbSB0aGUgaW5pdGlhbCBwb3NpdGlv
biAoJzEgLyBhdXRvJyBvciAnMyAvIHNwYW4gMicgY2FzZSkuCisgICAgICAgIGF1dG8gaW5pdGlh
bFJlc29sdmVkUG9zaXRpb24gPSByZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKGdyaWRDb250
YWluZXJTdHlsZSwgdW5yZXNvbHZlZFNwYW4uaW5pdGlhbFBvc2l0aW9uKCksIHVucmVzb2x2ZWRT
cGFuLmluaXRpYWxQb3NpdGlvblNpZGUoKSk7CisgICAgICAgIHJldHVybiByZXNvbHZlR3JpZFBv
c2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oZ3JpZENvbnRhaW5lclN0eWxlLCBpbml0aWFs
UmVzb2x2ZWRQb3NpdGlvbiwgdW5yZXNvbHZlZFNwYW4uZmluYWxQb3NpdGlvbigpLCB1bnJlc29s
dmVkU3Bhbi5maW5hbFBvc2l0aW9uU2lkZSgpKTsKKyAgICB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxH
cmlkU3Bhbj4gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVSb3dFbmRDb2x1bW5FbmROYW1l
ZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihjb25zdCBHcmlkUmVzb2x2
ZWRQb3NpdGlvbiYgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBjb25zdCBHcmlkUG9zaXRpb24m
IHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBncmlkTGluZXMpCi17Ci0gICAgQVNT
RVJUKGdyaWRMaW5lcy5zaXplKCkpOwotICAgIHVuc2lnbmVkIGZpcnN0TGluZUFmdGVyT3Bwb3Np
dGVQb3NpdGlvbkluZGV4ID0gZ3JpZExpbmVzLnNpemUoKSAtIDE7Ci0gICAgY29uc3QgdW5zaWdu
ZWQqIGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbiA9IHN0ZDo6dXBwZXJfYm91bmQoZ3Jp
ZExpbmVzLmJlZ2luKCksIGdyaWRMaW5lcy5lbmQoKSwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9u
KTsKLSAgICBpZiAoZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uICE9IGdyaWRMaW5lcy5l
bmQoKSkKLSAgICAgICAgZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9uSW5kZXggPSBmaXJz
dExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb24gLSBncmlkTGluZXMuYmVnaW4oKTsKKyAgICBHcmlk
UmVzb2x2ZWRQb3NpdGlvbiByZXNvbHZlZEluaXRpYWxQb3NpdGlvbiA9IHJlc29sdmVHcmlkUG9z
aXRpb25Gcm9tU3R5bGUoZ3JpZENvbnRhaW5lclN0eWxlLCB1bnJlc29sdmVkU3Bhbi5pbml0aWFs
UG9zaXRpb24oKSwgdW5yZXNvbHZlZFNwYW4uaW5pdGlhbFBvc2l0aW9uU2lkZSgpKTsKKyAgICBH
cmlkUmVzb2x2ZWRQb3NpdGlvbiByZXNvbHZlZEZpbmFsUG9zaXRpb24gPSByZXNvbHZlR3JpZFBv
c2l0aW9uRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgdW5yZXNvbHZlZFNwYW4uZmluYWxQ
b3NpdGlvbigpLCB1bnJlc29sdmVkU3Bhbi5maW5hbFBvc2l0aW9uU2lkZSgpKTsKIAotICAgIHVu
c2lnbmVkIGdyaWRMaW5lSW5kZXggPSBzdGQ6Om1pbjx1bnNpZ25lZD4oZ3JpZExpbmVzLnNpemUo
KSAtIDEsIGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbkluZGV4ICsgcG9zaXRpb24uc3Bh
blBvc2l0aW9uKCkgLSAxKTsKLSAgICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiByZXNvbHZlZEdyaWRM
aW5lUG9zaXRpb24gPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6YWRqdXN0R3JpZFBvc2l0aW9uRm9y
Um93RW5kQ29sdW1uRW5kU2lkZShncmlkTGluZXNbZ3JpZExpbmVJbmRleF0pOwotICAgIGlmIChy
ZXNvbHZlZEdyaWRMaW5lUG9zaXRpb24gPCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pCi0gICAg
ICAgIHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiA9IHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbjsK
LSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxHcmlkU3Bhbj4ocmVzb2x2ZWRPcHBvc2l0ZVBv
c2l0aW9uLCByZXNvbHZlZEdyaWRMaW5lUG9zaXRpb24pOworICAgIC8vIElmICdncmlkLXJvdy1l
bmQnIHNwZWNpZmllcyBhIGxpbmUgYXQgb3IgYmVmb3JlIHRoYXQgc3BlY2lmaWVkIGJ5ICdncmlk
LXJvdy1zdGFydCcsIGl0IGNvbXB1dGVzIHRvICdzcGFuIDEnLgorICAgIHJldHVybiBHcmlkU3Bh
bihyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgc3RkOjptYXg8R3JpZFJlc29sdmVkUG9zaXRpb24+
KHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCByZXNvbHZlZEZpbmFsUG9zaXRpb24pKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uaAppbmRleCA5NTU1NmNkZWJlYmJiZGM0Yjcx
ZWQyYzQxZGY1OTJhYjM5ZTNiZjU5Li45NzUyYjM2MGYwNmU2YThkZDgyOGFiZjc0MDJmNDJiOTM3
OWZhNTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJl
c29sdmVkUG9zaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3Jp
ZFJlc29sdmVkUG9zaXRpb24uaApAQCAtNDEsNTkgKzQxLDQ2IEBAIGNsYXNzIEdyaWRTcGFuOwog
Y2xhc3MgUmVuZGVyQm94OwogY2xhc3MgUmVuZGVyU3R5bGU7CiAKLWVudW0gR3JpZFBvc2l0aW9u
U2lkZSB7Ci0gICAgQ29sdW1uU3RhcnRTaWRlLAotICAgIENvbHVtbkVuZFNpZGUsCi0gICAgUm93
U3RhcnRTaWRlLAotICAgIFJvd0VuZFNpZGUKLX07Ci0KIGVudW0gR3JpZFRyYWNrU2l6aW5nRGly
ZWN0aW9uIHsKICAgICBGb3JDb2x1bW5zLAogICAgIEZvclJvd3MKIH07CiAKLS8vIFRoaXMgY2xh
c3MgcmVwcmVzZW50cyBhbiBpbmRleCBpbnRvIG9uZSBvZiB0aGUgZGltZW5zaW9ucyBvZiB0aGUg
Z3JpZCBhcnJheS4KLS8vIFdyYXBzIGFuIHVuc2lnbmVkIGludGVnZXIganVzdCBmb3IgdGhlIHB1
cnBvc2Ugb2Yga25vd2luZyB3aGF0IHdlIG1hbmlwdWxhdGUgaW4gdGhlIGdyaWQgY29kZS4KLWNs
YXNzIEdyaWRSZXNvbHZlZFBvc2l0aW9uIHsKK2NsYXNzIEdyaWRVbnJlc29sdmVkU3BhbiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIEdyaWRSZXNvbHZlZFBvc2l0aW9uIGFkanVzdEdyaWRQb3NpdGlv
bkZvclJvd0VuZENvbHVtbkVuZFNpZGUodW5zaWduZWQgcmVzb2x2ZWRQb3NpdGlvbikKKyAgICBH
cmlkVW5yZXNvbHZlZFNwYW4oR3JpZFBvc2l0aW9uIGluaXRpYWxQb3NpdGlvbiwgR3JpZFBvc2l0
aW9uU2lkZSBpbml0aWFsUG9zaXRpb25TaWRlLCBHcmlkUG9zaXRpb24gZmluYWxQb3NpdGlvbiwg
R3JpZFBvc2l0aW9uU2lkZSBmaW5hbFBvc2l0aW9uU2lkZSkKKyAgICAgICAgOiBtX2luaXRpYWxQ
b3NpdGlvbihpbml0aWFsUG9zaXRpb24pCisgICAgICAgICwgbV9maW5hbFBvc2l0aW9uKGZpbmFs
UG9zaXRpb24pCisgICAgICAgICwgbV9pbml0aWFsUG9zaXRpb25TaWRlKGluaXRpYWxQb3NpdGlv
blNpZGUpCisgICAgICAgICwgbV9maW5hbFBvc2l0aW9uU2lkZShmaW5hbFBvc2l0aW9uU2lkZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiByZXNvbHZlZFBvc2l0aW9uID8gR3JpZFJlc29sdmVkUG9z
aXRpb24ocmVzb2x2ZWRQb3NpdGlvbiAtIDEpIDogR3JpZFJlc29sdmVkUG9zaXRpb24oMCk7CiAg
ICAgfQogCi0gICAgc3RhdGljIEdyaWRSZXNvbHZlZFBvc2l0aW9uIGFkanVzdEdyaWRQb3NpdGlv
bkZvclNpZGUodW5zaWduZWQgcmVzb2x2ZWRQb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBzaWRl
KQotICAgIHsKLSAgICAgICAgLy8gQW4gaXRlbSBmaW5pc2hpbmcgb24gdGhlIE4tdGggbGluZSBi
ZWxvbmdzIHRvIHRoZSBOLTEtdGggY2VsbC4KLSAgICAgICAgaWYgKHNpZGUgPT0gQ29sdW1uRW5k
U2lkZSB8fCBzaWRlID09IFJvd0VuZFNpZGUpCi0gICAgICAgICAgICByZXR1cm4gYWRqdXN0R3Jp
ZFBvc2l0aW9uRm9yUm93RW5kQ29sdW1uRW5kU2lkZShyZXNvbHZlZFBvc2l0aW9uKTsKKyAgICBj
b25zdCBHcmlkUG9zaXRpb24mIGluaXRpYWxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW5p
dGlhbFBvc2l0aW9uOyB9CisgICAgY29uc3QgR3JpZFBvc2l0aW9uJiBmaW5hbFBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9maW5hbFBvc2l0aW9uOyB9CisgICAgR3JpZFBvc2l0aW9uU2lkZSBp
bml0aWFsUG9zaXRpb25TaWRlKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsUG9zaXRpb25TaWRl
OyB9CisgICAgR3JpZFBvc2l0aW9uU2lkZSBmaW5hbFBvc2l0aW9uU2lkZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZmluYWxQb3NpdGlvblNpZGU7IH0KIAotICAgICAgICByZXR1cm4gR3JpZFJlc29sdmVk
UG9zaXRpb24ocmVzb2x2ZWRQb3NpdGlvbik7Ci0gICAgfQorICAgIGJvb2wgcmVxdWlyZXNBdXRv
UGxhY2VtZW50KCkgY29uc3Q7CisgICAgdm9pZCBhZGp1c3RHcmlkUG9zaXRpb25zRnJvbVN0eWxl
KGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUpOwogCi0gICAgc3RhdGljIEdy
aWRTcGFuIHJlc29sdmVHcmlkUG9zaXRpb25zRnJvbUF1dG9QbGFjZW1lbnRQb3NpdGlvbihjb25z
dCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlckJveCYsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlv
biwgY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBhZGp1c3RO
YW1lZEdyaWRJdGVtUG9zaXRpb24oY29uc3QgUmVuZGVyU3R5bGUmLCBHcmlkUG9zaXRpb24mLCBH
cmlkUG9zaXRpb25TaWRlKTsKLSAgICBzdGF0aWMgdm9pZCBhZGp1c3RHcmlkUG9zaXRpb25zRnJv
bVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiwgR3JpZFBvc2l0aW9uJiBpbml0aWFsUG9zaXRpb24s
IEdyaWRQb3NpdGlvbiYgZmluYWxQb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBpbml0aWFsUG9z
aXRpb25TaWRlLCBHcmlkUG9zaXRpb25TaWRlIGZpbmFsUG9zaXRpb25TaWRlKTsKLSAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEdyaWRTcGFuPiByZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHls
ZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlckJveCYsIEdyaWRUcmFja1NpemluZ0Rp
cmVjdGlvbik7Ci0gICAgc3RhdGljIEdyaWRSZXNvbHZlZFBvc2l0aW9uIHJlc29sdmVOYW1lZEdy
aWRMaW5lUG9zaXRpb25Gcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBHcmlkUG9z
aXRpb24mLCBHcmlkUG9zaXRpb25TaWRlKTsKLSAgICBzdGF0aWMgR3JpZFJlc29sdmVkUG9zaXRp
b24gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0
IEdyaWRQb3NpdGlvbiYsIEdyaWRQb3NpdGlvblNpZGUpOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8R3JpZFNwYW4+IHJlc29sdmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlv
bihjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiwgY29uc3Qg
R3JpZFBvc2l0aW9uJiwgR3JpZFBvc2l0aW9uU2lkZSk7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxHcmlkU3Bhbj4gcmVzb2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0
ZVBvc2l0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24m
LCBjb25zdCBHcmlkUG9zaXRpb24mLCBHcmlkUG9zaXRpb25TaWRlKTsKLSAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEdyaWRTcGFuPiByZXNvbHZlUm93U3RhcnRDb2x1bW5TdGFydE5hbWVkR3Jp
ZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGNvbnN0IEdyaWRSZXNvbHZlZFBv
c2l0aW9uJiwgY29uc3QgR3JpZFBvc2l0aW9uJiwgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYpOwot
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8R3JpZFNwYW4+IHJlc29sdmVSb3dFbmRDb2x1bW5F
bmROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihjb25zdCBHcmlk
UmVzb2x2ZWRQb3NpdGlvbiYsIGNvbnN0IEdyaWRQb3NpdGlvbiYsIGNvbnN0IFZlY3Rvcjx1bnNp
Z25lZD4mKTsKK3ByaXZhdGU6CisgICAgR3JpZFBvc2l0aW9uIG1faW5pdGlhbFBvc2l0aW9uOwor
ICAgIEdyaWRQb3NpdGlvbiBtX2ZpbmFsUG9zaXRpb247CisgICAgR3JpZFBvc2l0aW9uU2lkZSBt
X2luaXRpYWxQb3NpdGlvblNpZGU7CisgICAgR3JpZFBvc2l0aW9uU2lkZSBtX2ZpbmFsUG9zaXRp
b25TaWRlOworfTsKIAorLy8gVGhpcyBjbGFzcyByZXByZXNlbnRzIGFuIGluZGV4IGludG8gb25l
IG9mIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBncmlkIGFycmF5LgorLy8gV3JhcHMgYW4gdW5zaWdu
ZWQgaW50ZWdlciBqdXN0IGZvciB0aGUgcHVycG9zZSBvZiBrbm93aW5nIHdoYXQgd2UgbWFuaXB1
bGF0ZSBpbiB0aGUgZ3JpZCBjb2RlLgorY2xhc3MgR3JpZFJlc29sdmVkUG9zaXRpb24geworcHVi
bGljOgogICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uKQogICAgICAg
ICA6IG1faW50ZWdlclBvc2l0aW9uKHBvc2l0aW9uKQogICAgIHsKICAgICB9CiAKLSAgICBHcmlk
UmVzb2x2ZWRQb3NpdGlvbihjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBHcmlkUG9zaXRp
b25TaWRlIHNpZGUpCi0gICAgewotICAgICAgICBBU1NFUlQocG9zaXRpb24uaW50ZWdlclBvc2l0
aW9uKCkpOwotICAgICAgICB1bnNpZ25lZCBpbnRlZ2VyUG9zaXRpb24gPSBwb3NpdGlvbi5pbnRl
Z2VyUG9zaXRpb24oKSAtIDE7Ci0KLSAgICAgICAgbV9pbnRlZ2VyUG9zaXRpb24gPSBhZGp1c3RH
cmlkUG9zaXRpb25Gb3JTaWRlKGludGVnZXJQb3NpdGlvbiwgc2lkZSkubV9pbnRlZ2VyUG9zaXRp
b247Ci0gICAgfQorICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uKGNvbnN0IEdyaWRQb3NpdGlvbiYs
IEdyaWRQb3NpdGlvblNpZGUpOwogCiAgICAgR3JpZFJlc29sdmVkUG9zaXRpb24mIG9wZXJhdG9y
KigpCiAgICAgewpAQCAtMTQ2LDExICsxMzMsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
R3JpZFJlc29sdmVkUG9zaXRpb24obV9pbnRlZ2VyUG9zaXRpb24gKyAxKTsKICAgICB9CiAKKyAg
ICBzdGF0aWMgR3JpZFNwYW4gcmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tQXV0b1BsYWNlbWVudFBv
c2l0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyQm94JiwgR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uLCBjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYpOworICAgIHN0YXRpYyBH
cmlkU3BhbiByZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZShjb25zdCBHcmlkVW5yZXNvbHZl
ZFNwYW4mLCBjb25zdCBSZW5kZXJTdHlsZSYpOworICAgIHN0YXRpYyBHcmlkVW5yZXNvbHZlZFNw
YW4gdW5yZXNvbHZlZFNwYW5Gcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5k
ZXJCb3gmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pOwogICAgIHN0YXRpYyB1bnNpZ25lZCBl
eHBsaWNpdEdyaWRDb2x1bW5Db3VudChjb25zdCBSZW5kZXJTdHlsZSYpOwogICAgIHN0YXRpYyB1
bnNpZ25lZCBleHBsaWNpdEdyaWRSb3dDb3VudChjb25zdCBSZW5kZXJTdHlsZSYpOwogCiBwcml2
YXRlOgotCiAgICAgdW5zaWduZWQgbV9pbnRlZ2VyUG9zaXRpb247CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254000</attachid>
            <date>2015-06-01 07:34:36 -0700</date>
            <delta_ts>2015-06-01 07:34:36 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-139077-20150601163417.patch</filename>
            <type>text/plain</type>
            <size>49204</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1MDU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDA3NWZlODM2Yjc2OWJm
ZDdmN2U5NWEzZjk4MjBlZGI3YjMxY2YwZi4uYjRlMjZmZjdkYmE5MjZiMGM4NGU4MzU5MjgwODhk
ZjExZjMzMTQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE1LTA2LTAxICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtDU1MgR3Jp
ZCBMYXlvdXRdIFNpbXBsaWZ5IHRoZSBpbnRlcmZhY2Ugb2YgR3JpZFJlc29sdmVkUG9zaXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTA3Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFRoZSBpbnRlcmZh
Y2Ugb2YgR3JpZFJlc29sdmVkUG9zaXRpb24gaXMgZnVsbCBvZiBzdGF0aWMgbWV0aG9kcworICAg
ICAgICB0aGF0IGFyZSB1c2VkIG9ubHkgaW50ZXJuYWxseSwgd2Ugc2hvdWxkIG5vdCBleHBvc2Ug
dGhlbS4KKworICAgICAgICBBcGFydCBmcm9tIHRoYXQgcmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9t
U3R5bGUoKSBkbyBhbHdheXMgcmV0dXJuCisgICAgICAgIGEgdmFsaWQgR3JpZFNwYW4gZnJvbSBu
b3cgb24gbWVhbmluZyB0aGF0IHRoZSBjYWxsZXIgaGFzIHRvIGVuc3VyZQorICAgICAgICB0aGF0
IHRoZSByZXNvbHV0aW9uIGRvZXMgbm90IHJlcXVpcmUgcnVubmluZyB0aGUgYXV0by1wbGFjZW1l
bnQKKyAgICAgICAgYWxnb3JpdGhtLiBBIG5ldyBjbGFzcyBjYWxsZWQgR3JpZFVucmVzb2x2ZWRT
cGFuIHdhcyBhZGRlZCBmb3IKKyAgICAgICAgdGhhdCBwdXJwb3NlLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyBhcyB0aGlzIGlzIGEgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyR3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZUl0ZW1z
T25HcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBvcHVsYXRlRXhwbGljaXRH
cmlkQW5kT3JkZXJJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFj
ZVNwZWNpZmllZE1ham9yQXhpc0l0ZW1zT25HcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckdyaWQ6OnBsYWNlQXV0b01ham9yQXhpc0l0ZW1PbkdyaWQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdHlsZS9HcmlkUG9zaXRpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvR3JpZFJl
c29sdmVkUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z3JpZExpbmVzRm9yU2lkZSk6
CisgICAgICAgIChXZWJDb3JlOjppbXBsaWNpdE5hbWVkR3JpZExpbmVGb3JTaWRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmlzTm9uRXhpc3RlbnROYW1lZExpbmVPckFyZWEpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JpZFVucmVzb2x2ZWRTcGFuOjpyZXF1aXJlc0F1dG9QbGFjZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JpZFVucmVzb2x2ZWRTcGFuOjphZGp1c3RHcmlkUG9zaXRpb25zRnJvbVN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdEdyaWRQb3NpdGlvbkZvclJvd0VuZENvbHVt
bkVuZFNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0R3JpZFBvc2l0aW9uRm9yU2lkZSk6
CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0aW9uRnJvbVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0TmFtZWRHcmlkTGluZUJlZm9yZVBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVSb3dTdGFydENvbHVtblN0YXJ0TmFtZWRHcmlkTGlu
ZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6cmVz
b2x2ZVJvd0VuZENvbHVtbkVuZE5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVOYW1lZEdyaWRMaW5lUG9zaXRpb25B
Z2FpbnN0T3Bwb3NpdGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlR3JpZFBv
c2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFJl
c29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbUF1dG9QbGFjZW1lbnRQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpHcmlkUmVzb2x2ZWRQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6dW5yZXNvbHZl
ZFNwYW5Gcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFJlc29sdmVkUG9zaXRpb246
OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRS
ZXNvbHZlZFBvc2l0aW9uOjphZGp1c3RHcmlkUG9zaXRpb25zRnJvbVN0eWxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlTmFtZWRHcmlk
TGluZVBvc2l0aW9uRnJvbVN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyaWRS
ZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0
aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVOYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0
T3Bwb3NpdGVQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmlkUmVzb2x2
ZWRQb3NpdGlvbjo6cmVzb2x2ZVJvd1N0YXJ0Q29sdW1uU3RhcnROYW1lZEdyaWRMaW5lUG9zaXRp
b25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZVJvd0VuZENvbHVtbkVuZE5hbWVkR3JpZExpbmVQ
b3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5k
ZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
aWRVbnJlc29sdmVkU3Bhbjo6R3JpZFVucmVzb2x2ZWRTcGFuKTogTmV3IGNsYXNzLgorICAgICAg
ICAoV2ViQ29yZTo6R3JpZFVucmVzb2x2ZWRTcGFuOjppbml0aWFsUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JpZFVucmVzb2x2ZWRTcGFuOjpmaW5hbFBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyaWRVbnJlc29sdmVkU3Bhbjo6aW5pdGlhbFBvc2l0aW9uU2lkZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmlkVW5yZXNvbHZlZFNwYW46OmZpbmFsUG9zaXRpb25TaWRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjphZGp1c3RHcmlkUG9zaXRpb25G
b3JSb3dFbmRDb2x1bW5FbmRTaWRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyaWRS
ZXNvbHZlZFBvc2l0aW9uOjphZGp1c3RHcmlkUG9zaXRpb25Gb3JTaWRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpHcmlkUmVzb2x2ZWRQb3NpdGlv
bik6IERlbGV0ZWQuCisKIDIwMTUtMDYtMDEgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBGaXggbG9naWNhbC1ub3QtcGFyZW50aGVzZXMgd2FybmluZyBp
biBDYWNoZWRTY3JpcHQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyR3JpZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAK
aW5kZXggMTM5ODQ2MDY5NDU3M2QxYWE4M2JiZGVkNWQ2NzNjY2JhZjVhN2FkNy4uM2JkMjZhNWU3
N2JhZTAwOTM3NjgzNzM2NzVlMTY2MjJhZDUzNzQyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJHcmlkLmNwcApAQCAtOTc1LDE3ICs5NzUsMjIgQEAgdm9pZCBSZW5kZXJHcmlkOjpw
bGFjZUl0ZW1zT25HcmlkKCkKICAgICBWZWN0b3I8UmVuZGVyQm94Kj4gYXV0b01ham9yQXhpc0F1
dG9HcmlkSXRlbXM7CiAgICAgVmVjdG9yPFJlbmRlckJveCo+IHNwZWNpZmllZE1ham9yQXhpc0F1
dG9HcmlkSXRlbXM7CiAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9y
LmZpcnN0KCk7IGNoaWxkOyBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci5uZXh0KCkpIHsKLSAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPEdyaWRTcGFuPiByb3dQb3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQ
b3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoc3R5bGUoKSwgKmNoaWxkLCBG
b3JSb3dzKTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdyaWRTcGFuPiBjb2x1bW5Qb3NpdGlv
bnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUo
c3R5bGUoKSwgKmNoaWxkLCBGb3JDb2x1bW5zKTsKLSAgICAgICAgaWYgKCFyb3dQb3NpdGlvbnMg
fHwgIWNvbHVtblBvc2l0aW9ucykgewotICAgICAgICAgICAgR3JpZFNwYW4qIG1ham9yQXhpc1Bv
c2l0aW9ucyA9IChhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGlyZWN0aW9uKCkgPT0gRm9yQ29sdW1u
cykgPyBjb2x1bW5Qb3NpdGlvbnMuZ2V0KCkgOiByb3dQb3NpdGlvbnMuZ2V0KCk7Ci0gICAgICAg
ICAgICBpZiAoIW1ham9yQXhpc1Bvc2l0aW9ucykKKyAgICAgICAgYXV0byB1bnJlc29sdmVkUm93
UG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnVucmVzb2x2ZWRTcGFuRnJvbVN0eWxl
KHN0eWxlKCksICpjaGlsZCwgRm9yUm93cyk7CisgICAgICAgIGF1dG8gdW5yZXNvbHZlZENvbHVt
blBvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjp1bnJlc29sdmVkU3BhbkZyb21TdHls
ZShzdHlsZSgpLCAqY2hpbGQsIEZvckNvbHVtbnMpOworCisgICAgICAgIGlmICh1bnJlc29sdmVk
Um93UG9zaXRpb25zLnJlcXVpcmVzQXV0b1BsYWNlbWVudCgpIHx8IHVucmVzb2x2ZWRDb2x1bW5Q
b3NpdGlvbnMucmVxdWlyZXNBdXRvUGxhY2VtZW50KCkpIHsKKworICAgICAgICAgICAgYm9vbCBt
YWpvckF4aXNEaXJlY3Rpb25Jc0ZvckNvbHVtbnMgPSBhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGly
ZWN0aW9uKCkgPT0gRm9yQ29sdW1uczsKKyAgICAgICAgICAgIGlmICgobWFqb3JBeGlzRGlyZWN0
aW9uSXNGb3JDb2x1bW5zICYmIHVucmVzb2x2ZWRDb2x1bW5Qb3NpdGlvbnMucmVxdWlyZXNBdXRv
UGxhY2VtZW50KCkpCisgICAgICAgICAgICAgICAgfHwgKCFtYWpvckF4aXNEaXJlY3Rpb25Jc0Zv
ckNvbHVtbnMgJiYgdW5yZXNvbHZlZFJvd1Bvc2l0aW9ucy5yZXF1aXJlc0F1dG9QbGFjZW1lbnQo
KSkpCiAgICAgICAgICAgICAgICAgYXV0b01ham9yQXhpc0F1dG9HcmlkSXRlbXMuYXBwZW5kKGNo
aWxkKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzcGVjaWZpZWRNYWpvckF4
aXNBdXRvR3JpZEl0ZW1zLmFwcGVuZChjaGlsZCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQotICAgICAgICBpbnNlcnRJdGVtSW50b0dyaWQoKmNoaWxkLCBHcmlkQ29vcmRpbmF0
ZSgqcm93UG9zaXRpb25zLCAqY29sdW1uUG9zaXRpb25zKSk7CisgICAgICAgIEdyaWRTcGFuIHJv
d1Bvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zy
b21TdHlsZSh1bnJlc29sdmVkUm93UG9zaXRpb25zLCBzdHlsZSgpKTsKKyAgICAgICAgR3JpZFNw
YW4gY29sdW1uUG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9z
aXRpb25zRnJvbVN0eWxlKHVucmVzb2x2ZWRDb2x1bW5Qb3NpdGlvbnMsIHN0eWxlKCkpOworICAg
ICAgICBpbnNlcnRJdGVtSW50b0dyaWQoKmNoaWxkLCBHcmlkQ29vcmRpbmF0ZShyb3dQb3NpdGlv
bnMsIGNvbHVtblBvc2l0aW9ucykpOwogICAgIH0KIAogICAgIEFTU0VSVChncmlkUm93Q291bnQo
KSA+PSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6ZXhwbGljaXRHcmlkUm93Q291bnQoc3R5bGUoKSkp
OwpAQCAtMTAwNCwyMiArMTAwOSwyMSBAQCB2b2lkIFJlbmRlckdyaWQ6OnBvcHVsYXRlRXhwbGlj
aXRHcmlkQW5kT3JkZXJJdGVyYXRvcigpCiAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gZmly
c3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgewog
ICAgICAgICBwb3B1bGF0b3IuY29sbGVjdENoaWxkKCpjaGlsZCk7CiAKLSAgICAgICAgLy8gVGhp
cyBmdW5jdGlvbiBieXBhc3NlcyB0aGUgY2FjaGUgKGNhY2hlZEdyaWRDb29yZGluYXRlKCkpIGFz
IGl0IGlzIHVzZWQgdG8gYnVpbGQgaXQuCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmlkU3Bh
bj4gcm93UG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRp
b25zRnJvbVN0eWxlKHN0eWxlKCksICpjaGlsZCwgRm9yUm93cyk7Ci0gICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxHcmlkU3Bhbj4gY29sdW1uUG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246
OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKHN0eWxlKCksICpjaGlsZCwgRm9yQ29sdW1u
cyk7Ci0KLSAgICAgICAgLy8gfHBvc2l0aW9uc3wgaXMgMCBpZiB3ZSBuZWVkIHRvIHJ1biB0aGUg
YXV0by1wbGFjZW1lbnQgYWxnb3JpdGhtLgotICAgICAgICBpZiAocm93UG9zaXRpb25zKQotICAg
ICAgICAgICAgbWF4aW11bVJvd0luZGV4ID0gc3RkOjptYXgobWF4aW11bVJvd0luZGV4LCByb3dQ
b3NpdGlvbnMtPnJlc29sdmVkRmluYWxQb3NpdGlvbi5uZXh0KCkudG9JbnQoKSk7Ci0gICAgICAg
IGVsc2UgeworICAgICAgICBhdXRvIHVucmVzb2x2ZWRSb3dQb3NpdGlvbnMgPSBHcmlkUmVzb2x2
ZWRQb3NpdGlvbjo6dW5yZXNvbHZlZFNwYW5Gcm9tU3R5bGUoc3R5bGUoKSwgKmNoaWxkLCBGb3JS
b3dzKTsKKyAgICAgICAgaWYgKCF1bnJlc29sdmVkUm93UG9zaXRpb25zLnJlcXVpcmVzQXV0b1Bs
YWNlbWVudCgpKSB7CisgICAgICAgICAgICBHcmlkU3BhbiByb3dQb3NpdGlvbnMgPSBHcmlkUmVz
b2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUodW5yZXNvbHZlZFJv
d1Bvc2l0aW9ucywgc3R5bGUoKSk7CisgICAgICAgICAgICBtYXhpbXVtUm93SW5kZXggPSBzdGQ6
Om1heChtYXhpbXVtUm93SW5kZXgsIHJvd1Bvc2l0aW9ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24u
bmV4dCgpLnRvSW50KCkpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gR3JvdyB0
aGUgZ3JpZCBmb3IgaXRlbXMgd2l0aCBhIGRlZmluaXRlIHJvdyBzcGFuLCBnZXR0aW5nIHRoZSBs
YXJnZXN0IHN1Y2ggc3Bhbi4KICAgICAgICAgICAgIEdyaWRTcGFuIHBvc2l0aW9ucyA9IEdyaWRS
ZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21BdXRvUGxhY2VtZW50UG9z
aXRpb24oc3R5bGUoKSwgKmNoaWxkLCBGb3JSb3dzLCBHcmlkUmVzb2x2ZWRQb3NpdGlvbigwKSk7
CiAgICAgICAgICAgICBtYXhpbXVtUm93SW5kZXggPSBzdGQ6Om1heChtYXhpbXVtUm93SW5kZXgs
IHBvc2l0aW9ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24ubmV4dCgpLnRvSW50KCkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKGNvbHVtblBvc2l0aW9ucykKLSAgICAgICAgICAgIG1heGltdW1D
b2x1bW5JbmRleCA9IHN0ZDo6bWF4KG1heGltdW1Db2x1bW5JbmRleCwgY29sdW1uUG9zaXRpb25z
LT5yZXNvbHZlZEZpbmFsUG9zaXRpb24ubmV4dCgpLnRvSW50KCkpOwotICAgICAgICBlbHNlIHsK
KyAgICAgICAgYXV0byB1bnJlc29sdmVkQ29sdW1uUG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9z
aXRpb246OnVucmVzb2x2ZWRTcGFuRnJvbVN0eWxlKHN0eWxlKCksICpjaGlsZCwgRm9yQ29sdW1u
cyk7CisgICAgICAgIGlmICghdW5yZXNvbHZlZENvbHVtblBvc2l0aW9ucy5yZXF1aXJlc0F1dG9Q
bGFjZW1lbnQoKSkgeworICAgICAgICAgICAgR3JpZFNwYW4gY29sdW1uUG9zaXRpb25zID0gR3Jp
ZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKHVucmVzb2x2
ZWRDb2x1bW5Qb3NpdGlvbnMsIHN0eWxlKCkpOworICAgICAgICAgICAgbWF4aW11bUNvbHVtbklu
ZGV4ID0gc3RkOjptYXgobWF4aW11bUNvbHVtbkluZGV4LCBjb2x1bW5Qb3NpdGlvbnMucmVzb2x2
ZWRGaW5hbFBvc2l0aW9uLm5leHQoKS50b0ludCgpKTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIC8vIEdyb3cgdGhlIGdyaWQgZm9yIGl0ZW1zIHdpdGggYSBkZWZpbml0ZSBjb2x1bW4g
c3BhbiwgZ2V0dGluZyB0aGUgbGFyZ2VzdCBzdWNoIHNwYW4uCiAgICAgICAgICAgICBHcmlkU3Bh
biBwb3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNG
cm9tQXV0b1BsYWNlbWVudFBvc2l0aW9uKHN0eWxlKCksICpjaGlsZCwgRm9yQ29sdW1ucywgR3Jp
ZFJlc29sdmVkUG9zaXRpb24oMCkpOwogICAgICAgICAgICAgbWF4aW11bUNvbHVtbkluZGV4ID0g
c3RkOjptYXgobWF4aW11bUNvbHVtbkluZGV4LCBwb3NpdGlvbnMucmVzb2x2ZWRGaW5hbFBvc2l0
aW9uLm5leHQoKS50b0ludCgpKTsKQEAgLTEwNTAsMTQgKzEwNTQsMTYgQEAgdm9pZCBSZW5kZXJH
cmlkOjpwbGFjZVNwZWNpZmllZE1ham9yQXhpc0l0ZW1zT25HcmlkKGNvbnN0IFZlY3RvcjxSZW5k
ZXJCb3gqPiYgYXUKICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZCwgRGVmYXVsdEhhc2g8
dW5zaWduZWQ+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2ln
bmVkPj4gbWlub3JBeGlzQ3Vyc29yczsKIAogICAgIGZvciAoYXV0byYgYXV0b0dyaWRJdGVtIDog
YXV0b0dyaWRJdGVtcykgewotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JpZFNwYW4+IG1ham9y
QXhpc1Bvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9u
c0Zyb21TdHlsZShzdHlsZSgpLCAqYXV0b0dyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWFqb3JBeGlz
RGlyZWN0aW9uKCkpOworICAgICAgICBhdXRvIHVucmVzb2x2ZWRNYWpvckF4aXNQb3NpdGlvbnMg
PSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6dW5yZXNvbHZlZFNwYW5Gcm9tU3R5bGUoc3R5bGUoKSwg
KmF1dG9HcmlkSXRlbSwgYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVjdGlvbigpKTsKKyAgICAg
ICAgQVNTRVJUKCF1bnJlc29sdmVkTWFqb3JBeGlzUG9zaXRpb25zLnJlcXVpcmVzQXV0b1BsYWNl
bWVudCgpKTsKKyAgICAgICAgR3JpZFNwYW4gbWFqb3JBeGlzUG9zaXRpb25zID0gR3JpZFJlc29s
dmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKHVucmVzb2x2ZWRNYWpv
ckF4aXNQb3NpdGlvbnMsIHN0eWxlKCkpOwogICAgICAgICBHcmlkU3BhbiBtaW5vckF4aXNQb3Np
dGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tQXV0
b1BsYWNlbWVudFBvc2l0aW9uKHN0eWxlKCksICphdXRvR3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRN
aW5vckF4aXNEaXJlY3Rpb24oKSwgR3JpZFJlc29sdmVkUG9zaXRpb24oMCkpOwotICAgICAgICB1
bnNpZ25lZCBtYWpvckF4aXNJbml0aWFsUG9zaXRpb24gPSBtYWpvckF4aXNQb3NpdGlvbnMtPnJl
c29sdmVkSW5pdGlhbFBvc2l0aW9uLnRvSW50KCk7CisgICAgICAgIHVuc2lnbmVkIG1ham9yQXhp
c0luaXRpYWxQb3NpdGlvbiA9IG1ham9yQXhpc1Bvc2l0aW9ucy5yZXNvbHZlZEluaXRpYWxQb3Np
dGlvbi50b0ludCgpOwogCi0gICAgICAgIEdyaWRJdGVyYXRvciBpdGVyYXRvcihtX2dyaWQsIGF1
dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSwgbWFqb3JBeGlzUG9zaXRpb25zLT5yZXNv
bHZlZEluaXRpYWxQb3NpdGlvbi50b0ludCgpLCBpc0dyaWRBdXRvRmxvd0RlbnNlID8gMCA6IG1p
bm9yQXhpc0N1cnNvcnMuZ2V0KG1ham9yQXhpc0luaXRpYWxQb3NpdGlvbikpOwotICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8R3JpZENvb3JkaW5hdGU+IGVtcHR5R3JpZEFyZWEgPSBpdGVyYXRvci5u
ZXh0RW1wdHlHcmlkQXJlYShtYWpvckF4aXNQb3NpdGlvbnMtPmludGVnZXJTcGFuKCksIG1pbm9y
QXhpc1Bvc2l0aW9ucy5pbnRlZ2VyU3BhbigpKTsKKyAgICAgICAgR3JpZEl0ZXJhdG9yIGl0ZXJh
dG9yKG1fZ3JpZCwgYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVjdGlvbigpLCBtYWpvckF4aXNQ
b3NpdGlvbnMucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24udG9JbnQoKSwgaXNHcmlkQXV0b0Zsb3dE
ZW5zZSA/IDAgOiBtaW5vckF4aXNDdXJzb3JzLmdldChtYWpvckF4aXNJbml0aWFsUG9zaXRpb24p
KTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdyaWRDb29yZGluYXRlPiBlbXB0eUdyaWRBcmVh
ID0gaXRlcmF0b3IubmV4dEVtcHR5R3JpZEFyZWEobWFqb3JBeGlzUG9zaXRpb25zLmludGVnZXJT
cGFuKCksIG1pbm9yQXhpc1Bvc2l0aW9ucy5pbnRlZ2VyU3BhbigpKTsKICAgICAgICAgaWYgKCFl
bXB0eUdyaWRBcmVhKQotICAgICAgICAgICAgZW1wdHlHcmlkQXJlYSA9IGNyZWF0ZUVtcHR5R3Jp
ZEFyZWFBdFNwZWNpZmllZFBvc2l0aW9uc091dHNpZGVHcmlkKCphdXRvR3JpZEl0ZW0sIGF1dG9Q
bGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSwgKm1ham9yQXhpc1Bvc2l0aW9ucyk7CisgICAg
ICAgICAgICBlbXB0eUdyaWRBcmVhID0gY3JlYXRlRW1wdHlHcmlkQXJlYUF0U3BlY2lmaWVkUG9z
aXRpb25zT3V0c2lkZUdyaWQoKmF1dG9HcmlkSXRlbSwgYXV0b1BsYWNlbWVudE1ham9yQXhpc0Rp
cmVjdGlvbigpLCBtYWpvckF4aXNQb3NpdGlvbnMpOwogICAgICAgICBpbnNlcnRJdGVtSW50b0dy
aWQoKmF1dG9HcmlkSXRlbSwgKmVtcHR5R3JpZEFyZWEpOwogCiAgICAgICAgIGlmICghaXNHcmlk
QXV0b0Zsb3dEZW5zZSkKQEAgLTEwODIsOCArMTA4OCw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxh
Y2VBdXRvTWFqb3JBeGlzSXRlbXNPbkdyaWQoY29uc3QgVmVjdG9yPFJlbmRlckJveCo+JiBhdXRv
R3JpCiAKIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VBdXRvTWFqb3JBeGlzSXRlbU9uR3JpZChSZW5k
ZXJCb3gmIGdyaWRJdGVtLCBBdXRvUGxhY2VtZW50Q3Vyc29yJiBhdXRvUGxhY2VtZW50Q3Vyc29y
KQogewotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmlkU3Bhbj4gbWlub3JBeGlzUG9zaXRpb25zID0g
R3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKHN0eWxl
KCksIGdyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWlub3JBeGlzRGlyZWN0aW9uKCkpOwotICAgIEFT
U0VSVCghR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxl
KHN0eWxlKCksIGdyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGlyZWN0aW9uKCkpKTsK
KyAgICBBU1NFUlQoR3JpZFJlc29sdmVkUG9zaXRpb246OnVucmVzb2x2ZWRTcGFuRnJvbVN0eWxl
KHN0eWxlKCksIGdyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGlyZWN0aW9uKCkpLnJl
cXVpcmVzQXV0b1BsYWNlbWVudCgpKTsKICAgICBHcmlkU3BhbiBtYWpvckF4aXNQb3NpdGlvbnMg
PSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tQXV0b1BsYWNl
bWVudFBvc2l0aW9uKHN0eWxlKCksIGdyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGly
ZWN0aW9uKCksIEdyaWRSZXNvbHZlZFBvc2l0aW9uKDApKTsKIAogICAgIGNvbnN0IHVuc2lnbmVk
IGVuZE9mTWFqb3JBeGlzID0gKGF1dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSA9PSBG
b3JDb2x1bW5zKSA/IGdyaWRDb2x1bW5Db3VudCgpIDogZ3JpZFJvd0NvdW50KCk7CkBAIC0xMDkx
LDE4ICsxMDk2LDIxIEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VBdXRvTWFqb3JBeGlzSXRlbU9u
R3JpZChSZW5kZXJCb3gmIGdyaWRJdGVtLCBBdXRvUGxhY2VtZW50CiAgICAgdW5zaWduZWQgbWlu
b3JBeGlzQXV0b1BsYWNlbWVudEN1cnNvciA9IGF1dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rp
b24oKSA9PSBGb3JDb2x1bW5zID8gYXV0b1BsYWNlbWVudEN1cnNvci5maXJzdCA6IGF1dG9QbGFj
ZW1lbnRDdXJzb3Iuc2Vjb25kOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEdyaWRDb29yZGluYXRl
PiBlbXB0eUdyaWRBcmVhOwotICAgIGlmIChtaW5vckF4aXNQb3NpdGlvbnMpIHsKKyAgICBhdXRv
IHVucmVzb2x2ZWRNaW5vckF4aXNQb3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6dW5y
ZXNvbHZlZFNwYW5Gcm9tU3R5bGUoc3R5bGUoKSwgZ3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNaW5v
ckF4aXNEaXJlY3Rpb24oKSk7CisgICAgaWYgKCF1bnJlc29sdmVkTWlub3JBeGlzUG9zaXRpb25z
LnJlcXVpcmVzQXV0b1BsYWNlbWVudCgpKSB7CisgICAgICAgIEdyaWRTcGFuIG1pbm9yQXhpc1Bv
c2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21T
dHlsZSh1bnJlc29sdmVkTWlub3JBeGlzUG9zaXRpb25zLCBzdHlsZSgpKTsKKwogICAgICAgICAv
LyBNb3ZlIHRvIHRoZSBuZXh0IHRyYWNrIGluIG1ham9yIGF4aXMgaWYgaW5pdGlhbCBwb3NpdGlv
biBpbiBtaW5vciBheGlzIGlzIGJlZm9yZSBhdXRvLXBsYWNlbWVudCBjdXJzb3IuCi0gICAgICAg
IGlmIChtaW5vckF4aXNQb3NpdGlvbnMtPnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLnRvSW50KCkg
PCBtaW5vckF4aXNBdXRvUGxhY2VtZW50Q3Vyc29yKQorICAgICAgICBpZiAobWlub3JBeGlzUG9z
aXRpb25zLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLnRvSW50KCkgPCBtaW5vckF4aXNBdXRvUGxh
Y2VtZW50Q3Vyc29yKQogICAgICAgICAgICAgbWFqb3JBeGlzQXV0b1BsYWNlbWVudEN1cnNvcisr
OwogCiAgICAgICAgIGlmIChtYWpvckF4aXNBdXRvUGxhY2VtZW50Q3Vyc29yIDwgZW5kT2ZNYWpv
ckF4aXMpIHsKLSAgICAgICAgICAgIEdyaWRJdGVyYXRvciBpdGVyYXRvcihtX2dyaWQsIGF1dG9Q
bGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24oKSwgbWlub3JBeGlzUG9zaXRpb25zLT5yZXNvbHZl
ZEluaXRpYWxQb3NpdGlvbi50b0ludCgpLCBtYWpvckF4aXNBdXRvUGxhY2VtZW50Q3Vyc29yKTsK
LSAgICAgICAgICAgIGVtcHR5R3JpZEFyZWEgPSBpdGVyYXRvci5uZXh0RW1wdHlHcmlkQXJlYSht
aW5vckF4aXNQb3NpdGlvbnMtPmludGVnZXJTcGFuKCksIG1ham9yQXhpc1Bvc2l0aW9ucy5pbnRl
Z2VyU3BhbigpKTsKKyAgICAgICAgICAgIEdyaWRJdGVyYXRvciBpdGVyYXRvcihtX2dyaWQsIGF1
dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24oKSwgbWlub3JBeGlzUG9zaXRpb25zLnJlc29s
dmVkSW5pdGlhbFBvc2l0aW9uLnRvSW50KCksIG1ham9yQXhpc0F1dG9QbGFjZW1lbnRDdXJzb3Ip
OworICAgICAgICAgICAgZW1wdHlHcmlkQXJlYSA9IGl0ZXJhdG9yLm5leHRFbXB0eUdyaWRBcmVh
KG1pbm9yQXhpc1Bvc2l0aW9ucy5pbnRlZ2VyU3BhbigpLCBtYWpvckF4aXNQb3NpdGlvbnMuaW50
ZWdlclNwYW4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWVtcHR5R3JpZEFyZWEpCi0g
ICAgICAgICAgICBlbXB0eUdyaWRBcmVhID0gY3JlYXRlRW1wdHlHcmlkQXJlYUF0U3BlY2lmaWVk
UG9zaXRpb25zT3V0c2lkZUdyaWQoZ3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJl
Y3Rpb24oKSwgKm1pbm9yQXhpc1Bvc2l0aW9ucyk7CisgICAgICAgICAgICBlbXB0eUdyaWRBcmVh
ID0gY3JlYXRlRW1wdHlHcmlkQXJlYUF0U3BlY2lmaWVkUG9zaXRpb25zT3V0c2lkZUdyaWQoZ3Jp
ZEl0ZW0sIGF1dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24oKSwgbWlub3JBeGlzUG9zaXRp
b25zKTsKICAgICB9IGVsc2UgewogICAgICAgICBHcmlkU3BhbiBtaW5vckF4aXNQb3NpdGlvbnMg
PSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tQXV0b1BsYWNl
bWVudFBvc2l0aW9uKHN0eWxlKCksIGdyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWlub3JBeGlzRGly
ZWN0aW9uKCksIEdyaWRSZXNvbHZlZFBvc2l0aW9uKDApKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRQb3NpdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL0dyaWRQb3NpdGlvbi5oCmluZGV4IDVhMGFmOWVlNDc2MGI0Y2M0OTQz
MjE0Y2FkY2JmZDk1NmE1ZWJjZmMuLjA3NGFlNjhlMjg4N2NkNjU0MTljOWJkOTM0NGQzYmY2NGRl
YTE4NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUG9z
aXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFBvc2l0aW9u
LmgKQEAgLTQ1LDYgKzQ1LDEzIEBAIGVudW0gR3JpZFBvc2l0aW9uVHlwZSB7CiAgICAgTmFtZWRH
cmlkQXJlYVBvc2l0aW9uIC8vIDxpZGVudD4KIH07CiAKK2VudW0gR3JpZFBvc2l0aW9uU2lkZSB7
CisgICAgQ29sdW1uU3RhcnRTaWRlLAorICAgIENvbHVtbkVuZFNpZGUsCisgICAgUm93U3RhcnRT
aWRlLAorICAgIFJvd0VuZFNpZGUKK307CisKIGNsYXNzIEdyaWRQb3NpdGlvbiB7CiBwdWJsaWM6
CiAgICAgR3JpZFBvc2l0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwCmluZGV4IDM1ZjliZmU2YTk0M2MxZGQ4
ZTYyNjVhNmY3NDBhOTZiMzIzZDg1M2QuLjIyYTg0YjI0NDNjNDI3YzI0NmVmZTg1OWUzZWM0YzEz
YWFmYTY0MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Hcmlk
UmVzb2x2ZWRQb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcApAQCAtNDgsNDkgKzQ4LDEyIEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc1N0YXJ0U2lkZShHcmlkUG9zaXRpb25TaWRlIHNpZGUpCiAgICAgcmV0dXJuIHNp
ZGUgPT0gQ29sdW1uU3RhcnRTaWRlIHx8IHNpZGUgPT0gUm93U3RhcnRTaWRlOwogfQogCi11bnNp
Z25lZCBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6ZXhwbGljaXRHcmlkQ29sdW1uQ291bnQoY29uc3Qg
UmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSkKLXsKLSAgICByZXR1cm4gc3RkOjptaW48
dW5zaWduZWQ+KGdyaWRDb250YWluZXJTdHlsZS5ncmlkQ29sdW1ucygpLnNpemUoKSwga0dyaWRN
YXhUcmFja3MpOwotfQotCi11bnNpZ25lZCBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6ZXhwbGljaXRH
cmlkUm93Q291bnQoY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSkKLXsKLSAg
ICByZXR1cm4gc3RkOjptaW48dW5zaWduZWQ+KGdyaWRDb250YWluZXJTdHlsZS5ncmlkUm93cygp
LnNpemUoKSwga0dyaWRNYXhUcmFja3MpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgZXhwbGljaXRH
cmlkU2l6ZUZvclNpZGUoY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgR3Jp
ZFBvc2l0aW9uU2lkZSBzaWRlKQotewotICAgIHJldHVybiBpc0NvbHVtblNpZGUoc2lkZSkgPyBH
cmlkUmVzb2x2ZWRQb3NpdGlvbjo6ZXhwbGljaXRHcmlkQ29sdW1uQ291bnQoZ3JpZENvbnRhaW5l
clN0eWxlKSA6IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpleHBsaWNpdEdyaWRSb3dDb3VudChncmlk
Q29udGFpbmVyU3R5bGUpOwotfQotCi1HcmlkU3BhbiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVz
b2x2ZUdyaWRQb3NpdGlvbnNGcm9tQXV0b1BsYWNlbWVudFBvc2l0aW9uKGNvbnN0IFJlbmRlclN0
eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIGNvbnN0IFJlbmRlckJveCYgZ3JpZEl0ZW0sIEdyaWRU
cmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9u
JiByZXNvbHZlZEluaXRpYWxQb3NpdGlvbikKLXsKLSAgICBHcmlkUG9zaXRpb24gaW5pdGlhbFBv
c2l0aW9uID0gKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IGdyaWRJdGVtLnN0eWxlKCkuZ3Jp
ZEl0ZW1Db2x1bW5TdGFydCgpIDogZ3JpZEl0ZW0uc3R5bGUoKS5ncmlkSXRlbVJvd1N0YXJ0KCk7
Ci0gICAgY29uc3QgR3JpZFBvc2l0aW9uU2lkZSBpbml0aWFsUG9zaXRpb25TaWRlID0gKGRpcmVj
dGlvbiA9PSBGb3JDb2x1bW5zKSA/IENvbHVtblN0YXJ0U2lkZSA6IFJvd1N0YXJ0U2lkZTsKLSAg
ICBHcmlkUG9zaXRpb24gZmluYWxQb3NpdGlvbiA9IChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykg
PyBncmlkSXRlbS5zdHlsZSgpLmdyaWRJdGVtQ29sdW1uRW5kKCkgOiBncmlkSXRlbS5zdHlsZSgp
LmdyaWRJdGVtUm93RW5kKCk7Ci0gICAgY29uc3QgR3JpZFBvc2l0aW9uU2lkZSBmaW5hbFBvc2l0
aW9uU2lkZSA9IChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyBDb2x1bW5FbmRTaWRlIDogUm93
RW5kU2lkZTsKLQotICAgIGFkanVzdEdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoZ3JpZENvbnRhaW5l
clN0eWxlLCBpbml0aWFsUG9zaXRpb24sIGZpbmFsUG9zaXRpb24sIGluaXRpYWxQb3NpdGlvblNp
ZGUsIGZpbmFsUG9zaXRpb25TaWRlKTsKLQotICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgb25seSBi
ZSB1c2VkIHdoZW4gYm90aCBwb3NpdGlvbnMgbmVlZCB0byBiZSByZXNvbHZlZCBhZ2FpbnN0IHRo
ZSBvcHBvc2l0ZSBvbmUuCi0gICAgQVNTRVJUKGluaXRpYWxQb3NpdGlvbi5zaG91bGRCZVJlc29s
dmVkQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oKSAmJiBmaW5hbFBvc2l0aW9uLnNob3VsZEJlUmVz
b2x2ZWRBZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbigpKTsKLQotICAgIEdyaWRSZXNvbHZlZFBvc2l0
aW9uIHJlc29sdmVkRmluYWxQb3NpdGlvbiA9IHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uOwotCi0g
ICAgaWYgKGluaXRpYWxQb3NpdGlvbi5pc1NwYW4oKSkKLSAgICAgICAgcmV0dXJuICpyZXNvbHZl
R3JpZFBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oZ3JpZENvbnRhaW5lclN0eWxlLCBy
ZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgaW5pdGlhbFBvc2l0aW9uLCBmaW5hbFBvc2l0aW9uU2lk
ZSk7Ci0gICAgZWxzZSBpZiAoZmluYWxQb3NpdGlvbi5pc1NwYW4oKSkKLSAgICAgICAgcmV0dXJu
ICpyZXNvbHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oZ3JpZENvbnRhaW5l
clN0eWxlLCByZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgZmluYWxQb3NpdGlvbiwgZmluYWxQb3Np
dGlvblNpZGUpOwotCi0gICAgcmV0dXJuIEdyaWRTcGFuKHJlc29sdmVkSW5pdGlhbFBvc2l0aW9u
LCByZXNvbHZlZEZpbmFsUG9zaXRpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IE5hbWVk
R3JpZExpbmVzTWFwJiBncmlkTGluZXNGb3JTaWRlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
R3JpZFBvc2l0aW9uU2lkZSBzaWRlKQorc3RhdGljIGNvbnN0IE5hbWVkR3JpZExpbmVzTWFwJiBn
cmlkTGluZXNGb3JTaWRlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgR3JpZFBvc2l0aW9uU2lk
ZSBzaWRlKQogewogICAgIHJldHVybiBpc0NvbHVtblNpZGUoc2lkZSkgPyBzdHlsZS5uYW1lZEdy
aWRDb2x1bW5MaW5lcygpIDogc3R5bGUubmFtZWRHcmlkUm93TGluZXMoKTsKIH0KIAotc3RhdGlj
IGlubGluZSBjb25zdCBTdHJpbmcgaW1wbGljaXROYW1lZEdyaWRMaW5lRm9yU2lkZShjb25zdCBT
dHJpbmcmIGxpbmVOYW1lLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCitzdGF0aWMgY29uc3QgU3Ry
aW5nIGltcGxpY2l0TmFtZWRHcmlkTGluZUZvclNpZGUoY29uc3QgU3RyaW5nJiBsaW5lTmFtZSwg
R3JpZFBvc2l0aW9uU2lkZSBzaWRlKQogewogICAgIHJldHVybiBsaW5lTmFtZSArIChpc1N0YXJ0
U2lkZShzaWRlKSA/ICItc3RhcnQiIDogIi1lbmQiKTsKIH0KQEAgLTEwMSw2NyArNjQsNjYgQEAg
c3RhdGljIGJvb2wgaXNOb25FeGlzdGVudE5hbWVkTGluZU9yQXJlYShjb25zdCBTdHJpbmcmIGxp
bmVOYW1lLCBjb25zdCBSZW5kZXJTdHkKICAgICByZXR1cm4gIWdyaWRMaW5lTmFtZXMuY29udGFp
bnMoaW1wbGljaXROYW1lZEdyaWRMaW5lRm9yU2lkZShsaW5lTmFtZSwgc2lkZSkpICYmICFncmlk
TGluZU5hbWVzLmNvbnRhaW5zKGxpbmVOYW1lKTsKIH0KIAotdm9pZCBHcmlkUmVzb2x2ZWRQb3Np
dGlvbjo6YWRqdXN0R3JpZFBvc2l0aW9uc0Zyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgZ3Jp
ZENvbnRhaW5lclN0eWxlLCBHcmlkUG9zaXRpb24mIGluaXRpYWxQb3NpdGlvbiwgR3JpZFBvc2l0
aW9uJiBmaW5hbFBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIGluaXRpYWxQb3NpdGlvblNpZGUs
IEdyaWRQb3NpdGlvblNpZGUgZmluYWxQb3NpdGlvblNpZGUpCitib29sIEdyaWRVbnJlc29sdmVk
U3Bhbjo6cmVxdWlyZXNBdXRvUGxhY2VtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbml0
aWFsUG9zaXRpb24uc2hvdWxkQmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkgJiYg
bV9maW5hbFBvc2l0aW9uLnNob3VsZEJlUmVzb2x2ZWRBZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbigp
OworfQorCit2b2lkIEdyaWRVbnJlc29sdmVkU3Bhbjo6YWRqdXN0R3JpZFBvc2l0aW9uc0Zyb21T
dHlsZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlKQogewotICAgIEFTU0VS
VChpc0NvbHVtblNpZGUoaW5pdGlhbFBvc2l0aW9uU2lkZSkgPT0gaXNDb2x1bW5TaWRlKGZpbmFs
UG9zaXRpb25TaWRlKSk7CisgICAgQVNTRVJUKGlzQ29sdW1uU2lkZShtX2luaXRpYWxQb3NpdGlv
blNpZGUpID09IGlzQ29sdW1uU2lkZShtX2ZpbmFsUG9zaXRpb25TaWRlKSk7CiAKICAgICAvLyBX
ZSBtdXN0IGhhbmRsZSB0aGUgcGxhY2VtZW50IGVycm9yIGhhbmRsaW5nIGNvZGUgaGVyZSBpbnN0
ZWFkIG9mIGluIHRoZSBTdHlsZUFkanVzdGVyIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0bwogICAg
IC8vIG92ZXJ3cml0ZSB0aGUgc3BlY2lmaWVkIHZhbHVlcy4KLSAgICBpZiAoaW5pdGlhbFBvc2l0
aW9uLmlzU3BhbigpICYmIGZpbmFsUG9zaXRpb24uaXNTcGFuKCkpCi0gICAgICAgIGZpbmFsUG9z
aXRpb24uc2V0QXV0b1Bvc2l0aW9uKCk7CisgICAgaWYgKG1faW5pdGlhbFBvc2l0aW9uLmlzU3Bh
bigpICYmIG1fZmluYWxQb3NpdGlvbi5pc1NwYW4oKSkKKyAgICAgICAgbV9maW5hbFBvc2l0aW9u
LnNldEF1dG9Qb3NpdGlvbigpOwogCiAgICAgLy8gVHJ5IHRvIGVhcmx5IGRldGVjdCB0aGUgY2Fz
ZSBvZiBub24gZXhpc3RpbmcgbmFtZWQgZ3JpZCBsaW5lcy4gVGhpcyB3YXkgd2UgY291bGQgYXNz
dW1lIGxhdGVyIHRoYXQKICAgICAvLyBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaXNQ
b3NpdGlvbkZyb21TdHlsZSgpIHdvbid0IHJlcXVpcmUgdGhlIGF1dG9wbGFjZW1lbnQgdG8gcnVu
LCBpLmUuLCBpdCdsbCBhbHdheXMgcmV0dXJuIGEKICAgICAvLyB2YWxpZCByZXNvbHZlZCBwb3Np
dGlvbi4KLSAgICBpZiAoaW5pdGlhbFBvc2l0aW9uLmlzTmFtZWRHcmlkQXJlYSgpICYmIGlzTm9u
RXhpc3RlbnROYW1lZExpbmVPckFyZWEoaW5pdGlhbFBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKSwg
Z3JpZENvbnRhaW5lclN0eWxlLCBpbml0aWFsUG9zaXRpb25TaWRlKSkKLSAgICAgICAgaW5pdGlh
bFBvc2l0aW9uLnNldEF1dG9Qb3NpdGlvbigpOworICAgIGlmIChtX2luaXRpYWxQb3NpdGlvbi5p
c05hbWVkR3JpZEFyZWEoKSAmJiBpc05vbkV4aXN0ZW50TmFtZWRMaW5lT3JBcmVhKG1faW5pdGlh
bFBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKSwgZ3JpZENvbnRhaW5lclN0eWxlLCBtX2luaXRpYWxQ
b3NpdGlvblNpZGUpKQorICAgICAgICBtX2luaXRpYWxQb3NpdGlvbi5zZXRBdXRvUG9zaXRpb24o
KTsKIAotICAgIGlmIChmaW5hbFBvc2l0aW9uLmlzTmFtZWRHcmlkQXJlYSgpICYmIGlzTm9uRXhp
c3RlbnROYW1lZExpbmVPckFyZWEoZmluYWxQb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCksIGdyaWRD
b250YWluZXJTdHlsZSwgZmluYWxQb3NpdGlvblNpZGUpKQotICAgICAgICBmaW5hbFBvc2l0aW9u
LnNldEF1dG9Qb3NpdGlvbigpOworICAgIGlmIChtX2ZpbmFsUG9zaXRpb24uaXNOYW1lZEdyaWRB
cmVhKCkgJiYgaXNOb25FeGlzdGVudE5hbWVkTGluZU9yQXJlYShtX2ZpbmFsUG9zaXRpb24ubmFt
ZWRHcmlkTGluZSgpLCBncmlkQ29udGFpbmVyU3R5bGUsIG1fZmluYWxQb3NpdGlvblNpZGUpKQor
ICAgICAgICBtX2ZpbmFsUG9zaXRpb24uc2V0QXV0b1Bvc2l0aW9uKCk7CiAKICAgICAvLyBJZiB0
aGUgZ3JpZCBpdGVtIGhhcyBhbiBhdXRvbWF0aWMgcG9zaXRpb24gYW5kIGEgZ3JpZCBzcGFuIGZv
ciBhIG5hbWVkIGxpbmUgaW4gYSBnaXZlbiBkaW1lbnNpb24sIGluc3RlYWQgdHJlYXQgdGhlIGdy
aWQgc3BhbiBhcyBvbmUuCi0gICAgaWYgKGluaXRpYWxQb3NpdGlvbi5pc0F1dG8oKSAmJiBmaW5h
bFBvc2l0aW9uLmlzU3BhbigpICYmICFmaW5hbFBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKS5pc051
bGwoKSkKLSAgICAgICAgZmluYWxQb3NpdGlvbi5zZXRTcGFuUG9zaXRpb24oMSwgU3RyaW5nKCkp
OwotICAgIGlmIChmaW5hbFBvc2l0aW9uLmlzQXV0bygpICYmIGluaXRpYWxQb3NpdGlvbi5pc1Nw
YW4oKSAmJiAhaW5pdGlhbFBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKS5pc051bGwoKSkKLSAgICAg
ICAgaW5pdGlhbFBvc2l0aW9uLnNldFNwYW5Qb3NpdGlvbigxLCBTdHJpbmcoKSk7CisgICAgaWYg
KG1faW5pdGlhbFBvc2l0aW9uLmlzQXV0bygpICYmIG1fZmluYWxQb3NpdGlvbi5pc1NwYW4oKSAm
JiAhbV9maW5hbFBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKS5pc051bGwoKSkKKyAgICAgICAgbV9m
aW5hbFBvc2l0aW9uLnNldFNwYW5Qb3NpdGlvbigxLCBTdHJpbmcoKSk7CisgICAgaWYgKG1fZmlu
YWxQb3NpdGlvbi5pc0F1dG8oKSAmJiBtX2luaXRpYWxQb3NpdGlvbi5pc1NwYW4oKSAmJiAhbV9p
bml0aWFsUG9zaXRpb24ubmFtZWRHcmlkTGluZSgpLmlzTnVsbCgpKQorICAgICAgICBtX2luaXRp
YWxQb3NpdGlvbi5zZXRTcGFuUG9zaXRpb24oMSwgU3RyaW5nKCkpOwogfQogCi1zdGQ6OnVuaXF1
ZV9wdHI8R3JpZFNwYW4+IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9u
c0Zyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBS
ZW5kZXJCb3gmIGdyaWRJdGVtLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQor
dW5zaWduZWQgR3JpZFJlc29sdmVkUG9zaXRpb246OmV4cGxpY2l0R3JpZENvbHVtbkNvdW50KGNv
bnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUpCiB7Ci0gICAgR3JpZFBvc2l0aW9u
IGluaXRpYWxQb3NpdGlvbiA9IChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyBncmlkSXRlbS5z
dHlsZSgpLmdyaWRJdGVtQ29sdW1uU3RhcnQoKSA6IGdyaWRJdGVtLnN0eWxlKCkuZ3JpZEl0ZW1S
b3dTdGFydCgpOwotICAgIGNvbnN0IEdyaWRQb3NpdGlvblNpZGUgaW5pdGlhbFBvc2l0aW9uU2lk
ZSA9IChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyBDb2x1bW5TdGFydFNpZGUgOiBSb3dTdGFy
dFNpZGU7Ci0gICAgR3JpZFBvc2l0aW9uIGZpbmFsUG9zaXRpb24gPSAoZGlyZWN0aW9uID09IEZv
ckNvbHVtbnMpID8gZ3JpZEl0ZW0uc3R5bGUoKS5ncmlkSXRlbUNvbHVtbkVuZCgpIDogZ3JpZEl0
ZW0uc3R5bGUoKS5ncmlkSXRlbVJvd0VuZCgpOwotICAgIGNvbnN0IEdyaWRQb3NpdGlvblNpZGUg
ZmluYWxQb3NpdGlvblNpZGUgPSAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gQ29sdW1uRW5k
U2lkZSA6IFJvd0VuZFNpZGU7Ci0KLSAgICBhZGp1c3RHcmlkUG9zaXRpb25zRnJvbVN0eWxlKGdy
aWRDb250YWluZXJTdHlsZSwgaW5pdGlhbFBvc2l0aW9uLCBmaW5hbFBvc2l0aW9uLCBpbml0aWFs
UG9zaXRpb25TaWRlLCBmaW5hbFBvc2l0aW9uU2lkZSk7Ci0KLSAgICAvLyBXZSBjYW4ndCBnZXQg
b3VyIGdyaWQgcG9zaXRpb25zIHdpdGhvdXQgcnVubmluZyB0aGUgYXV0byBwbGFjZW1lbnQgYWxn
b3JpdGhtLgotICAgIGlmIChpbml0aWFsUG9zaXRpb24uc2hvdWxkQmVSZXNvbHZlZEFnYWluc3RP
cHBvc2l0ZVBvc2l0aW9uKCkgJiYgZmluYWxQb3NpdGlvbi5zaG91bGRCZVJlc29sdmVkQWdhaW5z
dE9wcG9zaXRlUG9zaXRpb24oKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
IHN0ZDo6bWluPHVuc2lnbmVkPihncmlkQ29udGFpbmVyU3R5bGUuZ3JpZENvbHVtbnMoKS5zaXpl
KCksIGtHcmlkTWF4VHJhY2tzKTsKK30KIAotICAgIGlmIChpbml0aWFsUG9zaXRpb24uc2hvdWxk
QmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkpIHsKLSAgICAgICAgLy8gSW5mZXIg
dGhlIHBvc2l0aW9uIGZyb20gdGhlIGZpbmFsIHBvc2l0aW9uICgnYXV0byAvIDEnIG9yICdzcGFu
IDIgLyAzJyBjYXNlKS4KLSAgICAgICAgY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24gZmluYWxS
ZXNvbHZlZFBvc2l0aW9uID0gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFp
bmVyU3R5bGUsIGZpbmFsUG9zaXRpb24sIGZpbmFsUG9zaXRpb25TaWRlKTsKLSAgICAgICAgcmV0
dXJuIHJlc29sdmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihncmlkQ29udGFp
bmVyU3R5bGUsIGZpbmFsUmVzb2x2ZWRQb3NpdGlvbiwgaW5pdGlhbFBvc2l0aW9uLCBpbml0aWFs
UG9zaXRpb25TaWRlKTsKLSAgICB9Cit1bnNpZ25lZCBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6ZXhw
bGljaXRHcmlkUm93Q291bnQoY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSkK
K3sKKyAgICByZXR1cm4gc3RkOjptaW48dW5zaWduZWQ+KGdyaWRDb250YWluZXJTdHlsZS5ncmlk
Um93cygpLnNpemUoKSwga0dyaWRNYXhUcmFja3MpOworfQogCi0gICAgaWYgKGZpbmFsUG9zaXRp
b24uc2hvdWxkQmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkpIHsKLSAgICAgICAg
Ly8gSW5mZXIgb3VyIHBvc2l0aW9uIGZyb20gdGhlIGluaXRpYWwgcG9zaXRpb24gKCcxIC8gYXV0
bycgb3IgJzMgLyBzcGFuIDInIGNhc2UpLgotICAgICAgICBjb25zdCBHcmlkUmVzb2x2ZWRQb3Np
dGlvbiBpbml0aWFsUmVzb2x2ZWRQb3NpdGlvbiA9IHJlc29sdmVHcmlkUG9zaXRpb25Gcm9tU3R5
bGUoZ3JpZENvbnRhaW5lclN0eWxlLCBpbml0aWFsUG9zaXRpb24sIGluaXRpYWxQb3NpdGlvblNp
ZGUpOwotICAgICAgICByZXR1cm4gcmVzb2x2ZUdyaWRQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBv
c2l0aW9uKGdyaWRDb250YWluZXJTdHlsZSwgaW5pdGlhbFJlc29sdmVkUG9zaXRpb24sIGZpbmFs
UG9zaXRpb24sIGZpbmFsUG9zaXRpb25TaWRlKTsKLSAgICB9CitzdGF0aWMgdW5zaWduZWQgZXhw
bGljaXRHcmlkU2l6ZUZvclNpZGUoY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHls
ZSwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQoreworICAgIHJldHVybiBpc0NvbHVtblNpZGUoc2lk
ZSkgPyBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6ZXhwbGljaXRHcmlkQ29sdW1uQ291bnQoZ3JpZENv
bnRhaW5lclN0eWxlKSA6IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpleHBsaWNpdEdyaWRSb3dDb3Vu
dChncmlkQ29udGFpbmVyU3R5bGUpOworfQogCi0gICAgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVz
b2x2ZWRJbml0aWFsUG9zaXRpb24gPSByZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKGdyaWRD
b250YWluZXJTdHlsZSwgaW5pdGlhbFBvc2l0aW9uLCBpbml0aWFsUG9zaXRpb25TaWRlKTsKLSAg
ICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiByZXNvbHZlZEZpbmFsUG9zaXRpb24gPSByZXNvbHZlR3Jp
ZFBvc2l0aW9uRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgZmluYWxQb3NpdGlvbiwgZmlu
YWxQb3NpdGlvblNpZGUpOworc3RhdGljIEdyaWRSZXNvbHZlZFBvc2l0aW9uIGFkanVzdEdyaWRQ
b3NpdGlvbkZvclJvd0VuZENvbHVtbkVuZFNpZGUodW5zaWduZWQgcmVzb2x2ZWRQb3NpdGlvbikK
K3sKKyAgICByZXR1cm4gcmVzb2x2ZWRQb3NpdGlvbiA/IEdyaWRSZXNvbHZlZFBvc2l0aW9uKHJl
c29sdmVkUG9zaXRpb24gLSAxKSA6IEdyaWRSZXNvbHZlZFBvc2l0aW9uKDApOworfQogCi0gICAg
Ly8gSWYgJ2dyaWQtcm93LWVuZCcgc3BlY2lmaWVzIGEgbGluZSBhdCBvciBiZWZvcmUgdGhhdCBz
cGVjaWZpZWQgYnkgJ2dyaWQtcm93LXN0YXJ0JywgaXQgY29tcHV0ZXMgdG8gJ3NwYW4gMScuCi0g
ICAgaWYgKHJlc29sdmVkRmluYWxQb3NpdGlvbiA8IHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKQot
ICAgICAgICByZXNvbHZlZEZpbmFsUG9zaXRpb24gPSByZXNvbHZlZEluaXRpYWxQb3NpdGlvbjsK
K3N0YXRpYyBHcmlkUmVzb2x2ZWRQb3NpdGlvbiBhZGp1c3RHcmlkUG9zaXRpb25Gb3JTaWRlKHVu
c2lnbmVkIHJlc29sdmVkUG9zaXRpb24sIEdyaWRQb3NpdGlvblNpZGUgc2lkZSkKK3sKKyAgICAv
LyBBbiBpdGVtIGZpbmlzaGluZyBvbiB0aGUgTi10aCBsaW5lIGJlbG9uZ3MgdG8gdGhlIE4tMS10
aCBjZWxsLgorICAgIGlmIChzaWRlID09IENvbHVtbkVuZFNpZGUgfHwgc2lkZSA9PSBSb3dFbmRT
aWRlKQorICAgICAgICByZXR1cm4gYWRqdXN0R3JpZFBvc2l0aW9uRm9yUm93RW5kQ29sdW1uRW5k
U2lkZShyZXNvbHZlZFBvc2l0aW9uKTsKIAotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEdy
aWRTcGFuPihyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uKTsK
KyAgICByZXR1cm4gR3JpZFJlc29sdmVkUG9zaXRpb24ocmVzb2x2ZWRQb3NpdGlvbik7CiB9CiAK
LUdyaWRSZXNvbHZlZFBvc2l0aW9uIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlTmFtZWRH
cmlkTGluZVBvc2l0aW9uRnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVy
U3R5bGUsIGNvbnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIEdyaWRQb3NpdGlvblNpZGUgc2lk
ZSkKK3N0YXRpYyBHcmlkUmVzb2x2ZWRQb3NpdGlvbiByZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0
aW9uRnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIGNvbnN0
IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIEdyaWRQb3NpdGlvblNpZGUgc2lkZSkKIHsKICAgICBB
U1NFUlQoIXBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKS5pc051bGwoKSk7CiAKQEAgLTE3MSw3ICsx
MzMsNyBAQCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2
ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkZyb21TdHlsZQogICAgICAgICBpZiAocG9zaXRpb24uaXNQ
b3NpdGl2ZSgpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGxhc3RMaW5lID0gZXhwbGljaXRHcmlkU2l6ZUZvclNpZGUoZ3JpZENvbnRhaW5lclN0eWxlLCBz
aWRlKTsKLSAgICAgICAgcmV0dXJuIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjphZGp1c3RHcmlkUG9z
aXRpb25Gb3JTaWRlKGxhc3RMaW5lLCBzaWRlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdEdyaWRQ
b3NpdGlvbkZvclNpZGUobGFzdExpbmUsIHNpZGUpOwogICAgIH0KIAogICAgIHVuc2lnbmVkIG5h
bWVkR3JpZExpbmVJbmRleDsKQEAgLTE3OSwxMCArMTQxLDExMCBAQCBHcmlkUmVzb2x2ZWRQb3Np
dGlvbiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkZy
b21TdHlsZQogICAgICAgICBuYW1lZEdyaWRMaW5lSW5kZXggPSBzdGQ6Om1pbjx1bnNpZ25lZD4o
cG9zaXRpb24uaW50ZWdlclBvc2l0aW9uKCksIGl0LT52YWx1ZS5zaXplKCkpIC0gMTsKICAgICBl
bHNlCiAgICAgICAgIG5hbWVkR3JpZExpbmVJbmRleCA9IHN0ZDo6bWF4PGludD4oMCwgaXQtPnZh
bHVlLnNpemUoKSAtIGFicyhwb3NpdGlvbi5pbnRlZ2VyUG9zaXRpb24oKSkpOwotICAgIHJldHVy
biBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6YWRqdXN0R3JpZFBvc2l0aW9uRm9yU2lkZShpdC0+dmFs
dWVbbmFtZWRHcmlkTGluZUluZGV4XSwgc2lkZSk7CisgICAgcmV0dXJuIGFkanVzdEdyaWRQb3Np
dGlvbkZvclNpZGUoaXQtPnZhbHVlW25hbWVkR3JpZExpbmVJbmRleF0sIHNpZGUpOworfQorCitz
dGF0aWMgaW5saW5lIHVuc2lnbmVkIGZpcnN0TmFtZWRHcmlkTGluZUJlZm9yZVBvc2l0aW9uKHVu
c2lnbmVkIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBncmlkTGluZXMpCit7Cisg
ICAgLy8gVGhlIGdyaWQgbGluZSBpbmVxdWFsaXR5IG5lZWRzIHRvIGJlIHN0cmljdCAod2hpY2gg
ZG9lc24ndCBtYXRjaCB0aGUgYWZ0ZXIgLyBlbmQgY2FzZSkgYmVjYXVzZSB8cG9zaXRpb258IGlz
CisgICAgLy8gYWxyZWFkeSBjb252ZXJ0ZWQgdG8gYW4gaW5kZXggaW4gb3VyIGdyaWQgcmVwcmVz
ZW50YXRpb24gKGllIG9uZSB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBncmlkIGxpbmUgdG8gYWNjb3Vu
dCBmb3IKKyAgICAvLyB0aGUgc2lkZSkuCisgICAgdW5zaWduZWQgZmlyc3RMaW5lQmVmb3JlUG9z
aXRpb25JbmRleCA9IDA7CisgICAgYXV0byBmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiA9IHN0ZDo6
bG93ZXJfYm91bmQoZ3JpZExpbmVzLmJlZ2luKCksIGdyaWRMaW5lcy5lbmQoKSwgcG9zaXRpb24p
OworICAgIGlmIChmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiAhPSBncmlkTGluZXMuZW5kKCkpIHsK
KyAgICAgICAgaWYgKCpmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiA+IHBvc2l0aW9uICYmIGZpcnN0
TGluZUJlZm9yZVBvc2l0aW9uICE9IGdyaWRMaW5lcy5iZWdpbigpKQorICAgICAgICAgICAgLS1m
aXJzdExpbmVCZWZvcmVQb3NpdGlvbjsKKworICAgICAgICBmaXJzdExpbmVCZWZvcmVQb3NpdGlv
bkluZGV4ID0gZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gLSBncmlkTGluZXMuYmVnaW4oKTsKKyAg
ICB9CisgICAgcmV0dXJuIGZpcnN0TGluZUJlZm9yZVBvc2l0aW9uSW5kZXg7Cit9CisKK3N0YXRp
YyBHcmlkU3BhbiByZXNvbHZlUm93U3RhcnRDb2x1bW5TdGFydE5hbWVkR3JpZExpbmVQb3NpdGlv
bkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNv
bHZlZE9wcG9zaXRlUG9zaXRpb24sIGNvbnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0
IFZlY3Rvcjx1bnNpZ25lZD4mIGdyaWRMaW5lcykKK3sKKyAgICB1bnNpZ25lZCBncmlkTGluZUlu
ZGV4ID0gc3RkOjptYXg8aW50PigwLCBmaXJzdE5hbWVkR3JpZExpbmVCZWZvcmVQb3NpdGlvbihy
ZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24udG9JbnQoKSwgZ3JpZExpbmVzKSAtIHBvc2l0aW9uLnNw
YW5Qb3NpdGlvbigpICsgMSk7CisgICAgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZWRHcmlk
TGluZVBvc2l0aW9uID0gR3JpZFJlc29sdmVkUG9zaXRpb24oZ3JpZExpbmVzW2dyaWRMaW5lSW5k
ZXhdKTsKKyAgICByZXR1cm4gR3JpZFNwYW4oc3RkOjptaW48R3JpZFJlc29sdmVkUG9zaXRpb24+
KHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKSwgcmVz
b2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsKK30KKworc3RhdGljIEdyaWRTcGFuIHJlc29sdmVSb3dF
bmRDb2x1bW5FbmROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihj
b25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBjb25z
dCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBncmlkTGlu
ZXMpCit7CisgICAgQVNTRVJUKGdyaWRMaW5lcy5zaXplKCkpOworICAgIHVuc2lnbmVkIGZpcnN0
TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbkluZGV4ID0gZ3JpZExpbmVzLnNpemUoKSAtIDE7Cisg
ICAgY29uc3QgdW5zaWduZWQqIGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbiA9IHN0ZDo6
dXBwZXJfYm91bmQoZ3JpZExpbmVzLmJlZ2luKCksIGdyaWRMaW5lcy5lbmQoKSwgcmVzb2x2ZWRP
cHBvc2l0ZVBvc2l0aW9uKTsKKyAgICBpZiAoZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0aW9u
ICE9IGdyaWRMaW5lcy5lbmQoKSkKKyAgICAgICAgZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0ZVBvc2l0
aW9uSW5kZXggPSBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb24gLSBncmlkTGluZXMuYmVn
aW4oKTsKKworICAgIHVuc2lnbmVkIGdyaWRMaW5lSW5kZXggPSBzdGQ6Om1pbjx1bnNpZ25lZD4o
Z3JpZExpbmVzLnNpemUoKSAtIDEsIGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbkluZGV4
ICsgcG9zaXRpb24uc3BhblBvc2l0aW9uKCkgLSAxKTsKKyAgICBHcmlkUmVzb2x2ZWRQb3NpdGlv
biByZXNvbHZlZEdyaWRMaW5lUG9zaXRpb24gPSBhZGp1c3RHcmlkUG9zaXRpb25Gb3JSb3dFbmRD
b2x1bW5FbmRTaWRlKGdyaWRMaW5lc1tncmlkTGluZUluZGV4XSk7CisgICAgaWYgKHJlc29sdmVk
R3JpZExpbmVQb3NpdGlvbiA8IHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbikKKyAgICAgICAgcmVz
b2x2ZWRHcmlkTGluZVBvc2l0aW9uID0gcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uOworICAgIHJl
dHVybiBHcmlkU3BhbihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHJlc29sdmVkR3JpZExpbmVQ
b3NpdGlvbik7Cit9CisKK3N0YXRpYyBHcmlkU3BhbiByZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0
aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWlu
ZXJTdHlsZSwgY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29sdmVkT3Bwb3NpdGVQb3Np
dGlvbiwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBzaWRl
KQoreworICAgIEFTU0VSVChwb3NpdGlvbi5pc1NwYW4oKSk7CisgICAgQVNTRVJUKCFwb3NpdGlv
bi5uYW1lZEdyaWRMaW5lKCkuaXNOdWxsKCkpOworICAgIC8vIE5lZ2F0aXZlIHBvc2l0aW9ucyBh
cmUgbm90IGFsbG93ZWQgcGVyIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBzaG91bGQgaGF2ZSBiZWVu
IGhhbmRsZWQgZHVyaW5nIHBhcnNpbmcuCisgICAgQVNTRVJUKHBvc2l0aW9uLnNwYW5Qb3NpdGlv
bigpID4gMCk7CisKKyAgICBjb25zdCBOYW1lZEdyaWRMaW5lc01hcCYgZ3JpZExpbmVzTmFtZXMg
PSBpc0NvbHVtblNpZGUoc2lkZSkgPyBncmlkQ29udGFpbmVyU3R5bGUubmFtZWRHcmlkQ29sdW1u
TGluZXMoKSA6IGdyaWRDb250YWluZXJTdHlsZS5uYW1lZEdyaWRSb3dMaW5lcygpOworICAgIE5h
bWVkR3JpZExpbmVzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGdyaWRMaW5lc05hbWVzLmZpbmQo
cG9zaXRpb24ubmFtZWRHcmlkTGluZSgpKTsKKworICAgIC8vIElmIHRoZXJlIGlzIG5vIG5hbWVk
IGdyaWQgbGluZSBvZiB0aGF0IG5hbWUsIHdlIHJlc29sdmUgdGhlIHBvc2l0aW9uIHRvICdhdXRv
JyAod2hpY2ggaXMgZXF1aXZhbGVudCB0byAnc3BhbiAxJyBpbiB0aGlzIGNhc2UpLgorICAgIC8v
IFNlZSBodHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy93d3ctc3R5bGUvMjAxM0p1
bi8wMzk0Lmh0bWwuCisgICAgaWYgKGl0ID09IGdyaWRMaW5lc05hbWVzLmVuZCgpKQorICAgICAg
ICByZXR1cm4gR3JpZFNwYW4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9z
aXRlUG9zaXRpb24pOworCisgICAgaWYgKHNpZGUgPT0gUm93U3RhcnRTaWRlIHx8IHNpZGUgPT0g
Q29sdW1uU3RhcnRTaWRlKQorICAgICAgICByZXR1cm4gcmVzb2x2ZVJvd1N0YXJ0Q29sdW1uU3Rh
cnROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihyZXNvbHZlZE9w
cG9zaXRlUG9zaXRpb24sIHBvc2l0aW9uLCBpdC0+dmFsdWUpOworCisgICAgcmV0dXJuIHJlc29s
dmVSb3dFbmRDb2x1bW5FbmROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3Np
dGlvbihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHBvc2l0aW9uLCBpdC0+dmFsdWUpOworfQor
CitzdGF0aWMgR3JpZFNwYW4gcmVzb2x2ZUdyaWRQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0
aW9uKGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIGNvbnN0IEdyaWRSZXNv
bHZlZFBvc2l0aW9uJiByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIGNvbnN0IEdyaWRQb3NpdGlv
biYgcG9zaXRpb24sIEdyaWRQb3NpdGlvblNpZGUgc2lkZSkKK3sKKyAgICBpZiAocG9zaXRpb24u
aXNBdXRvKCkpCisgICAgICAgIHJldHVybiBHcmlkU3BhbihyZXNvbHZlZE9wcG9zaXRlUG9zaXRp
b24sIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CisKKyAgICBBU1NFUlQocG9zaXRpb24uaXNT
cGFuKCkpOworICAgIEFTU0VSVChwb3NpdGlvbi5zcGFuUG9zaXRpb24oKSA+IDApOworCisgICAg
aWYgKCFwb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCkuaXNOdWxsKCkpIHsKKyAgICAgICAgLy8gc3Bh
biAyICdjJyAtPiB3ZSBuZWVkIHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIGdyaWQgbGluZSBiZWZv
cmUgLyBhZnRlciBvdXIgb3Bwb3NpdGUgcG9zaXRpb24uCisgICAgICAgIHJldHVybiByZXNvbHZl
TmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oZ3JpZENvbnRhaW5l
clN0eWxlLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHBvc2l0aW9uLCBzaWRlKTsKKyAgICB9
CisKKyAgICAvLyAnc3BhbiAxJyBpcyBjb250YWluZWQgaW5zaWRlIGEgc2luZ2xlIGdyaWQgdHJh
Y2sgcmVnYXJkbGVzcyBvZiB0aGUgZGlyZWN0aW9uLgorICAgIC8vIFRoYXQncyB3aHkgdGhlIENT
UyBzcGFuIHZhbHVlIGlzIG9uZSBtb3JlIHRoYW4gdGhlIG9mZnNldCB3ZSBhcHBseS4KKyAgICB1
bnNpZ25lZCBwb3NpdGlvbk9mZnNldCA9IHBvc2l0aW9uLnNwYW5Qb3NpdGlvbigpIC0gMTsKKyAg
ICBpZiAoaXNTdGFydFNpZGUoc2lkZSkpIHsKKyAgICAgICAgdW5zaWduZWQgaW5pdGlhbFJlc29s
dmVkUG9zaXRpb24gPSBzdGQ6Om1heDxpbnQ+KDAsIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbi50
b0ludCgpIC0gcG9zaXRpb25PZmZzZXQpOworICAgICAgICByZXR1cm4gR3JpZFNwYW4oaW5pdGlh
bFJlc29sdmVkUG9zaXRpb24sIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CisgICAgfQorCisg
ICAgcmV0dXJuIEdyaWRTcGFuKHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgcmVzb2x2ZWRPcHBv
c2l0ZVBvc2l0aW9uLnRvSW50KCkgKyBwb3NpdGlvbk9mZnNldCk7Cit9CisKK0dyaWRTcGFuIEdy
aWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21BdXRvUGxhY2VtZW50
UG9zaXRpb24oY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgY29uc3QgUmVu
ZGVyQm94JiBncmlkSXRlbSwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29u
c3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKQoreworICAg
IEdyaWRVbnJlc29sdmVkU3BhbiB1bnJlc29sdmVkU3BhbiA9IHVucmVzb2x2ZWRTcGFuRnJvbVN0
eWxlKGdyaWRDb250YWluZXJTdHlsZSwgZ3JpZEl0ZW0sIGRpcmVjdGlvbik7CisKKyAgICAvLyBU
aGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgdXNlZCB3aGVuIGJvdGggcG9zaXRpb25zIG5lZWQgdG8g
YmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgb3Bwb3NpdGUgb25lLgorICAgIEFTU0VSVCh1bnJlc29s
dmVkU3Bhbi5yZXF1aXJlc0F1dG9QbGFjZW1lbnQoKSk7CisKKyAgICBHcmlkUmVzb2x2ZWRQb3Np
dGlvbiByZXNvbHZlZEZpbmFsUG9zaXRpb24gPSByZXNvbHZlZEluaXRpYWxQb3NpdGlvbjsKKwor
ICAgIGlmICh1bnJlc29sdmVkU3Bhbi5pbml0aWFsUG9zaXRpb24oKS5pc1NwYW4oKSkKKyAgICAg
ICAgcmV0dXJuIHJlc29sdmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihncmlk
Q29udGFpbmVyU3R5bGUsIHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCB1bnJlc29sdmVkU3Bhbi5p
bml0aWFsUG9zaXRpb24oKSwgdW5yZXNvbHZlZFNwYW4uZmluYWxQb3NpdGlvblNpZGUoKSk7Cisg
ICAgaWYgKHVucmVzb2x2ZWRTcGFuLmZpbmFsUG9zaXRpb24oKS5pc1NwYW4oKSkKKyAgICAgICAg
cmV0dXJuIHJlc29sdmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihncmlkQ29u
dGFpbmVyU3R5bGUsIHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCB1bnJlc29sdmVkU3Bhbi5maW5h
bFBvc2l0aW9uKCksIHVucmVzb2x2ZWRTcGFuLmZpbmFsUG9zaXRpb25TaWRlKCkpOworCisgICAg
cmV0dXJuIEdyaWRTcGFuKHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCByZXNvbHZlZEZpbmFsUG9z
aXRpb24pOwogfQogCi1HcmlkUmVzb2x2ZWRQb3NpdGlvbiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6
cmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRh
aW5lclN0eWxlLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRl
IHNpZGUpCitzdGF0aWMgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZUdyaWRQb3NpdGlvbkZy
b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBHcmlk
UG9zaXRpb24mIHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCiB7CiAgICAgc3dpdGNo
IChwb3NpdGlvbi50eXBlKCkpIHsKICAgICBjYXNlIEV4cGxpY2l0UG9zaXRpb246IHsKQEAgLTE5
Myw3ICsyNTUsNyBAQCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6
cmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShjb25zdCBSZQogCiAgICAgICAgIC8vIEhhbmRs
ZSA8aW50ZWdlcj4gZXhwbGljaXQgcG9zaXRpb24uCiAgICAgICAgIGlmIChwb3NpdGlvbi5pc1Bv
c2l0aXZlKCkpCi0gICAgICAgICAgICByZXR1cm4gR3JpZFJlc29sdmVkUG9zaXRpb246OmFkanVz
dEdyaWRQb3NpdGlvbkZvclNpZGUocG9zaXRpb24uaW50ZWdlclBvc2l0aW9uKCkgLSAxLCBzaWRl
KTsKKyAgICAgICAgICAgIHJldHVybiBhZGp1c3RHcmlkUG9zaXRpb25Gb3JTaWRlKHBvc2l0aW9u
LmludGVnZXJQb3NpdGlvbigpIC0gMSwgc2lkZSk7CiAKICAgICAgICAgdW5zaWduZWQgcmVzb2x2
ZWRQb3NpdGlvbiA9IGFicyhwb3NpdGlvbi5pbnRlZ2VyUG9zaXRpb24oKSkgLSAxOwogICAgICAg
ICBjb25zdCB1bnNpZ25lZCBlbmRPZlRyYWNrID0gZXhwbGljaXRHcmlkU2l6ZUZvclNpZGUoZ3Jp
ZENvbnRhaW5lclN0eWxlLCBzaWRlKTsKQEAgLTIwMiw3ICsyNjQsNyBAQCBHcmlkUmVzb2x2ZWRQ
b3NpdGlvbiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHls
ZShjb25zdCBSZQogICAgICAgICBpZiAoZW5kT2ZUcmFjayA8IHJlc29sdmVkUG9zaXRpb24pCiAg
ICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICByZXR1cm4gR3JpZFJlc29sdmVkUG9zaXRp
b246OmFkanVzdEdyaWRQb3NpdGlvbkZvclNpZGUoZW5kT2ZUcmFjayAtIHJlc29sdmVkUG9zaXRp
b24sIHNpZGUpOworICAgICAgICByZXR1cm4gYWRqdXN0R3JpZFBvc2l0aW9uRm9yU2lkZShlbmRP
ZlRyYWNrIC0gcmVzb2x2ZWRQb3NpdGlvbiwgc2lkZSk7CiAgICAgfQogICAgIGNhc2UgTmFtZWRH
cmlkQXJlYVBvc2l0aW9uOgogICAgIHsKQEAgLTIxNSwxMyArMjc3LDEzIEBAIEdyaWRSZXNvbHZl
ZFBvc2l0aW9uIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0
eWxlKGNvbnN0IFJlCiAgICAgICAgIGNvbnN0IE5hbWVkR3JpZExpbmVzTWFwJiBncmlkTGluZU5h
bWVzID0gZ3JpZExpbmVzRm9yU2lkZShncmlkQ29udGFpbmVyU3R5bGUsIHNpZGUpOwogICAgICAg
ICBhdXRvIGltcGxpY2l0TGluZSA9IGdyaWRMaW5lTmFtZXMuZmluZChpbXBsaWNpdE5hbWVkR3Jp
ZExpbmVGb3JTaWRlKG5hbWVkR3JpZExpbmUsIHNpZGUpKTsKICAgICAgICAgaWYgKGltcGxpY2l0
TGluZSAhPSBncmlkTGluZU5hbWVzLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIEdyaWRSZXNv
bHZlZFBvc2l0aW9uOjphZGp1c3RHcmlkUG9zaXRpb25Gb3JTaWRlKGltcGxpY2l0TGluZS0+dmFs
dWVbMF0sIHNpZGUpOworICAgICAgICAgICAgcmV0dXJuIGFkanVzdEdyaWRQb3NpdGlvbkZvclNp
ZGUoaW1wbGljaXRMaW5lLT52YWx1ZVswXSwgc2lkZSk7CiAKICAgICAgICAgLy8gT3RoZXJ3aXNl
LCBpZiB0aGVyZSBpcyBhIG5hbWVkIGxpbmUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUsIGNvbnRy
aWJ1dGVzIHRoZSBmaXJzdCBzdWNoIGxpbmUgdG8gdGhlIGdyaWQKICAgICAgICAgLy8gaXRlbSdz
IHBsYWNlbWVudC4KICAgICAgICAgYXV0byBleHBsaWNpdExpbmUgPSBncmlkTGluZU5hbWVzLmZp
bmQobmFtZWRHcmlkTGluZSk7CiAgICAgICAgIGlmIChleHBsaWNpdExpbmUgIT0gZ3JpZExpbmVO
YW1lcy5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6YWRq
dXN0R3JpZFBvc2l0aW9uRm9yU2lkZShleHBsaWNpdExpbmUtPnZhbHVlWzBdLCBzaWRlKTsKKyAg
ICAgICAgICAgIHJldHVybiBhZGp1c3RHcmlkUG9zaXRpb25Gb3JTaWRlKGV4cGxpY2l0TGluZS0+
dmFsdWVbMF0sIHNpZGUpOwogCiAgICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIGFib3ZlIHdvcmtz
IHNwZWNzIG1hbmRhdGUgdXMgdG8gdHJlYXQgaXQgYXMgYXV0byBCVVQgd2Ugc2hvdWxkIGhhdmUg
ZGV0ZWN0ZWQgaXQgYmVmb3JlIGNhbGxpbmcKICAgICAgICAgLy8gdGhpcyBmdW5jdGlvbiBpbiBy
ZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZSgpLiBXZSBzaG91bGQgYmUgY292ZXJlZCBhbnl3
YXkgYnkgdGhlIEFTU0VSVCBhdCB0aGUgYmVnaW5uaW5nCkBAIC0yMzksODkgKzMwMSw0OCBAQCBH
cmlkUmVzb2x2ZWRQb3NpdGlvbiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3Np
dGlvbkZyb21TdHlsZShjb25zdCBSZQogICAgIHJldHVybiBHcmlkUmVzb2x2ZWRQb3NpdGlvbigw
KTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEdyaWRTcGFuPiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6
cmVzb2x2ZUdyaWRQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGNvbnN0IFJlbmRlclN0
eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNv
bHZlZE9wcG9zaXRlUG9zaXRpb24sIGNvbnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIEdyaWRQ
b3NpdGlvblNpZGUgc2lkZSkKK0dyaWRSZXNvbHZlZFBvc2l0aW9uOjpHcmlkUmVzb2x2ZWRQb3Np
dGlvbihjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUp
CiB7Ci0gICAgaWYgKHBvc2l0aW9uLmlzQXV0bygpKQotICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxHcmlkU3Bhbj4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9z
aXRlUG9zaXRpb24pOwotCi0gICAgQVNTRVJUKHBvc2l0aW9uLmlzU3BhbigpKTsKLSAgICBBU1NF
UlQocG9zaXRpb24uc3BhblBvc2l0aW9uKCkgPiAwKTsKLQotICAgIGlmICghcG9zaXRpb24ubmFt
ZWRHcmlkTGluZSgpLmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIHNwYW4gMiAnYycgLT4gd2UgbmVl
ZCB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZSBncmlkIGxpbmUgYmVmb3JlIC8gYWZ0ZXIgb3VyIG9w
cG9zaXRlIHBvc2l0aW9uLgotICAgICAgICByZXR1cm4gcmVzb2x2ZU5hbWVkR3JpZExpbmVQb3Np
dGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGdyaWRDb250YWluZXJTdHlsZSwgcmVzb2x2ZWRP
cHBvc2l0ZVBvc2l0aW9uLCBwb3NpdGlvbiwgc2lkZSk7Ci0gICAgfQorICAgIEFTU0VSVChwb3Np
dGlvbi5pbnRlZ2VyUG9zaXRpb24oKSk7CisgICAgdW5zaWduZWQgaW50ZWdlclBvc2l0aW9uID0g
cG9zaXRpb24uaW50ZWdlclBvc2l0aW9uKCkgLSAxOwogCi0gICAgLy8gJ3NwYW4gMScgaXMgY29u
dGFpbmVkIGluc2lkZSBhIHNpbmdsZSBncmlkIHRyYWNrIHJlZ2FyZGxlc3Mgb2YgdGhlIGRpcmVj
dGlvbi4KLSAgICAvLyBUaGF0J3Mgd2h5IHRoZSBDU1Mgc3BhbiB2YWx1ZSBpcyBvbmUgbW9yZSB0
aGFuIHRoZSBvZmZzZXQgd2UgYXBwbHkuCi0gICAgdW5zaWduZWQgcG9zaXRpb25PZmZzZXQgPSBw
b3NpdGlvbi5zcGFuUG9zaXRpb24oKSAtIDE7Ci0gICAgaWYgKGlzU3RhcnRTaWRlKHNpZGUpKSB7
Ci0gICAgICAgIHVuc2lnbmVkIGluaXRpYWxSZXNvbHZlZFBvc2l0aW9uID0gc3RkOjptYXg8aW50
PigwLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24udG9JbnQoKSAtIHBvc2l0aW9uT2Zmc2V0KTsK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8R3JpZFNwYW4+KGluaXRpYWxSZXNvbHZl
ZFBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOwotICAgIH0KLQotICAgIHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPEdyaWRTcGFuPihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHJl
c29sdmVkT3Bwb3NpdGVQb3NpdGlvbi50b0ludCgpICsgcG9zaXRpb25PZmZzZXQpOworICAgIG1f
aW50ZWdlclBvc2l0aW9uID0gYWRqdXN0R3JpZFBvc2l0aW9uRm9yU2lkZShpbnRlZ2VyUG9zaXRp
b24sIHNpZGUpLm1faW50ZWdlclBvc2l0aW9uOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8R3JpZFNw
YW4+IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0aW9uQWdh
aW5zdE9wcG9zaXRlUG9zaXRpb24oY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHls
ZSwgY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwg
Y29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQorR3Jp
ZFVucmVzb2x2ZWRTcGFuIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjp1bnJlc29sdmVkU3BhbkZyb21T
dHlsZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBSZW5kZXJC
b3gmIGdyaWRJdGVtLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAg
IEFTU0VSVChwb3NpdGlvbi5pc1NwYW4oKSk7Ci0gICAgQVNTRVJUKCFwb3NpdGlvbi5uYW1lZEdy
aWRMaW5lKCkuaXNOdWxsKCkpOwotICAgIC8vIE5lZ2F0aXZlIHBvc2l0aW9ucyBhcmUgbm90IGFs
bG93ZWQgcGVyIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBzaG91bGQgaGF2ZSBiZWVuIGhhbmRsZWQg
ZHVyaW5nIHBhcnNpbmcuCi0gICAgQVNTRVJUKHBvc2l0aW9uLnNwYW5Qb3NpdGlvbigpID4gMCk7
Ci0KLSAgICBjb25zdCBOYW1lZEdyaWRMaW5lc01hcCYgZ3JpZExpbmVzTmFtZXMgPSBpc0NvbHVt
blNpZGUoc2lkZSkgPyBncmlkQ29udGFpbmVyU3R5bGUubmFtZWRHcmlkQ29sdW1uTGluZXMoKSA6
IGdyaWRDb250YWluZXJTdHlsZS5uYW1lZEdyaWRSb3dMaW5lcygpOwotICAgIE5hbWVkR3JpZExp
bmVzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGdyaWRMaW5lc05hbWVzLmZpbmQocG9zaXRpb24u
bmFtZWRHcmlkTGluZSgpKTsKLQotICAgIC8vIElmIHRoZXJlIGlzIG5vIG5hbWVkIGdyaWQgbGlu
ZSBvZiB0aGF0IG5hbWUsIHdlIHJlc29sdmUgdGhlIHBvc2l0aW9uIHRvICdhdXRvJyAod2hpY2gg
aXMgZXF1aXZhbGVudCB0byAnc3BhbiAxJyBpbiB0aGlzIGNhc2UpLgotICAgIC8vIFNlZSBodHRw
Oi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy93d3ctc3R5bGUvMjAxM0p1bi8wMzk0Lmh0
bWwuCi0gICAgaWYgKGl0ID09IGdyaWRMaW5lc05hbWVzLmVuZCgpKQotICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3VuaXF1ZTxHcmlkU3Bhbj4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNv
bHZlZE9wcG9zaXRlUG9zaXRpb24pOworICAgIEdyaWRQb3NpdGlvbiBpbml0aWFsUG9zaXRpb24g
PSAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gZ3JpZEl0ZW0uc3R5bGUoKS5ncmlkSXRlbUNv
bHVtblN0YXJ0KCkgOiBncmlkSXRlbS5zdHlsZSgpLmdyaWRJdGVtUm93U3RhcnQoKTsKKyAgICBh
dXRvIGluaXRpYWxQb3NpdGlvblNpZGUgPSAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gQ29s
dW1uU3RhcnRTaWRlIDogUm93U3RhcnRTaWRlOworICAgIEdyaWRQb3NpdGlvbiBmaW5hbFBvc2l0
aW9uID0gKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IGdyaWRJdGVtLnN0eWxlKCkuZ3JpZEl0
ZW1Db2x1bW5FbmQoKSA6IGdyaWRJdGVtLnN0eWxlKCkuZ3JpZEl0ZW1Sb3dFbmQoKTsKKyAgICBh
dXRvIGZpbmFsUG9zaXRpb25TaWRlID0gKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IENvbHVt
bkVuZFNpZGUgOiBSb3dFbmRTaWRlOwogCi0gICAgaWYgKHNpZGUgPT0gUm93U3RhcnRTaWRlIHx8
IHNpZGUgPT0gQ29sdW1uU3RhcnRTaWRlKQotICAgICAgICByZXR1cm4gcmVzb2x2ZVJvd1N0YXJ0
Q29sdW1uU3RhcnROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihy
ZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHBvc2l0aW9uLCBpdC0+dmFsdWUpOworICAgIEdyaWRV
bnJlc29sdmVkU3BhbiB1bnJlc29sdmVkU3Bhbihpbml0aWFsUG9zaXRpb24sIGluaXRpYWxQb3Np
dGlvblNpZGUsIGZpbmFsUG9zaXRpb24sIGZpbmFsUG9zaXRpb25TaWRlKTsKKyAgICB1bnJlc29s
dmVkU3Bhbi5hZGp1c3RHcmlkUG9zaXRpb25zRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSk7
CiAKLSAgICByZXR1cm4gcmVzb2x2ZVJvd0VuZENvbHVtbkVuZE5hbWVkR3JpZExpbmVQb3NpdGlv
bkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgcG9zaXRp
b24sIGl0LT52YWx1ZSk7CisgICAgcmV0dXJuIHVucmVzb2x2ZWRTcGFuOwogfQogCi1zdGF0aWMg
aW5saW5lIHVuc2lnbmVkIGZpcnN0TmFtZWRHcmlkTGluZUJlZm9yZVBvc2l0aW9uKHVuc2lnbmVk
IHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBncmlkTGluZXMpCitHcmlkU3BhbiBH
cmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoY29uc3Qg
R3JpZFVucmVzb2x2ZWRTcGFuJiB1bnJlc29sdmVkU3BhbiwgY29uc3QgUmVuZGVyU3R5bGUmIGdy
aWRDb250YWluZXJTdHlsZSkKIHsKLSAgICAvLyBUaGUgZ3JpZCBsaW5lIGluZXF1YWxpdHkgbmVl
ZHMgdG8gYmUgc3RyaWN0ICh3aGljaCBkb2Vzbid0IG1hdGNoIHRoZSBhZnRlciAvIGVuZCBjYXNl
KSBiZWNhdXNlIHxwb3NpdGlvbnwgaXMKLSAgICAvLyBhbHJlYWR5IGNvbnZlcnRlZCB0byBhbiBp
bmRleCBpbiBvdXIgZ3JpZCByZXByZXNlbnRhdGlvbiAoaWUgb25lIHdhcyByZW1vdmVkIGZyb20g
dGhlIGdyaWQgbGluZSB0byBhY2NvdW50IGZvcgotICAgIC8vIHRoZSBzaWRlKS4KLSAgICB1bnNp
Z25lZCBmaXJzdExpbmVCZWZvcmVQb3NpdGlvbkluZGV4ID0gMDsKLSAgICBjb25zdCB1bnNpZ25l
ZCogZmlyc3RMaW5lQmVmb3JlUG9zaXRpb24gPSBzdGQ6Omxvd2VyX2JvdW5kKGdyaWRMaW5lcy5i
ZWdpbigpLCBncmlkTGluZXMuZW5kKCksIHBvc2l0aW9uKTsKLSAgICBpZiAoZmlyc3RMaW5lQmVm
b3JlUG9zaXRpb24gIT0gZ3JpZExpbmVzLmVuZCgpKSB7Ci0gICAgICAgIGlmICgqZmlyc3RMaW5l
QmVmb3JlUG9zaXRpb24gPiBwb3NpdGlvbiAmJiBmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiAhPSBn
cmlkTGluZXMuYmVnaW4oKSkKLSAgICAgICAgICAgIC0tZmlyc3RMaW5lQmVmb3JlUG9zaXRpb247
CisgICAgQVNTRVJUKCF1bnJlc29sdmVkU3Bhbi5yZXF1aXJlc0F1dG9QbGFjZW1lbnQoKSk7CiAK
LSAgICAgICAgZmlyc3RMaW5lQmVmb3JlUG9zaXRpb25JbmRleCA9IGZpcnN0TGluZUJlZm9yZVBv
c2l0aW9uIC0gZ3JpZExpbmVzLmJlZ2luKCk7CisgICAgaWYgKHVucmVzb2x2ZWRTcGFuLmluaXRp
YWxQb3NpdGlvbigpLnNob3VsZEJlUmVzb2x2ZWRBZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbigpKSB7
CisgICAgICAgIC8vIEluZmVyIHRoZSBwb3NpdGlvbiBmcm9tIHRoZSBmaW5hbCBwb3NpdGlvbiAo
J2F1dG8gLyAxJyBvciAnc3BhbiAyIC8gMycgY2FzZSkuCisgICAgICAgIGF1dG8gZmluYWxSZXNv
bHZlZFBvc2l0aW9uID0gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFpbmVy
U3R5bGUsIHVucmVzb2x2ZWRTcGFuLmZpbmFsUG9zaXRpb24oKSwgdW5yZXNvbHZlZFNwYW4uZmlu
YWxQb3NpdGlvblNpZGUoKSk7CisgICAgICAgIHJldHVybiByZXNvbHZlR3JpZFBvc2l0aW9uQWdh
aW5zdE9wcG9zaXRlUG9zaXRpb24oZ3JpZENvbnRhaW5lclN0eWxlLCBmaW5hbFJlc29sdmVkUG9z
aXRpb24sIHVucmVzb2x2ZWRTcGFuLmluaXRpYWxQb3NpdGlvbigpLCB1bnJlc29sdmVkU3Bhbi5p
bml0aWFsUG9zaXRpb25TaWRlKCkpOwogICAgIH0KLSAgICByZXR1cm4gZmlyc3RMaW5lQmVmb3Jl
UG9zaXRpb25JbmRleDsKLX0KIAotc3RkOjp1bmlxdWVfcHRyPEdyaWRTcGFuPiBHcmlkUmVzb2x2
ZWRQb3NpdGlvbjo6cmVzb2x2ZVJvd1N0YXJ0Q29sdW1uU3RhcnROYW1lZEdyaWRMaW5lUG9zaXRp
b25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgcmVz
b2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBjb25z
dCBWZWN0b3I8dW5zaWduZWQ+JiBncmlkTGluZXMpCi17Ci0gICAgdW5zaWduZWQgZ3JpZExpbmVJ
bmRleCA9IHN0ZDo6bWF4PGludD4oMCwgZmlyc3ROYW1lZEdyaWRMaW5lQmVmb3JlUG9zaXRpb24o
cmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLnRvSW50KCksIGdyaWRMaW5lcykgLSBwb3NpdGlvbi5z
cGFuUG9zaXRpb24oKSArIDEpOwotICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uIHJlc29sdmVkR3Jp
ZExpbmVQb3NpdGlvbiA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uKGdyaWRMaW5lc1tncmlkTGluZUlu
ZGV4XSk7Ci0gICAgaWYgKHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiA+IHJlc29sdmVkT3Bwb3Np
dGVQb3NpdGlvbikKLSAgICAgICAgcmVzb2x2ZWRHcmlkTGluZVBvc2l0aW9uID0gcmVzb2x2ZWRP
cHBvc2l0ZVBvc2l0aW9uOwotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEdyaWRTcGFuPihy
ZXNvbHZlZEdyaWRMaW5lUG9zaXRpb24sIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7Ci19Cisg
ICAgaWYgKHVucmVzb2x2ZWRTcGFuLmZpbmFsUG9zaXRpb24oKS5zaG91bGRCZVJlc29sdmVkQWdh
aW5zdE9wcG9zaXRlUG9zaXRpb24oKSkgeworICAgICAgICAvLyBJbmZlciBvdXIgcG9zaXRpb24g
ZnJvbSB0aGUgaW5pdGlhbCBwb3NpdGlvbiAoJzEgLyBhdXRvJyBvciAnMyAvIHNwYW4gMicgY2Fz
ZSkuCisgICAgICAgIGF1dG8gaW5pdGlhbFJlc29sdmVkUG9zaXRpb24gPSByZXNvbHZlR3JpZFBv
c2l0aW9uRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgdW5yZXNvbHZlZFNwYW4uaW5pdGlh
bFBvc2l0aW9uKCksIHVucmVzb2x2ZWRTcGFuLmluaXRpYWxQb3NpdGlvblNpZGUoKSk7CisgICAg
ICAgIHJldHVybiByZXNvbHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oZ3Jp
ZENvbnRhaW5lclN0eWxlLCBpbml0aWFsUmVzb2x2ZWRQb3NpdGlvbiwgdW5yZXNvbHZlZFNwYW4u
ZmluYWxQb3NpdGlvbigpLCB1bnJlc29sdmVkU3Bhbi5maW5hbFBvc2l0aW9uU2lkZSgpKTsKKyAg
ICB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxHcmlkU3Bhbj4gR3JpZFJlc29sdmVkUG9zaXRpb246OnJl
c29sdmVSb3dFbmRDb2x1bW5FbmROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQ
b3NpdGlvbihjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0
aW9uLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+
JiBncmlkTGluZXMpCi17Ci0gICAgQVNTRVJUKGdyaWRMaW5lcy5zaXplKCkpOwotICAgIHVuc2ln
bmVkIGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlvbkluZGV4ID0gZ3JpZExpbmVzLnNpemUo
KSAtIDE7Ci0gICAgY29uc3QgdW5zaWduZWQqIGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3NpdGlv
biA9IHN0ZDo6dXBwZXJfYm91bmQoZ3JpZExpbmVzLmJlZ2luKCksIGdyaWRMaW5lcy5lbmQoKSwg
cmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsKLSAgICBpZiAoZmlyc3RMaW5lQWZ0ZXJPcHBvc2l0
ZVBvc2l0aW9uICE9IGdyaWRMaW5lcy5lbmQoKSkKLSAgICAgICAgZmlyc3RMaW5lQWZ0ZXJPcHBv
c2l0ZVBvc2l0aW9uSW5kZXggPSBmaXJzdExpbmVBZnRlck9wcG9zaXRlUG9zaXRpb24gLSBncmlk
TGluZXMuYmVnaW4oKTsKKyAgICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiByZXNvbHZlZEluaXRpYWxQ
b3NpdGlvbiA9IHJlc29sdmVHcmlkUG9zaXRpb25Gcm9tU3R5bGUoZ3JpZENvbnRhaW5lclN0eWxl
LCB1bnJlc29sdmVkU3Bhbi5pbml0aWFsUG9zaXRpb24oKSwgdW5yZXNvbHZlZFNwYW4uaW5pdGlh
bFBvc2l0aW9uU2lkZSgpKTsKKyAgICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiByZXNvbHZlZEZpbmFs
UG9zaXRpb24gPSByZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHls
ZSwgdW5yZXNvbHZlZFNwYW4uZmluYWxQb3NpdGlvbigpLCB1bnJlc29sdmVkU3Bhbi5maW5hbFBv
c2l0aW9uU2lkZSgpKTsKIAotICAgIHVuc2lnbmVkIGdyaWRMaW5lSW5kZXggPSBzdGQ6Om1pbjx1
bnNpZ25lZD4oZ3JpZExpbmVzLnNpemUoKSAtIDEsIGZpcnN0TGluZUFmdGVyT3Bwb3NpdGVQb3Np
dGlvbkluZGV4ICsgcG9zaXRpb24uc3BhblBvc2l0aW9uKCkgLSAxKTsKLSAgICBHcmlkUmVzb2x2
ZWRQb3NpdGlvbiByZXNvbHZlZEdyaWRMaW5lUG9zaXRpb24gPSBHcmlkUmVzb2x2ZWRQb3NpdGlv
bjo6YWRqdXN0R3JpZFBvc2l0aW9uRm9yUm93RW5kQ29sdW1uRW5kU2lkZShncmlkTGluZXNbZ3Jp
ZExpbmVJbmRleF0pOwotICAgIGlmIChyZXNvbHZlZEdyaWRMaW5lUG9zaXRpb24gPCByZXNvbHZl
ZE9wcG9zaXRlUG9zaXRpb24pCi0gICAgICAgIHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiA9IHJl
c29sdmVkT3Bwb3NpdGVQb3NpdGlvbjsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxHcmlk
U3Bhbj4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZlZEdyaWRMaW5lUG9zaXRpb24p
OworICAgIC8vIElmICdncmlkLXJvdy1lbmQnIHNwZWNpZmllcyBhIGxpbmUgYXQgb3IgYmVmb3Jl
IHRoYXQgc3BlY2lmaWVkIGJ5ICdncmlkLXJvdy1zdGFydCcsIGl0IGNvbXB1dGVzIHRvICdzcGFu
IDEnLgorICAgIHJldHVybiBHcmlkU3BhbihyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgc3RkOjpt
YXg8R3JpZFJlc29sdmVkUG9zaXRpb24+KHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCByZXNvbHZl
ZEZpbmFsUG9zaXRpb24pKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uaApp
bmRleCA5NTU1NmNkZWJlYmJiZGM0YjcxZWQyYzQxZGY1OTJhYjM5ZTNiZjU5Li45NzUyYjM2MGYw
NmU2YThkZDgyOGFiZjc0MDJmNDJiOTM3OWZhNTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uaApAQCAtNDEsNTkgKzQx
LDQ2IEBAIGNsYXNzIEdyaWRTcGFuOwogY2xhc3MgUmVuZGVyQm94OwogY2xhc3MgUmVuZGVyU3R5
bGU7CiAKLWVudW0gR3JpZFBvc2l0aW9uU2lkZSB7Ci0gICAgQ29sdW1uU3RhcnRTaWRlLAotICAg
IENvbHVtbkVuZFNpZGUsCi0gICAgUm93U3RhcnRTaWRlLAotICAgIFJvd0VuZFNpZGUKLX07Ci0K
IGVudW0gR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIHsKICAgICBGb3JDb2x1bW5zLAogICAgIEZv
clJvd3MKIH07CiAKLS8vIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBpbmRleCBpbnRvIG9uZSBv
ZiB0aGUgZGltZW5zaW9ucyBvZiB0aGUgZ3JpZCBhcnJheS4KLS8vIFdyYXBzIGFuIHVuc2lnbmVk
IGludGVnZXIganVzdCBmb3IgdGhlIHB1cnBvc2Ugb2Yga25vd2luZyB3aGF0IHdlIG1hbmlwdWxh
dGUgaW4gdGhlIGdyaWQgY29kZS4KLWNsYXNzIEdyaWRSZXNvbHZlZFBvc2l0aW9uIHsKK2NsYXNz
IEdyaWRVbnJlc29sdmVkU3BhbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIEdyaWRSZXNvbHZlZFBv
c2l0aW9uIGFkanVzdEdyaWRQb3NpdGlvbkZvclJvd0VuZENvbHVtbkVuZFNpZGUodW5zaWduZWQg
cmVzb2x2ZWRQb3NpdGlvbikKKyAgICBHcmlkVW5yZXNvbHZlZFNwYW4oR3JpZFBvc2l0aW9uIGlu
aXRpYWxQb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBpbml0aWFsUG9zaXRpb25TaWRlLCBHcmlk
UG9zaXRpb24gZmluYWxQb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBmaW5hbFBvc2l0aW9uU2lk
ZSkKKyAgICAgICAgOiBtX2luaXRpYWxQb3NpdGlvbihpbml0aWFsUG9zaXRpb24pCisgICAgICAg
ICwgbV9maW5hbFBvc2l0aW9uKGZpbmFsUG9zaXRpb24pCisgICAgICAgICwgbV9pbml0aWFsUG9z
aXRpb25TaWRlKGluaXRpYWxQb3NpdGlvblNpZGUpCisgICAgICAgICwgbV9maW5hbFBvc2l0aW9u
U2lkZShmaW5hbFBvc2l0aW9uU2lkZSkKICAgICB7Ci0gICAgICAgIHJldHVybiByZXNvbHZlZFBv
c2l0aW9uID8gR3JpZFJlc29sdmVkUG9zaXRpb24ocmVzb2x2ZWRQb3NpdGlvbiAtIDEpIDogR3Jp
ZFJlc29sdmVkUG9zaXRpb24oMCk7CiAgICAgfQogCi0gICAgc3RhdGljIEdyaWRSZXNvbHZlZFBv
c2l0aW9uIGFkanVzdEdyaWRQb3NpdGlvbkZvclNpZGUodW5zaWduZWQgcmVzb2x2ZWRQb3NpdGlv
biwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQotICAgIHsKLSAgICAgICAgLy8gQW4gaXRlbSBmaW5p
c2hpbmcgb24gdGhlIE4tdGggbGluZSBiZWxvbmdzIHRvIHRoZSBOLTEtdGggY2VsbC4KLSAgICAg
ICAgaWYgKHNpZGUgPT0gQ29sdW1uRW5kU2lkZSB8fCBzaWRlID09IFJvd0VuZFNpZGUpCi0gICAg
ICAgICAgICByZXR1cm4gYWRqdXN0R3JpZFBvc2l0aW9uRm9yUm93RW5kQ29sdW1uRW5kU2lkZShy
ZXNvbHZlZFBvc2l0aW9uKTsKKyAgICBjb25zdCBHcmlkUG9zaXRpb24mIGluaXRpYWxQb3NpdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbFBvc2l0aW9uOyB9CisgICAgY29uc3QgR3JpZFBv
c2l0aW9uJiBmaW5hbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9maW5hbFBvc2l0aW9uOyB9
CisgICAgR3JpZFBvc2l0aW9uU2lkZSBpbml0aWFsUG9zaXRpb25TaWRlKCkgY29uc3QgeyByZXR1
cm4gbV9pbml0aWFsUG9zaXRpb25TaWRlOyB9CisgICAgR3JpZFBvc2l0aW9uU2lkZSBmaW5hbFBv
c2l0aW9uU2lkZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmluYWxQb3NpdGlvblNpZGU7IH0KIAotICAg
ICAgICByZXR1cm4gR3JpZFJlc29sdmVkUG9zaXRpb24ocmVzb2x2ZWRQb3NpdGlvbik7Ci0gICAg
fQorICAgIGJvb2wgcmVxdWlyZXNBdXRvUGxhY2VtZW50KCkgY29uc3Q7CisgICAgdm9pZCBhZGp1
c3RHcmlkUG9zaXRpb25zRnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVy
U3R5bGUpOwogCi0gICAgc3RhdGljIEdyaWRTcGFuIHJlc29sdmVHcmlkUG9zaXRpb25zRnJvbUF1
dG9QbGFjZW1lbnRQb3NpdGlvbihjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlckJveCYs
IEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiwgY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mKTsK
LSAgICBzdGF0aWMgdm9pZCBhZGp1c3ROYW1lZEdyaWRJdGVtUG9zaXRpb24oY29uc3QgUmVuZGVy
U3R5bGUmLCBHcmlkUG9zaXRpb24mLCBHcmlkUG9zaXRpb25TaWRlKTsKLSAgICBzdGF0aWMgdm9p
ZCBhZGp1c3RHcmlkUG9zaXRpb25zRnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiwgR3JpZFBv
c2l0aW9uJiBpbml0aWFsUG9zaXRpb24sIEdyaWRQb3NpdGlvbiYgZmluYWxQb3NpdGlvbiwgR3Jp
ZFBvc2l0aW9uU2lkZSBpbml0aWFsUG9zaXRpb25TaWRlLCBHcmlkUG9zaXRpb25TaWRlIGZpbmFs
UG9zaXRpb25TaWRlKTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEdyaWRTcGFuPiByZXNv
bHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRl
ckJveCYsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbik7Ci0gICAgc3RhdGljIEdyaWRSZXNvbHZl
ZFBvc2l0aW9uIHJlc29sdmVOYW1lZEdyaWRMaW5lUG9zaXRpb25Gcm9tU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUmLCBjb25zdCBHcmlkUG9zaXRpb24mLCBHcmlkUG9zaXRpb25TaWRlKTsKLSAgICBz
dGF0aWMgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShj
b25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEdyaWRQb3NpdGlvbiYsIEdyaWRQb3NpdGlvblNpZGUp
OwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8R3JpZFNwYW4+IHJlc29sdmVHcmlkUG9zaXRp
b25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEdyaWRS
ZXNvbHZlZFBvc2l0aW9uJiwgY29uc3QgR3JpZFBvc2l0aW9uJiwgR3JpZFBvc2l0aW9uU2lkZSk7
Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHcmlkU3Bhbj4gcmVzb2x2ZU5hbWVkR3JpZExp
bmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiwgY29u
c3QgR3JpZFJlc29sdmVkUG9zaXRpb24mLCBjb25zdCBHcmlkUG9zaXRpb24mLCBHcmlkUG9zaXRp
b25TaWRlKTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEdyaWRTcGFuPiByZXNvbHZlUm93
U3RhcnRDb2x1bW5TdGFydE5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0
aW9uKGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiwgY29uc3QgR3JpZFBvc2l0aW9uJiwgY29u
c3QgVmVjdG9yPHVuc2lnbmVkPiYpOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8R3JpZFNw
YW4+IHJlc29sdmVSb3dFbmRDb2x1bW5FbmROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bw
b3NpdGVQb3NpdGlvbihjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYsIGNvbnN0IEdyaWRQb3Np
dGlvbiYsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mKTsKK3ByaXZhdGU6CisgICAgR3JpZFBvc2l0
aW9uIG1faW5pdGlhbFBvc2l0aW9uOworICAgIEdyaWRQb3NpdGlvbiBtX2ZpbmFsUG9zaXRpb247
CisgICAgR3JpZFBvc2l0aW9uU2lkZSBtX2luaXRpYWxQb3NpdGlvblNpZGU7CisgICAgR3JpZFBv
c2l0aW9uU2lkZSBtX2ZpbmFsUG9zaXRpb25TaWRlOworfTsKIAorLy8gVGhpcyBjbGFzcyByZXBy
ZXNlbnRzIGFuIGluZGV4IGludG8gb25lIG9mIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBncmlkIGFy
cmF5LgorLy8gV3JhcHMgYW4gdW5zaWduZWQgaW50ZWdlciBqdXN0IGZvciB0aGUgcHVycG9zZSBv
ZiBrbm93aW5nIHdoYXQgd2UgbWFuaXB1bGF0ZSBpbiB0aGUgZ3JpZCBjb2RlLgorY2xhc3MgR3Jp
ZFJlc29sdmVkUG9zaXRpb24geworcHVibGljOgogICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uKHVu
c2lnbmVkIHBvc2l0aW9uKQogICAgICAgICA6IG1faW50ZWdlclBvc2l0aW9uKHBvc2l0aW9uKQog
ICAgIHsKICAgICB9CiAKLSAgICBHcmlkUmVzb2x2ZWRQb3NpdGlvbihjb25zdCBHcmlkUG9zaXRp
b24mIHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCi0gICAgewotICAgICAgICBBU1NF
UlQocG9zaXRpb24uaW50ZWdlclBvc2l0aW9uKCkpOwotICAgICAgICB1bnNpZ25lZCBpbnRlZ2Vy
UG9zaXRpb24gPSBwb3NpdGlvbi5pbnRlZ2VyUG9zaXRpb24oKSAtIDE7Ci0KLSAgICAgICAgbV9p
bnRlZ2VyUG9zaXRpb24gPSBhZGp1c3RHcmlkUG9zaXRpb25Gb3JTaWRlKGludGVnZXJQb3NpdGlv
biwgc2lkZSkubV9pbnRlZ2VyUG9zaXRpb247Ci0gICAgfQorICAgIEdyaWRSZXNvbHZlZFBvc2l0
aW9uKGNvbnN0IEdyaWRQb3NpdGlvbiYsIEdyaWRQb3NpdGlvblNpZGUpOwogCiAgICAgR3JpZFJl
c29sdmVkUG9zaXRpb24mIG9wZXJhdG9yKigpCiAgICAgewpAQCAtMTQ2LDExICsxMzMsMTMgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gR3JpZFJlc29sdmVkUG9zaXRpb24obV9pbnRlZ2VyUG9z
aXRpb24gKyAxKTsKICAgICB9CiAKKyAgICBzdGF0aWMgR3JpZFNwYW4gcmVzb2x2ZUdyaWRQb3Np
dGlvbnNGcm9tQXV0b1BsYWNlbWVudFBvc2l0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3Qg
UmVuZGVyQm94JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCBjb25zdCBHcmlkUmVzb2x2ZWRQ
b3NpdGlvbiYpOworICAgIHN0YXRpYyBHcmlkU3BhbiByZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21T
dHlsZShjb25zdCBHcmlkVW5yZXNvbHZlZFNwYW4mLCBjb25zdCBSZW5kZXJTdHlsZSYpOworICAg
IHN0YXRpYyBHcmlkVW5yZXNvbHZlZFNwYW4gdW5yZXNvbHZlZFNwYW5Gcm9tU3R5bGUoY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJCb3gmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24p
OwogICAgIHN0YXRpYyB1bnNpZ25lZCBleHBsaWNpdEdyaWRDb2x1bW5Db3VudChjb25zdCBSZW5k
ZXJTdHlsZSYpOwogICAgIHN0YXRpYyB1bnNpZ25lZCBleHBsaWNpdEdyaWRSb3dDb3VudChjb25z
dCBSZW5kZXJTdHlsZSYpOwogCiBwcml2YXRlOgotCiAgICAgdW5zaWduZWQgbV9pbnRlZ2VyUG9z
aXRpb247CiB9OwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>