<?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>229072</bug_id>
          
          <creation_ts>2021-08-13 07:15:38 -0700</creation_ts>
          <short_desc>[MSE][GStreamer] Implement multi-track support</short_desc>
          <delta_ts>2021-08-31 09:06:43 -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>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>165394</blocked>
    
    <blocked>227258</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alicia Boya García">aboya</reporter>
          <assigned_to name="Alicia Boya García">aboya</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>jer.noble</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>sergio</cc>
    
    <cc>vjaquez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1784097</commentid>
    <comment_count>0</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-08-13 07:15:38 -0700</bug_when>
    <thetext>This patch adds support for SourceBuffer having more than one track in
the GStreamer port.

This fixes the following LayoutTests:

imported/w3c/web-platform-tests/media-source/mediasource-activesourcebuffers.html
media/media-source/media-source-has-audio-video.html
media/media-source/only-bcp47-language-tags-accepted-as-valid.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784099</commentid>
    <comment_count>1</comment_count>
      <attachid>435480</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-08-13 07:16:52 -0700</bug_when>
    <thetext>Created attachment 435480
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784113</commentid>
    <comment_count>2</comment_count>
      <attachid>435480</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2021-08-13 08:52:10 -0700</bug_when>
    <thetext>Comment on attachment 435480
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:366
&gt; +                m_done = true;

TRUE

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:293
&gt; +void AppendPipeline::parseDemuxerSrcPadCaps(GstCaps* demuxerSrcPadCaps, GRefPtr&lt;GstCaps&gt;* dstParsedCaps,
&gt; +    StreamType* dstStreamType, FloatSize* dstPresentationSize)

if dst* parameters are output parameters, please return a tuple.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:634
&gt; +AppendPipeline::Track* AppendPipeline::tryCreateTrackFromPad(GstPad* demuxerSrcPad, bool* dstAppendParsingFailed, int trackIndex)

Please return an optional and avoid the failed bool</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785183</commentid>
    <comment_count>3</comment_count>
      <attachid>435480</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-08-18 11:52:50 -0700</bug_when>
    <thetext>Comment on attachment 435480
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:634
&gt;&gt; +AppendPipeline::Track* AppendPipeline::tryCreateTrackFromPad(GstPad* demuxerSrcPad, bool* dstAppendParsingFailed, int trackIndex)
&gt; 
&gt; Please return an optional and avoid the failed bool

An optional is not the right choice because null is a valid return value in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785463</commentid>
    <comment_count>4</comment_count>
      <attachid>435866</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-08-19 09:03:39 -0700</bug_when>
    <thetext>Created attachment 435866
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785759</commentid>
    <comment_count>5</comment_count>
      <attachid>435866</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2021-08-20 02:40:35 -0700</bug_when>
    <thetext>Comment on attachment 435866
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:366
&gt; +                m_done = true;

Nit: TRUE

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:296
&gt; +    GRefPtr&lt;GstCaps&gt; parsedCaps = GRefPtr&lt;GstCaps&gt;(demuxerSrcPadCaps);

Do you need to explicitly call the constructor? It should be called automatically, right?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:298
&gt; +    FloatSize presentationSize = FloatSize();

Isn&apos;t no parameters default constructor being called here as well?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:314
&gt; +    return { parsedCaps, streamType, presentationSize };

Please, WTFMove the objects into the tuple.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:489
&gt; +    GST_DEBUG(&quot;Notifying SourceBuffer of initialization segement.&quot;);

*segment

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:699
&gt; +        GST_WARNING_OBJECT(pipeline(), &quot;Couldn&apos;t find a matching pre-existing track for pad &apos;%s&apos; with parsed caps %&quot; GST_PTR_FORMAT &quot; on non-first initialization segment, will be connected to a black hole probe.&quot;, GST_PAD_NAME(demuxerSrcPad), parsedCaps.get());

Huge line :)

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:705
&gt; +void AppendPipeline::linkPadWithTrack(GstPad *demuxerSrcPad, Track &amp;track)

GstPad* demuxerSrcPad, Track&amp; track

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:830
&gt; +const char* AppendPipeline::streamTypeToString(StreamType streamType)

This is breaking the build

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.h:112
&gt; +    static std::tuple&lt;GRefPtr&lt;GstCaps&gt;, AppendPipeline::StreamType, FloatSize&gt; parseDemuxerSrcPadCaps(GstCaps* demuxerSrcPadCaps);
&gt; +    Ref&lt;WebCore::TrackPrivateBase&gt; makeWebKitTrack(int trackIndex);

Think if you can remove paremeter names, plz.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.h:126
&gt; +    std::pair&lt;CreateTrackResult, AppendPipeline::Track*&gt; tryCreateTrackFromPad(GstPad* demuxerSrcPad, int padIndex);
&gt; +    AppendPipeline::Track* tryMatchPadToExistingTrack(GstPad* demuxerSrcPad);
&gt; +    void linkPadWithTrack(GstPad* demuxerSrcPad, Track&amp;);

Think if you can remove paremeter names, plz.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786259</commentid>
    <comment_count>6</comment_count>
      <attachid>435866</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-08-22 13:22:38 -0700</bug_when>
    <thetext>Comment on attachment 435866
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.h:112
&gt;&gt; +    Ref&lt;WebCore::TrackPrivateBase&gt; makeWebKitTrack(int trackIndex);
&gt; 
&gt; Think if you can remove paremeter names, plz.

It makes sense in the first case, since the name of the member function gives it away, but I would leave it in the other cases, because they are not necessarily obvious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786342</commentid>
    <comment_count>7</comment_count>
      <attachid>436159</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-08-23 01:08:09 -0700</bug_when>
    <thetext>Created attachment 436159
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786386</commentid>
    <comment_count>8</comment_count>
      <attachid>436181</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-08-23 04:12:49 -0700</bug_when>
    <thetext>Created attachment 436181
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786400</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-08-23 06:22:38 -0700</bug_when>
    <thetext>Committed r281440 (240823@main): &lt;https://commits.webkit.org/240823@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 436181.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435480</attachid>
            <date>2021-08-13 07:16:52 -0700</date>
            <delta_ts>2021-08-19 09:03:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229072-20210813161650.patch</filename>
            <type>text/plain</type>
            <size>63390</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTRiYzFhZThhNjljMDE1
MWM5MTVkMDNjZTBjNDQ4OTA1YTc5ZWE5OC4uMTVlYmMzYThlYThlMmYzN2Q4Mzk2ZDk2ZWY0NjZk
MjE5NTE3NGY0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDIxLTA4LTEyICBBbGlj
aWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbTVNFXVtHU3Ry
ZWFtZXJdIEltcGxlbWVudCBtdWx0aS10cmFjayBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjkwNzIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Ig
U291cmNlQnVmZmVyIGhhdmluZyBtb3JlIHRoYW4gb25lIHRyYWNrIGluCisgICAgICAgIHRoZSBH
U3RyZWFtZXIgcG9ydC4KKworICAgICAgICBUaGlzIGZpeGVzIHRoZSBmb2xsb3dpbmcgTGF5b3V0
VGVzdHM6CisKKyAgICAgICAgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1z
b3VyY2UvbWVkaWFzb3VyY2UtYWN0aXZlc291cmNlYnVmZmVycy5odG1sCisgICAgICAgIG1lZGlh
L21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtaGFzLWF1ZGlvLXZpZGVvLmh0bWwKKyAgICAgICAg
bWVkaWEvbWVkaWEtc291cmNlL29ubHktYmNwNDctbGFuZ3VhZ2UtdGFncy1hY2NlcHRlZC1hcy12
YWxpZC5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVh
bWVyQ29tbW9uLmg6CisgICAgICAgIChHc3RJdGVyYXRvckFkYXB0b3I6OkdzdEl0ZXJhdG9yQWRh
cHRvcik6CisgICAgICAgIChHc3RJdGVyYXRvckFkYXB0b3I6Oml0ZXJhdG9yOjppdGVyYXRvcik6
CisgICAgICAgIChHc3RJdGVyYXRvckFkYXB0b3I6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAg
ICAgICAoR3N0SXRlcmF0b3JBZGFwdG9yOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAg
IChHc3RJdGVyYXRvckFkYXB0b3I6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEdz
dEl0ZXJhdG9yQWRhcHRvcjo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoR3N0SXRl
cmF0b3JBZGFwdG9yOjpiZWdpbik6CisgICAgICAgIChHc3RJdGVyYXRvckFkYXB0b3I6OmVuZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGlu
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6QXBwZW5kUGlwZWxpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6On5BcHBlbmRQaXBlbGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6cGFyc2VEZW11eGVyU3JjUGFkQ2Fwcyk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6YXBwc2lua0NhcHNDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpoYW5kbGVFbmRPZkFwcGVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6YXBwc2lua05ld1NhbXBsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6ZGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6Y29uc3VtZUFwcHNpbmtz
QXZhaWxhYmxlU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6cmVz
ZXRQYXJzZXJTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6aGFuZGxl
QXBwc2lua05ld1NhbXBsZUZyb21TdHJlYW1pbmdUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlT3B0aW9uYWxQYXJzZXJGb3JGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5k
UGlwZWxpbmU6OmdlbmVyYXRlVHJhY2tJZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBl
bGluZTo6dHJ5Q3JlYXRlVHJhY2tGcm9tUGFkKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBp
cGVsaW5lOjp0cnlNYXRjaFBhZFRvRXhpc3RpbmdUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBlbmRQaXBlbGluZTo6bGlua1BhZFdpdGhUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpBcHBl
bmRQaXBlbGluZTo6bWFrZVdlYktpdFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBp
cGVsaW5lOjpUcmFjazo6aW5pdGlhbGl6ZUVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGVuZFBpcGVsaW5lOjpob29rVHJhY2tFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5k
UGlwZWxpbmU6OnN0cmVhbVR5cGVUb1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQ
aXBlbGluZTo6aWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6
OnRyYWNrSWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNv
bnN1bWVBcHBzaW5rQXZhaWxhYmxlU2FtcGxlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpBcHBlbmRQaXBlbGluZTo6Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmtGcm9tU3RyZWFt
aW5nVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpj
b25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2luayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpBcHBlbmRQaXBlbGluZTo6ZGlzY29ubmVjdERlbXV4ZXJTcmNQYWRGcm9tQXBwc2lua0Zyb21B
bnlUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9tc2UvQXBwZW5kUGlwZWxpbmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5l
Ojpzb3VyY2VCdWZmZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5l
OjpUcmFjazo6VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNy
Yyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6YXBwc2lua0NhcHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnRyYWNrKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjphcHBzaW5rKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpkZW11eGVyU3JjUGFkQ2Fwcyk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjpzZXRJbml0aWFsVmlkZW9TaXplKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dHJhY2tEZXRlY3RlZCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UuaDoKKwogMjAyMS0wOC0wOSAgQWxpY2lhIEJveWEgR2FyY8Ot
YSAgPGFib3lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW01TRV1bR1N0cmVhbWVyXSBVcGRhdGUg
dHJhY2tzIHN5bmNocm9ub3VzbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaAppbmRleCBiNjU3Mzlj
OGQzNDc0ZWE4ZWUwNGQ3ZjFlZWY5M2VlYzBiNTlhZWVmLi45Y2M5ZTNhNzA5NmJjMTU1N2IxMjkx
YmM2ODZiOWMyNzU4MmRhODkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCkBAIC0zMzUsNCAr
MzM1LDcxIEBAIGlubGluZSB2b2lkIGdzdFBhZFN0cmVhbVVubG9jayhHc3RQYWQqIHBhZCkgeyBH
U1RfUEFEX1NUUkVBTV9VTkxPQ0socGFkKTsgfQogdXNpbmcgR3N0T2JqZWN0TG9ja2VyID0gRXh0
ZXJuYWxMb2NrZXI8dm9pZCwgZ3N0T2JqZWN0TG9jaywgZ3N0T2JqZWN0VW5sb2NrPjsKIHVzaW5n
IEdzdFBhZFN0cmVhbUxvY2tlciA9IEV4dGVybmFsTG9ja2VyPEdzdFBhZCwgZ3N0UGFkU3RyZWFt
TG9jaywgZ3N0UGFkU3RyZWFtVW5sb2NrPjsKIAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFz
cyBHc3RJdGVyYXRvckFkYXB0b3IgeworcHVibGljOgorICAgIEdzdEl0ZXJhdG9yQWRhcHRvcihH
VW5pcXVlUHRyPEdzdEl0ZXJhdG9yPiYmIGl0ZXIpCisgICAgICAgIDogbV9pdGVyKFdURk1vdmUo
aXRlcikpCisgICAgeyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAg
ICAgICBpdGVyYXRvcihHc3RJdGVyYXRvciogaXRlciwgZ2Jvb2xlYW4gZG9uZSA9IEZBTFNFKQor
ICAgICAgICAgICAgOiBtX2l0ZXIoaXRlcikKKyAgICAgICAgICAgICwgbV9kb25lKGRvbmUpCisg
ICAgICAgIHsgfQorCisgICAgICAgIFQqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRWYWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9y
JiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgR1ZhbHVlIHZhbHVlID0gR19W
QUxVRV9JTklUOworICAgICAgICAgICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dChtX2l0ZXIs
ICZ2YWx1ZSkpIHsKKyAgICAgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgorICAgICAgICAg
ICAgICAgIG1fY3VycmVudFZhbHVlID0gc3RhdGljX2Nhc3Q8VCo+KGdfdmFsdWVfZ2V0X29iamVj
dCgmdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBnX3ZhbHVlX3Jlc2V0KCZ2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgor
ICAgICAgICAgICAgICAgIG1fZG9uZSA9IHRydWU7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50
VmFsdWUgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRURfV0lUSF9NRVNTQUdFKCJV
bmV4cGVjdGVkIGl0ZXJhdG9yIGludmFsaWRhdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1f
aXRlciA9PSBvdGhlci5tX2l0ZXIgJiYgbV9kb25lID09IG90aGVyLm1fZG9uZTsKKyAgICAgICAg
fQorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSB7IHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgR3N0SXRlcmF0
b3IqIG1faXRlcjsKKyAgICAgICAgZ2Jvb2xlYW4gbV9kb25lOworICAgICAgICBUKiBtX2N1cnJl
bnRWYWx1ZSB7IG51bGxwdHIgfTsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFtX3N0YXJ0ZWQpOworICAgICAgICBtX3N0YXJ0ZWQgPSB0cnVl
OworICAgICAgICBpdGVyYXRvciBpdGVyIHsgbV9pdGVyLmdldCgpIH07CisgICAgICAgIHJldHVy
biArK2l0ZXI7CisgICAgfQorCisgICAgaXRlcmF0b3IgZW5kKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiB7IG1faXRlci5nZXQoKSwgVFJVRSB9OworICAgIH0KKworcHJpdmF0ZToKKyAgICBHVW5p
cXVlUHRyPEdzdEl0ZXJhdG9yPiBtX2l0ZXI7CisgICAgYm9vbCBtX3N0YXJ0ZWQgeyBmYWxzZSB9
OworfTsKKwogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlw
ZWxpbmUuY3BwCmluZGV4IDE2YWI5ZmU1MjY3N2QwODc3MWMwZTM1MGUzYjc2MDQxZWZhYWVkYTQu
LmMyYWRmODRkYTkyNDUyZjcwZTg4NWQyYTY0NWNkMGNmNzBiOGU5N2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxp
bmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvQXBwZW5kUGlwZWxpbmUuY3BwCkBAIC0yMCw2ICsyMCw4IEBACiAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJBcHBlbmRQaXBlbGluZS5oIgorI2luY2x1ZGUgIkFib3J0YWJsZVRh
c2tRdWV1ZS5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lci5oIgogCiAj
aWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNF
KQogCkBAIC0xMDIsOSArMTA0LDcgQEAgc3RhdGljIHZvaWQgYXNzZXJ0ZWRFbGVtZW50U2V0U3Rh
dGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGUgZGVzaXJlZFN0YXRlKQogQXBwZW5kUGlw
ZWxpbmU6OkFwcGVuZFBpcGVsaW5lKFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXImIHNvdXJj
ZUJ1ZmZlclByaXZhdGUsIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSYgcGxheWVyUHJp
dmF0ZSkKICAgICA6IG1fc291cmNlQnVmZmVyUHJpdmF0ZShzb3VyY2VCdWZmZXJQcml2YXRlKQog
ICAgICwgbV9wbGF5ZXJQcml2YXRlKCZwbGF5ZXJQcml2YXRlKQotICAgICwgbV9pZCgwKQogICAg
ICwgbV93YXNCdXNBbHJlYWR5Tm90aWZpZWRPZkF2YWlsYWJsZVNhbXBsZXMoZmFsc2UpCi0gICAg
LCBtX3N0cmVhbVR5cGUoVW5rbm93bikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIHN0ZDo6Y2FsbF9vbmNlKHNfc3RhdGljSW5pdGlhbGl6YXRpb25GbGFnLCBBcHBlbmRQaXBl
bGluZTo6c3RhdGljSW5pdGlhbGl6YXRpb24pOwpAQCAtMTUwLDc5ICsxNTAsMjIgQEAgQXBwZW5k
UGlwZWxpbmU6OkFwcGVuZFBpcGVsaW5lKFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXImIHNv
dXJjZUJ1ZmZlclByaXZhdGUKICAgICBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogCi0gICAgbV9hcHBzaW5rID0gbWFrZUdTdHJlYW1lckVsZW1lbnQoImFwcHNpbmsiLCBudWxs
cHRyKTsKLQotICAgIGdzdF9hcHBfc2lua19zZXRfZW1pdF9zaWduYWxzKEdTVF9BUFBfU0lOSyht
X2FwcHNpbmsuZ2V0KCkpLCBUUlVFKTsKLSAgICBnc3RfYmFzZV9zaW5rX3NldF9zeW5jKEdTVF9C
QVNFX1NJTksobV9hcHBzaW5rLmdldCgpKSwgRkFMU0UpOwotICAgIGdzdF9iYXNlX3Npbmtfc2V0
X2FzeW5jX2VuYWJsZWQoR1NUX0JBU0VfU0lOSyhtX2FwcHNpbmsuZ2V0KCkpLCBGQUxTRSk7IC8v
IE5vIHByZXJvbGxzLCBubyBhc3luYyBzdGF0ZSBjaGFuZ2VzLgotICAgIGdzdF9iYXNlX3Npbmtf
c2V0X2Ryb3Bfb3V0X29mX3NlZ21lbnQoR1NUX0JBU0VfU0lOSyhtX2FwcHNpbmsuZ2V0KCkpLCBG
QUxTRSk7Ci0gICAgZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9zYW1wbGVfZW5hYmxlZChHU1RfQkFT
RV9TSU5LKG1fYXBwc2luay5nZXQoKSksIEZBTFNFKTsKLQotICAgIEdSZWZQdHI8R3N0UGFkPiBh
cHBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYXBwc2lu
ay5nZXQoKSwgInNpbmsiKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChhcHBzaW5rUGFkLmdldCgp
LCAibm90aWZ5OjpjYXBzIiwgR19DQUxMQkFDSygrW10oR09iamVjdCosIEdQYXJhbVNwZWMqLCBB
cHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpIHsKLSAgICAgICAgaWYgKGlzTWFpblRocmVh
ZCgpKSB7Ci0gICAgICAgICAgICAvLyBXaGVuIGNoYW5naW5nIHRoZSBwaXBlbGluZSBzdGF0ZSBk
b3duIHRvIFJFQURZIHRoZSBkZW11eGVyIGlzIHVubGlua2VkIGFuZCB0aGlzIHRyaWdnZXJzIGEg
Y2FwcyBub3RpZmljYXRpb24KLSAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIGFwcHNpbmsgbG9z
ZXMgaXRzIHByZXZpb3VzbHkgbmVnb3RpYXRlZCBjYXBzLiBXZSBhcmUgbm90IGludGVyZXN0ZWQg
aW4gdGhlc2UgdW5uZWdvdGlhdGVkIGNhcHMuCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICAgICAg
R1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3Bh
ZChhcHBlbmRQaXBlbGluZS0+bV9hcHBzaW5rLmdldCgpLCAic2luayIpKTsKLSAgICAgICAgICAg
IEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9jdXJyZW50X2Nh
cHMocGFkLmdldCgpKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWNhcHMpOwotI2VuZGlmCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGUgc3RyZWFtaW5nIHRo
cmVhZCBoYXMganVzdCByZWNlaXZlZCBhIG5ldyBjYXBzIGFuZCBpcyBhYm91dCB0byBsZXQgc2Ft
cGxlcyB1c2luZyB0aGUKLSAgICAgICAgLy8gbmV3IGNhcHMgZmxvdy4gTGV0J3MgYmxvY2sgaXQg
dW50aWwgdGhlIG1haW4gdGhyZWFkIGhhcyBjb25zdW1lZCB0aGUgc2FtcGxlcyB3aXRoIHRoZSBv
bGQKLSAgICAgICAgLy8gY2FwcyBhbmQgaGFzIHByb2Nlc3NlZCB0aGUgY2FwcyBjaGFuZ2UuCi0g
ICAgICAgIGFwcGVuZFBpcGVsaW5lLT5tX3Rhc2tRdWV1ZS5lbnF1ZXVlVGFza0FuZFdhaXQ8QWJv
cnRhYmxlVGFza1F1ZXVlOjpWb2lkPihbYXBwZW5kUGlwZWxpbmVdKCkgewotICAgICAgICAgICAg
YXBwZW5kUGlwZWxpbmUtPmFwcHNpbmtDYXBzQ2hhbmdlZCgpOwotICAgICAgICAgICAgcmV0dXJu
IEFib3J0YWJsZVRhc2tRdWV1ZTo6Vm9pZCgpOwotICAgICAgICB9KTsKLSAgICB9KSwgdGhpcyk7
Ci0KICNpZiAhTE9HX0RJU0FCTEVECiAgICAgR1JlZlB0cjxHc3RQYWQ+IGRlbXV4ZXJQYWQgPSBh
ZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9kZW11eC5nZXQoKSwgInNpbmsi
KSk7CiAgICAgbV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5hcHBlbmRQ
aXBlbGluZSA9IHRoaXM7CiAgICAgbV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1h
dGlvbi5kZXNjcmlwdGlvbiA9ICJkZW11eGVyIGRhdGEgZW50ZXJpbmciOwogICAgIG1fZGVtdXhl
ckRhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24ucHJvYmVJZCA9IGdzdF9wYWRfYWRkX3By
b2JlKGRlbXV4ZXJQYWQuZ2V0KCksIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsIHJlaW50ZXJw
cmV0X2Nhc3Q8R3N0UGFkUHJvYmVDYWxsYmFjaz4oYXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVn
SW5mb3JtYXRpb24pLCAmbV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbiwg
bnVsbHB0cik7Ci0gICAgbV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5h
cHBlbmRQaXBlbGluZSA9IHRoaXM7Ci0gICAgbV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJ
bmZvcm1hdGlvbi5kZXNjcmlwdGlvbiA9ICJhcHBzaW5rIGRhdGEgZW50ZXJpbmciOwotICAgIG1f
YXBwc2lua0RhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24ucHJvYmVJZCA9IGdzdF9wYWRf
YWRkX3Byb2JlKGFwcHNpbmtQYWQuZ2V0KCksIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsIHJl
aW50ZXJwcmV0X2Nhc3Q8R3N0UGFkUHJvYmVDYWxsYmFjaz4oYXBwZW5kUGlwZWxpbmVQYWRQcm9i
ZURlYnVnSW5mb3JtYXRpb24pLCAmbV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1h
dGlvbiwgbnVsbHB0cik7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCi0g
ICAgbV9hcHBzaW5rUGFkRXZlbnRQcm9iZUluZm9ybWF0aW9uLmFwcGVuZFBpcGVsaW5lID0gdGhp
czsKLSAgICBtX2FwcHNpbmtQYWRFdmVudFByb2JlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24gPSAi
YXBwc2luayBldmVudCBwcm9iZSI7Ci0gICAgbV9hcHBzaW5rUGFkRXZlbnRQcm9iZUluZm9ybWF0
aW9uLnByb2JlSWQgPSBnc3RfcGFkX2FkZF9wcm9iZShhcHBzaW5rUGFkLmdldCgpLCBHU1RfUEFE
X1BST0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTSwgcmVpbnRlcnByZXRfY2FzdDxHc3RQYWRQcm9i
ZUNhbGxiYWNrPihhcHBlbmRQaXBlbGluZUFwcHNpbmtQYWRFdmVudFByb2JlKSwgJm1fYXBwc2lu
a1BhZEV2ZW50UHJvYmVJbmZvcm1hdGlvbiwgbnVsbHB0cik7CiAjZW5kaWYKIAotICAgIC8vIFRo
ZXNlIHNpZ25hbHMgd29uJ3QgYmUgY29ubmVjdGVkIG91dHNpZGUgb2YgdGhlIGxpZmV0aW1lIG9m
ICJ0aGlzIi4KLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fZGVtdXguZ2V0KCksICJwYWQtYWRkZWQi
LCBHX0NBTExCQUNLKCtbXShHc3RFbGVtZW50KiwgR3N0UGFkKiBkZW11eGVyU3JjUGFkLCBBcHBl
bmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpIHsKLSAgICAgICAgYXBwZW5kUGlwZWxpbmUtPmNv
bm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rRnJvbVN0cmVhbWluZ1RocmVhZChkZW11eGVyU3Jj
UGFkKTsKLSAgICB9KSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2RlbXV4LmdldCgp
LCAicGFkLXJlbW92ZWQiLCBHX0NBTExCQUNLKCtbXShHc3RFbGVtZW50KiwgR3N0UGFkKiBkZW11
eGVyU3JjUGFkLCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpIHsKLSAgICAgICAgYXBw
ZW5kUGlwZWxpbmUtPmRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNpbmtGcm9tQW55VGhy
ZWFkKGRlbXV4ZXJTcmNQYWQpOwotICAgIH0pLCB0aGlzKTsKKyAgICAvLyBUaGVzZSBzaWduYWxz
IHdvbid0IG91dGxpdmUgdGhlIGxpZmV0aW1lIG9mIGB0aGlzYC4KICAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fZGVtdXguZ2V0KCksICJuby1tb3JlLXBhZHMiLCBHX0NBTExCQUNLKCtbXShHc3RFbGVt
ZW50KiwgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5lKSB7CiAgICAgICAgIEFTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOwogICAgICAgICBHU1RfREVCVUcoIlBvc3Rpbmcgbm8tbW9yZS1wYWRz
IHRhc2sgdG8gbWFpbiB0aHJlYWQiKTsKLSAgICAgICAgYXBwZW5kUGlwZWxpbmUtPm1fdGFza1F1
ZXVlLmVucXVldWVUYXNrKFthcHBlbmRQaXBlbGluZV0oKSB7CisgICAgICAgIGFwcGVuZFBpcGVs
aW5lLT5tX3Rhc2tRdWV1ZS5lbnF1ZXVlVGFza0FuZFdhaXQ8QWJvcnRhYmxlVGFza1F1ZXVlOjpW
b2lkPihbYXBwZW5kUGlwZWxpbmVdKCkgewogICAgICAgICAgICAgYXBwZW5kUGlwZWxpbmUtPmRp
ZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoKTsKKyAgICAgICAgICAgIHJldHVybiBBYm9y
dGFibGVUYXNrUXVldWU6OlZvaWQoKTsKICAgICAgICAgfSk7CiAgICAgfSksIHRoaXMpOwotICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9hcHBzaW5rLmdldCgpLCAibmV3LXNhbXBsZSIsIEdfQ0FMTEJB
Q0soK1tdKEdzdEVsZW1lbnQqIGFwcHNpbmssIEFwcGVuZFBpcGVsaW5lKiBhcHBlbmRQaXBlbGlu
ZSkgLT4gR3N0Rmxvd1JldHVybiB7Ci0gICAgICAgIGFwcGVuZFBpcGVsaW5lLT5oYW5kbGVBcHBz
aW5rTmV3U2FtcGxlRnJvbVN0cmVhbWluZ1RocmVhZChhcHBzaW5rKTsKLSAgICAgICAgcmV0dXJu
IEdTVF9GTE9XX09LOwotICAgIH0pLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fYXBw
c2luay5nZXQoKSwgImVvcyIsIEdfQ0FMTEJBQ0soK1tdKEdzdEVsZW1lbnQqLCBBcHBlbmRQaXBl
bGluZSogYXBwZW5kUGlwZWxpbmUpIHsKLSAgICAgICAgLy8gSnVzdCBpZ25vcmUgRU9TIHdoZW4g
aGF2aW5nIG1vcmUgdGhhbiBvbmUgcGFkLiBJdCBsaWtlbHkgbWVhbnMgdGhhdCBvbmUgb2YgdGhl
IHBhZHMgaXMKLSAgICAgICAgLy8gZ29pbmcgdG8gYmUgcmVtb3ZlZCBhbmQgdGhlIHJlbWFpbmlu
ZyBvbmUgd2lsbCBiZSByZWF0dGFjaGVkLgotICAgICAgICBpZiAoYXBwZW5kUGlwZWxpbmUtPm1f
ZXJyb3JSZWNlaXZlZCB8fCBhcHBlbmRQaXBlbGluZS0+bV9kZW11eC0+bnVtc3JjcGFkcyA+IDEp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgR1NUX0VSUk9SKCJBcHBlbmRQaXBlbGlu
ZSdzIGFwcHNpbmsgcmVjZWl2ZWQgRU9TLiBUaGlzIGlzIHVzdWFsbHkgY2F1c2VkIGJ5IGFuIGlu
dmFsaWQgaW5pdGlhbGl6YXRpb24gc2VnbWVudC4iKTsKLSAgICAgICAgYXBwZW5kUGlwZWxpbmUt
PmhhbmRsZUVycm9yQ29uZGl0aW9uRnJvbVN0cmVhbWluZ1RocmVhZCgpOwotICAgIH0pLCB0aGlz
KTsKIAogICAgIC8vIEFkZF9tYW55IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgYSByZWZlcmVuY2Uu
IFRoYXQncyB3aHkgd2UgdXNlZCBhbiBhc3NpZ25tZW50IGJlZm9yZS4KICAgICBnc3RfYmluX2Fk
ZF9tYW55KEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIG1fYXBwc3JjLmdldCgpLCBtX2RlbXV4
LmdldCgpLCBudWxscHRyKTsKQEAgLTI0OSw5ICsxOTIsNiBAQCBBcHBlbmRQaXBlbGluZTo6fkFw
cGVuZFBpcGVsaW5lKCkKICAgICAgICAgZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoKG1fYnVz
LmdldCgpKTsKICAgICB9CiAKLSAgICBpZiAobV9hcHBzcmMpCi0gICAgICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2FwcHNyYy5nZXQoKSwgdGhpcyk7Ci0KICAgICBp
ZiAobV9kZW11eCkgewogI2lmICFMT0dfRElTQUJMRUQKICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+
IGRlbXV4ZXJQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9kZW11
eC5nZXQoKSwgInNpbmsiKSk7CkBAIC0yNjEsMTcgKzIwMSwxNSBAQCBBcHBlbmRQaXBlbGluZTo6
fkFwcGVuZFBpcGVsaW5lKCkKICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9i
eV9kYXRhKG1fZGVtdXguZ2V0KCksIHRoaXMpOwogICAgIH0KIAotICAgIGlmIChtX2FwcHNpbmsp
IHsKLSAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IGFwcHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2Vs
ZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9hcHBzaW5rLmdldCgpLCAic2luayIpKTsKKyAgICBmb3Ig
KHN0ZDo6dW5pcXVlX3B0cjxUcmFjaz4mIHRyYWNrIDogbV90cmFja3MpIHsKKyAgICAgICAgR1Jl
ZlB0cjxHc3RQYWQ+IGFwcHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRp
Y19wYWQodHJhY2stPmFwcHNpbmsuZ2V0KCksICJzaW5rIikpOwogICAgICAgICBnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEoYXBwc2lua1BhZC5nZXQoKSwgdGhpcyk7Ci0gICAg
ICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2FwcHNpbmsuZ2V0KCks
IHRoaXMpOwotCisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YSh0
cmFjay0+YXBwc2luay5nZXQoKSwgdGhpcyk7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgICAgICBn
c3RfcGFkX3JlbW92ZV9wcm9iZShhcHBzaW5rUGFkLmdldCgpLCBtX2FwcHNpbmtEYXRhRW50ZXJp
bmdQYWRQcm9iZUluZm9ybWF0aW9uLnByb2JlSWQpOworICAgICAgICBnc3RfcGFkX3JlbW92ZV9w
cm9iZShhcHBzaW5rUGFkLmdldCgpLCB0cmFjay0+YXBwc2lua0RhdGFFbnRlcmluZ1BhZFByb2Jl
SW5mb3JtYXRpb24ucHJvYmVJZCk7CiAjZW5kaWYKLQogI2lmIEVOQUJMRShFTkNSWVBURURfTUVE
SUEpCi0gICAgICAgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlKGFwcHNpbmtQYWQuZ2V0KCksIG1fYXBw
c2lua1BhZEV2ZW50UHJvYmVJbmZvcm1hdGlvbi5wcm9iZUlkKTsKKyAgICAgICAgZ3N0X3BhZF9y
ZW1vdmVfcHJvYmUoYXBwc2lua1BhZC5nZXQoKSwgdHJhY2stPmFwcHNpbmtQYWRFdmVudFByb2Jl
SW5mb3JtYXRpb24ucHJvYmVJZCk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTM1MSw3MSArMjg5LDM4
IEBAIHZvaWQgQXBwZW5kUGlwZWxpbmU6OmhhbmRsZVN0YXRlQ2hhbmdlTWVzc2FnZShHc3RNZXNz
YWdlKiBtZXNzYWdlKQogICAgIH0KIH0KIAotZ2ludCBBcHBlbmRQaXBlbGluZTo6aWQoKQotewot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAobV9pZCkKLSAgICAgICAgcmV0
dXJuIG1faWQ7Ci0KLSAgICBzdGF0aWMgZ2ludCBzX3RvdGFsQXVkaW8gPSAwOwotICAgIHN0YXRp
YyBnaW50IHNfdG90YWxWaWRlbyA9IDA7Ci0gICAgc3RhdGljIGdpbnQgc190b3RhbFRleHQgPSAw
OwotCi0gICAgc3dpdGNoIChtX3N0cmVhbVR5cGUpIHsKLSAgICBjYXNlIEF1ZGlvOgotICAgICAg
ICBtX2lkID0gKytzX3RvdGFsQXVkaW87Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVmlkZW86
Ci0gICAgICAgIG1faWQgPSArK3NfdG90YWxWaWRlbzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBUZXh0OgotICAgICAgICBtX2lkID0gKytzX3RvdGFsVGV4dDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBVbmtub3duOgotICAgIGNhc2UgSW52YWxpZDoKLSAgICAgICAgR1NUX0VSUk9SKCJU
cnlpbmcgdG8gZ2V0IGlkIGZvciBhIHBpcGVsaW5lIG9mIFVua25vd24vSW52YWxpZCB0eXBlIik7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICBHU1RfREVCVUcoInN0cmVhbVR5cGU9JWQsIGlkPSVkIiwgc3RhdGljX2Nhc3Q8aW50Piht
X3N0cmVhbVR5cGUpLCBtX2lkKTsKLQotICAgIHJldHVybiBtX2lkOwotfQotCi12b2lkIEFwcGVu
ZFBpcGVsaW5lOjpwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKEdzdENhcHMqIGRlbXV4ZXJTcmNQYWRD
YXBzKQordm9pZCBBcHBlbmRQaXBlbGluZTo6cGFyc2VEZW11eGVyU3JjUGFkQ2FwcyhHc3RDYXBz
KiBkZW11eGVyU3JjUGFkQ2FwcywgR1JlZlB0cjxHc3RDYXBzPiogZHN0UGFyc2VkQ2FwcywKKyAg
ICBTdHJlYW1UeXBlKiBkc3RTdHJlYW1UeXBlLCBGbG9hdFNpemUqIGRzdFByZXNlbnRhdGlvblNp
emUpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIG1fZGVtdXhlclNyY1Bh
ZENhcHMgPSBhZG9wdEdSZWYoZGVtdXhlclNyY1BhZENhcHMpOwotICAgIG1fc3RyZWFtVHlwZSA9
IE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VW5rbm93bjsKKyAgICAqZHN0UGFyc2Vk
Q2FwcyA9IEdSZWZQdHI8R3N0Q2Fwcz4oZGVtdXhlclNyY1BhZENhcHMpOworICAgICpkc3RTdHJl
YW1UeXBlID0gU3RyZWFtVHlwZTo6VW5rbm93bjsKKyAgICAqZHN0UHJlc2VudGF0aW9uU2l6ZSA9
IEZsb2F0U2l6ZSgpOwogCi0gICAgY29uc3QgY2hhciogb3JpZ2luYWxNZWRpYVR5cGUgPSBjYXBz
TWVkaWFUeXBlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCkpOworICAgIGNvbnN0IGNoYXIqIG9y
aWdpbmFsTWVkaWFUeXBlID0gY2Fwc01lZGlhVHlwZShkZW11eGVyU3JjUGFkQ2Fwcyk7CiAgICAg
YXV0byYgZ3N0UmVnaXN0cnlTY2FubmVyID0gR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyTVNFOjpz
aW5nbGV0b24oKTsKICAgICBpZiAoIWdzdFJlZ2lzdHJ5U2Nhbm5lci5pc0NvZGVjU3VwcG9ydGVk
KEdTdHJlYW1lclJlZ2lzdHJ5U2Nhbm5lcjo6Q29uZmlndXJhdGlvbjo6RGVjb2RpbmcsIG9yaWdp
bmFsTWVkaWFUeXBlKSkgewotICAgICAgICBtX3ByZXNlbnRhdGlvblNpemUgPSBGbG9hdFNpemUo
KTsKLSAgICAgICAgbV9zdHJlYW1UeXBlID0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVy
OjpJbnZhbGlkOwotICAgIH0gZWxzZSBpZiAoZG9DYXBzSGF2ZVR5cGUobV9kZW11eGVyU3JjUGFk
Q2Fwcy5nZXQoKSwgR1NUX1ZJREVPX0NBUFNfVFlQRV9QUkVGSVgpKSB7Ci0gICAgICAgIG1fcHJl
c2VudGF0aW9uU2l6ZSA9IGdldFZpZGVvUmVzb2x1dGlvbkZyb21DYXBzKG1fZGVtdXhlclNyY1Bh
ZENhcHMuZ2V0KCkpLnZhbHVlX29yKEZsb2F0U2l6ZSgpKTsKLSAgICAgICAgbV9zdHJlYW1UeXBl
ID0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpWaWRlbzsKKyAgICAgICAgKmRzdFN0
cmVhbVR5cGUgPSBTdHJlYW1UeXBlOjpJbnZhbGlkOworICAgIH0gZWxzZSBpZiAoZG9DYXBzSGF2
ZVR5cGUoZGVtdXhlclNyY1BhZENhcHMsIEdTVF9WSURFT19DQVBTX1RZUEVfUFJFRklYKSkgewor
ICAgICAgICAqZHN0UHJlc2VudGF0aW9uU2l6ZSA9IGdldFZpZGVvUmVzb2x1dGlvbkZyb21DYXBz
KGRlbXV4ZXJTcmNQYWRDYXBzKS52YWx1ZV9vcihGbG9hdFNpemUoKSk7CisgICAgICAgICpkc3RT
dHJlYW1UeXBlID0gU3RyZWFtVHlwZTo6VmlkZW87CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9w
cmVzZW50YXRpb25TaXplID0gRmxvYXRTaXplKCk7Ci0gICAgICAgIGlmIChkb0NhcHNIYXZlVHlw
ZShtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpLCBHU1RfQVVESU9fQ0FQU19UWVBFX1BSRUZJWCkp
Ci0gICAgICAgICAgICBtX3N0cmVhbVR5cGUgPSBNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFt
ZXI6OkF1ZGlvOwotICAgICAgICBlbHNlIGlmIChkb0NhcHNIYXZlVHlwZShtX2RlbXV4ZXJTcmNQ
YWRDYXBzLmdldCgpLCBHU1RfVEVYVF9DQVBTX1RZUEVfUFJFRklYKSkKLSAgICAgICAgICAgIG1f
c3RyZWFtVHlwZSA9IE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VGV4dDsKKyAgICAg
ICAgaWYgKGRvQ2Fwc0hhdmVUeXBlKGRlbXV4ZXJTcmNQYWRDYXBzLCBHU1RfQVVESU9fQ0FQU19U
WVBFX1BSRUZJWCkpCisgICAgICAgICAgICAqZHN0U3RyZWFtVHlwZSA9IFN0cmVhbVR5cGU6OkF1
ZGlvOworICAgICAgICBlbHNlIGlmIChkb0NhcHNIYXZlVHlwZShkZW11eGVyU3JjUGFkQ2Fwcywg
R1NUX1RFWFRfQ0FQU19UWVBFX1BSRUZJWCkpCisgICAgICAgICAgICAqZHN0U3RyZWFtVHlwZSA9
IFN0cmVhbVR5cGU6OlRleHQ7CiAgICAgfQogfQogCi12b2lkIEFwcGVuZFBpcGVsaW5lOjphcHBz
aW5rQ2Fwc0NoYW5nZWQoKQordm9pZCBBcHBlbmRQaXBlbGluZTo6YXBwc2lua0NhcHNDaGFuZ2Vk
KFRyYWNrJiB0cmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgLy8g
Q29uc3VtZSBhbnkgcGVuZGluZyBzYW1wbGVzIHdpdGggdGhlIHByZXZpb3VzIGNhcHMuCi0gICAg
Y29uc3VtZUFwcHNpbmtBdmFpbGFibGVTYW1wbGVzKCk7CisgICAgY29uc3VtZUFwcHNpbmtzQXZh
aWxhYmxlU2FtcGxlcygpOwogCi0gICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihn
c3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2FwcHNpbmsuZ2V0KCksICJzaW5rIikpOworICAg
IEdSZWZQdHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19w
YWQodHJhY2suYXBwc2luay5nZXQoKSwgInNpbmsiKSk7CiAgICAgR1JlZlB0cjxHc3RDYXBzPiBj
YXBzID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyhwYWQuZ2V0KCkpKTsKIAog
ICAgIGlmICghY2FwcykKQEAgLTQyNCwzMiArMzI5LDMwIEBAIHZvaWQgQXBwZW5kUGlwZWxpbmU6
OmFwcHNpbmtDYXBzQ2hhbmdlZCgpCiAgICAgLy8gSWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IHRp
bWUgd2UncmUgcGFyc2luZyBhbiBpbml0aWFsaXphdGlvbiBzZWdtZW50LCBmYWlsIGlmIHRoZSB0
cmFjawogICAgIC8vIGhhcyBhIGRpZmZlcmVudCBjb2RlYyBvciB0eXBlIChlLmcuIGlmIHdlIHdl
cmUgcHJldmlvdXNseSBkZW11eGluZyBhbiBhdWRpbyBzdHJlYW0gYW5kCiAgICAgLy8gc29tZW9u
ZSBhcHBlbmRzIGEgdmlkZW8gc3RyZWFtKS4KLSAgICBpZiAobV9hcHBzaW5rQ2FwcyAmJiBnX3N0
cmNtcDAoY2Fwc01lZGlhVHlwZShjYXBzLmdldCgpKSwgY2Fwc01lZGlhVHlwZShtX2FwcHNpbmtD
YXBzLmdldCgpKSkpIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0
KCksICJVc2VyIGFwcGVuZGVkIHRyYWNrIG1ldGFkYXRhIHdpdGggdHlwZSAnJXMnIGZvciBhIFNv
dXJjZUJ1ZmZlciBwcmV2aW91c2x5IGhhbmRsaW5nICclcycuIEVycm9yaW5nIG91dC4iLCBjYXBz
TWVkaWFUeXBlKGNhcHMuZ2V0KCkpLCBjYXBzTWVkaWFUeXBlKG1fYXBwc2lua0NhcHMuZ2V0KCkp
KTsKKyAgICBpZiAodHJhY2suY2FwcyAmJiBnX3N0cmNtcDAoY2Fwc01lZGlhVHlwZShjYXBzLmdl
dCgpKSwgY2Fwc01lZGlhVHlwZSh0cmFjay5jYXBzLmdldCgpKSkpIHsKKyAgICAgICAgR1NUX1dB
Uk5JTkdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJUcmFjayByZWNlaXZlZCBpbmNvbXBhdGli
bGUgY2FwcywgcmVjZWl2ZWQgJyVzJyBmb3IgYSB0cmFjayBwcmV2aW91c2x5IGhhbmRsaW5nICcl
cycuIEVycm9yaW5nIG91dC4iLCBjYXBzTWVkaWFUeXBlKGNhcHMuZ2V0KCkpLCBjYXBzTWVkaWFU
eXBlKHRyYWNrLmNhcHMuZ2V0KCkpKTsKICAgICAgICAgbV9zb3VyY2VCdWZmZXJQcml2YXRlLmFw
cGVuZFBhcnNpbmdGYWlsZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChk
b0NhcHNIYXZlVHlwZShjYXBzLmdldCgpLCBHU1RfVklERU9fQ0FQU19UWVBFX1BSRUZJWCkpIHsK
ICAgICAgICAgaWYgKGF1dG8gc2l6ZSA9IGdldFZpZGVvUmVzb2x1dGlvbkZyb21DYXBzKGNhcHMu
Z2V0KCkpKQotICAgICAgICAgICAgbV9wcmVzZW50YXRpb25TaXplID0gKnNpemU7CisgICAgICAg
ICAgICB0cmFjay5wcmVzZW50YXRpb25TaXplID0gKnNpemU7CiAgICAgfQogCi0gICAgaWYgKG1f
YXBwc2lua0NhcHMgIT0gY2FwcykgewotICAgICAgICBtX2FwcHNpbmtDYXBzID0gV1RGTW92ZShj
YXBzKTsKLSAgICAgICAgbV9wbGF5ZXJQcml2YXRlLT50cmFja0RldGVjdGVkKCp0aGlzLCBtX3Ry
YWNrKTsKLSAgICB9CisgICAgaWYgKHRyYWNrLmNhcHMgIT0gY2FwcykKKyAgICAgICAgdHJhY2su
Y2FwcyA9IFdURk1vdmUoY2Fwcyk7CiB9CiAKIHZvaWQgQXBwZW5kUGlwZWxpbmU6OmhhbmRsZUVu
ZE9mQXBwZW5kKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGNvbnN1bWVB
cHBzaW5rQXZhaWxhYmxlU2FtcGxlcygpOworICAgIGNvbnN1bWVBcHBzaW5rc0F2YWlsYWJsZVNh
bXBsZXMoKTsKICAgICBHU1RfVFJBQ0VfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJOb3RpZnlp
bmcgU291cmNlQnVmZmVyUHJpdmF0ZSB0aGUgYXBwZW5kIGlzIGNvbXBsZXRlIik7CiAgICAgc291
cmNlQnVmZmVyUHJpdmF0ZSgpLmRpZFJlY2VpdmVBbGxQZW5kaW5nU2FtcGxlcygpOwogfQogCi12
b2lkIEFwcGVuZFBpcGVsaW5lOjphcHBzaW5rTmV3U2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYm
IHNhbXBsZSkKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtOZXdTYW1wbGUoY29uc3QgVHJh
Y2smIHRyYWNrLCBHUmVmUHRyPEdzdFNhbXBsZT4mJiBzYW1wbGUpCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKIApAQCAtNDY0LDcgKzM2Nyw3IEBAIHZvaWQgQXBwZW5kUGlwZWxpbmU6
OmFwcHNpbmtOZXdTYW1wbGUoR1JlZlB0cjxHc3RTYW1wbGU+JiYgc2FtcGxlKQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBtZWRpYVNhbXBsZSA9IE1lZGlhU2FtcGxlR1N0cmVh
bWVyOjpjcmVhdGUoV1RGTW92ZShzYW1wbGUpLCBtX3ByZXNlbnRhdGlvblNpemUsIHRyYWNrSWQo
KSk7CisgICAgYXV0byBtZWRpYVNhbXBsZSA9IE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGUo
V1RGTW92ZShzYW1wbGUpLCB0cmFjay5wcmVzZW50YXRpb25TaXplLCB0cmFjay50cmFja0lkKTsK
IAogICAgIEdTVF9UUkFDRSgiYXBwZW5kOiB0cmFja0lkPSVzIFBUUz0lcyBEVFM9JXMgRFVSPSVz
IHByZXNlbnRhdGlvblNpemU9JS4wZnglLjBmIiwKICAgICAgICAgbWVkaWFTYW1wbGUtPnRyYWNr
SUQoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLApAQCAtNDk5LDQ1ICs0MDIsOTMgQEAgdm9pZCBB
cHBlbmRQaXBlbGluZTo6ZGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudCgpCiB7CiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6
OkluaXRpYWxpemF0aW9uU2VnbWVudCBpbml0aWFsaXphdGlvblNlZ21lbnQ7CisgICAgYm9vbCBp
c0ZpcnN0SW5pdGlhbGl6YXRpb25TZWdtZW50ID0gIW1faGFzUmVjZWl2ZWRGaXJzdEluaXRpYWxp
emF0aW9uU2VnbWVudDsKIAotICAgIEdTVF9ERUJVRygiTm90aWZ5aW5nIFNvdXJjZUJ1ZmZlciBm
b3IgdHJhY2sgJXMiLCAobV90cmFjaykgPyBtX3RyYWNrLT5pZCgpLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkgOiBudWxscHRyKTsKLSAgICBpbml0aWFsaXphdGlvblNlZ21lbnQuZHVyYXRpb24gPSBt
X2luaXRpYWxEdXJhdGlvbjsKKyAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFs
aXphdGlvblNlZ21lbnQgaW5pdGlhbGl6YXRpb25TZWdtZW50OwogCi0gICAgc3dpdGNoIChtX3N0
cmVhbVR5cGUpIHsKLSAgICBjYXNlIEF1ZGlvOiB7Ci0gICAgICAgIFNvdXJjZUJ1ZmZlclByaXZh
dGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6QXVkaW9UcmFja0luZm9ybWF0aW9uIGlu
Zm87Ci0gICAgICAgIGluZm8udHJhY2sgPSBzdGF0aWNfY2FzdDxBdWRpb1RyYWNrUHJpdmF0ZUdT
dHJlYW1lcio+KG1fdHJhY2suZ2V0KCkpOwotICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gR1N0
cmVhbWVyTWVkaWFEZXNjcmlwdGlvbjo6Y3JlYXRlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCkp
OwotICAgICAgICBpbml0aWFsaXphdGlvblNlZ21lbnQuYXVkaW9UcmFja3MuYXBwZW5kKGluZm8p
OwotICAgICAgICBicmVhazsKKyAgICBnaW50NjQgdGltZUxlbmd0aCA9IDA7CisgICAgaWYgKGdz
dF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uKG1fZGVtdXguZ2V0KCksIEdTVF9GT1JNQVRfVElNRSwg
JnRpbWVMZW5ndGgpCisgICAgICAgICYmIHN0YXRpY19jYXN0PGd1aW50NjQ+KHRpbWVMZW5ndGgp
ICE9IEdTVF9DTE9DS19USU1FX05PTkUpCisgICAgICAgIGluaXRpYWxpemF0aW9uU2VnbWVudC5k
dXJhdGlvbiA9IE1lZGlhVGltZShHU1RfVElNRV9BU19VU0VDT05EUyh0aW1lTGVuZ3RoKSwgR19V
U0VDX1BFUl9TRUMpOworICAgIGVsc2UKKyAgICAgICAgaW5pdGlhbGl6YXRpb25TZWdtZW50LmR1
cmF0aW9uID0gTWVkaWFUaW1lOjpwb3NpdGl2ZUluZmluaXRlVGltZSgpOworCisgICAgaWYgKGlz
Rmlyc3RJbml0aWFsaXphdGlvblNlZ21lbnQpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgVHJhY2sg
b2JqZWN0IHBlciBwYWQuCisgICAgICAgIGludCB0cmFja0luZGV4ID0gMDsKKyAgICAgICAgZm9y
IChHc3RQYWQqIHBhZCA6IEdzdEl0ZXJhdG9yQWRhcHRvcjxHc3RQYWQ+KEdVbmlxdWVQdHI8R3N0
SXRlcmF0b3I+KGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMobV9kZW11eC5nZXQoKSkpKSkg
eworICAgICAgICAgICAgYm9vbCBhcHBlbmRQYXJzaW5nRmFpbGVkID0gZmFsc2U7CisgICAgICAg
ICAgICBUcmFjayogdHJhY2sgPSB0cnlDcmVhdGVUcmFja0Zyb21QYWQocGFkLCAmYXBwZW5kUGFy
c2luZ0ZhaWxlZCwgdHJhY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoYXBwZW5kUGFyc2luZ0Zh
aWxlZCkgeworICAgICAgICAgICAgICAgIC8vIGFwcGVuZFBhcnNpbmdGYWlsZWQoKSB3aWxsIGlt
bWVkaWF0ZWx5IGNhdXNlIGEgcmVzZXRQYXJzZXJTdGF0ZSgpIHdoaWNoIHdpbGwgc3RvcCBkZW11
eGluZywgdGhlbiB0aGUKKyAgICAgICAgICAgICAgICAvLyBBcHBlbmRQaXBlbGluZSB3aWxsIGJl
IGRlc3Ryb3llZC4KKyAgICAgICAgICAgICAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGUuYXBwZW5k
UGFyc2luZ0ZhaWxlZCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICh0cmFjaykKKyAgICAgICAgICAgICAgICBsaW5rUGFkV2l0aFRyYWNr
KHBhZCwgKnRyYWNrKTsKKyAgICAgICAgICAgIHRyYWNrSW5kZXgrKzsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIExpbmsgcGFkcyB0byBleGlzdGluZyBUcmFjayBvYmplY3Rz
IHRoYXQgZG9uJ3QgaGF2ZSBhIGxpbmtlZCBwYWQgeWV0LgorICAgICAgICB1bnNpZ25lZCBjb3Vu
dFBhZHMgPSAwOworICAgICAgICBmb3IgKEdzdFBhZCogcGFkIDogR3N0SXRlcmF0b3JBZGFwdG9y
PEdzdFBhZD4oR1VuaXF1ZVB0cjxHc3RJdGVyYXRvcj4oZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zcmNf
cGFkcyhtX2RlbXV4LmdldCgpKSkpKSB7CisgICAgICAgICAgICBjb3VudFBhZHMrKzsKKyAgICAg
ICAgICAgIGlmICghdHJ5TWF0Y2hQYWRUb0V4aXN0aW5nVHJhY2socGFkKSkgeworICAgICAgICAg
ICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChwaXBlbGluZSgpLCAiQ2FuJ3QgbWF0Y2ggcGFkIHRv
IGV4aXN0aW5nIHRyYWNrcyBpbiB0aGUgQXBwZW5kUGlwZWxpbmU6ICUiIEdTVF9QVFJfRk9STUFU
LCBwYWQpOworICAgICAgICAgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS5hcHBlbmRQYXJz
aW5nRmFpbGVkKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGlmIChjb3VudFBhZHMgIT0gbV90cmFja3Muc2l6ZSgpKSB7CisgICAg
ICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QocGlwZWxpbmUoKSwgIk51bWJlciBvZiBwYWRzICgl
dSkgZG9lc24ndCBtYXRjaCBudW1iZXIgb2YgdHJhY2tzICglenUpLiIsIGNvdW50UGFkcywgbV90
cmFja3Muc2l6ZSgpKTsKKyAgICAgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS5hcHBlbmRQ
YXJzaW5nRmFpbGVkKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9Ci0g
ICAgY2FzZSBWaWRlbzogewotICAgICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0
aWFsaXphdGlvblNlZ21lbnQ6OlZpZGVvVHJhY2tJbmZvcm1hdGlvbiBpbmZvOwotICAgICAgICBp
bmZvLnRyYWNrID0gc3RhdGljX2Nhc3Q8VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIqPihtX3Ry
YWNrLmdldCgpKTsKLSAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IEdTdHJlYW1lck1lZGlhRGVz
Y3JpcHRpb246OmNyZWF0ZShtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpKTsKLSAgICAgICAgaW5p
dGlhbGl6YXRpb25TZWdtZW50LnZpZGVvVHJhY2tzLmFwcGVuZChpbmZvKTsKLSAgICAgICAgYnJl
YWs7CisKKyAgICBmb3IgKHN0ZDo6dW5pcXVlX3B0cjxUcmFjaz4mIHRyYWNrIDogbV90cmFja3Mp
IHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiQWRkaW5nIHRyYWNrIHRv
IGluaXRpYWxpemF0aW9uIHdpdGggc2VnbWVudCB0eXBlICVzLCBpZCAlcy4iLCBzdHJlYW1UeXBl
VG9TdHJpbmcodHJhY2stPnN0cmVhbVR5cGUpLCB0cmFjay0+dHJhY2tJZC5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgc3dpdGNoICh0cmFjay0+c3RyZWFtVHlwZSkgeworICAgICAg
ICBjYXNlIEF1ZGlvOiB7CisgICAgICAgICAgICBBU1NFUlQodHJhY2stPndlYktpdFRyYWNrKTsK
KyAgICAgICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2Vn
bWVudDo6QXVkaW9UcmFja0luZm9ybWF0aW9uIGluZm87CisgICAgICAgICAgICBpbmZvLnRyYWNr
ID0gc3RhdGljX2Nhc3Q8QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIqPih0cmFjay0+d2ViS2l0
VHJhY2suZ2V0KCkpOworICAgICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IEdTdHJlYW1lck1l
ZGlhRGVzY3JpcHRpb246OmNyZWF0ZSh0cmFjay0+Y2Fwcy5nZXQoKSk7CisgICAgICAgICAgICBp
bml0aWFsaXphdGlvblNlZ21lbnQuYXVkaW9UcmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBWaWRlbzogeworICAgICAgICAgICAg
QVNTRVJUKHRyYWNrLT53ZWJLaXRUcmFjayk7CisgICAgICAgICAgICBTb3VyY2VCdWZmZXJQcml2
YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQ6OlZpZGVvVHJhY2tJbmZvcm1hdGlvbiBp
bmZvOworICAgICAgICAgICAgaW5mby50cmFjayA9IHN0YXRpY19jYXN0PFZpZGVvVHJhY2tQcml2
YXRlR1N0cmVhbWVyKj4odHJhY2stPndlYktpdFRyYWNrLmdldCgpKTsKKyAgICAgICAgICAgIGlu
Zm8uZGVzY3JpcHRpb24gPSBHU3RyZWFtZXJNZWRpYURlc2NyaXB0aW9uOjpjcmVhdGUodHJhY2st
PmNhcHMuZ2V0KCkpOworICAgICAgICAgICAgaW5pdGlhbGl6YXRpb25TZWdtZW50LnZpZGVvVHJh
Y2tzLmFwcGVuZChpbmZvKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBHU1RfRVJST1IoIlVuc3VwcG9ydGVkIHN0cmVhbSB0eXBl
IG9yIGNvZGVjIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KLSAgICBk
ZWZhdWx0OgotICAgICAgICBHU1RfRVJST1IoIlVuc3VwcG9ydGVkIHN0cmVhbSB0eXBlIG9yIGNv
ZGVjIik7Ci0gICAgICAgIGJyZWFrOworCisgICAgaWYgKGlzRmlyc3RJbml0aWFsaXphdGlvblNl
Z21lbnQpIHsKKyAgICAgICAgZm9yIChzdGQ6OnVuaXF1ZV9wdHI8VHJhY2s+JiB0cmFjayA6IG1f
dHJhY2tzKSB7CisgICAgICAgICAgICBpZiAodHJhY2stPnN0cmVhbVR5cGUgPT0gU3RyZWFtVHlw
ZTo6VmlkZW8pIHsKKyAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCks
ICJTZXR0aW5nIGluaXRpYWwgdmlkZW8gc2l6ZSB0byB0aGF0IG9mIHRyYWNrIHdpdGggaWQgJyVz
JywgJWd4JWcuIiwKKyAgICAgICAgICAgICAgICAgICAgdHJhY2stPnRyYWNrSWQuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPih0cmFjay0+cHJlc2VudGF0aW9uU2l6
ZS53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPih0cmFjay0+cHJlc2VudGF0aW9uU2l6ZS5o
ZWlnaHQoKSkpOworICAgICAgICAgICAgICAgIG1fcGxheWVyUHJpdmF0ZS0+c2V0SW5pdGlhbFZp
ZGVvU2l6ZSh0cmFjay0+cHJlc2VudGF0aW9uU2l6ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKKyAgICBtX2hhc1JlY2VpdmVkRmly
c3RJbml0aWFsaXphdGlvblNlZ21lbnQgPSB0cnVlOworICAgIEdTVF9ERUJVRygiTm90aWZ5aW5n
IFNvdXJjZUJ1ZmZlciBvZiBpbml0aWFsaXphdGlvbiBzZWdlbWVudC4iKTsKICAgICBtX3NvdXJj
ZUJ1ZmZlclByaXZhdGUuZGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudChXVEZNb3ZlKGlu
aXRpYWxpemF0aW9uU2VnbWVudCksIFtdKCkgeyB9KTsKIH0KIAotQXRvbVN0cmluZyBBcHBlbmRQ
aXBlbGluZTo6dHJhY2tJZCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAg
IGlmICghbV90cmFjaykKLSAgICAgICAgcmV0dXJuIEF0b21TdHJpbmcoKTsKLQotICAgIHJldHVy
biBtX3RyYWNrLT5pZCgpOwotfQotCi12b2lkIEFwcGVuZFBpcGVsaW5lOjpjb25zdW1lQXBwc2lu
a0F2YWlsYWJsZVNhbXBsZXMoKQordm9pZCBBcHBlbmRQaXBlbGluZTo6Y29uc3VtZUFwcHNpbmtz
QXZhaWxhYmxlU2FtcGxlcygpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIApAQCAt
NTQ3LDkgKzQ5OCwxMSBAQCB2b2lkIEFwcGVuZFBpcGVsaW5lOjpjb25zdW1lQXBwc2lua0F2YWls
YWJsZVNhbXBsZXMoKQogICAgIC8vIEJhdGNoIGR1cmF0aW9uIGNoYW5nZXMgc28gdGhhdCBpZiB3
ZSBwaWNrIDEwMCBvZiBzdWNoIHNhbXBsZXMgd2UgZG9uJ3QgaGF2ZSB0byBydW4gMTAwIHRpbWVz
CiAgICAgLy8gbGF5b3V0IGZvciB0aGUgdmlkZW8gY29udHJvbHMsIGJ1dCBvbmx5IG9uY2UuCiAg
ICAgbV9wbGF5ZXJQcml2YXRlLT5ibG9ja0R1cmF0aW9uQ2hhbmdlcygpOwotICAgIHdoaWxlICgo
c2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lua190cnlfcHVsbF9zYW1wbGUoR1NUX0FQUF9T
SU5LKG1fYXBwc2luay5nZXQoKSksIDApKSkpIHsKLSAgICAgICAgYXBwc2lua05ld1NhbXBsZShX
VEZNb3ZlKHNhbXBsZSkpOwotICAgICAgICBiYXRjaGVkU2FtcGxlQ291bnQrKzsKKyAgICBmb3Ig
KHN0ZDo6dW5pcXVlX3B0cjxUcmFjaz4mIHRyYWNrIDogbV90cmFja3MpIHsKKyAgICAgICAgd2hp
bGUgKChzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3RyeV9wdWxsX3NhbXBsZShHU1Rf
QVBQX1NJTksodHJhY2stPmFwcHNpbmsuZ2V0KCkpLCAwKSkpKSB7CisgICAgICAgICAgICBhcHBz
aW5rTmV3U2FtcGxlKCp0cmFjaywgV1RGTW92ZShzYW1wbGUpKTsKKyAgICAgICAgICAgIGJhdGNo
ZWRTYW1wbGVDb3VudCsrOworICAgICAgICB9CiAgICAgfQogICAgIG1fcGxheWVyUHJpdmF0ZS0+
dW5ibG9ja0R1cmF0aW9uQ2hhbmdlcygpOwogCkBAIC01NzMsOSArNTI2LDYgQEAgdm9pZCBBcHBl
bmRQaXBlbGluZTo6cmVzZXRQYXJzZXJTdGF0ZSgpCiAgICAgLy8gUmVzZXQgdGhlIHN0YXRlIG9m
IGFsbCBlbGVtZW50cyBpbiB0aGUgcGlwZWxpbmUuCiAgICAgYXNzZXJ0ZWRFbGVtZW50U2V0U3Rh
dGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1JFQURZKTsKIAotICAgIC8vIFRoZSBwYXJz
ZXIgaXMgdGVhciBkb3duIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgZGVtdXhlciBpcyByZXNldCAo
c2VlIGRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNpbmtGcm9tQW55VGhyZWFkKCkpLgot
ICAgIEFTU0VSVCghbV9wYXJzZXIpOwotCiAgICAgLy8gU2V0IHRoZSBwaXBlbGluZSB0byBQTEFZ
SU5HIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgYWdhaW4uCiAgICAgYXNzZXJ0ZWRFbGVtZW50U2V0
U3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BMQVlJTkcpOwogCkBAIC02NDIsMjAg
KzU5MiwxOCBAQCB2b2lkIEFwcGVuZFBpcGVsaW5lOjpoYW5kbGVBcHBzaW5rTmV3U2FtcGxlRnJv
bVN0cmVhbWluZ1RocmVhZChHc3RFbGVtZW50KikKICAgICAgICAgR1NUX1RSQUNFKCJQb3N0aW5n
IGFwcHNpbmstbmV3LXNhbXBsZSB0YXNrIHRvIHRoZSBtYWluIHRocmVhZCIpOwogICAgICAgICBt
X3Rhc2tRdWV1ZS5lbnF1ZXVlVGFzayhbdGhpc10oKSB7CiAgICAgICAgICAgICBtX3dhc0J1c0Fs
cmVhZHlOb3RpZmllZE9mQXZhaWxhYmxlU2FtcGxlcy5jbGVhcigpOwotICAgICAgICAgICAgY29u
c3VtZUFwcHNpbmtBdmFpbGFibGVTYW1wbGVzKCk7CisgICAgICAgICAgICBjb25zdW1lQXBwc2lu
a3NBdmFpbGFibGVTYW1wbGVzKCk7CiAgICAgICAgIH0pOwogICAgIH0KIH0KIAogc3RhdGljIEdS
ZWZQdHI8R3N0RWxlbWVudD4KLWNyZWF0ZU9wdGlvbmFsUGFyc2VyRm9yRm9ybWF0KEdzdFBhZCog
ZGVtdXhlclNyY1BhZCkKK2NyZWF0ZU9wdGlvbmFsUGFyc2VyRm9yRm9ybWF0KGNvbnN0IEF0b21T
dHJpbmcmIHRyYWNrSWQsIGNvbnN0IEdzdENhcHMqIGNhcHMpCiB7Ci0gICAgR1JlZlB0cjxHc3RD
YXBzPiBwYWRDYXBzID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyhkZW11eGVy
U3JjUGFkKSk7Ci0gICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3Ry
dWN0dXJlKHBhZENhcHMuZ2V0KCksIDApOworICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Z3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShjYXBzLCAwKTsKICAgICBjb25zdCBjaGFyKiBtZWRpYVR5
cGUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lKHN0cnVjdHVyZSk7CiAKLSAgICBHVW5pcXVlUHRy
PGNoYXI+IGRlbXV4ZXJQYWROYW1lKGdzdF9wYWRfZ2V0X25hbWUoZGVtdXhlclNyY1BhZCkpOwot
ICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGFyc2VyTmFtZShnX3N0cmR1cF9wcmludGYoIiVzX3BhcnNl
ciIsIGRlbXV4ZXJQYWROYW1lLmdldCgpKSk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXJzZXJO
YW1lKGdfc3RyZHVwX3ByaW50ZigiJXNfcGFyc2VyIiwgdHJhY2tJZC5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKSk7CiAKICAgICBpZiAoIWdfc3RyY21wMChtZWRpYVR5cGUsICJhdWRpby94LW9wdXMi
KSkgewogICAgICAgICBHc3RFbGVtZW50KiBvcHVzcGFyc2UgPSBtYWtlR1N0cmVhbWVyRWxlbWVu
dCgib3B1c3BhcnNlIiwgcGFyc2VyTmFtZS5nZXQoKSk7CkBAIC02NjksMjIyICs2MTcsMjM1IEBA
IGNyZWF0ZU9wdGlvbmFsUGFyc2VyRm9yRm9ybWF0KEdzdFBhZCogZGVtdXhlclNyY1BhZCkKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBBcHBlbmRQaXBlbGluZTo6Y29ubmVjdERlbXV4
ZXJTcmNQYWRUb0FwcHNpbmtGcm9tU3RyZWFtaW5nVGhyZWFkKEdzdFBhZCogZGVtdXhlclNyY1Bh
ZCkKK0F0b21TdHJpbmcgQXBwZW5kUGlwZWxpbmU6OmdlbmVyYXRlVHJhY2tJZChTdHJlYW1UeXBl
IHN0cmVhbVR5cGUsIGludCBwYWRJbmRleCkKIHsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKLQotICAgIEdTVF9ERUJVRygiY29ubmVjdGluZyB0byBhcHBzaW5rIik7Ci0KLSAgICBpZiAo
bV9kZW11eC0+bnVtc3JjcGFkcyA+IDEpIHsKLSAgICAgICAgR1NUX1dBUk5JTkcoIk9ubHkgb25l
IHN0cmVhbSBwZXIgU291cmNlQnVmZmVyIGlzIGFsbG93ZWQhIElnbm9yaW5nIHN0cmVhbSAlZCBi
eSBhZGRpbmcgYSBibGFjayBob2xlIHByb2JlLiIsIG1fZGVtdXgtPm51bXNyY3BhZHMpOwotICAg
ICAgICBndWxvbmcgcHJvYmVJZCA9IGdzdF9wYWRfYWRkX3Byb2JlKGRlbXV4ZXJTcmNQYWQsIEdT
VF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UGFkUHJvYmVDYWxs
YmFjaz4oYXBwZW5kUGlwZWxpbmVEZW11eGVyQmxhY2tIb2xlUGFkUHJvYmUpLCBudWxscHRyLCBu
dWxscHRyKTsKLSAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZGVtdXhlclNyY1Bh
ZCksICJibGFja0hvbGVQcm9iZUlkIiwgR1VMT05HX1RPX1BPSU5URVIocHJvYmVJZCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR1JlZlB0cjxHc3RQYWQ+IGFwcHNpbmtTaW5rUGFk
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYXBwc2luay5nZXQoKSwg
InNpbmsiKSk7Ci0KLSAgICAvLyBPbmx5IG9uZSBzdHJlYW0gcGVyIGRlbXV4ZXIgaXMgc3VwcG9y
dGVkLgotICAgIEFTU0VSVCghZ3N0X3BhZF9pc19saW5rZWQoYXBwc2lua1NpbmtQYWQuZ2V0KCkp
KTsKLQotICAgIGdpbnQ2NCB0aW1lTGVuZ3RoID0gMDsKLSAgICBpZiAoZ3N0X2VsZW1lbnRfcXVl
cnlfZHVyYXRpb24obV9kZW11eC5nZXQoKSwgR1NUX0ZPUk1BVF9USU1FLCAmdGltZUxlbmd0aCkK
LSAgICAgICAgJiYgc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4odGltZUxlbmd0aCkgIT0gR1NUX0NMT0NL
X1RJTUVfTk9ORSkKLSAgICAgICAgbV9pbml0aWFsRHVyYXRpb24gPSBNZWRpYVRpbWUoR1NUX1RJ
TUVfQVNfVVNFQ09ORFModGltZUxlbmd0aCksIEdfVVNFQ19QRVJfU0VDKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1faW5pdGlhbER1cmF0aW9uID0gTWVkaWFUaW1lOjpwb3NpdGl2ZUluZmluaXRlVGlt
ZSgpOwotCi0gICAgR1NUX0RFQlVHKCJSZXF1ZXN0aW5nIGRlbXV4ZXItY29ubmVjdC10by1hcHBz
aW5rIHRvIG1haW4gdGhyZWFkIik7Ci0gICAgYXV0byByZXNwb25zZSA9IG1fdGFza1F1ZXVlLmVu
cXVldWVUYXNrQW5kV2FpdDxBYm9ydGFibGVUYXNrUXVldWU6OlZvaWQ+KFt0aGlzLCBkZW11eGVy
U3JjUGFkXSgpIHsKLSAgICAgICAgY29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmsoZGVtdXhl
clNyY1BhZCk7Ci0gICAgICAgIHJldHVybiBBYm9ydGFibGVUYXNrUXVldWU6OlZvaWQoKTsKLSAg
ICB9KTsKLSAgICBpZiAoIXJlc3BvbnNlKSB7Ci0gICAgICAgIC8vIFRoZSBBcHBlbmRQaXBlbGlu
ZSBoYXMgYmVlbiBkZXN0cm95ZWQgb3IgYWJvcnRlZCBiZWZvcmUgd2UgcmVjZWl2ZWQgYSByZXNw
b25zZS4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIE11c3QgYmUgZG9uZSBpbiB0
aGUgdGhyZWFkIHdlIHdlcmUgY2FsbGVkIGZyb20gKHVzdWFsbHkgc3RyZWFtaW5nIHRocmVhZCku
Ci0gICAgYm9vbCBpc0RhdGEgPSAobV9zdHJlYW1UeXBlID09IE1lZGlhU291cmNlU3RyZWFtVHlw
ZUdTdHJlYW1lcjo6QXVkaW8pCi0gICAgICAgIHx8IChtX3N0cmVhbVR5cGUgPT0gTWVkaWFTb3Vy
Y2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpWaWRlbykKLSAgICAgICAgfHwgKG1fc3RyZWFtVHlwZSA9
PSBNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlRleHQpOwotCi0gICAgaWYgKGlzRGF0
YSkgewotICAgICAgICBHUmVmUHRyPEdzdE9iamVjdD4gcGFyZW50ID0gYWRvcHRHUmVmKGdzdF9l
bGVtZW50X2dldF9wYXJlbnQobV9hcHBzaW5rLmdldCgpKSk7Ci0gICAgICAgIGlmICghcGFyZW50
KQotICAgICAgICAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgbV9h
cHBzaW5rLmdldCgpKTsKLQotICAgICAgICAvLyBDdXJyZW50IGhlYWQgb2YgdGhlIHBpcGVsaW5l
IGJlaW5nIGJ1aWx0LgotICAgICAgICBHUmVmUHRyPEdzdFBhZD4gY3VycmVudFNyY1BhZCA9IGRl
bXV4ZXJTcmNQYWQ7Ci0KLSAgICAgICAgLy8gU29tZSBhdWRpbyBmaWxlcyB1bmhlbHBmdWxseSBv
bWl0IHRoZSBkdXJhdGlvbiBvZiBmcmFtZXMgaW4gdGhlIGNvbnRhaW5lci4gV2UgbmVlZCB0byBw
YXJzZQotICAgICAgICAvLyB0aGUgY29udGFpbmVkIGF1ZGlvIHN0cmVhbXMgaW4gb3JkZXIgdG8g
a25vdyB0aGUgZHVyYXRpb24gb2YgdGhlIGZyYW1lcy4KLSAgICAgICAgLy8gVGhpcyBpcyBrbm93
biB0byBiZSBhbiBpc3N1ZSB3aXRoIFlvdVR1YmUgV2ViTSBmaWxlcyBjb250YWluaW5nIE9wdXMg
YXVkaW8gYXMgb2YgWVRUVjIwMTguCi0gICAgICAgIG1fcGFyc2VyID0gY3JlYXRlT3B0aW9uYWxQ
YXJzZXJGb3JGb3JtYXQoY3VycmVudFNyY1BhZC5nZXQoKSk7Ci0gICAgICAgIGlmIChtX3BhcnNl
cikgewotICAgICAgICAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwg
bV9wYXJzZXIuZ2V0KCkpOwotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRo
X3BhcmVudChtX3BhcnNlci5nZXQoKSk7Ci0KLSAgICAgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBw
YXJzZXJTaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fcGFy
c2VyLmdldCgpLCAic2luayIpKTsKLSAgICAgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYXJzZXJT
cmNQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9wYXJzZXIuZ2V0
KCksICJzcmMiKSk7Ci0KLSAgICAgICAgICAgIGdzdF9wYWRfbGluayhjdXJyZW50U3JjUGFkLmdl
dCgpLCBwYXJzZXJTaW5rUGFkLmdldCgpKTsKLSAgICAgICAgICAgIGN1cnJlbnRTcmNQYWQgPSBw
YXJzZXJTcmNQYWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBnc3RfcGFkX2xpbmsoY3VycmVudFNy
Y1BhZC5nZXQoKSwgYXBwc2lua1NpbmtQYWQuZ2V0KCkpOwotCi0gICAgICAgIGdzdF9lbGVtZW50
X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobV9hcHBzaW5rLmdldCgpKTsKLQotICAgICAgICBHU1Rf
REVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwg
R1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCAid2Via2l0LWFmdGVyLWxpbmsiKTsKKyAgICBzd2l0
Y2ggKHN0cmVhbVR5cGUpIHsKKyAgICBjYXNlIEF1ZGlvOgorICAgICAgICByZXR1cm4gbWFrZVN0
cmluZygiQSIsIHBhZEluZGV4KTsKKyAgICBjYXNlIFZpZGVvOgorICAgICAgICByZXR1cm4gbWFr
ZVN0cmluZygiViIsIHBhZEluZGV4KTsKKyAgICBjYXNlIFRleHQ6CisgICAgICAgIHJldHVybiBt
YWtlU3RyaW5nKCJUIiwgcGFkSW5kZXgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBt
YWtlU3RyaW5nKCJPIiwgcGFkSW5kZXgpOwogICAgIH0KIH0KIAotdm9pZCBBcHBlbmRQaXBlbGlu
ZTo6Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmsoR3N0UGFkKiBkZW11eGVyU3JjUGFkKQor
QXBwZW5kUGlwZWxpbmU6OlRyYWNrKiBBcHBlbmRQaXBlbGluZTo6dHJ5Q3JlYXRlVHJhY2tGcm9t
UGFkKEdzdFBhZCogZGVtdXhlclNyY1BhZCwgYm9vbCogZHN0QXBwZW5kUGFyc2luZ0ZhaWxlZCwg
aW50IHRyYWNrSW5kZXgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBHU1Rf
REVCVUcoIkNvbm5lY3RpbmcgdG8gYXBwc2luayIpOworICAgIEFTU0VSVCghbV9oYXNSZWNlaXZl
ZEZpcnN0SW5pdGlhbGl6YXRpb25TZWdtZW50KTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVs
aW5lKCksICJDcmVhdGluZyBUcmFjayBvYmplY3QgZm9yIHBhZCAlIiBHU1RfUFRSX0ZPUk1BVCwg
ZGVtdXhlclNyY1BhZCk7CiAKICAgICBjb25zdCBTdHJpbmcmIHR5cGUgPSBtX3NvdXJjZUJ1ZmZl
clByaXZhdGUudHlwZSgpLmNvbnRhaW5lclR5cGUoKTsKICAgICBpZiAodHlwZS5lbmRzV2l0aCgi
d2VibSIpKQogICAgICAgICBnc3RfcGFkX2FkZF9wcm9iZShkZW11eGVyU3JjUGFkLCBHU1RfUEFE
X1BST0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTSwgbWF0cm9za2FkZW11eEZvcmNlU2VnbWVudFN0
YXJ0VG9FcXVhbFplcm8sIG51bGxwdHIsIG51bGxwdHIpOwogCi0gICAgR1JlZlB0cjxHc3RQYWQ+
IHNpbmtTaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYXBw
c2luay5nZXQoKSwgInNpbmsiKSk7Ci0KLSAgICAvLyBPbmx5IG9uZSBzdHJlYW0gcGVyIGRlbXV4
ZXIgaXMgc3VwcG9ydGVkLgotICAgIEFTU0VSVCghZ3N0X3BhZF9pc19saW5rZWQoc2lua1NpbmtQ
YWQuZ2V0KCkpKTsKLQotICAgIC8vIEFzIGl0IGlzIG5vdywgcmVzZXRQYXJzZXJTdGF0ZSgpIHdp
bGwgY2F1c2UgdGhlIHBhZHMgdG8gYmUgZGlzY29ubmVjdGVkLCBzbyB0aGV5IHdpbGwgbGF0ZXIg
YmUgcmUtYWRkZWQgb24gdGhlIG5leHQgaW5pdGlhbGl6YXRpb24gc2VnbWVudC4KLQotICAgIEdS
ZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMo
R1NUX1BBRChkZW11eGVyU3JjUGFkKSkpOwotCisgICAgR1JlZlB0cjxHc3RDYXBzPiBwYXJzZWRD
YXBzOworICAgIFN0cmVhbVR5cGUgc3RyZWFtVHlwZTsKKyAgICBGbG9hdFNpemUgcHJlc2VudGF0
aW9uU2l6ZTsKKyAgICBwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKGFkb3B0R1JlZihnc3RfcGFkX2dl
dF9jdXJyZW50X2NhcHMoZGVtdXhlclNyY1BhZCkpLmdldCgpLCAmcGFyc2VkQ2FwcywgJnN0cmVh
bVR5cGUsICZwcmVzZW50YXRpb25TaXplKTsKICNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVH
CiAgICAgewotICAgICAgICBHVW5pcXVlUHRyPGdjaGFyPiBzdHJjYXBzKGdzdF9jYXBzX3RvX3N0
cmluZyhjYXBzLmdldCgpKSk7CisgICAgICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHN0cmNhcHMoZ3N0
X2NhcHNfdG9fc3RyaW5nKHBhcnNlZENhcHMuZ2V0KCkpKTsKICAgICAgICAgR1NUX0RFQlVHKCIl
cyIsIHN0cmNhcHMuZ2V0KCkpOwogICAgIH0KICNlbmRpZgogCi0gICAgcGFyc2VEZW11eGVyU3Jj
UGFkQ2Fwcyhnc3RfY2Fwc19yZWYoY2Fwcy5nZXQoKSkpOworICAgIGlmIChzdHJlYW1UeXBlID09
IFN0cmVhbVR5cGU6OkludmFsaWQpIHsKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKG1fcGlw
ZWxpbmUuZ2V0KCksICJVbnN1cHBvcnRlZCB0cmFjayBjb2RlYzogJSIgR1NUX1BUUl9GT1JNQVQs
IHBhcnNlZENhcHMuZ2V0KCkpOworICAgICAgICAvLyAzLjUuNyBJbml0aWFsaXphdGlvbiBTZWdt
ZW50IFJlY2VpdmVkCisgICAgICAgIC8vIDUuMS4gSWYgdGhlIGluaXRpYWxpemF0aW9uIHNlZ21l
bnQgY29udGFpbnMgdHJhY2tzIHdpdGggY29kZWNzIHRoZSB1c2VyIGFnZW50IGRvZXMgbm90IHN1
cHBvcnQsIHRoZW4gcnVuIHRoZQorICAgICAgICAvLyBhcHBlbmQgZXJyb3IgYWxnb3JpdGhtIGFu
ZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICAgICAgKmRzdEFwcGVuZFBhcnNpbmdGYWlsZWQgPSB0
cnVlOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKHN0cmVhbVR5cGUg
PT0gU3RyZWFtVHlwZTo6VW5rbm93bikgeworICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QocGlw
ZWxpbmUoKSwgIlBhZCAnJXMnIHdpdGggcGFyc2VkIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQgIiBo
YXMgYW4gdW5rbm93biB0eXBlLCB3aWxsIGJlIGNvbm5lY3RlZCB0byBhIGJsYWNrIGhvbGUgcHJv
YmUuIiwgR1NUX1BBRF9OQU1FKGRlbXV4ZXJTcmNQYWQpLCBwYXJzZWRDYXBzLmdldCgpKTsKKyAg
ICAgICAgZ3N0X3BhZF9hZGRfcHJvYmUoZGVtdXhlclNyY1BhZCwgR1NUX1BBRF9QUk9CRV9UWVBF
X0JVRkZFUiwgcmVpbnRlcnByZXRfY2FzdDxHc3RQYWRQcm9iZUNhbGxiYWNrPihhcHBlbmRQaXBl
bGluZURlbXV4ZXJCbGFja0hvbGVQYWRQcm9iZSksIG51bGxwdHIsIG51bGxwdHIpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgQXRvbVN0cmluZyB0cmFja0lkID0gZ2VuZXJh
dGVUcmFja0lkKHN0cmVhbVR5cGUsIHRyYWNrSW5kZXgpOworCisgICAgR1NUX0RFQlVHX09CSkVD
VChwaXBlbGluZSgpLCAiQ3JlYXRpbmcgbmV3IEFwcGVuZFBpcGVsaW5lOjpUcmFjayB3aXRoIGlk
ICclcyciLCB0cmFja0lkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIHNpemVfdCBuZXdU
cmFja0luZGV4ID0gbV90cmFja3Muc2l6ZSgpOworICAgIG1fdHJhY2tzLmFwcGVuZChXVEY6Om1h
a2VVbmlxdWU8VHJhY2s+KHRyYWNrSWQsIHN0cmVhbVR5cGUsIHBhcnNlZENhcHMsIHByZXNlbnRh
dGlvblNpemUpKTsKKyAgICBUcmFjayYgdHJhY2sgPSAqbV90cmFja3MuYXQobmV3VHJhY2tJbmRl
eCk7CisgICAgdHJhY2suaW5pdGlhbGl6ZUVsZW1lbnRzKHRoaXMsIEdTVF9CSU4obV9waXBlbGlu
ZS5nZXQoKSkpOworICAgIHRyYWNrLndlYktpdFRyYWNrID0gbWFrZVdlYktpdFRyYWNrKG5ld1Ry
YWNrSW5kZXgpOworICAgIGhvb2tUcmFja0V2ZW50cyh0cmFjayk7CisgICAgcmV0dXJuICZ0cmFj
azsKK30KKworQXBwZW5kUGlwZWxpbmU6OlRyYWNrKiBBcHBlbmRQaXBlbGluZTo6dHJ5TWF0Y2hQ
YWRUb0V4aXN0aW5nVHJhY2soR3N0UGFkICpkZW11eGVyU3JjUGFkKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1faGFzUmVjZWl2ZWRGaXJzdEluaXRpYWxpemF0
aW9uU2VnbWVudCk7CisgICAgQXRvbVN0cmluZyB0cmFja0lkID0gR1NUX1BBRF9OQU1FKGRlbXV4
ZXJTcmNQYWQpOworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gcGFyc2VkQ2FwczsKKyAgICBTdHJlYW1U
eXBlIHN0cmVhbVR5cGU7CisgICAgRmxvYXRTaXplIHByZXNlbnRhdGlvblNpemU7CisgICAgcGFy
c2VEZW11eGVyU3JjUGFkQ2FwcyhhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKGRl
bXV4ZXJTcmNQYWQpKS5nZXQoKSwgJnBhcnNlZENhcHMsICZzdHJlYW1UeXBlLCAmcHJlc2VudGF0
aW9uU2l6ZSk7CisKKyAgICAvLyBUcnkgdG8gZmluZCBhIG1hdGNoaW5nIHByZS1leGlzdGluZyB0
cmFjay4gSWRlYWxseSwgdHJhY2tzIHNob3VsZCBiZSBtYXRjaGVkIGJ5IHRyYWNrIElELCBidXQg
bWF0Y2hpbmcgYnkgdHlwZQorICAgIC8vIGlzIHByb3ZpZGVkIGFzIGEgZmFsbGJhY2sgLS0gd2hp
Y2ggd2lsbCBiZSB1c2VkLCBzaW5jZSB3ZSBkb24ndCBoYXZlIGEgd2F5IHRvIGZldGNoIHRob3Nl
IGZyb20gR1N0cmVhbWVyIGF0IHRoZSBtb21lbnQuCisgICAgVHJhY2sqIG1hdGNoaW5nVHJhY2sg
PSBudWxscHRyOworICAgIGZvciAoc3RkOjp1bmlxdWVfcHRyPFRyYWNrPiYgdHJhY2sgOiBtX3Ry
YWNrcykgeworICAgICAgICBpZiAodHJhY2stPnN0cmVhbVR5cGUgIT0gc3RyZWFtVHlwZSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtYXRjaGluZ1RyYWNrID0gJip0cmFjazsKKyAg
ICAgICAgaWYgKHRyYWNrLT50cmFja0lkID09IHRyYWNrSWQpCisgICAgICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBpZiAoIW1hdGNoaW5nVHJhY2spIHsKKyAgICAgICAgLy8gSW52YWxpZCBj
b25maWd1cmF0aW9uLgorICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QocGlwZWxpbmUoKSwgIkNv
dWxkbid0IGZpbmQgYSBtYXRjaGluZyBwcmUtZXhpc3RpbmcgdHJhY2sgZm9yIHBhZCAnJXMnIHdp
dGggcGFyc2VkIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQgIiBvbiBub24tZmlyc3QgaW5pdGlhbGl6
YXRpb24gc2VnbWVudCwgd2lsbCBiZSBjb25uZWN0ZWQgdG8gYSBibGFjayBob2xlIHByb2JlLiIs
IEdTVF9QQURfTkFNRShkZW11eGVyU3JjUGFkKSwgcGFyc2VkQ2Fwcy5nZXQoKSk7CisgICAgICAg
IGdzdF9wYWRfYWRkX3Byb2JlKGRlbXV4ZXJTcmNQYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZG
RVIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UGFkUHJvYmVDYWxsYmFjaz4oYXBwZW5kUGlwZWxpbmVE
ZW11eGVyQmxhY2tIb2xlUGFkUHJvYmUpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICB9CisgICAg
cmV0dXJuIG1hdGNoaW5nVHJhY2s7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmxpbmtQYWRX
aXRoVHJhY2soR3N0UGFkICpkZW11eGVyU3JjUGFkLCBUcmFjayAmdHJhY2spCit7CisgICAgQVNT
RVJUKCFHU1RfUEFEX0lTX0xJTktFRCh0cmFjay5lbnRyeVBhZC5nZXQoKSkpOworICAgIGdzdF9w
YWRfbGluayhkZW11eGVyU3JjUGFkLCB0cmFjay5lbnRyeVBhZC5nZXQoKSk7CisgICAgQVNTRVJU
KEdTVF9QQURfSVNfTElOS0VEKHRyYWNrLmVudHJ5UGFkLmdldCgpKSk7CisgICAgR1NUX0RFQlVH
X0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9E
RUJVR19HUkFQSF9TSE9XX0FMTCwgImFwcGVuZC1waXBlbGluZS1hZnRlci1saW5rIik7Cit9CiAK
LSAgICBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyKiBnc3RyZWFtZXJUcmFjazsKLSAgICBzd2l0
Y2ggKG1fc3RyZWFtVHlwZSkgewotICAgIGNhc2UgTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVh
bWVyOjpBdWRpbzogewotICAgICAgICBhdXRvIHNwZWNpZmljVHJhY2sgPSBBdWRpb1RyYWNrUHJp
dmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRyKCptX3BsYXllclByaXZhdGUpLCBpZCgp
LCBzaW5rU2lua1BhZC5nZXQoKSk7CitSZWY8V2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZT4gQXBw
ZW5kUGlwZWxpbmU6Om1ha2VXZWJLaXRUcmFjayhpbnQgdHJhY2tJbmRleCkKK3sKKyAgICBUcmFj
ayYgYXBwZW5kUGlwZWxpbmVUcmFjayA9ICptX3RyYWNrcy5hdCh0cmFja0luZGV4KTsKKworICAg
IFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiB0cmFjazsKKyAgICBUcmFja1ByaXZh
dGVCYXNlR1N0cmVhbWVyKiBnc3RyZWFtZXJUcmFjayA9IG51bGxwdHI7CisgICAgLy8gRklYTUU6
IEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyIGV0Yy4gc2hvdWxkIHByb2JhYmx5IHVzZSBwYWRz
IG9mIHRoZSBwbGF5YmFjayBwaXBlbGluZSByYXRoZXIgdGhhbiB0aGUgYXBwZW5kIHBpcGVsaW5l
LgorICAgIHN3aXRjaCAoYXBwZW5kUGlwZWxpbmVUcmFjay5zdHJlYW1UeXBlKSB7CisgICAgY2Fz
ZSBTdHJlYW1UeXBlOjpBdWRpbzogeworICAgICAgICBhdXRvIHNwZWNpZmljVHJhY2sgPSBBdWRp
b1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRyKG1fcGxheWVyUHJpdmF0
ZSksIHRyYWNrSW5kZXgsIGFwcGVuZFBpcGVsaW5lVHJhY2suYXBwc2lua1BhZCk7CiAgICAgICAg
IGdzdHJlYW1lclRyYWNrID0gc3BlY2lmaWNUcmFjay5wdHIoKTsKLSAgICAgICAgbV90cmFjayA9
IG1ha2VSZWZQdHIoc3RhdGljX2Nhc3Q8VHJhY2tQcml2YXRlQmFzZSo+KHNwZWNpZmljVHJhY2su
cHRyKCkpKTsKKyAgICAgICAgdHJhY2sgPSBtYWtlUmVmUHRyKHN0YXRpY19jYXN0PFRyYWNrUHJp
dmF0ZUJhc2UqPihzcGVjaWZpY1RyYWNrLnB0cigpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
LSAgICBjYXNlIE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VmlkZW86IHsKLSAgICAg
ICAgYXV0byBzcGVjaWZpY1RyYWNrID0gVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0
ZShtYWtlV2Vha1B0cigqbV9wbGF5ZXJQcml2YXRlKSwgaWQoKSwgc2lua1NpbmtQYWQuZ2V0KCkp
OworICAgIGNhc2UgU3RyZWFtVHlwZTo6VmlkZW86IHsKKyAgICAgICAgYXV0byBzcGVjaWZpY1Ry
YWNrID0gVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShtYWtlV2Vha1B0cihtX3Bs
YXllclByaXZhdGUpLCB0cmFja0luZGV4LCBhcHBlbmRQaXBlbGluZVRyYWNrLmFwcHNpbmtQYWQp
OwogICAgICAgICBnc3RyZWFtZXJUcmFjayA9IHNwZWNpZmljVHJhY2sucHRyKCk7Ci0gICAgICAg
IG1fdHJhY2sgPSBtYWtlUmVmUHRyKHN0YXRpY19jYXN0PFRyYWNrUHJpdmF0ZUJhc2UqPihzcGVj
aWZpY1RyYWNrLnB0cigpKSk7CisgICAgICAgIHRyYWNrID0gbWFrZVJlZlB0cihzdGF0aWNfY2Fz
dDxUcmFja1ByaXZhdGVCYXNlKj4oc3BlY2lmaWNUcmFjay5wdHIoKSkpOwogICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgY2FzZSBNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlRleHQ6
IHsKLSAgICAgICAgYXV0byBzcGVjaWZpY1RyYWNrID0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdT
dHJlYW1lcjo6Y3JlYXRlKGlkKCksIHNpbmtTaW5rUGFkLmdldCgpKTsKKyAgICBjYXNlIFN0cmVh
bVR5cGU6OlRleHQ6IHsKKyAgICAgICAgYXV0byBzcGVjaWZpY1RyYWNrID0gSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrSW5kZXgsIGFwcGVuZFBpcGVsaW5lVHJh
Y2suYXBwc2lua1BhZCk7CiAgICAgICAgIGdzdHJlYW1lclRyYWNrID0gc3BlY2lmaWNUcmFjay5w
dHIoKTsKLSAgICAgICAgbV90cmFjayA9IG1ha2VSZWZQdHIoc3RhdGljX2Nhc3Q8VHJhY2tQcml2
YXRlQmFzZSo+KHNwZWNpZmljVHJhY2sucHRyKCkpKTsKKyAgICAgICAgdHJhY2sgPSBtYWtlUmVm
UHRyKHN0YXRpY19jYXN0PFRyYWNrUHJpdmF0ZUJhc2UqPihzcGVjaWZpY1RyYWNrLnB0cigpKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIE1lZGlhU291cmNlU3RyZWFtVHlwZUdT
dHJlYW1lcjo6SW52YWxpZDoKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKG1fcGlwZWxpbmUu
Z2V0KCksICJVbnN1cHBvcnRlZCB0cmFjayBjb2RlYzogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMu
Z2V0KCkpOwotICAgICAgICAvLyAzLjUuNyBJbml0aWFsaXphdGlvbiBTZWdtZW50IFJlY2VpdmVk
Ci0gICAgICAgIC8vIDUuMS4gSWYgdGhlIGluaXRpYWxpemF0aW9uIHNlZ21lbnQgY29udGFpbnMg
dHJhY2tzIHdpdGggY29kZWNzIHRoZSB1c2VyIGFnZW50IGRvZXMgbm90IHN1cHBvcnQsIHRoZW4g
cnVuIHRoZQotICAgICAgICAvLyBhcHBlbmQgZXJyb3IgYWxnb3JpdGhtIGFuZCBhYm9ydCB0aGVz
ZSBzdGVwcy4KLQotICAgICAgICAvLyBhcHBlbmRQYXJzaW5nRmFpbGVkKCkgd2lsbCBpbW1lZGlh
dGVseSBjYXVzZSBhIHJlc2V0UGFyc2VyU3RhdGUoKSB3aGljaCB3aWxsIHN0b3AgZGVtdXhpbmcs
IHRoZW4gdGhlCi0gICAgICAgIC8vIEFwcGVuZFBpcGVsaW5lIHdpbGwgYmUgZGVzdHJveWVkLgot
ICAgICAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGUuYXBwZW5kUGFyc2luZ0ZhaWxlZCgpOwotICAg
ICAgICByZXR1cm47CiAgICAgZGVmYXVsdDoKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKG1f
cGlwZWxpbmUuZ2V0KCksICJQYWQgaGFzIHVua25vd24gdHJhY2sgdHlwZSwgaWdub3Jpbmc6ICUi
IEdTVF9QVFJfRk9STUFULCBjYXBzLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0gICAgZ3N0cmVhbWVyVHJhY2stPnNldEluaXRp
YWxDYXBzKEdSZWZQdHIoY2FwcykpOwotCi0gICAgbV9hcHBzaW5rQ2FwcyA9IFdURk1vdmUoY2Fw
cyk7Ci0gICAgbV9wbGF5ZXJQcml2YXRlLT50cmFja0RldGVjdGVkKCp0aGlzLCBtX3RyYWNrKTsK
KyAgICBBU1NFUlQoYXBwZW5kUGlwZWxpbmVUcmFjay5jYXBzLmdldCgpKTsKKyAgICBnc3RyZWFt
ZXJUcmFjay0+c2V0SW5pdGlhbENhcHMoYXBwZW5kUGlwZWxpbmVUcmFjay5jYXBzLmdldCgpKTsK
KyAgICByZXR1cm4gdHJhY2sucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotdm9pZCBBcHBlbmRQaXBl
bGluZTo6ZGlzY29ubmVjdERlbXV4ZXJTcmNQYWRGcm9tQXBwc2lua0Zyb21BbnlUaHJlYWQoR3N0
UGFkKiBkZW11eGVyU3JjUGFkKQordm9pZCBBcHBlbmRQaXBlbGluZTo6VHJhY2s6OmluaXRpYWxp
emVFbGVtZW50cyhBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUsIEdzdEJpbiogYmluKQog
ewotICAgIC8vIE5vdGU6IFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBlaXRoZXIgZnJvbSB0
aGUgc3RyZWFtaW5nIHRocmVhZCAoZS5nLiBpZiBhIHN0cmFuZ2UgaW5pdGlhbGl6YXRpb24gc2Vn
bWVudCB3aXRoCi0gICAgLy8gaW5jb21wYXRpYmxlIHRyYWNrcyBpcyBhcHBlbmRlZCBhbmQgdGhl
IHNyY3BhZCBkaXNjb25uZWN0ZWQpIG9yIC0tIG1vcmUgdXN1YWxseSAtLSBmcm9tIHRoZSBtYWlu
IHRocmVhZCwgd2hlbgotICAgIC8vIGEgc3RhdGUgY2hhbmdlIGlzIG1hZGUgdG8gYnJpbmcgdGhl
IGRlbXV4ZXIgZG93bi4gKFN0YXRlIGNoYW5nZSBvcGVyYXRpb25zIHJ1biBpbiB0aGUgbWFpbiB0
aHJlYWQuKQotICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1f
cGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsICJwYWQtcmVtb3ZlZC1i
ZWZvcmUiKTsKLQotICAgIC8vIFJlY29ubmVjdCB0aGUgb3RoZXIgcGFkIGlmIGl0J3MgdGhlIG9u
bHkgcmVtYWluaW5nIGFmdGVyIHJlbW92aW5nIHRoaXMgb25lIGFuZCB3YXNuJ3QgY29ubmVjdGVk
IHlldCAoaGFzIGEgYmxhY2sgaG9sZSBwcm9iZSkuCi0gICAgaWYgKG1fZGVtdXgtPm51bXNyY3Bh
ZHMgPT0gMSkgewotICAgICAgICBhdXRvIHJlbWFpbmluZ1BhZCA9IEdTVF9QQUQobV9kZW11eC0+
c3JjcGFkcy0+ZGF0YSk7Ci0KLSAgICAgICAgYXV0byBwcm9iZUlkID0gR1BPSU5URVJfVE9fVUxP
TkcoZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QocmVtYWluaW5nUGFkKSwgImJsYWNrSG9sZVBy
b2JlSWQiKSk7Ci0gICAgICAgIGlmIChyZW1haW5pbmdQYWQgJiYgcHJvYmVJZCkgewotICAgICAg
ICAgICAgYXV0byBvbGRQZWVyUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNf
cGFkKG1fYXBwc2luay5nZXQoKSwgInNpbmsiKSk7Ci0gICAgICAgICAgICB3aGlsZSAoZ3N0X3Bh
ZF9pc19saW5rZWQob2xkUGVlclBhZC5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICAvLyBHZXQg
c2luayBwYWQgb2YgdGhlIHBhcnNlciBiZWZvcmUgYXBwc2luay4KLSAgICAgICAgICAgICAgICAv
LyBBbGwgdGhlIGV4cGVjdGVkIGVsZW1lbnRzIGJldHdlZW4gdGhlIGRlbXV4ZXIgYW5kIGFwcHNp
bmsgYXJlIHN1cHBvc2VkIHRvIGhhdmUgcGFkcyBuYW1lZCAic2luayIuCi0gICAgICAgICAgICAg
ICAgb2xkUGVlclBhZCA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wZWVyKG9sZFBlZXJQYWQuZ2V0
KCkpKTsKLSAgICAgICAgICAgICAgICBhdXRvIGVsZW1lbnQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9n
ZXRfcGFyZW50X2VsZW1lbnQob2xkUGVlclBhZC5nZXQoKSkpOwotICAgICAgICAgICAgICAgIG9s
ZFBlZXJQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoZWxlbWVudC5n
ZXQoKSwgInNpbmsiKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG9sZFBlZXJQYWQpOwotICAg
ICAgICAgICAgfQorICAgIGFwcHNpbmsgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgiYXBwc2luayIs
IG51bGxwdHIpOworICAgIGdzdF9hcHBfc2lua19zZXRfZW1pdF9zaWduYWxzKEdTVF9BUFBfU0lO
SyhhcHBzaW5rLmdldCgpKSwgVFJVRSk7CisgICAgZ3N0X2Jhc2Vfc2lua19zZXRfc3luYyhHU1Rf
QkFTRV9TSU5LKGFwcHNpbmsuZ2V0KCkpLCBGQUxTRSk7CisgICAgZ3N0X2Jhc2Vfc2lua19zZXRf
YXN5bmNfZW5hYmxlZChHU1RfQkFTRV9TSU5LKGFwcHNpbmsuZ2V0KCkpLCBGQUxTRSk7IC8vIE5v
IHByZXJvbGxzLCBubyBhc3luYyBzdGF0ZSBjaGFuZ2VzLgorICAgIGdzdF9iYXNlX3Npbmtfc2V0
X2Ryb3Bfb3V0X29mX3NlZ21lbnQoR1NUX0JBU0VfU0lOSyhhcHBzaW5rLmdldCgpKSwgRkFMU0Up
OworICAgIGdzdF9iYXNlX3Npbmtfc2V0X2xhc3Rfc2FtcGxlX2VuYWJsZWQoR1NUX0JBU0VfU0lO
SyhhcHBzaW5rLmdldCgpKSwgRkFMU0UpOwogCi0gICAgICAgICAgICBnc3RfcGFkX3JlbW92ZV9w
cm9iZShyZW1haW5pbmdQYWQsIHByb2JlSWQpOworICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4oYXBw
ZW5kUGlwZWxpbmUtPnBpcGVsaW5lKCkpLCBhcHBzaW5rLmdldCgpKTsKKyAgICBnc3RfZWxlbWVu
dF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KGFwcHNpbmsuZ2V0KCkpOworICAgIGVudHJ5UGFkID0g
YXBwc2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChhcHBzaW5r
LmdldCgpLCAic2luayIpKTsKIAotICAgICAgICAgICAgYXV0byBvbGRQZWVyUGFkQ2FwcyA9IGFk
b3B0R1JlZihnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMob2xkUGVlclBhZC5nZXQoKSkpOwotICAg
ICAgICAgICAgYXV0byByZW1haW5pbmdQYWRDYXBzID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X2N1
cnJlbnRfY2FwcyhyZW1haW5pbmdQYWQpKTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG9sZFBl
ZXJQYWRUeXBlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlbWFpbmluZ1Bh
ZFR5cGUgPSBudWxscHRyOworI2lmICFMT0dfRElTQUJMRUQKKyAgICBhcHBzaW5rRGF0YUVudGVy
aW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5hcHBlbmRQaXBlbGluZSA9IGFwcGVuZFBpcGVsaW5lOwor
ICAgIGFwcHNpbmtEYXRhRW50ZXJpbmdQYWRQcm9iZUluZm9ybWF0aW9uLmRlc2NyaXB0aW9uID0g
ImFwcHNpbmsgZGF0YSBlbnRlcmluZyI7CisgICAgYXBwc2lua0RhdGFFbnRlcmluZ1BhZFByb2Jl
SW5mb3JtYXRpb24ucHJvYmVJZCA9IGdzdF9wYWRfYWRkX3Byb2JlKGFwcHNpbmtQYWQuZ2V0KCks
IEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UGFkUHJvYmVD
YWxsYmFjaz4oYXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVnSW5mb3JtYXRpb24pLCAmYXBwc2lu
a0RhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24sIG51bGxwdHIpOworI2VuZGlmCiAKLSAg
ICAgICAgICAgIGlmIChvbGRQZWVyUGFkQ2FwcykgewotICAgICAgICAgICAgICAgIGF1dG8gb2xk
UGVlclBhZENhcHNTdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKG9sZFBlZXJQYWRD
YXBzLmdldCgpLCAwKTsKLSAgICAgICAgICAgICAgICBpZiAob2xkUGVlclBhZENhcHNTdHJ1Y3R1
cmUpCi0gICAgICAgICAgICAgICAgICAgIG9sZFBlZXJQYWRUeXBlID0gZ3N0X3N0cnVjdHVyZV9n
ZXRfbmFtZShvbGRQZWVyUGFkQ2Fwc1N0cnVjdHVyZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAocmVtYWluaW5nUGFkQ2FwcykgewotICAgICAgICAgICAgICAgIGF1dG8gcmVtYWlu
aW5nUGFkQ2Fwc1N0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUocmVtYWluaW5nUGFk
Q2Fwcy5nZXQoKSwgMCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZ1BhZENhcHNTdHJ1
Y3R1cmUpCi0gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ1BhZFR5cGUgPSBnc3Rfc3RydWN0
dXJlX2dldF9uYW1lKHJlbWFpbmluZ1BhZENhcHNTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgfQor
I2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisgICAgYXBwc2lua1BhZEV2ZW50UHJvYmVJbmZv
cm1hdGlvbi5hcHBlbmRQaXBlbGluZSA9IGFwcGVuZFBpcGVsaW5lOworICAgIGFwcHNpbmtQYWRF
dmVudFByb2JlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24gPSAiYXBwc2luayBldmVudCBwcm9iZSI7
CisgICAgYXBwc2lua1BhZEV2ZW50UHJvYmVJbmZvcm1hdGlvbi5wcm9iZUlkID0gZ3N0X3BhZF9h
ZGRfcHJvYmUoYXBwc2lua1BhZC5nZXQoKSwgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0RPV05T
VFJFQU0sIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UGFkUHJvYmVDYWxsYmFjaz4oYXBwZW5kUGlwZWxp
bmVBcHBzaW5rUGFkRXZlbnRQcm9iZSksICZhcHBzaW5rUGFkRXZlbnRQcm9iZUluZm9ybWF0aW9u
LCBudWxscHRyKTsKKyNlbmRpZgogCi0gICAgICAgICAgICBpZiAoZ19zdHJjbXAwKG9sZFBlZXJQ
YWRUeXBlLCByZW1haW5pbmdQYWRUeXBlKSkgewotICAgICAgICAgICAgICAgIEdTVF9FUlJPUigi
VGhlIHJlbWFpbmluZyBwYWQgaGFzIGEgYmxhY2tIb2xlUHJvYmUsIGJ1dCBjYW4ndCByZWNvbm5l
Y3QgYXMgbWFpbiBwYWQgYmVjYXVzZSB0aGUgY2FwcyB0eXBlcyBhcmUgaW5jb21wYXRpYmxlOiBv
bGRQZWVyUGFkQ2FwczogJSIgR1NUX1BUUl9GT1JNQVQgIiwgcmVtYWluaW5nUGFkQ2FwczogJSIg
R1NUX1BUUl9GT1JNQVQsIG9sZFBlZXJQYWRDYXBzLmdldCgpLCByZW1haW5pbmdQYWRDYXBzLmdl
dCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzTWFpblRocmVhZCgpKQotICAgICAgICAgICAg
ICAgICAgICBoYW5kbGVFcnJvckNvbmRpdGlvbkZyb21TdHJlYW1pbmdUaHJlYWQoKTsKLSAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0
ZS5hcHBlbmRQYXJzaW5nRmFpbGVkKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQorICAgIC8vIFNvbWUgYXVkaW8gZmlsZXMgdW5oZWxwZnVsbHkgb21pdCB0aGUgZHVy
YXRpb24gb2YgZnJhbWVzIGluIHRoZSBjb250YWluZXIuIFdlIG5lZWQgdG8gcGFyc2UKKyAgICAv
LyB0aGUgY29udGFpbmVkIGF1ZGlvIHN0cmVhbXMgaW4gb3JkZXIgdG8ga25vdyB0aGUgZHVyYXRp
b24gb2YgdGhlIGZyYW1lcy4KKyAgICAvLyBUaGlzIGlzIGtub3duIHRvIGJlIGFuIGlzc3VlIHdp
dGggWW91VHViZSBXZWJNIGZpbGVzIGNvbnRhaW5pbmcgT3B1cyBhdWRpbyBhcyBvZiBZVFRWMjAx
OC4KKyAgICBpZiAoKHBhcnNlciA9IGNyZWF0ZU9wdGlvbmFsUGFyc2VyRm9yRm9ybWF0KHRyYWNr
SWQsIGNhcHMuZ2V0KCkpKSkgeworICAgICAgICBnc3RfYmluX2FkZChiaW4sIHBhcnNlci5nZXQo
KSk7CisgICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQocGFyc2VyLmdl
dCgpKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfbGluayhwYXJzZXIuZ2V0KCksIGFwcHNpbmsuZ2V0
KCkpOworICAgICAgICBBU1NFUlQoR1NUX1BBRF9JU19MSU5LRUQoYXBwc2lua1BhZC5nZXQoKSkp
OworICAgICAgICBlbnRyeVBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3Bh
ZChwYXJzZXIuZ2V0KCksICJzaW5rIikpOworICAgIH0KK30KKwordm9pZCBBcHBlbmRQaXBlbGlu
ZTo6aG9va1RyYWNrRXZlbnRzKFRyYWNrJiB0cmFjaykKK3sKKyAgICBnX3NpZ25hbF9jb25uZWN0
KHRyYWNrLmFwcHNpbmsuZ2V0KCksICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSygrW10oR3N0RWxl
bWVudCogYXBwc2luaywgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5lKSAtPiBHc3RGbG93
UmV0dXJuIHsKKyAgICAgICAgYXBwZW5kUGlwZWxpbmUtPmhhbmRsZUFwcHNpbmtOZXdTYW1wbGVG
cm9tU3RyZWFtaW5nVGhyZWFkKGFwcHNpbmspOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7
CisgICAgfSksIHRoaXMpOwogCi0gICAgICAgICAgICBHU1RfREVCVUcoIlRoZSByZW1haW5pbmcg
cGFkIGhhcyBhIGJsYWNrSG9sZVByb2JlLCByZWNvbm5lY3RpbmcgYXMgbWFpbiBwYWQuIG9sZFBh
ZDogJSIgR1NUX1BUUl9GT1JNQVQgIiwgbmV3UGFkOiAlIiBHU1RfUFRSX0ZPUk1BVCAiLCBwZWVy
UGFkOiAlIiBHU1RfUFRSX0ZPUk1BVCwgZGVtdXhlclNyY1BhZCwgcmVtYWluaW5nUGFkLCBvbGRQ
ZWVyUGFkLmdldCgpKTsKKyAgICBzdHJ1Y3QgQ2xvc3VyZSB7CisgICAgcHVibGljOgogCi0gICAg
ICAgICAgICBnc3RfcGFkX2xpbmsocmVtYWluaW5nUGFkLCBvbGRQZWVyUGFkLmdldCgpKTsKLSAg
ICAgICAgICAgIGlmIChtX3BhcnNlcikKLSAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRf
c3RhdGUobV9wYXJzZXIuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKLSAgICAgICAgICAgIGdzdF9l
bGVtZW50X3NldF9zdGF0ZShtX2FwcHNpbmsuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKLSAgICAg
ICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX2FwcHNpbmsuZ2V0KCksIEdTVF9TVEFURV9Q
TEFZSU5HKTsKLSAgICAgICAgICAgIGlmIChtX3BhcnNlcikKLSAgICAgICAgICAgICAgICBnc3Rf
ZWxlbWVudF9zZXRfc3RhdGUobV9wYXJzZXIuZ2V0KCksIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAg
ICAgICAgQ2xvc3VyZShBcHBlbmRQaXBlbGluZSYgYXBwZW5kUGlwZWxpbmUsIFRyYWNrJiB0cmFj
aykKKyAgICAgICAgICAgIDogYXBwZW5kUGlwZWxpbmUoYXBwZW5kUGlwZWxpbmUpCisgICAgICAg
ICAgICAsIHRyYWNrKHRyYWNrKQorICAgICAgICB7IH0KKyAgICAgICAgc3RhdGljIHZvaWQgZGVz
dHJ1Y3Qodm9pZCogY2xvc3VyZSwgR0Nsb3N1cmUqKSB7IGRlbGV0ZSBzdGF0aWNfY2FzdDxDbG9z
dXJlKj4oY2xvc3VyZSk7IH0KIAotICAgICAgICAgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklM
RV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9X
X0FMTCwgIndlYmtpdC1hZnRlci1yZWxpbmsiKTsKKyAgICAgICAgQXBwZW5kUGlwZWxpbmUmIGFw
cGVuZFBpcGVsaW5lOworICAgICAgICBUcmFjayYgdHJhY2s7CisgICAgfTsKIAorICAgIGdfc2ln
bmFsX2Nvbm5lY3RfZGF0YSh0cmFjay5hcHBzaW5rUGFkLmdldCgpLCAibm90aWZ5OjpjYXBzIiwg
R19DQUxMQkFDSygrW10oR09iamVjdCosIEdQYXJhbVNwZWMqLCBDbG9zdXJlKiBjbG9zdXJlKSB7
CisgICAgICAgIEFwcGVuZFBpcGVsaW5lJiBhcHBlbmRQaXBlbGluZSA9IGNsb3N1cmUtPmFwcGVu
ZFBpcGVsaW5lOworICAgICAgICBUcmFjayYgdHJhY2sgPSBjbG9zdXJlLT50cmFjazsKKyAgICAg
ICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgICAgICAvLyBXaGVuIGNoYW5naW5nIHRo
ZSBwaXBlbGluZSBzdGF0ZSBkb3duIHRvIFJFQURZIHRoZSBkZW11eGVyIGlzIHVubGlua2VkIGFu
ZCB0aGlzIHRyaWdnZXJzIGEgY2FwcyBub3RpZmljYXRpb24KKyAgICAgICAgICAgIC8vIGJlY2F1
c2UgdGhlIGFwcHNpbmsgbG9zZXMgaXRzIHByZXZpb3VzbHkgbmVnb3RpYXRlZCBjYXBzLiBXZSBh
cmUgbm90IGludGVyZXN0ZWQgaW4gdGhlc2UgdW5uZWdvdGlhdGVkIGNhcHMuCisjaWZuZGVmIE5E
RUJVRworICAgICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxl
bWVudF9nZXRfc3RhdGljX3BhZCh0cmFjay5hcHBzaW5rLmdldCgpLCAic2luayIpKTsKKyAgICAg
ICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9jdXJy
ZW50X2NhcHMocGFkLmdldCgpKSk7CisgICAgICAgICAgICBBU1NFUlQoIWNhcHMpOworI2VuZGlm
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICBHU1RfREVCVUco
IkRpc2Nvbm5lY3RpbmcgYXBwc2luayIpOworICAgICAgICAvLyBUaGUgc3RyZWFtaW5nIHRocmVh
ZCBoYXMganVzdCByZWNlaXZlZCBhIG5ldyBjYXBzIGFuZCBpcyBhYm91dCB0byBsZXQgc2FtcGxl
cyB1c2luZyB0aGUKKyAgICAgICAgLy8gbmV3IGNhcHMgZmxvdy4gTGV0J3MgYmxvY2sgaXQgdW50
aWwgdGhlIG1haW4gdGhyZWFkIGhhcyBjb25zdW1lZCB0aGUgc2FtcGxlcyB3aXRoIHRoZSBvbGQK
KyAgICAgICAgLy8gY2FwcyBhbmQgaGFzIHByb2Nlc3NlZCB0aGUgY2FwcyBjaGFuZ2UuCisgICAg
ICAgIGFwcGVuZFBpcGVsaW5lLm1fdGFza1F1ZXVlLmVucXVldWVUYXNrQW5kV2FpdDxBYm9ydGFi
bGVUYXNrUXVldWU6OlZvaWQ+KFsmYXBwZW5kUGlwZWxpbmUsICZ0cmFja10oKSB7CisgICAgICAg
ICAgICBhcHBlbmRQaXBlbGluZS5hcHBzaW5rQ2Fwc0NoYW5nZWQodHJhY2spOworICAgICAgICAg
ICAgcmV0dXJuIEFib3J0YWJsZVRhc2tRdWV1ZTo6Vm9pZCgpOworICAgICAgICB9KTsKKyAgICB9
KSwgbmV3IENsb3N1cmUgeyAqdGhpcywgdHJhY2sgfSwgQ2xvc3VyZTo6ZGVzdHJ1Y3QsIHN0YXRp
Y19jYXN0PEdDb25uZWN0RmxhZ3M+KDApKTsKK30KIAotICAgIGlmIChtX3BhcnNlcikgewotICAg
ICAgICBhc3NlcnRlZEVsZW1lbnRTZXRTdGF0ZShtX3BhcnNlci5nZXQoKSwgR1NUX1NUQVRFX05V
TEwpOwotICAgICAgICBnc3RfYmluX3JlbW92ZShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBt
X3BhcnNlci5nZXQoKSk7Ci0gICAgICAgIG1fcGFyc2VyID0gbnVsbHB0cjsKKyNpZiAhTE9HX0RJ
U0FCTEVECitjb25zdCBjaGFyKiBBcHBlbmRQaXBlbGluZTo6c3RyZWFtVHlwZVRvU3RyaW5nKFN0
cmVhbVR5cGUgc3RyZWFtVHlwZSkKK3sKKyAgICBzd2l0Y2ggKHN0cmVhbVR5cGUpIHsKKyAgICBj
YXNlIFN0cmVhbVR5cGU6OkF1ZGlvOgorICAgICAgICByZXR1cm4gIkF1ZGlvIjsKKyAgICBjYXNl
IFN0cmVhbVR5cGU6OlZpZGVvOgorICAgICAgICByZXR1cm4gIlZpZGVvIjsKKyAgICBjYXNlIFN0
cmVhbVR5cGU6OlRleHQ6CisgICAgICAgIHJldHVybiAiVGV4dCI7CisgICAgY2FzZSBTdHJlYW1U
eXBlOjpJbnZhbGlkOgorICAgICAgICByZXR1cm4gIkludmFsaWQiOworICAgIGNhc2UgU3RyZWFt
VHlwZTo6VW5rbm93bjoKKyAgICAgICAgcmV0dXJuICJVbmtub3duIjsKICAgICB9Ci0KLSAgICBH
U1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgp
KSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCAicGFkLXJlbW92ZWQtYWZ0ZXIiKTsKIH0KIAot
I2lmICFMT0dfRElTQUJMRUQKIHN0YXRpYyBHc3RQYWRQcm9iZVJldHVybiBhcHBlbmRQaXBlbGlu
ZVBhZFByb2JlRGVidWdJbmZvcm1hdGlvbihHc3RQYWQqLCBHc3RQYWRQcm9iZUluZm8qIGluZm8s
IHN0cnVjdCBQYWRQcm9iZUluZm9ybWF0aW9uKiBwYWRQcm9iZUluZm9ybWF0aW9uKQogewogICAg
IEFTU0VSVChHU1RfUEFEX1BST0JFX0lORk9fVFlQRShpbmZvKSAmIEdTVF9QQURfUFJPQkVfVFlQ
RV9CVUZGRVIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5oCmluZGV4IDY4NzNmYjc1NjYx
ZjQ3NDFmMTNiYzEwYjE5NjYzODMxZTE0NWFlNDMuLjA1YzFjNzVlYzE2ZjlhY2Y4OGFmN2VkMDNh
OGY2OWU0ZGU3NDE4ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmgKQEAgLTUyLDQ2
ICs1Miw4MiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwdXNoTmV3QnVmZmVyKEdSZWZQdHI8R3N0QnVm
ZmVyPiYmKTsKICAgICB2b2lkIHJlc2V0UGFyc2VyU3RhdGUoKTsKICAgICBTb3VyY2VCdWZmZXJQ
cml2YXRlR1N0cmVhbWVyJiBzb3VyY2VCdWZmZXJQcml2YXRlKCkgeyByZXR1cm4gbV9zb3VyY2VC
dWZmZXJQcml2YXRlOyB9Ci0gICAgR3N0Q2FwcyogYXBwc2lua0NhcHMoKSB7IHJldHVybiBtX2Fw
cHNpbmtDYXBzLmdldCgpOyB9Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+
IHRyYWNrKCkgeyByZXR1cm4gbV90cmFjazsgfQogICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRSogcGxheWVyUHJpdmF0ZSgpIHsgcmV0dXJuIG1fcGxheWVyUHJpdmF0ZTsgfQogCiBw
cml2YXRlOgogICAgIC8vIFNpbWlsYXIgdG8gVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJh
Y2tUeXBlLCBidXQgd2l0aCBhIG5ldyB2YWx1ZSAoSW52YWxpZCkgZm9yIHdoZW4gdGhlIGNvZGVj
IGlzCiAgICAgLy8gbm90IHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbSwgd2hpY2ggc2hvdWxkIHJl
c3VsdCBpbiBQYXJzaW5nRmFpbGVkIGVycm9yIGJlaW5nIHRocm93biBpbiBTb3VyY2VCdWZmZXIu
Ci0gICAgZW51bSBNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXIgeyBBdWRpbywgVmlkZW8s
IFRleHQsIFVua25vd24sIEludmFsaWQgfTsKKyAgICBlbnVtIFN0cmVhbVR5cGUgeyBBdWRpbywg
VmlkZW8sIFRleHQsIFVua25vd24sIEludmFsaWQgfTsKKyNpZiAhTE9HX0RJU0FCTEVECisgICAg
c3RhdGljIGNvbnN0IGNoYXIgKiBzdHJlYW1UeXBlVG9TdHJpbmcoU3RyZWFtVHlwZSk7CisjZW5k
aWYKKworICAgIHN0cnVjdCBUcmFjayB7CisgICAgICAgIC8vIFRyYWNrIG9iamVjdHMgYXJlIGNy
ZWF0ZWQgb24gcGFkLWFkZGVkIGZvciB0aGUgZmlyc3QgaW5pdGlhbGl6YXRpb24gc2VnbWVudCwg
YW5kIGRlc3Ryb3llZCBhZnRlcgorICAgICAgICAvLyB0aGUgcGlwZWxpbmUgc3RhdGUgaGFzIGJl
ZW4gc2V0IHRvIEdTVF9TVEFURV9OVUxMLgorICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShU
cmFjayk7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKwor
ICAgICAgICBUcmFjayhjb25zdCBBdG9tU3RyaW5nJiB0cmFja0lkLCBTdHJlYW1UeXBlIHN0cmVh
bVR5cGUsIGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mIGNhcHMsIGNvbnN0IEZsb2F0U2l6ZSYgcHJl
c2VudGF0aW9uU2l6ZSkKKyAgICAgICAgICAgIDogdHJhY2tJZCh0cmFja0lkKQorICAgICAgICAg
ICAgLCBzdHJlYW1UeXBlKHN0cmVhbVR5cGUpCisgICAgICAgICAgICAsIGNhcHMoY2FwcykKKyAg
ICAgICAgICAgICwgcHJlc2VudGF0aW9uU2l6ZShwcmVzZW50YXRpb25TaXplKQorICAgICAgICB7
IH0KKworICAgICAgICBBdG9tU3RyaW5nIHRyYWNrSWQ7CisgICAgICAgIFN0cmVhbVR5cGUgc3Ry
ZWFtVHlwZTsKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzOworICAgICAgICBGbG9hdFNp
emUgcHJlc2VudGF0aW9uU2l6ZTsKKworICAgICAgICBHUmVmUHRyPEdzdFBhZD4gZW50cnlQYWQ7
IC8vIFNpbmsgcGFkIG9mIHRoZSBwYXJzZXIgKGlmIGFueSkgb3IgdGhlIGFwcHNpbmsuCisgICAg
ICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gcGFyc2VyOyAvLyBPcHRpb25hbCAobmVlZGVkIGJ5IHNv
bWUgZm9ybWF0cykuCisgICAgICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gYXBwc2luazsKKyAgICAg
ICAgR1JlZlB0cjxHc3RQYWQ+IGFwcHNpbmtQYWQ7CisKKyAgICAgICAgUmVmUHRyPFdlYkNvcmU6
OlRyYWNrUHJpdmF0ZUJhc2U+IHdlYktpdFRyYWNrOworCisjaWYgIUxPR19ESVNBQkxFRAorICAg
ICAgICBzdHJ1Y3QgUGFkUHJvYmVJbmZvcm1hdGlvbiBhcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJv
YmVJbmZvcm1hdGlvbjsKKyNlbmRpZgorI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisgICAg
ICAgIHN0cnVjdCBQYWRQcm9iZUluZm9ybWF0aW9uIGFwcHNpbmtQYWRFdmVudFByb2JlSW5mb3Jt
YXRpb247CisjZW5kaWYKKworICAgICAgICB2b2lkIGluaXRpYWxpemVFbGVtZW50cyhBcHBlbmRQ
aXBlbGluZSosIEdzdEJpbiopOworICAgIH07CiAKICAgICB2b2lkIGhhbmRsZUVycm9yU3luY01l
c3NhZ2UoR3N0TWVzc2FnZSopOwogICAgIHZvaWQgaGFuZGxlTmVlZENvbnRleHRTeW5jTWVzc2Fn
ZShHc3RNZXNzYWdlKik7CiAgICAgLy8gRm9yIGRlYnVnIHB1cnBvc2VzIG9ubHk6CiAgICAgdm9p
ZCBoYW5kbGVTdGF0ZUNoYW5nZU1lc3NhZ2UoR3N0TWVzc2FnZSopOwogCi0gICAgZ2ludCBpZCgp
OwotCiAgICAgdm9pZCBoYW5kbGVBcHBzaW5rTmV3U2FtcGxlRnJvbVN0cmVhbWluZ1RocmVhZChH
c3RFbGVtZW50Kik7CisgICAgdm9pZCBoYW5kbGVFcnJvckNvbmRpdGlvbigpOwogICAgIHZvaWQg
aGFuZGxlRXJyb3JDb25kaXRpb25Gcm9tU3RyZWFtaW5nVGhyZWFkKCk7CiAKLSAgICAvLyBUYWtl
cyBvd25lcnNoaXAgb2YgY2Fwcy4KLSAgICB2b2lkIHBhcnNlRGVtdXhlclNyY1BhZENhcHMoR3N0
Q2FwcyopOwotICAgIHZvaWQgYXBwc2lua0NhcHNDaGFuZ2VkKCk7Ci0gICAgdm9pZCBhcHBzaW5r
TmV3U2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYmKTsKKyAgICB2b2lkIGhvb2tUcmFja0V2ZW50
cyhUcmFjayYpOworICAgIHN0YXRpYyB2b2lkIHBhcnNlRGVtdXhlclNyY1BhZENhcHMoR3N0Q2Fw
cyogZGVtdXhlclNyY1BhZENhcHMsIEdSZWZQdHI8R3N0Q2Fwcz4qIGRzdFBhcnNlZENhcHMsCisg
ICAgICAgIFN0cmVhbVR5cGUqIGRzdFN0cmVhbVR5cGUsIEZsb2F0U2l6ZSogZHN0UHJlc2VudGF0
aW9uU2l6ZSk7CisgICAgUmVmPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+IG1ha2VXZWJLaXRU
cmFjayhpbnQgdHJhY2tJbmRleCk7CisgICAgdm9pZCBhcHBzaW5rQ2Fwc0NoYW5nZWQoVHJhY2sm
KTsKKyAgICB2b2lkIGFwcHNpbmtOZXdTYW1wbGUoY29uc3QgVHJhY2smLCBHUmVmUHRyPEdzdFNh
bXBsZT4mJik7CiAgICAgdm9pZCBoYW5kbGVFbmRPZkFwcGVuZCgpOwogICAgIHZvaWQgZGlkUmVj
ZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudCgpOwotICAgIEF0b21TdHJpbmcgdHJhY2tJZCgpOwog
CiAgICAgR3N0QnVzKiBidXMoKSB7IHJldHVybiBtX2J1cy5nZXQoKTsgfQogICAgIEdzdEVsZW1l
bnQqIHBpcGVsaW5lKCkgeyByZXR1cm4gbV9waXBlbGluZS5nZXQoKTsgfQogICAgIEdzdEVsZW1l
bnQqIGFwcHNyYygpIHsgcmV0dXJuIG1fYXBwc3JjLmdldCgpOyB9Ci0gICAgR3N0RWxlbWVudCog
YXBwc2luaygpIHsgcmV0dXJuIG1fYXBwc2luay5nZXQoKTsgfQotICAgIEdzdENhcHMqIGRlbXV4
ZXJTcmNQYWRDYXBzKCkgeyByZXR1cm4gbV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKTsgfQogCi0g
ICAgdm9pZCBkaXNjb25uZWN0RGVtdXhlclNyY1BhZEZyb21BcHBzaW5rRnJvbUFueVRocmVhZChH
c3RQYWQqKTsKLSAgICB2b2lkIGNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rRnJvbVN0cmVh
bWluZ1RocmVhZChHc3RQYWQqKTsKLSAgICB2b2lkIGNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBz
aW5rKEdzdFBhZCopOworICAgIHN0YXRpYyBBdG9tU3RyaW5nIGdlbmVyYXRlVHJhY2tJZChTdHJl
YW1UeXBlLCBpbnQgcGFkSW5kZXgpOworICAgIFRyYWNrKiB0cnlDcmVhdGVUcmFja0Zyb21QYWQo
R3N0UGFkKiBkZW11eGVyU3JjUGFkLCBib29sKiBkc3RBcHBlbmRQYXJzaW5nRmFpbGVkLCBpbnQg
cGFkSW5kZXgpOworICAgIFRyYWNrKiB0cnlNYXRjaFBhZFRvRXhpc3RpbmdUcmFjayhHc3RQYWQq
IGRlbXV4ZXJTcmNQYWQpOworICAgIHZvaWQgbGlua1BhZFdpdGhUcmFjayhHc3RQYWQqIGRlbXV4
ZXJTcmNQYWQsIFRyYWNrJik7CiAKICAgICB2b2lkIHJlc2V0UGlwZWxpbmUoKTsKIAotICAgIHZv
aWQgY29uc3VtZUFwcHNpbmtBdmFpbGFibGVTYW1wbGVzKCk7CisgICAgdm9pZCBjb25zdW1lQXBw
c2lua3NBdmFpbGFibGVTYW1wbGVzKCk7CiAKICAgICBHc3RQYWRQcm9iZVJldHVybiBhcHBzcmNF
bmRPZkFwcGVuZENoZWNrZXJQcm9iZShHc3RQYWRQcm9iZUluZm8qKTsKIApAQCAtMTA1LDI0ICsx
NDEsMjAgQEAgcHJpdmF0ZToKICAgICAvLyBPbmx5IHRoZSBwb2ludGVycyBhcmUgY29tcGFyZWQu
CiAgICAgV1RGOjpUaHJlYWQqIG1fc3RyZWFtaW5nVGhyZWFkOwogCisgICAgYm9vbCBtX2hhc1Jl
Y2VpdmVkRmlyc3RJbml0aWFsaXphdGlvblNlZ21lbnQgeyBmYWxzZSB9OwogICAgIC8vIFVzZWQg
b25seSBmb3IgYXNzZXJ0aW5nIEVPUyBldmVudHMgYXJlIG9ubHkgY2F1c2VkIGJ5IGRlbXV4aW5n
IGVycm9ycy4KICAgICBib29sIG1fZXJyb3JSZWNlaXZlZCB7IGZhbHNlIH07CiAKICAgICBTb3Vy
Y2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyJiBtX3NvdXJjZUJ1ZmZlclByaXZhdGU7CiAgICAgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKiBtX3BsYXllclByaXZhdGU7CiAKLSAgICAvLyAo
bV9tZWRpYVR5cGUsIG1faWQpIGlzIHVuaXF1ZS4KLSAgICBnaW50IG1faWQ7Ci0KICAgICBNZWRp
YVRpbWUgbV9pbml0aWFsRHVyYXRpb247Ci0KKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fYXBw
c3JjOwogICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9waXBlbGluZTsKICAgICBHUmVmUHRyPEdz
dEJ1cz4gbV9idXM7Ci0gICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2FwcHNyYzsKICAgICBHUmVm
UHRyPEdzdEVsZW1lbnQ+IG1fZGVtdXg7Ci0gICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3BhcnNl
cjsgLy8gT3B0aW9uYWwuCi0gICAgLy8gVGhlIGRlbXV4ZXIgaGFzIG9uZSBzcmMgc3RyZWFtIG9u
bHksIHNvIG9ubHkgb25lIGFwcHNpbmsgaXMgbmVlZGVkIGFuZCBsaW5rZWQgdG8gaXQuCi0gICAg
R1JlZlB0cjxHc3RFbGVtZW50PiBtX2FwcHNpbms7CisKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPFRyYWNrPj4gbV90cmFja3M7CiAKICAgICAvLyBVc2VkIHRvIGF2b2lkIHVubmVjZXNzYXJ5
IG5vdGlmaWNhdGlvbnMgcGVyIHNhbXBsZS4KICAgICAvLyBJdCBpcyByZWFkIGFuZCB3cml0dGVu
IGZyb20gdGhlIHN0cmVhbWluZyB0aHJlYWQgYW5kIHdyaXR0ZW4gZnJvbSB0aGUgbWFpbiB0aHJl
YWQuCkBAIC0xMzEsMjUgKzE2MywxMSBAQCBwcml2YXRlOgogICAgIC8vIHF1ZXVlLCBpbnN0ZWFk
IG9mIGl0IGdyb3dpbmcgdW5ib3VuZGVkLgogICAgIHN0ZDo6YXRvbWljX2ZsYWcgbV93YXNCdXNB
bHJlYWR5Tm90aWZpZWRPZkF2YWlsYWJsZVNhbXBsZXM7CiAKLSAgICBHUmVmUHRyPEdzdENhcHM+
IG1fYXBwc2lua0NhcHM7Ci0gICAgR1JlZlB0cjxHc3RDYXBzPiBtX2RlbXV4ZXJTcmNQYWRDYXBz
OwotICAgIEZsb2F0U2l6ZSBtX3ByZXNlbnRhdGlvblNpemU7Ci0KICNpZiAhTE9HX0RJU0FCTEVE
CiAgICAgc3RydWN0IFBhZFByb2JlSW5mb3JtYXRpb24gbV9kZW11eGVyRGF0YUVudGVyaW5nUGFk
UHJvYmVJbmZvcm1hdGlvbjsKLSAgICBzdHJ1Y3QgUGFkUHJvYmVJbmZvcm1hdGlvbiBtX2FwcHNp
bmtEYXRhRW50ZXJpbmdQYWRQcm9iZUluZm9ybWF0aW9uOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUo
RU5DUllQVEVEX01FRElBKQotICAgIHN0cnVjdCBQYWRQcm9iZUluZm9ybWF0aW9uIG1fYXBwc2lu
a1BhZEV2ZW50UHJvYmVJbmZvcm1hdGlvbjsKICNlbmRpZgogCi0gICAgTWVkaWFTb3VyY2VTdHJl
YW1UeXBlR1N0cmVhbWVyIG1fc3RyZWFtVHlwZTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VHJhY2tQ
cml2YXRlQmFzZT4gbV90cmFjazsKLQogICAgIEFib3J0YWJsZVRhc2tRdWV1ZSBtX3Rhc2tRdWV1
ZTsKLQotICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBtX3BlbmRpbmdCdWZmZXI7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwCmluZGV4IDRlZWMwOWUyMmQxN2RjMzUyZTI1MDUw
OTE0MDFmYjZlMjY2ZDc5NDQuLjgzMWMyYjJjNmVmYjIyNDc1OWI0M2JmZTY3ZmI3M2IxNGZlMGE2
MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRS5jcHAKQEAgLTMzMSwyNSArMzMxLDIwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFOjpkdXJhdGlvbkNoYW5nZWQoKQogICAgIH0KIH0KIAotdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnRyYWNrRGV0ZWN0ZWQoQXBwZW5kUGlwZWxpbmUm
IGFwcGVuZFBpcGVsaW5lLCBSZWZQdHI8V2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZT4gbmV3VHJh
Y2spCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0SW5pdGlhbFZpZGVv
U2l6ZShjb25zdCBGbG9hdFNpemUmIHZpZGVvU2l6ZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotICAgIEFTU0VSVChhcHBlbmRQaXBlbGluZS50cmFjaygpID09IG5ld1RyYWNrKTsK
LQotICAgIEdzdENhcHMqIGNhcHMgPSBhcHBlbmRQaXBlbGluZS5hcHBzaW5rQ2FwcygpOwotICAg
IEFTU0VSVChjYXBzKTsKLSAgICBHU1RfREVCVUcoIkRlbXV4ZXIgcGFyc2VkIG1ldGFkYXRhIHdp
dGggdHJhY2sgSUQ6ICVzLCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgbmV3VHJhY2stPmlkKCku
c3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpLCBjYXBzKTsKIAogICAgIC8vIFdlIHNldCB0aGUgc2l6
ZSBvZiB0aGUgdmlkZW8gb25seSBmb3IgdGhlIGZpcnN0IGluaXRpYWxpemF0aW9uIHNlZ21lbnQu
CiAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbDogTm9ybWFsbHkgdGhlIHZpZGVvIHNpemUgZGVw
ZW5kcyBvbiB0aGUgZnJhbWVzIGFycml2aW5nCiAgICAgLy8gYXQgdGhlIHNpbmsgaW4gdGhlIHBs
YXliYWNrIHBpcGVsaW5lLCBub3QgaW4gdGhlIGFwcGVuZCBwaXBlbGluZTsgYnV0IHdlIHN0aWxs
CiAgICAgLy8gd2FudCB0byByZXBvcnQgYW4gaW5pdGlhbCBzaXplIGZvciBIQVZFX01FVEFEQVRB
IChmaXJzdCBpbml0aWFsaXphdGlvbiBzZWdtZW50KS4KLSAgICBpZiAobV92aWRlb1NpemUuaXNF
bXB0eSgpICYmIGRvQ2Fwc0hhdmVUeXBlKGNhcHMsIEdTVF9WSURFT19DQVBTX1RZUEVfUFJFRklY
KSkgewotICAgICAgICBpZiAoYXV0byBzaXplID0gZ2V0VmlkZW9SZXNvbHV0aW9uRnJvbUNhcHMo
Y2FwcykpIHsKLSAgICAgICAgICAgIG1fdmlkZW9TaXplID0gKnNpemU7Ci0gICAgICAgICAgICBH
U1RfREVCVUcoIlNldHRpbmcgaW5pdGlhbCB2aWRlbyBzaXplOiAlZ3glZyIsIG1fdmlkZW9TaXpl
LndpZHRoKCksIG1fdmlkZW9TaXplLmhlaWdodCgpKTsKLSAgICAgICAgfQotICAgIH0KKworICAg
IGlmICghbV92aWRlb1NpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHU1Rf
REVCVUcoIlNldHRpbmcgaW5pdGlhbCB2aWRlbyBzaXplOiAlZ3glZyIsIHZpZGVvU2l6ZS53aWR0
aCgpLCB2aWRlb1NpemUuaGVpZ2h0KCkpOworICAgIG1fdmlkZW9TaXplID0gdmlkZW9TaXplOwog
fQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c3RhcnRTb3VyY2UoY29u
c3QgVmVjdG9yPFJlZlB0cjxNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyPj4mIHRyYWNrcykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2Uv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5o
CmluZGV4IDVmMjJhNTFlOTVmYTJkYTQ0ZTMyMDhhYmI2NmRjM2ZlZWQ0ZDdlNjAuLjkyMjY1ZTg3
YzM5Y2VhMTkxNDQ3MDIxNTMyZjJjODEyMDNjNGFmMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaApAQCAtNzEsNyArNzEsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRl
KTsKICAgICBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqIG1lZGlhU291cmNlUHJpdmF0ZUNsaWVu
dCgpIHsgcmV0dXJuIG1fbWVkaWFTb3VyY2UuZ2V0KCk7IH0KIAotICAgIHZvaWQgdHJhY2tEZXRl
Y3RlZChBcHBlbmRQaXBlbGluZSYsIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPik7
CisgICAgdm9pZCBzZXRJbml0aWFsVmlkZW9TaXplKGNvbnN0IEZsb2F0U2l6ZSYpOwogCiAgICAg
dm9pZCBibG9ja0R1cmF0aW9uQ2hhbmdlcygpOwogICAgIHZvaWQgdW5ibG9ja0R1cmF0aW9uQ2hh
bmdlcygpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDRjMDYzYWUzZThkMDI3YjJmZjhmNWFhNjNlZTVkYmJhOTNiZjI0NDku
LmZmMjA5OTZiYTY1YjYxM2E5ZTE2NDZlY2YwMzdkMjkyOWVhZWNmNzggMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNyBAQAorMjAyMS0wOC0xMiAgQWxpY2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW01TRV1bR1N0cmVhbWVyXSBJbXBsZW1lbnQgbXVsdGktdHJhY2sgc3Vw
cG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5
MDcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBk
YXRlIGV4cGVjdGF0aW9ucyBhbmQgcmViYXNlbGluZSBvbmUgdGVzdCBpcyB3aGljaCB0aGUgYnVm
ZmVyZWQKKyAgICAgICAgcmFuZ2VzIGhhdmUgY2hhbmdlZCBzbGlnaHRseSBkdWUgdG8gdGhlIGF1
ZGlvIHRyYWNrIHByZXZpb3VzbHkKKyAgICAgICAgZGlzY2FyZGVkIG5vdyBiZWluZyBwYXJzZWQu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICog
cGxhdGZvcm0vZ2xpYi9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJj
ZS9tZWRpYXNvdXJjZS1yZW1vdmUtZXhwZWN0ZWQudHh0OgorCiAyMDIxLTA4LTA4ICBXZW5zb24g
SHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIGNhcmV0LWNvbG9yIGRv
ZXMgbm90IHdvcmsgb24gZmlyc3QgY2xpY2sgaW4gaW9zCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
bGliL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggYWExOWQ2MjllMTZiZjJiYTkzYjgxZTFmMDBjMjVh
NGNjNmYwNjQ1Mi4uNjVjNDQzNzlkYmUyMmY4YTZhMDBmYjc2MDYzOTlkNmE2MzgzMTA3NSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zCisrKyBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNTgxLDcgKzU4
MSw2IEBAIHdlYmtpdC5vcmcvYi8yMjg4MjAgbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXdlYm0t
b3B1cy1wYXJ0aWFsLWFib3J0Lmh0bWwgWyBGYWlsCiB3ZWJraXQub3JnL2IvMjI0NzY3IGltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNoYW5n
ZXR5cGUtcGxheS1pbXBsaWNpdC5odG1sIFsgQ3Jhc2ggUGFzcyBdCiAKICMgU2VlIGFsc28gYnVn
ICMxNzU1NzguCi13ZWJraXQub3JnL2IvMTY3MTA4IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWFjdGl2ZXNvdXJjZWJ1ZmZlcnMuaHRtbCBb
IEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzE2NzEwOCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1hdnRyYWNrcy5odG1sIFsgRmFpbHVyZSBd
CiB3ZWJraXQub3JnL2IvMTY3MTA4IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVk
aWEtc291cmNlL21lZGlhc291cmNlLWJ1ZmZlcmVkLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5v
cmcvYi8xNjcxMDggaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2Uv
bWVkaWFzb3VyY2UtY2hhbmdldHlwZS5odG1sIFsgRmFpbHVyZSBDcmFzaCBdCkBAIC02MTAsNyAr
NjA5LDYgQEAgd2Via2l0Lm9yZy9iLzE1NDM5MCBodHRwL3Rlc3RzL21lZGlhL2hscy9obHMtYXVk
aW8tdHJhY2tzLWxvY2FsZS1zZWxlY3Rpb24uaHRtbAogCiB3ZWJraXQub3JnL2IvMTk5NjE3IGh0
dHAvdGVzdHMvbWVkaWEvaGxzL2hscy12aWRlby1yZXNpemUuaHRtbCBbIFNraXAgXQogCi13ZWJr
aXQub3JnL2IvMjI3MjU4IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtaGFzLWF1ZGlv
LXZpZGVvLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8yMjcyNTggbWVkaWEvbWVkaWEt
c291cmNlL21lZGlhLXNvdXJjZS1zZWVrLXVuYnVmZmVyZWQuaHRtbCBbIFRpbWVvdXQgXQogCiB3
ZWJraXQub3JnL2IvMjI3NjYxIGh0dHAvdGVzdHMvbWVkaWEvaGxzL2hscy13ZWJ2dHQtc2Vlay1i
YWNrd2FyZHMuaHRtbCBbIFRpbWVvdXQgXQpAQCAtMjIzNyw3ICsyMjM1LDYgQEAgd2Via2l0Lm9y
Zy9iLzExMzEyNyBtZWRpYS90cmFjay90cmFjay1wcmVmZXItY2FwdGlvbnMuaHRtbCBbIFRpbWVv
dXQgXQogCiB3ZWJraXQub3JnL2IvMTY4MzczIGh0dHAvdGVzdHMvbWVkaWEvdHJhY2staW4tYmFu
ZC1obHMtbWV0YWRhdGEtY3Jhc2guaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzE2ODM3
MyBtZWRpYS9tZWRpYS1mdWxsc2NyZWVuLWxvb3AtaW5saW5lLmh0bWwgWyBUaW1lb3V0IF0KLXdl
YmtpdC5vcmcvYi8xNjgzNzMgbWVkaWEvbWVkaWEtc291cmNlL29ubHktYmNwNDctbGFuZ3VhZ2Ut
dGFncy1hY2NlcHRlZC1hcy12YWxpZC5odG1sIFsgQ3Jhc2ggVGltZW91dCBdCiB3ZWJraXQub3Jn
L2IvMTc0MjQyIG1lZGlhL21lZGlhLWZ1bGxzY3JlZW4tcGF1c2UtaW5saW5lLmh0bWwgWyBTa2lw
IF0KIHdlYmtpdC5vcmcvYi8xODIxMDggaHR0cC90ZXN0cy9tZWRpYS9obHMvaGxzLXdlYnZ0dC10
cmFja3MuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzEzNzMxMSBtZWRpYS92aWRlby1m
dWxsc2NyZWVuLW9ubHktcGxheWJhY2suaHRtbCBbIFRpbWVvdXQgQ3Jhc2ggXQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1yZW1vdmUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ2xpYi9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlh
LXNvdXJjZS9tZWRpYXNvdXJjZS1yZW1vdmUtZXhwZWN0ZWQudHh0CmluZGV4IDZkNWUzZGZmYmMw
NTVhODA2ZjNhMjYxM2QwYzE1ZGE5NTNhODU0MDIuLjlmNTgxMjk3ZjgyM2M5YWEyYTA3OGJkZmM1
NjllOTZmYzAwZWY3YTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtcmVt
b3ZlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291cmNlLXJlbW92ZS1l
eHBlY3RlZC50eHQKQEAgLTExLDggKzExLDggQEAgUEFTUyBUZXN0IHJlbW92ZSB3aGlsZSB1cGRh
dGUgcGVuZGluZy4KIFBBU1MgVGVzdCBhYm9ydGluZyBhIHJlbW92ZSBvcGVyYXRpb24uCiBQQVNT
IFRlc3QgcmVtb3ZlIHdpdGggYSBzdGFydCBhdCB0aGUgZHVyYXRpb24uCiBQQVNTIFRlc3QgcmVt
b3ZlIHRyYW5zaXRpb25pbmcgcmVhZHlTdGF0ZSBmcm9tICdlbmRlZCcgdG8gJ29wZW4nLgotRkFJ
TCBUZXN0IHJlbW92aW5nIGFsbCBhcHBlbmRlZCBkYXRhLiBhc3NlcnRfZXF1YWxzOiBJbml0aWFs
IGJ1ZmZlcmVkIHJhbmdlLiBleHBlY3RlZCAieyBbMC4wOTUsIDYuNDIzKSB9IiBidXQgZ290ICJ7
IFswLjAwMCwgNi40MjMpIH0iCi1GQUlMIFRlc3QgcmVtb3ZpbmcgYmVnaW5uaW5nIG9mIGFwcGVu
ZGVkIGRhdGEuIGFzc2VydF9lcXVhbHM6IEluaXRpYWwgYnVmZmVyZWQgcmFuZ2UuIGV4cGVjdGVk
ICJ7IFswLjA5NSwgNi40MjMpIH0iIGJ1dCBnb3QgInsgWzAuMDAwLCA2LjQyMykgfSIKLUZBSUwg
VGVzdCByZW1vdmluZyB0aGUgbWlkZGxlIG9mIGFwcGVuZGVkIGRhdGEuIGFzc2VydF9lcXVhbHM6
IEluaXRpYWwgYnVmZmVyZWQgcmFuZ2UuIGV4cGVjdGVkICJ7IFswLjA5NSwgNi40MjMpIH0iIGJ1
dCBnb3QgInsgWzAuMDAwLCA2LjQyMykgfSIKLUZBSUwgVGVzdCByZW1vdmluZyB0aGUgZW5kIG9m
IGFwcGVuZGVkIGRhdGEuIGFzc2VydF9lcXVhbHM6IEluaXRpYWwgYnVmZmVyZWQgcmFuZ2UuIGV4
cGVjdGVkICJ7IFswLjA5NSwgNi40MjMpIH0iIGJ1dCBnb3QgInsgWzAuMDAwLCA2LjQyMykgfSIK
K0ZBSUwgVGVzdCByZW1vdmluZyBhbGwgYXBwZW5kZWQgZGF0YS4gYXNzZXJ0X2VxdWFsczogSW5p
dGlhbCBidWZmZXJlZCByYW5nZS4gZXhwZWN0ZWQgInsgWzAuMDk1LCA2LjU0OCkgfSIgYnV0IGdv
dCAieyBbMC4wMDAsIDYuNTQ4KSB9IgorRkFJTCBUZXN0IHJlbW92aW5nIGJlZ2lubmluZyBvZiBh
cHBlbmRlZCBkYXRhLiBhc3NlcnRfZXF1YWxzOiBJbml0aWFsIGJ1ZmZlcmVkIHJhbmdlLiBleHBl
Y3RlZCAieyBbMC4wOTUsIDYuNTQ4KSB9IiBidXQgZ290ICJ7IFswLjAwMCwgNi41NDgpIH0iCitG
QUlMIFRlc3QgcmVtb3ZpbmcgdGhlIG1pZGRsZSBvZiBhcHBlbmRlZCBkYXRhLiBhc3NlcnRfZXF1
YWxzOiBJbml0aWFsIGJ1ZmZlcmVkIHJhbmdlLiBleHBlY3RlZCAieyBbMC4wOTUsIDYuNTQ4KSB9
IiBidXQgZ290ICJ7IFswLjAwMCwgNi41NDgpIH0iCitGQUlMIFRlc3QgcmVtb3ZpbmcgdGhlIGVu
ZCBvZiBhcHBlbmRlZCBkYXRhLiBhc3NlcnRfZXF1YWxzOiBJbml0aWFsIGJ1ZmZlcmVkIHJhbmdl
LiBleHBlY3RlZCAieyBbMC4wOTUsIDYuNTQ4KSB9IiBidXQgZ290ICJ7IFswLjAwMCwgNi41NDgp
IH0iCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435866</attachid>
            <date>2021-08-19 09:03:39 -0700</date>
            <delta_ts>2021-08-23 01:08:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229072-20210819180338.patch</filename>
            <type>text/plain</type>
            <size>63787</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTRiYzFhZThhNjljMDE1
MWM5MTVkMDNjZTBjNDQ4OTA1YTc5ZWE5OC4uMTVlYmMzYThlYThlMmYzN2Q4Mzk2ZDk2ZWY0NjZk
MjE5NTE3NGY0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDIxLTA4LTEyICBBbGlj
aWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbTVNFXVtHU3Ry
ZWFtZXJdIEltcGxlbWVudCBtdWx0aS10cmFjayBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjkwNzIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Ig
U291cmNlQnVmZmVyIGhhdmluZyBtb3JlIHRoYW4gb25lIHRyYWNrIGluCisgICAgICAgIHRoZSBH
U3RyZWFtZXIgcG9ydC4KKworICAgICAgICBUaGlzIGZpeGVzIHRoZSBmb2xsb3dpbmcgTGF5b3V0
VGVzdHM6CisKKyAgICAgICAgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1z
b3VyY2UvbWVkaWFzb3VyY2UtYWN0aXZlc291cmNlYnVmZmVycy5odG1sCisgICAgICAgIG1lZGlh
L21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtaGFzLWF1ZGlvLXZpZGVvLmh0bWwKKyAgICAgICAg
bWVkaWEvbWVkaWEtc291cmNlL29ubHktYmNwNDctbGFuZ3VhZ2UtdGFncy1hY2NlcHRlZC1hcy12
YWxpZC5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVh
bWVyQ29tbW9uLmg6CisgICAgICAgIChHc3RJdGVyYXRvckFkYXB0b3I6OkdzdEl0ZXJhdG9yQWRh
cHRvcik6CisgICAgICAgIChHc3RJdGVyYXRvckFkYXB0b3I6Oml0ZXJhdG9yOjppdGVyYXRvcik6
CisgICAgICAgIChHc3RJdGVyYXRvckFkYXB0b3I6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAg
ICAgICAoR3N0SXRlcmF0b3JBZGFwdG9yOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAg
IChHc3RJdGVyYXRvckFkYXB0b3I6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEdz
dEl0ZXJhdG9yQWRhcHRvcjo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoR3N0SXRl
cmF0b3JBZGFwdG9yOjpiZWdpbik6CisgICAgICAgIChHc3RJdGVyYXRvckFkYXB0b3I6OmVuZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGlu
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6QXBwZW5kUGlwZWxpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6On5BcHBlbmRQaXBlbGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6cGFyc2VEZW11eGVyU3JjUGFkQ2Fwcyk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6YXBwc2lua0NhcHNDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpoYW5kbGVFbmRPZkFwcGVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6YXBwc2lua05ld1NhbXBsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6ZGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6Y29uc3VtZUFwcHNpbmtz
QXZhaWxhYmxlU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6cmVz
ZXRQYXJzZXJTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6aGFuZGxl
QXBwc2lua05ld1NhbXBsZUZyb21TdHJlYW1pbmdUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlT3B0aW9uYWxQYXJzZXJGb3JGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5k
UGlwZWxpbmU6OmdlbmVyYXRlVHJhY2tJZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBl
bGluZTo6dHJ5Q3JlYXRlVHJhY2tGcm9tUGFkKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBp
cGVsaW5lOjp0cnlNYXRjaFBhZFRvRXhpc3RpbmdUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBlbmRQaXBlbGluZTo6bGlua1BhZFdpdGhUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpBcHBl
bmRQaXBlbGluZTo6bWFrZVdlYktpdFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBp
cGVsaW5lOjpUcmFjazo6aW5pdGlhbGl6ZUVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGVuZFBpcGVsaW5lOjpob29rVHJhY2tFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5k
UGlwZWxpbmU6OnN0cmVhbVR5cGVUb1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQ
aXBlbGluZTo6aWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6
OnRyYWNrSWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNv
bnN1bWVBcHBzaW5rQXZhaWxhYmxlU2FtcGxlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpBcHBlbmRQaXBlbGluZTo6Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmtGcm9tU3RyZWFt
aW5nVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpj
b25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2luayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpBcHBlbmRQaXBlbGluZTo6ZGlzY29ubmVjdERlbXV4ZXJTcmNQYWRGcm9tQXBwc2lua0Zyb21B
bnlUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9tc2UvQXBwZW5kUGlwZWxpbmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5l
Ojpzb3VyY2VCdWZmZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5l
OjpUcmFjazo6VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNy
Yyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6YXBwc2lua0NhcHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnRyYWNrKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjphcHBzaW5rKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpkZW11eGVyU3JjUGFkQ2Fwcyk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjpzZXRJbml0aWFsVmlkZW9TaXplKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dHJhY2tEZXRlY3RlZCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UuaDoKKwogMjAyMS0wOC0wOSAgQWxpY2lhIEJveWEgR2FyY8Ot
YSAgPGFib3lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW01TRV1bR1N0cmVhbWVyXSBVcGRhdGUg
dHJhY2tzIHN5bmNocm9ub3VzbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaAppbmRleCBiNjU3Mzlj
OGQzNDc0ZWE4ZWUwNGQ3ZjFlZWY5M2VlYzBiNTlhZWVmLi45Y2M5ZTNhNzA5NmJjMTU1N2IxMjkx
YmM2ODZiOWMyNzU4MmRhODkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCkBAIC0zMzUsNCAr
MzM1LDcxIEBAIGlubGluZSB2b2lkIGdzdFBhZFN0cmVhbVVubG9jayhHc3RQYWQqIHBhZCkgeyBH
U1RfUEFEX1NUUkVBTV9VTkxPQ0socGFkKTsgfQogdXNpbmcgR3N0T2JqZWN0TG9ja2VyID0gRXh0
ZXJuYWxMb2NrZXI8dm9pZCwgZ3N0T2JqZWN0TG9jaywgZ3N0T2JqZWN0VW5sb2NrPjsKIHVzaW5n
IEdzdFBhZFN0cmVhbUxvY2tlciA9IEV4dGVybmFsTG9ja2VyPEdzdFBhZCwgZ3N0UGFkU3RyZWFt
TG9jaywgZ3N0UGFkU3RyZWFtVW5sb2NrPjsKIAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFz
cyBHc3RJdGVyYXRvckFkYXB0b3IgeworcHVibGljOgorICAgIEdzdEl0ZXJhdG9yQWRhcHRvcihH
VW5pcXVlUHRyPEdzdEl0ZXJhdG9yPiYmIGl0ZXIpCisgICAgICAgIDogbV9pdGVyKFdURk1vdmUo
aXRlcikpCisgICAgeyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAg
ICAgICBpdGVyYXRvcihHc3RJdGVyYXRvciogaXRlciwgZ2Jvb2xlYW4gZG9uZSA9IEZBTFNFKQor
ICAgICAgICAgICAgOiBtX2l0ZXIoaXRlcikKKyAgICAgICAgICAgICwgbV9kb25lKGRvbmUpCisg
ICAgICAgIHsgfQorCisgICAgICAgIFQqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRWYWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9y
JiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgR1ZhbHVlIHZhbHVlID0gR19W
QUxVRV9JTklUOworICAgICAgICAgICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dChtX2l0ZXIs
ICZ2YWx1ZSkpIHsKKyAgICAgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgorICAgICAgICAg
ICAgICAgIG1fY3VycmVudFZhbHVlID0gc3RhdGljX2Nhc3Q8VCo+KGdfdmFsdWVfZ2V0X29iamVj
dCgmdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBnX3ZhbHVlX3Jlc2V0KCZ2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgor
ICAgICAgICAgICAgICAgIG1fZG9uZSA9IHRydWU7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50
VmFsdWUgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRURfV0lUSF9NRVNTQUdFKCJV
bmV4cGVjdGVkIGl0ZXJhdG9yIGludmFsaWRhdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1f
aXRlciA9PSBvdGhlci5tX2l0ZXIgJiYgbV9kb25lID09IG90aGVyLm1fZG9uZTsKKyAgICAgICAg
fQorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSB7IHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgR3N0SXRlcmF0
b3IqIG1faXRlcjsKKyAgICAgICAgZ2Jvb2xlYW4gbV9kb25lOworICAgICAgICBUKiBtX2N1cnJl
bnRWYWx1ZSB7IG51bGxwdHIgfTsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFtX3N0YXJ0ZWQpOworICAgICAgICBtX3N0YXJ0ZWQgPSB0cnVl
OworICAgICAgICBpdGVyYXRvciBpdGVyIHsgbV9pdGVyLmdldCgpIH07CisgICAgICAgIHJldHVy
biArK2l0ZXI7CisgICAgfQorCisgICAgaXRlcmF0b3IgZW5kKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiB7IG1faXRlci5nZXQoKSwgVFJVRSB9OworICAgIH0KKworcHJpdmF0ZToKKyAgICBHVW5p
cXVlUHRyPEdzdEl0ZXJhdG9yPiBtX2l0ZXI7CisgICAgYm9vbCBtX3N0YXJ0ZWQgeyBmYWxzZSB9
OworfTsKKwogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlw
ZWxpbmUuY3BwCmluZGV4IDE2YWI5ZmU1MjY3N2QwODc3MWMwZTM1MGUzYjc2MDQxZWZhYWVkYTQu
LjI0YTU0Y2MwODI4OTYxNDA0NzE5NzFjZjJkYTcwMmExZjA3MzQwYjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxp
bmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvQXBwZW5kUGlwZWxpbmUuY3BwCkBAIC0yMCw2ICsyMCw4IEBACiAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJBcHBlbmRQaXBlbGluZS5oIgorI2luY2x1ZGUgIkFib3J0YWJsZVRh
c2tRdWV1ZS5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lci5oIgogCiAj
aWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNF
KQogCkBAIC0xMDIsOSArMTA0LDcgQEAgc3RhdGljIHZvaWQgYXNzZXJ0ZWRFbGVtZW50U2V0U3Rh
dGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGUgZGVzaXJlZFN0YXRlKQogQXBwZW5kUGlw
ZWxpbmU6OkFwcGVuZFBpcGVsaW5lKFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXImIHNvdXJj
ZUJ1ZmZlclByaXZhdGUsIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSYgcGxheWVyUHJp
dmF0ZSkKICAgICA6IG1fc291cmNlQnVmZmVyUHJpdmF0ZShzb3VyY2VCdWZmZXJQcml2YXRlKQog
ICAgICwgbV9wbGF5ZXJQcml2YXRlKCZwbGF5ZXJQcml2YXRlKQotICAgICwgbV9pZCgwKQogICAg
ICwgbV93YXNCdXNBbHJlYWR5Tm90aWZpZWRPZkF2YWlsYWJsZVNhbXBsZXMoZmFsc2UpCi0gICAg
LCBtX3N0cmVhbVR5cGUoVW5rbm93bikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIHN0ZDo6Y2FsbF9vbmNlKHNfc3RhdGljSW5pdGlhbGl6YXRpb25GbGFnLCBBcHBlbmRQaXBl
bGluZTo6c3RhdGljSW5pdGlhbGl6YXRpb24pOwpAQCAtMTUwLDc5ICsxNTAsMjIgQEAgQXBwZW5k
UGlwZWxpbmU6OkFwcGVuZFBpcGVsaW5lKFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXImIHNv
dXJjZUJ1ZmZlclByaXZhdGUKICAgICBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogCi0gICAgbV9hcHBzaW5rID0gbWFrZUdTdHJlYW1lckVsZW1lbnQoImFwcHNpbmsiLCBudWxs
cHRyKTsKLQotICAgIGdzdF9hcHBfc2lua19zZXRfZW1pdF9zaWduYWxzKEdTVF9BUFBfU0lOSyht
X2FwcHNpbmsuZ2V0KCkpLCBUUlVFKTsKLSAgICBnc3RfYmFzZV9zaW5rX3NldF9zeW5jKEdTVF9C
QVNFX1NJTksobV9hcHBzaW5rLmdldCgpKSwgRkFMU0UpOwotICAgIGdzdF9iYXNlX3Npbmtfc2V0
X2FzeW5jX2VuYWJsZWQoR1NUX0JBU0VfU0lOSyhtX2FwcHNpbmsuZ2V0KCkpLCBGQUxTRSk7IC8v
IE5vIHByZXJvbGxzLCBubyBhc3luYyBzdGF0ZSBjaGFuZ2VzLgotICAgIGdzdF9iYXNlX3Npbmtf
c2V0X2Ryb3Bfb3V0X29mX3NlZ21lbnQoR1NUX0JBU0VfU0lOSyhtX2FwcHNpbmsuZ2V0KCkpLCBG
QUxTRSk7Ci0gICAgZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9zYW1wbGVfZW5hYmxlZChHU1RfQkFT
RV9TSU5LKG1fYXBwc2luay5nZXQoKSksIEZBTFNFKTsKLQotICAgIEdSZWZQdHI8R3N0UGFkPiBh
cHBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYXBwc2lu
ay5nZXQoKSwgInNpbmsiKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChhcHBzaW5rUGFkLmdldCgp
LCAibm90aWZ5OjpjYXBzIiwgR19DQUxMQkFDSygrW10oR09iamVjdCosIEdQYXJhbVNwZWMqLCBB
cHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpIHsKLSAgICAgICAgaWYgKGlzTWFpblRocmVh
ZCgpKSB7Ci0gICAgICAgICAgICAvLyBXaGVuIGNoYW5naW5nIHRoZSBwaXBlbGluZSBzdGF0ZSBk
b3duIHRvIFJFQURZIHRoZSBkZW11eGVyIGlzIHVubGlua2VkIGFuZCB0aGlzIHRyaWdnZXJzIGEg
Y2FwcyBub3RpZmljYXRpb24KLSAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIGFwcHNpbmsgbG9z
ZXMgaXRzIHByZXZpb3VzbHkgbmVnb3RpYXRlZCBjYXBzLiBXZSBhcmUgbm90IGludGVyZXN0ZWQg
aW4gdGhlc2UgdW5uZWdvdGlhdGVkIGNhcHMuCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICAgICAg
R1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3Bh
ZChhcHBlbmRQaXBlbGluZS0+bV9hcHBzaW5rLmdldCgpLCAic2luayIpKTsKLSAgICAgICAgICAg
IEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9jdXJyZW50X2Nh
cHMocGFkLmdldCgpKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWNhcHMpOwotI2VuZGlmCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGUgc3RyZWFtaW5nIHRo
cmVhZCBoYXMganVzdCByZWNlaXZlZCBhIG5ldyBjYXBzIGFuZCBpcyBhYm91dCB0byBsZXQgc2Ft
cGxlcyB1c2luZyB0aGUKLSAgICAgICAgLy8gbmV3IGNhcHMgZmxvdy4gTGV0J3MgYmxvY2sgaXQg
dW50aWwgdGhlIG1haW4gdGhyZWFkIGhhcyBjb25zdW1lZCB0aGUgc2FtcGxlcyB3aXRoIHRoZSBv
bGQKLSAgICAgICAgLy8gY2FwcyBhbmQgaGFzIHByb2Nlc3NlZCB0aGUgY2FwcyBjaGFuZ2UuCi0g
ICAgICAgIGFwcGVuZFBpcGVsaW5lLT5tX3Rhc2tRdWV1ZS5lbnF1ZXVlVGFza0FuZFdhaXQ8QWJv
cnRhYmxlVGFza1F1ZXVlOjpWb2lkPihbYXBwZW5kUGlwZWxpbmVdKCkgewotICAgICAgICAgICAg
YXBwZW5kUGlwZWxpbmUtPmFwcHNpbmtDYXBzQ2hhbmdlZCgpOwotICAgICAgICAgICAgcmV0dXJu
IEFib3J0YWJsZVRhc2tRdWV1ZTo6Vm9pZCgpOwotICAgICAgICB9KTsKLSAgICB9KSwgdGhpcyk7
Ci0KICNpZiAhTE9HX0RJU0FCTEVECiAgICAgR1JlZlB0cjxHc3RQYWQ+IGRlbXV4ZXJQYWQgPSBh
ZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9kZW11eC5nZXQoKSwgInNpbmsi
KSk7CiAgICAgbV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5hcHBlbmRQ
aXBlbGluZSA9IHRoaXM7CiAgICAgbV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1h
dGlvbi5kZXNjcmlwdGlvbiA9ICJkZW11eGVyIGRhdGEgZW50ZXJpbmciOwogICAgIG1fZGVtdXhl
ckRhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24ucHJvYmVJZCA9IGdzdF9wYWRfYWRkX3By
b2JlKGRlbXV4ZXJQYWQuZ2V0KCksIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsIHJlaW50ZXJw
cmV0X2Nhc3Q8R3N0UGFkUHJvYmVDYWxsYmFjaz4oYXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVn
SW5mb3JtYXRpb24pLCAmbV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbiwg
bnVsbHB0cik7Ci0gICAgbV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5h
cHBlbmRQaXBlbGluZSA9IHRoaXM7Ci0gICAgbV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJ
bmZvcm1hdGlvbi5kZXNjcmlwdGlvbiA9ICJhcHBzaW5rIGRhdGEgZW50ZXJpbmciOwotICAgIG1f
YXBwc2lua0RhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24ucHJvYmVJZCA9IGdzdF9wYWRf
YWRkX3Byb2JlKGFwcHNpbmtQYWQuZ2V0KCksIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsIHJl
aW50ZXJwcmV0X2Nhc3Q8R3N0UGFkUHJvYmVDYWxsYmFjaz4oYXBwZW5kUGlwZWxpbmVQYWRQcm9i
ZURlYnVnSW5mb3JtYXRpb24pLCAmbV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1h
dGlvbiwgbnVsbHB0cik7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCi0g
ICAgbV9hcHBzaW5rUGFkRXZlbnRQcm9iZUluZm9ybWF0aW9uLmFwcGVuZFBpcGVsaW5lID0gdGhp
czsKLSAgICBtX2FwcHNpbmtQYWRFdmVudFByb2JlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24gPSAi
YXBwc2luayBldmVudCBwcm9iZSI7Ci0gICAgbV9hcHBzaW5rUGFkRXZlbnRQcm9iZUluZm9ybWF0
aW9uLnByb2JlSWQgPSBnc3RfcGFkX2FkZF9wcm9iZShhcHBzaW5rUGFkLmdldCgpLCBHU1RfUEFE
X1BST0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTSwgcmVpbnRlcnByZXRfY2FzdDxHc3RQYWRQcm9i
ZUNhbGxiYWNrPihhcHBlbmRQaXBlbGluZUFwcHNpbmtQYWRFdmVudFByb2JlKSwgJm1fYXBwc2lu
a1BhZEV2ZW50UHJvYmVJbmZvcm1hdGlvbiwgbnVsbHB0cik7CiAjZW5kaWYKIAotICAgIC8vIFRo
ZXNlIHNpZ25hbHMgd29uJ3QgYmUgY29ubmVjdGVkIG91dHNpZGUgb2YgdGhlIGxpZmV0aW1lIG9m
ICJ0aGlzIi4KLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fZGVtdXguZ2V0KCksICJwYWQtYWRkZWQi
LCBHX0NBTExCQUNLKCtbXShHc3RFbGVtZW50KiwgR3N0UGFkKiBkZW11eGVyU3JjUGFkLCBBcHBl
bmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpIHsKLSAgICAgICAgYXBwZW5kUGlwZWxpbmUtPmNv
bm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rRnJvbVN0cmVhbWluZ1RocmVhZChkZW11eGVyU3Jj
UGFkKTsKLSAgICB9KSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2RlbXV4LmdldCgp
LCAicGFkLXJlbW92ZWQiLCBHX0NBTExCQUNLKCtbXShHc3RFbGVtZW50KiwgR3N0UGFkKiBkZW11
eGVyU3JjUGFkLCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpIHsKLSAgICAgICAgYXBw
ZW5kUGlwZWxpbmUtPmRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNpbmtGcm9tQW55VGhy
ZWFkKGRlbXV4ZXJTcmNQYWQpOwotICAgIH0pLCB0aGlzKTsKKyAgICAvLyBUaGVzZSBzaWduYWxz
IHdvbid0IG91dGxpdmUgdGhlIGxpZmV0aW1lIG9mIGB0aGlzYC4KICAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fZGVtdXguZ2V0KCksICJuby1tb3JlLXBhZHMiLCBHX0NBTExCQUNLKCtbXShHc3RFbGVt
ZW50KiwgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5lKSB7CiAgICAgICAgIEFTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOwogICAgICAgICBHU1RfREVCVUcoIlBvc3Rpbmcgbm8tbW9yZS1wYWRz
IHRhc2sgdG8gbWFpbiB0aHJlYWQiKTsKLSAgICAgICAgYXBwZW5kUGlwZWxpbmUtPm1fdGFza1F1
ZXVlLmVucXVldWVUYXNrKFthcHBlbmRQaXBlbGluZV0oKSB7CisgICAgICAgIGFwcGVuZFBpcGVs
aW5lLT5tX3Rhc2tRdWV1ZS5lbnF1ZXVlVGFza0FuZFdhaXQ8QWJvcnRhYmxlVGFza1F1ZXVlOjpW
b2lkPihbYXBwZW5kUGlwZWxpbmVdKCkgewogICAgICAgICAgICAgYXBwZW5kUGlwZWxpbmUtPmRp
ZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoKTsKKyAgICAgICAgICAgIHJldHVybiBBYm9y
dGFibGVUYXNrUXVldWU6OlZvaWQoKTsKICAgICAgICAgfSk7CiAgICAgfSksIHRoaXMpOwotICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9hcHBzaW5rLmdldCgpLCAibmV3LXNhbXBsZSIsIEdfQ0FMTEJB
Q0soK1tdKEdzdEVsZW1lbnQqIGFwcHNpbmssIEFwcGVuZFBpcGVsaW5lKiBhcHBlbmRQaXBlbGlu
ZSkgLT4gR3N0Rmxvd1JldHVybiB7Ci0gICAgICAgIGFwcGVuZFBpcGVsaW5lLT5oYW5kbGVBcHBz
aW5rTmV3U2FtcGxlRnJvbVN0cmVhbWluZ1RocmVhZChhcHBzaW5rKTsKLSAgICAgICAgcmV0dXJu
IEdTVF9GTE9XX09LOwotICAgIH0pLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fYXBw
c2luay5nZXQoKSwgImVvcyIsIEdfQ0FMTEJBQ0soK1tdKEdzdEVsZW1lbnQqLCBBcHBlbmRQaXBl
bGluZSogYXBwZW5kUGlwZWxpbmUpIHsKLSAgICAgICAgLy8gSnVzdCBpZ25vcmUgRU9TIHdoZW4g
aGF2aW5nIG1vcmUgdGhhbiBvbmUgcGFkLiBJdCBsaWtlbHkgbWVhbnMgdGhhdCBvbmUgb2YgdGhl
IHBhZHMgaXMKLSAgICAgICAgLy8gZ29pbmcgdG8gYmUgcmVtb3ZlZCBhbmQgdGhlIHJlbWFpbmlu
ZyBvbmUgd2lsbCBiZSByZWF0dGFjaGVkLgotICAgICAgICBpZiAoYXBwZW5kUGlwZWxpbmUtPm1f
ZXJyb3JSZWNlaXZlZCB8fCBhcHBlbmRQaXBlbGluZS0+bV9kZW11eC0+bnVtc3JjcGFkcyA+IDEp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgR1NUX0VSUk9SKCJBcHBlbmRQaXBlbGlu
ZSdzIGFwcHNpbmsgcmVjZWl2ZWQgRU9TLiBUaGlzIGlzIHVzdWFsbHkgY2F1c2VkIGJ5IGFuIGlu
dmFsaWQgaW5pdGlhbGl6YXRpb24gc2VnbWVudC4iKTsKLSAgICAgICAgYXBwZW5kUGlwZWxpbmUt
PmhhbmRsZUVycm9yQ29uZGl0aW9uRnJvbVN0cmVhbWluZ1RocmVhZCgpOwotICAgIH0pLCB0aGlz
KTsKIAogICAgIC8vIEFkZF9tYW55IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgYSByZWZlcmVuY2Uu
IFRoYXQncyB3aHkgd2UgdXNlZCBhbiBhc3NpZ25tZW50IGJlZm9yZS4KICAgICBnc3RfYmluX2Fk
ZF9tYW55KEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIG1fYXBwc3JjLmdldCgpLCBtX2RlbXV4
LmdldCgpLCBudWxscHRyKTsKQEAgLTI0OSw5ICsxOTIsNiBAQCBBcHBlbmRQaXBlbGluZTo6fkFw
cGVuZFBpcGVsaW5lKCkKICAgICAgICAgZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoKG1fYnVz
LmdldCgpKTsKICAgICB9CiAKLSAgICBpZiAobV9hcHBzcmMpCi0gICAgICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2FwcHNyYy5nZXQoKSwgdGhpcyk7Ci0KICAgICBp
ZiAobV9kZW11eCkgewogI2lmICFMT0dfRElTQUJMRUQKICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+
IGRlbXV4ZXJQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9kZW11
eC5nZXQoKSwgInNpbmsiKSk7CkBAIC0yNjEsMTcgKzIwMSwxNSBAQCBBcHBlbmRQaXBlbGluZTo6
fkFwcGVuZFBpcGVsaW5lKCkKICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9i
eV9kYXRhKG1fZGVtdXguZ2V0KCksIHRoaXMpOwogICAgIH0KIAotICAgIGlmIChtX2FwcHNpbmsp
IHsKLSAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IGFwcHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2Vs
ZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9hcHBzaW5rLmdldCgpLCAic2luayIpKTsKKyAgICBmb3Ig
KHN0ZDo6dW5pcXVlX3B0cjxUcmFjaz4mIHRyYWNrIDogbV90cmFja3MpIHsKKyAgICAgICAgR1Jl
ZlB0cjxHc3RQYWQ+IGFwcHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRp
Y19wYWQodHJhY2stPmFwcHNpbmsuZ2V0KCksICJzaW5rIikpOwogICAgICAgICBnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEoYXBwc2lua1BhZC5nZXQoKSwgdGhpcyk7Ci0gICAg
ICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2FwcHNpbmsuZ2V0KCks
IHRoaXMpOwotCisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YSh0
cmFjay0+YXBwc2luay5nZXQoKSwgdGhpcyk7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgICAgICBn
c3RfcGFkX3JlbW92ZV9wcm9iZShhcHBzaW5rUGFkLmdldCgpLCBtX2FwcHNpbmtEYXRhRW50ZXJp
bmdQYWRQcm9iZUluZm9ybWF0aW9uLnByb2JlSWQpOworICAgICAgICBnc3RfcGFkX3JlbW92ZV9w
cm9iZShhcHBzaW5rUGFkLmdldCgpLCB0cmFjay0+YXBwc2lua0RhdGFFbnRlcmluZ1BhZFByb2Jl
SW5mb3JtYXRpb24ucHJvYmVJZCk7CiAjZW5kaWYKLQogI2lmIEVOQUJMRShFTkNSWVBURURfTUVE
SUEpCi0gICAgICAgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlKGFwcHNpbmtQYWQuZ2V0KCksIG1fYXBw
c2lua1BhZEV2ZW50UHJvYmVJbmZvcm1hdGlvbi5wcm9iZUlkKTsKKyAgICAgICAgZ3N0X3BhZF9y
ZW1vdmVfcHJvYmUoYXBwc2lua1BhZC5nZXQoKSwgdHJhY2stPmFwcHNpbmtQYWRFdmVudFByb2Jl
SW5mb3JtYXRpb24ucHJvYmVJZCk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTM1MSw3MSArMjg5LDM5
IEBAIHZvaWQgQXBwZW5kUGlwZWxpbmU6OmhhbmRsZVN0YXRlQ2hhbmdlTWVzc2FnZShHc3RNZXNz
YWdlKiBtZXNzYWdlKQogICAgIH0KIH0KIAotZ2ludCBBcHBlbmRQaXBlbGluZTo6aWQoKQotewot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAobV9pZCkKLSAgICAgICAgcmV0
dXJuIG1faWQ7Ci0KLSAgICBzdGF0aWMgZ2ludCBzX3RvdGFsQXVkaW8gPSAwOwotICAgIHN0YXRp
YyBnaW50IHNfdG90YWxWaWRlbyA9IDA7Ci0gICAgc3RhdGljIGdpbnQgc190b3RhbFRleHQgPSAw
OwotCi0gICAgc3dpdGNoIChtX3N0cmVhbVR5cGUpIHsKLSAgICBjYXNlIEF1ZGlvOgotICAgICAg
ICBtX2lkID0gKytzX3RvdGFsQXVkaW87Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVmlkZW86
Ci0gICAgICAgIG1faWQgPSArK3NfdG90YWxWaWRlbzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBUZXh0OgotICAgICAgICBtX2lkID0gKytzX3RvdGFsVGV4dDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBVbmtub3duOgotICAgIGNhc2UgSW52YWxpZDoKLSAgICAgICAgR1NUX0VSUk9SKCJU
cnlpbmcgdG8gZ2V0IGlkIGZvciBhIHBpcGVsaW5lIG9mIFVua25vd24vSW52YWxpZCB0eXBlIik7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICBHU1RfREVCVUcoInN0cmVhbVR5cGU9JWQsIGlkPSVkIiwgc3RhdGljX2Nhc3Q8aW50Piht
X3N0cmVhbVR5cGUpLCBtX2lkKTsKLQotICAgIHJldHVybiBtX2lkOwotfQotCi12b2lkIEFwcGVu
ZFBpcGVsaW5lOjpwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKEdzdENhcHMqIGRlbXV4ZXJTcmNQYWRD
YXBzKQorc3RkOjp0dXBsZTxHUmVmUHRyPEdzdENhcHM+LCBBcHBlbmRQaXBlbGluZTo6U3RyZWFt
VHlwZSwgRmxvYXRTaXplPiBBcHBlbmRQaXBlbGluZTo6cGFyc2VEZW11eGVyU3JjUGFkQ2FwcyhH
c3RDYXBzKiBkZW11eGVyU3JjUGFkQ2FwcykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogCi0gICAgbV9kZW11eGVyU3JjUGFkQ2FwcyA9IGFkb3B0R1JlZihkZW11eGVyU3JjUGFkQ2Fw
cyk7Ci0gICAgbV9zdHJlYW1UeXBlID0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpV
bmtub3duOworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gcGFyc2VkQ2FwcyA9IEdSZWZQdHI8R3N0Q2Fw
cz4oZGVtdXhlclNyY1BhZENhcHMpOworICAgIFN0cmVhbVR5cGUgc3RyZWFtVHlwZSA9IFN0cmVh
bVR5cGU6OlVua25vd247CisgICAgRmxvYXRTaXplIHByZXNlbnRhdGlvblNpemUgPSBGbG9hdFNp
emUoKTsKIAotICAgIGNvbnN0IGNoYXIqIG9yaWdpbmFsTWVkaWFUeXBlID0gY2Fwc01lZGlhVHlw
ZShtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpKTsKKyAgICBjb25zdCBjaGFyKiBvcmlnaW5hbE1l
ZGlhVHlwZSA9IGNhcHNNZWRpYVR5cGUoZGVtdXhlclNyY1BhZENhcHMpOwogICAgIGF1dG8mIGdz
dFJlZ2lzdHJ5U2Nhbm5lciA9IEdTdHJlYW1lclJlZ2lzdHJ5U2Nhbm5lck1TRTo6c2luZ2xldG9u
KCk7CiAgICAgaWYgKCFnc3RSZWdpc3RyeVNjYW5uZXIuaXNDb2RlY1N1cHBvcnRlZChHU3RyZWFt
ZXJSZWdpc3RyeVNjYW5uZXI6OkNvbmZpZ3VyYXRpb246OkRlY29kaW5nLCBvcmlnaW5hbE1lZGlh
VHlwZSkpIHsKLSAgICAgICAgbV9wcmVzZW50YXRpb25TaXplID0gRmxvYXRTaXplKCk7Ci0gICAg
ICAgIG1fc3RyZWFtVHlwZSA9IE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6SW52YWxp
ZDsKLSAgICB9IGVsc2UgaWYgKGRvQ2Fwc0hhdmVUeXBlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0
KCksIEdTVF9WSURFT19DQVBTX1RZUEVfUFJFRklYKSkgewotICAgICAgICBtX3ByZXNlbnRhdGlv
blNpemUgPSBnZXRWaWRlb1Jlc29sdXRpb25Gcm9tQ2FwcyhtX2RlbXV4ZXJTcmNQYWRDYXBzLmdl
dCgpKS52YWx1ZV9vcihGbG9hdFNpemUoKSk7Ci0gICAgICAgIG1fc3RyZWFtVHlwZSA9IE1lZGlh
U291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VmlkZW87CisgICAgICAgIHN0cmVhbVR5cGUgPSBT
dHJlYW1UeXBlOjpJbnZhbGlkOworICAgIH0gZWxzZSBpZiAoZG9DYXBzSGF2ZVR5cGUoZGVtdXhl
clNyY1BhZENhcHMsIEdTVF9WSURFT19DQVBTX1RZUEVfUFJFRklYKSkgeworICAgICAgICBwcmVz
ZW50YXRpb25TaXplID0gZ2V0VmlkZW9SZXNvbHV0aW9uRnJvbUNhcHMoZGVtdXhlclNyY1BhZENh
cHMpLnZhbHVlX29yKEZsb2F0U2l6ZSgpKTsKKyAgICAgICAgc3RyZWFtVHlwZSA9IFN0cmVhbVR5
cGU6OlZpZGVvOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fcHJlc2VudGF0aW9uU2l6ZSA9IEZs
b2F0U2l6ZSgpOwotICAgICAgICBpZiAoZG9DYXBzSGF2ZVR5cGUobV9kZW11eGVyU3JjUGFkQ2Fw
cy5nZXQoKSwgR1NUX0FVRElPX0NBUFNfVFlQRV9QUkVGSVgpKQotICAgICAgICAgICAgbV9zdHJl
YW1UeXBlID0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpBdWRpbzsKLSAgICAgICAg
ZWxzZSBpZiAoZG9DYXBzSGF2ZVR5cGUobV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKSwgR1NUX1RF
WFRfQ0FQU19UWVBFX1BSRUZJWCkpCi0gICAgICAgICAgICBtX3N0cmVhbVR5cGUgPSBNZWRpYVNv
dXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlRleHQ7CisgICAgICAgIGlmIChkb0NhcHNIYXZlVHlw
ZShkZW11eGVyU3JjUGFkQ2FwcywgR1NUX0FVRElPX0NBUFNfVFlQRV9QUkVGSVgpKQorICAgICAg
ICAgICAgc3RyZWFtVHlwZSA9IFN0cmVhbVR5cGU6OkF1ZGlvOworICAgICAgICBlbHNlIGlmIChk
b0NhcHNIYXZlVHlwZShkZW11eGVyU3JjUGFkQ2FwcywgR1NUX1RFWFRfQ0FQU19UWVBFX1BSRUZJ
WCkpCisgICAgICAgICAgICBzdHJlYW1UeXBlID0gU3RyZWFtVHlwZTo6VGV4dDsKICAgICB9CisK
KyAgICByZXR1cm4geyBwYXJzZWRDYXBzLCBzdHJlYW1UeXBlLCBwcmVzZW50YXRpb25TaXplIH07
CiB9CiAKLXZvaWQgQXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtDYXBzQ2hhbmdlZCgpCit2b2lkIEFw
cGVuZFBpcGVsaW5lOjphcHBzaW5rQ2Fwc0NoYW5nZWQoVHJhY2smIHRyYWNrKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAKICAgICAvLyBDb25zdW1lIGFueSBwZW5kaW5nIHNhbXBs
ZXMgd2l0aCB0aGUgcHJldmlvdXMgY2Fwcy4KLSAgICBjb25zdW1lQXBwc2lua0F2YWlsYWJsZVNh
bXBsZXMoKTsKKyAgICBjb25zdW1lQXBwc2lua3NBdmFpbGFibGVTYW1wbGVzKCk7CiAKLSAgICBH
UmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFk
KG1fYXBwc2luay5nZXQoKSwgInNpbmsiKSk7CisgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFk
b3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCh0cmFjay5hcHBzaW5rLmdldCgpLCAi
c2luayIpKTsKICAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X3BhZF9n
ZXRfY3VycmVudF9jYXBzKHBhZC5nZXQoKSkpOwogCiAgICAgaWYgKCFjYXBzKQpAQCAtNDI0LDMy
ICszMzAsMzAgQEAgdm9pZCBBcHBlbmRQaXBlbGluZTo6YXBwc2lua0NhcHNDaGFuZ2VkKCkKICAg
ICAvLyBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgdGltZSB3ZSdyZSBwYXJzaW5nIGFuIGluaXRp
YWxpemF0aW9uIHNlZ21lbnQsIGZhaWwgaWYgdGhlIHRyYWNrCiAgICAgLy8gaGFzIGEgZGlmZmVy
ZW50IGNvZGVjIG9yIHR5cGUgKGUuZy4gaWYgd2Ugd2VyZSBwcmV2aW91c2x5IGRlbXV4aW5nIGFu
IGF1ZGlvIHN0cmVhbSBhbmQKICAgICAvLyBzb21lb25lIGFwcGVuZHMgYSB2aWRlbyBzdHJlYW0p
LgotICAgIGlmIChtX2FwcHNpbmtDYXBzICYmIGdfc3RyY21wMChjYXBzTWVkaWFUeXBlKGNhcHMu
Z2V0KCkpLCBjYXBzTWVkaWFUeXBlKG1fYXBwc2lua0NhcHMuZ2V0KCkpKSkgewotICAgICAgICBH
U1RfV0FSTklOR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlVzZXIgYXBwZW5kZWQgdHJhY2sg
bWV0YWRhdGEgd2l0aCB0eXBlICclcycgZm9yIGEgU291cmNlQnVmZmVyIHByZXZpb3VzbHkgaGFu
ZGxpbmcgJyVzJy4gRXJyb3Jpbmcgb3V0LiIsIGNhcHNNZWRpYVR5cGUoY2Fwcy5nZXQoKSksIGNh
cHNNZWRpYVR5cGUobV9hcHBzaW5rQ2Fwcy5nZXQoKSkpOworICAgIGlmICh0cmFjay5jYXBzICYm
IGdfc3RyY21wMChjYXBzTWVkaWFUeXBlKGNhcHMuZ2V0KCkpLCBjYXBzTWVkaWFUeXBlKHRyYWNr
LmNhcHMuZ2V0KCkpKSkgeworICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QobV9waXBlbGluZS5n
ZXQoKSwgIlRyYWNrIHJlY2VpdmVkIGluY29tcGF0aWJsZSBjYXBzLCByZWNlaXZlZCAnJXMnIGZv
ciBhIHRyYWNrIHByZXZpb3VzbHkgaGFuZGxpbmcgJyVzJy4gRXJyb3Jpbmcgb3V0LiIsIGNhcHNN
ZWRpYVR5cGUoY2Fwcy5nZXQoKSksIGNhcHNNZWRpYVR5cGUodHJhY2suY2Fwcy5nZXQoKSkpOwog
ICAgICAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGUuYXBwZW5kUGFyc2luZ0ZhaWxlZCgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGRvQ2Fwc0hhdmVUeXBlKGNhcHMuZ2V0KCks
IEdTVF9WSURFT19DQVBTX1RZUEVfUFJFRklYKSkgewogICAgICAgICBpZiAoYXV0byBzaXplID0g
Z2V0VmlkZW9SZXNvbHV0aW9uRnJvbUNhcHMoY2Fwcy5nZXQoKSkpCi0gICAgICAgICAgICBtX3By
ZXNlbnRhdGlvblNpemUgPSAqc2l6ZTsKKyAgICAgICAgICAgIHRyYWNrLnByZXNlbnRhdGlvblNp
emUgPSAqc2l6ZTsKICAgICB9CiAKLSAgICBpZiAobV9hcHBzaW5rQ2FwcyAhPSBjYXBzKSB7Ci0g
ICAgICAgIG1fYXBwc2lua0NhcHMgPSBXVEZNb3ZlKGNhcHMpOwotICAgICAgICBtX3BsYXllclBy
aXZhdGUtPnRyYWNrRGV0ZWN0ZWQoKnRoaXMsIG1fdHJhY2spOwotICAgIH0KKyAgICBpZiAodHJh
Y2suY2FwcyAhPSBjYXBzKQorICAgICAgICB0cmFjay5jYXBzID0gV1RGTW92ZShjYXBzKTsKIH0K
IAogdm9pZCBBcHBlbmRQaXBlbGluZTo6aGFuZGxlRW5kT2ZBcHBlbmQoKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0gICAgY29uc3VtZUFwcHNpbmtBdmFpbGFibGVTYW1wbGVzKCk7
CisgICAgY29uc3VtZUFwcHNpbmtzQXZhaWxhYmxlU2FtcGxlcygpOwogICAgIEdTVF9UUkFDRV9P
QkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIk5vdGlmeWluZyBTb3VyY2VCdWZmZXJQcml2YXRlIHRo
ZSBhcHBlbmQgaXMgY29tcGxldGUiKTsKICAgICBzb3VyY2VCdWZmZXJQcml2YXRlKCkuZGlkUmVj
ZWl2ZUFsbFBlbmRpbmdTYW1wbGVzKCk7CiB9CiAKLXZvaWQgQXBwZW5kUGlwZWxpbmU6OmFwcHNp
bmtOZXdTYW1wbGUoR1JlZlB0cjxHc3RTYW1wbGU+JiYgc2FtcGxlKQordm9pZCBBcHBlbmRQaXBl
bGluZTo6YXBwc2lua05ld1NhbXBsZShjb25zdCBUcmFjayYgdHJhY2ssIEdSZWZQdHI8R3N0U2Ft
cGxlPiYmIHNhbXBsZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC00NjQs
NyArMzY4LDcgQEAgdm9pZCBBcHBlbmRQaXBlbGluZTo6YXBwc2lua05ld1NhbXBsZShHUmVmUHRy
PEdzdFNhbXBsZT4mJiBzYW1wbGUpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRv
IG1lZGlhU2FtcGxlID0gTWVkaWFTYW1wbGVHU3RyZWFtZXI6OmNyZWF0ZShXVEZNb3ZlKHNhbXBs
ZSksIG1fcHJlc2VudGF0aW9uU2l6ZSwgdHJhY2tJZCgpKTsKKyAgICBhdXRvIG1lZGlhU2FtcGxl
ID0gTWVkaWFTYW1wbGVHU3RyZWFtZXI6OmNyZWF0ZShXVEZNb3ZlKHNhbXBsZSksIHRyYWNrLnBy
ZXNlbnRhdGlvblNpemUsIHRyYWNrLnRyYWNrSWQpOwogCiAgICAgR1NUX1RSQUNFKCJhcHBlbmQ6
IHRyYWNrSWQ9JXMgUFRTPSVzIERUUz0lcyBEVVI9JXMgcHJlc2VudGF0aW9uU2l6ZT0lLjBmeCUu
MGYiLAogICAgICAgICBtZWRpYVNhbXBsZS0+dHJhY2tJRCgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksCkBAIC00OTksNDUgKzQwMyw5NSBAQCB2b2lkIEFwcGVuZFBpcGVsaW5lOjpkaWRSZWNlaXZl
SW5pdGlhbGl6YXRpb25TZWdtZW50KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
Ci0gICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50IGlu
aXRpYWxpemF0aW9uU2VnbWVudDsKKyAgICBib29sIGlzRmlyc3RJbml0aWFsaXphdGlvblNlZ21l
bnQgPSAhbV9oYXNSZWNlaXZlZEZpcnN0SW5pdGlhbGl6YXRpb25TZWdtZW50OwogCi0gICAgR1NU
X0RFQlVHKCJOb3RpZnlpbmcgU291cmNlQnVmZmVyIGZvciB0cmFjayAlcyIsIChtX3RyYWNrKSA/
IG1fdHJhY2stPmlkKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSA6IG51bGxwdHIpOwotICAgIGlu
aXRpYWxpemF0aW9uU2VnbWVudC5kdXJhdGlvbiA9IG1faW5pdGlhbER1cmF0aW9uOworICAgIFNv
dXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudCBpbml0aWFsaXph
dGlvblNlZ21lbnQ7CiAKLSAgICBzd2l0Y2ggKG1fc3RyZWFtVHlwZSkgewotICAgIGNhc2UgQXVk
aW86IHsKLSAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25T
ZWdtZW50OjpBdWRpb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKLSAgICAgICAgaW5mby50cmFjayA9
IHN0YXRpY19jYXN0PEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyKj4obV90cmFjay5nZXQoKSk7
Ci0gICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBHU3RyZWFtZXJNZWRpYURlc2NyaXB0aW9uOjpj
cmVhdGUobV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKSk7Ci0gICAgICAgIGluaXRpYWxpemF0aW9u
U2VnbWVudC5hdWRpb1RyYWNrcy5hcHBlbmQoaW5mbyk7Ci0gICAgICAgIGJyZWFrOworICAgIGdp
bnQ2NCB0aW1lTGVuZ3RoID0gMDsKKyAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24o
bV9kZW11eC5nZXQoKSwgR1NUX0ZPUk1BVF9USU1FLCAmdGltZUxlbmd0aCkKKyAgICAgICAgJiYg
c3RhdGljX2Nhc3Q8Z3VpbnQ2ND4odGltZUxlbmd0aCkgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkK
KyAgICAgICAgaW5pdGlhbGl6YXRpb25TZWdtZW50LmR1cmF0aW9uID0gTWVkaWFUaW1lKEdTVF9U
SU1FX0FTX1VTRUNPTkRTKHRpbWVMZW5ndGgpLCBHX1VTRUNfUEVSX1NFQyk7CisgICAgZWxzZQor
ICAgICAgICBpbml0aWFsaXphdGlvblNlZ21lbnQuZHVyYXRpb24gPSBNZWRpYVRpbWU6OnBvc2l0
aXZlSW5maW5pdGVUaW1lKCk7CisKKyAgICBpZiAoaXNGaXJzdEluaXRpYWxpemF0aW9uU2VnbWVu
dCkgeworICAgICAgICAvLyBDcmVhdGUgYSBUcmFjayBvYmplY3QgcGVyIHBhZC4KKyAgICAgICAg
aW50IHRyYWNrSW5kZXggPSAwOworICAgICAgICBmb3IgKEdzdFBhZCogcGFkIDogR3N0SXRlcmF0
b3JBZGFwdG9yPEdzdFBhZD4oR1VuaXF1ZVB0cjxHc3RJdGVyYXRvcj4oZ3N0X2VsZW1lbnRfaXRl
cmF0ZV9zcmNfcGFkcyhtX2RlbXV4LmdldCgpKSkpKSB7CisgICAgICAgICAgICBhdXRvIFtjcmVh
dGVUcmFja1Jlc3VsdCwgdHJhY2tdID0gdHJ5Q3JlYXRlVHJhY2tGcm9tUGFkKHBhZCwgdHJhY2tJ
bmRleCk7CisgICAgICAgICAgICBpZiAoY3JlYXRlVHJhY2tSZXN1bHQgPT0gQ3JlYXRlVHJhY2tS
ZXN1bHQ6OkFwcGVuZFBhcnNpbmdGYWlsZWQpIHsKKyAgICAgICAgICAgICAgICAvLyBhcHBlbmRQ
YXJzaW5nRmFpbGVkKCkgd2lsbCBpbW1lZGlhdGVseSBjYXVzZSBhIHJlc2V0UGFyc2VyU3RhdGUo
KSB3aGljaCB3aWxsIHN0b3AgZGVtdXhpbmcsIHRoZW4gdGhlCisgICAgICAgICAgICAgICAgLy8g
QXBwZW5kUGlwZWxpbmUgd2lsbCBiZSBkZXN0cm95ZWQuCisgICAgICAgICAgICAgICAgbV9zb3Vy
Y2VCdWZmZXJQcml2YXRlLmFwcGVuZFBhcnNpbmdGYWlsZWQoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodHJhY2spCisgICAgICAgICAg
ICAgICAgbGlua1BhZFdpdGhUcmFjayhwYWQsICp0cmFjayk7CisgICAgICAgICAgICB0cmFja0lu
ZGV4Kys7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBMaW5rIHBhZHMgdG8g
ZXhpc3RpbmcgVHJhY2sgb2JqZWN0cyB0aGF0IGRvbid0IGhhdmUgYSBsaW5rZWQgcGFkIHlldC4K
KyAgICAgICAgdW5zaWduZWQgY291bnRQYWRzID0gMDsKKyAgICAgICAgZm9yIChHc3RQYWQqIHBh
ZCA6IEdzdEl0ZXJhdG9yQWRhcHRvcjxHc3RQYWQ+KEdVbmlxdWVQdHI8R3N0SXRlcmF0b3I+KGdz
dF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMobV9kZW11eC5nZXQoKSkpKSkgeworICAgICAgICAg
ICAgY291bnRQYWRzKys7CisgICAgICAgICAgICBUcmFjayogdHJhY2sgPSB0cnlNYXRjaFBhZFRv
RXhpc3RpbmdUcmFjayhwYWQpOworICAgICAgICAgICAgaWYgKCF0cmFjaykgeworICAgICAgICAg
ICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChwaXBlbGluZSgpLCAiQ2FuJ3QgbWF0Y2ggcGFkIHRv
IGV4aXN0aW5nIHRyYWNrcyBpbiB0aGUgQXBwZW5kUGlwZWxpbmU6ICUiIEdTVF9QVFJfRk9STUFU
LCBwYWQpOworICAgICAgICAgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS5hcHBlbmRQYXJz
aW5nRmFpbGVkKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbGlua1BhZFdpdGhUcmFjayhwYWQsICp0cmFjayk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGNvdW50UGFkcyAhPSBtX3RyYWNrcy5zaXplKCkpIHsKKyAgICAgICAgICAgIEdTVF9X
QVJOSU5HX09CSkVDVChwaXBlbGluZSgpLCAiTnVtYmVyIG9mIHBhZHMgKCV1KSBkb2Vzbid0IG1h
dGNoIG51bWJlciBvZiB0cmFja3MgKCV6dSkuIiwgY291bnRQYWRzLCBtX3RyYWNrcy5zaXplKCkp
OworICAgICAgICAgICAgbV9zb3VyY2VCdWZmZXJQcml2YXRlLmFwcGVuZFBhcnNpbmdGYWlsZWQo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KLSAgICBjYXNlIFZpZGVv
OiB7Ci0gICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2Vn
bWVudDo6VmlkZW9UcmFja0luZm9ybWF0aW9uIGluZm87Ci0gICAgICAgIGluZm8udHJhY2sgPSBz
dGF0aWNfY2FzdDxWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcio+KG1fdHJhY2suZ2V0KCkpOwot
ICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gR1N0cmVhbWVyTWVkaWFEZXNjcmlwdGlvbjo6Y3Jl
YXRlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCkpOwotICAgICAgICBpbml0aWFsaXphdGlvblNl
Z21lbnQudmlkZW9UcmFja3MuYXBwZW5kKGluZm8pOwotICAgICAgICBicmVhazsKKworICAgIGZv
ciAoc3RkOjp1bmlxdWVfcHRyPFRyYWNrPiYgdHJhY2sgOiBtX3RyYWNrcykgeworICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJBZGRpbmcgdHJhY2sgdG8gaW5pdGlhbGl6YXRp
b24gd2l0aCBzZWdtZW50IHR5cGUgJXMsIGlkICVzLiIsIHN0cmVhbVR5cGVUb1N0cmluZyh0cmFj
ay0+c3RyZWFtVHlwZSksIHRyYWNrLT50cmFja0lkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICBzd2l0Y2ggKHRyYWNrLT5zdHJlYW1UeXBlKSB7CisgICAgICAgIGNhc2UgQXVkaW86
IHsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFjay0+d2ViS2l0VHJhY2spOworICAgICAgICAgICAg
U291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50OjpBdWRpb1Ry
YWNrSW5mb3JtYXRpb24gaW5mbzsKKyAgICAgICAgICAgIGluZm8udHJhY2sgPSBzdGF0aWNfY2Fz
dDxBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcio+KHRyYWNrLT53ZWJLaXRUcmFjay5nZXQoKSk7
CisgICAgICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gR1N0cmVhbWVyTWVkaWFEZXNjcmlwdGlv
bjo6Y3JlYXRlKHRyYWNrLT5jYXBzLmdldCgpKTsKKyAgICAgICAgICAgIGluaXRpYWxpemF0aW9u
U2VnbWVudC5hdWRpb1RyYWNrcy5hcHBlbmQoaW5mbyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIFZpZGVvOiB7CisgICAgICAgICAgICBBU1NFUlQodHJhY2st
PndlYktpdFRyYWNrKTsKKyAgICAgICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6Oklu
aXRpYWxpemF0aW9uU2VnbWVudDo6VmlkZW9UcmFja0luZm9ybWF0aW9uIGluZm87CisgICAgICAg
ICAgICBpbmZvLnRyYWNrID0gc3RhdGljX2Nhc3Q8VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIq
Pih0cmFjay0+d2ViS2l0VHJhY2suZ2V0KCkpOworICAgICAgICAgICAgaW5mby5kZXNjcmlwdGlv
biA9IEdTdHJlYW1lck1lZGlhRGVzY3JpcHRpb246OmNyZWF0ZSh0cmFjay0+Y2Fwcy5nZXQoKSk7
CisgICAgICAgICAgICBpbml0aWFsaXphdGlvblNlZ21lbnQudmlkZW9UcmFja3MuYXBwZW5kKGlu
Zm8pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIEdTVF9FUlJPUigiVW5zdXBwb3J0ZWQgc3RyZWFtIHR5cGUgb3IgY29kZWMiKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIEdTVF9FUlJPUigiVW5zdXBwb3J0ZWQgc3RyZWFtIHR5cGUgb3IgY29kZWMiKTsKLSAgICAg
ICAgYnJlYWs7CisKKyAgICBpZiAoaXNGaXJzdEluaXRpYWxpemF0aW9uU2VnbWVudCkgeworICAg
ICAgICBmb3IgKHN0ZDo6dW5pcXVlX3B0cjxUcmFjaz4mIHRyYWNrIDogbV90cmFja3MpIHsKKyAg
ICAgICAgICAgIGlmICh0cmFjay0+c3RyZWFtVHlwZSA9PSBTdHJlYW1UeXBlOjpWaWRlbykgewor
ICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlNldHRpbmcgaW5p
dGlhbCB2aWRlbyBzaXplIHRvIHRoYXQgb2YgdHJhY2sgd2l0aCBpZCAnJXMnLCAlZ3glZy4iLAor
ICAgICAgICAgICAgICAgICAgICB0cmFjay0+dHJhY2tJZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
LCBzdGF0aWNfY2FzdDxkb3VibGU+KHRyYWNrLT5wcmVzZW50YXRpb25TaXplLndpZHRoKCkpLCBz
dGF0aWNfY2FzdDxkb3VibGU+KHRyYWNrLT5wcmVzZW50YXRpb25TaXplLmhlaWdodCgpKSk7Cisg
ICAgICAgICAgICAgICAgbV9wbGF5ZXJQcml2YXRlLT5zZXRJbml0aWFsVmlkZW9TaXplKHRyYWNr
LT5wcmVzZW50YXRpb25TaXplKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQogICAgIH0KIAorICAgIG1faGFzUmVjZWl2ZWRGaXJzdEluaXRpYWxpemF0
aW9uU2VnbWVudCA9IHRydWU7CisgICAgR1NUX0RFQlVHKCJOb3RpZnlpbmcgU291cmNlQnVmZmVy
IG9mIGluaXRpYWxpemF0aW9uIHNlZ2VtZW50LiIpOworICAgIEdTVF9ERUJVR19CSU5fVE9fRE9U
X0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhf
U0hPV19BTEwsICJhcHBlbmQtcGlwZWxpbmUtcmVjZWl2ZWQtaW5pdC1zZWdtZW50Iik7CiAgICAg
bV9zb3VyY2VCdWZmZXJQcml2YXRlLmRpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoV1RG
TW92ZShpbml0aWFsaXphdGlvblNlZ21lbnQpLCBbXSgpIHsgfSk7CiB9CiAKLUF0b21TdHJpbmcg
QXBwZW5kUGlwZWxpbmU6OnRyYWNrSWQoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0KLSAgICBpZiAoIW1fdHJhY2spCi0gICAgICAgIHJldHVybiBBdG9tU3RyaW5nKCk7Ci0KLSAg
ICByZXR1cm4gbV90cmFjay0+aWQoKTsKLX0KLQotdm9pZCBBcHBlbmRQaXBlbGluZTo6Y29uc3Vt
ZUFwcHNpbmtBdmFpbGFibGVTYW1wbGVzKCkKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmNvbnN1bWVB
cHBzaW5rc0F2YWlsYWJsZVNhbXBsZXMoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAKQEAgLTU0Nyw5ICs1MDEsMTEgQEAgdm9pZCBBcHBlbmRQaXBlbGluZTo6Y29uc3VtZUFwcHNp
bmtBdmFpbGFibGVTYW1wbGVzKCkKICAgICAvLyBCYXRjaCBkdXJhdGlvbiBjaGFuZ2VzIHNvIHRo
YXQgaWYgd2UgcGljayAxMDAgb2Ygc3VjaCBzYW1wbGVzIHdlIGRvbid0IGhhdmUgdG8gcnVuIDEw
MCB0aW1lcwogICAgIC8vIGxheW91dCBmb3IgdGhlIHZpZGVvIGNvbnRyb2xzLCBidXQgb25seSBv
bmNlLgogICAgIG1fcGxheWVyUHJpdmF0ZS0+YmxvY2tEdXJhdGlvbkNoYW5nZXMoKTsKLSAgICB3
aGlsZSAoKHNhbXBsZSA9IGFkb3B0R1JlZihnc3RfYXBwX3NpbmtfdHJ5X3B1bGxfc2FtcGxlKEdT
VF9BUFBfU0lOSyhtX2FwcHNpbmsuZ2V0KCkpLCAwKSkpKSB7Ci0gICAgICAgIGFwcHNpbmtOZXdT
YW1wbGUoV1RGTW92ZShzYW1wbGUpKTsKLSAgICAgICAgYmF0Y2hlZFNhbXBsZUNvdW50Kys7Cisg
ICAgZm9yIChzdGQ6OnVuaXF1ZV9wdHI8VHJhY2s+JiB0cmFjayA6IG1fdHJhY2tzKSB7CisgICAg
ICAgIHdoaWxlICgoc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lua190cnlfcHVsbF9zYW1w
bGUoR1NUX0FQUF9TSU5LKHRyYWNrLT5hcHBzaW5rLmdldCgpKSwgMCkpKSkgeworICAgICAgICAg
ICAgYXBwc2lua05ld1NhbXBsZSgqdHJhY2ssIFdURk1vdmUoc2FtcGxlKSk7CisgICAgICAgICAg
ICBiYXRjaGVkU2FtcGxlQ291bnQrKzsKKyAgICAgICAgfQogICAgIH0KICAgICBtX3BsYXllclBy
aXZhdGUtPnVuYmxvY2tEdXJhdGlvbkNoYW5nZXMoKTsKIApAQCAtNTczLDkgKzUyOSw2IEBAIHZv
aWQgQXBwZW5kUGlwZWxpbmU6OnJlc2V0UGFyc2VyU3RhdGUoKQogICAgIC8vIFJlc2V0IHRoZSBz
dGF0ZSBvZiBhbGwgZWxlbWVudHMgaW4gdGhlIHBpcGVsaW5lLgogICAgIGFzc2VydGVkRWxlbWVu
dFNldFN0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9SRUFEWSk7CiAKLSAgICAvLyBU
aGUgcGFyc2VyIGlzIHRlYXIgZG93biBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGRlbXV4ZXIgaXMg
cmVzZXQgKHNlZSBkaXNjb25uZWN0RGVtdXhlclNyY1BhZEZyb21BcHBzaW5rRnJvbUFueVRocmVh
ZCgpKS4KLSAgICBBU1NFUlQoIW1fcGFyc2VyKTsKLQogICAgIC8vIFNldCB0aGUgcGlwZWxpbmUg
dG8gUExBWUlORyBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGFnYWluLgogICAgIGFzc2VydGVkRWxl
bWVudFNldFN0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9QTEFZSU5HKTsKIApAQCAt
NjQyLDIwICs1OTUsMTggQEAgdm9pZCBBcHBlbmRQaXBlbGluZTo6aGFuZGxlQXBwc2lua05ld1Nh
bXBsZUZyb21TdHJlYW1pbmdUaHJlYWQoR3N0RWxlbWVudCopCiAgICAgICAgIEdTVF9UUkFDRSgi
UG9zdGluZyBhcHBzaW5rLW5ldy1zYW1wbGUgdGFzayB0byB0aGUgbWFpbiB0aHJlYWQiKTsKICAg
ICAgICAgbV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXNdKCkgewogICAgICAgICAgICAgbV93
YXNCdXNBbHJlYWR5Tm90aWZpZWRPZkF2YWlsYWJsZVNhbXBsZXMuY2xlYXIoKTsKLSAgICAgICAg
ICAgIGNvbnN1bWVBcHBzaW5rQXZhaWxhYmxlU2FtcGxlcygpOworICAgICAgICAgICAgY29uc3Vt
ZUFwcHNpbmtzQXZhaWxhYmxlU2FtcGxlcygpOwogICAgICAgICB9KTsKICAgICB9CiB9CiAKIHN0
YXRpYyBHUmVmUHRyPEdzdEVsZW1lbnQ+Ci1jcmVhdGVPcHRpb25hbFBhcnNlckZvckZvcm1hdChH
c3RQYWQqIGRlbXV4ZXJTcmNQYWQpCitjcmVhdGVPcHRpb25hbFBhcnNlckZvckZvcm1hdChjb25z
dCBBdG9tU3RyaW5nJiB0cmFja0lkLCBjb25zdCBHc3RDYXBzKiBjYXBzKQogewotICAgIEdSZWZQ
dHI8R3N0Q2Fwcz4gcGFkQ2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMo
ZGVtdXhlclNyY1BhZCkpOwotICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X2NhcHNf
Z2V0X3N0cnVjdHVyZShwYWRDYXBzLmdldCgpLCAwKTsKKyAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2FwcywgMCk7CiAgICAgY29uc3QgY2hhciog
bWVkaWFUeXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZShzdHJ1Y3R1cmUpOwogCi0gICAgR1Vu
aXF1ZVB0cjxjaGFyPiBkZW11eGVyUGFkTmFtZShnc3RfcGFkX2dldF9uYW1lKGRlbXV4ZXJTcmNQ
YWQpKTsKLSAgICBHVW5pcXVlUHRyPGNoYXI+IHBhcnNlck5hbWUoZ19zdHJkdXBfcHJpbnRmKCIl
c19wYXJzZXIiLCBkZW11eGVyUGFkTmFtZS5nZXQoKSkpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4g
cGFyc2VyTmFtZShnX3N0cmR1cF9wcmludGYoIiVzX3BhcnNlciIsIHRyYWNrSWQuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSkpOwogCiAgICAgaWYgKCFnX3N0cmNtcDAobWVkaWFUeXBlLCAiYXVkaW8v
eC1vcHVzIikpIHsKICAgICAgICAgR3N0RWxlbWVudCogb3B1c3BhcnNlID0gbWFrZUdTdHJlYW1l
ckVsZW1lbnQoIm9wdXNwYXJzZSIsIHBhcnNlck5hbWUuZ2V0KCkpOwpAQCAtNjY5LDIyMiArNjIw
LDIyOSBAQCBjcmVhdGVPcHRpb25hbFBhcnNlckZvckZvcm1hdChHc3RQYWQqIGRlbXV4ZXJTcmNQ
YWQpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgQXBwZW5kUGlwZWxpbmU6OmNvbm5l
Y3REZW11eGVyU3JjUGFkVG9BcHBzaW5rRnJvbVN0cmVhbWluZ1RocmVhZChHc3RQYWQqIGRlbXV4
ZXJTcmNQYWQpCitBdG9tU3RyaW5nIEFwcGVuZFBpcGVsaW5lOjpnZW5lcmF0ZVRyYWNrSWQoU3Ry
ZWFtVHlwZSBzdHJlYW1UeXBlLCBpbnQgcGFkSW5kZXgpCiB7Ci0gICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7Ci0KLSAgICBHU1RfREVCVUcoImNvbm5lY3RpbmcgdG8gYXBwc2luayIpOwotCi0g
ICAgaWYgKG1fZGVtdXgtPm51bXNyY3BhZHMgPiAxKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HKCJP
bmx5IG9uZSBzdHJlYW0gcGVyIFNvdXJjZUJ1ZmZlciBpcyBhbGxvd2VkISBJZ25vcmluZyBzdHJl
YW0gJWQgYnkgYWRkaW5nIGEgYmxhY2sgaG9sZSBwcm9iZS4iLCBtX2RlbXV4LT5udW1zcmNwYWRz
KTsKLSAgICAgICAgZ3Vsb25nIHByb2JlSWQgPSBnc3RfcGFkX2FkZF9wcm9iZShkZW11eGVyU3Jj
UGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSLCByZWludGVycHJldF9jYXN0PEdzdFBhZFBy
b2JlQ2FsbGJhY2s+KGFwcGVuZFBpcGVsaW5lRGVtdXhlckJsYWNrSG9sZVBhZFByb2JlKSwgbnVs
bHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGRlbXV4
ZXJTcmNQYWQpLCAiYmxhY2tIb2xlUHJvYmVJZCIsIEdVTE9OR19UT19QT0lOVEVSKHByb2JlSWQp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdSZWZQdHI8R3N0UGFkPiBhcHBzaW5r
U2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2FwcHNpbmsu
Z2V0KCksICJzaW5rIikpOwotCi0gICAgLy8gT25seSBvbmUgc3RyZWFtIHBlciBkZW11eGVyIGlz
IHN1cHBvcnRlZC4KLSAgICBBU1NFUlQoIWdzdF9wYWRfaXNfbGlua2VkKGFwcHNpbmtTaW5rUGFk
LmdldCgpKSk7Ci0KLSAgICBnaW50NjQgdGltZUxlbmd0aCA9IDA7Ci0gICAgaWYgKGdzdF9lbGVt
ZW50X3F1ZXJ5X2R1cmF0aW9uKG1fZGVtdXguZ2V0KCksIEdTVF9GT1JNQVRfVElNRSwgJnRpbWVM
ZW5ndGgpCi0gICAgICAgICYmIHN0YXRpY19jYXN0PGd1aW50NjQ+KHRpbWVMZW5ndGgpICE9IEdT
VF9DTE9DS19USU1FX05PTkUpCi0gICAgICAgIG1faW5pdGlhbER1cmF0aW9uID0gTWVkaWFUaW1l
KEdTVF9USU1FX0FTX1VTRUNPTkRTKHRpbWVMZW5ndGgpLCBHX1VTRUNfUEVSX1NFQyk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2luaXRpYWxEdXJhdGlvbiA9IE1lZGlhVGltZTo6cG9zaXRpdmVJbmZp
bml0ZVRpbWUoKTsKLQotICAgIEdTVF9ERUJVRygiUmVxdWVzdGluZyBkZW11eGVyLWNvbm5lY3Qt
dG8tYXBwc2luayB0byBtYWluIHRocmVhZCIpOwotICAgIGF1dG8gcmVzcG9uc2UgPSBtX3Rhc2tR
dWV1ZS5lbnF1ZXVlVGFza0FuZFdhaXQ8QWJvcnRhYmxlVGFza1F1ZXVlOjpWb2lkPihbdGhpcywg
ZGVtdXhlclNyY1BhZF0oKSB7Ci0gICAgICAgIGNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5r
KGRlbXV4ZXJTcmNQYWQpOwotICAgICAgICByZXR1cm4gQWJvcnRhYmxlVGFza1F1ZXVlOjpWb2lk
KCk7Ci0gICAgfSk7Ci0gICAgaWYgKCFyZXNwb25zZSkgewotICAgICAgICAvLyBUaGUgQXBwZW5k
UGlwZWxpbmUgaGFzIGJlZW4gZGVzdHJveWVkIG9yIGFib3J0ZWQgYmVmb3JlIHdlIHJlY2VpdmVk
IGEgcmVzcG9uc2UuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBNdXN0IGJlIGRv
bmUgaW4gdGhlIHRocmVhZCB3ZSB3ZXJlIGNhbGxlZCBmcm9tICh1c3VhbGx5IHN0cmVhbWluZyB0
aHJlYWQpLgotICAgIGJvb2wgaXNEYXRhID0gKG1fc3RyZWFtVHlwZSA9PSBNZWRpYVNvdXJjZVN0
cmVhbVR5cGVHU3RyZWFtZXI6OkF1ZGlvKQotICAgICAgICB8fCAobV9zdHJlYW1UeXBlID09IE1l
ZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VmlkZW8pCi0gICAgICAgIHx8IChtX3N0cmVh
bVR5cGUgPT0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpUZXh0KTsKLQotICAgIGlm
IChpc0RhdGEpIHsKLSAgICAgICAgR1JlZlB0cjxHc3RPYmplY3Q+IHBhcmVudCA9IGFkb3B0R1Jl
Zihnc3RfZWxlbWVudF9nZXRfcGFyZW50KG1fYXBwc2luay5nZXQoKSkpOwotICAgICAgICBpZiAo
IXBhcmVudCkKLSAgICAgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4obV9waXBlbGluZS5nZXQo
KSksIG1fYXBwc2luay5nZXQoKSk7Ci0KLSAgICAgICAgLy8gQ3VycmVudCBoZWFkIG9mIHRoZSBw
aXBlbGluZSBiZWluZyBidWlsdC4KLSAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IGN1cnJlbnRTcmNQ
YWQgPSBkZW11eGVyU3JjUGFkOwotCi0gICAgICAgIC8vIFNvbWUgYXVkaW8gZmlsZXMgdW5oZWxw
ZnVsbHkgb21pdCB0aGUgZHVyYXRpb24gb2YgZnJhbWVzIGluIHRoZSBjb250YWluZXIuIFdlIG5l
ZWQgdG8gcGFyc2UKLSAgICAgICAgLy8gdGhlIGNvbnRhaW5lZCBhdWRpbyBzdHJlYW1zIGluIG9y
ZGVyIHRvIGtub3cgdGhlIGR1cmF0aW9uIG9mIHRoZSBmcmFtZXMuCi0gICAgICAgIC8vIFRoaXMg
aXMga25vd24gdG8gYmUgYW4gaXNzdWUgd2l0aCBZb3VUdWJlIFdlYk0gZmlsZXMgY29udGFpbmlu
ZyBPcHVzIGF1ZGlvIGFzIG9mIFlUVFYyMDE4LgotICAgICAgICBtX3BhcnNlciA9IGNyZWF0ZU9w
dGlvbmFsUGFyc2VyRm9yRm9ybWF0KGN1cnJlbnRTcmNQYWQuZ2V0KCkpOwotICAgICAgICBpZiAo
bV9wYXJzZXIpIHsKLSAgICAgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4obV9waXBlbGluZS5n
ZXQoKSksIG1fcGFyc2VyLmdldCgpKTsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3Rh
dGVfd2l0aF9wYXJlbnQobV9wYXJzZXIuZ2V0KCkpOwotCi0gICAgICAgICAgICBHUmVmUHRyPEdz
dFBhZD4gcGFyc2VyU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3Bh
ZChtX3BhcnNlci5nZXQoKSwgInNpbmsiKSk7Ci0gICAgICAgICAgICBHUmVmUHRyPEdzdFBhZD4g
cGFyc2VyU3JjUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fcGFy
c2VyLmdldCgpLCAic3JjIikpOwotCi0gICAgICAgICAgICBnc3RfcGFkX2xpbmsoY3VycmVudFNy
Y1BhZC5nZXQoKSwgcGFyc2VyU2lua1BhZC5nZXQoKSk7Ci0gICAgICAgICAgICBjdXJyZW50U3Jj
UGFkID0gcGFyc2VyU3JjUGFkOwotICAgICAgICB9Ci0KLSAgICAgICAgZ3N0X3BhZF9saW5rKGN1
cnJlbnRTcmNQYWQuZ2V0KCksIGFwcHNpbmtTaW5rUGFkLmdldCgpKTsKLQotICAgICAgICBnc3Rf
ZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KG1fYXBwc2luay5nZXQoKSk7Ci0KLSAgICAg
ICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5n
ZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgIndlYmtpdC1hZnRlci1saW5rIik7Cisg
ICAgc3dpdGNoIChzdHJlYW1UeXBlKSB7CisgICAgY2FzZSBBdWRpbzoKKyAgICAgICAgcmV0dXJu
IG1ha2VTdHJpbmcoIkEiLCBwYWRJbmRleCk7CisgICAgY2FzZSBWaWRlbzoKKyAgICAgICAgcmV0
dXJuIG1ha2VTdHJpbmcoIlYiLCBwYWRJbmRleCk7CisgICAgY2FzZSBUZXh0OgorICAgICAgICBy
ZXR1cm4gbWFrZVN0cmluZygiVCIsIHBhZEluZGV4KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gbWFrZVN0cmluZygiTyIsIHBhZEluZGV4KTsKICAgICB9CiB9CiAKLXZvaWQgQXBwZW5k
UGlwZWxpbmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rKEdzdFBhZCogZGVtdXhlclNy
Y1BhZCkKK3N0ZDo6cGFpcjxBcHBlbmRQaXBlbGluZTo6Q3JlYXRlVHJhY2tSZXN1bHQsIEFwcGVu
ZFBpcGVsaW5lOjpUcmFjayo+IEFwcGVuZFBpcGVsaW5lOjp0cnlDcmVhdGVUcmFja0Zyb21QYWQo
R3N0UGFkKiBkZW11eGVyU3JjUGFkLCBpbnQgdHJhY2tJbmRleCkKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIEdTVF9ERUJVRygiQ29ubmVjdGluZyB0byBhcHBzaW5rIik7Cisg
ICAgQVNTRVJUKCFtX2hhc1JlY2VpdmVkRmlyc3RJbml0aWFsaXphdGlvblNlZ21lbnQpOworICAg
IEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkNyZWF0aW5nIFRyYWNrIG9iamVjdCBmb3Ig
cGFkICUiIEdTVF9QVFJfRk9STUFULCBkZW11eGVyU3JjUGFkKTsKIAogICAgIGNvbnN0IFN0cmlu
ZyYgdHlwZSA9IG1fc291cmNlQnVmZmVyUHJpdmF0ZS50eXBlKCkuY29udGFpbmVyVHlwZSgpOwog
ICAgIGlmICh0eXBlLmVuZHNXaXRoKCJ3ZWJtIikpCiAgICAgICAgIGdzdF9wYWRfYWRkX3Byb2Jl
KGRlbXV4ZXJTcmNQYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNLCBtYXRy
b3NrYWRlbXV4Rm9yY2VTZWdtZW50U3RhcnRUb0VxdWFsWmVybywgbnVsbHB0ciwgbnVsbHB0cik7
CiAKLSAgICBHUmVmUHRyPEdzdFBhZD4gc2lua1NpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1l
bnRfZ2V0X3N0YXRpY19wYWQobV9hcHBzaW5rLmdldCgpLCAic2luayIpKTsKLQotICAgIC8vIE9u
bHkgb25lIHN0cmVhbSBwZXIgZGVtdXhlciBpcyBzdXBwb3J0ZWQuCi0gICAgQVNTRVJUKCFnc3Rf
cGFkX2lzX2xpbmtlZChzaW5rU2lua1BhZC5nZXQoKSkpOwotCi0gICAgLy8gQXMgaXQgaXMgbm93
LCByZXNldFBhcnNlclN0YXRlKCkgd2lsbCBjYXVzZSB0aGUgcGFkcyB0byBiZSBkaXNjb25uZWN0
ZWQsIHNvIHRoZXkgd2lsbCBsYXRlciBiZSByZS1hZGRlZCBvbiB0aGUgbmV4dCBpbml0aWFsaXph
dGlvbiBzZWdtZW50LgotCi0gICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdz
dF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyhHU1RfUEFEKGRlbXV4ZXJTcmNQYWQpKSk7Ci0KKyAgICBh
dXRvIFtwYXJzZWRDYXBzLCBzdHJlYW1UeXBlLCBwcmVzZW50YXRpb25TaXplXSA9IHBhcnNlRGVt
dXhlclNyY1BhZENhcHMoYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyhkZW11eGVy
U3JjUGFkKSkuZ2V0KCkpOwogI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKICAgICB7Ci0g
ICAgICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHN0cmNhcHMoZ3N0X2NhcHNfdG9fc3RyaW5nKGNhcHMu
Z2V0KCkpKTsKKyAgICAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gc3RyY2Fwcyhnc3RfY2Fwc190b19z
dHJpbmcocGFyc2VkQ2Fwcy5nZXQoKSkpOwogICAgICAgICBHU1RfREVCVUcoIiVzIiwgc3RyY2Fw
cy5nZXQoKSk7CiAgICAgfQogI2VuZGlmCiAKLSAgICBwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKGdz
dF9jYXBzX3JlZihjYXBzLmdldCgpKSk7CisgICAgaWYgKHN0cmVhbVR5cGUgPT0gU3RyZWFtVHlw
ZTo6SW52YWxpZCkgeworICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QobV9waXBlbGluZS5nZXQo
KSwgIlVuc3VwcG9ydGVkIHRyYWNrIGNvZGVjOiAlIiBHU1RfUFRSX0ZPUk1BVCwgcGFyc2VkQ2Fw
cy5nZXQoKSk7CisgICAgICAgIC8vIDMuNS43IEluaXRpYWxpemF0aW9uIFNlZ21lbnQgUmVjZWl2
ZWQKKyAgICAgICAgLy8gNS4xLiBJZiB0aGUgaW5pdGlhbGl6YXRpb24gc2VnbWVudCBjb250YWlu
cyB0cmFja3Mgd2l0aCBjb2RlY3MgdGhlIHVzZXIgYWdlbnQgZG9lcyBub3Qgc3VwcG9ydCwgdGhl
biBydW4gdGhlCisgICAgICAgIC8vIGFwcGVuZCBlcnJvciBhbGdvcml0aG0gYW5kIGFib3J0IHRo
ZXNlIHN0ZXBzLgorICAgICAgICByZXR1cm4geyBDcmVhdGVUcmFja1Jlc3VsdDo6QXBwZW5kUGFy
c2luZ0ZhaWxlZCwgbnVsbHB0ciB9OworICAgIH0KKyAgICBpZiAoc3RyZWFtVHlwZSA9PSBTdHJl
YW1UeXBlOjpVbmtub3duKSB7CisgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChwaXBlbGluZSgp
LCAiUGFkICclcycgd2l0aCBwYXJzZWQgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCAiIGhhcyBhbiB1
bmtub3duIHR5cGUsIHdpbGwgYmUgY29ubmVjdGVkIHRvIGEgYmxhY2sgaG9sZSBwcm9iZS4iLCBH
U1RfUEFEX05BTUUoZGVtdXhlclNyY1BhZCksIHBhcnNlZENhcHMuZ2V0KCkpOworICAgICAgICBn
c3RfcGFkX2FkZF9wcm9iZShkZW11eGVyU3JjUGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVS
LCByZWludGVycHJldF9jYXN0PEdzdFBhZFByb2JlQ2FsbGJhY2s+KGFwcGVuZFBpcGVsaW5lRGVt
dXhlckJsYWNrSG9sZVBhZFByb2JlKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIHJldHVy
biB7IENyZWF0ZVRyYWNrUmVzdWx0OjpUcmFja0lnbm9yZWQsIG51bGxwdHIgfTsKKyAgICB9Cisg
ICAgQXRvbVN0cmluZyB0cmFja0lkID0gZ2VuZXJhdGVUcmFja0lkKHN0cmVhbVR5cGUsIHRyYWNr
SW5kZXgpOworCisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiQ3JlYXRpbmcgbmV3
IEFwcGVuZFBpcGVsaW5lOjpUcmFjayB3aXRoIGlkICclcyciLCB0cmFja0lkLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOworICAgIHNpemVfdCBuZXdUcmFja0luZGV4ID0gbV90cmFja3Muc2l6ZSgp
OworICAgIG1fdHJhY2tzLmFwcGVuZChXVEY6Om1ha2VVbmlxdWU8VHJhY2s+KHRyYWNrSWQsIHN0
cmVhbVR5cGUsIHBhcnNlZENhcHMsIHByZXNlbnRhdGlvblNpemUpKTsKKyAgICBUcmFjayYgdHJh
Y2sgPSAqbV90cmFja3MuYXQobmV3VHJhY2tJbmRleCk7CisgICAgdHJhY2suaW5pdGlhbGl6ZUVs
ZW1lbnRzKHRoaXMsIEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSkpOworICAgIHRyYWNrLndlYktp
dFRyYWNrID0gbWFrZVdlYktpdFRyYWNrKG5ld1RyYWNrSW5kZXgpOworICAgIGhvb2tUcmFja0V2
ZW50cyh0cmFjayk7CisgICAgcmV0dXJuIHsgQ3JlYXRlVHJhY2tSZXN1bHQ6OlRyYWNrQ3JlYXRl
ZCwgJnRyYWNrIH07Cit9CisKK0FwcGVuZFBpcGVsaW5lOjpUcmFjayogQXBwZW5kUGlwZWxpbmU6
OnRyeU1hdGNoUGFkVG9FeGlzdGluZ1RyYWNrKEdzdFBhZCAqZGVtdXhlclNyY1BhZCkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX2hhc1JlY2VpdmVkRmlyc3RJ
bml0aWFsaXphdGlvblNlZ21lbnQpOworICAgIEF0b21TdHJpbmcgdHJhY2tJZCA9IEdTVF9QQURf
TkFNRShkZW11eGVyU3JjUGFkKTsKKyAgICBhdXRvIFtwYXJzZWRDYXBzLCBzdHJlYW1UeXBlLCBw
cmVzZW50YXRpb25TaXplXSA9IHBhcnNlRGVtdXhlclNyY1BhZENhcHMoYWRvcHRHUmVmKGdzdF9w
YWRfZ2V0X2N1cnJlbnRfY2FwcyhkZW11eGVyU3JjUGFkKSkuZ2V0KCkpOworCisgICAgLy8gVHJ5
IHRvIGZpbmQgYSBtYXRjaGluZyBwcmUtZXhpc3RpbmcgdHJhY2suIElkZWFsbHksIHRyYWNrcyBz
aG91bGQgYmUgbWF0Y2hlZCBieSB0cmFjayBJRCwgYnV0IG1hdGNoaW5nIGJ5IHR5cGUKKyAgICAv
LyBpcyBwcm92aWRlZCBhcyBhIGZhbGxiYWNrIC0tIHdoaWNoIHdpbGwgYmUgdXNlZCwgc2luY2Ug
d2UgZG9uJ3QgaGF2ZSBhIHdheSB0byBmZXRjaCB0aG9zZSBmcm9tIEdTdHJlYW1lciBhdCB0aGUg
bW9tZW50LgorICAgIFRyYWNrKiBtYXRjaGluZ1RyYWNrID0gbnVsbHB0cjsKKyAgICBmb3IgKHN0
ZDo6dW5pcXVlX3B0cjxUcmFjaz4mIHRyYWNrIDogbV90cmFja3MpIHsKKyAgICAgICAgaWYgKHRy
YWNrLT5zdHJlYW1UeXBlICE9IHN0cmVhbVR5cGUgfHwgZ3N0X3BhZF9pc19saW5rZWQodHJhY2st
PmVudHJ5UGFkLmdldCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtYXRjaGlu
Z1RyYWNrID0gJip0cmFjazsKKyAgICAgICAgaWYgKHRyYWNrLT50cmFja0lkID09IHRyYWNrSWQp
CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIW1hdGNoaW5nVHJhY2spIHsK
KyAgICAgICAgLy8gSW52YWxpZCBjb25maWd1cmF0aW9uLgorICAgICAgICBHU1RfV0FSTklOR19P
QkpFQ1QocGlwZWxpbmUoKSwgIkNvdWxkbid0IGZpbmQgYSBtYXRjaGluZyBwcmUtZXhpc3Rpbmcg
dHJhY2sgZm9yIHBhZCAnJXMnIHdpdGggcGFyc2VkIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQgIiBv
biBub24tZmlyc3QgaW5pdGlhbGl6YXRpb24gc2VnbWVudCwgd2lsbCBiZSBjb25uZWN0ZWQgdG8g
YSBibGFjayBob2xlIHByb2JlLiIsIEdTVF9QQURfTkFNRShkZW11eGVyU3JjUGFkKSwgcGFyc2Vk
Q2Fwcy5nZXQoKSk7CisgICAgICAgIGdzdF9wYWRfYWRkX3Byb2JlKGRlbXV4ZXJTcmNQYWQsIEdT
VF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UGFkUHJvYmVDYWxs
YmFjaz4oYXBwZW5kUGlwZWxpbmVEZW11eGVyQmxhY2tIb2xlUGFkUHJvYmUpLCBudWxscHRyLCBu
dWxscHRyKTsKKyAgICB9CisgICAgcmV0dXJuIG1hdGNoaW5nVHJhY2s7Cit9CisKK3ZvaWQgQXBw
ZW5kUGlwZWxpbmU6OmxpbmtQYWRXaXRoVHJhY2soR3N0UGFkICpkZW11eGVyU3JjUGFkLCBUcmFj
ayAmdHJhY2spCit7CisgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9C
SU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgImFwcGVuZC1w
aXBlbGluZS1iZWZvcmUtbGluayIpOworICAgIEFTU0VSVCghR1NUX1BBRF9JU19MSU5LRUQodHJh
Y2suZW50cnlQYWQuZ2V0KCkpKTsKKyAgICBnc3RfcGFkX2xpbmsoZGVtdXhlclNyY1BhZCwgdHJh
Y2suZW50cnlQYWQuZ2V0KCkpOworICAgIEFTU0VSVChHU1RfUEFEX0lTX0xJTktFRCh0cmFjay5l
bnRyeVBhZC5nZXQoKSkpOworICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhH
U1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsICJhcHBl
bmQtcGlwZWxpbmUtYWZ0ZXItbGluayIpOworfQogCi0gICAgVHJhY2tQcml2YXRlQmFzZUdTdHJl
YW1lciogZ3N0cmVhbWVyVHJhY2s7Ci0gICAgc3dpdGNoIChtX3N0cmVhbVR5cGUpIHsKLSAgICBj
YXNlIE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW86IHsKLSAgICAgICAgYXV0
byBzcGVjaWZpY1RyYWNrID0gQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShtYWtl
V2Vha1B0cigqbV9wbGF5ZXJQcml2YXRlKSwgaWQoKSwgc2lua1NpbmtQYWQuZ2V0KCkpOworUmVm
PFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+IEFwcGVuZFBpcGVsaW5lOjptYWtlV2ViS2l0VHJh
Y2soaW50IHRyYWNrSW5kZXgpCit7CisgICAgVHJhY2smIGFwcGVuZFBpcGVsaW5lVHJhY2sgPSAq
bV90cmFja3MuYXQodHJhY2tJbmRleCk7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6VHJhY2tQcml2
YXRlQmFzZT4gdHJhY2s7CisgICAgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lciogZ3N0cmVhbWVy
VHJhY2sgPSBudWxscHRyOworICAgIC8vIEZJWE1FOiBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1l
ciBldGMuIHNob3VsZCBwcm9iYWJseSB1c2UgcGFkcyBvZiB0aGUgcGxheWJhY2sgcGlwZWxpbmUg
cmF0aGVyIHRoYW4gdGhlIGFwcGVuZCBwaXBlbGluZS4KKyAgICBzd2l0Y2ggKGFwcGVuZFBpcGVs
aW5lVHJhY2suc3RyZWFtVHlwZSkgeworICAgIGNhc2UgU3RyZWFtVHlwZTo6QXVkaW86IHsKKyAg
ICAgICAgYXV0byBzcGVjaWZpY1RyYWNrID0gQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNy
ZWF0ZShtYWtlV2Vha1B0cihtX3BsYXllclByaXZhdGUpLCB0cmFja0luZGV4LCBhcHBlbmRQaXBl
bGluZVRyYWNrLmFwcHNpbmtQYWQpOwogICAgICAgICBnc3RyZWFtZXJUcmFjayA9IHNwZWNpZmlj
VHJhY2sucHRyKCk7Ci0gICAgICAgIG1fdHJhY2sgPSBtYWtlUmVmUHRyKHN0YXRpY19jYXN0PFRy
YWNrUHJpdmF0ZUJhc2UqPihzcGVjaWZpY1RyYWNrLnB0cigpKSk7CisgICAgICAgIHRyYWNrID0g
bWFrZVJlZlB0cihzdGF0aWNfY2FzdDxUcmFja1ByaXZhdGVCYXNlKj4oc3BlY2lmaWNUcmFjay5w
dHIoKSkpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBNZWRpYVNvdXJjZVN0cmVh
bVR5cGVHU3RyZWFtZXI6OlZpZGVvOiB7Ci0gICAgICAgIGF1dG8gc3BlY2lmaWNUcmFjayA9IFZp
ZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQdHIoKm1fcGxheWVyUHJp
dmF0ZSksIGlkKCksIHNpbmtTaW5rUGFkLmdldCgpKTsKKyAgICBjYXNlIFN0cmVhbVR5cGU6OlZp
ZGVvOiB7CisgICAgICAgIGF1dG8gc3BlY2lmaWNUcmFjayA9IFZpZGVvVHJhY2tQcml2YXRlR1N0
cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQdHIobV9wbGF5ZXJQcml2YXRlKSwgdHJhY2tJbmRleCwg
YXBwZW5kUGlwZWxpbmVUcmFjay5hcHBzaW5rUGFkKTsKICAgICAgICAgZ3N0cmVhbWVyVHJhY2sg
PSBzcGVjaWZpY1RyYWNrLnB0cigpOwotICAgICAgICBtX3RyYWNrID0gbWFrZVJlZlB0cihzdGF0
aWNfY2FzdDxUcmFja1ByaXZhdGVCYXNlKj4oc3BlY2lmaWNUcmFjay5wdHIoKSkpOworICAgICAg
ICB0cmFjayA9IG1ha2VSZWZQdHIoc3RhdGljX2Nhc3Q8VHJhY2tQcml2YXRlQmFzZSo+KHNwZWNp
ZmljVHJhY2sucHRyKCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgTWVkaWFT
b3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpUZXh0OiB7Ci0gICAgICAgIGF1dG8gc3BlY2lmaWNU
cmFjayA9IEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShpZCgpLCBzaW5r
U2lua1BhZC5nZXQoKSk7CisgICAgY2FzZSBTdHJlYW1UeXBlOjpUZXh0OiB7CisgICAgICAgIGF1
dG8gc3BlY2lmaWNUcmFjayA9IEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0
ZSh0cmFja0luZGV4LCBhcHBlbmRQaXBlbGluZVRyYWNrLmFwcHNpbmtQYWQpOwogICAgICAgICBn
c3RyZWFtZXJUcmFjayA9IHNwZWNpZmljVHJhY2sucHRyKCk7Ci0gICAgICAgIG1fdHJhY2sgPSBt
YWtlUmVmUHRyKHN0YXRpY19jYXN0PFRyYWNrUHJpdmF0ZUJhc2UqPihzcGVjaWZpY1RyYWNrLnB0
cigpKSk7CisgICAgICAgIHRyYWNrID0gbWFrZVJlZlB0cihzdGF0aWNfY2FzdDxUcmFja1ByaXZh
dGVCYXNlKj4oc3BlY2lmaWNUcmFjay5wdHIoKSkpOwogICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgY2FzZSBNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkludmFsaWQ6Ci0gICAgICAg
IEdTVF9XQVJOSU5HX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiVW5zdXBwb3J0ZWQgdHJhY2sg
Y29kZWM6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzLmdldCgpKTsKLSAgICAgICAgLy8gMy41Ljcg
SW5pdGlhbGl6YXRpb24gU2VnbWVudCBSZWNlaXZlZAotICAgICAgICAvLyA1LjEuIElmIHRoZSBp
bml0aWFsaXphdGlvbiBzZWdtZW50IGNvbnRhaW5zIHRyYWNrcyB3aXRoIGNvZGVjcyB0aGUgdXNl
ciBhZ2VudCBkb2VzIG5vdCBzdXBwb3J0LCB0aGVuIHJ1biB0aGUKLSAgICAgICAgLy8gYXBwZW5k
IGVycm9yIGFsZ29yaXRobSBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCi0KLSAgICAgICAgLy8gYXBw
ZW5kUGFyc2luZ0ZhaWxlZCgpIHdpbGwgaW1tZWRpYXRlbHkgY2F1c2UgYSByZXNldFBhcnNlclN0
YXRlKCkgd2hpY2ggd2lsbCBzdG9wIGRlbXV4aW5nLCB0aGVuIHRoZQotICAgICAgICAvLyBBcHBl
bmRQaXBlbGluZSB3aWxsIGJlIGRlc3Ryb3llZC4KLSAgICAgICAgbV9zb3VyY2VCdWZmZXJQcml2
YXRlLmFwcGVuZFBhcnNpbmdGYWlsZWQoKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiUGFkIGhhcyB1
bmtub3duIHRyYWNrIHR5cGUsIGlnbm9yaW5nOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcy5nZXQo
KSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQotICAgIGdzdHJlYW1lclRyYWNrLT5zZXRJbml0aWFsQ2FwcyhHUmVmUHRyKGNhcHMpKTsKLQot
ICAgIG1fYXBwc2lua0NhcHMgPSBXVEZNb3ZlKGNhcHMpOwotICAgIG1fcGxheWVyUHJpdmF0ZS0+
dHJhY2tEZXRlY3RlZCgqdGhpcywgbV90cmFjayk7CisgICAgQVNTRVJUKGFwcGVuZFBpcGVsaW5l
VHJhY2suY2Fwcy5nZXQoKSk7CisgICAgZ3N0cmVhbWVyVHJhY2stPnNldEluaXRpYWxDYXBzKGFw
cGVuZFBpcGVsaW5lVHJhY2suY2Fwcy5nZXQoKSk7CisgICAgcmV0dXJuIHRyYWNrLnJlbGVhc2VO
b25OdWxsKCk7CiB9CiAKLXZvaWQgQXBwZW5kUGlwZWxpbmU6OmRpc2Nvbm5lY3REZW11eGVyU3Jj
UGFkRnJvbUFwcHNpbmtGcm9tQW55VGhyZWFkKEdzdFBhZCogZGVtdXhlclNyY1BhZCkKK3ZvaWQg
QXBwZW5kUGlwZWxpbmU6OlRyYWNrOjppbml0aWFsaXplRWxlbWVudHMoQXBwZW5kUGlwZWxpbmUq
IGFwcGVuZFBpcGVsaW5lLCBHc3RCaW4qIGJpbikKIHsKLSAgICAvLyBOb3RlOiBUaGlzIGZ1bmN0
aW9uIGNhbiBiZSBjYWxsZWQgZWl0aGVyIGZyb20gdGhlIHN0cmVhbWluZyB0aHJlYWQgKGUuZy4g
aWYgYSBzdHJhbmdlIGluaXRpYWxpemF0aW9uIHNlZ21lbnQgd2l0aAotICAgIC8vIGluY29tcGF0
aWJsZSB0cmFja3MgaXMgYXBwZW5kZWQgYW5kIHRoZSBzcmNwYWQgZGlzY29ubmVjdGVkKSBvciAt
LSBtb3JlIHVzdWFsbHkgLS0gZnJvbSB0aGUgbWFpbiB0aHJlYWQsIHdoZW4KLSAgICAvLyBhIHN0
YXRlIGNoYW5nZSBpcyBtYWRlIHRvIGJyaW5nIHRoZSBkZW11eGVyIGRvd24uIChTdGF0ZSBjaGFu
Z2Ugb3BlcmF0aW9ucyBydW4gaW4gdGhlIG1haW4gdGhyZWFkLikKLSAgICBHU1RfREVCVUdfQklO
X1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgR1NUX0RFQlVH
X0dSQVBIX1NIT1dfQUxMLCAicGFkLXJlbW92ZWQtYmVmb3JlIik7Ci0KLSAgICAvLyBSZWNvbm5l
Y3QgdGhlIG90aGVyIHBhZCBpZiBpdCdzIHRoZSBvbmx5IHJlbWFpbmluZyBhZnRlciByZW1vdmlu
ZyB0aGlzIG9uZSBhbmQgd2Fzbid0IGNvbm5lY3RlZCB5ZXQgKGhhcyBhIGJsYWNrIGhvbGUgcHJv
YmUpLgotICAgIGlmIChtX2RlbXV4LT5udW1zcmNwYWRzID09IDEpIHsKLSAgICAgICAgYXV0byBy
ZW1haW5pbmdQYWQgPSBHU1RfUEFEKG1fZGVtdXgtPnNyY3BhZHMtPmRhdGEpOwotCi0gICAgICAg
IGF1dG8gcHJvYmVJZCA9IEdQT0lOVEVSX1RPX1VMT05HKGdfb2JqZWN0X2dldF9kYXRhKEdfT0JK
RUNUKHJlbWFpbmluZ1BhZCksICJibGFja0hvbGVQcm9iZUlkIikpOwotICAgICAgICBpZiAocmVt
YWluaW5nUGFkICYmIHByb2JlSWQpIHsKLSAgICAgICAgICAgIGF1dG8gb2xkUGVlclBhZCA9IGFk
b3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2FwcHNpbmsuZ2V0KCksICJzaW5r
IikpOwotICAgICAgICAgICAgd2hpbGUgKGdzdF9wYWRfaXNfbGlua2VkKG9sZFBlZXJQYWQuZ2V0
KCkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gR2V0IHNpbmsgcGFkIG9mIHRoZSBwYXJzZXIgYmVm
b3JlIGFwcHNpbmsuCi0gICAgICAgICAgICAgICAgLy8gQWxsIHRoZSBleHBlY3RlZCBlbGVtZW50
cyBiZXR3ZWVuIHRoZSBkZW11eGVyIGFuZCBhcHBzaW5rIGFyZSBzdXBwb3NlZCB0byBoYXZlIHBh
ZHMgbmFtZWQgInNpbmsiLgotICAgICAgICAgICAgICAgIG9sZFBlZXJQYWQgPSBhZG9wdEdSZWYo
Z3N0X3BhZF9nZXRfcGVlcihvbGRQZWVyUGFkLmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgYXV0
byBlbGVtZW50ID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50KG9sZFBlZXJQ
YWQuZ2V0KCkpKTsKLSAgICAgICAgICAgICAgICBvbGRQZWVyUGFkID0gYWRvcHRHUmVmKGdzdF9l
bGVtZW50X2dldF9zdGF0aWNfcGFkKGVsZW1lbnQuZ2V0KCksICJzaW5rIikpOwotICAgICAgICAg
ICAgICAgIEFTU0VSVChvbGRQZWVyUGFkKTsKLSAgICAgICAgICAgIH0KKyAgICBhcHBzaW5rID0g
bWFrZUdTdHJlYW1lckVsZW1lbnQoImFwcHNpbmsiLCBudWxscHRyKTsKKyAgICBnc3RfYXBwX3Np
bmtfc2V0X2VtaXRfc2lnbmFscyhHU1RfQVBQX1NJTksoYXBwc2luay5nZXQoKSksIFRSVUUpOwor
ICAgIGdzdF9iYXNlX3Npbmtfc2V0X3N5bmMoR1NUX0JBU0VfU0lOSyhhcHBzaW5rLmdldCgpKSwg
RkFMU0UpOworICAgIGdzdF9iYXNlX3Npbmtfc2V0X2FzeW5jX2VuYWJsZWQoR1NUX0JBU0VfU0lO
SyhhcHBzaW5rLmdldCgpKSwgRkFMU0UpOyAvLyBObyBwcmVyb2xscywgbm8gYXN5bmMgc3RhdGUg
Y2hhbmdlcy4KKyAgICBnc3RfYmFzZV9zaW5rX3NldF9kcm9wX291dF9vZl9zZWdtZW50KEdTVF9C
QVNFX1NJTksoYXBwc2luay5nZXQoKSksIEZBTFNFKTsKKyAgICBnc3RfYmFzZV9zaW5rX3NldF9s
YXN0X3NhbXBsZV9lbmFibGVkKEdTVF9CQVNFX1NJTksoYXBwc2luay5nZXQoKSksIEZBTFNFKTsK
IAotICAgICAgICAgICAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUocmVtYWluaW5nUGFkLCBwcm9iZUlk
KTsKKyAgICBnc3RfYmluX2FkZChHU1RfQklOKGFwcGVuZFBpcGVsaW5lLT5waXBlbGluZSgpKSwg
YXBwc2luay5nZXQoKSk7CisgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChh
cHBzaW5rLmdldCgpKTsKKyAgICBlbnRyeVBhZCA9IGFwcHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0
X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoYXBwc2luay5nZXQoKSwgInNpbmsiKSk7CiAKLSAgICAg
ICAgICAgIGF1dG8gb2xkUGVlclBhZENhcHMgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfY3VycmVu
dF9jYXBzKG9sZFBlZXJQYWQuZ2V0KCkpKTsKLSAgICAgICAgICAgIGF1dG8gcmVtYWluaW5nUGFk
Q2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMocmVtYWluaW5nUGFkKSk7
Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBvbGRQZWVyUGFkVHlwZSA9IG51bGxwdHI7Ci0gICAg
ICAgICAgICBjb25zdCBjaGFyKiByZW1haW5pbmdQYWRUeXBlID0gbnVsbHB0cjsKKyNpZiAhTE9H
X0RJU0FCTEVECisgICAgYXBwc2lua0RhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24uYXBw
ZW5kUGlwZWxpbmUgPSBhcHBlbmRQaXBlbGluZTsKKyAgICBhcHBzaW5rRGF0YUVudGVyaW5nUGFk
UHJvYmVJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbiA9ICJhcHBzaW5rIGRhdGEgZW50ZXJpbmciOwor
ICAgIGFwcHNpbmtEYXRhRW50ZXJpbmdQYWRQcm9iZUluZm9ybWF0aW9uLnByb2JlSWQgPSBnc3Rf
cGFkX2FkZF9wcm9iZShhcHBzaW5rUGFkLmdldCgpLCBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVS
LCByZWludGVycHJldF9jYXN0PEdzdFBhZFByb2JlQ2FsbGJhY2s+KGFwcGVuZFBpcGVsaW5lUGFk
UHJvYmVEZWJ1Z0luZm9ybWF0aW9uKSwgJmFwcHNpbmtEYXRhRW50ZXJpbmdQYWRQcm9iZUluZm9y
bWF0aW9uLCBudWxscHRyKTsKKyNlbmRpZgogCi0gICAgICAgICAgICBpZiAob2xkUGVlclBhZENh
cHMpIHsKLSAgICAgICAgICAgICAgICBhdXRvIG9sZFBlZXJQYWRDYXBzU3RydWN0dXJlID0gZ3N0
X2NhcHNfZ2V0X3N0cnVjdHVyZShvbGRQZWVyUGFkQ2Fwcy5nZXQoKSwgMCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKG9sZFBlZXJQYWRDYXBzU3RydWN0dXJlKQotICAgICAgICAgICAgICAgICAgICBv
bGRQZWVyUGFkVHlwZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUob2xkUGVlclBhZENhcHNTdHJ1
Y3R1cmUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlbWFpbmluZ1BhZENhcHMp
IHsKLSAgICAgICAgICAgICAgICBhdXRvIHJlbWFpbmluZ1BhZENhcHNTdHJ1Y3R1cmUgPSBnc3Rf
Y2Fwc19nZXRfc3RydWN0dXJlKHJlbWFpbmluZ1BhZENhcHMuZ2V0KCksIDApOwotICAgICAgICAg
ICAgICAgIGlmIChyZW1haW5pbmdQYWRDYXBzU3RydWN0dXJlKQotICAgICAgICAgICAgICAgICAg
ICByZW1haW5pbmdQYWRUeXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZShyZW1haW5pbmdQYWRD
YXBzU3RydWN0dXJlKTsKLSAgICAgICAgICAgIH0KKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElB
KQorICAgIGFwcHNpbmtQYWRFdmVudFByb2JlSW5mb3JtYXRpb24uYXBwZW5kUGlwZWxpbmUgPSBh
cHBlbmRQaXBlbGluZTsKKyAgICBhcHBzaW5rUGFkRXZlbnRQcm9iZUluZm9ybWF0aW9uLmRlc2Ny
aXB0aW9uID0gImFwcHNpbmsgZXZlbnQgcHJvYmUiOworICAgIGFwcHNpbmtQYWRFdmVudFByb2Jl
SW5mb3JtYXRpb24ucHJvYmVJZCA9IGdzdF9wYWRfYWRkX3Byb2JlKGFwcHNpbmtQYWQuZ2V0KCks
IEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNLCByZWludGVycHJldF9jYXN0PEdz
dFBhZFByb2JlQ2FsbGJhY2s+KGFwcGVuZFBpcGVsaW5lQXBwc2lua1BhZEV2ZW50UHJvYmUpLCAm
YXBwc2lua1BhZEV2ZW50UHJvYmVJbmZvcm1hdGlvbiwgbnVsbHB0cik7CisjZW5kaWYKIAotICAg
ICAgICAgICAgaWYgKGdfc3RyY21wMChvbGRQZWVyUGFkVHlwZSwgcmVtYWluaW5nUGFkVHlwZSkp
IHsKLSAgICAgICAgICAgICAgICBHU1RfRVJST1IoIlRoZSByZW1haW5pbmcgcGFkIGhhcyBhIGJs
YWNrSG9sZVByb2JlLCBidXQgY2FuJ3QgcmVjb25uZWN0IGFzIG1haW4gcGFkIGJlY2F1c2UgdGhl
IGNhcHMgdHlwZXMgYXJlIGluY29tcGF0aWJsZTogb2xkUGVlclBhZENhcHM6ICUiIEdTVF9QVFJf
Rk9STUFUICIsIHJlbWFpbmluZ1BhZENhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBvbGRQZWVyUGFk
Q2Fwcy5nZXQoKSwgcmVtYWluaW5nUGFkQ2Fwcy5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFpc01haW5UaHJlYWQoKSkKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlRXJyb3JDb25kaXRp
b25Gcm9tU3RyZWFtaW5nVGhyZWFkKCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGUuYXBwZW5kUGFyc2luZ0ZhaWxlZCgpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KKyAgICAvLyBTb21lIGF1ZGlv
IGZpbGVzIHVuaGVscGZ1bGx5IG9taXQgdGhlIGR1cmF0aW9uIG9mIGZyYW1lcyBpbiB0aGUgY29u
dGFpbmVyLiBXZSBuZWVkIHRvIHBhcnNlCisgICAgLy8gdGhlIGNvbnRhaW5lZCBhdWRpbyBzdHJl
YW1zIGluIG9yZGVyIHRvIGtub3cgdGhlIGR1cmF0aW9uIG9mIHRoZSBmcmFtZXMuCisgICAgLy8g
VGhpcyBpcyBrbm93biB0byBiZSBhbiBpc3N1ZSB3aXRoIFlvdVR1YmUgV2ViTSBmaWxlcyBjb250
YWluaW5nIE9wdXMgYXVkaW8gYXMgb2YgWVRUVjIwMTguCisgICAgaWYgKChwYXJzZXIgPSBjcmVh
dGVPcHRpb25hbFBhcnNlckZvckZvcm1hdCh0cmFja0lkLCBjYXBzLmdldCgpKSkpIHsKKyAgICAg
ICAgZ3N0X2Jpbl9hZGQoYmluLCBwYXJzZXIuZ2V0KCkpOworICAgICAgICBnc3RfZWxlbWVudF9z
eW5jX3N0YXRlX3dpdGhfcGFyZW50KHBhcnNlci5nZXQoKSk7CisgICAgICAgIGdzdF9lbGVtZW50
X2xpbmsocGFyc2VyLmdldCgpLCBhcHBzaW5rLmdldCgpKTsKKyAgICAgICAgQVNTRVJUKEdTVF9Q
QURfSVNfTElOS0VEKGFwcHNpbmtQYWQuZ2V0KCkpKTsKKyAgICAgICAgZW50cnlQYWQgPSBhZG9w
dEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocGFyc2VyLmdldCgpLCAic2luayIpKTsK
KyAgICB9Cit9CiAKLSAgICAgICAgICAgIEdTVF9ERUJVRygiVGhlIHJlbWFpbmluZyBwYWQgaGFz
IGEgYmxhY2tIb2xlUHJvYmUsIHJlY29ubmVjdGluZyBhcyBtYWluIHBhZC4gb2xkUGFkOiAlIiBH
U1RfUFRSX0ZPUk1BVCAiLCBuZXdQYWQ6ICUiIEdTVF9QVFJfRk9STUFUICIsIHBlZXJQYWQ6ICUi
IEdTVF9QVFJfRk9STUFULCBkZW11eGVyU3JjUGFkLCByZW1haW5pbmdQYWQsIG9sZFBlZXJQYWQu
Z2V0KCkpOwordm9pZCBBcHBlbmRQaXBlbGluZTo6aG9va1RyYWNrRXZlbnRzKFRyYWNrJiB0cmFj
aykKK3sKKyAgICBnX3NpZ25hbF9jb25uZWN0KHRyYWNrLmFwcHNpbmsuZ2V0KCksICJuZXctc2Ft
cGxlIiwgR19DQUxMQkFDSygrW10oR3N0RWxlbWVudCogYXBwc2luaywgQXBwZW5kUGlwZWxpbmUq
IGFwcGVuZFBpcGVsaW5lKSAtPiBHc3RGbG93UmV0dXJuIHsKKyAgICAgICAgYXBwZW5kUGlwZWxp
bmUtPmhhbmRsZUFwcHNpbmtOZXdTYW1wbGVGcm9tU3RyZWFtaW5nVGhyZWFkKGFwcHNpbmspOwor
ICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAgfSksIHRoaXMpOwogCi0gICAgICAgICAg
ICBnc3RfcGFkX2xpbmsocmVtYWluaW5nUGFkLCBvbGRQZWVyUGFkLmdldCgpKTsKLSAgICAgICAg
ICAgIGlmIChtX3BhcnNlcikKLSAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUo
bV9wYXJzZXIuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50
X3NldF9zdGF0ZShtX2FwcHNpbmsuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKLSAgICAgICAgICAg
IGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX2FwcHNpbmsuZ2V0KCksIEdTVF9TVEFURV9QTEFZSU5H
KTsKLSAgICAgICAgICAgIGlmIChtX3BhcnNlcikKLSAgICAgICAgICAgICAgICBnc3RfZWxlbWVu
dF9zZXRfc3RhdGUobV9wYXJzZXIuZ2V0KCksIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICBzdHJ1
Y3QgQ2xvc3VyZSB7CisgICAgcHVibGljOgogCi0gICAgICAgICAgICBHU1RfREVCVUdfQklOX1RP
X0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgR1NUX0RFQlVHX0dS
QVBIX1NIT1dfQUxMLCAid2Via2l0LWFmdGVyLXJlbGluayIpOworICAgICAgICBDbG9zdXJlKEFw
cGVuZFBpcGVsaW5lJiBhcHBlbmRQaXBlbGluZSwgVHJhY2smIHRyYWNrKQorICAgICAgICAgICAg
OiBhcHBlbmRQaXBlbGluZShhcHBlbmRQaXBlbGluZSkKKyAgICAgICAgICAgICwgdHJhY2sodHJh
Y2spCisgICAgICAgIHsgfQorICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cnVjdCh2b2lkKiBjbG9z
dXJlLCBHQ2xvc3VyZSopIHsgZGVsZXRlIHN0YXRpY19jYXN0PENsb3N1cmUqPihjbG9zdXJlKTsg
fQogCisgICAgICAgIEFwcGVuZFBpcGVsaW5lJiBhcHBlbmRQaXBlbGluZTsKKyAgICAgICAgVHJh
Y2smIHRyYWNrOworICAgIH07CisKKyAgICBnX3NpZ25hbF9jb25uZWN0X2RhdGEodHJhY2suYXBw
c2lua1BhZC5nZXQoKSwgIm5vdGlmeTo6Y2FwcyIsIEdfQ0FMTEJBQ0soK1tdKEdPYmplY3QqLCBH
UGFyYW1TcGVjKiwgQ2xvc3VyZSogY2xvc3VyZSkgeworICAgICAgICBBcHBlbmRQaXBlbGluZSYg
YXBwZW5kUGlwZWxpbmUgPSBjbG9zdXJlLT5hcHBlbmRQaXBlbGluZTsKKyAgICAgICAgVHJhY2sm
IHRyYWNrID0gY2xvc3VyZS0+dHJhY2s7CisgICAgICAgIGlmIChpc01haW5UaHJlYWQoKSkgewor
ICAgICAgICAgICAgLy8gV2hlbiBjaGFuZ2luZyB0aGUgcGlwZWxpbmUgc3RhdGUgZG93biB0byBS
RUFEWSB0aGUgZGVtdXhlciBpcyB1bmxpbmtlZCBhbmQgdGhpcyB0cmlnZ2VycyBhIGNhcHMgbm90
aWZpY2F0aW9uCisgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZSBhcHBzaW5rIGxvc2VzIGl0cyBw
cmV2aW91c2x5IG5lZ290aWF0ZWQgY2Fwcy4gV2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIHRoZXNl
IHVubmVnb3RpYXRlZCBjYXBzLgorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgIEdSZWZQdHI8
R3N0UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQodHJhY2su
YXBwc2luay5nZXQoKSwgInNpbmsiKSk7CisgICAgICAgICAgICBHUmVmUHRyPEdzdENhcHM+IGNh
cHMgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKHBhZC5nZXQoKSkpOworICAg
ICAgICAgICAgQVNTRVJUKCFjYXBzKTsKKyNlbmRpZgogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgfQogCi0gICAgR1NUX0RFQlVHKCJEaXNjb25uZWN0aW5nIGFwcHNpbmsiKTsK
KyAgICAgICAgLy8gVGhlIHN0cmVhbWluZyB0aHJlYWQgaGFzIGp1c3QgcmVjZWl2ZWQgYSBuZXcg
Y2FwcyBhbmQgaXMgYWJvdXQgdG8gbGV0IHNhbXBsZXMgdXNpbmcgdGhlCisgICAgICAgIC8vIG5l
dyBjYXBzIGZsb3cuIExldCdzIGJsb2NrIGl0IHVudGlsIHRoZSBtYWluIHRocmVhZCBoYXMgY29u
c3VtZWQgdGhlIHNhbXBsZXMgd2l0aCB0aGUgb2xkCisgICAgICAgIC8vIGNhcHMgYW5kIGhhcyBw
cm9jZXNzZWQgdGhlIGNhcHMgY2hhbmdlLgorICAgICAgICBhcHBlbmRQaXBlbGluZS5tX3Rhc2tR
dWV1ZS5lbnF1ZXVlVGFza0FuZFdhaXQ8QWJvcnRhYmxlVGFza1F1ZXVlOjpWb2lkPihbJmFwcGVu
ZFBpcGVsaW5lLCAmdHJhY2tdKCkgeworICAgICAgICAgICAgYXBwZW5kUGlwZWxpbmUuYXBwc2lu
a0NhcHNDaGFuZ2VkKHRyYWNrKTsKKyAgICAgICAgICAgIHJldHVybiBBYm9ydGFibGVUYXNrUXVl
dWU6OlZvaWQoKTsKKyAgICAgICAgfSk7CisgICAgfSksIG5ldyBDbG9zdXJlIHsgKnRoaXMsIHRy
YWNrIH0sIENsb3N1cmU6OmRlc3RydWN0LCBzdGF0aWNfY2FzdDxHQ29ubmVjdEZsYWdzPigwKSk7
Cit9CiAKLSAgICBpZiAobV9wYXJzZXIpIHsKLSAgICAgICAgYXNzZXJ0ZWRFbGVtZW50U2V0U3Rh
dGUobV9wYXJzZXIuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKLSAgICAgICAgZ3N0X2Jpbl9yZW1v
dmUoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgbV9wYXJzZXIuZ2V0KCkpOwotICAgICAgICBt
X3BhcnNlciA9IG51bGxwdHI7CisjaWYgIUxPR19ESVNBQkxFRAorY29uc3QgY2hhciogQXBwZW5k
UGlwZWxpbmU6OnN0cmVhbVR5cGVUb1N0cmluZyhTdHJlYW1UeXBlIHN0cmVhbVR5cGUpCit7Cisg
ICAgc3dpdGNoIChzdHJlYW1UeXBlKSB7CisgICAgY2FzZSBTdHJlYW1UeXBlOjpBdWRpbzoKKyAg
ICAgICAgcmV0dXJuICJBdWRpbyI7CisgICAgY2FzZSBTdHJlYW1UeXBlOjpWaWRlbzoKKyAgICAg
ICAgcmV0dXJuICJWaWRlbyI7CisgICAgY2FzZSBTdHJlYW1UeXBlOjpUZXh0OgorICAgICAgICBy
ZXR1cm4gIlRleHQiOworICAgIGNhc2UgU3RyZWFtVHlwZTo6SW52YWxpZDoKKyAgICAgICAgcmV0
dXJuICJJbnZhbGlkIjsKKyAgICBjYXNlIFN0cmVhbVR5cGU6OlVua25vd246CisgICAgICAgIHJl
dHVybiAiVW5rbm93biI7CiAgICAgfQotCi0gICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9X
SVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FM
TCwgInBhZC1yZW1vdmVkLWFmdGVyIik7CiB9CiAKLSNpZiAhTE9HX0RJU0FCTEVECiBzdGF0aWMg
R3N0UGFkUHJvYmVSZXR1cm4gYXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVnSW5mb3JtYXRpb24o
R3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiBpbmZvLCBzdHJ1Y3QgUGFkUHJvYmVJbmZvcm1hdGlv
biogcGFkUHJvYmVJbmZvcm1hdGlvbikKIHsKICAgICBBU1NFUlQoR1NUX1BBRF9QUk9CRV9JTkZP
X1RZUEUoaW5mbykgJiBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxp
bmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBw
ZW5kUGlwZWxpbmUuaAppbmRleCA2ODczZmI3NTY2MWY0NzQxZjEzYmMxMGIxOTY2MzgzMWUxNDVh
ZTQzLi5jMWNjOWY3N2JkODNjZjQyYTBhMTc3ZDBhMGE5MGQzNzhmNzQ2OTdlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBp
cGVsaW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L21zZS9BcHBlbmRQaXBlbGluZS5oCkBAIC01Miw0NiArNTIsODIgQEAgcHVibGljOgogICAgIHZv
aWQgcHVzaE5ld0J1ZmZlcihHUmVmUHRyPEdzdEJ1ZmZlcj4mJik7CiAgICAgdm9pZCByZXNldFBh
cnNlclN0YXRlKCk7CiAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lciYgc291cmNlQnVm
ZmVyUHJpdmF0ZSgpIHsgcmV0dXJuIG1fc291cmNlQnVmZmVyUHJpdmF0ZTsgfQotICAgIEdzdENh
cHMqIGFwcHNpbmtDYXBzKCkgeyByZXR1cm4gbV9hcHBzaW5rQ2Fwcy5nZXQoKTsgfQotICAgIFJl
ZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiB0cmFjaygpIHsgcmV0dXJuIG1fdHJhY2s7
IH0KICAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UqIHBsYXllclByaXZhdGUoKSB7
IHJldHVybiBtX3BsYXllclByaXZhdGU7IH0KIAogcHJpdmF0ZToKICAgICAvLyBTaW1pbGFyIHRv
IFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZSwgYnV0IHdpdGggYSBuZXcgdmFs
dWUgKEludmFsaWQpIGZvciB3aGVuIHRoZSBjb2RlYyBpcwogICAgIC8vIG5vdCBzdXBwb3J0ZWQg
b24gdGhpcyBzeXN0ZW0sIHdoaWNoIHNob3VsZCByZXN1bHQgaW4gUGFyc2luZ0ZhaWxlZCBlcnJv
ciBiZWluZyB0aHJvd24gaW4gU291cmNlQnVmZmVyLgotICAgIGVudW0gTWVkaWFTb3VyY2VTdHJl
YW1UeXBlR1N0cmVhbWVyIHsgQXVkaW8sIFZpZGVvLCBUZXh0LCBVbmtub3duLCBJbnZhbGlkIH07
CisgICAgZW51bSBTdHJlYW1UeXBlIHsgQXVkaW8sIFZpZGVvLCBUZXh0LCBVbmtub3duLCBJbnZh
bGlkIH07CisjaWYgIUxPR19ESVNBQkxFRAorICAgIHN0YXRpYyBjb25zdCBjaGFyICogc3RyZWFt
VHlwZVRvU3RyaW5nKFN0cmVhbVR5cGUpOworI2VuZGlmCisKKyAgICBzdHJ1Y3QgVHJhY2sgewor
ICAgICAgICAvLyBUcmFjayBvYmplY3RzIGFyZSBjcmVhdGVkIG9uIHBhZC1hZGRlZCBmb3IgdGhl
IGZpcnN0IGluaXRpYWxpemF0aW9uIHNlZ21lbnQsIGFuZCBkZXN0cm95ZWQgYWZ0ZXIKKyAgICAg
ICAgLy8gdGhlIHBpcGVsaW5lIHN0YXRlIGhhcyBiZWVuIHNldCB0byBHU1RfU1RBVEVfTlVMTC4K
KyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVHJhY2spOworICAgICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgVHJhY2soY29uc3QgQXRvbVN0
cmluZyYgdHJhY2tJZCwgU3RyZWFtVHlwZSBzdHJlYW1UeXBlLCBjb25zdCBHUmVmUHRyPEdzdENh
cHM+JiBjYXBzLCBjb25zdCBGbG9hdFNpemUmIHByZXNlbnRhdGlvblNpemUpCisgICAgICAgICAg
ICA6IHRyYWNrSWQodHJhY2tJZCkKKyAgICAgICAgICAgICwgc3RyZWFtVHlwZShzdHJlYW1UeXBl
KQorICAgICAgICAgICAgLCBjYXBzKGNhcHMpCisgICAgICAgICAgICAsIHByZXNlbnRhdGlvblNp
emUocHJlc2VudGF0aW9uU2l6ZSkKKyAgICAgICAgeyB9CisKKyAgICAgICAgQXRvbVN0cmluZyB0
cmFja0lkOworICAgICAgICBTdHJlYW1UeXBlIHN0cmVhbVR5cGU7CisgICAgICAgIEdSZWZQdHI8
R3N0Q2Fwcz4gY2FwczsKKyAgICAgICAgRmxvYXRTaXplIHByZXNlbnRhdGlvblNpemU7CisKKyAg
ICAgICAgR1JlZlB0cjxHc3RQYWQ+IGVudHJ5UGFkOyAvLyBTaW5rIHBhZCBvZiB0aGUgcGFyc2Vy
IChpZiBhbnkpIG9yIHRoZSBhcHBzaW5rLgorICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IHBh
cnNlcjsgLy8gT3B0aW9uYWwgKG5lZWRlZCBieSBzb21lIGZvcm1hdHMpLgorICAgICAgICBHUmVm
UHRyPEdzdEVsZW1lbnQ+IGFwcHNpbms7CisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBhcHBzaW5r
UGFkOworCisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiB3ZWJLaXRU
cmFjazsKKworI2lmICFMT0dfRElTQUJMRUQKKyAgICAgICAgc3RydWN0IFBhZFByb2JlSW5mb3Jt
YXRpb24gYXBwc2lua0RhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb247CisjZW5kaWYKKyNp
ZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorICAgICAgICBzdHJ1Y3QgUGFkUHJvYmVJbmZvcm1h
dGlvbiBhcHBzaW5rUGFkRXZlbnRQcm9iZUluZm9ybWF0aW9uOworI2VuZGlmCisKKyAgICAgICAg
dm9pZCBpbml0aWFsaXplRWxlbWVudHMoQXBwZW5kUGlwZWxpbmUqLCBHc3RCaW4qKTsKKyAgICB9
OwogCiAgICAgdm9pZCBoYW5kbGVFcnJvclN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKICAgICB2
b2lkIGhhbmRsZU5lZWRDb250ZXh0U3luY01lc3NhZ2UoR3N0TWVzc2FnZSopOwogICAgIC8vIEZv
ciBkZWJ1ZyBwdXJwb3NlcyBvbmx5OgogICAgIHZvaWQgaGFuZGxlU3RhdGVDaGFuZ2VNZXNzYWdl
KEdzdE1lc3NhZ2UqKTsKIAotICAgIGdpbnQgaWQoKTsKLQogICAgIHZvaWQgaGFuZGxlQXBwc2lu
a05ld1NhbXBsZUZyb21TdHJlYW1pbmdUaHJlYWQoR3N0RWxlbWVudCopOworICAgIHZvaWQgaGFu
ZGxlRXJyb3JDb25kaXRpb24oKTsKICAgICB2b2lkIGhhbmRsZUVycm9yQ29uZGl0aW9uRnJvbVN0
cmVhbWluZ1RocmVhZCgpOwogCi0gICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIGNhcHMuCi0gICAg
dm9pZCBwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKEdzdENhcHMqKTsKLSAgICB2b2lkIGFwcHNpbmtD
YXBzQ2hhbmdlZCgpOwotICAgIHZvaWQgYXBwc2lua05ld1NhbXBsZShHUmVmUHRyPEdzdFNhbXBs
ZT4mJik7CisgICAgdm9pZCBob29rVHJhY2tFdmVudHMoVHJhY2smKTsKKyAgICBzdGF0aWMgc3Rk
Ojp0dXBsZTxHUmVmUHRyPEdzdENhcHM+LCBBcHBlbmRQaXBlbGluZTo6U3RyZWFtVHlwZSwgRmxv
YXRTaXplPiBwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKEdzdENhcHMqIGRlbXV4ZXJTcmNQYWRDYXBz
KTsKKyAgICBSZWY8V2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZT4gbWFrZVdlYktpdFRyYWNrKGlu
dCB0cmFja0luZGV4KTsKKyAgICB2b2lkIGFwcHNpbmtDYXBzQ2hhbmdlZChUcmFjayYpOworICAg
IHZvaWQgYXBwc2lua05ld1NhbXBsZShjb25zdCBUcmFjayYsIEdSZWZQdHI8R3N0U2FtcGxlPiYm
KTsKICAgICB2b2lkIGhhbmRsZUVuZE9mQXBwZW5kKCk7CiAgICAgdm9pZCBkaWRSZWNlaXZlSW5p
dGlhbGl6YXRpb25TZWdtZW50KCk7Ci0gICAgQXRvbVN0cmluZyB0cmFja0lkKCk7CiAKICAgICBH
c3RCdXMqIGJ1cygpIHsgcmV0dXJuIG1fYnVzLmdldCgpOyB9CiAgICAgR3N0RWxlbWVudCogcGlw
ZWxpbmUoKSB7IHJldHVybiBtX3BpcGVsaW5lLmdldCgpOyB9CiAgICAgR3N0RWxlbWVudCogYXBw
c3JjKCkgeyByZXR1cm4gbV9hcHBzcmMuZ2V0KCk7IH0KLSAgICBHc3RFbGVtZW50KiBhcHBzaW5r
KCkgeyByZXR1cm4gbV9hcHBzaW5rLmdldCgpOyB9Ci0gICAgR3N0Q2FwcyogZGVtdXhlclNyY1Bh
ZENhcHMoKSB7IHJldHVybiBtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpOyB9CiAKLSAgICB2b2lk
IGRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNpbmtGcm9tQW55VGhyZWFkKEdzdFBhZCop
OwotICAgIHZvaWQgY29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmtGcm9tU3RyZWFtaW5nVGhy
ZWFkKEdzdFBhZCopOwotICAgIHZvaWQgY29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmsoR3N0
UGFkKik7CisgICAgc3RhdGljIEF0b21TdHJpbmcgZ2VuZXJhdGVUcmFja0lkKFN0cmVhbVR5cGUs
IGludCBwYWRJbmRleCk7CisgICAgZW51bSBjbGFzcyBDcmVhdGVUcmFja1Jlc3VsdCB7IFRyYWNr
Q3JlYXRlZCwgVHJhY2tJZ25vcmVkLCBBcHBlbmRQYXJzaW5nRmFpbGVkIH07CisgICAgc3RkOjpw
YWlyPENyZWF0ZVRyYWNrUmVzdWx0LCBBcHBlbmRQaXBlbGluZTo6VHJhY2sqPiB0cnlDcmVhdGVU
cmFja0Zyb21QYWQoR3N0UGFkKiBkZW11eGVyU3JjUGFkLCBpbnQgcGFkSW5kZXgpOworICAgIEFw
cGVuZFBpcGVsaW5lOjpUcmFjayogdHJ5TWF0Y2hQYWRUb0V4aXN0aW5nVHJhY2soR3N0UGFkKiBk
ZW11eGVyU3JjUGFkKTsKKyAgICB2b2lkIGxpbmtQYWRXaXRoVHJhY2soR3N0UGFkKiBkZW11eGVy
U3JjUGFkLCBUcmFjayYpOwogCiAgICAgdm9pZCByZXNldFBpcGVsaW5lKCk7CiAKLSAgICB2b2lk
IGNvbnN1bWVBcHBzaW5rQXZhaWxhYmxlU2FtcGxlcygpOworICAgIHZvaWQgY29uc3VtZUFwcHNp
bmtzQXZhaWxhYmxlU2FtcGxlcygpOwogCiAgICAgR3N0UGFkUHJvYmVSZXR1cm4gYXBwc3JjRW5k
T2ZBcHBlbmRDaGVja2VyUHJvYmUoR3N0UGFkUHJvYmVJbmZvKik7CiAKQEAgLTEwNSwyNCArMTQx
LDIwIEBAIHByaXZhdGU6CiAgICAgLy8gT25seSB0aGUgcG9pbnRlcnMgYXJlIGNvbXBhcmVkLgog
ICAgIFdURjo6VGhyZWFkKiBtX3N0cmVhbWluZ1RocmVhZDsKIAorICAgIGJvb2wgbV9oYXNSZWNl
aXZlZEZpcnN0SW5pdGlhbGl6YXRpb25TZWdtZW50IHsgZmFsc2UgfTsKICAgICAvLyBVc2VkIG9u
bHkgZm9yIGFzc2VydGluZyBFT1MgZXZlbnRzIGFyZSBvbmx5IGNhdXNlZCBieSBkZW11eGluZyBl
cnJvcnMuCiAgICAgYm9vbCBtX2Vycm9yUmVjZWl2ZWQgeyBmYWxzZSB9OwogCiAgICAgU291cmNl
QnVmZmVyUHJpdmF0ZUdTdHJlYW1lciYgbV9zb3VyY2VCdWZmZXJQcml2YXRlOwogICAgIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSogbV9wbGF5ZXJQcml2YXRlOwogCi0gICAgLy8gKG1f
bWVkaWFUeXBlLCBtX2lkKSBpcyB1bmlxdWUuCi0gICAgZ2ludCBtX2lkOwotCiAgICAgTWVkaWFU
aW1lIG1faW5pdGlhbER1cmF0aW9uOwotCisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2FwcHNy
YzsKICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fcGlwZWxpbmU7CiAgICAgR1JlZlB0cjxHc3RC
dXM+IG1fYnVzOwotICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9hcHBzcmM7CiAgICAgR1JlZlB0
cjxHc3RFbGVtZW50PiBtX2RlbXV4OwotICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9wYXJzZXI7
IC8vIE9wdGlvbmFsLgotICAgIC8vIFRoZSBkZW11eGVyIGhhcyBvbmUgc3JjIHN0cmVhbSBvbmx5
LCBzbyBvbmx5IG9uZSBhcHBzaW5rIGlzIG5lZWRlZCBhbmQgbGlua2VkIHRvIGl0LgotICAgIEdS
ZWZQdHI8R3N0RWxlbWVudD4gbV9hcHBzaW5rOworCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxUcmFjaz4+IG1fdHJhY2tzOwogCiAgICAgLy8gVXNlZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBu
b3RpZmljYXRpb25zIHBlciBzYW1wbGUuCiAgICAgLy8gSXQgaXMgcmVhZCBhbmQgd3JpdHRlbiBm
cm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkIGFuZCB3cml0dGVuIGZyb20gdGhlIG1haW4gdGhyZWFk
LgpAQCAtMTMxLDI1ICsxNjMsMTEgQEAgcHJpdmF0ZToKICAgICAvLyBxdWV1ZSwgaW5zdGVhZCBv
ZiBpdCBncm93aW5nIHVuYm91bmRlZC4KICAgICBzdGQ6OmF0b21pY19mbGFnIG1fd2FzQnVzQWxy
ZWFkeU5vdGlmaWVkT2ZBdmFpbGFibGVTYW1wbGVzOwogCi0gICAgR1JlZlB0cjxHc3RDYXBzPiBt
X2FwcHNpbmtDYXBzOwotICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9kZW11eGVyU3JjUGFkQ2FwczsK
LSAgICBGbG9hdFNpemUgbV9wcmVzZW50YXRpb25TaXplOwotCiAjaWYgIUxPR19ESVNBQkxFRAog
ICAgIHN0cnVjdCBQYWRQcm9iZUluZm9ybWF0aW9uIG1fZGVtdXhlckRhdGFFbnRlcmluZ1BhZFBy
b2JlSW5mb3JtYXRpb247Ci0gICAgc3RydWN0IFBhZFByb2JlSW5mb3JtYXRpb24gbV9hcHBzaW5r
RGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbjsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEVO
Q1JZUFRFRF9NRURJQSkKLSAgICBzdHJ1Y3QgUGFkUHJvYmVJbmZvcm1hdGlvbiBtX2FwcHNpbmtQ
YWRFdmVudFByb2JlSW5mb3JtYXRpb247CiAjZW5kaWYKIAotICAgIE1lZGlhU291cmNlU3RyZWFt
VHlwZUdTdHJlYW1lciBtX3N0cmVhbVR5cGU7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJp
dmF0ZUJhc2U+IG1fdHJhY2s7Ci0KICAgICBBYm9ydGFibGVUYXNrUXVldWUgbV90YXNrUXVldWU7
Ci0KLSAgICBHUmVmUHRyPEdzdEJ1ZmZlcj4gbV9wZW5kaW5nQnVmZmVyOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcAppbmRleCA0ZWVjMDllMjJkMTdkYzM1MmUyNTA1MDkx
NDAxZmI2ZTI2NmQ3OTQ0Li44MzFjMmIyYzZlZmIyMjQ3NTliNDNiZmU2N2ZiNzNiMTRmZTBhNjM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0UuY3BwCkBAIC0zMzEsMjUgKzMzMSwyMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6ZHVyYXRpb25DaGFuZ2VkKCkKICAgICB9CiB9CiAKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp0cmFja0RldGVjdGVkKEFwcGVuZFBpcGVsaW5lJiBh
cHBlbmRQaXBlbGluZSwgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+IG5ld1RyYWNr
KQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNldEluaXRpYWxWaWRlb1Np
emUoY29uc3QgRmxvYXRTaXplJiB2aWRlb1NpemUpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLSAgICBBU1NFUlQoYXBwZW5kUGlwZWxpbmUudHJhY2soKSA9PSBuZXdUcmFjayk7Ci0K
LSAgICBHc3RDYXBzKiBjYXBzID0gYXBwZW5kUGlwZWxpbmUuYXBwc2lua0NhcHMoKTsKLSAgICBB
U1NFUlQoY2Fwcyk7Ci0gICAgR1NUX0RFQlVHKCJEZW11eGVyIHBhcnNlZCBtZXRhZGF0YSB3aXRo
IHRyYWNrIElEOiAlcywgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIG5ld1RyYWNrLT5pZCgpLnN0
cmluZygpLmxhdGluMSgpLmRhdGEoKSwgY2Fwcyk7CiAKICAgICAvLyBXZSBzZXQgdGhlIHNpemUg
b2YgdGhlIHZpZGVvIG9ubHkgZm9yIHRoZSBmaXJzdCBpbml0aWFsaXphdGlvbiBzZWdtZW50Lgog
ICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWw6IE5vcm1hbGx5IHRoZSB2aWRlbyBzaXplIGRlcGVu
ZHMgb24gdGhlIGZyYW1lcyBhcnJpdmluZwogICAgIC8vIGF0IHRoZSBzaW5rIGluIHRoZSBwbGF5
YmFjayBwaXBlbGluZSwgbm90IGluIHRoZSBhcHBlbmQgcGlwZWxpbmU7IGJ1dCB3ZSBzdGlsbAog
ICAgIC8vIHdhbnQgdG8gcmVwb3J0IGFuIGluaXRpYWwgc2l6ZSBmb3IgSEFWRV9NRVRBREFUQSAo
Zmlyc3QgaW5pdGlhbGl6YXRpb24gc2VnbWVudCkuCi0gICAgaWYgKG1fdmlkZW9TaXplLmlzRW1w
dHkoKSAmJiBkb0NhcHNIYXZlVHlwZShjYXBzLCBHU1RfVklERU9fQ0FQU19UWVBFX1BSRUZJWCkp
IHsKLSAgICAgICAgaWYgKGF1dG8gc2l6ZSA9IGdldFZpZGVvUmVzb2x1dGlvbkZyb21DYXBzKGNh
cHMpKSB7Ci0gICAgICAgICAgICBtX3ZpZGVvU2l6ZSA9ICpzaXplOwotICAgICAgICAgICAgR1NU
X0RFQlVHKCJTZXR0aW5nIGluaXRpYWwgdmlkZW8gc2l6ZTogJWd4JWciLCBtX3ZpZGVvU2l6ZS53
aWR0aCgpLCBtX3ZpZGVvU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIH0KLSAgICB9CisKKyAgICBp
ZiAoIW1fdmlkZW9TaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0RF
QlVHKCJTZXR0aW5nIGluaXRpYWwgdmlkZW8gc2l6ZTogJWd4JWciLCB2aWRlb1NpemUud2lkdGgo
KSwgdmlkZW9TaXplLmhlaWdodCgpKTsKKyAgICBtX3ZpZGVvU2l6ZSA9IHZpZGVvU2l6ZTsKIH0K
IAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnN0YXJ0U291cmNlKGNvbnN0
IFZlY3RvcjxSZWZQdHI8TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcj4+JiB0cmFja3MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaApp
bmRleCA1ZjIyYTUxZTk1ZmEyZGE0NGUzMjA4YWJiNjZkYzNmZWVkNGQ3ZTYwLi45MjI2NWU4N2Mz
OWNlYTE5MTQ0NzAyMTUzMmYyYzgxMjAzYzRhZjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgKQEAgLTcxLDcgKzcxLDcgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSk7
CiAgICAgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KiBtZWRpYVNvdXJjZVByaXZhdGVDbGllbnQo
KSB7IHJldHVybiBtX21lZGlhU291cmNlLmdldCgpOyB9CiAKLSAgICB2b2lkIHRyYWNrRGV0ZWN0
ZWQoQXBwZW5kUGlwZWxpbmUmLCBSZWZQdHI8V2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZT4pOwor
ICAgIHZvaWQgc2V0SW5pdGlhbFZpZGVvU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKIAogICAgIHZv
aWQgYmxvY2tEdXJhdGlvbkNoYW5nZXMoKTsKICAgICB2b2lkIHVuYmxvY2tEdXJhdGlvbkNoYW5n
ZXMoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCA0YzA2M2FlM2U4ZDAyN2IyZmY4ZjVhYTYzZWU1ZGJiYTkzYmYyNDQ5Li5m
ZjIwOTk2YmE2NWI2MTNhOWUxNjQ2ZWNmMDM3ZDI5MjllYWVjZjc4IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMjEtMDgtMTIgIEFsaWNpYSBCb3lhIEdhcmPDrWEgIDxhYm95YUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtNU0VdW0dTdHJlYW1lcl0gSW1wbGVtZW50IG11bHRpLXRyYWNrIHN1cHBv
cnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTA3
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0
ZSBleHBlY3RhdGlvbnMgYW5kIHJlYmFzZWxpbmUgb25lIHRlc3QgaXMgd2hpY2ggdGhlIGJ1ZmZl
cmVkCisgICAgICAgIHJhbmdlcyBoYXZlIGNoYW5nZWQgc2xpZ2h0bHkgZHVlIHRvIHRoZSBhdWRp
byB0cmFjayBwcmV2aW91c2x5CisgICAgICAgIGRpc2NhcmRlZCBub3cgYmVpbmcgcGFyc2VkLgor
CisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBs
YXRmb3JtL2dsaWIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2Uv
bWVkaWFzb3VyY2UtcmVtb3ZlLWV4cGVjdGVkLnR4dDoKKwogMjAyMS0wOC0wOCAgV2Vuc29uIEhz
aWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBjYXJldC1jb2xvciBkb2Vz
IG5vdCB3b3JrIG9uIGZpcnN0IGNsaWNrIGluIGlvcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xp
Yi9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGFhMTlkNjI5ZTE2YmYyYmE5M2I4MWUxZjAwYzI1YTRj
YzZmMDY0NTIuLjY1YzQ0Mzc5ZGJlMjJmOGE2YTAwZmI3NjA2Mzk5ZDZhNjM4MzEwNzUgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucworKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTU4MSw3ICs1ODEs
NiBAQCB3ZWJraXQub3JnL2IvMjI4ODIwIG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS13ZWJtLW9w
dXMtcGFydGlhbC1hYm9ydC5odG1sIFsgRmFpbAogd2Via2l0Lm9yZy9iLzIyNDc2NyBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jaGFuZ2V0
eXBlLXBsYXktaW1wbGljaXQuaHRtbCBbIENyYXNoIFBhc3MgXQogCiAjIFNlZSBhbHNvIGJ1ZyAj
MTc1NTc4Lgotd2Via2l0Lm9yZy9iLzE2NzEwOCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1hY3RpdmVzb3VyY2VidWZmZXJzLmh0bWwgWyBG
YWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xNjcxMDggaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYXZ0cmFja3MuaHRtbCBbIEZhaWx1cmUgXQog
d2Via2l0Lm9yZy9iLzE2NzEwOCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlh
LXNvdXJjZS9tZWRpYXNvdXJjZS1idWZmZXJlZC5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3Jn
L2IvMTY3MTA4IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21l
ZGlhc291cmNlLWNoYW5nZXR5cGUuaHRtbCBbIEZhaWx1cmUgQ3Jhc2ggXQpAQCAtNjEwLDcgKzYw
OSw2IEBAIHdlYmtpdC5vcmcvYi8xNTQzOTAgaHR0cC90ZXN0cy9tZWRpYS9obHMvaGxzLWF1ZGlv
LXRyYWNrcy1sb2NhbGUtc2VsZWN0aW9uLmh0bWwKIAogd2Via2l0Lm9yZy9iLzE5OTYxNyBodHRw
L3Rlc3RzL21lZGlhL2hscy9obHMtdmlkZW8tcmVzaXplLmh0bWwgWyBTa2lwIF0KIAotd2Via2l0
Lm9yZy9iLzIyNzI1OCBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWhhcy1hdWRpby12
aWRlby5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMjI3MjU4IG1lZGlhL21lZGlhLXNv
dXJjZS9tZWRpYS1zb3VyY2Utc2Vlay11bmJ1ZmZlcmVkLmh0bWwgWyBUaW1lb3V0IF0KIAogd2Vi
a2l0Lm9yZy9iLzIyNzY2MSBodHRwL3Rlc3RzL21lZGlhL2hscy9obHMtd2VidnR0LXNlZWstYmFj
a3dhcmRzLmh0bWwgWyBUaW1lb3V0IF0KQEAgLTIyMzcsNyArMjIzNSw2IEBAIHdlYmtpdC5vcmcv
Yi8xMTMxMjcgbWVkaWEvdHJhY2svdHJhY2stcHJlZmVyLWNhcHRpb25zLmh0bWwgWyBUaW1lb3V0
IF0KIAogd2Via2l0Lm9yZy9iLzE2ODM3MyBodHRwL3Rlc3RzL21lZGlhL3RyYWNrLWluLWJhbmQt
aGxzLW1ldGFkYXRhLWNyYXNoLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8xNjgzNzMg
bWVkaWEvbWVkaWEtZnVsbHNjcmVlbi1sb29wLWlubGluZS5odG1sIFsgVGltZW91dCBdCi13ZWJr
aXQub3JnL2IvMTY4MzczIG1lZGlhL21lZGlhLXNvdXJjZS9vbmx5LWJjcDQ3LWxhbmd1YWdlLXRh
Z3MtYWNjZXB0ZWQtYXMtdmFsaWQuaHRtbCBbIENyYXNoIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9i
LzE3NDI0MiBtZWRpYS9tZWRpYS1mdWxsc2NyZWVuLXBhdXNlLWlubGluZS5odG1sIFsgU2tpcCBd
CiB3ZWJraXQub3JnL2IvMTgyMTA4IGh0dHAvdGVzdHMvbWVkaWEvaGxzL2hscy13ZWJ2dHQtdHJh
Y2tzLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8xMzczMTEgbWVkaWEvdmlkZW8tZnVs
bHNjcmVlbi1vbmx5LXBsYXliYWNrLmh0bWwgWyBUaW1lb3V0IENyYXNoIF0KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtcmVtb3ZlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2dsaWIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1z
b3VyY2UvbWVkaWFzb3VyY2UtcmVtb3ZlLWV4cGVjdGVkLnR4dAppbmRleCA2ZDVlM2RmZmJjMDU1
YTgwNmYzYTI2MTNkMGMxNWRhOTUzYTg1NDAyLi45ZjU4MTI5N2Y4MjNjOWFhMmEwNzhiZGZjNTY5
ZTk2ZmMwMGVmN2E4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291cmNlLXJlbW92
ZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1yZW1vdmUtZXhw
ZWN0ZWQudHh0CkBAIC0xMSw4ICsxMSw4IEBAIFBBU1MgVGVzdCByZW1vdmUgd2hpbGUgdXBkYXRl
IHBlbmRpbmcuCiBQQVNTIFRlc3QgYWJvcnRpbmcgYSByZW1vdmUgb3BlcmF0aW9uLgogUEFTUyBU
ZXN0IHJlbW92ZSB3aXRoIGEgc3RhcnQgYXQgdGhlIGR1cmF0aW9uLgogUEFTUyBUZXN0IHJlbW92
ZSB0cmFuc2l0aW9uaW5nIHJlYWR5U3RhdGUgZnJvbSAnZW5kZWQnIHRvICdvcGVuJy4KLUZBSUwg
VGVzdCByZW1vdmluZyBhbGwgYXBwZW5kZWQgZGF0YS4gYXNzZXJ0X2VxdWFsczogSW5pdGlhbCBi
dWZmZXJlZCByYW5nZS4gZXhwZWN0ZWQgInsgWzAuMDk1LCA2LjQyMykgfSIgYnV0IGdvdCAieyBb
MC4wMDAsIDYuNDIzKSB9IgotRkFJTCBUZXN0IHJlbW92aW5nIGJlZ2lubmluZyBvZiBhcHBlbmRl
ZCBkYXRhLiBhc3NlcnRfZXF1YWxzOiBJbml0aWFsIGJ1ZmZlcmVkIHJhbmdlLiBleHBlY3RlZCAi
eyBbMC4wOTUsIDYuNDIzKSB9IiBidXQgZ290ICJ7IFswLjAwMCwgNi40MjMpIH0iCi1GQUlMIFRl
c3QgcmVtb3ZpbmcgdGhlIG1pZGRsZSBvZiBhcHBlbmRlZCBkYXRhLiBhc3NlcnRfZXF1YWxzOiBJ
bml0aWFsIGJ1ZmZlcmVkIHJhbmdlLiBleHBlY3RlZCAieyBbMC4wOTUsIDYuNDIzKSB9IiBidXQg
Z290ICJ7IFswLjAwMCwgNi40MjMpIH0iCi1GQUlMIFRlc3QgcmVtb3ZpbmcgdGhlIGVuZCBvZiBh
cHBlbmRlZCBkYXRhLiBhc3NlcnRfZXF1YWxzOiBJbml0aWFsIGJ1ZmZlcmVkIHJhbmdlLiBleHBl
Y3RlZCAieyBbMC4wOTUsIDYuNDIzKSB9IiBidXQgZ290ICJ7IFswLjAwMCwgNi40MjMpIH0iCitG
QUlMIFRlc3QgcmVtb3ZpbmcgYWxsIGFwcGVuZGVkIGRhdGEuIGFzc2VydF9lcXVhbHM6IEluaXRp
YWwgYnVmZmVyZWQgcmFuZ2UuIGV4cGVjdGVkICJ7IFswLjA5NSwgNi41NDgpIH0iIGJ1dCBnb3Qg
InsgWzAuMDAwLCA2LjU0OCkgfSIKK0ZBSUwgVGVzdCByZW1vdmluZyBiZWdpbm5pbmcgb2YgYXBw
ZW5kZWQgZGF0YS4gYXNzZXJ0X2VxdWFsczogSW5pdGlhbCBidWZmZXJlZCByYW5nZS4gZXhwZWN0
ZWQgInsgWzAuMDk1LCA2LjU0OCkgfSIgYnV0IGdvdCAieyBbMC4wMDAsIDYuNTQ4KSB9IgorRkFJ
TCBUZXN0IHJlbW92aW5nIHRoZSBtaWRkbGUgb2YgYXBwZW5kZWQgZGF0YS4gYXNzZXJ0X2VxdWFs
czogSW5pdGlhbCBidWZmZXJlZCByYW5nZS4gZXhwZWN0ZWQgInsgWzAuMDk1LCA2LjU0OCkgfSIg
YnV0IGdvdCAieyBbMC4wMDAsIDYuNTQ4KSB9IgorRkFJTCBUZXN0IHJlbW92aW5nIHRoZSBlbmQg
b2YgYXBwZW5kZWQgZGF0YS4gYXNzZXJ0X2VxdWFsczogSW5pdGlhbCBidWZmZXJlZCByYW5nZS4g
ZXhwZWN0ZWQgInsgWzAuMDk1LCA2LjU0OCkgfSIgYnV0IGdvdCAieyBbMC4wMDAsIDYuNTQ4KSB9
IgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436159</attachid>
            <date>2021-08-23 01:08:09 -0700</date>
            <delta_ts>2021-08-23 04:12:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229072-20210823100807.patch</filename>
            <type>text/plain</type>
            <size>63730</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTRiYzFhZThhNjljMDE1
MWM5MTVkMDNjZTBjNDQ4OTA1YTc5ZWE5OC4uOTYzMmEwNzJhNDY1ODdiYmNmYjY2ZDQ1Y2IwMDQ2
NWYxYjgwOGQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDIxLTA4LTEyICBBbGlj
aWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbTVNFXVtHU3Ry
ZWFtZXJdIEltcGxlbWVudCBtdWx0aS10cmFjayBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjkwNzIKKworICAgICAgICBSZXZpZXdlZCBi
eSBYYWJpZXIgUm9kcmlndWV6LUNhbHZhci4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgc3Vw
cG9ydCBmb3IgU291cmNlQnVmZmVyIGhhdmluZyBtb3JlIHRoYW4gb25lIHRyYWNrIGluCisgICAg
ICAgIHRoZSBHU3RyZWFtZXIgcG9ydC4KKworICAgICAgICBUaGlzIGZpeGVzIHRoZSBmb2xsb3dp
bmcgTGF5b3V0VGVzdHM6CisKKyAgICAgICAgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYWN0aXZlc291cmNlYnVmZmVycy5odG1sCisgICAg
ICAgIG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtaGFzLWF1ZGlvLXZpZGVvLmh0bWwK
KyAgICAgICAgbWVkaWEvbWVkaWEtc291cmNlL29ubHktYmNwNDctbGFuZ3VhZ2UtdGFncy1hY2Nl
cHRlZC1hcy12YWxpZC5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvR1N0cmVhbWVyQ29tbW9uLmg6CisgICAgICAgIChHc3RJdGVyYXRvckFkYXB0b3I6OkdzdEl0
ZXJhdG9yQWRhcHRvcik6CisgICAgICAgIChHc3RJdGVyYXRvckFkYXB0b3I6Oml0ZXJhdG9yOjpp
dGVyYXRvcik6CisgICAgICAgIChHc3RJdGVyYXRvckFkYXB0b3I6Oml0ZXJhdG9yOjpvcGVyYXRv
ciopOgorICAgICAgICAoR3N0SXRlcmF0b3JBZGFwdG9yOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6
CisgICAgICAgIChHc3RJdGVyYXRvckFkYXB0b3I6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKEdzdEl0ZXJhdG9yQWRhcHRvcjo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoR3N0SXRlcmF0b3JBZGFwdG9yOjpiZWdpbik6CisgICAgICAgIChHc3RJdGVyYXRvckFkYXB0
b3I6OmVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBl
bmRQaXBlbGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6QXBwZW5k
UGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6On5BcHBlbmRQaXBl
bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6cGFyc2VEZW11eGVyU3Jj
UGFkQ2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6YXBwc2lua0NhcHND
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpoYW5kbGVFbmRPZkFw
cGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6YXBwc2lua05ld1NhbXBs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6ZGlkUmVjZWl2ZUluaXRpYWxp
emF0aW9uU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6Y29uc3Vt
ZUFwcHNpbmtzQXZhaWxhYmxlU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBl
bGluZTo6cmVzZXRQYXJzZXJTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGlu
ZTo6aGFuZGxlQXBwc2lua05ld1NhbXBsZUZyb21TdHJlYW1pbmdUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlT3B0aW9uYWxQYXJzZXJGb3JGb3JtYXQpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwZW5kUGlwZWxpbmU6OmdlbmVyYXRlVHJhY2tJZCk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBlbmRQaXBlbGluZTo6dHJ5Q3JlYXRlVHJhY2tGcm9tUGFkKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGVuZFBpcGVsaW5lOjp0cnlNYXRjaFBhZFRvRXhpc3RpbmdUcmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6bGlua1BhZFdpdGhUcmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBlbmRQaXBlbGluZTo6bWFrZVdlYktpdFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGVuZFBpcGVsaW5lOjpUcmFjazo6aW5pdGlhbGl6ZUVsZW1lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpob29rVHJhY2tFdmVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwZW5kUGlwZWxpbmU6OnN0cmVhbVR5cGVUb1N0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBlbmRQaXBlbGluZTo6aWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5k
UGlwZWxpbmU6OnRyYWNrSWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlw
ZWxpbmU6OmNvbnN1bWVBcHBzaW5rQXZhaWxhYmxlU2FtcGxlcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmtG
cm9tU3RyZWFtaW5nVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBp
cGVsaW5lOjpjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2luayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6ZGlzY29ubmVjdERlbXV4ZXJTcmNQYWRGcm9tQXBw
c2lua0Zyb21BbnlUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVu
ZFBpcGVsaW5lOjpzb3VyY2VCdWZmZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVu
ZFBpcGVsaW5lOjpUcmFjazo6VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxp
bmU6OmFwcHNyYyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6YXBwc2lua0Nh
cHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnRyYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjphcHBzaW5rKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpkZW11eGVyU3JjUGFkQ2Fw
cyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZXRJbml0aWFsVmlkZW9TaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dHJhY2tEZXRlY3Rl
ZCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaDoKKwogMjAyMS0wOC0wOSAgQWxpY2lhIEJv
eWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW01TRV1bR1N0cmVhbWVy
XSBVcGRhdGUgdHJhY2tzIHN5bmNocm9ub3VzbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaAppbmRl
eCBiNjU3MzljOGQzNDc0ZWE4ZWUwNGQ3ZjFlZWY5M2VlYzBiNTlhZWVmLi4yMmI5OGYxZjRmOWMx
ZGZkNjI1NjkwOGY3YmIyN2UxMmYxZWE0MzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCkBA
IC0zMzUsNCArMzM1LDcxIEBAIGlubGluZSB2b2lkIGdzdFBhZFN0cmVhbVVubG9jayhHc3RQYWQq
IHBhZCkgeyBHU1RfUEFEX1NUUkVBTV9VTkxPQ0socGFkKTsgfQogdXNpbmcgR3N0T2JqZWN0TG9j
a2VyID0gRXh0ZXJuYWxMb2NrZXI8dm9pZCwgZ3N0T2JqZWN0TG9jaywgZ3N0T2JqZWN0VW5sb2Nr
PjsKIHVzaW5nIEdzdFBhZFN0cmVhbUxvY2tlciA9IEV4dGVybmFsTG9ja2VyPEdzdFBhZCwgZ3N0
UGFkU3RyZWFtTG9jaywgZ3N0UGFkU3RyZWFtVW5sb2NrPjsKIAordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitjbGFzcyBHc3RJdGVyYXRvckFkYXB0b3IgeworcHVibGljOgorICAgIEdzdEl0ZXJhdG9y
QWRhcHRvcihHVW5pcXVlUHRyPEdzdEl0ZXJhdG9yPiYmIGl0ZXIpCisgICAgICAgIDogbV9pdGVy
KFdURk1vdmUoaXRlcikpCisgICAgeyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVi
bGljOgorICAgICAgICBpdGVyYXRvcihHc3RJdGVyYXRvciogaXRlciwgZ2Jvb2xlYW4gZG9uZSA9
IEZBTFNFKQorICAgICAgICAgICAgOiBtX2l0ZXIoaXRlcikKKyAgICAgICAgICAgICwgbV9kb25l
KGRvbmUpCisgICAgICAgIHsgfQorCisgICAgICAgIFQqIG9wZXJhdG9yKigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRWYWx1ZTsKKyAgICAgICAgfQorCisgICAgICAg
IGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgR1ZhbHVlIHZh
bHVlID0gR19WQUxVRV9JTklUOworICAgICAgICAgICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4
dChtX2l0ZXIsICZ2YWx1ZSkpIHsKKyAgICAgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgor
ICAgICAgICAgICAgICAgIG1fY3VycmVudFZhbHVlID0gc3RhdGljX2Nhc3Q8VCo+KGdfdmFsdWVf
Z2V0X29iamVjdCgmdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBnX3ZhbHVlX3Jlc2V0KCZ2YWx1
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEdTVF9JVEVSQVRP
Ul9ET05FOgorICAgICAgICAgICAgICAgIG1fZG9uZSA9IFRSVUU7CisgICAgICAgICAgICAgICAg
bV9jdXJyZW50VmFsdWUgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRURfV0lUSF9N
RVNTQUdFKCJVbmV4cGVjdGVkIGl0ZXJhdG9yIGludmFsaWRhdGlvbiIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1faXRlciA9PSBvdGhlci5tX2l0ZXIgJiYgbV9kb25lID09IG90aGVyLm1fZG9uZTsK
KyAgICAgICAgfQorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVy
KSB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
R3N0SXRlcmF0b3IqIG1faXRlcjsKKyAgICAgICAgZ2Jvb2xlYW4gbV9kb25lOworICAgICAgICBU
KiBtX2N1cnJlbnRWYWx1ZSB7IG51bGxwdHIgfTsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVn
aW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3N0YXJ0ZWQpOworICAgICAgICBtX3N0YXJ0
ZWQgPSB0cnVlOworICAgICAgICBpdGVyYXRvciBpdGVyIHsgbV9pdGVyLmdldCgpIH07CisgICAg
ICAgIHJldHVybiArK2l0ZXI7CisgICAgfQorCisgICAgaXRlcmF0b3IgZW5kKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB7IG1faXRlci5nZXQoKSwgVFJVRSB9OworICAgIH0KKworcHJpdmF0ZToK
KyAgICBHVW5pcXVlUHRyPEdzdEl0ZXJhdG9yPiBtX2l0ZXI7CisgICAgYm9vbCBtX3N0YXJ0ZWQg
eyBmYWxzZSB9OworfTsKKwogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVs
aW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2Uv
QXBwZW5kUGlwZWxpbmUuY3BwCmluZGV4IDE2YWI5ZmU1MjY3N2QwODc3MWMwZTM1MGUzYjc2MDQx
ZWZhYWVkYTQuLjNmZTdhNzFjODRmMTQxNjhhZmMwMjg0YWU1YWEzYmFjZTM5MThkNDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBw
ZW5kUGlwZWxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuY3BwCkBAIC0yMCw2ICsyMCw4IEBACiAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBcHBlbmRQaXBlbGluZS5oIgorI2luY2x1ZGUgIkFi
b3J0YWJsZVRhc2tRdWV1ZS5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1l
ci5oIgogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVE
SUFfU09VUkNFKQogCkBAIC0xMDIsOSArMTA0LDcgQEAgc3RhdGljIHZvaWQgYXNzZXJ0ZWRFbGVt
ZW50U2V0U3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGUgZGVzaXJlZFN0YXRlKQog
QXBwZW5kUGlwZWxpbmU6OkFwcGVuZFBpcGVsaW5lKFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFt
ZXImIHNvdXJjZUJ1ZmZlclByaXZhdGUsIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSYg
cGxheWVyUHJpdmF0ZSkKICAgICA6IG1fc291cmNlQnVmZmVyUHJpdmF0ZShzb3VyY2VCdWZmZXJQ
cml2YXRlKQogICAgICwgbV9wbGF5ZXJQcml2YXRlKCZwbGF5ZXJQcml2YXRlKQotICAgICwgbV9p
ZCgwKQogICAgICwgbV93YXNCdXNBbHJlYWR5Tm90aWZpZWRPZkF2YWlsYWJsZVNhbXBsZXMoZmFs
c2UpCi0gICAgLCBtX3N0cmVhbVR5cGUoVW5rbm93bikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIHN0ZDo6Y2FsbF9vbmNlKHNfc3RhdGljSW5pdGlhbGl6YXRpb25GbGFnLCBB
cHBlbmRQaXBlbGluZTo6c3RhdGljSW5pdGlhbGl6YXRpb24pOwpAQCAtMTUwLDc5ICsxNTAsMjIg
QEAgQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFBpcGVsaW5lKFNvdXJjZUJ1ZmZlclByaXZhdGVHU3Ry
ZWFtZXImIHNvdXJjZUJ1ZmZlclByaXZhdGUKICAgICBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogCi0gICAgbV9hcHBzaW5rID0gbWFrZUdTdHJlYW1lckVsZW1lbnQoImFwcHNp
bmsiLCBudWxscHRyKTsKLQotICAgIGdzdF9hcHBfc2lua19zZXRfZW1pdF9zaWduYWxzKEdTVF9B
UFBfU0lOSyhtX2FwcHNpbmsuZ2V0KCkpLCBUUlVFKTsKLSAgICBnc3RfYmFzZV9zaW5rX3NldF9z
eW5jKEdTVF9CQVNFX1NJTksobV9hcHBzaW5rLmdldCgpKSwgRkFMU0UpOwotICAgIGdzdF9iYXNl
X3Npbmtfc2V0X2FzeW5jX2VuYWJsZWQoR1NUX0JBU0VfU0lOSyhtX2FwcHNpbmsuZ2V0KCkpLCBG
QUxTRSk7IC8vIE5vIHByZXJvbGxzLCBubyBhc3luYyBzdGF0ZSBjaGFuZ2VzLgotICAgIGdzdF9i
YXNlX3Npbmtfc2V0X2Ryb3Bfb3V0X29mX3NlZ21lbnQoR1NUX0JBU0VfU0lOSyhtX2FwcHNpbmsu
Z2V0KCkpLCBGQUxTRSk7Ci0gICAgZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9zYW1wbGVfZW5hYmxl
ZChHU1RfQkFTRV9TSU5LKG1fYXBwc2luay5nZXQoKSksIEZBTFNFKTsKLQotICAgIEdSZWZQdHI8
R3N0UGFkPiBhcHBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFk
KG1fYXBwc2luay5nZXQoKSwgInNpbmsiKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChhcHBzaW5r
UGFkLmdldCgpLCAibm90aWZ5OjpjYXBzIiwgR19DQUxMQkFDSygrW10oR09iamVjdCosIEdQYXJh
bVNwZWMqLCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpIHsKLSAgICAgICAgaWYgKGlz
TWFpblRocmVhZCgpKSB7Ci0gICAgICAgICAgICAvLyBXaGVuIGNoYW5naW5nIHRoZSBwaXBlbGlu
ZSBzdGF0ZSBkb3duIHRvIFJFQURZIHRoZSBkZW11eGVyIGlzIHVubGlua2VkIGFuZCB0aGlzIHRy
aWdnZXJzIGEgY2FwcyBub3RpZmljYXRpb24KLSAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIGFw
cHNpbmsgbG9zZXMgaXRzIHByZXZpb3VzbHkgbmVnb3RpYXRlZCBjYXBzLiBXZSBhcmUgbm90IGlu
dGVyZXN0ZWQgaW4gdGhlc2UgdW5uZWdvdGlhdGVkIGNhcHMuCi0jaWZuZGVmIE5ERUJVRwotICAg
ICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRf
c3RhdGljX3BhZChhcHBlbmRQaXBlbGluZS0+bV9hcHBzaW5rLmdldCgpLCAic2luayIpKTsKLSAg
ICAgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9j
dXJyZW50X2NhcHMocGFkLmdldCgpKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWNhcHMpOwotI2Vu
ZGlmCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGUgc3Ry
ZWFtaW5nIHRocmVhZCBoYXMganVzdCByZWNlaXZlZCBhIG5ldyBjYXBzIGFuZCBpcyBhYm91dCB0
byBsZXQgc2FtcGxlcyB1c2luZyB0aGUKLSAgICAgICAgLy8gbmV3IGNhcHMgZmxvdy4gTGV0J3Mg
YmxvY2sgaXQgdW50aWwgdGhlIG1haW4gdGhyZWFkIGhhcyBjb25zdW1lZCB0aGUgc2FtcGxlcyB3
aXRoIHRoZSBvbGQKLSAgICAgICAgLy8gY2FwcyBhbmQgaGFzIHByb2Nlc3NlZCB0aGUgY2FwcyBj
aGFuZ2UuCi0gICAgICAgIGFwcGVuZFBpcGVsaW5lLT5tX3Rhc2tRdWV1ZS5lbnF1ZXVlVGFza0Fu
ZFdhaXQ8QWJvcnRhYmxlVGFza1F1ZXVlOjpWb2lkPihbYXBwZW5kUGlwZWxpbmVdKCkgewotICAg
ICAgICAgICAgYXBwZW5kUGlwZWxpbmUtPmFwcHNpbmtDYXBzQ2hhbmdlZCgpOwotICAgICAgICAg
ICAgcmV0dXJuIEFib3J0YWJsZVRhc2tRdWV1ZTo6Vm9pZCgpOwotICAgICAgICB9KTsKLSAgICB9
KSwgdGhpcyk7Ci0KICNpZiAhTE9HX0RJU0FCTEVECiAgICAgR1JlZlB0cjxHc3RQYWQ+IGRlbXV4
ZXJQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9kZW11eC5nZXQo
KSwgInNpbmsiKSk7CiAgICAgbV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlv
bi5hcHBlbmRQaXBlbGluZSA9IHRoaXM7CiAgICAgbV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJv
YmVJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbiA9ICJkZW11eGVyIGRhdGEgZW50ZXJpbmciOwogICAg
IG1fZGVtdXhlckRhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24ucHJvYmVJZCA9IGdzdF9w
YWRfYWRkX3Byb2JlKGRlbXV4ZXJQYWQuZ2V0KCksIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIs
IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UGFkUHJvYmVDYWxsYmFjaz4oYXBwZW5kUGlwZWxpbmVQYWRQ
cm9iZURlYnVnSW5mb3JtYXRpb24pLCAmbV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZv
cm1hdGlvbiwgbnVsbHB0cik7Ci0gICAgbV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZv
cm1hdGlvbi5hcHBlbmRQaXBlbGluZSA9IHRoaXM7Ci0gICAgbV9hcHBzaW5rRGF0YUVudGVyaW5n
UGFkUHJvYmVJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbiA9ICJhcHBzaW5rIGRhdGEgZW50ZXJpbmci
OwotICAgIG1fYXBwc2lua0RhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24ucHJvYmVJZCA9
IGdzdF9wYWRfYWRkX3Byb2JlKGFwcHNpbmtQYWQuZ2V0KCksIEdTVF9QQURfUFJPQkVfVFlQRV9C
VUZGRVIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UGFkUHJvYmVDYWxsYmFjaz4oYXBwZW5kUGlwZWxp
bmVQYWRQcm9iZURlYnVnSW5mb3JtYXRpb24pLCAmbV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJv
YmVJbmZvcm1hdGlvbiwgbnVsbHB0cik7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShFTkNSWVBURURf
TUVESUEpCi0gICAgbV9hcHBzaW5rUGFkRXZlbnRQcm9iZUluZm9ybWF0aW9uLmFwcGVuZFBpcGVs
aW5lID0gdGhpczsKLSAgICBtX2FwcHNpbmtQYWRFdmVudFByb2JlSW5mb3JtYXRpb24uZGVzY3Jp
cHRpb24gPSAiYXBwc2luayBldmVudCBwcm9iZSI7Ci0gICAgbV9hcHBzaW5rUGFkRXZlbnRQcm9i
ZUluZm9ybWF0aW9uLnByb2JlSWQgPSBnc3RfcGFkX2FkZF9wcm9iZShhcHBzaW5rUGFkLmdldCgp
LCBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTSwgcmVpbnRlcnByZXRfY2FzdDxH
c3RQYWRQcm9iZUNhbGxiYWNrPihhcHBlbmRQaXBlbGluZUFwcHNpbmtQYWRFdmVudFByb2JlKSwg
Jm1fYXBwc2lua1BhZEV2ZW50UHJvYmVJbmZvcm1hdGlvbiwgbnVsbHB0cik7CiAjZW5kaWYKIAot
ICAgIC8vIFRoZXNlIHNpZ25hbHMgd29uJ3QgYmUgY29ubmVjdGVkIG91dHNpZGUgb2YgdGhlIGxp
ZmV0aW1lIG9mICJ0aGlzIi4KLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fZGVtdXguZ2V0KCksICJw
YWQtYWRkZWQiLCBHX0NBTExCQUNLKCtbXShHc3RFbGVtZW50KiwgR3N0UGFkKiBkZW11eGVyU3Jj
UGFkLCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpIHsKLSAgICAgICAgYXBwZW5kUGlw
ZWxpbmUtPmNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rRnJvbVN0cmVhbWluZ1RocmVhZChk
ZW11eGVyU3JjUGFkKTsKLSAgICB9KSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2Rl
bXV4LmdldCgpLCAicGFkLXJlbW92ZWQiLCBHX0NBTExCQUNLKCtbXShHc3RFbGVtZW50KiwgR3N0
UGFkKiBkZW11eGVyU3JjUGFkLCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpIHsKLSAg
ICAgICAgYXBwZW5kUGlwZWxpbmUtPmRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNpbmtG
cm9tQW55VGhyZWFkKGRlbXV4ZXJTcmNQYWQpOwotICAgIH0pLCB0aGlzKTsKKyAgICAvLyBUaGVz
ZSBzaWduYWxzIHdvbid0IG91dGxpdmUgdGhlIGxpZmV0aW1lIG9mIGB0aGlzYC4KICAgICBnX3Np
Z25hbF9jb25uZWN0KG1fZGVtdXguZ2V0KCksICJuby1tb3JlLXBhZHMiLCBHX0NBTExCQUNLKCtb
XShHc3RFbGVtZW50KiwgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5lKSB7CiAgICAgICAg
IEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgICAgICBHU1RfREVCVUcoIlBvc3Rpbmcgbm8t
bW9yZS1wYWRzIHRhc2sgdG8gbWFpbiB0aHJlYWQiKTsKLSAgICAgICAgYXBwZW5kUGlwZWxpbmUt
Pm1fdGFza1F1ZXVlLmVucXVldWVUYXNrKFthcHBlbmRQaXBlbGluZV0oKSB7CisgICAgICAgIGFw
cGVuZFBpcGVsaW5lLT5tX3Rhc2tRdWV1ZS5lbnF1ZXVlVGFza0FuZFdhaXQ8QWJvcnRhYmxlVGFz
a1F1ZXVlOjpWb2lkPihbYXBwZW5kUGlwZWxpbmVdKCkgewogICAgICAgICAgICAgYXBwZW5kUGlw
ZWxpbmUtPmRpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoKTsKKyAgICAgICAgICAgIHJl
dHVybiBBYm9ydGFibGVUYXNrUXVldWU6OlZvaWQoKTsKICAgICAgICAgfSk7CiAgICAgfSksIHRo
aXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9hcHBzaW5rLmdldCgpLCAibmV3LXNhbXBsZSIs
IEdfQ0FMTEJBQ0soK1tdKEdzdEVsZW1lbnQqIGFwcHNpbmssIEFwcGVuZFBpcGVsaW5lKiBhcHBl
bmRQaXBlbGluZSkgLT4gR3N0Rmxvd1JldHVybiB7Ci0gICAgICAgIGFwcGVuZFBpcGVsaW5lLT5o
YW5kbGVBcHBzaW5rTmV3U2FtcGxlRnJvbVN0cmVhbWluZ1RocmVhZChhcHBzaW5rKTsKLSAgICAg
ICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICAgIH0pLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fYXBwc2luay5nZXQoKSwgImVvcyIsIEdfQ0FMTEJBQ0soK1tdKEdzdEVsZW1lbnQqLCBB
cHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpIHsKLSAgICAgICAgLy8gSnVzdCBpZ25vcmUg
RU9TIHdoZW4gaGF2aW5nIG1vcmUgdGhhbiBvbmUgcGFkLiBJdCBsaWtlbHkgbWVhbnMgdGhhdCBv
bmUgb2YgdGhlIHBhZHMgaXMKLSAgICAgICAgLy8gZ29pbmcgdG8gYmUgcmVtb3ZlZCBhbmQgdGhl
IHJlbWFpbmluZyBvbmUgd2lsbCBiZSByZWF0dGFjaGVkLgotICAgICAgICBpZiAoYXBwZW5kUGlw
ZWxpbmUtPm1fZXJyb3JSZWNlaXZlZCB8fCBhcHBlbmRQaXBlbGluZS0+bV9kZW11eC0+bnVtc3Jj
cGFkcyA+IDEpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgR1NUX0VSUk9SKCJBcHBl
bmRQaXBlbGluZSdzIGFwcHNpbmsgcmVjZWl2ZWQgRU9TLiBUaGlzIGlzIHVzdWFsbHkgY2F1c2Vk
IGJ5IGFuIGludmFsaWQgaW5pdGlhbGl6YXRpb24gc2VnbWVudC4iKTsKLSAgICAgICAgYXBwZW5k
UGlwZWxpbmUtPmhhbmRsZUVycm9yQ29uZGl0aW9uRnJvbVN0cmVhbWluZ1RocmVhZCgpOwotICAg
IH0pLCB0aGlzKTsKIAogICAgIC8vIEFkZF9tYW55IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgYSBy
ZWZlcmVuY2UuIFRoYXQncyB3aHkgd2UgdXNlZCBhbiBhc3NpZ25tZW50IGJlZm9yZS4KICAgICBn
c3RfYmluX2FkZF9tYW55KEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIG1fYXBwc3JjLmdldCgp
LCBtX2RlbXV4LmdldCgpLCBudWxscHRyKTsKQEAgLTI0OSw5ICsxOTIsNiBAQCBBcHBlbmRQaXBl
bGluZTo6fkFwcGVuZFBpcGVsaW5lKCkKICAgICAgICAgZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dh
dGNoKG1fYnVzLmdldCgpKTsKICAgICB9CiAKLSAgICBpZiAobV9hcHBzcmMpCi0gICAgICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2FwcHNyYy5nZXQoKSwgdGhpcyk7
Ci0KICAgICBpZiAobV9kZW11eCkgewogI2lmICFMT0dfRElTQUJMRUQKICAgICAgICAgR1JlZlB0
cjxHc3RQYWQ+IGRlbXV4ZXJQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19w
YWQobV9kZW11eC5nZXQoKSwgInNpbmsiKSk7CkBAIC0yNjEsMTcgKzIwMSwxNSBAQCBBcHBlbmRQ
aXBlbGluZTo6fkFwcGVuZFBpcGVsaW5lKCkKICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9kYXRhKG1fZGVtdXguZ2V0KCksIHRoaXMpOwogICAgIH0KIAotICAgIGlmICht
X2FwcHNpbmspIHsKLSAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IGFwcHNpbmtQYWQgPSBhZG9wdEdS
ZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9hcHBzaW5rLmdldCgpLCAic2luayIpKTsK
KyAgICBmb3IgKHN0ZDo6dW5pcXVlX3B0cjxUcmFjaz4mIHRyYWNrIDogbV90cmFja3MpIHsKKyAg
ICAgICAgR1JlZlB0cjxHc3RQYWQ+IGFwcHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQodHJhY2stPmFwcHNpbmsuZ2V0KCksICJzaW5rIikpOwogICAgICAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEoYXBwc2lua1BhZC5nZXQoKSwgdGhp
cyk7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2FwcHNp
bmsuZ2V0KCksIHRoaXMpOwotCisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
YnlfZGF0YSh0cmFjay0+YXBwc2luay5nZXQoKSwgdGhpcyk7CiAjaWYgIUxPR19ESVNBQkxFRAot
ICAgICAgICBnc3RfcGFkX3JlbW92ZV9wcm9iZShhcHBzaW5rUGFkLmdldCgpLCBtX2FwcHNpbmtE
YXRhRW50ZXJpbmdQYWRQcm9iZUluZm9ybWF0aW9uLnByb2JlSWQpOworICAgICAgICBnc3RfcGFk
X3JlbW92ZV9wcm9iZShhcHBzaW5rUGFkLmdldCgpLCB0cmFjay0+YXBwc2lua0RhdGFFbnRlcmlu
Z1BhZFByb2JlSW5mb3JtYXRpb24ucHJvYmVJZCk7CiAjZW5kaWYKLQogI2lmIEVOQUJMRShFTkNS
WVBURURfTUVESUEpCi0gICAgICAgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlKGFwcHNpbmtQYWQuZ2V0
KCksIG1fYXBwc2lua1BhZEV2ZW50UHJvYmVJbmZvcm1hdGlvbi5wcm9iZUlkKTsKKyAgICAgICAg
Z3N0X3BhZF9yZW1vdmVfcHJvYmUoYXBwc2lua1BhZC5nZXQoKSwgdHJhY2stPmFwcHNpbmtQYWRF
dmVudFByb2JlSW5mb3JtYXRpb24ucHJvYmVJZCk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTM1MSw3
MSArMjg5LDM5IEBAIHZvaWQgQXBwZW5kUGlwZWxpbmU6OmhhbmRsZVN0YXRlQ2hhbmdlTWVzc2Fn
ZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgIH0KIH0KIAotZ2ludCBBcHBlbmRQaXBlbGluZTo6
aWQoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAobV9pZCkKLSAg
ICAgICAgcmV0dXJuIG1faWQ7Ci0KLSAgICBzdGF0aWMgZ2ludCBzX3RvdGFsQXVkaW8gPSAwOwot
ICAgIHN0YXRpYyBnaW50IHNfdG90YWxWaWRlbyA9IDA7Ci0gICAgc3RhdGljIGdpbnQgc190b3Rh
bFRleHQgPSAwOwotCi0gICAgc3dpdGNoIChtX3N0cmVhbVR5cGUpIHsKLSAgICBjYXNlIEF1ZGlv
OgotICAgICAgICBtX2lkID0gKytzX3RvdGFsQXVkaW87Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgVmlkZW86Ci0gICAgICAgIG1faWQgPSArK3NfdG90YWxWaWRlbzsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBUZXh0OgotICAgICAgICBtX2lkID0gKytzX3RvdGFsVGV4dDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBVbmtub3duOgotICAgIGNhc2UgSW52YWxpZDoKLSAgICAgICAgR1NU
X0VSUk9SKCJUcnlpbmcgdG8gZ2V0IGlkIGZvciBhIHBpcGVsaW5lIG9mIFVua25vd24vSW52YWxp
ZCB0eXBlIik7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBHU1RfREVCVUcoInN0cmVhbVR5cGU9JWQsIGlkPSVkIiwgc3RhdGljX2Nh
c3Q8aW50PihtX3N0cmVhbVR5cGUpLCBtX2lkKTsKLQotICAgIHJldHVybiBtX2lkOwotfQotCi12
b2lkIEFwcGVuZFBpcGVsaW5lOjpwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKEdzdENhcHMqIGRlbXV4
ZXJTcmNQYWRDYXBzKQorc3RkOjp0dXBsZTxHUmVmUHRyPEdzdENhcHM+LCBBcHBlbmRQaXBlbGlu
ZTo6U3RyZWFtVHlwZSwgRmxvYXRTaXplPiBBcHBlbmRQaXBlbGluZTo6cGFyc2VEZW11eGVyU3Jj
UGFkQ2FwcyhHc3RDYXBzKiBkZW11eGVyU3JjUGFkQ2FwcykKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogCi0gICAgbV9kZW11eGVyU3JjUGFkQ2FwcyA9IGFkb3B0R1JlZihkZW11eGVy
U3JjUGFkQ2Fwcyk7Ci0gICAgbV9zdHJlYW1UeXBlID0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0
cmVhbWVyOjpVbmtub3duOworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gcGFyc2VkQ2FwcyA9IGRlbXV4
ZXJTcmNQYWRDYXBzOworICAgIFN0cmVhbVR5cGUgc3RyZWFtVHlwZSA9IFN0cmVhbVR5cGU6OlVu
a25vd247CisgICAgRmxvYXRTaXplIHByZXNlbnRhdGlvblNpemU7CiAKLSAgICBjb25zdCBjaGFy
KiBvcmlnaW5hbE1lZGlhVHlwZSA9IGNhcHNNZWRpYVR5cGUobV9kZW11eGVyU3JjUGFkQ2Fwcy5n
ZXQoKSk7CisgICAgY29uc3QgY2hhciogb3JpZ2luYWxNZWRpYVR5cGUgPSBjYXBzTWVkaWFUeXBl
KGRlbXV4ZXJTcmNQYWRDYXBzKTsKICAgICBhdXRvJiBnc3RSZWdpc3RyeVNjYW5uZXIgPSBHU3Ry
ZWFtZXJSZWdpc3RyeVNjYW5uZXJNU0U6OnNpbmdsZXRvbigpOwogICAgIGlmICghZ3N0UmVnaXN0
cnlTY2FubmVyLmlzQ29kZWNTdXBwb3J0ZWQoR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyOjpDb25m
aWd1cmF0aW9uOjpEZWNvZGluZywgb3JpZ2luYWxNZWRpYVR5cGUpKSB7Ci0gICAgICAgIG1fcHJl
c2VudGF0aW9uU2l6ZSA9IEZsb2F0U2l6ZSgpOwotICAgICAgICBtX3N0cmVhbVR5cGUgPSBNZWRp
YVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkludmFsaWQ7Ci0gICAgfSBlbHNlIGlmIChkb0Nh
cHNIYXZlVHlwZShtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpLCBHU1RfVklERU9fQ0FQU19UWVBF
X1BSRUZJWCkpIHsKLSAgICAgICAgbV9wcmVzZW50YXRpb25TaXplID0gZ2V0VmlkZW9SZXNvbHV0
aW9uRnJvbUNhcHMobV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKSkudmFsdWVfb3IoRmxvYXRTaXpl
KCkpOwotICAgICAgICBtX3N0cmVhbVR5cGUgPSBNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFt
ZXI6OlZpZGVvOworICAgICAgICBzdHJlYW1UeXBlID0gU3RyZWFtVHlwZTo6SW52YWxpZDsKKyAg
ICB9IGVsc2UgaWYgKGRvQ2Fwc0hhdmVUeXBlKGRlbXV4ZXJTcmNQYWRDYXBzLCBHU1RfVklERU9f
Q0FQU19UWVBFX1BSRUZJWCkpIHsKKyAgICAgICAgcHJlc2VudGF0aW9uU2l6ZSA9IGdldFZpZGVv
UmVzb2x1dGlvbkZyb21DYXBzKGRlbXV4ZXJTcmNQYWRDYXBzKS52YWx1ZV9vcihGbG9hdFNpemUo
KSk7CisgICAgICAgIHN0cmVhbVR5cGUgPSBTdHJlYW1UeXBlOjpWaWRlbzsKICAgICB9IGVsc2Ug
ewotICAgICAgICBtX3ByZXNlbnRhdGlvblNpemUgPSBGbG9hdFNpemUoKTsKLSAgICAgICAgaWYg
KGRvQ2Fwc0hhdmVUeXBlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCksIEdTVF9BVURJT19DQVBT
X1RZUEVfUFJFRklYKSkKLSAgICAgICAgICAgIG1fc3RyZWFtVHlwZSA9IE1lZGlhU291cmNlU3Ry
ZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW87Ci0gICAgICAgIGVsc2UgaWYgKGRvQ2Fwc0hhdmVUeXBl
KG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCksIEdTVF9URVhUX0NBUFNfVFlQRV9QUkVGSVgpKQot
ICAgICAgICAgICAgbV9zdHJlYW1UeXBlID0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVy
OjpUZXh0OworICAgICAgICBpZiAoZG9DYXBzSGF2ZVR5cGUoZGVtdXhlclNyY1BhZENhcHMsIEdT
VF9BVURJT19DQVBTX1RZUEVfUFJFRklYKSkKKyAgICAgICAgICAgIHN0cmVhbVR5cGUgPSBTdHJl
YW1UeXBlOjpBdWRpbzsKKyAgICAgICAgZWxzZSBpZiAoZG9DYXBzSGF2ZVR5cGUoZGVtdXhlclNy
Y1BhZENhcHMsIEdTVF9URVhUX0NBUFNfVFlQRV9QUkVGSVgpKQorICAgICAgICAgICAgc3RyZWFt
VHlwZSA9IFN0cmVhbVR5cGU6OlRleHQ7CiAgICAgfQorCisgICAgcmV0dXJuIHsgV1RGTW92ZShw
YXJzZWRDYXBzKSwgc3RyZWFtVHlwZSwgV1RGTW92ZShwcmVzZW50YXRpb25TaXplKSB9OwogfQog
Ci12b2lkIEFwcGVuZFBpcGVsaW5lOjphcHBzaW5rQ2Fwc0NoYW5nZWQoKQordm9pZCBBcHBlbmRQ
aXBlbGluZTo6YXBwc2lua0NhcHNDaGFuZ2VkKFRyYWNrJiB0cmFjaykKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogCiAgICAgLy8gQ29uc3VtZSBhbnkgcGVuZGluZyBzYW1wbGVzIHdp
dGggdGhlIHByZXZpb3VzIGNhcHMuCi0gICAgY29uc3VtZUFwcHNpbmtBdmFpbGFibGVTYW1wbGVz
KCk7CisgICAgY29uc3VtZUFwcHNpbmtzQXZhaWxhYmxlU2FtcGxlcygpOwogCi0gICAgR1JlZlB0
cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2Fw
cHNpbmsuZ2V0KCksICJzaW5rIikpOworICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdS
ZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQodHJhY2suYXBwc2luay5nZXQoKSwgInNpbmsi
KSk7CiAgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X2N1
cnJlbnRfY2FwcyhwYWQuZ2V0KCkpKTsKIAogICAgIGlmICghY2FwcykKQEAgLTQyNCwzMiArMzMw
LDMwIEBAIHZvaWQgQXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtDYXBzQ2hhbmdlZCgpCiAgICAgLy8g
SWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IHRpbWUgd2UncmUgcGFyc2luZyBhbiBpbml0aWFsaXph
dGlvbiBzZWdtZW50LCBmYWlsIGlmIHRoZSB0cmFjawogICAgIC8vIGhhcyBhIGRpZmZlcmVudCBj
b2RlYyBvciB0eXBlIChlLmcuIGlmIHdlIHdlcmUgcHJldmlvdXNseSBkZW11eGluZyBhbiBhdWRp
byBzdHJlYW0gYW5kCiAgICAgLy8gc29tZW9uZSBhcHBlbmRzIGEgdmlkZW8gc3RyZWFtKS4KLSAg
ICBpZiAobV9hcHBzaW5rQ2FwcyAmJiBnX3N0cmNtcDAoY2Fwc01lZGlhVHlwZShjYXBzLmdldCgp
KSwgY2Fwc01lZGlhVHlwZShtX2FwcHNpbmtDYXBzLmdldCgpKSkpIHsKLSAgICAgICAgR1NUX1dB
Uk5JTkdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJVc2VyIGFwcGVuZGVkIHRyYWNrIG1ldGFk
YXRhIHdpdGggdHlwZSAnJXMnIGZvciBhIFNvdXJjZUJ1ZmZlciBwcmV2aW91c2x5IGhhbmRsaW5n
ICclcycuIEVycm9yaW5nIG91dC4iLCBjYXBzTWVkaWFUeXBlKGNhcHMuZ2V0KCkpLCBjYXBzTWVk
aWFUeXBlKG1fYXBwc2lua0NhcHMuZ2V0KCkpKTsKKyAgICBpZiAodHJhY2suY2FwcyAmJiBnX3N0
cmNtcDAoY2Fwc01lZGlhVHlwZShjYXBzLmdldCgpKSwgY2Fwc01lZGlhVHlwZSh0cmFjay5jYXBz
LmdldCgpKSkpIHsKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCks
ICJUcmFjayByZWNlaXZlZCBpbmNvbXBhdGlibGUgY2FwcywgcmVjZWl2ZWQgJyVzJyBmb3IgYSB0
cmFjayBwcmV2aW91c2x5IGhhbmRsaW5nICclcycuIEVycm9yaW5nIG91dC4iLCBjYXBzTWVkaWFU
eXBlKGNhcHMuZ2V0KCkpLCBjYXBzTWVkaWFUeXBlKHRyYWNrLmNhcHMuZ2V0KCkpKTsKICAgICAg
ICAgbV9zb3VyY2VCdWZmZXJQcml2YXRlLmFwcGVuZFBhcnNpbmdGYWlsZWQoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmIChkb0NhcHNIYXZlVHlwZShjYXBzLmdldCgpLCBHU1Rf
VklERU9fQ0FQU19UWVBFX1BSRUZJWCkpIHsKICAgICAgICAgaWYgKGF1dG8gc2l6ZSA9IGdldFZp
ZGVvUmVzb2x1dGlvbkZyb21DYXBzKGNhcHMuZ2V0KCkpKQotICAgICAgICAgICAgbV9wcmVzZW50
YXRpb25TaXplID0gKnNpemU7CisgICAgICAgICAgICB0cmFjay5wcmVzZW50YXRpb25TaXplID0g
KnNpemU7CiAgICAgfQogCi0gICAgaWYgKG1fYXBwc2lua0NhcHMgIT0gY2FwcykgewotICAgICAg
ICBtX2FwcHNpbmtDYXBzID0gV1RGTW92ZShjYXBzKTsKLSAgICAgICAgbV9wbGF5ZXJQcml2YXRl
LT50cmFja0RldGVjdGVkKCp0aGlzLCBtX3RyYWNrKTsKLSAgICB9CisgICAgaWYgKHRyYWNrLmNh
cHMgIT0gY2FwcykKKyAgICAgICAgdHJhY2suY2FwcyA9IFdURk1vdmUoY2Fwcyk7CiB9CiAKIHZv
aWQgQXBwZW5kUGlwZWxpbmU6OmhhbmRsZUVuZE9mQXBwZW5kKCkKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIGNvbnN1bWVBcHBzaW5rQXZhaWxhYmxlU2FtcGxlcygpOworICAg
IGNvbnN1bWVBcHBzaW5rc0F2YWlsYWJsZVNhbXBsZXMoKTsKICAgICBHU1RfVFJBQ0VfT0JKRUNU
KG1fcGlwZWxpbmUuZ2V0KCksICJOb3RpZnlpbmcgU291cmNlQnVmZmVyUHJpdmF0ZSB0aGUgYXBw
ZW5kIGlzIGNvbXBsZXRlIik7CiAgICAgc291cmNlQnVmZmVyUHJpdmF0ZSgpLmRpZFJlY2VpdmVB
bGxQZW5kaW5nU2FtcGxlcygpOwogfQogCi12b2lkIEFwcGVuZFBpcGVsaW5lOjphcHBzaW5rTmV3
U2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYmIHNhbXBsZSkKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6
OmFwcHNpbmtOZXdTYW1wbGUoY29uc3QgVHJhY2smIHRyYWNrLCBHUmVmUHRyPEdzdFNhbXBsZT4m
JiBzYW1wbGUpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIApAQCAtNDY0LDcgKzM2
OCw3IEBAIHZvaWQgQXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtOZXdTYW1wbGUoR1JlZlB0cjxHc3RT
YW1wbGU+JiYgc2FtcGxlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBtZWRp
YVNhbXBsZSA9IE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGUoV1RGTW92ZShzYW1wbGUpLCBt
X3ByZXNlbnRhdGlvblNpemUsIHRyYWNrSWQoKSk7CisgICAgYXV0byBtZWRpYVNhbXBsZSA9IE1l
ZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGUoV1RGTW92ZShzYW1wbGUpLCB0cmFjay5wcmVzZW50
YXRpb25TaXplLCB0cmFjay50cmFja0lkKTsKIAogICAgIEdTVF9UUkFDRSgiYXBwZW5kOiB0cmFj
a0lkPSVzIFBUUz0lcyBEVFM9JXMgRFVSPSVzIHByZXNlbnRhdGlvblNpemU9JS4wZnglLjBmIiwK
ICAgICAgICAgbWVkaWFTYW1wbGUtPnRyYWNrSUQoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLApA
QCAtNDk5LDQ1ICs0MDMsOTUgQEAgdm9pZCBBcHBlbmRQaXBlbGluZTo6ZGlkUmVjZWl2ZUluaXRp
YWxpemF0aW9uU2VnbWVudCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAg
IFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudCBpbml0aWFs
aXphdGlvblNlZ21lbnQ7CisgICAgYm9vbCBpc0ZpcnN0SW5pdGlhbGl6YXRpb25TZWdtZW50ID0g
IW1faGFzUmVjZWl2ZWRGaXJzdEluaXRpYWxpemF0aW9uU2VnbWVudDsKIAotICAgIEdTVF9ERUJV
RygiTm90aWZ5aW5nIFNvdXJjZUJ1ZmZlciBmb3IgdHJhY2sgJXMiLCAobV90cmFjaykgPyBtX3Ry
YWNrLT5pZCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkgOiBudWxscHRyKTsKLSAgICBpbml0aWFs
aXphdGlvblNlZ21lbnQuZHVyYXRpb24gPSBtX2luaXRpYWxEdXJhdGlvbjsKKyAgICBTb3VyY2VC
dWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQgaW5pdGlhbGl6YXRpb25T
ZWdtZW50OwogCi0gICAgc3dpdGNoIChtX3N0cmVhbVR5cGUpIHsKLSAgICBjYXNlIEF1ZGlvOiB7
Ci0gICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVu
dDo6QXVkaW9UcmFja0luZm9ybWF0aW9uIGluZm87Ci0gICAgICAgIGluZm8udHJhY2sgPSBzdGF0
aWNfY2FzdDxBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcio+KG1fdHJhY2suZ2V0KCkpOwotICAg
ICAgICBpbmZvLmRlc2NyaXB0aW9uID0gR1N0cmVhbWVyTWVkaWFEZXNjcmlwdGlvbjo6Y3JlYXRl
KG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCkpOwotICAgICAgICBpbml0aWFsaXphdGlvblNlZ21l
bnQuYXVkaW9UcmFja3MuYXBwZW5kKGluZm8pOwotICAgICAgICBicmVhazsKKyAgICBnaW50NjQg
dGltZUxlbmd0aCA9IDA7CisgICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uKG1fZGVt
dXguZ2V0KCksIEdTVF9GT1JNQVRfVElNRSwgJnRpbWVMZW5ndGgpCisgICAgICAgICYmIHN0YXRp
Y19jYXN0PGd1aW50NjQ+KHRpbWVMZW5ndGgpICE9IEdTVF9DTE9DS19USU1FX05PTkUpCisgICAg
ICAgIGluaXRpYWxpemF0aW9uU2VnbWVudC5kdXJhdGlvbiA9IE1lZGlhVGltZShHU1RfVElNRV9B
U19VU0VDT05EUyh0aW1lTGVuZ3RoKSwgR19VU0VDX1BFUl9TRUMpOworICAgIGVsc2UKKyAgICAg
ICAgaW5pdGlhbGl6YXRpb25TZWdtZW50LmR1cmF0aW9uID0gTWVkaWFUaW1lOjpwb3NpdGl2ZUlu
ZmluaXRlVGltZSgpOworCisgICAgaWYgKGlzRmlyc3RJbml0aWFsaXphdGlvblNlZ21lbnQpIHsK
KyAgICAgICAgLy8gQ3JlYXRlIGEgVHJhY2sgb2JqZWN0IHBlciBwYWQuCisgICAgICAgIGludCB0
cmFja0luZGV4ID0gMDsKKyAgICAgICAgZm9yIChHc3RQYWQqIHBhZCA6IEdzdEl0ZXJhdG9yQWRh
cHRvcjxHc3RQYWQ+KEdVbmlxdWVQdHI8R3N0SXRlcmF0b3I+KGdzdF9lbGVtZW50X2l0ZXJhdGVf
c3JjX3BhZHMobV9kZW11eC5nZXQoKSkpKSkgeworICAgICAgICAgICAgYXV0byBbY3JlYXRlVHJh
Y2tSZXN1bHQsIHRyYWNrXSA9IHRyeUNyZWF0ZVRyYWNrRnJvbVBhZChwYWQsIHRyYWNrSW5kZXgp
OworICAgICAgICAgICAgaWYgKGNyZWF0ZVRyYWNrUmVzdWx0ID09IENyZWF0ZVRyYWNrUmVzdWx0
OjpBcHBlbmRQYXJzaW5nRmFpbGVkKSB7CisgICAgICAgICAgICAgICAgLy8gYXBwZW5kUGFyc2lu
Z0ZhaWxlZCgpIHdpbGwgaW1tZWRpYXRlbHkgY2F1c2UgYSByZXNldFBhcnNlclN0YXRlKCkgd2hp
Y2ggd2lsbCBzdG9wIGRlbXV4aW5nLCB0aGVuIHRoZQorICAgICAgICAgICAgICAgIC8vIEFwcGVu
ZFBpcGVsaW5lIHdpbGwgYmUgZGVzdHJveWVkLgorICAgICAgICAgICAgICAgIG1fc291cmNlQnVm
ZmVyUHJpdmF0ZS5hcHBlbmRQYXJzaW5nRmFpbGVkKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRyYWNrKQorICAgICAgICAgICAgICAg
IGxpbmtQYWRXaXRoVHJhY2socGFkLCAqdHJhY2spOworICAgICAgICAgICAgdHJhY2tJbmRleCsr
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTGluayBwYWRzIHRvIGV4aXN0
aW5nIFRyYWNrIG9iamVjdHMgdGhhdCBkb24ndCBoYXZlIGEgbGlua2VkIHBhZCB5ZXQuCisgICAg
ICAgIHVuc2lnbmVkIGNvdW50UGFkcyA9IDA7CisgICAgICAgIGZvciAoR3N0UGFkKiBwYWQgOiBH
c3RJdGVyYXRvckFkYXB0b3I8R3N0UGFkPihHVW5pcXVlUHRyPEdzdEl0ZXJhdG9yPihnc3RfZWxl
bWVudF9pdGVyYXRlX3NyY19wYWRzKG1fZGVtdXguZ2V0KCkpKSkpIHsKKyAgICAgICAgICAgIGNv
dW50UGFkcysrOworICAgICAgICAgICAgVHJhY2sqIHRyYWNrID0gdHJ5TWF0Y2hQYWRUb0V4aXN0
aW5nVHJhY2socGFkKTsKKyAgICAgICAgICAgIGlmICghdHJhY2spIHsKKyAgICAgICAgICAgICAg
ICBHU1RfV0FSTklOR19PQkpFQ1QocGlwZWxpbmUoKSwgIkNhbid0IG1hdGNoIHBhZCB0byBleGlz
dGluZyB0cmFja3MgaW4gdGhlIEFwcGVuZFBpcGVsaW5lOiAlIiBHU1RfUFRSX0ZPUk1BVCwgcGFk
KTsKKyAgICAgICAgICAgICAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGUuYXBwZW5kUGFyc2luZ0Zh
aWxlZCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGxpbmtQYWRXaXRoVHJhY2socGFkLCAqdHJhY2spOworICAgICAgICB9CisgICAgICAgIGlm
IChjb3VudFBhZHMgIT0gbV90cmFja3Muc2l6ZSgpKSB7CisgICAgICAgICAgICBHU1RfV0FSTklO
R19PQkpFQ1QocGlwZWxpbmUoKSwgIk51bWJlciBvZiBwYWRzICgldSkgZG9lc24ndCBtYXRjaCBu
dW1iZXIgb2YgdHJhY2tzICglenUpLiIsIGNvdW50UGFkcywgbV90cmFja3Muc2l6ZSgpKTsKKyAg
ICAgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS5hcHBlbmRQYXJzaW5nRmFpbGVkKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9Ci0gICAgY2FzZSBWaWRlbzogewot
ICAgICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQ6
OlZpZGVvVHJhY2tJbmZvcm1hdGlvbiBpbmZvOwotICAgICAgICBpbmZvLnRyYWNrID0gc3RhdGlj
X2Nhc3Q8VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIqPihtX3RyYWNrLmdldCgpKTsKLSAgICAg
ICAgaW5mby5kZXNjcmlwdGlvbiA9IEdTdHJlYW1lck1lZGlhRGVzY3JpcHRpb246OmNyZWF0ZSht
X2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpKTsKLSAgICAgICAgaW5pdGlhbGl6YXRpb25TZWdtZW50
LnZpZGVvVHJhY2tzLmFwcGVuZChpbmZvKTsKLSAgICAgICAgYnJlYWs7CisKKyAgICBmb3IgKHN0
ZDo6dW5pcXVlX3B0cjxUcmFjaz4mIHRyYWNrIDogbV90cmFja3MpIHsKKyAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChwaXBlbGluZSgpLCAiQWRkaW5nIHRyYWNrIHRvIGluaXRpYWxpemF0aW9uIHdp
dGggc2VnbWVudCB0eXBlICVzLCBpZCAlcy4iLCBzdHJlYW1UeXBlVG9TdHJpbmcodHJhY2stPnN0
cmVhbVR5cGUpLCB0cmFjay0+dHJhY2tJZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgc3dpdGNoICh0cmFjay0+c3RyZWFtVHlwZSkgeworICAgICAgICBjYXNlIEF1ZGlvOiB7Cisg
ICAgICAgICAgICBBU1NFUlQodHJhY2stPndlYktpdFRyYWNrKTsKKyAgICAgICAgICAgIFNvdXJj
ZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6QXVkaW9UcmFja0lu
Zm9ybWF0aW9uIGluZm87CisgICAgICAgICAgICBpbmZvLnRyYWNrID0gc3RhdGljX2Nhc3Q8QXVk
aW9UcmFja1ByaXZhdGVHU3RyZWFtZXIqPih0cmFjay0+d2ViS2l0VHJhY2suZ2V0KCkpOworICAg
ICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IEdTdHJlYW1lck1lZGlhRGVzY3JpcHRpb246OmNy
ZWF0ZSh0cmFjay0+Y2Fwcy5nZXQoKSk7CisgICAgICAgICAgICBpbml0aWFsaXphdGlvblNlZ21l
bnQuYXVkaW9UcmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBWaWRlbzogeworICAgICAgICAgICAgQVNTRVJUKHRyYWNrLT53ZWJL
aXRUcmFjayk7CisgICAgICAgICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFs
aXphdGlvblNlZ21lbnQ6OlZpZGVvVHJhY2tJbmZvcm1hdGlvbiBpbmZvOworICAgICAgICAgICAg
aW5mby50cmFjayA9IHN0YXRpY19jYXN0PFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyKj4odHJh
Y2stPndlYktpdFRyYWNrLmdldCgpKTsKKyAgICAgICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBH
U3RyZWFtZXJNZWRpYURlc2NyaXB0aW9uOjpjcmVhdGUodHJhY2stPmNhcHMuZ2V0KCkpOworICAg
ICAgICAgICAgaW5pdGlhbGl6YXRpb25TZWdtZW50LnZpZGVvVHJhY2tzLmFwcGVuZChpbmZvKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBHU1RfRVJST1IoIlVuc3VwcG9ydGVkIHN0cmVhbSB0eXBlIG9yIGNvZGVjIik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBH
U1RfRVJST1IoIlVuc3VwcG9ydGVkIHN0cmVhbSB0eXBlIG9yIGNvZGVjIik7Ci0gICAgICAgIGJy
ZWFrOworCisgICAgaWYgKGlzRmlyc3RJbml0aWFsaXphdGlvblNlZ21lbnQpIHsKKyAgICAgICAg
Zm9yIChzdGQ6OnVuaXF1ZV9wdHI8VHJhY2s+JiB0cmFjayA6IG1fdHJhY2tzKSB7CisgICAgICAg
ICAgICBpZiAodHJhY2stPnN0cmVhbVR5cGUgPT0gU3RyZWFtVHlwZTo6VmlkZW8pIHsKKyAgICAg
ICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJTZXR0aW5nIGluaXRpYWwg
dmlkZW8gc2l6ZSB0byB0aGF0IG9mIHRyYWNrIHdpdGggaWQgJyVzJywgJWd4JWcuIiwKKyAgICAg
ICAgICAgICAgICAgICAgdHJhY2stPnRyYWNrSWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3Rh
dGljX2Nhc3Q8ZG91YmxlPih0cmFjay0+cHJlc2VudGF0aW9uU2l6ZS53aWR0aCgpKSwgc3RhdGlj
X2Nhc3Q8ZG91YmxlPih0cmFjay0+cHJlc2VudGF0aW9uU2l6ZS5oZWlnaHQoKSkpOworICAgICAg
ICAgICAgICAgIG1fcGxheWVyUHJpdmF0ZS0+c2V0SW5pdGlhbFZpZGVvU2l6ZSh0cmFjay0+cHJl
c2VudGF0aW9uU2l6ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KICAgICB9CiAKKyAgICBtX2hhc1JlY2VpdmVkRmlyc3RJbml0aWFsaXphdGlvblNl
Z21lbnQgPSB0cnVlOworICAgIEdTVF9ERUJVRygiTm90aWZ5aW5nIFNvdXJjZUJ1ZmZlciBvZiBp
bml0aWFsaXphdGlvbiBzZWdtZW50LiIpOworICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVf
V0lUSF9UUyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19B
TEwsICJhcHBlbmQtcGlwZWxpbmUtcmVjZWl2ZWQtaW5pdC1zZWdtZW50Iik7CiAgICAgbV9zb3Vy
Y2VCdWZmZXJQcml2YXRlLmRpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoV1RGTW92ZShp
bml0aWFsaXphdGlvblNlZ21lbnQpLCBbXSgpIHsgfSk7CiB9CiAKLUF0b21TdHJpbmcgQXBwZW5k
UGlwZWxpbmU6OnRyYWNrSWQoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAg
ICBpZiAoIW1fdHJhY2spCi0gICAgICAgIHJldHVybiBBdG9tU3RyaW5nKCk7Ci0KLSAgICByZXR1
cm4gbV90cmFjay0+aWQoKTsKLX0KLQotdm9pZCBBcHBlbmRQaXBlbGluZTo6Y29uc3VtZUFwcHNp
bmtBdmFpbGFibGVTYW1wbGVzKCkKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmNvbnN1bWVBcHBzaW5r
c0F2YWlsYWJsZVNhbXBsZXMoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKQEAg
LTU0Nyw5ICs1MDEsMTEgQEAgdm9pZCBBcHBlbmRQaXBlbGluZTo6Y29uc3VtZUFwcHNpbmtBdmFp
bGFibGVTYW1wbGVzKCkKICAgICAvLyBCYXRjaCBkdXJhdGlvbiBjaGFuZ2VzIHNvIHRoYXQgaWYg
d2UgcGljayAxMDAgb2Ygc3VjaCBzYW1wbGVzIHdlIGRvbid0IGhhdmUgdG8gcnVuIDEwMCB0aW1l
cwogICAgIC8vIGxheW91dCBmb3IgdGhlIHZpZGVvIGNvbnRyb2xzLCBidXQgb25seSBvbmNlLgog
ICAgIG1fcGxheWVyUHJpdmF0ZS0+YmxvY2tEdXJhdGlvbkNoYW5nZXMoKTsKLSAgICB3aGlsZSAo
KHNhbXBsZSA9IGFkb3B0R1JlZihnc3RfYXBwX3NpbmtfdHJ5X3B1bGxfc2FtcGxlKEdTVF9BUFBf
U0lOSyhtX2FwcHNpbmsuZ2V0KCkpLCAwKSkpKSB7Ci0gICAgICAgIGFwcHNpbmtOZXdTYW1wbGUo
V1RGTW92ZShzYW1wbGUpKTsKLSAgICAgICAgYmF0Y2hlZFNhbXBsZUNvdW50Kys7CisgICAgZm9y
IChzdGQ6OnVuaXF1ZV9wdHI8VHJhY2s+JiB0cmFjayA6IG1fdHJhY2tzKSB7CisgICAgICAgIHdo
aWxlICgoc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lua190cnlfcHVsbF9zYW1wbGUoR1NU
X0FQUF9TSU5LKHRyYWNrLT5hcHBzaW5rLmdldCgpKSwgMCkpKSkgeworICAgICAgICAgICAgYXBw
c2lua05ld1NhbXBsZSgqdHJhY2ssIFdURk1vdmUoc2FtcGxlKSk7CisgICAgICAgICAgICBiYXRj
aGVkU2FtcGxlQ291bnQrKzsKKyAgICAgICAgfQogICAgIH0KICAgICBtX3BsYXllclByaXZhdGUt
PnVuYmxvY2tEdXJhdGlvbkNoYW5nZXMoKTsKIApAQCAtNTczLDkgKzUyOSw2IEBAIHZvaWQgQXBw
ZW5kUGlwZWxpbmU6OnJlc2V0UGFyc2VyU3RhdGUoKQogICAgIC8vIFJlc2V0IHRoZSBzdGF0ZSBv
ZiBhbGwgZWxlbWVudHMgaW4gdGhlIHBpcGVsaW5lLgogICAgIGFzc2VydGVkRWxlbWVudFNldFN0
YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9SRUFEWSk7CiAKLSAgICAvLyBUaGUgcGFy
c2VyIGlzIHRlYXIgZG93biBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGRlbXV4ZXIgaXMgcmVzZXQg
KHNlZSBkaXNjb25uZWN0RGVtdXhlclNyY1BhZEZyb21BcHBzaW5rRnJvbUFueVRocmVhZCgpKS4K
LSAgICBBU1NFUlQoIW1fcGFyc2VyKTsKLQogICAgIC8vIFNldCB0aGUgcGlwZWxpbmUgdG8gUExB
WUlORyBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGFnYWluLgogICAgIGFzc2VydGVkRWxlbWVudFNl
dFN0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9QTEFZSU5HKTsKIApAQCAtNjQyLDIw
ICs1OTUsMTggQEAgdm9pZCBBcHBlbmRQaXBlbGluZTo6aGFuZGxlQXBwc2lua05ld1NhbXBsZUZy
b21TdHJlYW1pbmdUaHJlYWQoR3N0RWxlbWVudCopCiAgICAgICAgIEdTVF9UUkFDRSgiUG9zdGlu
ZyBhcHBzaW5rLW5ldy1zYW1wbGUgdGFzayB0byB0aGUgbWFpbiB0aHJlYWQiKTsKICAgICAgICAg
bV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXNdKCkgewogICAgICAgICAgICAgbV93YXNCdXNB
bHJlYWR5Tm90aWZpZWRPZkF2YWlsYWJsZVNhbXBsZXMuY2xlYXIoKTsKLSAgICAgICAgICAgIGNv
bnN1bWVBcHBzaW5rQXZhaWxhYmxlU2FtcGxlcygpOworICAgICAgICAgICAgY29uc3VtZUFwcHNp
bmtzQXZhaWxhYmxlU2FtcGxlcygpOwogICAgICAgICB9KTsKICAgICB9CiB9CiAKIHN0YXRpYyBH
UmVmUHRyPEdzdEVsZW1lbnQ+Ci1jcmVhdGVPcHRpb25hbFBhcnNlckZvckZvcm1hdChHc3RQYWQq
IGRlbXV4ZXJTcmNQYWQpCitjcmVhdGVPcHRpb25hbFBhcnNlckZvckZvcm1hdChjb25zdCBBdG9t
U3RyaW5nJiB0cmFja0lkLCBjb25zdCBHc3RDYXBzKiBjYXBzKQogewotICAgIEdSZWZQdHI8R3N0
Q2Fwcz4gcGFkQ2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMoZGVtdXhl
clNyY1BhZCkpOwotICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0
cnVjdHVyZShwYWRDYXBzLmdldCgpLCAwKTsKKyAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2FwcywgMCk7CiAgICAgY29uc3QgY2hhciogbWVkaWFU
eXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZShzdHJ1Y3R1cmUpOwogCi0gICAgR1VuaXF1ZVB0
cjxjaGFyPiBkZW11eGVyUGFkTmFtZShnc3RfcGFkX2dldF9uYW1lKGRlbXV4ZXJTcmNQYWQpKTsK
LSAgICBHVW5pcXVlUHRyPGNoYXI+IHBhcnNlck5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlc19wYXJz
ZXIiLCBkZW11eGVyUGFkTmFtZS5nZXQoKSkpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGFyc2Vy
TmFtZShnX3N0cmR1cF9wcmludGYoIiVzX3BhcnNlciIsIHRyYWNrSWQuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSkpOwogCiAgICAgaWYgKCFnX3N0cmNtcDAobWVkaWFUeXBlLCAiYXVkaW8veC1vcHVz
IikpIHsKICAgICAgICAgR3N0RWxlbWVudCogb3B1c3BhcnNlID0gbWFrZUdTdHJlYW1lckVsZW1l
bnQoIm9wdXNwYXJzZSIsIHBhcnNlck5hbWUuZ2V0KCkpOwpAQCAtNjY5LDIyMCArNjIwLDIzMCBA
QCBjcmVhdGVPcHRpb25hbFBhcnNlckZvckZvcm1hdChHc3RQYWQqIGRlbXV4ZXJTcmNQYWQpCiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgQXBwZW5kUGlwZWxpbmU6OmNvbm5lY3REZW11
eGVyU3JjUGFkVG9BcHBzaW5rRnJvbVN0cmVhbWluZ1RocmVhZChHc3RQYWQqIGRlbXV4ZXJTcmNQ
YWQpCitBdG9tU3RyaW5nIEFwcGVuZFBpcGVsaW5lOjpnZW5lcmF0ZVRyYWNrSWQoU3RyZWFtVHlw
ZSBzdHJlYW1UeXBlLCBpbnQgcGFkSW5kZXgpCiB7Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7Ci0KLSAgICBHU1RfREVCVUcoImNvbm5lY3RpbmcgdG8gYXBwc2luayIpOwotCi0gICAgaWYg
KG1fZGVtdXgtPm51bXNyY3BhZHMgPiAxKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HKCJPbmx5IG9u
ZSBzdHJlYW0gcGVyIFNvdXJjZUJ1ZmZlciBpcyBhbGxvd2VkISBJZ25vcmluZyBzdHJlYW0gJWQg
YnkgYWRkaW5nIGEgYmxhY2sgaG9sZSBwcm9iZS4iLCBtX2RlbXV4LT5udW1zcmNwYWRzKTsKLSAg
ICAgICAgZ3Vsb25nIHByb2JlSWQgPSBnc3RfcGFkX2FkZF9wcm9iZShkZW11eGVyU3JjUGFkLCBH
U1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSLCByZWludGVycHJldF9jYXN0PEdzdFBhZFByb2JlQ2Fs
bGJhY2s+KGFwcGVuZFBpcGVsaW5lRGVtdXhlckJsYWNrSG9sZVBhZFByb2JlKSwgbnVsbHB0ciwg
bnVsbHB0cik7Ci0gICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGRlbXV4ZXJTcmNQ
YWQpLCAiYmxhY2tIb2xlUHJvYmVJZCIsIEdVTE9OR19UT19QT0lOVEVSKHByb2JlSWQpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdSZWZQdHI8R3N0UGFkPiBhcHBzaW5rU2lua1Bh
ZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2FwcHNpbmsuZ2V0KCks
ICJzaW5rIikpOwotCi0gICAgLy8gT25seSBvbmUgc3RyZWFtIHBlciBkZW11eGVyIGlzIHN1cHBv
cnRlZC4KLSAgICBBU1NFUlQoIWdzdF9wYWRfaXNfbGlua2VkKGFwcHNpbmtTaW5rUGFkLmdldCgp
KSk7Ci0KLSAgICBnaW50NjQgdGltZUxlbmd0aCA9IDA7Ci0gICAgaWYgKGdzdF9lbGVtZW50X3F1
ZXJ5X2R1cmF0aW9uKG1fZGVtdXguZ2V0KCksIEdTVF9GT1JNQVRfVElNRSwgJnRpbWVMZW5ndGgp
Ci0gICAgICAgICYmIHN0YXRpY19jYXN0PGd1aW50NjQ+KHRpbWVMZW5ndGgpICE9IEdTVF9DTE9D
S19USU1FX05PTkUpCi0gICAgICAgIG1faW5pdGlhbER1cmF0aW9uID0gTWVkaWFUaW1lKEdTVF9U
SU1FX0FTX1VTRUNPTkRTKHRpbWVMZW5ndGgpLCBHX1VTRUNfUEVSX1NFQyk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2luaXRpYWxEdXJhdGlvbiA9IE1lZGlhVGltZTo6cG9zaXRpdmVJbmZpbml0ZVRp
bWUoKTsKLQotICAgIEdTVF9ERUJVRygiUmVxdWVzdGluZyBkZW11eGVyLWNvbm5lY3QtdG8tYXBw
c2luayB0byBtYWluIHRocmVhZCIpOwotICAgIGF1dG8gcmVzcG9uc2UgPSBtX3Rhc2tRdWV1ZS5l
bnF1ZXVlVGFza0FuZFdhaXQ8QWJvcnRhYmxlVGFza1F1ZXVlOjpWb2lkPihbdGhpcywgZGVtdXhl
clNyY1BhZF0oKSB7Ci0gICAgICAgIGNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rKGRlbXV4
ZXJTcmNQYWQpOwotICAgICAgICByZXR1cm4gQWJvcnRhYmxlVGFza1F1ZXVlOjpWb2lkKCk7Ci0g
ICAgfSk7Ci0gICAgaWYgKCFyZXNwb25zZSkgewotICAgICAgICAvLyBUaGUgQXBwZW5kUGlwZWxp
bmUgaGFzIGJlZW4gZGVzdHJveWVkIG9yIGFib3J0ZWQgYmVmb3JlIHdlIHJlY2VpdmVkIGEgcmVz
cG9uc2UuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBNdXN0IGJlIGRvbmUgaW4g
dGhlIHRocmVhZCB3ZSB3ZXJlIGNhbGxlZCBmcm9tICh1c3VhbGx5IHN0cmVhbWluZyB0aHJlYWQp
LgotICAgIGJvb2wgaXNEYXRhID0gKG1fc3RyZWFtVHlwZSA9PSBNZWRpYVNvdXJjZVN0cmVhbVR5
cGVHU3RyZWFtZXI6OkF1ZGlvKQotICAgICAgICB8fCAobV9zdHJlYW1UeXBlID09IE1lZGlhU291
cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VmlkZW8pCi0gICAgICAgIHx8IChtX3N0cmVhbVR5cGUg
PT0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpUZXh0KTsKLQotICAgIGlmIChpc0Rh
dGEpIHsKLSAgICAgICAgR1JlZlB0cjxHc3RPYmplY3Q+IHBhcmVudCA9IGFkb3B0R1JlZihnc3Rf
ZWxlbWVudF9nZXRfcGFyZW50KG1fYXBwc2luay5nZXQoKSkpOwotICAgICAgICBpZiAoIXBhcmVu
dCkKLSAgICAgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIG1f
YXBwc2luay5nZXQoKSk7Ci0KLSAgICAgICAgLy8gQ3VycmVudCBoZWFkIG9mIHRoZSBwaXBlbGlu
ZSBiZWluZyBidWlsdC4KLSAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IGN1cnJlbnRTcmNQYWQgPSBk
ZW11eGVyU3JjUGFkOwotCi0gICAgICAgIC8vIFNvbWUgYXVkaW8gZmlsZXMgdW5oZWxwZnVsbHkg
b21pdCB0aGUgZHVyYXRpb24gb2YgZnJhbWVzIGluIHRoZSBjb250YWluZXIuIFdlIG5lZWQgdG8g
cGFyc2UKLSAgICAgICAgLy8gdGhlIGNvbnRhaW5lZCBhdWRpbyBzdHJlYW1zIGluIG9yZGVyIHRv
IGtub3cgdGhlIGR1cmF0aW9uIG9mIHRoZSBmcmFtZXMuCi0gICAgICAgIC8vIFRoaXMgaXMga25v
d24gdG8gYmUgYW4gaXNzdWUgd2l0aCBZb3VUdWJlIFdlYk0gZmlsZXMgY29udGFpbmluZyBPcHVz
IGF1ZGlvIGFzIG9mIFlUVFYyMDE4LgotICAgICAgICBtX3BhcnNlciA9IGNyZWF0ZU9wdGlvbmFs
UGFyc2VyRm9yRm9ybWF0KGN1cnJlbnRTcmNQYWQuZ2V0KCkpOwotICAgICAgICBpZiAobV9wYXJz
ZXIpIHsKLSAgICAgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSks
IG1fcGFyc2VyLmdldCgpKTsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0
aF9wYXJlbnQobV9wYXJzZXIuZ2V0KCkpOwotCi0gICAgICAgICAgICBHUmVmUHRyPEdzdFBhZD4g
cGFyc2VyU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX3Bh
cnNlci5nZXQoKSwgInNpbmsiKSk7Ci0gICAgICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcGFyc2Vy
U3JjUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fcGFyc2VyLmdl
dCgpLCAic3JjIikpOwotCi0gICAgICAgICAgICBnc3RfcGFkX2xpbmsoY3VycmVudFNyY1BhZC5n
ZXQoKSwgcGFyc2VyU2lua1BhZC5nZXQoKSk7Ci0gICAgICAgICAgICBjdXJyZW50U3JjUGFkID0g
cGFyc2VyU3JjUGFkOwotICAgICAgICB9Ci0KLSAgICAgICAgZ3N0X3BhZF9saW5rKGN1cnJlbnRT
cmNQYWQuZ2V0KCksIGFwcHNpbmtTaW5rUGFkLmdldCgpKTsKLQotICAgICAgICBnc3RfZWxlbWVu
dF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KG1fYXBwc2luay5nZXQoKSk7Ci0KLSAgICAgICAgR1NU
X0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSks
IEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgIndlYmtpdC1hZnRlci1saW5rIik7CisgICAgc3dp
dGNoIChzdHJlYW1UeXBlKSB7CisgICAgY2FzZSBBdWRpbzoKKyAgICAgICAgcmV0dXJuIG1ha2VT
dHJpbmcoIkEiLCBwYWRJbmRleCk7CisgICAgY2FzZSBWaWRlbzoKKyAgICAgICAgcmV0dXJuIG1h
a2VTdHJpbmcoIlYiLCBwYWRJbmRleCk7CisgICAgY2FzZSBUZXh0OgorICAgICAgICByZXR1cm4g
bWFrZVN0cmluZygiVCIsIHBhZEluZGV4KTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
bWFrZVN0cmluZygiTyIsIHBhZEluZGV4KTsKICAgICB9CiB9CiAKLXZvaWQgQXBwZW5kUGlwZWxp
bmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rKEdzdFBhZCogZGVtdXhlclNyY1BhZCkK
K3N0ZDo6cGFpcjxBcHBlbmRQaXBlbGluZTo6Q3JlYXRlVHJhY2tSZXN1bHQsIEFwcGVuZFBpcGVs
aW5lOjpUcmFjayo+IEFwcGVuZFBpcGVsaW5lOjp0cnlDcmVhdGVUcmFja0Zyb21QYWQoR3N0UGFk
KiBkZW11eGVyU3JjUGFkLCBpbnQgdHJhY2tJbmRleCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotICAgIEdTVF9ERUJVRygiQ29ubmVjdGluZyB0byBhcHBzaW5rIik7CisgICAgQVNT
RVJUKCFtX2hhc1JlY2VpdmVkRmlyc3RJbml0aWFsaXphdGlvblNlZ21lbnQpOworICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkNyZWF0aW5nIFRyYWNrIG9iamVjdCBmb3IgcGFkICUi
IEdTVF9QVFJfRk9STUFULCBkZW11eGVyU3JjUGFkKTsKIAogICAgIGNvbnN0IFN0cmluZyYgdHlw
ZSA9IG1fc291cmNlQnVmZmVyUHJpdmF0ZS50eXBlKCkuY29udGFpbmVyVHlwZSgpOwogICAgIGlm
ICh0eXBlLmVuZHNXaXRoKCJ3ZWJtIikpCiAgICAgICAgIGdzdF9wYWRfYWRkX3Byb2JlKGRlbXV4
ZXJTcmNQYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNLCBtYXRyb3NrYWRl
bXV4Rm9yY2VTZWdtZW50U3RhcnRUb0VxdWFsWmVybywgbnVsbHB0ciwgbnVsbHB0cik7CiAKLSAg
ICBHUmVmUHRyPEdzdFBhZD4gc2lua1NpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRpY19wYWQobV9hcHBzaW5rLmdldCgpLCAic2luayIpKTsKLQotICAgIC8vIE9ubHkgb25l
IHN0cmVhbSBwZXIgZGVtdXhlciBpcyBzdXBwb3J0ZWQuCi0gICAgQVNTRVJUKCFnc3RfcGFkX2lz
X2xpbmtlZChzaW5rU2lua1BhZC5nZXQoKSkpOwotCi0gICAgLy8gQXMgaXQgaXMgbm93LCByZXNl
dFBhcnNlclN0YXRlKCkgd2lsbCBjYXVzZSB0aGUgcGFkcyB0byBiZSBkaXNjb25uZWN0ZWQsIHNv
IHRoZXkgd2lsbCBsYXRlciBiZSByZS1hZGRlZCBvbiB0aGUgbmV4dCBpbml0aWFsaXphdGlvbiBz
ZWdtZW50LgotCi0gICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9wYWRf
Z2V0X2N1cnJlbnRfY2FwcyhHU1RfUEFEKGRlbXV4ZXJTcmNQYWQpKSk7Ci0KKyAgICBhdXRvIFtw
YXJzZWRDYXBzLCBzdHJlYW1UeXBlLCBwcmVzZW50YXRpb25TaXplXSA9IHBhcnNlRGVtdXhlclNy
Y1BhZENhcHMoYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyhkZW11eGVyU3JjUGFk
KSkuZ2V0KCkpOwogI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKICAgICB7Ci0gICAgICAg
IEdVbmlxdWVQdHI8Z2NoYXI+IHN0cmNhcHMoZ3N0X2NhcHNfdG9fc3RyaW5nKGNhcHMuZ2V0KCkp
KTsKKyAgICAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gc3RyY2Fwcyhnc3RfY2Fwc190b19zdHJpbmco
cGFyc2VkQ2Fwcy5nZXQoKSkpOwogICAgICAgICBHU1RfREVCVUcoIiVzIiwgc3RyY2Fwcy5nZXQo
KSk7CiAgICAgfQogI2VuZGlmCiAKLSAgICBwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKGdzdF9jYXBz
X3JlZihjYXBzLmdldCgpKSk7CisgICAgaWYgKHN0cmVhbVR5cGUgPT0gU3RyZWFtVHlwZTo6SW52
YWxpZCkgeworICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlVu
c3VwcG9ydGVkIHRyYWNrIGNvZGVjOiAlIiBHU1RfUFRSX0ZPUk1BVCwgcGFyc2VkQ2Fwcy5nZXQo
KSk7CisgICAgICAgIC8vIDMuNS43IEluaXRpYWxpemF0aW9uIFNlZ21lbnQgUmVjZWl2ZWQKKyAg
ICAgICAgLy8gNS4xLiBJZiB0aGUgaW5pdGlhbGl6YXRpb24gc2VnbWVudCBjb250YWlucyB0cmFj
a3Mgd2l0aCBjb2RlY3MgdGhlIHVzZXIgYWdlbnQgZG9lcyBub3Qgc3VwcG9ydCwgdGhlbiBydW4g
dGhlCisgICAgICAgIC8vIGFwcGVuZCBlcnJvciBhbGdvcml0aG0gYW5kIGFib3J0IHRoZXNlIHN0
ZXBzLgorICAgICAgICByZXR1cm4geyBDcmVhdGVUcmFja1Jlc3VsdDo6QXBwZW5kUGFyc2luZ0Zh
aWxlZCwgbnVsbHB0ciB9OworICAgIH0KKyAgICBpZiAoc3RyZWFtVHlwZSA9PSBTdHJlYW1UeXBl
OjpVbmtub3duKSB7CisgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChwaXBlbGluZSgpLCAiUGFk
ICclcycgd2l0aCBwYXJzZWQgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCAiIGhhcyBhbiB1bmtub3du
IHR5cGUsIHdpbGwgYmUgY29ubmVjdGVkIHRvIGEgYmxhY2sgaG9sZSBwcm9iZS4iLCBHU1RfUEFE
X05BTUUoZGVtdXhlclNyY1BhZCksIHBhcnNlZENhcHMuZ2V0KCkpOworICAgICAgICBnc3RfcGFk
X2FkZF9wcm9iZShkZW11eGVyU3JjUGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSLCByZWlu
dGVycHJldF9jYXN0PEdzdFBhZFByb2JlQ2FsbGJhY2s+KGFwcGVuZFBpcGVsaW5lRGVtdXhlckJs
YWNrSG9sZVBhZFByb2JlKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIHJldHVybiB7IENy
ZWF0ZVRyYWNrUmVzdWx0OjpUcmFja0lnbm9yZWQsIG51bGxwdHIgfTsKKyAgICB9CisgICAgQXRv
bVN0cmluZyB0cmFja0lkID0gZ2VuZXJhdGVUcmFja0lkKHN0cmVhbVR5cGUsIHRyYWNrSW5kZXgp
OworCisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiQ3JlYXRpbmcgbmV3IEFwcGVu
ZFBpcGVsaW5lOjpUcmFjayB3aXRoIGlkICclcyciLCB0cmFja0lkLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOworICAgIHNpemVfdCBuZXdUcmFja0luZGV4ID0gbV90cmFja3Muc2l6ZSgpOworICAg
IG1fdHJhY2tzLmFwcGVuZChXVEY6Om1ha2VVbmlxdWU8VHJhY2s+KHRyYWNrSWQsIHN0cmVhbVR5
cGUsIHBhcnNlZENhcHMsIHByZXNlbnRhdGlvblNpemUpKTsKKyAgICBUcmFjayYgdHJhY2sgPSAq
bV90cmFja3MuYXQobmV3VHJhY2tJbmRleCk7CisgICAgdHJhY2suaW5pdGlhbGl6ZUVsZW1lbnRz
KHRoaXMsIEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSkpOworICAgIHRyYWNrLndlYktpdFRyYWNr
ID0gbWFrZVdlYktpdFRyYWNrKG5ld1RyYWNrSW5kZXgpOworICAgIGhvb2tUcmFja0V2ZW50cyh0
cmFjayk7CisgICAgcmV0dXJuIHsgQ3JlYXRlVHJhY2tSZXN1bHQ6OlRyYWNrQ3JlYXRlZCwgJnRy
YWNrIH07Cit9CisKK0FwcGVuZFBpcGVsaW5lOjpUcmFjayogQXBwZW5kUGlwZWxpbmU6OnRyeU1h
dGNoUGFkVG9FeGlzdGluZ1RyYWNrKEdzdFBhZCAqZGVtdXhlclNyY1BhZCkKK3sKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX2hhc1JlY2VpdmVkRmlyc3RJbml0aWFs
aXphdGlvblNlZ21lbnQpOworICAgIEF0b21TdHJpbmcgdHJhY2tJZCA9IEdTVF9QQURfTkFNRShk
ZW11eGVyU3JjUGFkKTsKKyAgICBhdXRvIFtwYXJzZWRDYXBzLCBzdHJlYW1UeXBlLCBwcmVzZW50
YXRpb25TaXplXSA9IHBhcnNlRGVtdXhlclNyY1BhZENhcHMoYWRvcHRHUmVmKGdzdF9wYWRfZ2V0
X2N1cnJlbnRfY2FwcyhkZW11eGVyU3JjUGFkKSkuZ2V0KCkpOworCisgICAgLy8gVHJ5IHRvIGZp
bmQgYSBtYXRjaGluZyBwcmUtZXhpc3RpbmcgdHJhY2suIElkZWFsbHksIHRyYWNrcyBzaG91bGQg
YmUgbWF0Y2hlZCBieSB0cmFjayBJRCwgYnV0IG1hdGNoaW5nIGJ5IHR5cGUKKyAgICAvLyBpcyBw
cm92aWRlZCBhcyBhIGZhbGxiYWNrIC0tIHdoaWNoIHdpbGwgYmUgdXNlZCwgc2luY2Ugd2UgZG9u
J3QgaGF2ZSBhIHdheSB0byBmZXRjaCB0aG9zZSBmcm9tIEdTdHJlYW1lciBhdCB0aGUgbW9tZW50
LgorICAgIFRyYWNrKiBtYXRjaGluZ1RyYWNrID0gbnVsbHB0cjsKKyAgICBmb3IgKHN0ZDo6dW5p
cXVlX3B0cjxUcmFjaz4mIHRyYWNrIDogbV90cmFja3MpIHsKKyAgICAgICAgaWYgKHRyYWNrLT5z
dHJlYW1UeXBlICE9IHN0cmVhbVR5cGUgfHwgZ3N0X3BhZF9pc19saW5rZWQodHJhY2stPmVudHJ5
UGFkLmdldCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtYXRjaGluZ1RyYWNr
ID0gJip0cmFjazsKKyAgICAgICAgaWYgKHRyYWNrLT50cmFja0lkID09IHRyYWNrSWQpCisgICAg
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIW1hdGNoaW5nVHJhY2spIHsKKyAgICAg
ICAgLy8gSW52YWxpZCBjb25maWd1cmF0aW9uLgorICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIkNvdWxkbid0IGZpbmQgYSBtYXRjaGluZyBwcmUtZXhpc3RpbmcgdHJhY2sg
Zm9yIHBhZCAnJXMnIHdpdGggcGFyc2VkIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQKKyAgICAgICAg
ICAgICIgb24gbm9uLWZpcnN0IGluaXRpYWxpemF0aW9uIHNlZ21lbnQsIHdpbGwgYmUgY29ubmVj
dGVkIHRvIGEgYmxhY2sgaG9sZSBwcm9iZS4iLCBHU1RfUEFEX05BTUUoZGVtdXhlclNyY1BhZCks
IHBhcnNlZENhcHMuZ2V0KCkpOworICAgICAgICBnc3RfcGFkX2FkZF9wcm9iZShkZW11eGVyU3Jj
UGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSLCByZWludGVycHJldF9jYXN0PEdzdFBhZFBy
b2JlQ2FsbGJhY2s+KGFwcGVuZFBpcGVsaW5lRGVtdXhlckJsYWNrSG9sZVBhZFByb2JlKSwgbnVs
bHB0ciwgbnVsbHB0cik7CisgICAgfQorICAgIHJldHVybiBtYXRjaGluZ1RyYWNrOworfQorCit2
b2lkIEFwcGVuZFBpcGVsaW5lOjpsaW5rUGFkV2l0aFRyYWNrKEdzdFBhZCogZGVtdXhlclNyY1Bh
ZCwgVHJhY2smIHRyYWNrKQoreworICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9U
UyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsICJh
cHBlbmQtcGlwZWxpbmUtYmVmb3JlLWxpbmsiKTsKKyAgICBBU1NFUlQoIUdTVF9QQURfSVNfTElO
S0VEKHRyYWNrLmVudHJ5UGFkLmdldCgpKSk7CisgICAgZ3N0X3BhZF9saW5rKGRlbXV4ZXJTcmNQ
YWQsIHRyYWNrLmVudHJ5UGFkLmdldCgpKTsKKyAgICBBU1NFUlQoR1NUX1BBRF9JU19MSU5LRUQo
dHJhY2suZW50cnlQYWQuZ2V0KCkpKTsKKyAgICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJ
VEhfVFMoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxM
LCAiYXBwZW5kLXBpcGVsaW5lLWFmdGVyLWxpbmsiKTsKK30KIAotICAgIFRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXIqIGdzdHJlYW1lclRyYWNrOwotICAgIHN3aXRjaCAobV9zdHJlYW1UeXBlKSB7
Ci0gICAgY2FzZSBNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkF1ZGlvOiB7Ci0gICAg
ICAgIGF1dG8gc3BlY2lmaWNUcmFjayA9IEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVh
dGUobWFrZVdlYWtQdHIoKm1fcGxheWVyUHJpdmF0ZSksIGlkKCksIHNpbmtTaW5rUGFkLmdldCgp
KTsKK1JlZjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBBcHBlbmRQaXBlbGluZTo6bWFrZVdl
YktpdFRyYWNrKGludCB0cmFja0luZGV4KQoreworICAgIFRyYWNrJiBhcHBlbmRQaXBlbGluZVRy
YWNrID0gKm1fdHJhY2tzLmF0KHRyYWNrSW5kZXgpOworCisgICAgUmVmUHRyPFdlYkNvcmU6OlRy
YWNrUHJpdmF0ZUJhc2U+IHRyYWNrOworICAgIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIqIGdz
dHJlYW1lclRyYWNrID0gbnVsbHB0cjsKKyAgICAvLyBGSVhNRTogQXVkaW9UcmFja1ByaXZhdGVH
U3RyZWFtZXIgZXRjLiBzaG91bGQgcHJvYmFibHkgdXNlIHBhZHMgb2YgdGhlIHBsYXliYWNrIHBp
cGVsaW5lIHJhdGhlciB0aGFuIHRoZSBhcHBlbmQgcGlwZWxpbmUuCisgICAgc3dpdGNoIChhcHBl
bmRQaXBlbGluZVRyYWNrLnN0cmVhbVR5cGUpIHsKKyAgICBjYXNlIFN0cmVhbVR5cGU6OkF1ZGlv
OiB7CisgICAgICAgIGF1dG8gc3BlY2lmaWNUcmFjayA9IEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVh
bWVyOjpjcmVhdGUobWFrZVdlYWtQdHIobV9wbGF5ZXJQcml2YXRlKSwgdHJhY2tJbmRleCwgYXBw
ZW5kUGlwZWxpbmVUcmFjay5hcHBzaW5rUGFkKTsKICAgICAgICAgZ3N0cmVhbWVyVHJhY2sgPSBz
cGVjaWZpY1RyYWNrLnB0cigpOwotICAgICAgICBtX3RyYWNrID0gbWFrZVJlZlB0cihzdGF0aWNf
Y2FzdDxUcmFja1ByaXZhdGVCYXNlKj4oc3BlY2lmaWNUcmFjay5wdHIoKSkpOworICAgICAgICB0
cmFjayA9IG1ha2VSZWZQdHIoc3RhdGljX2Nhc3Q8VHJhY2tQcml2YXRlQmFzZSo+KHNwZWNpZmlj
VHJhY2sucHRyKCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgTWVkaWFTb3Vy
Y2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpWaWRlbzogewotICAgICAgICBhdXRvIHNwZWNpZmljVHJh
Y2sgPSBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRyKCptX3Bs
YXllclByaXZhdGUpLCBpZCgpLCBzaW5rU2lua1BhZC5nZXQoKSk7CisgICAgY2FzZSBTdHJlYW1U
eXBlOjpWaWRlbzogeworICAgICAgICBhdXRvIHNwZWNpZmljVHJhY2sgPSBWaWRlb1RyYWNrUHJp
dmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRyKG1fcGxheWVyUHJpdmF0ZSksIHRyYWNr
SW5kZXgsIGFwcGVuZFBpcGVsaW5lVHJhY2suYXBwc2lua1BhZCk7CiAgICAgICAgIGdzdHJlYW1l
clRyYWNrID0gc3BlY2lmaWNUcmFjay5wdHIoKTsKLSAgICAgICAgbV90cmFjayA9IG1ha2VSZWZQ
dHIoc3RhdGljX2Nhc3Q8VHJhY2tQcml2YXRlQmFzZSo+KHNwZWNpZmljVHJhY2sucHRyKCkpKTsK
KyAgICAgICAgdHJhY2sgPSBtYWtlUmVmUHRyKHN0YXRpY19jYXN0PFRyYWNrUHJpdmF0ZUJhc2Uq
PihzcGVjaWZpY1RyYWNrLnB0cigpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNl
IE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VGV4dDogewotICAgICAgICBhdXRvIHNw
ZWNpZmljVHJhY2sgPSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUoaWQo
KSwgc2lua1NpbmtQYWQuZ2V0KCkpOworICAgIGNhc2UgU3RyZWFtVHlwZTo6VGV4dDogeworICAg
ICAgICBhdXRvIHNwZWNpZmljVHJhY2sgPSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVy
OjpjcmVhdGUodHJhY2tJbmRleCwgYXBwZW5kUGlwZWxpbmVUcmFjay5hcHBzaW5rUGFkKTsKICAg
ICAgICAgZ3N0cmVhbWVyVHJhY2sgPSBzcGVjaWZpY1RyYWNrLnB0cigpOwotICAgICAgICBtX3Ry
YWNrID0gbWFrZVJlZlB0cihzdGF0aWNfY2FzdDxUcmFja1ByaXZhdGVCYXNlKj4oc3BlY2lmaWNU
cmFjay5wdHIoKSkpOworICAgICAgICB0cmFjayA9IG1ha2VSZWZQdHIoc3RhdGljX2Nhc3Q8VHJh
Y2tQcml2YXRlQmFzZSo+KHNwZWNpZmljVHJhY2sucHRyKCkpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIGNhc2UgTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpJbnZhbGlkOgot
ICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlVuc3VwcG9ydGVk
IHRyYWNrIGNvZGVjOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcy5nZXQoKSk7Ci0gICAgICAgIC8v
IDMuNS43IEluaXRpYWxpemF0aW9uIFNlZ21lbnQgUmVjZWl2ZWQKLSAgICAgICAgLy8gNS4xLiBJ
ZiB0aGUgaW5pdGlhbGl6YXRpb24gc2VnbWVudCBjb250YWlucyB0cmFja3Mgd2l0aCBjb2RlY3Mg
dGhlIHVzZXIgYWdlbnQgZG9lcyBub3Qgc3VwcG9ydCwgdGhlbiBydW4gdGhlCi0gICAgICAgIC8v
IGFwcGVuZCBlcnJvciBhbGdvcml0aG0gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgotCi0gICAgICAg
IC8vIGFwcGVuZFBhcnNpbmdGYWlsZWQoKSB3aWxsIGltbWVkaWF0ZWx5IGNhdXNlIGEgcmVzZXRQ
YXJzZXJTdGF0ZSgpIHdoaWNoIHdpbGwgc3RvcCBkZW11eGluZywgdGhlbiB0aGUKLSAgICAgICAg
Ly8gQXBwZW5kUGlwZWxpbmUgd2lsbCBiZSBkZXN0cm95ZWQuCi0gICAgICAgIG1fc291cmNlQnVm
ZmVyUHJpdmF0ZS5hcHBlbmRQYXJzaW5nRmFpbGVkKCk7Ci0gICAgICAgIHJldHVybjsKICAgICBk
ZWZhdWx0OgotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlBh
ZCBoYXMgdW5rbm93biB0cmFjayB0eXBlLCBpZ25vcmluZzogJSIgR1NUX1BUUl9GT1JNQVQsIGNh
cHMuZ2V0KCkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KLSAgICBnc3RyZWFtZXJUcmFjay0+c2V0SW5pdGlhbENhcHMoR1JlZlB0cihjYXBz
KSk7Ci0KLSAgICBtX2FwcHNpbmtDYXBzID0gV1RGTW92ZShjYXBzKTsKLSAgICBtX3BsYXllclBy
aXZhdGUtPnRyYWNrRGV0ZWN0ZWQoKnRoaXMsIG1fdHJhY2spOworICAgIEFTU0VSVChhcHBlbmRQ
aXBlbGluZVRyYWNrLmNhcHMuZ2V0KCkpOworICAgIGdzdHJlYW1lclRyYWNrLT5zZXRJbml0aWFs
Q2FwcyhhcHBlbmRQaXBlbGluZVRyYWNrLmNhcHMuZ2V0KCkpOworICAgIHJldHVybiB0cmFjay5y
ZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIEFwcGVuZFBpcGVsaW5lOjpkaXNjb25uZWN0RGVt
dXhlclNyY1BhZEZyb21BcHBzaW5rRnJvbUFueVRocmVhZChHc3RQYWQqIGRlbXV4ZXJTcmNQYWQp
Cit2b2lkIEFwcGVuZFBpcGVsaW5lOjpUcmFjazo6aW5pdGlhbGl6ZUVsZW1lbnRzKEFwcGVuZFBp
cGVsaW5lKiBhcHBlbmRQaXBlbGluZSwgR3N0QmluKiBiaW4pCiB7Ci0gICAgLy8gTm90ZTogVGhp
cyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGVpdGhlciBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFk
IChlLmcuIGlmIGEgc3RyYW5nZSBpbml0aWFsaXphdGlvbiBzZWdtZW50IHdpdGgKLSAgICAvLyBp
bmNvbXBhdGlibGUgdHJhY2tzIGlzIGFwcGVuZGVkIGFuZCB0aGUgc3JjcGFkIGRpc2Nvbm5lY3Rl
ZCkgb3IgLS0gbW9yZSB1c3VhbGx5IC0tIGZyb20gdGhlIG1haW4gdGhyZWFkLCB3aGVuCi0gICAg
Ly8gYSBzdGF0ZSBjaGFuZ2UgaXMgbWFkZSB0byBicmluZyB0aGUgZGVtdXhlciBkb3duLiAoU3Rh
dGUgY2hhbmdlIG9wZXJhdGlvbnMgcnVuIGluIHRoZSBtYWluIHRocmVhZC4pCi0gICAgR1NUX0RF
QlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdT
VF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgInBhZC1yZW1vdmVkLWJlZm9yZSIpOwotCi0gICAgLy8g
UmVjb25uZWN0IHRoZSBvdGhlciBwYWQgaWYgaXQncyB0aGUgb25seSByZW1haW5pbmcgYWZ0ZXIg
cmVtb3ZpbmcgdGhpcyBvbmUgYW5kIHdhc24ndCBjb25uZWN0ZWQgeWV0IChoYXMgYSBibGFjayBo
b2xlIHByb2JlKS4KLSAgICBpZiAobV9kZW11eC0+bnVtc3JjcGFkcyA9PSAxKSB7Ci0gICAgICAg
IGF1dG8gcmVtYWluaW5nUGFkID0gR1NUX1BBRChtX2RlbXV4LT5zcmNwYWRzLT5kYXRhKTsKLQot
ICAgICAgICBhdXRvIHByb2JlSWQgPSBHUE9JTlRFUl9UT19VTE9ORyhnX29iamVjdF9nZXRfZGF0
YShHX09CSkVDVChyZW1haW5pbmdQYWQpLCAiYmxhY2tIb2xlUHJvYmVJZCIpKTsKLSAgICAgICAg
aWYgKHJlbWFpbmluZ1BhZCAmJiBwcm9iZUlkKSB7Ci0gICAgICAgICAgICBhdXRvIG9sZFBlZXJQ
YWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9hcHBzaW5rLmdldCgp
LCAic2luayIpKTsKLSAgICAgICAgICAgIHdoaWxlIChnc3RfcGFkX2lzX2xpbmtlZChvbGRQZWVy
UGFkLmdldCgpKSkgewotICAgICAgICAgICAgICAgIC8vIEdldCBzaW5rIHBhZCBvZiB0aGUgcGFy
c2VyIGJlZm9yZSBhcHBzaW5rLgotICAgICAgICAgICAgICAgIC8vIEFsbCB0aGUgZXhwZWN0ZWQg
ZWxlbWVudHMgYmV0d2VlbiB0aGUgZGVtdXhlciBhbmQgYXBwc2luayBhcmUgc3VwcG9zZWQgdG8g
aGF2ZSBwYWRzIG5hbWVkICJzaW5rIi4KLSAgICAgICAgICAgICAgICBvbGRQZWVyUGFkID0gYWRv
cHRHUmVmKGdzdF9wYWRfZ2V0X3BlZXIob2xkUGVlclBhZC5nZXQoKSkpOwotICAgICAgICAgICAg
ICAgIGF1dG8gZWxlbWVudCA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudChv
bGRQZWVyUGFkLmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgb2xkUGVlclBhZCA9IGFkb3B0R1Jl
Zihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChlbGVtZW50LmdldCgpLCAic2luayIpKTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQob2xkUGVlclBhZCk7Ci0gICAgICAgICAgICB9CisgICAgYXBw
c2luayA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJhcHBzaW5rIiwgbnVsbHB0cik7CisgICAgZ3N0
X2FwcF9zaW5rX3NldF9lbWl0X3NpZ25hbHMoR1NUX0FQUF9TSU5LKGFwcHNpbmsuZ2V0KCkpLCBU
UlVFKTsKKyAgICBnc3RfYmFzZV9zaW5rX3NldF9zeW5jKEdTVF9CQVNFX1NJTksoYXBwc2luay5n
ZXQoKSksIEZBTFNFKTsKKyAgICBnc3RfYmFzZV9zaW5rX3NldF9hc3luY19lbmFibGVkKEdTVF9C
QVNFX1NJTksoYXBwc2luay5nZXQoKSksIEZBTFNFKTsgLy8gTm8gcHJlcm9sbHMsIG5vIGFzeW5j
IHN0YXRlIGNoYW5nZXMuCisgICAgZ3N0X2Jhc2Vfc2lua19zZXRfZHJvcF9vdXRfb2Zfc2VnbWVu
dChHU1RfQkFTRV9TSU5LKGFwcHNpbmsuZ2V0KCkpLCBGQUxTRSk7CisgICAgZ3N0X2Jhc2Vfc2lu
a19zZXRfbGFzdF9zYW1wbGVfZW5hYmxlZChHU1RfQkFTRV9TSU5LKGFwcHNpbmsuZ2V0KCkpLCBG
QUxTRSk7CiAKLSAgICAgICAgICAgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlKHJlbWFpbmluZ1BhZCwg
cHJvYmVJZCk7CisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTihhcHBlbmRQaXBlbGluZS0+cGlwZWxp
bmUoKSksIGFwcHNpbmsuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9w
YXJlbnQoYXBwc2luay5nZXQoKSk7CisgICAgZW50cnlQYWQgPSBhcHBzaW5rUGFkID0gYWRvcHRH
UmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGFwcHNpbmsuZ2V0KCksICJzaW5rIikpOwog
Ci0gICAgICAgICAgICBhdXRvIG9sZFBlZXJQYWRDYXBzID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0
X2N1cnJlbnRfY2FwcyhvbGRQZWVyUGFkLmdldCgpKSk7Ci0gICAgICAgICAgICBhdXRvIHJlbWFp
bmluZ1BhZENhcHMgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKHJlbWFpbmlu
Z1BhZCkpOwotICAgICAgICAgICAgY29uc3QgY2hhciogb2xkUGVlclBhZFR5cGUgPSBudWxscHRy
OwotICAgICAgICAgICAgY29uc3QgY2hhciogcmVtYWluaW5nUGFkVHlwZSA9IG51bGxwdHI7Cisj
aWYgIUxPR19ESVNBQkxFRAorICAgIGFwcHNpbmtEYXRhRW50ZXJpbmdQYWRQcm9iZUluZm9ybWF0
aW9uLmFwcGVuZFBpcGVsaW5lID0gYXBwZW5kUGlwZWxpbmU7CisgICAgYXBwc2lua0RhdGFFbnRl
cmluZ1BhZFByb2JlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24gPSAiYXBwc2luayBkYXRhIGVudGVy
aW5nIjsKKyAgICBhcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5wcm9iZUlk
ID0gZ3N0X3BhZF9hZGRfcHJvYmUoYXBwc2lua1BhZC5nZXQoKSwgR1NUX1BBRF9QUk9CRV9UWVBF
X0JVRkZFUiwgcmVpbnRlcnByZXRfY2FzdDxHc3RQYWRQcm9iZUNhbGxiYWNrPihhcHBlbmRQaXBl
bGluZVBhZFByb2JlRGVidWdJbmZvcm1hdGlvbiksICZhcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJv
YmVJbmZvcm1hdGlvbiwgbnVsbHB0cik7CisjZW5kaWYKIAotICAgICAgICAgICAgaWYgKG9sZFBl
ZXJQYWRDYXBzKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBvbGRQZWVyUGFkQ2Fwc1N0cnVjdHVy
ZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUob2xkUGVlclBhZENhcHMuZ2V0KCksIDApOwotICAg
ICAgICAgICAgICAgIGlmIChvbGRQZWVyUGFkQ2Fwc1N0cnVjdHVyZSkKLSAgICAgICAgICAgICAg
ICAgICAgb2xkUGVlclBhZFR5cGUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lKG9sZFBlZXJQYWRD
YXBzU3RydWN0dXJlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyZW1haW5pbmdQ
YWRDYXBzKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZW1haW5pbmdQYWRDYXBzU3RydWN0dXJl
ID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShyZW1haW5pbmdQYWRDYXBzLmdldCgpLCAwKTsKLSAg
ICAgICAgICAgICAgICBpZiAocmVtYWluaW5nUGFkQ2Fwc1N0cnVjdHVyZSkKLSAgICAgICAgICAg
ICAgICAgICAgcmVtYWluaW5nUGFkVHlwZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUocmVtYWlu
aW5nUGFkQ2Fwc1N0cnVjdHVyZSk7Ci0gICAgICAgICAgICB9CisjaWYgRU5BQkxFKEVOQ1JZUFRF
RF9NRURJQSkKKyAgICBhcHBzaW5rUGFkRXZlbnRQcm9iZUluZm9ybWF0aW9uLmFwcGVuZFBpcGVs
aW5lID0gYXBwZW5kUGlwZWxpbmU7CisgICAgYXBwc2lua1BhZEV2ZW50UHJvYmVJbmZvcm1hdGlv
bi5kZXNjcmlwdGlvbiA9ICJhcHBzaW5rIGV2ZW50IHByb2JlIjsKKyAgICBhcHBzaW5rUGFkRXZl
bnRQcm9iZUluZm9ybWF0aW9uLnByb2JlSWQgPSBnc3RfcGFkX2FkZF9wcm9iZShhcHBzaW5rUGFk
LmdldCgpLCBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTSwgcmVpbnRlcnByZXRf
Y2FzdDxHc3RQYWRQcm9iZUNhbGxiYWNrPihhcHBlbmRQaXBlbGluZUFwcHNpbmtQYWRFdmVudFBy
b2JlKSwgJmFwcHNpbmtQYWRFdmVudFByb2JlSW5mb3JtYXRpb24sIG51bGxwdHIpOworI2VuZGlm
CiAKLSAgICAgICAgICAgIGlmIChnX3N0cmNtcDAob2xkUGVlclBhZFR5cGUsIHJlbWFpbmluZ1Bh
ZFR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgR1NUX0VSUk9SKCJUaGUgcmVtYWluaW5nIHBhZCBo
YXMgYSBibGFja0hvbGVQcm9iZSwgYnV0IGNhbid0IHJlY29ubmVjdCBhcyBtYWluIHBhZCBiZWNh
dXNlIHRoZSBjYXBzIHR5cGVzIGFyZSBpbmNvbXBhdGlibGU6IG9sZFBlZXJQYWRDYXBzOiAlIiBH
U1RfUFRSX0ZPUk1BVCAiLCByZW1haW5pbmdQYWRDYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgb2xk
UGVlclBhZENhcHMuZ2V0KCksIHJlbWFpbmluZ1BhZENhcHMuZ2V0KCkpOwotICAgICAgICAgICAg
ICAgIGlmICghaXNNYWluVGhyZWFkKCkpCi0gICAgICAgICAgICAgICAgICAgIGhhbmRsZUVycm9y
Q29uZGl0aW9uRnJvbVN0cmVhbWluZ1RocmVhZCgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgbV9zb3VyY2VCdWZmZXJQcml2YXRlLmFwcGVuZFBhcnNpbmdGYWls
ZWQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgLy8gU29t
ZSBhdWRpbyBmaWxlcyB1bmhlbHBmdWxseSBvbWl0IHRoZSBkdXJhdGlvbiBvZiBmcmFtZXMgaW4g
dGhlIGNvbnRhaW5lci4gV2UgbmVlZCB0byBwYXJzZQorICAgIC8vIHRoZSBjb250YWluZWQgYXVk
aW8gc3RyZWFtcyBpbiBvcmRlciB0byBrbm93IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWVzLgor
ICAgIC8vIFRoaXMgaXMga25vd24gdG8gYmUgYW4gaXNzdWUgd2l0aCBZb3VUdWJlIFdlYk0gZmls
ZXMgY29udGFpbmluZyBPcHVzIGF1ZGlvIGFzIG9mIFlUVFYyMDE4LgorICAgIGlmICgocGFyc2Vy
ID0gY3JlYXRlT3B0aW9uYWxQYXJzZXJGb3JGb3JtYXQodHJhY2tJZCwgY2Fwcy5nZXQoKSkpKSB7
CisgICAgICAgIGdzdF9iaW5fYWRkKGJpbiwgcGFyc2VyLmdldCgpKTsKKyAgICAgICAgZ3N0X2Vs
ZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChwYXJzZXIuZ2V0KCkpOworICAgICAgICBnc3Rf
ZWxlbWVudF9saW5rKHBhcnNlci5nZXQoKSwgYXBwc2luay5nZXQoKSk7CisgICAgICAgIEFTU0VS
VChHU1RfUEFEX0lTX0xJTktFRChhcHBzaW5rUGFkLmdldCgpKSk7CisgICAgICAgIGVudHJ5UGFk
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHBhcnNlci5nZXQoKSwgInNp
bmsiKSk7CisgICAgfQorfQogCi0gICAgICAgICAgICBHU1RfREVCVUcoIlRoZSByZW1haW5pbmcg
cGFkIGhhcyBhIGJsYWNrSG9sZVByb2JlLCByZWNvbm5lY3RpbmcgYXMgbWFpbiBwYWQuIG9sZFBh
ZDogJSIgR1NUX1BUUl9GT1JNQVQgIiwgbmV3UGFkOiAlIiBHU1RfUFRSX0ZPUk1BVCAiLCBwZWVy
UGFkOiAlIiBHU1RfUFRSX0ZPUk1BVCwgZGVtdXhlclNyY1BhZCwgcmVtYWluaW5nUGFkLCBvbGRQ
ZWVyUGFkLmdldCgpKTsKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6Omhvb2tUcmFja0V2ZW50cyhUcmFj
ayYgdHJhY2spCit7CisgICAgZ19zaWduYWxfY29ubmVjdCh0cmFjay5hcHBzaW5rLmdldCgpLCAi
bmV3LXNhbXBsZSIsIEdfQ0FMTEJBQ0soK1tdKEdzdEVsZW1lbnQqIGFwcHNpbmssIEFwcGVuZFBp
cGVsaW5lKiBhcHBlbmRQaXBlbGluZSkgLT4gR3N0Rmxvd1JldHVybiB7CisgICAgICAgIGFwcGVu
ZFBpcGVsaW5lLT5oYW5kbGVBcHBzaW5rTmV3U2FtcGxlRnJvbVN0cmVhbWluZ1RocmVhZChhcHBz
aW5rKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0pLCB0aGlzKTsKIAotICAg
ICAgICAgICAgZ3N0X3BhZF9saW5rKHJlbWFpbmluZ1BhZCwgb2xkUGVlclBhZC5nZXQoKSk7Ci0g
ICAgICAgICAgICBpZiAobV9wYXJzZXIpCi0gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0
X3N0YXRlKG1fcGFyc2VyLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgICAgICAgICBnc3Rf
ZWxlbWVudF9zZXRfc3RhdGUobV9hcHBzaW5rLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAg
ICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9hcHBzaW5rLmdldCgpLCBHU1RfU1RBVEVf
UExBWUlORyk7Ci0gICAgICAgICAgICBpZiAobV9wYXJzZXIpCi0gICAgICAgICAgICAgICAgZ3N0
X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGFyc2VyLmdldCgpLCBHU1RfU1RBVEVfUExBWUlORyk7Cisg
ICAgc3RydWN0IENsb3N1cmUgeworICAgIHB1YmxpYzoKIAotICAgICAgICAgICAgR1NUX0RFQlVH
X0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9E
RUJVR19HUkFQSF9TSE9XX0FMTCwgIndlYmtpdC1hZnRlci1yZWxpbmsiKTsKKyAgICAgICAgQ2xv
c3VyZShBcHBlbmRQaXBlbGluZSYgYXBwZW5kUGlwZWxpbmUsIFRyYWNrJiB0cmFjaykKKyAgICAg
ICAgICAgIDogYXBwZW5kUGlwZWxpbmUoYXBwZW5kUGlwZWxpbmUpCisgICAgICAgICAgICAsIHRy
YWNrKHRyYWNrKQorICAgICAgICB7IH0KKyAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJ1Y3Qodm9p
ZCogY2xvc3VyZSwgR0Nsb3N1cmUqKSB7IGRlbGV0ZSBzdGF0aWNfY2FzdDxDbG9zdXJlKj4oY2xv
c3VyZSk7IH0KIAorICAgICAgICBBcHBlbmRQaXBlbGluZSYgYXBwZW5kUGlwZWxpbmU7CisgICAg
ICAgIFRyYWNrJiB0cmFjazsKKyAgICB9OworCisgICAgZ19zaWduYWxfY29ubmVjdF9kYXRhKHRy
YWNrLmFwcHNpbmtQYWQuZ2V0KCksICJub3RpZnk6OmNhcHMiLCBHX0NBTExCQUNLKCtbXShHT2Jq
ZWN0KiwgR1BhcmFtU3BlYyosIENsb3N1cmUqIGNsb3N1cmUpIHsKKyAgICAgICAgQXBwZW5kUGlw
ZWxpbmUmIGFwcGVuZFBpcGVsaW5lID0gY2xvc3VyZS0+YXBwZW5kUGlwZWxpbmU7CisgICAgICAg
IFRyYWNrJiB0cmFjayA9IGNsb3N1cmUtPnRyYWNrOworICAgICAgICBpZiAoaXNNYWluVGhyZWFk
KCkpIHsKKyAgICAgICAgICAgIC8vIFdoZW4gY2hhbmdpbmcgdGhlIHBpcGVsaW5lIHN0YXRlIGRv
d24gdG8gUkVBRFkgdGhlIGRlbXV4ZXIgaXMgdW5saW5rZWQgYW5kIHRoaXMgdHJpZ2dlcnMgYSBj
YXBzIG5vdGlmaWNhdGlvbgorICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUgYXBwc2luayBsb3Nl
cyBpdHMgcHJldmlvdXNseSBuZWdvdGlhdGVkIGNhcHMuIFdlIGFyZSBub3QgaW50ZXJlc3RlZCBp
biB0aGVzZSB1bm5lZ290aWF0ZWQgY2Fwcy4KKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICBH
UmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFk
KHRyYWNrLmFwcHNpbmsuZ2V0KCksICJzaW5rIikpOworICAgICAgICAgICAgR1JlZlB0cjxHc3RD
YXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyhwYWQuZ2V0KCkp
KTsKKyAgICAgICAgICAgIEFTU0VSVCghY2Fwcyk7CisjZW5kaWYKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgIH0KIAotICAgIEdTVF9ERUJVRygiRGlzY29ubmVjdGluZyBhcHBz
aW5rIik7CisgICAgICAgIC8vIFRoZSBzdHJlYW1pbmcgdGhyZWFkIGhhcyBqdXN0IHJlY2VpdmVk
IGEgbmV3IGNhcHMgYW5kIGlzIGFib3V0IHRvIGxldCBzYW1wbGVzIHVzaW5nIHRoZQorICAgICAg
ICAvLyBuZXcgY2FwcyBmbG93LiBMZXQncyBibG9jayBpdCB1bnRpbCB0aGUgbWFpbiB0aHJlYWQg
aGFzIGNvbnN1bWVkIHRoZSBzYW1wbGVzIHdpdGggdGhlIG9sZAorICAgICAgICAvLyBjYXBzIGFu
ZCBoYXMgcHJvY2Vzc2VkIHRoZSBjYXBzIGNoYW5nZS4KKyAgICAgICAgYXBwZW5kUGlwZWxpbmUu
bV90YXNrUXVldWUuZW5xdWV1ZVRhc2tBbmRXYWl0PEFib3J0YWJsZVRhc2tRdWV1ZTo6Vm9pZD4o
WyZhcHBlbmRQaXBlbGluZSwgJnRyYWNrXSgpIHsKKyAgICAgICAgICAgIGFwcGVuZFBpcGVsaW5l
LmFwcHNpbmtDYXBzQ2hhbmdlZCh0cmFjayk7CisgICAgICAgICAgICByZXR1cm4gQWJvcnRhYmxl
VGFza1F1ZXVlOjpWb2lkKCk7CisgICAgICAgIH0pOworICAgIH0pLCBuZXcgQ2xvc3VyZSB7ICp0
aGlzLCB0cmFjayB9LCBDbG9zdXJlOjpkZXN0cnVjdCwgc3RhdGljX2Nhc3Q8R0Nvbm5lY3RGbGFn
cz4oMCkpOworfQogCi0gICAgaWYgKG1fcGFyc2VyKSB7Ci0gICAgICAgIGFzc2VydGVkRWxlbWVu
dFNldFN0YXRlKG1fcGFyc2VyLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgICAgIGdzdF9i
aW5fcmVtb3ZlKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIG1fcGFyc2VyLmdldCgpKTsKLSAg
ICAgICAgbV9wYXJzZXIgPSBudWxscHRyOworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcK
K2NvbnN0IGNoYXIqIEFwcGVuZFBpcGVsaW5lOjpzdHJlYW1UeXBlVG9TdHJpbmcoU3RyZWFtVHlw
ZSBzdHJlYW1UeXBlKQoreworICAgIHN3aXRjaCAoc3RyZWFtVHlwZSkgeworICAgIGNhc2UgU3Ry
ZWFtVHlwZTo6QXVkaW86CisgICAgICAgIHJldHVybiAiQXVkaW8iOworICAgIGNhc2UgU3RyZWFt
VHlwZTo6VmlkZW86CisgICAgICAgIHJldHVybiAiVmlkZW8iOworICAgIGNhc2UgU3RyZWFtVHlw
ZTo6VGV4dDoKKyAgICAgICAgcmV0dXJuICJUZXh0IjsKKyAgICBjYXNlIFN0cmVhbVR5cGU6Oklu
dmFsaWQ6CisgICAgICAgIHJldHVybiAiSW52YWxpZCI7CisgICAgY2FzZSBTdHJlYW1UeXBlOjpV
bmtub3duOgorICAgICAgICByZXR1cm4gIlVua25vd24iOwogICAgIH0KLQotICAgIEdTVF9ERUJV
R19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1Rf
REVCVUdfR1JBUEhfU0hPV19BTEwsICJwYWQtcmVtb3ZlZC1hZnRlciIpOwogfQorI2VuZGlmCiAK
ICNpZiAhTE9HX0RJU0FCTEVECiBzdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4gYXBwZW5kUGlwZWxp
bmVQYWRQcm9iZURlYnVnSW5mb3JtYXRpb24oR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiBpbmZv
LCBzdHJ1Y3QgUGFkUHJvYmVJbmZvcm1hdGlvbiogcGFkUHJvYmVJbmZvcm1hdGlvbikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBw
ZW5kUGlwZWxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9tc2UvQXBwZW5kUGlwZWxpbmUuaAppbmRleCA2ODczZmI3NTY2MWY0NzQxZjEzYmMxMGIxOTY2
MzgzMWUxNDVhZTQzLi5hYTM1NGU1NTE3MWJkZjQzNGVjM2NhZjQ1ZTFkZmFkNGQ4YjBhNTA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNl
L0FwcGVuZFBpcGVsaW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5oCkBAIC01Miw0NiArNTIsODIgQEAgcHVibGlj
OgogICAgIHZvaWQgcHVzaE5ld0J1ZmZlcihHUmVmUHRyPEdzdEJ1ZmZlcj4mJik7CiAgICAgdm9p
ZCByZXNldFBhcnNlclN0YXRlKCk7CiAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lciYg
c291cmNlQnVmZmVyUHJpdmF0ZSgpIHsgcmV0dXJuIG1fc291cmNlQnVmZmVyUHJpdmF0ZTsgfQot
ICAgIEdzdENhcHMqIGFwcHNpbmtDYXBzKCkgeyByZXR1cm4gbV9hcHBzaW5rQ2Fwcy5nZXQoKTsg
fQotICAgIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiB0cmFjaygpIHsgcmV0dXJu
IG1fdHJhY2s7IH0KICAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UqIHBsYXllclBy
aXZhdGUoKSB7IHJldHVybiBtX3BsYXllclByaXZhdGU7IH0KIAogcHJpdmF0ZToKICAgICAvLyBT
aW1pbGFyIHRvIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZSwgYnV0IHdpdGgg
YSBuZXcgdmFsdWUgKEludmFsaWQpIGZvciB3aGVuIHRoZSBjb2RlYyBpcwogICAgIC8vIG5vdCBz
dXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0sIHdoaWNoIHNob3VsZCByZXN1bHQgaW4gUGFyc2luZ0Zh
aWxlZCBlcnJvciBiZWluZyB0aHJvd24gaW4gU291cmNlQnVmZmVyLgotICAgIGVudW0gTWVkaWFT
b3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyIHsgQXVkaW8sIFZpZGVvLCBUZXh0LCBVbmtub3duLCBJ
bnZhbGlkIH07CisgICAgZW51bSBTdHJlYW1UeXBlIHsgQXVkaW8sIFZpZGVvLCBUZXh0LCBVbmtu
b3duLCBJbnZhbGlkIH07CisjaWYgIUxPR19ESVNBQkxFRAorICAgIHN0YXRpYyBjb25zdCBjaGFy
ICogc3RyZWFtVHlwZVRvU3RyaW5nKFN0cmVhbVR5cGUpOworI2VuZGlmCisKKyAgICBzdHJ1Y3Qg
VHJhY2sgeworICAgICAgICAvLyBUcmFjayBvYmplY3RzIGFyZSBjcmVhdGVkIG9uIHBhZC1hZGRl
ZCBmb3IgdGhlIGZpcnN0IGluaXRpYWxpemF0aW9uIHNlZ21lbnQsIGFuZCBkZXN0cm95ZWQgYWZ0
ZXIKKyAgICAgICAgLy8gdGhlIHBpcGVsaW5lIHN0YXRlIGhhcyBiZWVuIHNldCB0byBHU1RfU1RB
VEVfTlVMTC4KKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVHJhY2spOworICAgICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgVHJhY2soY29u
c3QgQXRvbVN0cmluZyYgdHJhY2tJZCwgU3RyZWFtVHlwZSBzdHJlYW1UeXBlLCBjb25zdCBHUmVm
UHRyPEdzdENhcHM+JiBjYXBzLCBjb25zdCBGbG9hdFNpemUmIHByZXNlbnRhdGlvblNpemUpCisg
ICAgICAgICAgICA6IHRyYWNrSWQodHJhY2tJZCkKKyAgICAgICAgICAgICwgc3RyZWFtVHlwZShz
dHJlYW1UeXBlKQorICAgICAgICAgICAgLCBjYXBzKGNhcHMpCisgICAgICAgICAgICAsIHByZXNl
bnRhdGlvblNpemUocHJlc2VudGF0aW9uU2l6ZSkKKyAgICAgICAgeyB9CisKKyAgICAgICAgQXRv
bVN0cmluZyB0cmFja0lkOworICAgICAgICBTdHJlYW1UeXBlIHN0cmVhbVR5cGU7CisgICAgICAg
IEdSZWZQdHI8R3N0Q2Fwcz4gY2FwczsKKyAgICAgICAgRmxvYXRTaXplIHByZXNlbnRhdGlvblNp
emU7CisKKyAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IGVudHJ5UGFkOyAvLyBTaW5rIHBhZCBvZiB0
aGUgcGFyc2VyIChpZiBhbnkpIG9yIHRoZSBhcHBzaW5rLgorICAgICAgICBHUmVmUHRyPEdzdEVs
ZW1lbnQ+IHBhcnNlcjsgLy8gT3B0aW9uYWwgKG5lZWRlZCBieSBzb21lIGZvcm1hdHMpLgorICAg
ICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGFwcHNpbms7CisgICAgICAgIEdSZWZQdHI8R3N0UGFk
PiBhcHBzaW5rUGFkOworCisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNl
PiB3ZWJLaXRUcmFjazsKKworI2lmICFMT0dfRElTQUJMRUQKKyAgICAgICAgc3RydWN0IFBhZFBy
b2JlSW5mb3JtYXRpb24gYXBwc2lua0RhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb247Cisj
ZW5kaWYKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorICAgICAgICBzdHJ1Y3QgUGFkUHJv
YmVJbmZvcm1hdGlvbiBhcHBzaW5rUGFkRXZlbnRQcm9iZUluZm9ybWF0aW9uOworI2VuZGlmCisK
KyAgICAgICAgdm9pZCBpbml0aWFsaXplRWxlbWVudHMoQXBwZW5kUGlwZWxpbmUqLCBHc3RCaW4q
KTsKKyAgICB9OwogCiAgICAgdm9pZCBoYW5kbGVFcnJvclN5bmNNZXNzYWdlKEdzdE1lc3NhZ2Uq
KTsKICAgICB2b2lkIGhhbmRsZU5lZWRDb250ZXh0U3luY01lc3NhZ2UoR3N0TWVzc2FnZSopOwog
ICAgIC8vIEZvciBkZWJ1ZyBwdXJwb3NlcyBvbmx5OgogICAgIHZvaWQgaGFuZGxlU3RhdGVDaGFu
Z2VNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKIAotICAgIGdpbnQgaWQoKTsKLQogICAgIHZvaWQgaGFu
ZGxlQXBwc2lua05ld1NhbXBsZUZyb21TdHJlYW1pbmdUaHJlYWQoR3N0RWxlbWVudCopOworICAg
IHZvaWQgaGFuZGxlRXJyb3JDb25kaXRpb24oKTsKICAgICB2b2lkIGhhbmRsZUVycm9yQ29uZGl0
aW9uRnJvbVN0cmVhbWluZ1RocmVhZCgpOwogCi0gICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIGNh
cHMuCi0gICAgdm9pZCBwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKEdzdENhcHMqKTsKLSAgICB2b2lk
IGFwcHNpbmtDYXBzQ2hhbmdlZCgpOwotICAgIHZvaWQgYXBwc2lua05ld1NhbXBsZShHUmVmUHRy
PEdzdFNhbXBsZT4mJik7CisgICAgdm9pZCBob29rVHJhY2tFdmVudHMoVHJhY2smKTsKKyAgICBz
dGF0aWMgc3RkOjp0dXBsZTxHUmVmUHRyPEdzdENhcHM+LCBBcHBlbmRQaXBlbGluZTo6U3RyZWFt
VHlwZSwgRmxvYXRTaXplPiBwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKEdzdENhcHMqKTsKKyAgICBS
ZWY8V2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZT4gbWFrZVdlYktpdFRyYWNrKGludCB0cmFja0lu
ZGV4KTsKKyAgICB2b2lkIGFwcHNpbmtDYXBzQ2hhbmdlZChUcmFjayYpOworICAgIHZvaWQgYXBw
c2lua05ld1NhbXBsZShjb25zdCBUcmFjayYsIEdSZWZQdHI8R3N0U2FtcGxlPiYmKTsKICAgICB2
b2lkIGhhbmRsZUVuZE9mQXBwZW5kKCk7CiAgICAgdm9pZCBkaWRSZWNlaXZlSW5pdGlhbGl6YXRp
b25TZWdtZW50KCk7Ci0gICAgQXRvbVN0cmluZyB0cmFja0lkKCk7CiAKICAgICBHc3RCdXMqIGJ1
cygpIHsgcmV0dXJuIG1fYnVzLmdldCgpOyB9CiAgICAgR3N0RWxlbWVudCogcGlwZWxpbmUoKSB7
IHJldHVybiBtX3BpcGVsaW5lLmdldCgpOyB9CiAgICAgR3N0RWxlbWVudCogYXBwc3JjKCkgeyBy
ZXR1cm4gbV9hcHBzcmMuZ2V0KCk7IH0KLSAgICBHc3RFbGVtZW50KiBhcHBzaW5rKCkgeyByZXR1
cm4gbV9hcHBzaW5rLmdldCgpOyB9Ci0gICAgR3N0Q2FwcyogZGVtdXhlclNyY1BhZENhcHMoKSB7
IHJldHVybiBtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpOyB9CiAKLSAgICB2b2lkIGRpc2Nvbm5l
Y3REZW11eGVyU3JjUGFkRnJvbUFwcHNpbmtGcm9tQW55VGhyZWFkKEdzdFBhZCopOwotICAgIHZv
aWQgY29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmtGcm9tU3RyZWFtaW5nVGhyZWFkKEdzdFBh
ZCopOwotICAgIHZvaWQgY29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmsoR3N0UGFkKik7Cisg
ICAgc3RhdGljIEF0b21TdHJpbmcgZ2VuZXJhdGVUcmFja0lkKFN0cmVhbVR5cGUsIGludCBwYWRJ
bmRleCk7CisgICAgZW51bSBjbGFzcyBDcmVhdGVUcmFja1Jlc3VsdCB7IFRyYWNrQ3JlYXRlZCwg
VHJhY2tJZ25vcmVkLCBBcHBlbmRQYXJzaW5nRmFpbGVkIH07CisgICAgc3RkOjpwYWlyPENyZWF0
ZVRyYWNrUmVzdWx0LCBBcHBlbmRQaXBlbGluZTo6VHJhY2sqPiB0cnlDcmVhdGVUcmFja0Zyb21Q
YWQoR3N0UGFkKiBkZW11eGVyU3JjUGFkLCBpbnQgcGFkSW5kZXgpOworICAgIEFwcGVuZFBpcGVs
aW5lOjpUcmFjayogdHJ5TWF0Y2hQYWRUb0V4aXN0aW5nVHJhY2soR3N0UGFkKiBkZW11eGVyU3Jj
UGFkKTsKKyAgICB2b2lkIGxpbmtQYWRXaXRoVHJhY2soR3N0UGFkKiBkZW11eGVyU3JjUGFkLCBU
cmFjayYpOwogCiAgICAgdm9pZCByZXNldFBpcGVsaW5lKCk7CiAKLSAgICB2b2lkIGNvbnN1bWVB
cHBzaW5rQXZhaWxhYmxlU2FtcGxlcygpOworICAgIHZvaWQgY29uc3VtZUFwcHNpbmtzQXZhaWxh
YmxlU2FtcGxlcygpOwogCiAgICAgR3N0UGFkUHJvYmVSZXR1cm4gYXBwc3JjRW5kT2ZBcHBlbmRD
aGVja2VyUHJvYmUoR3N0UGFkUHJvYmVJbmZvKik7CiAKQEAgLTEwNSwyNCArMTQxLDIwIEBAIHBy
aXZhdGU6CiAgICAgLy8gT25seSB0aGUgcG9pbnRlcnMgYXJlIGNvbXBhcmVkLgogICAgIFdURjo6
VGhyZWFkKiBtX3N0cmVhbWluZ1RocmVhZDsKIAorICAgIGJvb2wgbV9oYXNSZWNlaXZlZEZpcnN0
SW5pdGlhbGl6YXRpb25TZWdtZW50IHsgZmFsc2UgfTsKICAgICAvLyBVc2VkIG9ubHkgZm9yIGFz
c2VydGluZyBFT1MgZXZlbnRzIGFyZSBvbmx5IGNhdXNlZCBieSBkZW11eGluZyBlcnJvcnMuCiAg
ICAgYm9vbCBtX2Vycm9yUmVjZWl2ZWQgeyBmYWxzZSB9OwogCiAgICAgU291cmNlQnVmZmVyUHJp
dmF0ZUdTdHJlYW1lciYgbV9zb3VyY2VCdWZmZXJQcml2YXRlOwogICAgIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRSogbV9wbGF5ZXJQcml2YXRlOwogCi0gICAgLy8gKG1fbWVkaWFUeXBl
LCBtX2lkKSBpcyB1bmlxdWUuCi0gICAgZ2ludCBtX2lkOwotCiAgICAgTWVkaWFUaW1lIG1faW5p
dGlhbER1cmF0aW9uOwotCisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2FwcHNyYzsKICAgICBH
UmVmUHRyPEdzdEVsZW1lbnQ+IG1fcGlwZWxpbmU7CiAgICAgR1JlZlB0cjxHc3RCdXM+IG1fYnVz
OwotICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9hcHBzcmM7CiAgICAgR1JlZlB0cjxHc3RFbGVt
ZW50PiBtX2RlbXV4OwotICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9wYXJzZXI7IC8vIE9wdGlv
bmFsLgotICAgIC8vIFRoZSBkZW11eGVyIGhhcyBvbmUgc3JjIHN0cmVhbSBvbmx5LCBzbyBvbmx5
IG9uZSBhcHBzaW5rIGlzIG5lZWRlZCBhbmQgbGlua2VkIHRvIGl0LgotICAgIEdSZWZQdHI8R3N0
RWxlbWVudD4gbV9hcHBzaW5rOworCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUcmFjaz4+
IG1fdHJhY2tzOwogCiAgICAgLy8gVXNlZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBub3RpZmljYXRp
b25zIHBlciBzYW1wbGUuCiAgICAgLy8gSXQgaXMgcmVhZCBhbmQgd3JpdHRlbiBmcm9tIHRoZSBz
dHJlYW1pbmcgdGhyZWFkIGFuZCB3cml0dGVuIGZyb20gdGhlIG1haW4gdGhyZWFkLgpAQCAtMTMx
LDI1ICsxNjMsMTEgQEAgcHJpdmF0ZToKICAgICAvLyBxdWV1ZSwgaW5zdGVhZCBvZiBpdCBncm93
aW5nIHVuYm91bmRlZC4KICAgICBzdGQ6OmF0b21pY19mbGFnIG1fd2FzQnVzQWxyZWFkeU5vdGlm
aWVkT2ZBdmFpbGFibGVTYW1wbGVzOwogCi0gICAgR1JlZlB0cjxHc3RDYXBzPiBtX2FwcHNpbmtD
YXBzOwotICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9kZW11eGVyU3JjUGFkQ2FwczsKLSAgICBGbG9h
dFNpemUgbV9wcmVzZW50YXRpb25TaXplOwotCiAjaWYgIUxPR19ESVNBQkxFRAogICAgIHN0cnVj
dCBQYWRQcm9iZUluZm9ybWF0aW9uIG1fZGVtdXhlckRhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3Jt
YXRpb247Ci0gICAgc3RydWN0IFBhZFByb2JlSW5mb3JtYXRpb24gbV9hcHBzaW5rRGF0YUVudGVy
aW5nUGFkUHJvYmVJbmZvcm1hdGlvbjsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEVOQ1JZUFRFRF9N
RURJQSkKLSAgICBzdHJ1Y3QgUGFkUHJvYmVJbmZvcm1hdGlvbiBtX2FwcHNpbmtQYWRFdmVudFBy
b2JlSW5mb3JtYXRpb247CiAjZW5kaWYKIAotICAgIE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJl
YW1lciBtX3N0cmVhbVR5cGU7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+
IG1fdHJhY2s7Ci0KICAgICBBYm9ydGFibGVUYXNrUXVldWUgbV90YXNrUXVldWU7Ci0KLSAgICBH
UmVmUHRyPEdzdEJ1ZmZlcj4gbV9wZW5kaW5nQnVmZmVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFLmNwcAppbmRleCA0ZWVjMDllMjJkMTdkYzM1MmUyNTA1MDkxNDAxZmI2ZTI2
NmQ3OTQ0Li44MzFjMmIyYzZlZmIyMjQ3NTliNDNiZmU2N2ZiNzNiMTRmZTBhNjM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0Uu
Y3BwCkBAIC0zMzEsMjUgKzMzMSwyMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6ZHVyYXRpb25DaGFuZ2VkKCkKICAgICB9CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFOjp0cmFja0RldGVjdGVkKEFwcGVuZFBpcGVsaW5lJiBhcHBlbmRQaXBl
bGluZSwgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+IG5ld1RyYWNrKQordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNldEluaXRpYWxWaWRlb1NpemUoY29uc3Qg
RmxvYXRTaXplJiB2aWRlb1NpemUpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBBU1NFUlQoYXBwZW5kUGlwZWxpbmUudHJhY2soKSA9PSBuZXdUcmFjayk7Ci0KLSAgICBHc3RD
YXBzKiBjYXBzID0gYXBwZW5kUGlwZWxpbmUuYXBwc2lua0NhcHMoKTsKLSAgICBBU1NFUlQoY2Fw
cyk7Ci0gICAgR1NUX0RFQlVHKCJEZW11eGVyIHBhcnNlZCBtZXRhZGF0YSB3aXRoIHRyYWNrIElE
OiAlcywgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIG5ld1RyYWNrLT5pZCgpLnN0cmluZygpLmxh
dGluMSgpLmRhdGEoKSwgY2Fwcyk7CiAKICAgICAvLyBXZSBzZXQgdGhlIHNpemUgb2YgdGhlIHZp
ZGVvIG9ubHkgZm9yIHRoZSBmaXJzdCBpbml0aWFsaXphdGlvbiBzZWdtZW50LgogICAgIC8vIFRo
aXMgaXMgaW50ZW50aW9uYWw6IE5vcm1hbGx5IHRoZSB2aWRlbyBzaXplIGRlcGVuZHMgb24gdGhl
IGZyYW1lcyBhcnJpdmluZwogICAgIC8vIGF0IHRoZSBzaW5rIGluIHRoZSBwbGF5YmFjayBwaXBl
bGluZSwgbm90IGluIHRoZSBhcHBlbmQgcGlwZWxpbmU7IGJ1dCB3ZSBzdGlsbAogICAgIC8vIHdh
bnQgdG8gcmVwb3J0IGFuIGluaXRpYWwgc2l6ZSBmb3IgSEFWRV9NRVRBREFUQSAoZmlyc3QgaW5p
dGlhbGl6YXRpb24gc2VnbWVudCkuCi0gICAgaWYgKG1fdmlkZW9TaXplLmlzRW1wdHkoKSAmJiBk
b0NhcHNIYXZlVHlwZShjYXBzLCBHU1RfVklERU9fQ0FQU19UWVBFX1BSRUZJWCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8gc2l6ZSA9IGdldFZpZGVvUmVzb2x1dGlvbkZyb21DYXBzKGNhcHMpKSB7Ci0g
ICAgICAgICAgICBtX3ZpZGVvU2l6ZSA9ICpzaXplOwotICAgICAgICAgICAgR1NUX0RFQlVHKCJT
ZXR0aW5nIGluaXRpYWwgdmlkZW8gc2l6ZTogJWd4JWciLCBtX3ZpZGVvU2l6ZS53aWR0aCgpLCBt
X3ZpZGVvU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIH0KLSAgICB9CisKKyAgICBpZiAoIW1fdmlk
ZW9TaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVHKCJTZXR0
aW5nIGluaXRpYWwgdmlkZW8gc2l6ZTogJWd4JWciLCB2aWRlb1NpemUud2lkdGgoKSwgdmlkZW9T
aXplLmhlaWdodCgpKTsKKyAgICBtX3ZpZGVvU2l6ZSA9IHZpZGVvU2l6ZTsKIH0KIAogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnN0YXJ0U291cmNlKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcj4+JiB0cmFja3MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaAppbmRleCA1ZjIy
YTUxZTk1ZmEyZGE0NGUzMjA4YWJiNjZkYzNmZWVkNGQ3ZTYwLi45MjI2NWU4N2MzOWNlYTE5MTQ0
NzAyMTUzMmYyYzgxMjAzYzRhZjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSk7CiAgICAgTWVk
aWFTb3VyY2VQcml2YXRlQ2xpZW50KiBtZWRpYVNvdXJjZVByaXZhdGVDbGllbnQoKSB7IHJldHVy
biBtX21lZGlhU291cmNlLmdldCgpOyB9CiAKLSAgICB2b2lkIHRyYWNrRGV0ZWN0ZWQoQXBwZW5k
UGlwZWxpbmUmLCBSZWZQdHI8V2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZT4pOworICAgIHZvaWQg
c2V0SW5pdGlhbFZpZGVvU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKIAogICAgIHZvaWQgYmxvY2tE
dXJhdGlvbkNoYW5nZXMoKTsKICAgICB2b2lkIHVuYmxvY2tEdXJhdGlvbkNoYW5nZXMoKTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCA0YzA2M2FlM2U4ZDAyN2IyZmY4ZjVhYTYzZWU1ZGJiYTkzYmYyNDQ5Li5iZjkzMTI0NjVl
MGIwMTYwZDg3MDE2YzM1MzJiY2QwYjQxNDU3MGIwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIw
MjEtMDgtMTIgIEFsaWNpYSBCb3lhIEdhcmPDrWEgIDxhYm95YUBpZ2FsaWEuY29tPgorCisgICAg
ICAgIFtNU0VdW0dTdHJlYW1lcl0gSW1wbGVtZW50IG11bHRpLXRyYWNrIHN1cHBvcnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTA3MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IFhhYmllciBSb2RyaWd1ZXotQ2FsdmFyLgorCisgICAgICAgIFVwZGF0
ZSBleHBlY3RhdGlvbnMgYW5kIHJlYmFzZWxpbmUgb25lIHRlc3QgaXMgd2hpY2ggdGhlIGJ1ZmZl
cmVkCisgICAgICAgIHJhbmdlcyBoYXZlIGNoYW5nZWQgc2xpZ2h0bHkgZHVlIHRvIHRoZSBhdWRp
byB0cmFjayBwcmV2aW91c2x5CisgICAgICAgIGRpc2NhcmRlZCBub3cgYmVpbmcgcGFyc2VkLgor
CisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBs
YXRmb3JtL2dsaWIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2Uv
bWVkaWFzb3VyY2UtcmVtb3ZlLWV4cGVjdGVkLnR4dDoKKwogMjAyMS0wOC0wOCAgV2Vuc29uIEhz
aWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBjYXJldC1jb2xvciBkb2Vz
IG5vdCB3b3JrIG9uIGZpcnN0IGNsaWNrIGluIGlvcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xp
Yi9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGFhMTlkNjI5ZTE2YmYyYmE5M2I4MWUxZjAwYzI1YTRj
YzZmMDY0NTIuLjY1YzQ0Mzc5ZGJlMjJmOGE2YTAwZmI3NjA2Mzk5ZDZhNjM4MzEwNzUgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucworKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTU4MSw3ICs1ODEs
NiBAQCB3ZWJraXQub3JnL2IvMjI4ODIwIG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS13ZWJtLW9w
dXMtcGFydGlhbC1hYm9ydC5odG1sIFsgRmFpbAogd2Via2l0Lm9yZy9iLzIyNDc2NyBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jaGFuZ2V0
eXBlLXBsYXktaW1wbGljaXQuaHRtbCBbIENyYXNoIFBhc3MgXQogCiAjIFNlZSBhbHNvIGJ1ZyAj
MTc1NTc4Lgotd2Via2l0Lm9yZy9iLzE2NzEwOCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1hY3RpdmVzb3VyY2VidWZmZXJzLmh0bWwgWyBG
YWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xNjcxMDggaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYXZ0cmFja3MuaHRtbCBbIEZhaWx1cmUgXQog
d2Via2l0Lm9yZy9iLzE2NzEwOCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlh
LXNvdXJjZS9tZWRpYXNvdXJjZS1idWZmZXJlZC5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3Jn
L2IvMTY3MTA4IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21l
ZGlhc291cmNlLWNoYW5nZXR5cGUuaHRtbCBbIEZhaWx1cmUgQ3Jhc2ggXQpAQCAtNjEwLDcgKzYw
OSw2IEBAIHdlYmtpdC5vcmcvYi8xNTQzOTAgaHR0cC90ZXN0cy9tZWRpYS9obHMvaGxzLWF1ZGlv
LXRyYWNrcy1sb2NhbGUtc2VsZWN0aW9uLmh0bWwKIAogd2Via2l0Lm9yZy9iLzE5OTYxNyBodHRw
L3Rlc3RzL21lZGlhL2hscy9obHMtdmlkZW8tcmVzaXplLmh0bWwgWyBTa2lwIF0KIAotd2Via2l0
Lm9yZy9iLzIyNzI1OCBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWhhcy1hdWRpby12
aWRlby5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMjI3MjU4IG1lZGlhL21lZGlhLXNv
dXJjZS9tZWRpYS1zb3VyY2Utc2Vlay11bmJ1ZmZlcmVkLmh0bWwgWyBUaW1lb3V0IF0KIAogd2Vi
a2l0Lm9yZy9iLzIyNzY2MSBodHRwL3Rlc3RzL21lZGlhL2hscy9obHMtd2VidnR0LXNlZWstYmFj
a3dhcmRzLmh0bWwgWyBUaW1lb3V0IF0KQEAgLTIyMzcsNyArMjIzNSw2IEBAIHdlYmtpdC5vcmcv
Yi8xMTMxMjcgbWVkaWEvdHJhY2svdHJhY2stcHJlZmVyLWNhcHRpb25zLmh0bWwgWyBUaW1lb3V0
IF0KIAogd2Via2l0Lm9yZy9iLzE2ODM3MyBodHRwL3Rlc3RzL21lZGlhL3RyYWNrLWluLWJhbmQt
aGxzLW1ldGFkYXRhLWNyYXNoLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8xNjgzNzMg
bWVkaWEvbWVkaWEtZnVsbHNjcmVlbi1sb29wLWlubGluZS5odG1sIFsgVGltZW91dCBdCi13ZWJr
aXQub3JnL2IvMTY4MzczIG1lZGlhL21lZGlhLXNvdXJjZS9vbmx5LWJjcDQ3LWxhbmd1YWdlLXRh
Z3MtYWNjZXB0ZWQtYXMtdmFsaWQuaHRtbCBbIENyYXNoIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9i
LzE3NDI0MiBtZWRpYS9tZWRpYS1mdWxsc2NyZWVuLXBhdXNlLWlubGluZS5odG1sIFsgU2tpcCBd
CiB3ZWJraXQub3JnL2IvMTgyMTA4IGh0dHAvdGVzdHMvbWVkaWEvaGxzL2hscy13ZWJ2dHQtdHJh
Y2tzLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8xMzczMTEgbWVkaWEvdmlkZW8tZnVs
bHNjcmVlbi1vbmx5LXBsYXliYWNrLmh0bWwgWyBUaW1lb3V0IENyYXNoIF0KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtcmVtb3ZlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2dsaWIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1z
b3VyY2UvbWVkaWFzb3VyY2UtcmVtb3ZlLWV4cGVjdGVkLnR4dAppbmRleCA2ZDVlM2RmZmJjMDU1
YTgwNmYzYTI2MTNkMGMxNWRhOTUzYTg1NDAyLi45ZjU4MTI5N2Y4MjNjOWFhMmEwNzhiZGZjNTY5
ZTk2ZmMwMGVmN2E4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291cmNlLXJlbW92
ZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1yZW1vdmUtZXhw
ZWN0ZWQudHh0CkBAIC0xMSw4ICsxMSw4IEBAIFBBU1MgVGVzdCByZW1vdmUgd2hpbGUgdXBkYXRl
IHBlbmRpbmcuCiBQQVNTIFRlc3QgYWJvcnRpbmcgYSByZW1vdmUgb3BlcmF0aW9uLgogUEFTUyBU
ZXN0IHJlbW92ZSB3aXRoIGEgc3RhcnQgYXQgdGhlIGR1cmF0aW9uLgogUEFTUyBUZXN0IHJlbW92
ZSB0cmFuc2l0aW9uaW5nIHJlYWR5U3RhdGUgZnJvbSAnZW5kZWQnIHRvICdvcGVuJy4KLUZBSUwg
VGVzdCByZW1vdmluZyBhbGwgYXBwZW5kZWQgZGF0YS4gYXNzZXJ0X2VxdWFsczogSW5pdGlhbCBi
dWZmZXJlZCByYW5nZS4gZXhwZWN0ZWQgInsgWzAuMDk1LCA2LjQyMykgfSIgYnV0IGdvdCAieyBb
MC4wMDAsIDYuNDIzKSB9IgotRkFJTCBUZXN0IHJlbW92aW5nIGJlZ2lubmluZyBvZiBhcHBlbmRl
ZCBkYXRhLiBhc3NlcnRfZXF1YWxzOiBJbml0aWFsIGJ1ZmZlcmVkIHJhbmdlLiBleHBlY3RlZCAi
eyBbMC4wOTUsIDYuNDIzKSB9IiBidXQgZ290ICJ7IFswLjAwMCwgNi40MjMpIH0iCi1GQUlMIFRl
c3QgcmVtb3ZpbmcgdGhlIG1pZGRsZSBvZiBhcHBlbmRlZCBkYXRhLiBhc3NlcnRfZXF1YWxzOiBJ
bml0aWFsIGJ1ZmZlcmVkIHJhbmdlLiBleHBlY3RlZCAieyBbMC4wOTUsIDYuNDIzKSB9IiBidXQg
Z290ICJ7IFswLjAwMCwgNi40MjMpIH0iCi1GQUlMIFRlc3QgcmVtb3ZpbmcgdGhlIGVuZCBvZiBh
cHBlbmRlZCBkYXRhLiBhc3NlcnRfZXF1YWxzOiBJbml0aWFsIGJ1ZmZlcmVkIHJhbmdlLiBleHBl
Y3RlZCAieyBbMC4wOTUsIDYuNDIzKSB9IiBidXQgZ290ICJ7IFswLjAwMCwgNi40MjMpIH0iCitG
QUlMIFRlc3QgcmVtb3ZpbmcgYWxsIGFwcGVuZGVkIGRhdGEuIGFzc2VydF9lcXVhbHM6IEluaXRp
YWwgYnVmZmVyZWQgcmFuZ2UuIGV4cGVjdGVkICJ7IFswLjA5NSwgNi41NDgpIH0iIGJ1dCBnb3Qg
InsgWzAuMDAwLCA2LjU0OCkgfSIKK0ZBSUwgVGVzdCByZW1vdmluZyBiZWdpbm5pbmcgb2YgYXBw
ZW5kZWQgZGF0YS4gYXNzZXJ0X2VxdWFsczogSW5pdGlhbCBidWZmZXJlZCByYW5nZS4gZXhwZWN0
ZWQgInsgWzAuMDk1LCA2LjU0OCkgfSIgYnV0IGdvdCAieyBbMC4wMDAsIDYuNTQ4KSB9IgorRkFJ
TCBUZXN0IHJlbW92aW5nIHRoZSBtaWRkbGUgb2YgYXBwZW5kZWQgZGF0YS4gYXNzZXJ0X2VxdWFs
czogSW5pdGlhbCBidWZmZXJlZCByYW5nZS4gZXhwZWN0ZWQgInsgWzAuMDk1LCA2LjU0OCkgfSIg
YnV0IGdvdCAieyBbMC4wMDAsIDYuNTQ4KSB9IgorRkFJTCBUZXN0IHJlbW92aW5nIHRoZSBlbmQg
b2YgYXBwZW5kZWQgZGF0YS4gYXNzZXJ0X2VxdWFsczogSW5pdGlhbCBidWZmZXJlZCByYW5nZS4g
ZXhwZWN0ZWQgInsgWzAuMDk1LCA2LjU0OCkgfSIgYnV0IGdvdCAieyBbMC4wMDAsIDYuNTQ4KSB9
IgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436181</attachid>
            <date>2021-08-23 04:12:49 -0700</date>
            <delta_ts>2021-08-23 06:22:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229072-20210823131247.patch</filename>
            <type>text/plain</type>
            <size>63742</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTRiYzFhZThhNjljMDE1
MWM5MTVkMDNjZTBjNDQ4OTA1YTc5ZWE5OC4uOTYzMmEwNzJhNDY1ODdiYmNmYjY2ZDQ1Y2IwMDQ2
NWYxYjgwOGQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDIxLTA4LTEyICBBbGlj
aWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbTVNFXVtHU3Ry
ZWFtZXJdIEltcGxlbWVudCBtdWx0aS10cmFjayBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjkwNzIKKworICAgICAgICBSZXZpZXdlZCBi
eSBYYWJpZXIgUm9kcmlndWV6LUNhbHZhci4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgc3Vw
cG9ydCBmb3IgU291cmNlQnVmZmVyIGhhdmluZyBtb3JlIHRoYW4gb25lIHRyYWNrIGluCisgICAg
ICAgIHRoZSBHU3RyZWFtZXIgcG9ydC4KKworICAgICAgICBUaGlzIGZpeGVzIHRoZSBmb2xsb3dp
bmcgTGF5b3V0VGVzdHM6CisKKyAgICAgICAgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYWN0aXZlc291cmNlYnVmZmVycy5odG1sCisgICAg
ICAgIG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtaGFzLWF1ZGlvLXZpZGVvLmh0bWwK
KyAgICAgICAgbWVkaWEvbWVkaWEtc291cmNlL29ubHktYmNwNDctbGFuZ3VhZ2UtdGFncy1hY2Nl
cHRlZC1hcy12YWxpZC5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvR1N0cmVhbWVyQ29tbW9uLmg6CisgICAgICAgIChHc3RJdGVyYXRvckFkYXB0b3I6OkdzdEl0
ZXJhdG9yQWRhcHRvcik6CisgICAgICAgIChHc3RJdGVyYXRvckFkYXB0b3I6Oml0ZXJhdG9yOjpp
dGVyYXRvcik6CisgICAgICAgIChHc3RJdGVyYXRvckFkYXB0b3I6Oml0ZXJhdG9yOjpvcGVyYXRv
ciopOgorICAgICAgICAoR3N0SXRlcmF0b3JBZGFwdG9yOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6
CisgICAgICAgIChHc3RJdGVyYXRvckFkYXB0b3I6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKEdzdEl0ZXJhdG9yQWRhcHRvcjo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoR3N0SXRlcmF0b3JBZGFwdG9yOjpiZWdpbik6CisgICAgICAgIChHc3RJdGVyYXRvckFkYXB0
b3I6OmVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBl
bmRQaXBlbGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6QXBwZW5k
UGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6On5BcHBlbmRQaXBl
bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6cGFyc2VEZW11eGVyU3Jj
UGFkQ2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6YXBwc2lua0NhcHND
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpoYW5kbGVFbmRPZkFw
cGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6YXBwc2lua05ld1NhbXBs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6ZGlkUmVjZWl2ZUluaXRpYWxp
emF0aW9uU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6Y29uc3Vt
ZUFwcHNpbmtzQXZhaWxhYmxlU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBl
bGluZTo6cmVzZXRQYXJzZXJTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGlu
ZTo6aGFuZGxlQXBwc2lua05ld1NhbXBsZUZyb21TdHJlYW1pbmdUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlT3B0aW9uYWxQYXJzZXJGb3JGb3JtYXQpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwZW5kUGlwZWxpbmU6OmdlbmVyYXRlVHJhY2tJZCk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBlbmRQaXBlbGluZTo6dHJ5Q3JlYXRlVHJhY2tGcm9tUGFkKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGVuZFBpcGVsaW5lOjp0cnlNYXRjaFBhZFRvRXhpc3RpbmdUcmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6bGlua1BhZFdpdGhUcmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBlbmRQaXBlbGluZTo6bWFrZVdlYktpdFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGVuZFBpcGVsaW5lOjpUcmFjazo6aW5pdGlhbGl6ZUVsZW1lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpob29rVHJhY2tFdmVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwZW5kUGlwZWxpbmU6OnN0cmVhbVR5cGVUb1N0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBlbmRQaXBlbGluZTo6aWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5k
UGlwZWxpbmU6OnRyYWNrSWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlw
ZWxpbmU6OmNvbnN1bWVBcHBzaW5rQXZhaWxhYmxlU2FtcGxlcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmtG
cm9tU3RyZWFtaW5nVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBp
cGVsaW5lOjpjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2luayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6ZGlzY29ubmVjdERlbXV4ZXJTcmNQYWRGcm9tQXBw
c2lua0Zyb21BbnlUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVu
ZFBpcGVsaW5lOjpzb3VyY2VCdWZmZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVu
ZFBpcGVsaW5lOjpUcmFjazo6VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxp
bmU6OmFwcHNyYyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6YXBwc2lua0Nh
cHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnRyYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjphcHBzaW5rKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpkZW11eGVyU3JjUGFkQ2Fw
cyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZXRJbml0aWFsVmlkZW9TaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dHJhY2tEZXRlY3Rl
ZCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaDoKKwogMjAyMS0wOC0wOSAgQWxpY2lhIEJv
eWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW01TRV1bR1N0cmVhbWVy
XSBVcGRhdGUgdHJhY2tzIHN5bmNocm9ub3VzbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaAppbmRl
eCBiNjU3MzljOGQzNDc0ZWE4ZWUwNGQ3ZjFlZWY5M2VlYzBiNTlhZWVmLi4yMmI5OGYxZjRmOWMx
ZGZkNjI1NjkwOGY3YmIyN2UxMmYxZWE0MzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCkBA
IC0zMzUsNCArMzM1LDcxIEBAIGlubGluZSB2b2lkIGdzdFBhZFN0cmVhbVVubG9jayhHc3RQYWQq
IHBhZCkgeyBHU1RfUEFEX1NUUkVBTV9VTkxPQ0socGFkKTsgfQogdXNpbmcgR3N0T2JqZWN0TG9j
a2VyID0gRXh0ZXJuYWxMb2NrZXI8dm9pZCwgZ3N0T2JqZWN0TG9jaywgZ3N0T2JqZWN0VW5sb2Nr
PjsKIHVzaW5nIEdzdFBhZFN0cmVhbUxvY2tlciA9IEV4dGVybmFsTG9ja2VyPEdzdFBhZCwgZ3N0
UGFkU3RyZWFtTG9jaywgZ3N0UGFkU3RyZWFtVW5sb2NrPjsKIAordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitjbGFzcyBHc3RJdGVyYXRvckFkYXB0b3IgeworcHVibGljOgorICAgIEdzdEl0ZXJhdG9y
QWRhcHRvcihHVW5pcXVlUHRyPEdzdEl0ZXJhdG9yPiYmIGl0ZXIpCisgICAgICAgIDogbV9pdGVy
KFdURk1vdmUoaXRlcikpCisgICAgeyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVi
bGljOgorICAgICAgICBpdGVyYXRvcihHc3RJdGVyYXRvciogaXRlciwgZ2Jvb2xlYW4gZG9uZSA9
IEZBTFNFKQorICAgICAgICAgICAgOiBtX2l0ZXIoaXRlcikKKyAgICAgICAgICAgICwgbV9kb25l
KGRvbmUpCisgICAgICAgIHsgfQorCisgICAgICAgIFQqIG9wZXJhdG9yKigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRWYWx1ZTsKKyAgICAgICAgfQorCisgICAgICAg
IGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgR1ZhbHVlIHZh
bHVlID0gR19WQUxVRV9JTklUOworICAgICAgICAgICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4
dChtX2l0ZXIsICZ2YWx1ZSkpIHsKKyAgICAgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgor
ICAgICAgICAgICAgICAgIG1fY3VycmVudFZhbHVlID0gc3RhdGljX2Nhc3Q8VCo+KGdfdmFsdWVf
Z2V0X29iamVjdCgmdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBnX3ZhbHVlX3Jlc2V0KCZ2YWx1
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEdTVF9JVEVSQVRP
Ul9ET05FOgorICAgICAgICAgICAgICAgIG1fZG9uZSA9IFRSVUU7CisgICAgICAgICAgICAgICAg
bV9jdXJyZW50VmFsdWUgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRURfV0lUSF9N
RVNTQUdFKCJVbmV4cGVjdGVkIGl0ZXJhdG9yIGludmFsaWRhdGlvbiIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1faXRlciA9PSBvdGhlci5tX2l0ZXIgJiYgbV9kb25lID09IG90aGVyLm1fZG9uZTsK
KyAgICAgICAgfQorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVy
KSB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
R3N0SXRlcmF0b3IqIG1faXRlcjsKKyAgICAgICAgZ2Jvb2xlYW4gbV9kb25lOworICAgICAgICBU
KiBtX2N1cnJlbnRWYWx1ZSB7IG51bGxwdHIgfTsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVn
aW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3N0YXJ0ZWQpOworICAgICAgICBtX3N0YXJ0
ZWQgPSB0cnVlOworICAgICAgICBpdGVyYXRvciBpdGVyIHsgbV9pdGVyLmdldCgpIH07CisgICAg
ICAgIHJldHVybiArK2l0ZXI7CisgICAgfQorCisgICAgaXRlcmF0b3IgZW5kKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB7IG1faXRlci5nZXQoKSwgVFJVRSB9OworICAgIH0KKworcHJpdmF0ZToK
KyAgICBHVW5pcXVlUHRyPEdzdEl0ZXJhdG9yPiBtX2l0ZXI7CisgICAgYm9vbCBtX3N0YXJ0ZWQg
eyBmYWxzZSB9OworfTsKKwogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVs
aW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2Uv
QXBwZW5kUGlwZWxpbmUuY3BwCmluZGV4IDE2YWI5ZmU1MjY3N2QwODc3MWMwZTM1MGUzYjc2MDQx
ZWZhYWVkYTQuLjNmZTdhNzFjODRmMTQxNjhhZmMwMjg0YWU1YWEzYmFjZTM5MThkNDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBw
ZW5kUGlwZWxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuY3BwCkBAIC0yMCw2ICsyMCw4IEBACiAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBcHBlbmRQaXBlbGluZS5oIgorI2luY2x1ZGUgIkFi
b3J0YWJsZVRhc2tRdWV1ZS5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1l
ci5oIgogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVE
SUFfU09VUkNFKQogCkBAIC0xMDIsOSArMTA0LDcgQEAgc3RhdGljIHZvaWQgYXNzZXJ0ZWRFbGVt
ZW50U2V0U3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGUgZGVzaXJlZFN0YXRlKQog
QXBwZW5kUGlwZWxpbmU6OkFwcGVuZFBpcGVsaW5lKFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFt
ZXImIHNvdXJjZUJ1ZmZlclByaXZhdGUsIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSYg
cGxheWVyUHJpdmF0ZSkKICAgICA6IG1fc291cmNlQnVmZmVyUHJpdmF0ZShzb3VyY2VCdWZmZXJQ
cml2YXRlKQogICAgICwgbV9wbGF5ZXJQcml2YXRlKCZwbGF5ZXJQcml2YXRlKQotICAgICwgbV9p
ZCgwKQogICAgICwgbV93YXNCdXNBbHJlYWR5Tm90aWZpZWRPZkF2YWlsYWJsZVNhbXBsZXMoZmFs
c2UpCi0gICAgLCBtX3N0cmVhbVR5cGUoVW5rbm93bikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIHN0ZDo6Y2FsbF9vbmNlKHNfc3RhdGljSW5pdGlhbGl6YXRpb25GbGFnLCBB
cHBlbmRQaXBlbGluZTo6c3RhdGljSW5pdGlhbGl6YXRpb24pOwpAQCAtMTUwLDc5ICsxNTAsMjIg
QEAgQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFBpcGVsaW5lKFNvdXJjZUJ1ZmZlclByaXZhdGVHU3Ry
ZWFtZXImIHNvdXJjZUJ1ZmZlclByaXZhdGUKICAgICBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogCi0gICAgbV9hcHBzaW5rID0gbWFrZUdTdHJlYW1lckVsZW1lbnQoImFwcHNp
bmsiLCBudWxscHRyKTsKLQotICAgIGdzdF9hcHBfc2lua19zZXRfZW1pdF9zaWduYWxzKEdTVF9B
UFBfU0lOSyhtX2FwcHNpbmsuZ2V0KCkpLCBUUlVFKTsKLSAgICBnc3RfYmFzZV9zaW5rX3NldF9z
eW5jKEdTVF9CQVNFX1NJTksobV9hcHBzaW5rLmdldCgpKSwgRkFMU0UpOwotICAgIGdzdF9iYXNl
X3Npbmtfc2V0X2FzeW5jX2VuYWJsZWQoR1NUX0JBU0VfU0lOSyhtX2FwcHNpbmsuZ2V0KCkpLCBG
QUxTRSk7IC8vIE5vIHByZXJvbGxzLCBubyBhc3luYyBzdGF0ZSBjaGFuZ2VzLgotICAgIGdzdF9i
YXNlX3Npbmtfc2V0X2Ryb3Bfb3V0X29mX3NlZ21lbnQoR1NUX0JBU0VfU0lOSyhtX2FwcHNpbmsu
Z2V0KCkpLCBGQUxTRSk7Ci0gICAgZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9zYW1wbGVfZW5hYmxl
ZChHU1RfQkFTRV9TSU5LKG1fYXBwc2luay5nZXQoKSksIEZBTFNFKTsKLQotICAgIEdSZWZQdHI8
R3N0UGFkPiBhcHBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFk
KG1fYXBwc2luay5nZXQoKSwgInNpbmsiKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChhcHBzaW5r
UGFkLmdldCgpLCAibm90aWZ5OjpjYXBzIiwgR19DQUxMQkFDSygrW10oR09iamVjdCosIEdQYXJh
bVNwZWMqLCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpIHsKLSAgICAgICAgaWYgKGlz
TWFpblRocmVhZCgpKSB7Ci0gICAgICAgICAgICAvLyBXaGVuIGNoYW5naW5nIHRoZSBwaXBlbGlu
ZSBzdGF0ZSBkb3duIHRvIFJFQURZIHRoZSBkZW11eGVyIGlzIHVubGlua2VkIGFuZCB0aGlzIHRy
aWdnZXJzIGEgY2FwcyBub3RpZmljYXRpb24KLSAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIGFw
cHNpbmsgbG9zZXMgaXRzIHByZXZpb3VzbHkgbmVnb3RpYXRlZCBjYXBzLiBXZSBhcmUgbm90IGlu
dGVyZXN0ZWQgaW4gdGhlc2UgdW5uZWdvdGlhdGVkIGNhcHMuCi0jaWZuZGVmIE5ERUJVRwotICAg
ICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRf
c3RhdGljX3BhZChhcHBlbmRQaXBlbGluZS0+bV9hcHBzaW5rLmdldCgpLCAic2luayIpKTsKLSAg
ICAgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9j
dXJyZW50X2NhcHMocGFkLmdldCgpKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWNhcHMpOwotI2Vu
ZGlmCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGUgc3Ry
ZWFtaW5nIHRocmVhZCBoYXMganVzdCByZWNlaXZlZCBhIG5ldyBjYXBzIGFuZCBpcyBhYm91dCB0
byBsZXQgc2FtcGxlcyB1c2luZyB0aGUKLSAgICAgICAgLy8gbmV3IGNhcHMgZmxvdy4gTGV0J3Mg
YmxvY2sgaXQgdW50aWwgdGhlIG1haW4gdGhyZWFkIGhhcyBjb25zdW1lZCB0aGUgc2FtcGxlcyB3
aXRoIHRoZSBvbGQKLSAgICAgICAgLy8gY2FwcyBhbmQgaGFzIHByb2Nlc3NlZCB0aGUgY2FwcyBj
aGFuZ2UuCi0gICAgICAgIGFwcGVuZFBpcGVsaW5lLT5tX3Rhc2tRdWV1ZS5lbnF1ZXVlVGFza0Fu
ZFdhaXQ8QWJvcnRhYmxlVGFza1F1ZXVlOjpWb2lkPihbYXBwZW5kUGlwZWxpbmVdKCkgewotICAg
ICAgICAgICAgYXBwZW5kUGlwZWxpbmUtPmFwcHNpbmtDYXBzQ2hhbmdlZCgpOwotICAgICAgICAg
ICAgcmV0dXJuIEFib3J0YWJsZVRhc2tRdWV1ZTo6Vm9pZCgpOwotICAgICAgICB9KTsKLSAgICB9
KSwgdGhpcyk7Ci0KICNpZiAhTE9HX0RJU0FCTEVECiAgICAgR1JlZlB0cjxHc3RQYWQ+IGRlbXV4
ZXJQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9kZW11eC5nZXQo
KSwgInNpbmsiKSk7CiAgICAgbV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlv
bi5hcHBlbmRQaXBlbGluZSA9IHRoaXM7CiAgICAgbV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJv
YmVJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbiA9ICJkZW11eGVyIGRhdGEgZW50ZXJpbmciOwogICAg
IG1fZGVtdXhlckRhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24ucHJvYmVJZCA9IGdzdF9w
YWRfYWRkX3Byb2JlKGRlbXV4ZXJQYWQuZ2V0KCksIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIs
IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UGFkUHJvYmVDYWxsYmFjaz4oYXBwZW5kUGlwZWxpbmVQYWRQ
cm9iZURlYnVnSW5mb3JtYXRpb24pLCAmbV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZv
cm1hdGlvbiwgbnVsbHB0cik7Ci0gICAgbV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZv
cm1hdGlvbi5hcHBlbmRQaXBlbGluZSA9IHRoaXM7Ci0gICAgbV9hcHBzaW5rRGF0YUVudGVyaW5n
UGFkUHJvYmVJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbiA9ICJhcHBzaW5rIGRhdGEgZW50ZXJpbmci
OwotICAgIG1fYXBwc2lua0RhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24ucHJvYmVJZCA9
IGdzdF9wYWRfYWRkX3Byb2JlKGFwcHNpbmtQYWQuZ2V0KCksIEdTVF9QQURfUFJPQkVfVFlQRV9C
VUZGRVIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UGFkUHJvYmVDYWxsYmFjaz4oYXBwZW5kUGlwZWxp
bmVQYWRQcm9iZURlYnVnSW5mb3JtYXRpb24pLCAmbV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJv
YmVJbmZvcm1hdGlvbiwgbnVsbHB0cik7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShFTkNSWVBURURf
TUVESUEpCi0gICAgbV9hcHBzaW5rUGFkRXZlbnRQcm9iZUluZm9ybWF0aW9uLmFwcGVuZFBpcGVs
aW5lID0gdGhpczsKLSAgICBtX2FwcHNpbmtQYWRFdmVudFByb2JlSW5mb3JtYXRpb24uZGVzY3Jp
cHRpb24gPSAiYXBwc2luayBldmVudCBwcm9iZSI7Ci0gICAgbV9hcHBzaW5rUGFkRXZlbnRQcm9i
ZUluZm9ybWF0aW9uLnByb2JlSWQgPSBnc3RfcGFkX2FkZF9wcm9iZShhcHBzaW5rUGFkLmdldCgp
LCBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTSwgcmVpbnRlcnByZXRfY2FzdDxH
c3RQYWRQcm9iZUNhbGxiYWNrPihhcHBlbmRQaXBlbGluZUFwcHNpbmtQYWRFdmVudFByb2JlKSwg
Jm1fYXBwc2lua1BhZEV2ZW50UHJvYmVJbmZvcm1hdGlvbiwgbnVsbHB0cik7CiAjZW5kaWYKIAot
ICAgIC8vIFRoZXNlIHNpZ25hbHMgd29uJ3QgYmUgY29ubmVjdGVkIG91dHNpZGUgb2YgdGhlIGxp
ZmV0aW1lIG9mICJ0aGlzIi4KLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fZGVtdXguZ2V0KCksICJw
YWQtYWRkZWQiLCBHX0NBTExCQUNLKCtbXShHc3RFbGVtZW50KiwgR3N0UGFkKiBkZW11eGVyU3Jj
UGFkLCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpIHsKLSAgICAgICAgYXBwZW5kUGlw
ZWxpbmUtPmNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rRnJvbVN0cmVhbWluZ1RocmVhZChk
ZW11eGVyU3JjUGFkKTsKLSAgICB9KSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2Rl
bXV4LmdldCgpLCAicGFkLXJlbW92ZWQiLCBHX0NBTExCQUNLKCtbXShHc3RFbGVtZW50KiwgR3N0
UGFkKiBkZW11eGVyU3JjUGFkLCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpIHsKLSAg
ICAgICAgYXBwZW5kUGlwZWxpbmUtPmRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNpbmtG
cm9tQW55VGhyZWFkKGRlbXV4ZXJTcmNQYWQpOwotICAgIH0pLCB0aGlzKTsKKyAgICAvLyBUaGVz
ZSBzaWduYWxzIHdvbid0IG91dGxpdmUgdGhlIGxpZmV0aW1lIG9mIGB0aGlzYC4KICAgICBnX3Np
Z25hbF9jb25uZWN0KG1fZGVtdXguZ2V0KCksICJuby1tb3JlLXBhZHMiLCBHX0NBTExCQUNLKCtb
XShHc3RFbGVtZW50KiwgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5lKSB7CiAgICAgICAg
IEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgICAgICBHU1RfREVCVUcoIlBvc3Rpbmcgbm8t
bW9yZS1wYWRzIHRhc2sgdG8gbWFpbiB0aHJlYWQiKTsKLSAgICAgICAgYXBwZW5kUGlwZWxpbmUt
Pm1fdGFza1F1ZXVlLmVucXVldWVUYXNrKFthcHBlbmRQaXBlbGluZV0oKSB7CisgICAgICAgIGFw
cGVuZFBpcGVsaW5lLT5tX3Rhc2tRdWV1ZS5lbnF1ZXVlVGFza0FuZFdhaXQ8QWJvcnRhYmxlVGFz
a1F1ZXVlOjpWb2lkPihbYXBwZW5kUGlwZWxpbmVdKCkgewogICAgICAgICAgICAgYXBwZW5kUGlw
ZWxpbmUtPmRpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoKTsKKyAgICAgICAgICAgIHJl
dHVybiBBYm9ydGFibGVUYXNrUXVldWU6OlZvaWQoKTsKICAgICAgICAgfSk7CiAgICAgfSksIHRo
aXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9hcHBzaW5rLmdldCgpLCAibmV3LXNhbXBsZSIs
IEdfQ0FMTEJBQ0soK1tdKEdzdEVsZW1lbnQqIGFwcHNpbmssIEFwcGVuZFBpcGVsaW5lKiBhcHBl
bmRQaXBlbGluZSkgLT4gR3N0Rmxvd1JldHVybiB7Ci0gICAgICAgIGFwcGVuZFBpcGVsaW5lLT5o
YW5kbGVBcHBzaW5rTmV3U2FtcGxlRnJvbVN0cmVhbWluZ1RocmVhZChhcHBzaW5rKTsKLSAgICAg
ICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICAgIH0pLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fYXBwc2luay5nZXQoKSwgImVvcyIsIEdfQ0FMTEJBQ0soK1tdKEdzdEVsZW1lbnQqLCBB
cHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpIHsKLSAgICAgICAgLy8gSnVzdCBpZ25vcmUg
RU9TIHdoZW4gaGF2aW5nIG1vcmUgdGhhbiBvbmUgcGFkLiBJdCBsaWtlbHkgbWVhbnMgdGhhdCBv
bmUgb2YgdGhlIHBhZHMgaXMKLSAgICAgICAgLy8gZ29pbmcgdG8gYmUgcmVtb3ZlZCBhbmQgdGhl
IHJlbWFpbmluZyBvbmUgd2lsbCBiZSByZWF0dGFjaGVkLgotICAgICAgICBpZiAoYXBwZW5kUGlw
ZWxpbmUtPm1fZXJyb3JSZWNlaXZlZCB8fCBhcHBlbmRQaXBlbGluZS0+bV9kZW11eC0+bnVtc3Jj
cGFkcyA+IDEpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgR1NUX0VSUk9SKCJBcHBl
bmRQaXBlbGluZSdzIGFwcHNpbmsgcmVjZWl2ZWQgRU9TLiBUaGlzIGlzIHVzdWFsbHkgY2F1c2Vk
IGJ5IGFuIGludmFsaWQgaW5pdGlhbGl6YXRpb24gc2VnbWVudC4iKTsKLSAgICAgICAgYXBwZW5k
UGlwZWxpbmUtPmhhbmRsZUVycm9yQ29uZGl0aW9uRnJvbVN0cmVhbWluZ1RocmVhZCgpOwotICAg
IH0pLCB0aGlzKTsKIAogICAgIC8vIEFkZF9tYW55IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgYSBy
ZWZlcmVuY2UuIFRoYXQncyB3aHkgd2UgdXNlZCBhbiBhc3NpZ25tZW50IGJlZm9yZS4KICAgICBn
c3RfYmluX2FkZF9tYW55KEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIG1fYXBwc3JjLmdldCgp
LCBtX2RlbXV4LmdldCgpLCBudWxscHRyKTsKQEAgLTI0OSw5ICsxOTIsNiBAQCBBcHBlbmRQaXBl
bGluZTo6fkFwcGVuZFBpcGVsaW5lKCkKICAgICAgICAgZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dh
dGNoKG1fYnVzLmdldCgpKTsKICAgICB9CiAKLSAgICBpZiAobV9hcHBzcmMpCi0gICAgICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2FwcHNyYy5nZXQoKSwgdGhpcyk7
Ci0KICAgICBpZiAobV9kZW11eCkgewogI2lmICFMT0dfRElTQUJMRUQKICAgICAgICAgR1JlZlB0
cjxHc3RQYWQ+IGRlbXV4ZXJQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19w
YWQobV9kZW11eC5nZXQoKSwgInNpbmsiKSk7CkBAIC0yNjEsMTcgKzIwMSwxNSBAQCBBcHBlbmRQ
aXBlbGluZTo6fkFwcGVuZFBpcGVsaW5lKCkKICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9kYXRhKG1fZGVtdXguZ2V0KCksIHRoaXMpOwogICAgIH0KIAotICAgIGlmICht
X2FwcHNpbmspIHsKLSAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IGFwcHNpbmtQYWQgPSBhZG9wdEdS
ZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9hcHBzaW5rLmdldCgpLCAic2luayIpKTsK
KyAgICBmb3IgKHN0ZDo6dW5pcXVlX3B0cjxUcmFjaz4mIHRyYWNrIDogbV90cmFja3MpIHsKKyAg
ICAgICAgR1JlZlB0cjxHc3RQYWQ+IGFwcHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQodHJhY2stPmFwcHNpbmsuZ2V0KCksICJzaW5rIikpOwogICAgICAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEoYXBwc2lua1BhZC5nZXQoKSwgdGhp
cyk7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2FwcHNp
bmsuZ2V0KCksIHRoaXMpOwotCisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
YnlfZGF0YSh0cmFjay0+YXBwc2luay5nZXQoKSwgdGhpcyk7CiAjaWYgIUxPR19ESVNBQkxFRAot
ICAgICAgICBnc3RfcGFkX3JlbW92ZV9wcm9iZShhcHBzaW5rUGFkLmdldCgpLCBtX2FwcHNpbmtE
YXRhRW50ZXJpbmdQYWRQcm9iZUluZm9ybWF0aW9uLnByb2JlSWQpOworICAgICAgICBnc3RfcGFk
X3JlbW92ZV9wcm9iZShhcHBzaW5rUGFkLmdldCgpLCB0cmFjay0+YXBwc2lua0RhdGFFbnRlcmlu
Z1BhZFByb2JlSW5mb3JtYXRpb24ucHJvYmVJZCk7CiAjZW5kaWYKLQogI2lmIEVOQUJMRShFTkNS
WVBURURfTUVESUEpCi0gICAgICAgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlKGFwcHNpbmtQYWQuZ2V0
KCksIG1fYXBwc2lua1BhZEV2ZW50UHJvYmVJbmZvcm1hdGlvbi5wcm9iZUlkKTsKKyAgICAgICAg
Z3N0X3BhZF9yZW1vdmVfcHJvYmUoYXBwc2lua1BhZC5nZXQoKSwgdHJhY2stPmFwcHNpbmtQYWRF
dmVudFByb2JlSW5mb3JtYXRpb24ucHJvYmVJZCk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTM1MSw3
MSArMjg5LDM5IEBAIHZvaWQgQXBwZW5kUGlwZWxpbmU6OmhhbmRsZVN0YXRlQ2hhbmdlTWVzc2Fn
ZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgIH0KIH0KIAotZ2ludCBBcHBlbmRQaXBlbGluZTo6
aWQoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAobV9pZCkKLSAg
ICAgICAgcmV0dXJuIG1faWQ7Ci0KLSAgICBzdGF0aWMgZ2ludCBzX3RvdGFsQXVkaW8gPSAwOwot
ICAgIHN0YXRpYyBnaW50IHNfdG90YWxWaWRlbyA9IDA7Ci0gICAgc3RhdGljIGdpbnQgc190b3Rh
bFRleHQgPSAwOwotCi0gICAgc3dpdGNoIChtX3N0cmVhbVR5cGUpIHsKLSAgICBjYXNlIEF1ZGlv
OgotICAgICAgICBtX2lkID0gKytzX3RvdGFsQXVkaW87Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgVmlkZW86Ci0gICAgICAgIG1faWQgPSArK3NfdG90YWxWaWRlbzsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBUZXh0OgotICAgICAgICBtX2lkID0gKytzX3RvdGFsVGV4dDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBVbmtub3duOgotICAgIGNhc2UgSW52YWxpZDoKLSAgICAgICAgR1NU
X0VSUk9SKCJUcnlpbmcgdG8gZ2V0IGlkIGZvciBhIHBpcGVsaW5lIG9mIFVua25vd24vSW52YWxp
ZCB0eXBlIik7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBHU1RfREVCVUcoInN0cmVhbVR5cGU9JWQsIGlkPSVkIiwgc3RhdGljX2Nh
c3Q8aW50PihtX3N0cmVhbVR5cGUpLCBtX2lkKTsKLQotICAgIHJldHVybiBtX2lkOwotfQotCi12
b2lkIEFwcGVuZFBpcGVsaW5lOjpwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKEdzdENhcHMqIGRlbXV4
ZXJTcmNQYWRDYXBzKQorc3RkOjp0dXBsZTxHUmVmUHRyPEdzdENhcHM+LCBBcHBlbmRQaXBlbGlu
ZTo6U3RyZWFtVHlwZSwgRmxvYXRTaXplPiBBcHBlbmRQaXBlbGluZTo6cGFyc2VEZW11eGVyU3Jj
UGFkQ2FwcyhHc3RDYXBzKiBkZW11eGVyU3JjUGFkQ2FwcykKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogCi0gICAgbV9kZW11eGVyU3JjUGFkQ2FwcyA9IGFkb3B0R1JlZihkZW11eGVy
U3JjUGFkQ2Fwcyk7Ci0gICAgbV9zdHJlYW1UeXBlID0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0
cmVhbWVyOjpVbmtub3duOworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gcGFyc2VkQ2FwcyA9IGRlbXV4
ZXJTcmNQYWRDYXBzOworICAgIFN0cmVhbVR5cGUgc3RyZWFtVHlwZSA9IFN0cmVhbVR5cGU6OlVu
a25vd247CisgICAgRmxvYXRTaXplIHByZXNlbnRhdGlvblNpemU7CiAKLSAgICBjb25zdCBjaGFy
KiBvcmlnaW5hbE1lZGlhVHlwZSA9IGNhcHNNZWRpYVR5cGUobV9kZW11eGVyU3JjUGFkQ2Fwcy5n
ZXQoKSk7CisgICAgY29uc3QgY2hhciogb3JpZ2luYWxNZWRpYVR5cGUgPSBjYXBzTWVkaWFUeXBl
KGRlbXV4ZXJTcmNQYWRDYXBzKTsKICAgICBhdXRvJiBnc3RSZWdpc3RyeVNjYW5uZXIgPSBHU3Ry
ZWFtZXJSZWdpc3RyeVNjYW5uZXJNU0U6OnNpbmdsZXRvbigpOwogICAgIGlmICghZ3N0UmVnaXN0
cnlTY2FubmVyLmlzQ29kZWNTdXBwb3J0ZWQoR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyOjpDb25m
aWd1cmF0aW9uOjpEZWNvZGluZywgb3JpZ2luYWxNZWRpYVR5cGUpKSB7Ci0gICAgICAgIG1fcHJl
c2VudGF0aW9uU2l6ZSA9IEZsb2F0U2l6ZSgpOwotICAgICAgICBtX3N0cmVhbVR5cGUgPSBNZWRp
YVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkludmFsaWQ7Ci0gICAgfSBlbHNlIGlmIChkb0Nh
cHNIYXZlVHlwZShtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpLCBHU1RfVklERU9fQ0FQU19UWVBF
X1BSRUZJWCkpIHsKLSAgICAgICAgbV9wcmVzZW50YXRpb25TaXplID0gZ2V0VmlkZW9SZXNvbHV0
aW9uRnJvbUNhcHMobV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKSkudmFsdWVfb3IoRmxvYXRTaXpl
KCkpOwotICAgICAgICBtX3N0cmVhbVR5cGUgPSBNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFt
ZXI6OlZpZGVvOworICAgICAgICBzdHJlYW1UeXBlID0gU3RyZWFtVHlwZTo6SW52YWxpZDsKKyAg
ICB9IGVsc2UgaWYgKGRvQ2Fwc0hhdmVUeXBlKGRlbXV4ZXJTcmNQYWRDYXBzLCBHU1RfVklERU9f
Q0FQU19UWVBFX1BSRUZJWCkpIHsKKyAgICAgICAgcHJlc2VudGF0aW9uU2l6ZSA9IGdldFZpZGVv
UmVzb2x1dGlvbkZyb21DYXBzKGRlbXV4ZXJTcmNQYWRDYXBzKS52YWx1ZV9vcihGbG9hdFNpemUo
KSk7CisgICAgICAgIHN0cmVhbVR5cGUgPSBTdHJlYW1UeXBlOjpWaWRlbzsKICAgICB9IGVsc2Ug
ewotICAgICAgICBtX3ByZXNlbnRhdGlvblNpemUgPSBGbG9hdFNpemUoKTsKLSAgICAgICAgaWYg
KGRvQ2Fwc0hhdmVUeXBlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCksIEdTVF9BVURJT19DQVBT
X1RZUEVfUFJFRklYKSkKLSAgICAgICAgICAgIG1fc3RyZWFtVHlwZSA9IE1lZGlhU291cmNlU3Ry
ZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW87Ci0gICAgICAgIGVsc2UgaWYgKGRvQ2Fwc0hhdmVUeXBl
KG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCksIEdTVF9URVhUX0NBUFNfVFlQRV9QUkVGSVgpKQot
ICAgICAgICAgICAgbV9zdHJlYW1UeXBlID0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVy
OjpUZXh0OworICAgICAgICBpZiAoZG9DYXBzSGF2ZVR5cGUoZGVtdXhlclNyY1BhZENhcHMsIEdT
VF9BVURJT19DQVBTX1RZUEVfUFJFRklYKSkKKyAgICAgICAgICAgIHN0cmVhbVR5cGUgPSBTdHJl
YW1UeXBlOjpBdWRpbzsKKyAgICAgICAgZWxzZSBpZiAoZG9DYXBzSGF2ZVR5cGUoZGVtdXhlclNy
Y1BhZENhcHMsIEdTVF9URVhUX0NBUFNfVFlQRV9QUkVGSVgpKQorICAgICAgICAgICAgc3RyZWFt
VHlwZSA9IFN0cmVhbVR5cGU6OlRleHQ7CiAgICAgfQorCisgICAgcmV0dXJuIHsgV1RGTW92ZShw
YXJzZWRDYXBzKSwgc3RyZWFtVHlwZSwgV1RGTW92ZShwcmVzZW50YXRpb25TaXplKSB9OwogfQog
Ci12b2lkIEFwcGVuZFBpcGVsaW5lOjphcHBzaW5rQ2Fwc0NoYW5nZWQoKQordm9pZCBBcHBlbmRQ
aXBlbGluZTo6YXBwc2lua0NhcHNDaGFuZ2VkKFRyYWNrJiB0cmFjaykKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogCiAgICAgLy8gQ29uc3VtZSBhbnkgcGVuZGluZyBzYW1wbGVzIHdp
dGggdGhlIHByZXZpb3VzIGNhcHMuCi0gICAgY29uc3VtZUFwcHNpbmtBdmFpbGFibGVTYW1wbGVz
KCk7CisgICAgY29uc3VtZUFwcHNpbmtzQXZhaWxhYmxlU2FtcGxlcygpOwogCi0gICAgR1JlZlB0
cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2Fw
cHNpbmsuZ2V0KCksICJzaW5rIikpOworICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdS
ZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQodHJhY2suYXBwc2luay5nZXQoKSwgInNpbmsi
KSk7CiAgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X2N1
cnJlbnRfY2FwcyhwYWQuZ2V0KCkpKTsKIAogICAgIGlmICghY2FwcykKQEAgLTQyNCwzMiArMzMw
LDMwIEBAIHZvaWQgQXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtDYXBzQ2hhbmdlZCgpCiAgICAgLy8g
SWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IHRpbWUgd2UncmUgcGFyc2luZyBhbiBpbml0aWFsaXph
dGlvbiBzZWdtZW50LCBmYWlsIGlmIHRoZSB0cmFjawogICAgIC8vIGhhcyBhIGRpZmZlcmVudCBj
b2RlYyBvciB0eXBlIChlLmcuIGlmIHdlIHdlcmUgcHJldmlvdXNseSBkZW11eGluZyBhbiBhdWRp
byBzdHJlYW0gYW5kCiAgICAgLy8gc29tZW9uZSBhcHBlbmRzIGEgdmlkZW8gc3RyZWFtKS4KLSAg
ICBpZiAobV9hcHBzaW5rQ2FwcyAmJiBnX3N0cmNtcDAoY2Fwc01lZGlhVHlwZShjYXBzLmdldCgp
KSwgY2Fwc01lZGlhVHlwZShtX2FwcHNpbmtDYXBzLmdldCgpKSkpIHsKLSAgICAgICAgR1NUX1dB
Uk5JTkdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJVc2VyIGFwcGVuZGVkIHRyYWNrIG1ldGFk
YXRhIHdpdGggdHlwZSAnJXMnIGZvciBhIFNvdXJjZUJ1ZmZlciBwcmV2aW91c2x5IGhhbmRsaW5n
ICclcycuIEVycm9yaW5nIG91dC4iLCBjYXBzTWVkaWFUeXBlKGNhcHMuZ2V0KCkpLCBjYXBzTWVk
aWFUeXBlKG1fYXBwc2lua0NhcHMuZ2V0KCkpKTsKKyAgICBpZiAodHJhY2suY2FwcyAmJiBnX3N0
cmNtcDAoY2Fwc01lZGlhVHlwZShjYXBzLmdldCgpKSwgY2Fwc01lZGlhVHlwZSh0cmFjay5jYXBz
LmdldCgpKSkpIHsKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCks
ICJUcmFjayByZWNlaXZlZCBpbmNvbXBhdGlibGUgY2FwcywgcmVjZWl2ZWQgJyVzJyBmb3IgYSB0
cmFjayBwcmV2aW91c2x5IGhhbmRsaW5nICclcycuIEVycm9yaW5nIG91dC4iLCBjYXBzTWVkaWFU
eXBlKGNhcHMuZ2V0KCkpLCBjYXBzTWVkaWFUeXBlKHRyYWNrLmNhcHMuZ2V0KCkpKTsKICAgICAg
ICAgbV9zb3VyY2VCdWZmZXJQcml2YXRlLmFwcGVuZFBhcnNpbmdGYWlsZWQoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmIChkb0NhcHNIYXZlVHlwZShjYXBzLmdldCgpLCBHU1Rf
VklERU9fQ0FQU19UWVBFX1BSRUZJWCkpIHsKICAgICAgICAgaWYgKGF1dG8gc2l6ZSA9IGdldFZp
ZGVvUmVzb2x1dGlvbkZyb21DYXBzKGNhcHMuZ2V0KCkpKQotICAgICAgICAgICAgbV9wcmVzZW50
YXRpb25TaXplID0gKnNpemU7CisgICAgICAgICAgICB0cmFjay5wcmVzZW50YXRpb25TaXplID0g
KnNpemU7CiAgICAgfQogCi0gICAgaWYgKG1fYXBwc2lua0NhcHMgIT0gY2FwcykgewotICAgICAg
ICBtX2FwcHNpbmtDYXBzID0gV1RGTW92ZShjYXBzKTsKLSAgICAgICAgbV9wbGF5ZXJQcml2YXRl
LT50cmFja0RldGVjdGVkKCp0aGlzLCBtX3RyYWNrKTsKLSAgICB9CisgICAgaWYgKHRyYWNrLmNh
cHMgIT0gY2FwcykKKyAgICAgICAgdHJhY2suY2FwcyA9IFdURk1vdmUoY2Fwcyk7CiB9CiAKIHZv
aWQgQXBwZW5kUGlwZWxpbmU6OmhhbmRsZUVuZE9mQXBwZW5kKCkKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIGNvbnN1bWVBcHBzaW5rQXZhaWxhYmxlU2FtcGxlcygpOworICAg
IGNvbnN1bWVBcHBzaW5rc0F2YWlsYWJsZVNhbXBsZXMoKTsKICAgICBHU1RfVFJBQ0VfT0JKRUNU
KG1fcGlwZWxpbmUuZ2V0KCksICJOb3RpZnlpbmcgU291cmNlQnVmZmVyUHJpdmF0ZSB0aGUgYXBw
ZW5kIGlzIGNvbXBsZXRlIik7CiAgICAgc291cmNlQnVmZmVyUHJpdmF0ZSgpLmRpZFJlY2VpdmVB
bGxQZW5kaW5nU2FtcGxlcygpOwogfQogCi12b2lkIEFwcGVuZFBpcGVsaW5lOjphcHBzaW5rTmV3
U2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYmIHNhbXBsZSkKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6
OmFwcHNpbmtOZXdTYW1wbGUoY29uc3QgVHJhY2smIHRyYWNrLCBHUmVmUHRyPEdzdFNhbXBsZT4m
JiBzYW1wbGUpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIApAQCAtNDY0LDcgKzM2
OCw3IEBAIHZvaWQgQXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtOZXdTYW1wbGUoR1JlZlB0cjxHc3RT
YW1wbGU+JiYgc2FtcGxlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBtZWRp
YVNhbXBsZSA9IE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGUoV1RGTW92ZShzYW1wbGUpLCBt
X3ByZXNlbnRhdGlvblNpemUsIHRyYWNrSWQoKSk7CisgICAgYXV0byBtZWRpYVNhbXBsZSA9IE1l
ZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGUoV1RGTW92ZShzYW1wbGUpLCB0cmFjay5wcmVzZW50
YXRpb25TaXplLCB0cmFjay50cmFja0lkKTsKIAogICAgIEdTVF9UUkFDRSgiYXBwZW5kOiB0cmFj
a0lkPSVzIFBUUz0lcyBEVFM9JXMgRFVSPSVzIHByZXNlbnRhdGlvblNpemU9JS4wZnglLjBmIiwK
ICAgICAgICAgbWVkaWFTYW1wbGUtPnRyYWNrSUQoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLApA
QCAtNDk5LDQ1ICs0MDMsOTUgQEAgdm9pZCBBcHBlbmRQaXBlbGluZTo6ZGlkUmVjZWl2ZUluaXRp
YWxpemF0aW9uU2VnbWVudCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAg
IFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudCBpbml0aWFs
aXphdGlvblNlZ21lbnQ7CisgICAgYm9vbCBpc0ZpcnN0SW5pdGlhbGl6YXRpb25TZWdtZW50ID0g
IW1faGFzUmVjZWl2ZWRGaXJzdEluaXRpYWxpemF0aW9uU2VnbWVudDsKIAotICAgIEdTVF9ERUJV
RygiTm90aWZ5aW5nIFNvdXJjZUJ1ZmZlciBmb3IgdHJhY2sgJXMiLCAobV90cmFjaykgPyBtX3Ry
YWNrLT5pZCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkgOiBudWxscHRyKTsKLSAgICBpbml0aWFs
aXphdGlvblNlZ21lbnQuZHVyYXRpb24gPSBtX2luaXRpYWxEdXJhdGlvbjsKKyAgICBTb3VyY2VC
dWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQgaW5pdGlhbGl6YXRpb25T
ZWdtZW50OwogCi0gICAgc3dpdGNoIChtX3N0cmVhbVR5cGUpIHsKLSAgICBjYXNlIEF1ZGlvOiB7
Ci0gICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVu
dDo6QXVkaW9UcmFja0luZm9ybWF0aW9uIGluZm87Ci0gICAgICAgIGluZm8udHJhY2sgPSBzdGF0
aWNfY2FzdDxBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcio+KG1fdHJhY2suZ2V0KCkpOwotICAg
ICAgICBpbmZvLmRlc2NyaXB0aW9uID0gR1N0cmVhbWVyTWVkaWFEZXNjcmlwdGlvbjo6Y3JlYXRl
KG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCkpOwotICAgICAgICBpbml0aWFsaXphdGlvblNlZ21l
bnQuYXVkaW9UcmFja3MuYXBwZW5kKGluZm8pOwotICAgICAgICBicmVhazsKKyAgICBnaW50NjQg
dGltZUxlbmd0aCA9IDA7CisgICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uKG1fZGVt
dXguZ2V0KCksIEdTVF9GT1JNQVRfVElNRSwgJnRpbWVMZW5ndGgpCisgICAgICAgICYmIHN0YXRp
Y19jYXN0PGd1aW50NjQ+KHRpbWVMZW5ndGgpICE9IEdTVF9DTE9DS19USU1FX05PTkUpCisgICAg
ICAgIGluaXRpYWxpemF0aW9uU2VnbWVudC5kdXJhdGlvbiA9IE1lZGlhVGltZShHU1RfVElNRV9B
U19VU0VDT05EUyh0aW1lTGVuZ3RoKSwgR19VU0VDX1BFUl9TRUMpOworICAgIGVsc2UKKyAgICAg
ICAgaW5pdGlhbGl6YXRpb25TZWdtZW50LmR1cmF0aW9uID0gTWVkaWFUaW1lOjpwb3NpdGl2ZUlu
ZmluaXRlVGltZSgpOworCisgICAgaWYgKGlzRmlyc3RJbml0aWFsaXphdGlvblNlZ21lbnQpIHsK
KyAgICAgICAgLy8gQ3JlYXRlIGEgVHJhY2sgb2JqZWN0IHBlciBwYWQuCisgICAgICAgIGludCB0
cmFja0luZGV4ID0gMDsKKyAgICAgICAgZm9yIChHc3RQYWQqIHBhZCA6IEdzdEl0ZXJhdG9yQWRh
cHRvcjxHc3RQYWQ+KEdVbmlxdWVQdHI8R3N0SXRlcmF0b3I+KGdzdF9lbGVtZW50X2l0ZXJhdGVf
c3JjX3BhZHMobV9kZW11eC5nZXQoKSkpKSkgeworICAgICAgICAgICAgYXV0byBbY3JlYXRlVHJh
Y2tSZXN1bHQsIHRyYWNrXSA9IHRyeUNyZWF0ZVRyYWNrRnJvbVBhZChwYWQsIHRyYWNrSW5kZXgp
OworICAgICAgICAgICAgaWYgKGNyZWF0ZVRyYWNrUmVzdWx0ID09IENyZWF0ZVRyYWNrUmVzdWx0
OjpBcHBlbmRQYXJzaW5nRmFpbGVkKSB7CisgICAgICAgICAgICAgICAgLy8gYXBwZW5kUGFyc2lu
Z0ZhaWxlZCgpIHdpbGwgaW1tZWRpYXRlbHkgY2F1c2UgYSByZXNldFBhcnNlclN0YXRlKCkgd2hp
Y2ggd2lsbCBzdG9wIGRlbXV4aW5nLCB0aGVuIHRoZQorICAgICAgICAgICAgICAgIC8vIEFwcGVu
ZFBpcGVsaW5lIHdpbGwgYmUgZGVzdHJveWVkLgorICAgICAgICAgICAgICAgIG1fc291cmNlQnVm
ZmVyUHJpdmF0ZS5hcHBlbmRQYXJzaW5nRmFpbGVkKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRyYWNrKQorICAgICAgICAgICAgICAg
IGxpbmtQYWRXaXRoVHJhY2socGFkLCAqdHJhY2spOworICAgICAgICAgICAgdHJhY2tJbmRleCsr
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTGluayBwYWRzIHRvIGV4aXN0
aW5nIFRyYWNrIG9iamVjdHMgdGhhdCBkb24ndCBoYXZlIGEgbGlua2VkIHBhZCB5ZXQuCisgICAg
ICAgIHVuc2lnbmVkIGNvdW50UGFkcyA9IDA7CisgICAgICAgIGZvciAoR3N0UGFkKiBwYWQgOiBH
c3RJdGVyYXRvckFkYXB0b3I8R3N0UGFkPihHVW5pcXVlUHRyPEdzdEl0ZXJhdG9yPihnc3RfZWxl
bWVudF9pdGVyYXRlX3NyY19wYWRzKG1fZGVtdXguZ2V0KCkpKSkpIHsKKyAgICAgICAgICAgIGNv
dW50UGFkcysrOworICAgICAgICAgICAgVHJhY2sqIHRyYWNrID0gdHJ5TWF0Y2hQYWRUb0V4aXN0
aW5nVHJhY2socGFkKTsKKyAgICAgICAgICAgIGlmICghdHJhY2spIHsKKyAgICAgICAgICAgICAg
ICBHU1RfV0FSTklOR19PQkpFQ1QocGlwZWxpbmUoKSwgIkNhbid0IG1hdGNoIHBhZCB0byBleGlz
dGluZyB0cmFja3MgaW4gdGhlIEFwcGVuZFBpcGVsaW5lOiAlIiBHU1RfUFRSX0ZPUk1BVCwgcGFk
KTsKKyAgICAgICAgICAgICAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGUuYXBwZW5kUGFyc2luZ0Zh
aWxlZCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGxpbmtQYWRXaXRoVHJhY2socGFkLCAqdHJhY2spOworICAgICAgICB9CisgICAgICAgIGlm
IChjb3VudFBhZHMgIT0gbV90cmFja3Muc2l6ZSgpKSB7CisgICAgICAgICAgICBHU1RfV0FSTklO
R19PQkpFQ1QocGlwZWxpbmUoKSwgIk51bWJlciBvZiBwYWRzICgldSkgZG9lc24ndCBtYXRjaCBu
dW1iZXIgb2YgdHJhY2tzICglenUpLiIsIGNvdW50UGFkcywgbV90cmFja3Muc2l6ZSgpKTsKKyAg
ICAgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS5hcHBlbmRQYXJzaW5nRmFpbGVkKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9Ci0gICAgY2FzZSBWaWRlbzogewot
ICAgICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQ6
OlZpZGVvVHJhY2tJbmZvcm1hdGlvbiBpbmZvOwotICAgICAgICBpbmZvLnRyYWNrID0gc3RhdGlj
X2Nhc3Q8VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIqPihtX3RyYWNrLmdldCgpKTsKLSAgICAg
ICAgaW5mby5kZXNjcmlwdGlvbiA9IEdTdHJlYW1lck1lZGlhRGVzY3JpcHRpb246OmNyZWF0ZSht
X2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpKTsKLSAgICAgICAgaW5pdGlhbGl6YXRpb25TZWdtZW50
LnZpZGVvVHJhY2tzLmFwcGVuZChpbmZvKTsKLSAgICAgICAgYnJlYWs7CisKKyAgICBmb3IgKHN0
ZDo6dW5pcXVlX3B0cjxUcmFjaz4mIHRyYWNrIDogbV90cmFja3MpIHsKKyAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChwaXBlbGluZSgpLCAiQWRkaW5nIHRyYWNrIHRvIGluaXRpYWxpemF0aW9uIHdp
dGggc2VnbWVudCB0eXBlICVzLCBpZCAlcy4iLCBzdHJlYW1UeXBlVG9TdHJpbmcodHJhY2stPnN0
cmVhbVR5cGUpLCB0cmFjay0+dHJhY2tJZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgc3dpdGNoICh0cmFjay0+c3RyZWFtVHlwZSkgeworICAgICAgICBjYXNlIEF1ZGlvOiB7Cisg
ICAgICAgICAgICBBU1NFUlQodHJhY2stPndlYktpdFRyYWNrKTsKKyAgICAgICAgICAgIFNvdXJj
ZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6QXVkaW9UcmFja0lu
Zm9ybWF0aW9uIGluZm87CisgICAgICAgICAgICBpbmZvLnRyYWNrID0gc3RhdGljX2Nhc3Q8QXVk
aW9UcmFja1ByaXZhdGVHU3RyZWFtZXIqPih0cmFjay0+d2ViS2l0VHJhY2suZ2V0KCkpOworICAg
ICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IEdTdHJlYW1lck1lZGlhRGVzY3JpcHRpb246OmNy
ZWF0ZSh0cmFjay0+Y2Fwcy5nZXQoKSk7CisgICAgICAgICAgICBpbml0aWFsaXphdGlvblNlZ21l
bnQuYXVkaW9UcmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBWaWRlbzogeworICAgICAgICAgICAgQVNTRVJUKHRyYWNrLT53ZWJL
aXRUcmFjayk7CisgICAgICAgICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFs
aXphdGlvblNlZ21lbnQ6OlZpZGVvVHJhY2tJbmZvcm1hdGlvbiBpbmZvOworICAgICAgICAgICAg
aW5mby50cmFjayA9IHN0YXRpY19jYXN0PFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyKj4odHJh
Y2stPndlYktpdFRyYWNrLmdldCgpKTsKKyAgICAgICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBH
U3RyZWFtZXJNZWRpYURlc2NyaXB0aW9uOjpjcmVhdGUodHJhY2stPmNhcHMuZ2V0KCkpOworICAg
ICAgICAgICAgaW5pdGlhbGl6YXRpb25TZWdtZW50LnZpZGVvVHJhY2tzLmFwcGVuZChpbmZvKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBHU1RfRVJST1IoIlVuc3VwcG9ydGVkIHN0cmVhbSB0eXBlIG9yIGNvZGVjIik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBH
U1RfRVJST1IoIlVuc3VwcG9ydGVkIHN0cmVhbSB0eXBlIG9yIGNvZGVjIik7Ci0gICAgICAgIGJy
ZWFrOworCisgICAgaWYgKGlzRmlyc3RJbml0aWFsaXphdGlvblNlZ21lbnQpIHsKKyAgICAgICAg
Zm9yIChzdGQ6OnVuaXF1ZV9wdHI8VHJhY2s+JiB0cmFjayA6IG1fdHJhY2tzKSB7CisgICAgICAg
ICAgICBpZiAodHJhY2stPnN0cmVhbVR5cGUgPT0gU3RyZWFtVHlwZTo6VmlkZW8pIHsKKyAgICAg
ICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJTZXR0aW5nIGluaXRpYWwg
dmlkZW8gc2l6ZSB0byB0aGF0IG9mIHRyYWNrIHdpdGggaWQgJyVzJywgJWd4JWcuIiwKKyAgICAg
ICAgICAgICAgICAgICAgdHJhY2stPnRyYWNrSWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3Rh
dGljX2Nhc3Q8ZG91YmxlPih0cmFjay0+cHJlc2VudGF0aW9uU2l6ZS53aWR0aCgpKSwgc3RhdGlj
X2Nhc3Q8ZG91YmxlPih0cmFjay0+cHJlc2VudGF0aW9uU2l6ZS5oZWlnaHQoKSkpOworICAgICAg
ICAgICAgICAgIG1fcGxheWVyUHJpdmF0ZS0+c2V0SW5pdGlhbFZpZGVvU2l6ZSh0cmFjay0+cHJl
c2VudGF0aW9uU2l6ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KICAgICB9CiAKKyAgICBtX2hhc1JlY2VpdmVkRmlyc3RJbml0aWFsaXphdGlvblNl
Z21lbnQgPSB0cnVlOworICAgIEdTVF9ERUJVRygiTm90aWZ5aW5nIFNvdXJjZUJ1ZmZlciBvZiBp
bml0aWFsaXphdGlvbiBzZWdtZW50LiIpOworICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVf
V0lUSF9UUyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19B
TEwsICJhcHBlbmQtcGlwZWxpbmUtcmVjZWl2ZWQtaW5pdC1zZWdtZW50Iik7CiAgICAgbV9zb3Vy
Y2VCdWZmZXJQcml2YXRlLmRpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoV1RGTW92ZShp
bml0aWFsaXphdGlvblNlZ21lbnQpLCBbXSgpIHsgfSk7CiB9CiAKLUF0b21TdHJpbmcgQXBwZW5k
UGlwZWxpbmU6OnRyYWNrSWQoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAg
ICBpZiAoIW1fdHJhY2spCi0gICAgICAgIHJldHVybiBBdG9tU3RyaW5nKCk7Ci0KLSAgICByZXR1
cm4gbV90cmFjay0+aWQoKTsKLX0KLQotdm9pZCBBcHBlbmRQaXBlbGluZTo6Y29uc3VtZUFwcHNp
bmtBdmFpbGFibGVTYW1wbGVzKCkKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmNvbnN1bWVBcHBzaW5r
c0F2YWlsYWJsZVNhbXBsZXMoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKQEAg
LTU0Nyw5ICs1MDEsMTEgQEAgdm9pZCBBcHBlbmRQaXBlbGluZTo6Y29uc3VtZUFwcHNpbmtBdmFp
bGFibGVTYW1wbGVzKCkKICAgICAvLyBCYXRjaCBkdXJhdGlvbiBjaGFuZ2VzIHNvIHRoYXQgaWYg
d2UgcGljayAxMDAgb2Ygc3VjaCBzYW1wbGVzIHdlIGRvbid0IGhhdmUgdG8gcnVuIDEwMCB0aW1l
cwogICAgIC8vIGxheW91dCBmb3IgdGhlIHZpZGVvIGNvbnRyb2xzLCBidXQgb25seSBvbmNlLgog
ICAgIG1fcGxheWVyUHJpdmF0ZS0+YmxvY2tEdXJhdGlvbkNoYW5nZXMoKTsKLSAgICB3aGlsZSAo
KHNhbXBsZSA9IGFkb3B0R1JlZihnc3RfYXBwX3NpbmtfdHJ5X3B1bGxfc2FtcGxlKEdTVF9BUFBf
U0lOSyhtX2FwcHNpbmsuZ2V0KCkpLCAwKSkpKSB7Ci0gICAgICAgIGFwcHNpbmtOZXdTYW1wbGUo
V1RGTW92ZShzYW1wbGUpKTsKLSAgICAgICAgYmF0Y2hlZFNhbXBsZUNvdW50Kys7CisgICAgZm9y
IChzdGQ6OnVuaXF1ZV9wdHI8VHJhY2s+JiB0cmFjayA6IG1fdHJhY2tzKSB7CisgICAgICAgIHdo
aWxlICgoc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lua190cnlfcHVsbF9zYW1wbGUoR1NU
X0FQUF9TSU5LKHRyYWNrLT5hcHBzaW5rLmdldCgpKSwgMCkpKSkgeworICAgICAgICAgICAgYXBw
c2lua05ld1NhbXBsZSgqdHJhY2ssIFdURk1vdmUoc2FtcGxlKSk7CisgICAgICAgICAgICBiYXRj
aGVkU2FtcGxlQ291bnQrKzsKKyAgICAgICAgfQogICAgIH0KICAgICBtX3BsYXllclByaXZhdGUt
PnVuYmxvY2tEdXJhdGlvbkNoYW5nZXMoKTsKIApAQCAtNTczLDkgKzUyOSw2IEBAIHZvaWQgQXBw
ZW5kUGlwZWxpbmU6OnJlc2V0UGFyc2VyU3RhdGUoKQogICAgIC8vIFJlc2V0IHRoZSBzdGF0ZSBv
ZiBhbGwgZWxlbWVudHMgaW4gdGhlIHBpcGVsaW5lLgogICAgIGFzc2VydGVkRWxlbWVudFNldFN0
YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9SRUFEWSk7CiAKLSAgICAvLyBUaGUgcGFy
c2VyIGlzIHRlYXIgZG93biBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGRlbXV4ZXIgaXMgcmVzZXQg
KHNlZSBkaXNjb25uZWN0RGVtdXhlclNyY1BhZEZyb21BcHBzaW5rRnJvbUFueVRocmVhZCgpKS4K
LSAgICBBU1NFUlQoIW1fcGFyc2VyKTsKLQogICAgIC8vIFNldCB0aGUgcGlwZWxpbmUgdG8gUExB
WUlORyBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGFnYWluLgogICAgIGFzc2VydGVkRWxlbWVudFNl
dFN0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9QTEFZSU5HKTsKIApAQCAtNjQyLDIw
ICs1OTUsMTggQEAgdm9pZCBBcHBlbmRQaXBlbGluZTo6aGFuZGxlQXBwc2lua05ld1NhbXBsZUZy
b21TdHJlYW1pbmdUaHJlYWQoR3N0RWxlbWVudCopCiAgICAgICAgIEdTVF9UUkFDRSgiUG9zdGlu
ZyBhcHBzaW5rLW5ldy1zYW1wbGUgdGFzayB0byB0aGUgbWFpbiB0aHJlYWQiKTsKICAgICAgICAg
bV90YXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXNdKCkgewogICAgICAgICAgICAgbV93YXNCdXNB
bHJlYWR5Tm90aWZpZWRPZkF2YWlsYWJsZVNhbXBsZXMuY2xlYXIoKTsKLSAgICAgICAgICAgIGNv
bnN1bWVBcHBzaW5rQXZhaWxhYmxlU2FtcGxlcygpOworICAgICAgICAgICAgY29uc3VtZUFwcHNp
bmtzQXZhaWxhYmxlU2FtcGxlcygpOwogICAgICAgICB9KTsKICAgICB9CiB9CiAKIHN0YXRpYyBH
UmVmUHRyPEdzdEVsZW1lbnQ+Ci1jcmVhdGVPcHRpb25hbFBhcnNlckZvckZvcm1hdChHc3RQYWQq
IGRlbXV4ZXJTcmNQYWQpCitjcmVhdGVPcHRpb25hbFBhcnNlckZvckZvcm1hdChjb25zdCBBdG9t
U3RyaW5nJiB0cmFja0lkLCBjb25zdCBHc3RDYXBzKiBjYXBzKQogewotICAgIEdSZWZQdHI8R3N0
Q2Fwcz4gcGFkQ2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMoZGVtdXhl
clNyY1BhZCkpOwotICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0
cnVjdHVyZShwYWRDYXBzLmdldCgpLCAwKTsKKyAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2FwcywgMCk7CiAgICAgY29uc3QgY2hhciogbWVkaWFU
eXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZShzdHJ1Y3R1cmUpOwogCi0gICAgR1VuaXF1ZVB0
cjxjaGFyPiBkZW11eGVyUGFkTmFtZShnc3RfcGFkX2dldF9uYW1lKGRlbXV4ZXJTcmNQYWQpKTsK
LSAgICBHVW5pcXVlUHRyPGNoYXI+IHBhcnNlck5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlc19wYXJz
ZXIiLCBkZW11eGVyUGFkTmFtZS5nZXQoKSkpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGFyc2Vy
TmFtZShnX3N0cmR1cF9wcmludGYoIiVzX3BhcnNlciIsIHRyYWNrSWQuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSkpOwogCiAgICAgaWYgKCFnX3N0cmNtcDAobWVkaWFUeXBlLCAiYXVkaW8veC1vcHVz
IikpIHsKICAgICAgICAgR3N0RWxlbWVudCogb3B1c3BhcnNlID0gbWFrZUdTdHJlYW1lckVsZW1l
bnQoIm9wdXNwYXJzZSIsIHBhcnNlck5hbWUuZ2V0KCkpOwpAQCAtNjY5LDIyMCArNjIwLDIzMCBA
QCBjcmVhdGVPcHRpb25hbFBhcnNlckZvckZvcm1hdChHc3RQYWQqIGRlbXV4ZXJTcmNQYWQpCiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgQXBwZW5kUGlwZWxpbmU6OmNvbm5lY3REZW11
eGVyU3JjUGFkVG9BcHBzaW5rRnJvbVN0cmVhbWluZ1RocmVhZChHc3RQYWQqIGRlbXV4ZXJTcmNQ
YWQpCitBdG9tU3RyaW5nIEFwcGVuZFBpcGVsaW5lOjpnZW5lcmF0ZVRyYWNrSWQoU3RyZWFtVHlw
ZSBzdHJlYW1UeXBlLCBpbnQgcGFkSW5kZXgpCiB7Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7Ci0KLSAgICBHU1RfREVCVUcoImNvbm5lY3RpbmcgdG8gYXBwc2luayIpOwotCi0gICAgaWYg
KG1fZGVtdXgtPm51bXNyY3BhZHMgPiAxKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HKCJPbmx5IG9u
ZSBzdHJlYW0gcGVyIFNvdXJjZUJ1ZmZlciBpcyBhbGxvd2VkISBJZ25vcmluZyBzdHJlYW0gJWQg
YnkgYWRkaW5nIGEgYmxhY2sgaG9sZSBwcm9iZS4iLCBtX2RlbXV4LT5udW1zcmNwYWRzKTsKLSAg
ICAgICAgZ3Vsb25nIHByb2JlSWQgPSBnc3RfcGFkX2FkZF9wcm9iZShkZW11eGVyU3JjUGFkLCBH
U1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSLCByZWludGVycHJldF9jYXN0PEdzdFBhZFByb2JlQ2Fs
bGJhY2s+KGFwcGVuZFBpcGVsaW5lRGVtdXhlckJsYWNrSG9sZVBhZFByb2JlKSwgbnVsbHB0ciwg
bnVsbHB0cik7Ci0gICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGRlbXV4ZXJTcmNQ
YWQpLCAiYmxhY2tIb2xlUHJvYmVJZCIsIEdVTE9OR19UT19QT0lOVEVSKHByb2JlSWQpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdSZWZQdHI8R3N0UGFkPiBhcHBzaW5rU2lua1Bh
ZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2FwcHNpbmsuZ2V0KCks
ICJzaW5rIikpOwotCi0gICAgLy8gT25seSBvbmUgc3RyZWFtIHBlciBkZW11eGVyIGlzIHN1cHBv
cnRlZC4KLSAgICBBU1NFUlQoIWdzdF9wYWRfaXNfbGlua2VkKGFwcHNpbmtTaW5rUGFkLmdldCgp
KSk7Ci0KLSAgICBnaW50NjQgdGltZUxlbmd0aCA9IDA7Ci0gICAgaWYgKGdzdF9lbGVtZW50X3F1
ZXJ5X2R1cmF0aW9uKG1fZGVtdXguZ2V0KCksIEdTVF9GT1JNQVRfVElNRSwgJnRpbWVMZW5ndGgp
Ci0gICAgICAgICYmIHN0YXRpY19jYXN0PGd1aW50NjQ+KHRpbWVMZW5ndGgpICE9IEdTVF9DTE9D
S19USU1FX05PTkUpCi0gICAgICAgIG1faW5pdGlhbER1cmF0aW9uID0gTWVkaWFUaW1lKEdTVF9U
SU1FX0FTX1VTRUNPTkRTKHRpbWVMZW5ndGgpLCBHX1VTRUNfUEVSX1NFQyk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2luaXRpYWxEdXJhdGlvbiA9IE1lZGlhVGltZTo6cG9zaXRpdmVJbmZpbml0ZVRp
bWUoKTsKLQotICAgIEdTVF9ERUJVRygiUmVxdWVzdGluZyBkZW11eGVyLWNvbm5lY3QtdG8tYXBw
c2luayB0byBtYWluIHRocmVhZCIpOwotICAgIGF1dG8gcmVzcG9uc2UgPSBtX3Rhc2tRdWV1ZS5l
bnF1ZXVlVGFza0FuZFdhaXQ8QWJvcnRhYmxlVGFza1F1ZXVlOjpWb2lkPihbdGhpcywgZGVtdXhl
clNyY1BhZF0oKSB7Ci0gICAgICAgIGNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rKGRlbXV4
ZXJTcmNQYWQpOwotICAgICAgICByZXR1cm4gQWJvcnRhYmxlVGFza1F1ZXVlOjpWb2lkKCk7Ci0g
ICAgfSk7Ci0gICAgaWYgKCFyZXNwb25zZSkgewotICAgICAgICAvLyBUaGUgQXBwZW5kUGlwZWxp
bmUgaGFzIGJlZW4gZGVzdHJveWVkIG9yIGFib3J0ZWQgYmVmb3JlIHdlIHJlY2VpdmVkIGEgcmVz
cG9uc2UuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBNdXN0IGJlIGRvbmUgaW4g
dGhlIHRocmVhZCB3ZSB3ZXJlIGNhbGxlZCBmcm9tICh1c3VhbGx5IHN0cmVhbWluZyB0aHJlYWQp
LgotICAgIGJvb2wgaXNEYXRhID0gKG1fc3RyZWFtVHlwZSA9PSBNZWRpYVNvdXJjZVN0cmVhbVR5
cGVHU3RyZWFtZXI6OkF1ZGlvKQotICAgICAgICB8fCAobV9zdHJlYW1UeXBlID09IE1lZGlhU291
cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VmlkZW8pCi0gICAgICAgIHx8IChtX3N0cmVhbVR5cGUg
PT0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpUZXh0KTsKLQotICAgIGlmIChpc0Rh
dGEpIHsKLSAgICAgICAgR1JlZlB0cjxHc3RPYmplY3Q+IHBhcmVudCA9IGFkb3B0R1JlZihnc3Rf
ZWxlbWVudF9nZXRfcGFyZW50KG1fYXBwc2luay5nZXQoKSkpOwotICAgICAgICBpZiAoIXBhcmVu
dCkKLSAgICAgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIG1f
YXBwc2luay5nZXQoKSk7Ci0KLSAgICAgICAgLy8gQ3VycmVudCBoZWFkIG9mIHRoZSBwaXBlbGlu
ZSBiZWluZyBidWlsdC4KLSAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IGN1cnJlbnRTcmNQYWQgPSBk
ZW11eGVyU3JjUGFkOwotCi0gICAgICAgIC8vIFNvbWUgYXVkaW8gZmlsZXMgdW5oZWxwZnVsbHkg
b21pdCB0aGUgZHVyYXRpb24gb2YgZnJhbWVzIGluIHRoZSBjb250YWluZXIuIFdlIG5lZWQgdG8g
cGFyc2UKLSAgICAgICAgLy8gdGhlIGNvbnRhaW5lZCBhdWRpbyBzdHJlYW1zIGluIG9yZGVyIHRv
IGtub3cgdGhlIGR1cmF0aW9uIG9mIHRoZSBmcmFtZXMuCi0gICAgICAgIC8vIFRoaXMgaXMga25v
d24gdG8gYmUgYW4gaXNzdWUgd2l0aCBZb3VUdWJlIFdlYk0gZmlsZXMgY29udGFpbmluZyBPcHVz
IGF1ZGlvIGFzIG9mIFlUVFYyMDE4LgotICAgICAgICBtX3BhcnNlciA9IGNyZWF0ZU9wdGlvbmFs
UGFyc2VyRm9yRm9ybWF0KGN1cnJlbnRTcmNQYWQuZ2V0KCkpOwotICAgICAgICBpZiAobV9wYXJz
ZXIpIHsKLSAgICAgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSks
IG1fcGFyc2VyLmdldCgpKTsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0
aF9wYXJlbnQobV9wYXJzZXIuZ2V0KCkpOwotCi0gICAgICAgICAgICBHUmVmUHRyPEdzdFBhZD4g
cGFyc2VyU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX3Bh
cnNlci5nZXQoKSwgInNpbmsiKSk7Ci0gICAgICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcGFyc2Vy
U3JjUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fcGFyc2VyLmdl
dCgpLCAic3JjIikpOwotCi0gICAgICAgICAgICBnc3RfcGFkX2xpbmsoY3VycmVudFNyY1BhZC5n
ZXQoKSwgcGFyc2VyU2lua1BhZC5nZXQoKSk7Ci0gICAgICAgICAgICBjdXJyZW50U3JjUGFkID0g
cGFyc2VyU3JjUGFkOwotICAgICAgICB9Ci0KLSAgICAgICAgZ3N0X3BhZF9saW5rKGN1cnJlbnRT
cmNQYWQuZ2V0KCksIGFwcHNpbmtTaW5rUGFkLmdldCgpKTsKLQotICAgICAgICBnc3RfZWxlbWVu
dF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KG1fYXBwc2luay5nZXQoKSk7Ci0KLSAgICAgICAgR1NU
X0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSks
IEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgIndlYmtpdC1hZnRlci1saW5rIik7CisgICAgc3dp
dGNoIChzdHJlYW1UeXBlKSB7CisgICAgY2FzZSBBdWRpbzoKKyAgICAgICAgcmV0dXJuIG1ha2VT
dHJpbmcoIkEiLCBwYWRJbmRleCk7CisgICAgY2FzZSBWaWRlbzoKKyAgICAgICAgcmV0dXJuIG1h
a2VTdHJpbmcoIlYiLCBwYWRJbmRleCk7CisgICAgY2FzZSBUZXh0OgorICAgICAgICByZXR1cm4g
bWFrZVN0cmluZygiVCIsIHBhZEluZGV4KTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
bWFrZVN0cmluZygiTyIsIHBhZEluZGV4KTsKICAgICB9CiB9CiAKLXZvaWQgQXBwZW5kUGlwZWxp
bmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rKEdzdFBhZCogZGVtdXhlclNyY1BhZCkK
K3N0ZDo6cGFpcjxBcHBlbmRQaXBlbGluZTo6Q3JlYXRlVHJhY2tSZXN1bHQsIEFwcGVuZFBpcGVs
aW5lOjpUcmFjayo+IEFwcGVuZFBpcGVsaW5lOjp0cnlDcmVhdGVUcmFja0Zyb21QYWQoR3N0UGFk
KiBkZW11eGVyU3JjUGFkLCBpbnQgdHJhY2tJbmRleCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotICAgIEdTVF9ERUJVRygiQ29ubmVjdGluZyB0byBhcHBzaW5rIik7CisgICAgQVNT
RVJUKCFtX2hhc1JlY2VpdmVkRmlyc3RJbml0aWFsaXphdGlvblNlZ21lbnQpOworICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkNyZWF0aW5nIFRyYWNrIG9iamVjdCBmb3IgcGFkICUi
IEdTVF9QVFJfRk9STUFULCBkZW11eGVyU3JjUGFkKTsKIAogICAgIGNvbnN0IFN0cmluZyYgdHlw
ZSA9IG1fc291cmNlQnVmZmVyUHJpdmF0ZS50eXBlKCkuY29udGFpbmVyVHlwZSgpOwogICAgIGlm
ICh0eXBlLmVuZHNXaXRoKCJ3ZWJtIikpCiAgICAgICAgIGdzdF9wYWRfYWRkX3Byb2JlKGRlbXV4
ZXJTcmNQYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNLCBtYXRyb3NrYWRl
bXV4Rm9yY2VTZWdtZW50U3RhcnRUb0VxdWFsWmVybywgbnVsbHB0ciwgbnVsbHB0cik7CiAKLSAg
ICBHUmVmUHRyPEdzdFBhZD4gc2lua1NpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRpY19wYWQobV9hcHBzaW5rLmdldCgpLCAic2luayIpKTsKLQotICAgIC8vIE9ubHkgb25l
IHN0cmVhbSBwZXIgZGVtdXhlciBpcyBzdXBwb3J0ZWQuCi0gICAgQVNTRVJUKCFnc3RfcGFkX2lz
X2xpbmtlZChzaW5rU2lua1BhZC5nZXQoKSkpOwotCi0gICAgLy8gQXMgaXQgaXMgbm93LCByZXNl
dFBhcnNlclN0YXRlKCkgd2lsbCBjYXVzZSB0aGUgcGFkcyB0byBiZSBkaXNjb25uZWN0ZWQsIHNv
IHRoZXkgd2lsbCBsYXRlciBiZSByZS1hZGRlZCBvbiB0aGUgbmV4dCBpbml0aWFsaXphdGlvbiBz
ZWdtZW50LgotCi0gICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9wYWRf
Z2V0X2N1cnJlbnRfY2FwcyhHU1RfUEFEKGRlbXV4ZXJTcmNQYWQpKSk7Ci0KKyAgICBhdXRvIFtw
YXJzZWRDYXBzLCBzdHJlYW1UeXBlLCBwcmVzZW50YXRpb25TaXplXSA9IHBhcnNlRGVtdXhlclNy
Y1BhZENhcHMoYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyhkZW11eGVyU3JjUGFk
KSkuZ2V0KCkpOwogI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKICAgICB7Ci0gICAgICAg
IEdVbmlxdWVQdHI8Z2NoYXI+IHN0cmNhcHMoZ3N0X2NhcHNfdG9fc3RyaW5nKGNhcHMuZ2V0KCkp
KTsKKyAgICAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gc3RyY2Fwcyhnc3RfY2Fwc190b19zdHJpbmco
cGFyc2VkQ2Fwcy5nZXQoKSkpOwogICAgICAgICBHU1RfREVCVUcoIiVzIiwgc3RyY2Fwcy5nZXQo
KSk7CiAgICAgfQogI2VuZGlmCiAKLSAgICBwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKGdzdF9jYXBz
X3JlZihjYXBzLmdldCgpKSk7CisgICAgaWYgKHN0cmVhbVR5cGUgPT0gU3RyZWFtVHlwZTo6SW52
YWxpZCkgeworICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlVu
c3VwcG9ydGVkIHRyYWNrIGNvZGVjOiAlIiBHU1RfUFRSX0ZPUk1BVCwgcGFyc2VkQ2Fwcy5nZXQo
KSk7CisgICAgICAgIC8vIDMuNS43IEluaXRpYWxpemF0aW9uIFNlZ21lbnQgUmVjZWl2ZWQKKyAg
ICAgICAgLy8gNS4xLiBJZiB0aGUgaW5pdGlhbGl6YXRpb24gc2VnbWVudCBjb250YWlucyB0cmFj
a3Mgd2l0aCBjb2RlY3MgdGhlIHVzZXIgYWdlbnQgZG9lcyBub3Qgc3VwcG9ydCwgdGhlbiBydW4g
dGhlCisgICAgICAgIC8vIGFwcGVuZCBlcnJvciBhbGdvcml0aG0gYW5kIGFib3J0IHRoZXNlIHN0
ZXBzLgorICAgICAgICByZXR1cm4geyBDcmVhdGVUcmFja1Jlc3VsdDo6QXBwZW5kUGFyc2luZ0Zh
aWxlZCwgbnVsbHB0ciB9OworICAgIH0KKyAgICBpZiAoc3RyZWFtVHlwZSA9PSBTdHJlYW1UeXBl
OjpVbmtub3duKSB7CisgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChwaXBlbGluZSgpLCAiUGFk
ICclcycgd2l0aCBwYXJzZWQgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCAiIGhhcyBhbiB1bmtub3du
IHR5cGUsIHdpbGwgYmUgY29ubmVjdGVkIHRvIGEgYmxhY2sgaG9sZSBwcm9iZS4iLCBHU1RfUEFE
X05BTUUoZGVtdXhlclNyY1BhZCksIHBhcnNlZENhcHMuZ2V0KCkpOworICAgICAgICBnc3RfcGFk
X2FkZF9wcm9iZShkZW11eGVyU3JjUGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSLCByZWlu
dGVycHJldF9jYXN0PEdzdFBhZFByb2JlQ2FsbGJhY2s+KGFwcGVuZFBpcGVsaW5lRGVtdXhlckJs
YWNrSG9sZVBhZFByb2JlKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIHJldHVybiB7IENy
ZWF0ZVRyYWNrUmVzdWx0OjpUcmFja0lnbm9yZWQsIG51bGxwdHIgfTsKKyAgICB9CisgICAgQXRv
bVN0cmluZyB0cmFja0lkID0gZ2VuZXJhdGVUcmFja0lkKHN0cmVhbVR5cGUsIHRyYWNrSW5kZXgp
OworCisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiQ3JlYXRpbmcgbmV3IEFwcGVu
ZFBpcGVsaW5lOjpUcmFjayB3aXRoIGlkICclcyciLCB0cmFja0lkLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOworICAgIHNpemVfdCBuZXdUcmFja0luZGV4ID0gbV90cmFja3Muc2l6ZSgpOworICAg
IG1fdHJhY2tzLmFwcGVuZChXVEY6Om1ha2VVbmlxdWU8VHJhY2s+KHRyYWNrSWQsIHN0cmVhbVR5
cGUsIHBhcnNlZENhcHMsIHByZXNlbnRhdGlvblNpemUpKTsKKyAgICBUcmFjayYgdHJhY2sgPSAq
bV90cmFja3MuYXQobmV3VHJhY2tJbmRleCk7CisgICAgdHJhY2suaW5pdGlhbGl6ZUVsZW1lbnRz
KHRoaXMsIEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSkpOworICAgIHRyYWNrLndlYktpdFRyYWNr
ID0gbWFrZVdlYktpdFRyYWNrKG5ld1RyYWNrSW5kZXgpOworICAgIGhvb2tUcmFja0V2ZW50cyh0
cmFjayk7CisgICAgcmV0dXJuIHsgQ3JlYXRlVHJhY2tSZXN1bHQ6OlRyYWNrQ3JlYXRlZCwgJnRy
YWNrIH07Cit9CisKK0FwcGVuZFBpcGVsaW5lOjpUcmFjayogQXBwZW5kUGlwZWxpbmU6OnRyeU1h
dGNoUGFkVG9FeGlzdGluZ1RyYWNrKEdzdFBhZCAqZGVtdXhlclNyY1BhZCkKK3sKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX2hhc1JlY2VpdmVkRmlyc3RJbml0aWFs
aXphdGlvblNlZ21lbnQpOworICAgIEF0b21TdHJpbmcgdHJhY2tJZCA9IEdTVF9QQURfTkFNRShk
ZW11eGVyU3JjUGFkKTsKKyAgICBhdXRvIFtwYXJzZWRDYXBzLCBzdHJlYW1UeXBlLCBwcmVzZW50
YXRpb25TaXplXSA9IHBhcnNlRGVtdXhlclNyY1BhZENhcHMoYWRvcHRHUmVmKGdzdF9wYWRfZ2V0
X2N1cnJlbnRfY2FwcyhkZW11eGVyU3JjUGFkKSkuZ2V0KCkpOworCisgICAgLy8gVHJ5IHRvIGZp
bmQgYSBtYXRjaGluZyBwcmUtZXhpc3RpbmcgdHJhY2suIElkZWFsbHksIHRyYWNrcyBzaG91bGQg
YmUgbWF0Y2hlZCBieSB0cmFjayBJRCwgYnV0IG1hdGNoaW5nIGJ5IHR5cGUKKyAgICAvLyBpcyBw
cm92aWRlZCBhcyBhIGZhbGxiYWNrIC0tIHdoaWNoIHdpbGwgYmUgdXNlZCwgc2luY2Ugd2UgZG9u
J3QgaGF2ZSBhIHdheSB0byBmZXRjaCB0aG9zZSBmcm9tIEdTdHJlYW1lciBhdCB0aGUgbW9tZW50
LgorICAgIFRyYWNrKiBtYXRjaGluZ1RyYWNrID0gbnVsbHB0cjsKKyAgICBmb3IgKHN0ZDo6dW5p
cXVlX3B0cjxUcmFjaz4mIHRyYWNrIDogbV90cmFja3MpIHsKKyAgICAgICAgaWYgKHRyYWNrLT5z
dHJlYW1UeXBlICE9IHN0cmVhbVR5cGUgfHwgZ3N0X3BhZF9pc19saW5rZWQodHJhY2stPmVudHJ5
UGFkLmdldCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtYXRjaGluZ1RyYWNr
ID0gJip0cmFjazsKKyAgICAgICAgaWYgKHRyYWNrLT50cmFja0lkID09IHRyYWNrSWQpCisgICAg
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIW1hdGNoaW5nVHJhY2spIHsKKyAgICAg
ICAgLy8gSW52YWxpZCBjb25maWd1cmF0aW9uLgorICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIkNvdWxkbid0IGZpbmQgYSBtYXRjaGluZyBwcmUtZXhpc3RpbmcgdHJhY2sg
Zm9yIHBhZCAnJXMnIHdpdGggcGFyc2VkIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQKKyAgICAgICAg
ICAgICIgb24gbm9uLWZpcnN0IGluaXRpYWxpemF0aW9uIHNlZ21lbnQsIHdpbGwgYmUgY29ubmVj
dGVkIHRvIGEgYmxhY2sgaG9sZSBwcm9iZS4iLCBHU1RfUEFEX05BTUUoZGVtdXhlclNyY1BhZCks
IHBhcnNlZENhcHMuZ2V0KCkpOworICAgICAgICBnc3RfcGFkX2FkZF9wcm9iZShkZW11eGVyU3Jj
UGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSLCByZWludGVycHJldF9jYXN0PEdzdFBhZFBy
b2JlQ2FsbGJhY2s+KGFwcGVuZFBpcGVsaW5lRGVtdXhlckJsYWNrSG9sZVBhZFByb2JlKSwgbnVs
bHB0ciwgbnVsbHB0cik7CisgICAgfQorICAgIHJldHVybiBtYXRjaGluZ1RyYWNrOworfQorCit2
b2lkIEFwcGVuZFBpcGVsaW5lOjpsaW5rUGFkV2l0aFRyYWNrKEdzdFBhZCogZGVtdXhlclNyY1Bh
ZCwgVHJhY2smIHRyYWNrKQoreworICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9U
UyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsICJh
cHBlbmQtcGlwZWxpbmUtYmVmb3JlLWxpbmsiKTsKKyAgICBBU1NFUlQoIUdTVF9QQURfSVNfTElO
S0VEKHRyYWNrLmVudHJ5UGFkLmdldCgpKSk7CisgICAgZ3N0X3BhZF9saW5rKGRlbXV4ZXJTcmNQ
YWQsIHRyYWNrLmVudHJ5UGFkLmdldCgpKTsKKyAgICBBU1NFUlQoR1NUX1BBRF9JU19MSU5LRUQo
dHJhY2suZW50cnlQYWQuZ2V0KCkpKTsKKyAgICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJ
VEhfVFMoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxM
LCAiYXBwZW5kLXBpcGVsaW5lLWFmdGVyLWxpbmsiKTsKK30KIAotICAgIFRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXIqIGdzdHJlYW1lclRyYWNrOwotICAgIHN3aXRjaCAobV9zdHJlYW1UeXBlKSB7
Ci0gICAgY2FzZSBNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkF1ZGlvOiB7Ci0gICAg
ICAgIGF1dG8gc3BlY2lmaWNUcmFjayA9IEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVh
dGUobWFrZVdlYWtQdHIoKm1fcGxheWVyUHJpdmF0ZSksIGlkKCksIHNpbmtTaW5rUGFkLmdldCgp
KTsKK1JlZjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBBcHBlbmRQaXBlbGluZTo6bWFrZVdl
YktpdFRyYWNrKGludCB0cmFja0luZGV4KQoreworICAgIFRyYWNrJiBhcHBlbmRQaXBlbGluZVRy
YWNrID0gKm1fdHJhY2tzLmF0KHRyYWNrSW5kZXgpOworCisgICAgUmVmUHRyPFdlYkNvcmU6OlRy
YWNrUHJpdmF0ZUJhc2U+IHRyYWNrOworICAgIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIqIGdz
dHJlYW1lclRyYWNrID0gbnVsbHB0cjsKKyAgICAvLyBGSVhNRTogQXVkaW9UcmFja1ByaXZhdGVH
U3RyZWFtZXIgZXRjLiBzaG91bGQgcHJvYmFibHkgdXNlIHBhZHMgb2YgdGhlIHBsYXliYWNrIHBp
cGVsaW5lIHJhdGhlciB0aGFuIHRoZSBhcHBlbmQgcGlwZWxpbmUuCisgICAgc3dpdGNoIChhcHBl
bmRQaXBlbGluZVRyYWNrLnN0cmVhbVR5cGUpIHsKKyAgICBjYXNlIFN0cmVhbVR5cGU6OkF1ZGlv
OiB7CisgICAgICAgIGF1dG8gc3BlY2lmaWNUcmFjayA9IEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVh
bWVyOjpjcmVhdGUobWFrZVdlYWtQdHIobV9wbGF5ZXJQcml2YXRlKSwgdHJhY2tJbmRleCwgYXBw
ZW5kUGlwZWxpbmVUcmFjay5hcHBzaW5rUGFkKTsKICAgICAgICAgZ3N0cmVhbWVyVHJhY2sgPSBz
cGVjaWZpY1RyYWNrLnB0cigpOwotICAgICAgICBtX3RyYWNrID0gbWFrZVJlZlB0cihzdGF0aWNf
Y2FzdDxUcmFja1ByaXZhdGVCYXNlKj4oc3BlY2lmaWNUcmFjay5wdHIoKSkpOworICAgICAgICB0
cmFjayA9IG1ha2VSZWZQdHIoc3RhdGljX2Nhc3Q8VHJhY2tQcml2YXRlQmFzZSo+KHNwZWNpZmlj
VHJhY2sucHRyKCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgTWVkaWFTb3Vy
Y2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpWaWRlbzogewotICAgICAgICBhdXRvIHNwZWNpZmljVHJh
Y2sgPSBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRyKCptX3Bs
YXllclByaXZhdGUpLCBpZCgpLCBzaW5rU2lua1BhZC5nZXQoKSk7CisgICAgY2FzZSBTdHJlYW1U
eXBlOjpWaWRlbzogeworICAgICAgICBhdXRvIHNwZWNpZmljVHJhY2sgPSBWaWRlb1RyYWNrUHJp
dmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRyKG1fcGxheWVyUHJpdmF0ZSksIHRyYWNr
SW5kZXgsIGFwcGVuZFBpcGVsaW5lVHJhY2suYXBwc2lua1BhZCk7CiAgICAgICAgIGdzdHJlYW1l
clRyYWNrID0gc3BlY2lmaWNUcmFjay5wdHIoKTsKLSAgICAgICAgbV90cmFjayA9IG1ha2VSZWZQ
dHIoc3RhdGljX2Nhc3Q8VHJhY2tQcml2YXRlQmFzZSo+KHNwZWNpZmljVHJhY2sucHRyKCkpKTsK
KyAgICAgICAgdHJhY2sgPSBtYWtlUmVmUHRyKHN0YXRpY19jYXN0PFRyYWNrUHJpdmF0ZUJhc2Uq
PihzcGVjaWZpY1RyYWNrLnB0cigpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNl
IE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VGV4dDogewotICAgICAgICBhdXRvIHNw
ZWNpZmljVHJhY2sgPSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUoaWQo
KSwgc2lua1NpbmtQYWQuZ2V0KCkpOworICAgIGNhc2UgU3RyZWFtVHlwZTo6VGV4dDogeworICAg
ICAgICBhdXRvIHNwZWNpZmljVHJhY2sgPSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVy
OjpjcmVhdGUodHJhY2tJbmRleCwgYXBwZW5kUGlwZWxpbmVUcmFjay5hcHBzaW5rUGFkKTsKICAg
ICAgICAgZ3N0cmVhbWVyVHJhY2sgPSBzcGVjaWZpY1RyYWNrLnB0cigpOwotICAgICAgICBtX3Ry
YWNrID0gbWFrZVJlZlB0cihzdGF0aWNfY2FzdDxUcmFja1ByaXZhdGVCYXNlKj4oc3BlY2lmaWNU
cmFjay5wdHIoKSkpOworICAgICAgICB0cmFjayA9IG1ha2VSZWZQdHIoc3RhdGljX2Nhc3Q8VHJh
Y2tQcml2YXRlQmFzZSo+KHNwZWNpZmljVHJhY2sucHRyKCkpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIGNhc2UgTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpJbnZhbGlkOgot
ICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlVuc3VwcG9ydGVk
IHRyYWNrIGNvZGVjOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcy5nZXQoKSk7Ci0gICAgICAgIC8v
IDMuNS43IEluaXRpYWxpemF0aW9uIFNlZ21lbnQgUmVjZWl2ZWQKLSAgICAgICAgLy8gNS4xLiBJ
ZiB0aGUgaW5pdGlhbGl6YXRpb24gc2VnbWVudCBjb250YWlucyB0cmFja3Mgd2l0aCBjb2RlY3Mg
dGhlIHVzZXIgYWdlbnQgZG9lcyBub3Qgc3VwcG9ydCwgdGhlbiBydW4gdGhlCi0gICAgICAgIC8v
IGFwcGVuZCBlcnJvciBhbGdvcml0aG0gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgotCi0gICAgICAg
IC8vIGFwcGVuZFBhcnNpbmdGYWlsZWQoKSB3aWxsIGltbWVkaWF0ZWx5IGNhdXNlIGEgcmVzZXRQ
YXJzZXJTdGF0ZSgpIHdoaWNoIHdpbGwgc3RvcCBkZW11eGluZywgdGhlbiB0aGUKLSAgICAgICAg
Ly8gQXBwZW5kUGlwZWxpbmUgd2lsbCBiZSBkZXN0cm95ZWQuCi0gICAgICAgIG1fc291cmNlQnVm
ZmVyUHJpdmF0ZS5hcHBlbmRQYXJzaW5nRmFpbGVkKCk7Ci0gICAgICAgIHJldHVybjsKICAgICBk
ZWZhdWx0OgotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlBh
ZCBoYXMgdW5rbm93biB0cmFjayB0eXBlLCBpZ25vcmluZzogJSIgR1NUX1BUUl9GT1JNQVQsIGNh
cHMuZ2V0KCkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KLSAgICBnc3RyZWFtZXJUcmFjay0+c2V0SW5pdGlhbENhcHMoR1JlZlB0cihjYXBz
KSk7Ci0KLSAgICBtX2FwcHNpbmtDYXBzID0gV1RGTW92ZShjYXBzKTsKLSAgICBtX3BsYXllclBy
aXZhdGUtPnRyYWNrRGV0ZWN0ZWQoKnRoaXMsIG1fdHJhY2spOworICAgIEFTU0VSVChhcHBlbmRQ
aXBlbGluZVRyYWNrLmNhcHMuZ2V0KCkpOworICAgIGdzdHJlYW1lclRyYWNrLT5zZXRJbml0aWFs
Q2FwcyhhcHBlbmRQaXBlbGluZVRyYWNrLmNhcHMuZ2V0KCkpOworICAgIHJldHVybiB0cmFjay5y
ZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIEFwcGVuZFBpcGVsaW5lOjpkaXNjb25uZWN0RGVt
dXhlclNyY1BhZEZyb21BcHBzaW5rRnJvbUFueVRocmVhZChHc3RQYWQqIGRlbXV4ZXJTcmNQYWQp
Cit2b2lkIEFwcGVuZFBpcGVsaW5lOjpUcmFjazo6aW5pdGlhbGl6ZUVsZW1lbnRzKEFwcGVuZFBp
cGVsaW5lKiBhcHBlbmRQaXBlbGluZSwgR3N0QmluKiBiaW4pCiB7Ci0gICAgLy8gTm90ZTogVGhp
cyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGVpdGhlciBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFk
IChlLmcuIGlmIGEgc3RyYW5nZSBpbml0aWFsaXphdGlvbiBzZWdtZW50IHdpdGgKLSAgICAvLyBp
bmNvbXBhdGlibGUgdHJhY2tzIGlzIGFwcGVuZGVkIGFuZCB0aGUgc3JjcGFkIGRpc2Nvbm5lY3Rl
ZCkgb3IgLS0gbW9yZSB1c3VhbGx5IC0tIGZyb20gdGhlIG1haW4gdGhyZWFkLCB3aGVuCi0gICAg
Ly8gYSBzdGF0ZSBjaGFuZ2UgaXMgbWFkZSB0byBicmluZyB0aGUgZGVtdXhlciBkb3duLiAoU3Rh
dGUgY2hhbmdlIG9wZXJhdGlvbnMgcnVuIGluIHRoZSBtYWluIHRocmVhZC4pCi0gICAgR1NUX0RF
QlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdT
VF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgInBhZC1yZW1vdmVkLWJlZm9yZSIpOwotCi0gICAgLy8g
UmVjb25uZWN0IHRoZSBvdGhlciBwYWQgaWYgaXQncyB0aGUgb25seSByZW1haW5pbmcgYWZ0ZXIg
cmVtb3ZpbmcgdGhpcyBvbmUgYW5kIHdhc24ndCBjb25uZWN0ZWQgeWV0IChoYXMgYSBibGFjayBo
b2xlIHByb2JlKS4KLSAgICBpZiAobV9kZW11eC0+bnVtc3JjcGFkcyA9PSAxKSB7Ci0gICAgICAg
IGF1dG8gcmVtYWluaW5nUGFkID0gR1NUX1BBRChtX2RlbXV4LT5zcmNwYWRzLT5kYXRhKTsKLQot
ICAgICAgICBhdXRvIHByb2JlSWQgPSBHUE9JTlRFUl9UT19VTE9ORyhnX29iamVjdF9nZXRfZGF0
YShHX09CSkVDVChyZW1haW5pbmdQYWQpLCAiYmxhY2tIb2xlUHJvYmVJZCIpKTsKLSAgICAgICAg
aWYgKHJlbWFpbmluZ1BhZCAmJiBwcm9iZUlkKSB7Ci0gICAgICAgICAgICBhdXRvIG9sZFBlZXJQ
YWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9hcHBzaW5rLmdldCgp
LCAic2luayIpKTsKLSAgICAgICAgICAgIHdoaWxlIChnc3RfcGFkX2lzX2xpbmtlZChvbGRQZWVy
UGFkLmdldCgpKSkgewotICAgICAgICAgICAgICAgIC8vIEdldCBzaW5rIHBhZCBvZiB0aGUgcGFy
c2VyIGJlZm9yZSBhcHBzaW5rLgotICAgICAgICAgICAgICAgIC8vIEFsbCB0aGUgZXhwZWN0ZWQg
ZWxlbWVudHMgYmV0d2VlbiB0aGUgZGVtdXhlciBhbmQgYXBwc2luayBhcmUgc3VwcG9zZWQgdG8g
aGF2ZSBwYWRzIG5hbWVkICJzaW5rIi4KLSAgICAgICAgICAgICAgICBvbGRQZWVyUGFkID0gYWRv
cHRHUmVmKGdzdF9wYWRfZ2V0X3BlZXIob2xkUGVlclBhZC5nZXQoKSkpOwotICAgICAgICAgICAg
ICAgIGF1dG8gZWxlbWVudCA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudChv
bGRQZWVyUGFkLmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgb2xkUGVlclBhZCA9IGFkb3B0R1Jl
Zihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChlbGVtZW50LmdldCgpLCAic2luayIpKTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQob2xkUGVlclBhZCk7Ci0gICAgICAgICAgICB9CisgICAgYXBw
c2luayA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJhcHBzaW5rIiwgbnVsbHB0cik7CisgICAgZ3N0
X2FwcF9zaW5rX3NldF9lbWl0X3NpZ25hbHMoR1NUX0FQUF9TSU5LKGFwcHNpbmsuZ2V0KCkpLCBU
UlVFKTsKKyAgICBnc3RfYmFzZV9zaW5rX3NldF9zeW5jKEdTVF9CQVNFX1NJTksoYXBwc2luay5n
ZXQoKSksIEZBTFNFKTsKKyAgICBnc3RfYmFzZV9zaW5rX3NldF9hc3luY19lbmFibGVkKEdTVF9C
QVNFX1NJTksoYXBwc2luay5nZXQoKSksIEZBTFNFKTsgLy8gTm8gcHJlcm9sbHMsIG5vIGFzeW5j
IHN0YXRlIGNoYW5nZXMuCisgICAgZ3N0X2Jhc2Vfc2lua19zZXRfZHJvcF9vdXRfb2Zfc2VnbWVu
dChHU1RfQkFTRV9TSU5LKGFwcHNpbmsuZ2V0KCkpLCBGQUxTRSk7CisgICAgZ3N0X2Jhc2Vfc2lu
a19zZXRfbGFzdF9zYW1wbGVfZW5hYmxlZChHU1RfQkFTRV9TSU5LKGFwcHNpbmsuZ2V0KCkpLCBG
QUxTRSk7CiAKLSAgICAgICAgICAgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlKHJlbWFpbmluZ1BhZCwg
cHJvYmVJZCk7CisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTihhcHBlbmRQaXBlbGluZS0+cGlwZWxp
bmUoKSksIGFwcHNpbmsuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9w
YXJlbnQoYXBwc2luay5nZXQoKSk7CisgICAgZW50cnlQYWQgPSBhcHBzaW5rUGFkID0gYWRvcHRH
UmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGFwcHNpbmsuZ2V0KCksICJzaW5rIikpOwog
Ci0gICAgICAgICAgICBhdXRvIG9sZFBlZXJQYWRDYXBzID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0
X2N1cnJlbnRfY2FwcyhvbGRQZWVyUGFkLmdldCgpKSk7Ci0gICAgICAgICAgICBhdXRvIHJlbWFp
bmluZ1BhZENhcHMgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKHJlbWFpbmlu
Z1BhZCkpOwotICAgICAgICAgICAgY29uc3QgY2hhciogb2xkUGVlclBhZFR5cGUgPSBudWxscHRy
OwotICAgICAgICAgICAgY29uc3QgY2hhciogcmVtYWluaW5nUGFkVHlwZSA9IG51bGxwdHI7Cisj
aWYgIUxPR19ESVNBQkxFRAorICAgIGFwcHNpbmtEYXRhRW50ZXJpbmdQYWRQcm9iZUluZm9ybWF0
aW9uLmFwcGVuZFBpcGVsaW5lID0gYXBwZW5kUGlwZWxpbmU7CisgICAgYXBwc2lua0RhdGFFbnRl
cmluZ1BhZFByb2JlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24gPSAiYXBwc2luayBkYXRhIGVudGVy
aW5nIjsKKyAgICBhcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5wcm9iZUlk
ID0gZ3N0X3BhZF9hZGRfcHJvYmUoYXBwc2lua1BhZC5nZXQoKSwgR1NUX1BBRF9QUk9CRV9UWVBF
X0JVRkZFUiwgcmVpbnRlcnByZXRfY2FzdDxHc3RQYWRQcm9iZUNhbGxiYWNrPihhcHBlbmRQaXBl
bGluZVBhZFByb2JlRGVidWdJbmZvcm1hdGlvbiksICZhcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJv
YmVJbmZvcm1hdGlvbiwgbnVsbHB0cik7CisjZW5kaWYKIAotICAgICAgICAgICAgaWYgKG9sZFBl
ZXJQYWRDYXBzKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBvbGRQZWVyUGFkQ2Fwc1N0cnVjdHVy
ZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUob2xkUGVlclBhZENhcHMuZ2V0KCksIDApOwotICAg
ICAgICAgICAgICAgIGlmIChvbGRQZWVyUGFkQ2Fwc1N0cnVjdHVyZSkKLSAgICAgICAgICAgICAg
ICAgICAgb2xkUGVlclBhZFR5cGUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lKG9sZFBlZXJQYWRD
YXBzU3RydWN0dXJlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyZW1haW5pbmdQ
YWRDYXBzKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZW1haW5pbmdQYWRDYXBzU3RydWN0dXJl
ID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShyZW1haW5pbmdQYWRDYXBzLmdldCgpLCAwKTsKLSAg
ICAgICAgICAgICAgICBpZiAocmVtYWluaW5nUGFkQ2Fwc1N0cnVjdHVyZSkKLSAgICAgICAgICAg
ICAgICAgICAgcmVtYWluaW5nUGFkVHlwZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUocmVtYWlu
aW5nUGFkQ2Fwc1N0cnVjdHVyZSk7Ci0gICAgICAgICAgICB9CisjaWYgRU5BQkxFKEVOQ1JZUFRF
RF9NRURJQSkKKyAgICBhcHBzaW5rUGFkRXZlbnRQcm9iZUluZm9ybWF0aW9uLmFwcGVuZFBpcGVs
aW5lID0gYXBwZW5kUGlwZWxpbmU7CisgICAgYXBwc2lua1BhZEV2ZW50UHJvYmVJbmZvcm1hdGlv
bi5kZXNjcmlwdGlvbiA9ICJhcHBzaW5rIGV2ZW50IHByb2JlIjsKKyAgICBhcHBzaW5rUGFkRXZl
bnRQcm9iZUluZm9ybWF0aW9uLnByb2JlSWQgPSBnc3RfcGFkX2FkZF9wcm9iZShhcHBzaW5rUGFk
LmdldCgpLCBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTSwgcmVpbnRlcnByZXRf
Y2FzdDxHc3RQYWRQcm9iZUNhbGxiYWNrPihhcHBlbmRQaXBlbGluZUFwcHNpbmtQYWRFdmVudFBy
b2JlKSwgJmFwcHNpbmtQYWRFdmVudFByb2JlSW5mb3JtYXRpb24sIG51bGxwdHIpOworI2VuZGlm
CiAKLSAgICAgICAgICAgIGlmIChnX3N0cmNtcDAob2xkUGVlclBhZFR5cGUsIHJlbWFpbmluZ1Bh
ZFR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgR1NUX0VSUk9SKCJUaGUgcmVtYWluaW5nIHBhZCBo
YXMgYSBibGFja0hvbGVQcm9iZSwgYnV0IGNhbid0IHJlY29ubmVjdCBhcyBtYWluIHBhZCBiZWNh
dXNlIHRoZSBjYXBzIHR5cGVzIGFyZSBpbmNvbXBhdGlibGU6IG9sZFBlZXJQYWRDYXBzOiAlIiBH
U1RfUFRSX0ZPUk1BVCAiLCByZW1haW5pbmdQYWRDYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgb2xk
UGVlclBhZENhcHMuZ2V0KCksIHJlbWFpbmluZ1BhZENhcHMuZ2V0KCkpOwotICAgICAgICAgICAg
ICAgIGlmICghaXNNYWluVGhyZWFkKCkpCi0gICAgICAgICAgICAgICAgICAgIGhhbmRsZUVycm9y
Q29uZGl0aW9uRnJvbVN0cmVhbWluZ1RocmVhZCgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgbV9zb3VyY2VCdWZmZXJQcml2YXRlLmFwcGVuZFBhcnNpbmdGYWls
ZWQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgLy8gU29t
ZSBhdWRpbyBmaWxlcyB1bmhlbHBmdWxseSBvbWl0IHRoZSBkdXJhdGlvbiBvZiBmcmFtZXMgaW4g
dGhlIGNvbnRhaW5lci4gV2UgbmVlZCB0byBwYXJzZQorICAgIC8vIHRoZSBjb250YWluZWQgYXVk
aW8gc3RyZWFtcyBpbiBvcmRlciB0byBrbm93IHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWVzLgor
ICAgIC8vIFRoaXMgaXMga25vd24gdG8gYmUgYW4gaXNzdWUgd2l0aCBZb3VUdWJlIFdlYk0gZmls
ZXMgY29udGFpbmluZyBPcHVzIGF1ZGlvIGFzIG9mIFlUVFYyMDE4LgorICAgIGlmICgocGFyc2Vy
ID0gY3JlYXRlT3B0aW9uYWxQYXJzZXJGb3JGb3JtYXQodHJhY2tJZCwgY2Fwcy5nZXQoKSkpKSB7
CisgICAgICAgIGdzdF9iaW5fYWRkKGJpbiwgcGFyc2VyLmdldCgpKTsKKyAgICAgICAgZ3N0X2Vs
ZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChwYXJzZXIuZ2V0KCkpOworICAgICAgICBnc3Rf
ZWxlbWVudF9saW5rKHBhcnNlci5nZXQoKSwgYXBwc2luay5nZXQoKSk7CisgICAgICAgIEFTU0VS
VChHU1RfUEFEX0lTX0xJTktFRChhcHBzaW5rUGFkLmdldCgpKSk7CisgICAgICAgIGVudHJ5UGFk
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHBhcnNlci5nZXQoKSwgInNp
bmsiKSk7CisgICAgfQorfQogCi0gICAgICAgICAgICBHU1RfREVCVUcoIlRoZSByZW1haW5pbmcg
cGFkIGhhcyBhIGJsYWNrSG9sZVByb2JlLCByZWNvbm5lY3RpbmcgYXMgbWFpbiBwYWQuIG9sZFBh
ZDogJSIgR1NUX1BUUl9GT1JNQVQgIiwgbmV3UGFkOiAlIiBHU1RfUFRSX0ZPUk1BVCAiLCBwZWVy
UGFkOiAlIiBHU1RfUFRSX0ZPUk1BVCwgZGVtdXhlclNyY1BhZCwgcmVtYWluaW5nUGFkLCBvbGRQ
ZWVyUGFkLmdldCgpKTsKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6Omhvb2tUcmFja0V2ZW50cyhUcmFj
ayYgdHJhY2spCit7CisgICAgZ19zaWduYWxfY29ubmVjdCh0cmFjay5hcHBzaW5rLmdldCgpLCAi
bmV3LXNhbXBsZSIsIEdfQ0FMTEJBQ0soK1tdKEdzdEVsZW1lbnQqIGFwcHNpbmssIEFwcGVuZFBp
cGVsaW5lKiBhcHBlbmRQaXBlbGluZSkgLT4gR3N0Rmxvd1JldHVybiB7CisgICAgICAgIGFwcGVu
ZFBpcGVsaW5lLT5oYW5kbGVBcHBzaW5rTmV3U2FtcGxlRnJvbVN0cmVhbWluZ1RocmVhZChhcHBz
aW5rKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0pLCB0aGlzKTsKIAotICAg
ICAgICAgICAgZ3N0X3BhZF9saW5rKHJlbWFpbmluZ1BhZCwgb2xkUGVlclBhZC5nZXQoKSk7Ci0g
ICAgICAgICAgICBpZiAobV9wYXJzZXIpCi0gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0
X3N0YXRlKG1fcGFyc2VyLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgICAgICAgICBnc3Rf
ZWxlbWVudF9zZXRfc3RhdGUobV9hcHBzaW5rLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAg
ICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9hcHBzaW5rLmdldCgpLCBHU1RfU1RBVEVf
UExBWUlORyk7Ci0gICAgICAgICAgICBpZiAobV9wYXJzZXIpCi0gICAgICAgICAgICAgICAgZ3N0
X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGFyc2VyLmdldCgpLCBHU1RfU1RBVEVfUExBWUlORyk7Cisg
ICAgc3RydWN0IENsb3N1cmUgeworICAgIHB1YmxpYzoKIAotICAgICAgICAgICAgR1NUX0RFQlVH
X0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9E
RUJVR19HUkFQSF9TSE9XX0FMTCwgIndlYmtpdC1hZnRlci1yZWxpbmsiKTsKKyAgICAgICAgQ2xv
c3VyZShBcHBlbmRQaXBlbGluZSYgYXBwZW5kUGlwZWxpbmUsIFRyYWNrJiB0cmFjaykKKyAgICAg
ICAgICAgIDogYXBwZW5kUGlwZWxpbmUoYXBwZW5kUGlwZWxpbmUpCisgICAgICAgICAgICAsIHRy
YWNrKHRyYWNrKQorICAgICAgICB7IH0KKyAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJ1Y3Qodm9p
ZCogY2xvc3VyZSwgR0Nsb3N1cmUqKSB7IGRlbGV0ZSBzdGF0aWNfY2FzdDxDbG9zdXJlKj4oY2xv
c3VyZSk7IH0KIAorICAgICAgICBBcHBlbmRQaXBlbGluZSYgYXBwZW5kUGlwZWxpbmU7CisgICAg
ICAgIFRyYWNrJiB0cmFjazsKKyAgICB9OworCisgICAgZ19zaWduYWxfY29ubmVjdF9kYXRhKHRy
YWNrLmFwcHNpbmtQYWQuZ2V0KCksICJub3RpZnk6OmNhcHMiLCBHX0NBTExCQUNLKCtbXShHT2Jq
ZWN0KiwgR1BhcmFtU3BlYyosIENsb3N1cmUqIGNsb3N1cmUpIHsKKyAgICAgICAgQXBwZW5kUGlw
ZWxpbmUmIGFwcGVuZFBpcGVsaW5lID0gY2xvc3VyZS0+YXBwZW5kUGlwZWxpbmU7CisgICAgICAg
IFRyYWNrJiB0cmFjayA9IGNsb3N1cmUtPnRyYWNrOworICAgICAgICBpZiAoaXNNYWluVGhyZWFk
KCkpIHsKKyAgICAgICAgICAgIC8vIFdoZW4gY2hhbmdpbmcgdGhlIHBpcGVsaW5lIHN0YXRlIGRv
d24gdG8gUkVBRFkgdGhlIGRlbXV4ZXIgaXMgdW5saW5rZWQgYW5kIHRoaXMgdHJpZ2dlcnMgYSBj
YXBzIG5vdGlmaWNhdGlvbgorICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUgYXBwc2luayBsb3Nl
cyBpdHMgcHJldmlvdXNseSBuZWdvdGlhdGVkIGNhcHMuIFdlIGFyZSBub3QgaW50ZXJlc3RlZCBp
biB0aGVzZSB1bm5lZ290aWF0ZWQgY2Fwcy4KKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICBH
UmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFk
KHRyYWNrLmFwcHNpbmsuZ2V0KCksICJzaW5rIikpOworICAgICAgICAgICAgR1JlZlB0cjxHc3RD
YXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyhwYWQuZ2V0KCkp
KTsKKyAgICAgICAgICAgIEFTU0VSVCghY2Fwcyk7CisjZW5kaWYKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgIH0KIAotICAgIEdTVF9ERUJVRygiRGlzY29ubmVjdGluZyBhcHBz
aW5rIik7CisgICAgICAgIC8vIFRoZSBzdHJlYW1pbmcgdGhyZWFkIGhhcyBqdXN0IHJlY2VpdmVk
IGEgbmV3IGNhcHMgYW5kIGlzIGFib3V0IHRvIGxldCBzYW1wbGVzIHVzaW5nIHRoZQorICAgICAg
ICAvLyBuZXcgY2FwcyBmbG93LiBMZXQncyBibG9jayBpdCB1bnRpbCB0aGUgbWFpbiB0aHJlYWQg
aGFzIGNvbnN1bWVkIHRoZSBzYW1wbGVzIHdpdGggdGhlIG9sZAorICAgICAgICAvLyBjYXBzIGFu
ZCBoYXMgcHJvY2Vzc2VkIHRoZSBjYXBzIGNoYW5nZS4KKyAgICAgICAgYXBwZW5kUGlwZWxpbmUu
bV90YXNrUXVldWUuZW5xdWV1ZVRhc2tBbmRXYWl0PEFib3J0YWJsZVRhc2tRdWV1ZTo6Vm9pZD4o
WyZhcHBlbmRQaXBlbGluZSwgJnRyYWNrXSgpIHsKKyAgICAgICAgICAgIGFwcGVuZFBpcGVsaW5l
LmFwcHNpbmtDYXBzQ2hhbmdlZCh0cmFjayk7CisgICAgICAgICAgICByZXR1cm4gQWJvcnRhYmxl
VGFza1F1ZXVlOjpWb2lkKCk7CisgICAgICAgIH0pOworICAgIH0pLCBuZXcgQ2xvc3VyZSB7ICp0
aGlzLCB0cmFjayB9LCBDbG9zdXJlOjpkZXN0cnVjdCwgc3RhdGljX2Nhc3Q8R0Nvbm5lY3RGbGFn
cz4oMCkpOworfQogCi0gICAgaWYgKG1fcGFyc2VyKSB7Ci0gICAgICAgIGFzc2VydGVkRWxlbWVu
dFNldFN0YXRlKG1fcGFyc2VyLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgICAgIGdzdF9i
aW5fcmVtb3ZlKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIG1fcGFyc2VyLmdldCgpKTsKLSAg
ICAgICAgbV9wYXJzZXIgPSBudWxscHRyOworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcK
K2NvbnN0IGNoYXIqIEFwcGVuZFBpcGVsaW5lOjpzdHJlYW1UeXBlVG9TdHJpbmcoU3RyZWFtVHlw
ZSBzdHJlYW1UeXBlKQoreworICAgIHN3aXRjaCAoc3RyZWFtVHlwZSkgeworICAgIGNhc2UgU3Ry
ZWFtVHlwZTo6QXVkaW86CisgICAgICAgIHJldHVybiAiQXVkaW8iOworICAgIGNhc2UgU3RyZWFt
VHlwZTo6VmlkZW86CisgICAgICAgIHJldHVybiAiVmlkZW8iOworICAgIGNhc2UgU3RyZWFtVHlw
ZTo6VGV4dDoKKyAgICAgICAgcmV0dXJuICJUZXh0IjsKKyAgICBjYXNlIFN0cmVhbVR5cGU6Oklu
dmFsaWQ6CisgICAgICAgIHJldHVybiAiSW52YWxpZCI7CisgICAgY2FzZSBTdHJlYW1UeXBlOjpV
bmtub3duOgorICAgICAgICByZXR1cm4gIlVua25vd24iOwogICAgIH0KLQotICAgIEdTVF9ERUJV
R19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1Rf
REVCVUdfR1JBUEhfU0hPV19BTEwsICJwYWQtcmVtb3ZlZC1hZnRlciIpOwogfQorI2VuZGlmCiAK
ICNpZiAhTE9HX0RJU0FCTEVECiBzdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4gYXBwZW5kUGlwZWxp
bmVQYWRQcm9iZURlYnVnSW5mb3JtYXRpb24oR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiBpbmZv
LCBzdHJ1Y3QgUGFkUHJvYmVJbmZvcm1hdGlvbiogcGFkUHJvYmVJbmZvcm1hdGlvbikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBw
ZW5kUGlwZWxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9tc2UvQXBwZW5kUGlwZWxpbmUuaAppbmRleCA2ODczZmI3NTY2MWY0NzQxZjEzYmMxMGIxOTY2
MzgzMWUxNDVhZTQzLi4zOGQ3MzgwMTNkZjQxZDE2OTkxZmQ1ZTI1OGE3ZGU4OTMxMWQ5YWU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNl
L0FwcGVuZFBpcGVsaW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5oCkBAIC01Miw0NiArNTIsODIgQEAgcHVibGlj
OgogICAgIHZvaWQgcHVzaE5ld0J1ZmZlcihHUmVmUHRyPEdzdEJ1ZmZlcj4mJik7CiAgICAgdm9p
ZCByZXNldFBhcnNlclN0YXRlKCk7CiAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lciYg
c291cmNlQnVmZmVyUHJpdmF0ZSgpIHsgcmV0dXJuIG1fc291cmNlQnVmZmVyUHJpdmF0ZTsgfQot
ICAgIEdzdENhcHMqIGFwcHNpbmtDYXBzKCkgeyByZXR1cm4gbV9hcHBzaW5rQ2Fwcy5nZXQoKTsg
fQotICAgIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiB0cmFjaygpIHsgcmV0dXJu
IG1fdHJhY2s7IH0KICAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UqIHBsYXllclBy
aXZhdGUoKSB7IHJldHVybiBtX3BsYXllclByaXZhdGU7IH0KIAogcHJpdmF0ZToKICAgICAvLyBT
aW1pbGFyIHRvIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZSwgYnV0IHdpdGgg
YSBuZXcgdmFsdWUgKEludmFsaWQpIGZvciB3aGVuIHRoZSBjb2RlYyBpcwogICAgIC8vIG5vdCBz
dXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0sIHdoaWNoIHNob3VsZCByZXN1bHQgaW4gUGFyc2luZ0Zh
aWxlZCBlcnJvciBiZWluZyB0aHJvd24gaW4gU291cmNlQnVmZmVyLgotICAgIGVudW0gTWVkaWFT
b3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyIHsgQXVkaW8sIFZpZGVvLCBUZXh0LCBVbmtub3duLCBJ
bnZhbGlkIH07CisgICAgZW51bSBTdHJlYW1UeXBlIHsgQXVkaW8sIFZpZGVvLCBUZXh0LCBVbmtu
b3duLCBJbnZhbGlkIH07CisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgIHN0YXRp
YyBjb25zdCBjaGFyICogc3RyZWFtVHlwZVRvU3RyaW5nKFN0cmVhbVR5cGUpOworI2VuZGlmCisK
KyAgICBzdHJ1Y3QgVHJhY2sgeworICAgICAgICAvLyBUcmFjayBvYmplY3RzIGFyZSBjcmVhdGVk
IG9uIHBhZC1hZGRlZCBmb3IgdGhlIGZpcnN0IGluaXRpYWxpemF0aW9uIHNlZ21lbnQsIGFuZCBk
ZXN0cm95ZWQgYWZ0ZXIKKyAgICAgICAgLy8gdGhlIHBpcGVsaW5lIHN0YXRlIGhhcyBiZWVuIHNl
dCB0byBHU1RfU1RBVEVfTlVMTC4KKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVHJhY2sp
OworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisKKyAgICAg
ICAgVHJhY2soY29uc3QgQXRvbVN0cmluZyYgdHJhY2tJZCwgU3RyZWFtVHlwZSBzdHJlYW1UeXBl
LCBjb25zdCBHUmVmUHRyPEdzdENhcHM+JiBjYXBzLCBjb25zdCBGbG9hdFNpemUmIHByZXNlbnRh
dGlvblNpemUpCisgICAgICAgICAgICA6IHRyYWNrSWQodHJhY2tJZCkKKyAgICAgICAgICAgICwg
c3RyZWFtVHlwZShzdHJlYW1UeXBlKQorICAgICAgICAgICAgLCBjYXBzKGNhcHMpCisgICAgICAg
ICAgICAsIHByZXNlbnRhdGlvblNpemUocHJlc2VudGF0aW9uU2l6ZSkKKyAgICAgICAgeyB9CisK
KyAgICAgICAgQXRvbVN0cmluZyB0cmFja0lkOworICAgICAgICBTdHJlYW1UeXBlIHN0cmVhbVR5
cGU7CisgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwczsKKyAgICAgICAgRmxvYXRTaXplIHBy
ZXNlbnRhdGlvblNpemU7CisKKyAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IGVudHJ5UGFkOyAvLyBT
aW5rIHBhZCBvZiB0aGUgcGFyc2VyIChpZiBhbnkpIG9yIHRoZSBhcHBzaW5rLgorICAgICAgICBH
UmVmUHRyPEdzdEVsZW1lbnQ+IHBhcnNlcjsgLy8gT3B0aW9uYWwgKG5lZWRlZCBieSBzb21lIGZv
cm1hdHMpLgorICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGFwcHNpbms7CisgICAgICAgIEdS
ZWZQdHI8R3N0UGFkPiBhcHBzaW5rUGFkOworCisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUcmFj
a1ByaXZhdGVCYXNlPiB3ZWJLaXRUcmFjazsKKworI2lmICFMT0dfRElTQUJMRUQKKyAgICAgICAg
c3RydWN0IFBhZFByb2JlSW5mb3JtYXRpb24gYXBwc2lua0RhdGFFbnRlcmluZ1BhZFByb2JlSW5m
b3JtYXRpb247CisjZW5kaWYKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorICAgICAgICBz
dHJ1Y3QgUGFkUHJvYmVJbmZvcm1hdGlvbiBhcHBzaW5rUGFkRXZlbnRQcm9iZUluZm9ybWF0aW9u
OworI2VuZGlmCisKKyAgICAgICAgdm9pZCBpbml0aWFsaXplRWxlbWVudHMoQXBwZW5kUGlwZWxp
bmUqLCBHc3RCaW4qKTsKKyAgICB9OwogCiAgICAgdm9pZCBoYW5kbGVFcnJvclN5bmNNZXNzYWdl
KEdzdE1lc3NhZ2UqKTsKICAgICB2b2lkIGhhbmRsZU5lZWRDb250ZXh0U3luY01lc3NhZ2UoR3N0
TWVzc2FnZSopOwogICAgIC8vIEZvciBkZWJ1ZyBwdXJwb3NlcyBvbmx5OgogICAgIHZvaWQgaGFu
ZGxlU3RhdGVDaGFuZ2VNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKIAotICAgIGdpbnQgaWQoKTsKLQog
ICAgIHZvaWQgaGFuZGxlQXBwc2lua05ld1NhbXBsZUZyb21TdHJlYW1pbmdUaHJlYWQoR3N0RWxl
bWVudCopOworICAgIHZvaWQgaGFuZGxlRXJyb3JDb25kaXRpb24oKTsKICAgICB2b2lkIGhhbmRs
ZUVycm9yQ29uZGl0aW9uRnJvbVN0cmVhbWluZ1RocmVhZCgpOwogCi0gICAgLy8gVGFrZXMgb3du
ZXJzaGlwIG9mIGNhcHMuCi0gICAgdm9pZCBwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKEdzdENhcHMq
KTsKLSAgICB2b2lkIGFwcHNpbmtDYXBzQ2hhbmdlZCgpOwotICAgIHZvaWQgYXBwc2lua05ld1Nh
bXBsZShHUmVmUHRyPEdzdFNhbXBsZT4mJik7CisgICAgdm9pZCBob29rVHJhY2tFdmVudHMoVHJh
Y2smKTsKKyAgICBzdGF0aWMgc3RkOjp0dXBsZTxHUmVmUHRyPEdzdENhcHM+LCBBcHBlbmRQaXBl
bGluZTo6U3RyZWFtVHlwZSwgRmxvYXRTaXplPiBwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKEdzdENh
cHMqKTsKKyAgICBSZWY8V2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZT4gbWFrZVdlYktpdFRyYWNr
KGludCB0cmFja0luZGV4KTsKKyAgICB2b2lkIGFwcHNpbmtDYXBzQ2hhbmdlZChUcmFjayYpOwor
ICAgIHZvaWQgYXBwc2lua05ld1NhbXBsZShjb25zdCBUcmFjayYsIEdSZWZQdHI8R3N0U2FtcGxl
PiYmKTsKICAgICB2b2lkIGhhbmRsZUVuZE9mQXBwZW5kKCk7CiAgICAgdm9pZCBkaWRSZWNlaXZl
SW5pdGlhbGl6YXRpb25TZWdtZW50KCk7Ci0gICAgQXRvbVN0cmluZyB0cmFja0lkKCk7CiAKICAg
ICBHc3RCdXMqIGJ1cygpIHsgcmV0dXJuIG1fYnVzLmdldCgpOyB9CiAgICAgR3N0RWxlbWVudCog
cGlwZWxpbmUoKSB7IHJldHVybiBtX3BpcGVsaW5lLmdldCgpOyB9CiAgICAgR3N0RWxlbWVudCog
YXBwc3JjKCkgeyByZXR1cm4gbV9hcHBzcmMuZ2V0KCk7IH0KLSAgICBHc3RFbGVtZW50KiBhcHBz
aW5rKCkgeyByZXR1cm4gbV9hcHBzaW5rLmdldCgpOyB9Ci0gICAgR3N0Q2FwcyogZGVtdXhlclNy
Y1BhZENhcHMoKSB7IHJldHVybiBtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpOyB9CiAKLSAgICB2
b2lkIGRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNpbmtGcm9tQW55VGhyZWFkKEdzdFBh
ZCopOwotICAgIHZvaWQgY29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmtGcm9tU3RyZWFtaW5n
VGhyZWFkKEdzdFBhZCopOwotICAgIHZvaWQgY29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmso
R3N0UGFkKik7CisgICAgc3RhdGljIEF0b21TdHJpbmcgZ2VuZXJhdGVUcmFja0lkKFN0cmVhbVR5
cGUsIGludCBwYWRJbmRleCk7CisgICAgZW51bSBjbGFzcyBDcmVhdGVUcmFja1Jlc3VsdCB7IFRy
YWNrQ3JlYXRlZCwgVHJhY2tJZ25vcmVkLCBBcHBlbmRQYXJzaW5nRmFpbGVkIH07CisgICAgc3Rk
OjpwYWlyPENyZWF0ZVRyYWNrUmVzdWx0LCBBcHBlbmRQaXBlbGluZTo6VHJhY2sqPiB0cnlDcmVh
dGVUcmFja0Zyb21QYWQoR3N0UGFkKiBkZW11eGVyU3JjUGFkLCBpbnQgcGFkSW5kZXgpOworICAg
IEFwcGVuZFBpcGVsaW5lOjpUcmFjayogdHJ5TWF0Y2hQYWRUb0V4aXN0aW5nVHJhY2soR3N0UGFk
KiBkZW11eGVyU3JjUGFkKTsKKyAgICB2b2lkIGxpbmtQYWRXaXRoVHJhY2soR3N0UGFkKiBkZW11
eGVyU3JjUGFkLCBUcmFjayYpOwogCiAgICAgdm9pZCByZXNldFBpcGVsaW5lKCk7CiAKLSAgICB2
b2lkIGNvbnN1bWVBcHBzaW5rQXZhaWxhYmxlU2FtcGxlcygpOworICAgIHZvaWQgY29uc3VtZUFw
cHNpbmtzQXZhaWxhYmxlU2FtcGxlcygpOwogCiAgICAgR3N0UGFkUHJvYmVSZXR1cm4gYXBwc3Jj
RW5kT2ZBcHBlbmRDaGVja2VyUHJvYmUoR3N0UGFkUHJvYmVJbmZvKik7CiAKQEAgLTEwNSwyNCAr
MTQxLDIwIEBAIHByaXZhdGU6CiAgICAgLy8gT25seSB0aGUgcG9pbnRlcnMgYXJlIGNvbXBhcmVk
LgogICAgIFdURjo6VGhyZWFkKiBtX3N0cmVhbWluZ1RocmVhZDsKIAorICAgIGJvb2wgbV9oYXNS
ZWNlaXZlZEZpcnN0SW5pdGlhbGl6YXRpb25TZWdtZW50IHsgZmFsc2UgfTsKICAgICAvLyBVc2Vk
IG9ubHkgZm9yIGFzc2VydGluZyBFT1MgZXZlbnRzIGFyZSBvbmx5IGNhdXNlZCBieSBkZW11eGlu
ZyBlcnJvcnMuCiAgICAgYm9vbCBtX2Vycm9yUmVjZWl2ZWQgeyBmYWxzZSB9OwogCiAgICAgU291
cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lciYgbV9zb3VyY2VCdWZmZXJQcml2YXRlOwogICAgIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSogbV9wbGF5ZXJQcml2YXRlOwogCi0gICAgLy8g
KG1fbWVkaWFUeXBlLCBtX2lkKSBpcyB1bmlxdWUuCi0gICAgZ2ludCBtX2lkOwotCiAgICAgTWVk
aWFUaW1lIG1faW5pdGlhbER1cmF0aW9uOwotCisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2Fw
cHNyYzsKICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fcGlwZWxpbmU7CiAgICAgR1JlZlB0cjxH
c3RCdXM+IG1fYnVzOwotICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9hcHBzcmM7CiAgICAgR1Jl
ZlB0cjxHc3RFbGVtZW50PiBtX2RlbXV4OwotICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9wYXJz
ZXI7IC8vIE9wdGlvbmFsLgotICAgIC8vIFRoZSBkZW11eGVyIGhhcyBvbmUgc3JjIHN0cmVhbSBv
bmx5LCBzbyBvbmx5IG9uZSBhcHBzaW5rIGlzIG5lZWRlZCBhbmQgbGlua2VkIHRvIGl0LgotICAg
IEdSZWZQdHI8R3N0RWxlbWVudD4gbV9hcHBzaW5rOworCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxUcmFjaz4+IG1fdHJhY2tzOwogCiAgICAgLy8gVXNlZCB0byBhdm9pZCB1bm5lY2Vzc2Fy
eSBub3RpZmljYXRpb25zIHBlciBzYW1wbGUuCiAgICAgLy8gSXQgaXMgcmVhZCBhbmQgd3JpdHRl
biBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkIGFuZCB3cml0dGVuIGZyb20gdGhlIG1haW4gdGhy
ZWFkLgpAQCAtMTMxLDI1ICsxNjMsMTEgQEAgcHJpdmF0ZToKICAgICAvLyBxdWV1ZSwgaW5zdGVh
ZCBvZiBpdCBncm93aW5nIHVuYm91bmRlZC4KICAgICBzdGQ6OmF0b21pY19mbGFnIG1fd2FzQnVz
QWxyZWFkeU5vdGlmaWVkT2ZBdmFpbGFibGVTYW1wbGVzOwogCi0gICAgR1JlZlB0cjxHc3RDYXBz
PiBtX2FwcHNpbmtDYXBzOwotICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9kZW11eGVyU3JjUGFkQ2Fw
czsKLSAgICBGbG9hdFNpemUgbV9wcmVzZW50YXRpb25TaXplOwotCiAjaWYgIUxPR19ESVNBQkxF
RAogICAgIHN0cnVjdCBQYWRQcm9iZUluZm9ybWF0aW9uIG1fZGVtdXhlckRhdGFFbnRlcmluZ1Bh
ZFByb2JlSW5mb3JtYXRpb247Ci0gICAgc3RydWN0IFBhZFByb2JlSW5mb3JtYXRpb24gbV9hcHBz
aW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbjsKLSNlbmRpZgotCi0jaWYgRU5BQkxF
KEVOQ1JZUFRFRF9NRURJQSkKLSAgICBzdHJ1Y3QgUGFkUHJvYmVJbmZvcm1hdGlvbiBtX2FwcHNp
bmtQYWRFdmVudFByb2JlSW5mb3JtYXRpb247CiAjZW5kaWYKIAotICAgIE1lZGlhU291cmNlU3Ry
ZWFtVHlwZUdTdHJlYW1lciBtX3N0cmVhbVR5cGU7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRyYWNr
UHJpdmF0ZUJhc2U+IG1fdHJhY2s7Ci0KICAgICBBYm9ydGFibGVUYXNrUXVldWUgbV90YXNrUXVl
dWU7Ci0KLSAgICBHUmVmUHRyPEdzdEJ1ZmZlcj4gbV9wZW5kaW5nQnVmZmVyOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcAppbmRleCA0ZWVjMDllMjJkMTdkYzM1MmUyNTA1
MDkxNDAxZmI2ZTI2NmQ3OTQ0Li44MzFjMmIyYzZlZmIyMjQ3NTliNDNiZmU2N2ZiNzNiMTRmZTBh
NjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0UuY3BwCkBAIC0zMzEsMjUgKzMzMSwyMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRTo6ZHVyYXRpb25DaGFuZ2VkKCkKICAgICB9CiB9CiAKLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp0cmFja0RldGVjdGVkKEFwcGVuZFBpcGVsaW5l
JiBhcHBlbmRQaXBlbGluZSwgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+IG5ld1Ry
YWNrKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNldEluaXRpYWxWaWRl
b1NpemUoY29uc3QgRmxvYXRTaXplJiB2aWRlb1NpemUpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLSAgICBBU1NFUlQoYXBwZW5kUGlwZWxpbmUudHJhY2soKSA9PSBuZXdUcmFjayk7
Ci0KLSAgICBHc3RDYXBzKiBjYXBzID0gYXBwZW5kUGlwZWxpbmUuYXBwc2lua0NhcHMoKTsKLSAg
ICBBU1NFUlQoY2Fwcyk7Ci0gICAgR1NUX0RFQlVHKCJEZW11eGVyIHBhcnNlZCBtZXRhZGF0YSB3
aXRoIHRyYWNrIElEOiAlcywgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIG5ld1RyYWNrLT5pZCgp
LnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSwgY2Fwcyk7CiAKICAgICAvLyBXZSBzZXQgdGhlIHNp
emUgb2YgdGhlIHZpZGVvIG9ubHkgZm9yIHRoZSBmaXJzdCBpbml0aWFsaXphdGlvbiBzZWdtZW50
LgogICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWw6IE5vcm1hbGx5IHRoZSB2aWRlbyBzaXplIGRl
cGVuZHMgb24gdGhlIGZyYW1lcyBhcnJpdmluZwogICAgIC8vIGF0IHRoZSBzaW5rIGluIHRoZSBw
bGF5YmFjayBwaXBlbGluZSwgbm90IGluIHRoZSBhcHBlbmQgcGlwZWxpbmU7IGJ1dCB3ZSBzdGls
bAogICAgIC8vIHdhbnQgdG8gcmVwb3J0IGFuIGluaXRpYWwgc2l6ZSBmb3IgSEFWRV9NRVRBREFU
QSAoZmlyc3QgaW5pdGlhbGl6YXRpb24gc2VnbWVudCkuCi0gICAgaWYgKG1fdmlkZW9TaXplLmlz
RW1wdHkoKSAmJiBkb0NhcHNIYXZlVHlwZShjYXBzLCBHU1RfVklERU9fQ0FQU19UWVBFX1BSRUZJ
WCkpIHsKLSAgICAgICAgaWYgKGF1dG8gc2l6ZSA9IGdldFZpZGVvUmVzb2x1dGlvbkZyb21DYXBz
KGNhcHMpKSB7Ci0gICAgICAgICAgICBtX3ZpZGVvU2l6ZSA9ICpzaXplOwotICAgICAgICAgICAg
R1NUX0RFQlVHKCJTZXR0aW5nIGluaXRpYWwgdmlkZW8gc2l6ZTogJWd4JWciLCBtX3ZpZGVvU2l6
ZS53aWR0aCgpLCBtX3ZpZGVvU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIH0KLSAgICB9CisKKyAg
ICBpZiAoIW1fdmlkZW9TaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NU
X0RFQlVHKCJTZXR0aW5nIGluaXRpYWwgdmlkZW8gc2l6ZTogJWd4JWciLCB2aWRlb1NpemUud2lk
dGgoKSwgdmlkZW9TaXplLmhlaWdodCgpKTsKKyAgICBtX3ZpZGVvU2l6ZSA9IHZpZGVvU2l6ZTsK
IH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnN0YXJ0U291cmNlKGNv
bnN0IFZlY3RvcjxSZWZQdHI8TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcj4+JiB0cmFja3MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNl
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0Uu
aAppbmRleCA1ZjIyYTUxZTk1ZmEyZGE0NGUzMjA4YWJiNjZkYzNmZWVkNGQ3ZTYwLi45MjI2NWU4
N2MzOWNlYTE5MTQ0NzAyMTUzMmYyYzgxMjAzYzRhZjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgKQEAgLTcxLDcgKzcxLDcg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0
ZSk7CiAgICAgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KiBtZWRpYVNvdXJjZVByaXZhdGVDbGll
bnQoKSB7IHJldHVybiBtX21lZGlhU291cmNlLmdldCgpOyB9CiAKLSAgICB2b2lkIHRyYWNrRGV0
ZWN0ZWQoQXBwZW5kUGlwZWxpbmUmLCBSZWZQdHI8V2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZT4p
OworICAgIHZvaWQgc2V0SW5pdGlhbFZpZGVvU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKIAogICAg
IHZvaWQgYmxvY2tEdXJhdGlvbkNoYW5nZXMoKTsKICAgICB2b2lkIHVuYmxvY2tEdXJhdGlvbkNo
YW5nZXMoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwppbmRleCA0YzA2M2FlM2U4ZDAyN2IyZmY4ZjVhYTYzZWU1ZGJiYTkzYmYyNDQ5
Li5iZjkzMTI0NjVlMGIwMTYwZDg3MDE2YzM1MzJiY2QwYjQxNDU3MGIwIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTcgQEAKKzIwMjEtMDgtMTIgIEFsaWNpYSBCb3lhIEdhcmPDrWEgIDxhYm95YUBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFtNU0VdW0dTdHJlYW1lcl0gSW1wbGVtZW50IG11bHRpLXRyYWNrIHN1
cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
OTA3MgorCisgICAgICAgIFJldmlld2VkIGJ5IFhhYmllciBSb2RyaWd1ZXotQ2FsdmFyLgorCisg
ICAgICAgIFVwZGF0ZSBleHBlY3RhdGlvbnMgYW5kIHJlYmFzZWxpbmUgb25lIHRlc3QgaXMgd2hp
Y2ggdGhlIGJ1ZmZlcmVkCisgICAgICAgIHJhbmdlcyBoYXZlIGNoYW5nZWQgc2xpZ2h0bHkgZHVl
IHRvIHRoZSBhdWRpbyB0cmFjayBwcmV2aW91c2x5CisgICAgICAgIGRpc2NhcmRlZCBub3cgYmVp
bmcgcGFyc2VkLgorCisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zOgor
ICAgICAgICAqIHBsYXRmb3JtL2dsaWIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9t
ZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtcmVtb3ZlLWV4cGVjdGVkLnR4dDoKKwogMjAyMS0wOC0w
OCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBjYXJl
dC1jb2xvciBkb2VzIG5vdCB3b3JrIG9uIGZpcnN0IGNsaWNrIGluIGlvcwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGFhMTlkNjI5ZTE2YmYyYmE5M2I4
MWUxZjAwYzI1YTRjYzZmMDY0NTIuLjY1YzQ0Mzc5ZGJlMjJmOGE2YTAwZmI3NjA2Mzk5ZDZhNjM4
MzEwNzUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0
aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKQEAg
LTU4MSw3ICs1ODEsNiBAQCB3ZWJraXQub3JnL2IvMjI4ODIwIG1lZGlhL21lZGlhLXNvdXJjZS9t
ZWRpYS13ZWJtLW9wdXMtcGFydGlhbC1hYm9ydC5odG1sIFsgRmFpbAogd2Via2l0Lm9yZy9iLzIy
NDc2NyBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNv
dXJjZS1jaGFuZ2V0eXBlLXBsYXktaW1wbGljaXQuaHRtbCBbIENyYXNoIFBhc3MgXQogCiAjIFNl
ZSBhbHNvIGJ1ZyAjMTc1NTc4Lgotd2Via2l0Lm9yZy9iLzE2NzEwOCBpbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1hY3RpdmVzb3VyY2VidWZm
ZXJzLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xNjcxMDggaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYXZ0cmFja3MuaHRtbCBb
IEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzE2NzEwOCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1idWZmZXJlZC5odG1sIFsgRmFpbHVyZSBd
CiB3ZWJraXQub3JnL2IvMTY3MTA4IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVk
aWEtc291cmNlL21lZGlhc291cmNlLWNoYW5nZXR5cGUuaHRtbCBbIEZhaWx1cmUgQ3Jhc2ggXQpA
QCAtNjEwLDcgKzYwOSw2IEBAIHdlYmtpdC5vcmcvYi8xNTQzOTAgaHR0cC90ZXN0cy9tZWRpYS9o
bHMvaGxzLWF1ZGlvLXRyYWNrcy1sb2NhbGUtc2VsZWN0aW9uLmh0bWwKIAogd2Via2l0Lm9yZy9i
LzE5OTYxNyBodHRwL3Rlc3RzL21lZGlhL2hscy9obHMtdmlkZW8tcmVzaXplLmh0bWwgWyBTa2lw
IF0KIAotd2Via2l0Lm9yZy9iLzIyNzI1OCBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNl
LWhhcy1hdWRpby12aWRlby5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMjI3MjU4IG1l
ZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2Utc2Vlay11bmJ1ZmZlcmVkLmh0bWwgWyBUaW1l
b3V0IF0KIAogd2Via2l0Lm9yZy9iLzIyNzY2MSBodHRwL3Rlc3RzL21lZGlhL2hscy9obHMtd2Vi
dnR0LXNlZWstYmFja3dhcmRzLmh0bWwgWyBUaW1lb3V0IF0KQEAgLTIyMzcsNyArMjIzNSw2IEBA
IHdlYmtpdC5vcmcvYi8xMTMxMjcgbWVkaWEvdHJhY2svdHJhY2stcHJlZmVyLWNhcHRpb25zLmh0
bWwgWyBUaW1lb3V0IF0KIAogd2Via2l0Lm9yZy9iLzE2ODM3MyBodHRwL3Rlc3RzL21lZGlhL3Ry
YWNrLWluLWJhbmQtaGxzLW1ldGFkYXRhLWNyYXNoLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5v
cmcvYi8xNjgzNzMgbWVkaWEvbWVkaWEtZnVsbHNjcmVlbi1sb29wLWlubGluZS5odG1sIFsgVGlt
ZW91dCBdCi13ZWJraXQub3JnL2IvMTY4MzczIG1lZGlhL21lZGlhLXNvdXJjZS9vbmx5LWJjcDQ3
LWxhbmd1YWdlLXRhZ3MtYWNjZXB0ZWQtYXMtdmFsaWQuaHRtbCBbIENyYXNoIFRpbWVvdXQgXQog
d2Via2l0Lm9yZy9iLzE3NDI0MiBtZWRpYS9tZWRpYS1mdWxsc2NyZWVuLXBhdXNlLWlubGluZS5o
dG1sIFsgU2tpcCBdCiB3ZWJraXQub3JnL2IvMTgyMTA4IGh0dHAvdGVzdHMvbWVkaWEvaGxzL2hs
cy13ZWJ2dHQtdHJhY2tzLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8xMzczMTEgbWVk
aWEvdmlkZW8tZnVsbHNjcmVlbi1vbmx5LXBsYXliYWNrLmh0bWwgWyBUaW1lb3V0IENyYXNoIF0K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtcmVtb3ZlLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtcmVtb3ZlLWV4cGVjdGVkLnR4dAppbmRleCA2
ZDVlM2RmZmJjMDU1YTgwNmYzYTI2MTNkMGMxNWRhOTUzYTg1NDAyLi45ZjU4MTI5N2Y4MjNjOWFh
MmEwNzhiZGZjNTY5ZTk2ZmMwMGVmN2E4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9nbGliL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlh
c291cmNlLXJlbW92ZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xp
Yi9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJj
ZS1yZW1vdmUtZXhwZWN0ZWQudHh0CkBAIC0xMSw4ICsxMSw4IEBAIFBBU1MgVGVzdCByZW1vdmUg
d2hpbGUgdXBkYXRlIHBlbmRpbmcuCiBQQVNTIFRlc3QgYWJvcnRpbmcgYSByZW1vdmUgb3BlcmF0
aW9uLgogUEFTUyBUZXN0IHJlbW92ZSB3aXRoIGEgc3RhcnQgYXQgdGhlIGR1cmF0aW9uLgogUEFT
UyBUZXN0IHJlbW92ZSB0cmFuc2l0aW9uaW5nIHJlYWR5U3RhdGUgZnJvbSAnZW5kZWQnIHRvICdv
cGVuJy4KLUZBSUwgVGVzdCByZW1vdmluZyBhbGwgYXBwZW5kZWQgZGF0YS4gYXNzZXJ0X2VxdWFs
czogSW5pdGlhbCBidWZmZXJlZCByYW5nZS4gZXhwZWN0ZWQgInsgWzAuMDk1LCA2LjQyMykgfSIg
YnV0IGdvdCAieyBbMC4wMDAsIDYuNDIzKSB9IgotRkFJTCBUZXN0IHJlbW92aW5nIGJlZ2lubmlu
ZyBvZiBhcHBlbmRlZCBkYXRhLiBhc3NlcnRfZXF1YWxzOiBJbml0aWFsIGJ1ZmZlcmVkIHJhbmdl
LiBleHBlY3RlZCAieyBbMC4wOTUsIDYuNDIzKSB9IiBidXQgZ290ICJ7IFswLjAwMCwgNi40MjMp
IH0iCi1GQUlMIFRlc3QgcmVtb3ZpbmcgdGhlIG1pZGRsZSBvZiBhcHBlbmRlZCBkYXRhLiBhc3Nl
cnRfZXF1YWxzOiBJbml0aWFsIGJ1ZmZlcmVkIHJhbmdlLiBleHBlY3RlZCAieyBbMC4wOTUsIDYu
NDIzKSB9IiBidXQgZ290ICJ7IFswLjAwMCwgNi40MjMpIH0iCi1GQUlMIFRlc3QgcmVtb3Zpbmcg
dGhlIGVuZCBvZiBhcHBlbmRlZCBkYXRhLiBhc3NlcnRfZXF1YWxzOiBJbml0aWFsIGJ1ZmZlcmVk
IHJhbmdlLiBleHBlY3RlZCAieyBbMC4wOTUsIDYuNDIzKSB9IiBidXQgZ290ICJ7IFswLjAwMCwg
Ni40MjMpIH0iCitGQUlMIFRlc3QgcmVtb3ZpbmcgYWxsIGFwcGVuZGVkIGRhdGEuIGFzc2VydF9l
cXVhbHM6IEluaXRpYWwgYnVmZmVyZWQgcmFuZ2UuIGV4cGVjdGVkICJ7IFswLjA5NSwgNi41NDgp
IH0iIGJ1dCBnb3QgInsgWzAuMDAwLCA2LjU0OCkgfSIKK0ZBSUwgVGVzdCByZW1vdmluZyBiZWdp
bm5pbmcgb2YgYXBwZW5kZWQgZGF0YS4gYXNzZXJ0X2VxdWFsczogSW5pdGlhbCBidWZmZXJlZCBy
YW5nZS4gZXhwZWN0ZWQgInsgWzAuMDk1LCA2LjU0OCkgfSIgYnV0IGdvdCAieyBbMC4wMDAsIDYu
NTQ4KSB9IgorRkFJTCBUZXN0IHJlbW92aW5nIHRoZSBtaWRkbGUgb2YgYXBwZW5kZWQgZGF0YS4g
YXNzZXJ0X2VxdWFsczogSW5pdGlhbCBidWZmZXJlZCByYW5nZS4gZXhwZWN0ZWQgInsgWzAuMDk1
LCA2LjU0OCkgfSIgYnV0IGdvdCAieyBbMC4wMDAsIDYuNTQ4KSB9IgorRkFJTCBUZXN0IHJlbW92
aW5nIHRoZSBlbmQgb2YgYXBwZW5kZWQgZGF0YS4gYXNzZXJ0X2VxdWFsczogSW5pdGlhbCBidWZm
ZXJlZCByYW5nZS4gZXhwZWN0ZWQgInsgWzAuMDk1LCA2LjU0OCkgfSIgYnV0IGdvdCAieyBbMC4w
MDAsIDYuNTQ4KSB9IgogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>