<?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>80589</bug_id>
          
          <creation_ts>2012-03-08 04:55:09 -0800</creation_ts>
          <short_desc>MediaStream API: Change the PeerConnection to use JSEP instead of ROAP</short_desc>
          <delta_ts>2012-09-19 07:13:25 -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>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          <dependson>80692</dependson>
    
    <dependson>80699</dependson>
    
    <dependson>81206</dependson>
    
    <dependson>81207</dependson>
    
    <dependson>81322</dependson>
    
    <dependson>81333</dependson>
    
    <dependson>81339</dependson>
    
    <dependson>81341</dependson>
    
    <dependson>81652</dependson>
    
    <dependson>81657</dependson>
    
    <dependson>81924</dependson>
    
    <dependson>82450</dependson>
    
    <dependson>82584</dependson>
    
    <dependson>85491</dependson>
    
    <dependson>85988</dependson>
    
    <dependson>86098</dependson>
    
    <dependson>87480</dependson>
    
    <dependson>92106</dependson>
    
    <dependson>92380</dependson>
    
    <dependson>92866</dependson>
    
    <dependson>92867</dependson>
    
    <dependson>93091</dependson>
    
    <dependson>93117</dependson>
    
    <dependson>93119</dependson>
    
    <dependson>94801</dependson>
    
    <dependson>94813</dependson>
    
    <dependson>95064</dependson>
    
    <dependson>95198</dependson>
    
    <dependson>95543</dependson>
    
    <dependson>95565</dependson>
    
    <dependson>95734</dependson>
    
    <dependson>95839</dependson>
    
    <dependson>96092</dependson>
    
    <dependson>96097</dependson>
    
    <dependson>96268</dependson>
    
    <dependson>96989</dependson>
    
    <dependson>97086</dependson>
          <blocked>56459</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Tommy Widenflycht">tommyw</reporter>
          <assigned_to name="Tommy Widenflycht">tommyw</assigned_to>
          <cc>abarth</cc>
    
    <cc>adam.bergkvist</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>gustavo</cc>
    
    <cc>harald</cc>
    
    <cc>hta</cc>
    
    <cc>ojan</cc>
    
    <cc>paulirish</cc>
    
    <cc>s.choi</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>573770</commentid>
    <comment_count>0</comment_count>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-03-08 04:55:09 -0800</bug_when>
    <thetext>This patch deprecates the current Peerconnection by renaming it to DeprecatedPeerConnection and adds a new PeerConnection implementation based on:

http://tools.ietf.org/html/draft-ietf-rtcweb-jsep-00

I have made the new PC quite a bit &quot;stupider&quot; and delegate all logic to the embedder. The reason for this is to avoid adding a huge chunk of code to webcore to do SDP parsing/generation/state handling among other things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573772</commentid>
    <comment_count>1</comment_count>
      <attachid>130808</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-03-08 05:05:16 -0800</bug_when>
    <thetext>Created attachment 130808
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573773</commentid>
    <comment_count>2</comment_count>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-03-08 05:06:43 -0800</bug_when>
    <thetext>I know the patch is quite big but all files that has the name Deprecated in them are just renames of existing files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573776</commentid>
    <comment_count>3</comment_count>
      <attachid>130808</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-08 05:13:11 -0800</bug_when>
    <thetext>Comment on attachment 130808
Patch

Attachment 130808 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11865276</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573795</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2012-03-08 06:24:27 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; This patch deprecates the current Peerconnection by renaming it to DeprecatedPeerConnection and adds a new PeerConnection implementation based on:

I would have preferred to call the new files JSEPPeerConnection or ExperimentalPeerConnection since the API discussion is still ongoing in W3C. The one you call DeprecatedPeerConnection is the one in the current specification (http://dev.w3.org/2011/webrtc/editor/webrtc.html).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573801</commentid>
    <comment_count>5</comment_count>
    <who name="Harald Tveit Alvestrand">harald</who>
    <bug_when>2012-03-08 06:37:23 -0800</bug_when>
    <thetext>The RTCWEB / WEBRTC consensus seems to go with JSEP:

http://www.w3.org/2012/02/01-webrtc-minutes.html#item03 (Mountain View meeting) ended up with going with JSEP unless alternatives were found. No alternatives have been proposed to date, and the main ROAP author is now a co-author of JSEP.

See http://www.ietf.org/proceedings/interim/2012/01/31/rtcweb/minutes/rtcweb.txt for the RTCWEB discussion.

It&apos;s taken a while to get the editors to do the editing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573819</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2012-03-08 07:35:03 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; The RTCWEB / WEBRTC consensus seems to go with JSEP:
&gt; 
&gt; http://www.w3.org/2012/02/01-webrtc-minutes.html#item03 (Mountain View meeting) ended up with going with JSEP unless alternatives were found. No alternatives have been proposed to date, and the main ROAP author is now a co-author of JSEP.

It&apos;s true that there&apos;s consensus around the JSEP model. However the discussion around the API, to interface with JSEP, is still ongoing - that&apos;s why I suggested to use the &quot;Experimental&quot; prefix at this point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573827</commentid>
    <comment_count>7</comment_count>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-03-08 07:46:38 -0800</bug_when>
    <thetext>My take on this is that the API will change to a new model and therefore the old API will be deprecated. Therefore the renaming of current PeerConnection to DeprecatedPeerConnection is correct imho.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574206</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-08 14:27:21 -0800</bug_when>
    <thetext>&gt; It&apos;s true that there&apos;s consensus around the JSEP model. However the discussion around the API, to interface with JSEP, is still ongoing - that&apos;s why I suggested to use the &quot;Experimental&quot; prefix at this point.

The risk of using a name like JSEPPeerConnection is that we&apos;ll be stuck with that as the final name for the API.  If we us PeerConnection for JSEP and change the existing API to DeprecatedPeerConnection, there&apos;s no risk of getting stuck with the wrong name for the final API.

Also, using this naming arrangement encourages folks to move over to the new API, making it easier for us to remove DeprecatedPeerConnection when that&apos;s appropriate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574225</commentid>
    <comment_count>9</comment_count>
      <attachid>130808</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-08 14:38:57 -0800</bug_when>
    <thetext>Comment on attachment 130808
Patch

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

This patch is much to big to review.  I noted a few minor issues.  Mostly we need to divide this patch into many smaller pieces.  For example, I&apos;d start with one patch that just renames the existing APIs.  Then I&apos;d introduce the new interfaces in a series of patches.

&gt; Source/WebCore/Modules/mediastream/IceCallback.h:43
&gt; +class IceCallback : public RefCounted&lt;IceCallback&gt; {

I would have expected this to inherit from one of our callback base classes, but maybe that&apos;s not necessary anymore.

&gt; Source/WebCore/Modules/mediastream/IceCandidate.h:61
&gt; +    RefPtr&lt;IceCandidateBase&gt; m_base;

Why isn&apos;t this a base class?

&gt; Source/WebCore/Modules/mediastream/IceCandidate.idl:41
&gt; +        // the m= line this candidate is associated with
&gt; +        readonly attribute DOMString label;
&gt; +
&gt; +        // creates a SDP-ized form of this candidate
&gt; +        DOMString toSdp();

Generally we write comments like these in IDL files.  That&apos;s what the specs are for.  :)

&gt; Source/WebCore/Modules/mediastream/MediaHints.h:60
&gt; +    RefPtr&lt;MediaHintsBase&gt; m_base;

I don&apos;t really understand this pattern.  Why are these &quot;base&quot; objects being held as members?

&gt; Source/WebCore/Modules/mediastream/PeerConnection.cpp:375
&gt; +bool PeerConnection::canSuspend() const
&gt; +{
&gt; +    return true;
&gt; +}

Suspending is really complex.  Are you sure you&apos;re implementing this correctly?  I&apos;d recommend just returning false for now and worrying about suspension later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574228</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-08 14:40:35 -0800</bug_when>
    <thetext>It looks like your patch is 196.18 KB.  The tool that creates the patch file is supposed to warning you whenever you create a patch that&apos;s larger than 20KB.  It looks like you&apos;re over that guideline by an order of magnitude.

(Of course, not all patches can be small.  For example, I&apos;d expect the renaming patch to be larger---but that&apos;s easy to rubber-stamp as long as you&apos;re just moving code around and not introducing new code.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574830</commentid>
    <comment_count>11</comment_count>
      <attachid>130808</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-03-09 05:16:56 -0800</bug_when>
    <thetext>Comment on attachment 130808
Patch

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

&gt;&gt; Source/WebCore/Modules/mediastream/IceCallback.h:43
&gt;&gt; +class IceCallback : public RefCounted&lt;IceCallback&gt; {
&gt; 
&gt; I would have expected this to inherit from one of our callback base classes, but maybe that&apos;s not necessary anymore.

No, the person that worked on the IDL parser simplified things a lot. Specifying &quot;Callback&quot; in the IDL fixes everything else.

&gt;&gt; Source/WebCore/Modules/mediastream/IceCandidate.h:61
&gt;&gt; +    RefPtr&lt;IceCandidateBase&gt; m_base;
&gt; 
&gt; Why isn&apos;t this a base class?

It is the split into WebCore proper and WebCore platform that complicates things. Since IceCandidates and SessionDescriptions can be created both from the embedder and JavaScript this kind of pattern is necessary. We do the same with MediaStream and MediaStreamDescriptor but since SessionDescriptionDescriptor is kind of clunky I choose to use *Base instead. In hindsight that was probably more confusing than helpful.

&gt;&gt; Source/WebCore/Modules/mediastream/IceCandidate.idl:41
&gt;&gt; +        DOMString toSdp();
&gt; 
&gt; Generally we write comments like these in IDL files.  That&apos;s what the specs are for.  :)

Yeah! Comments in WebKit. Will fix.

&gt;&gt; Source/WebCore/Modules/mediastream/MediaHints.h:60
&gt;&gt; +    RefPtr&lt;MediaHintsBase&gt; m_base;
&gt; 
&gt; I don&apos;t really understand this pattern.  Why are these &quot;base&quot; objects being held as members?

See above.

&gt;&gt; Source/WebCore/Modules/mediastream/PeerConnection.cpp:375
&gt;&gt; +}
&gt; 
&gt; Suspending is really complex.  Are you sure you&apos;re implementing this correctly?  I&apos;d recommend just returning false for now and worrying about suspension later.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574833</commentid>
    <comment_count>12</comment_count>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-03-09 05:20:17 -0800</bug_when>
    <thetext>The renaming patch is out now (bug 80962) and is ~145KB.

And btw, the script doesn&apos;t complain in the least.

(In reply to comment #10)
&gt; It looks like your patch is 196.18 KB.  The tool that creates the patch file is supposed to warning you whenever you create a patch that&apos;s larger than 20KB.  It looks like you&apos;re over that guideline by an order of magnitude.
&gt; 
&gt; (Of course, not all patches can be small.  For example, I&apos;d expect the renaming patch to be larger---but that&apos;s easy to rubber-stamp as long as you&apos;re just moving code around and not introducing new code.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574870</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2012-03-09 06:56:31 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; The risk of using a name like JSEPPeerConnection is that we&apos;ll be stuck with that as the final name for the API.  If we us PeerConnection for JSEP and change the existing API to DeprecatedPeerConnection, there&apos;s no risk of getting stuck with the wrong name for the final API.

Isn&apos;t the final name pending until the prefixes are removed anyhow? But I agree that JSEPPeerConnection is bad. ExperimentalPeerConnection would be better IMO.

&gt; Also, using this naming arrangement encourages folks to move over to the new API, making it easier for us to remove DeprecatedPeerConnection when that&apos;s appropriate.

The discussion is still ongoing in W3C on which changes JSEP will have on the API. It shouldn&apos;t prevent anyone from prototyping though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574945</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-09 09:27:10 -0800</bug_when>
    <thetext>Adam: I&apos;m going to reply to your comment on Bug 80692 because that&apos;s where the rename patch is now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723547</commentid>
    <comment_count>15</comment_count>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-09-19 07:13:25 -0700</bug_when>
    <thetext>Closing this bug since RTCPeerConnection has now landed, and the old ROAD based implementation has been deleted.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130808</attachid>
            <date>2012-03-08 05:05:16 -0800</date>
            <delta_ts>2012-03-09 05:16:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80589-20120308140513.patch</filename>
            <type>text/plain</type>
            <size>200889</size>
            <attacher name="Tommy Widenflycht">tommyw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2NlY2Y5NWJkNDI4ODZj
MzhmYjMyNmE5MWYyYTdlMmNmYjVhMWEwYS4uZTA4MDczYzc0ZjFiYjAxNzc5NWMwNjVlYWU1OTc0
N2UyMTAyYWY2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzMiBAQAorMjAxMi0wMy0wOCAgVG9t
bXkgV2lkZW5mbHljaHQgIDx0b21teXdAZ29vZ2xlLmNvbT4KKworICAgICAgICBNZWRpYVN0cmVh
bSBBUEk6IENoYW5nZSB0aGUgUGVlckNvbm5lY3Rpb24gdG8gdXNlIEpTRVAgaW5zdGVhZCBvZiBS
T0FQCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDU4
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggZGVwcmVjYXRlcyB0aGUgY3VycmVudCBQZWVyY29ubmVjdGlvbiBieSByZW5hbWluZyBp
dCB0bworICAgICAgICBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb24gYW5kIGFkZHMgYSBuZXcgUGVl
ckNvbm5lY3Rpb24gaW1wbGVtZW50YXRpb24gYmFzZWQgb246CisgICAgICAgIGh0dHA6Ly90b29s
cy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtcnRjd2ViLWpzZXAtMDAKKworICAgICAgICBDb2Rl
IGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0
LmFtOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vRE9NV2luZG93TWVkaWFTdHJlYW0u
aWRsOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vRGVwcmVjYXRlZFBlZXJDb25uZWN0
aW9uLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Q
ZWVyQ29ubmVjdGlvbi5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRl
cHJlY2F0ZWRQZWVyQ29ubmVjdGlvbjo6RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbjo6fkRlcHJlY2F0ZWRQZWVyQ29u
bmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEZXByZWNhdGVkUGVlckNvbm5lY3Rpb246OnBy
b2Nlc3NTaWduYWxpbmdNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlcHJlY2F0ZWRQZWVy
Q29ubmVjdGlvbjo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZXByZWNhdGVkUGVl
ckNvbm5lY3Rpb246OnNlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFBlZXJDb25u
ZWN0aW9uOjphZGRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFBlZXJDb25u
ZWN0aW9uOjpyZW1vdmVTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFBlZXJD
b25uZWN0aW9uOjpsb2NhbFN0cmVhbXMpOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFBl
ZXJDb25uZWN0aW9uOjpyZW1vdGVTdHJlYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkRlcHJlY2F0
ZWRQZWVyQ29ubmVjdGlvbjo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFBl
ZXJDb25uZWN0aW9uOjpkaWRDb21wbGV0ZUlDRVByb2Nlc3NpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uOjpkaWRHZW5lcmF0ZVNEUCk6CisgICAgICAgIChX
ZWJDb3JlOjpEZXByZWNhdGVkUGVlckNvbm5lY3Rpb246OmRpZFJlY2VpdmVEYXRhU3RyZWFtTWVz
c2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpEZXByZWNhdGVkUGVlckNvbm5lY3Rpb246OmRpZEFk
ZFJlbW90ZVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpEZXByZWNhdGVkUGVlckNvbm5lY3Rp
b246OmRpZFJlbW92ZVJlbW90ZVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpEZXByZWNhdGVk
UGVlckNvbm5lY3Rpb246OmludGVyZmFjZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVj
YXRlZFBlZXJDb25uZWN0aW9uOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbjo6c3RvcCk6CisgICAgICAgIChXZWJDb3Jl
OjpEZXByZWNhdGVkUGVlckNvbm5lY3Rpb246OmV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpEZXByZWNhdGVkUGVlckNvbm5lY3Rpb246OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpEZXByZWNhdGVkUGVlckNvbm5lY3Rpb246OnNjaGVkdWxlSW5p
dGlhbE5lZ290aWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRlcHJlY2F0ZWRQZWVyQ29ubmVj
dGlvbjo6aW5pdGlhbE5lZ290aWF0aW9uVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpE
ZXByZWNhdGVkUGVlckNvbm5lY3Rpb246OmVuc3VyZVN0cmVhbUNoYW5nZVNjaGVkdWxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEZXByZWNhdGVkUGVlckNvbm5lY3Rpb246OnN0cmVhbUNoYW5nZVRp
bWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uOjpz
Y2hlZHVsZVJlYWR5U3RhdGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFBl
ZXJDb25uZWN0aW9uOjpyZWFkeVN0YXRlQ2hhbmdlVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpEZXByZWNhdGVkUGVlckNvbm5lY3Rpb246OmNoYW5nZVJlYWR5U3RhdGUpOgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24u
aC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbjo6ZGlkQ2hhbmdl
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uOjpyZWZF
dmVudFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpEZXByZWNhdGVkUGVlckNvbm5lY3Rpb246
OmRlcmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vRGVwcmVj
YXRlZFBlZXJDb25uZWN0aW9uLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5pZGwuCisgICAgICAgICogTW9kdWxlcy9tZWRp
YXN0cmVhbS9JY2VDYWxsYmFjay5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoSWNlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SWNlQ2Fs
bGJhY2s6On5JY2VDYWxsYmFjayk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9JY2VD
YWxsYmFjay5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL1BlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oLgorICAgICAgICAqIE1vZHVsZXMvbWVk
aWFzdHJlYW0vSWNlQ2FuZGlkYXRlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50LmguCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZTo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZTo6SWNlQ2FuZGlkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkljZUNhbmRpZGF0ZTo6fkljZUNhbmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
Y2VDYW5kaWRhdGU6OmxhYmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZTo6Y2Fu
ZGlkYXRlTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJY2VDYW5kaWRhdGU6OnRvU2RwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZTo6YmFzZSk6CisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXN0cmVhbS9JY2VDYW5kaWRhdGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50LmguCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKEljZUNhbmRpZGF0ZSk6CisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXN0cmVhbS9JY2VDYW5kaWRhdGUuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaC4KKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhSGludHMuY3BwOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGll
bnQuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFIaW50czo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhSGludHM6Ok1lZGlhSGludHMpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFIaW50czo6fk1lZGlhSGludHMpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFIaW50czo6YXVkaW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFIaW50czo6c2V0
QXVkaW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFIaW50czo6dmlkZW8pOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFIaW50czo6c2V0VmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFI
aW50czo6YmFzZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUhpbnRzLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJDb25u
ZWN0aW9uSGFuZGxlckNsaWVudC5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChNZWRp
YUhpbnRzKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhSGludHMuaWRsOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVj
dGlvbkhhbmRsZXJDbGllbnQuaC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJD
b25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OlBlZXJDb25uZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpoYXNMb2NhbEF1ZGlvVHJhY2spOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6aGFzTG9j
YWxWaWRlb1RyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpwYXJzZU1l
ZGlhSGludHMpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmNyZWF0ZU9mZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpjcmVhdGVBbnN3ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OnNldExvY2FsRGVzY3JpcHRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OnNldFJlbW90ZURlc2NyaXB0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpsb2NhbERlc2NyaXB0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpyZW1vdGVEZXNjcmlwdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6c3RhcnRJY2UpOgorICAgICAgICAoV2ViQ29yZTo6
UGVlckNvbm5lY3Rpb246OnByb2Nlc3NJY2VNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBl
ZXJDb25uZWN0aW9uOjpyZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0
aW9uOjppY2VTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6YWRkU3Ry
ZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpyZW1vdmVTdHJlYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmRpZEdlbmVyYXRlSWNlQ2FuZGlkYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpkaWRDaGFuZ2VSZWFkeVN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpkaWRDaGFuZ2VJY2VTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6Y2FuU3VzcGVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVy
Q29ubmVjdGlvbjo6Y2hhbmdlUmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29u
bmVjdGlvbjo6Y2hhbmdlSWNlU3RhdGUpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0v
UGVlckNvbm5lY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUGVlckNvbm5l
Y3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uaWRs
OgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vU2Vzc2lvbkRlc2NyaXB0aW9uLmNwcDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckNvbm5l
Y3Rpb25IYW5kbGVyQ2xpZW50LmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlc3Npb25EZXNjcmlwdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlc3Np
b25EZXNjcmlwdGlvbjo6U2Vzc2lvbkRlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
c3Npb25EZXNjcmlwdGlvbjo6flNlc3Npb25EZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTZXNzaW9uRGVzY3JpcHRpb246OmFkZENhbmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
ZXNzaW9uRGVzY3JpcHRpb246OnRvU2RwKToKKyAgICAgICAgKFdlYkNvcmU6OlNlc3Npb25EZXNj
cmlwdGlvbjo6YmFzZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9TZXNzaW9uRGVz
Y3JpcHRpb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50LmguCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFNlc3Npb25EZXNjcmlwdGlvbik6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9TZXNzaW9uRGVzY3JpcHRpb24uaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaC4KKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhc3RyZWFtL1NpZ25hbGluZ0NhbGxiYWNrLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFNpZ25hbGluZ0NhbGxiYWNrKToKKyAgICAgICAgKiBNb2R1bGVzL21l
ZGlhc3RyZWFtL1NpZ25hbGluZ0NhbGxiYWNrLmlkbDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogYmluZGluZ3MvZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjp3ZWJraXREZXByZWNhdGVk
UGVlckNvbm5lY3Rpb25FbmFibGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RlcHJlY2F0
ZWRQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1BlZXJDb25uZWN0aW9uQ3VzdG9tLmNwcC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25Db25zdHJ1Y3Rv
cjo6Y29uc3RydWN0SlNEZXByZWNhdGVkUGVlckNvbm5lY3Rpb24pOgorICAgICAgICAqIGRvbS9F
dmVudFRhcmdldC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogZG9tL0V2ZW50VGFy
Z2V0RmFjdG9yeS5pbjoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9EZXByZWNhdGVk
UGVlckNvbm5lY3Rpb25IYW5kbGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uSGFuZGxlci5oLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xp
ZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1Bl
ZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkRlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQ6On5EZXByZWNhdGVkUGVl
ckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9JY2VDYW5kaWRhdGVCYXNlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50LmguCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZUJhc2U6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJY2VDYW5kaWRhdGVCYXNlOjpJY2VDYW5kaWRhdGVCYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZUJhc2U6On5JY2VDYW5kaWRhdGVCYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZUJhc2U6OnRvU2RwKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9JY2VDYW5kaWRhdGVCYXNlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5o
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJY2VDYW5kaWRhdGVCYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkljZUNhbmRpZGF0ZUJhc2U6OmxhYmVsKToKKyAgICAgICAgKFdlYkNvcmU6
OkljZUNhbmRpZGF0ZUJhc2U6OmNhbmRpZGF0ZUxpbmUpOgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL0ljZU9wdGlvbnMuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SWNlT3B0aW9uczo6Y3JlYXRlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9JY2VPcHRpb25zLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVu
dC5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJY2VPcHRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkljZU9wdGlvbnM6On5JY2VPcHRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6Oklj
ZU9wdGlvbnM6OnVzZUNhbmRpZGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SWNlT3B0aW9uczo6
SWNlT3B0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFIaW50cy5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJD
b25uZWN0aW9uSGFuZGxlckNsaWVudC5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUhpbnRzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFIaW50
czo6YXVkaW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFIaW50czo6dmlkZW8pOgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhSGludHMuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50
LmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKE1lZGlhSGludHMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFIaW50czo6fk1lZGlhSGludHMpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFIaW50czo6TWVkaWFIaW50cyk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1DZW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1DZW50ZXI6
OmRvQ29uc3RydWN0U2RwKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKE1lZGlhU3RyZWFtQ2VudGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9QZWVyQ29ubmVjdGlvbkhhbmRsZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUGVlckNvbm5lY3Rpb25IYW5kbGVyLmNwcC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb25IYW5k
bGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb25IYW5kbGVyOjpQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb25I
YW5kbGVyOjp+UGVlckNvbm5lY3Rpb25IYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJD
b25uZWN0aW9uSGFuZGxlcjo6Y3JlYXRlT2ZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNv
bm5lY3Rpb25IYW5kbGVyOjpjcmVhdGVBbnN3ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNv
bm5lY3Rpb25IYW5kbGVyOjpzZXRMb2NhbERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlBlZXJDb25uZWN0aW9uSGFuZGxlcjo6c2V0UmVtb3RlRGVzY3JpcHRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UGVlckNvbm5lY3Rpb25IYW5kbGVyOjpsb2NhbERlc2NyaXB0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uSGFuZGxlcjo6cmVtb3RlRGVzY3JpcHRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb25IYW5kbGVyOjpzdGFydEljZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnByb2Nlc3NJY2VNZXNzYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uSGFuZGxlcjo6YWRkU3RyZWFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uSGFuZGxlcjo6cmVtb3ZlU3RyZWFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uSGFuZGxlcjo6c3RvcCk6CisgICAgICAgICog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25IYW5kbGVyLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFBlZXJDb25uZWN0aW9uSGFuZGxlcik6CisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50Lmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCk6CisgICAg
ICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vU2Vzc2lvbkRlc2NyaXB0aW9uQmFzZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0
aW9uSGFuZGxlckNsaWVudC5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTZXNzaW9uRGVzY3JpcHRpb25CYXNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Vz
c2lvbkRlc2NyaXB0aW9uQmFzZTo6U2Vzc2lvbkRlc2NyaXB0aW9uQmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTZXNzaW9uRGVzY3JpcHRpb25CYXNlOjp+U2Vzc2lvbkRlc2NyaXB0aW9uQmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpTZXNzaW9uRGVzY3JpcHRpb25CYXNlOjphZGRDYW5kaWRhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Vzc2lvbkRlc2NyaXB0aW9uQmFzZTo6dG9TZHApOgorICAg
ICAgICAoV2ViQ29yZTo6U2Vzc2lvbkRlc2NyaXB0aW9uQmFzZTo6bnVtYmVyT2ZBZGRlZENhbmRp
ZGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2Vzc2lvbkRlc2NyaXB0aW9uQmFzZTo6Y2FuZGlk
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlc3Npb25EZXNjcmlwdGlvbkJhc2U6OmluaXRpYWxT
ZHApOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1Nlc3Npb25EZXNjcmlwdGlvbkJh
c2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVl
ckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50LmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFNlc3Npb25EZXNjcmlwdGlvbkJhc2UpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9QZWVyQ29u
bmVjdGlvbkhhbmRsZXIuY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlcjo6RGVwcmVjYXRlZFBlZXJDb25u
ZWN0aW9uSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpEZXByZWNhdGVkUGVlckNvbm5lY3Rp
b25IYW5kbGVyOjp+RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpwcm9kdWNlSW5pdGlhbE9m
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXI6
OmhhbmRsZUluaXRpYWxPZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEZXByZWNhdGVkUGVlckNv
bm5lY3Rpb25IYW5kbGVyOjpwcm9jZXNzU0RQKToKKyAgICAgICAgKFdlYkNvcmU6OkRlcHJlY2F0
ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnByb2Nlc3NQZW5kaW5nU3RyZWFtcyk6CisgICAgICAg
IChXZWJDb3JlOjpEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpzZW5kRGF0YVN0cmVh
bU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFu
ZGxlcjo6c3RvcCk6CisKIDIwMTItMDMtMDggIFNoaW55YSBLYXdhbmFrYSAgPHNoaW55YWtAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIDxzaGFkb3c+IHNob3VsZCBiZSByZW5kZXJlZCBjb3JyZWN0
bHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDc2MDczYWYyZmU1YTBkMmNiZTllMTdm
YTk1MDRjZWFkY2FmYTZhOGUuLjYwNDUzNjlhNTM4N2IwMTFjNjZjYWY3NzAxYjNkMzEyMDk0YmMw
ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTItMDMt
MDggIFRvbW15IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CisKKyAgICAgICAgTWVk
aWFTdHJlYW0gQVBJOiBDaGFuZ2UgdGhlIFBlZXJDb25uZWN0aW9uIHRvIHVzZSBKU0VQIGluc3Rl
YWQgb2YgUk9BUAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODA1ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGRlcHJlY2F0ZXMgdGhlIGN1cnJlbnQgUGVlcmNvbm5lY3Rpb24gYnkgcmVu
YW1pbmcgaXQgdG8KKyAgICAgICAgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uIGFuZCBhZGRzIGEg
bmV3IFBlZXJDb25uZWN0aW9uIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uOgorICAgICAgICBodHRw
Oi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLXJ0Y3dlYi1qc2VwLTAwCisKKyAgICAg
ICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIGJyaWRnZS9EZXByZWNhdGVkUGVlckNvbm5lY3Rp
b25IYW5kbGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdl
L1BlZXJDb25uZWN0aW9uSGFuZGxlci5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpEZXByZWNhdGVk
UGVlckNvbm5lY3Rpb25IYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlcHJlY2F0ZWRQZWVy
Q29ubmVjdGlvbkhhbmRsZXI6On5EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnByb2R1Y2VJ
bml0aWFsT2ZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9u
SGFuZGxlcjo6aGFuZGxlSW5pdGlhbE9mZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlcHJlY2F0
ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnByb2Nlc3NTRFApOgorICAgICAgICAoV2ViQ29yZTo6
RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlcjo6cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnNlbmRE
YXRhU3RyZWFtTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpEZXByZWNhdGVkUGVlckNvbm5l
Y3Rpb25IYW5kbGVyOjpzdG9wKToKKyAgICAgICAgKiBicmlkZ2UvRGVwcmVjYXRlZFBlZXJDb25u
ZWN0aW9uSGFuZGxlckludGVybmFsLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vYnJpZGdlL1BlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsLmNwcC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFu
ZGxlckludGVybmFsOjpEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFs
Ojp+RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OkRlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6cHJvZHVjZUlu
aXRpYWxPZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25I
YW5kbGVySW50ZXJuYWw6OmhhbmRsZUluaXRpYWxPZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpE
ZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWw6OnByb2Nlc3NTRFApOgorICAg
ICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpw
cm9jZXNzUGVuZGluZ1N0cmVhbXMpOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFBlZXJD
b25uZWN0aW9uSGFuZGxlckludGVybmFsOjpzZW5kRGF0YVN0cmVhbU1lc3NhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpzdG9w
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRl
cm5hbDo6ZGlkQ29tcGxldGVJQ0VQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRlcHJl
Y2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6ZGlkR2VuZXJhdGVTRFApOgorICAg
ICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpk
aWRSZWNlaXZlRGF0YVN0cmVhbU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRl
ZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpkaWRBZGRSZW1vdGVTdHJlYW0pOgorICAg
ICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpk
aWRSZW1vdmVSZW1vdGVTdHJlYW0pOgorICAgICAgICAqIGJyaWRnZS9EZXByZWNhdGVkUGVlckNv
bm5lY3Rpb25IYW5kbGVySW50ZXJuYWwuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vYnJpZGdlL1BlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsLmguCisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEZXByZWNhdGVkUGVlckNvbm5l
Y3Rpb25IYW5kbGVySW50ZXJuYWwpOgorICAgICAgICAqIGJyaWRnZS9NZWRpYVN0cmVhbUNlbnRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNlbnRlcjo6ZG9Db25zdHJ1Y3RT
ZHApOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMDMtMDcgIEtlbnQgVGFtdXJhICA8dGtl
bnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlbW92ZSBtZWFuaW5nbGVzcyBjb2RlIGluIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cHJlZmVycmVkQ29udGVudFdpZHRoKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDM0NzgyYmY4Mzc5ZDlmNzE1OWQ3ZThhNzVmN2Y5
Y2E1ODlhNzk0ZDEuLmY3ZDc5YTExYTE3ZmQ1MGU5MDBhMDIyZTIwYzQ3NTIwY2NjNWU2MTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMTA5LDYgKzEwOSw4IEBAIHdlYmNvcmVf
YnVpbHRfc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0RhdGFWaWV3Lmgg
XAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmNwcCBc
CiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0RlZGljYXRlZFdvcmtlckNvbnRleHQuaCBcCisJ
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0RlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbi5jcHAgXAor
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNEZXByZWNhdGVkUGVlckNvbm5lY3Rpb24uaCBcCiAJ
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0RldmljZU1vdGlvbkV2ZW50LmNwcCBcCiAJRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU0RldmljZU1vdGlvbkV2ZW50LmggXAogCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50LmNwcCBcCkBAIC0zNDIsNiArMzQ0LDEw
IEBAIHdlYmNvcmVfYnVpbHRfc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U0hUTUxVTGlzdEVsZW1lbnQuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxWaWRl
b0VsZW1lbnQuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTFZpZGVvRWxlbWVu
dC5oIFwKKwlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSWNlQ2FsbGJhY2suY3BwIFwKKwlEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTSWNlQ2FsbGJhY2suaCBcCisJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU0ljZUNhbmRpZGF0ZS5jcHAgXAorCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJY2VD
YW5kaWRhdGUuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ltYWdlRGF0YS5jcHAgXAog
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJbWFnZURhdGEuaCBcCiAJRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAgXApAQCAtNDY2LDYgKzQ3Miw4IEBAIHdl
YmNvcmVfYnVpbHRfc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1Njcmlw
dFByb2ZpbGUuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NjcmlwdFByb2ZpbGVOb2Rl
LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NjcmlwdFByb2ZpbGVOb2RlLmggXAor
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTZXNzaW9uRGVzY3JpcHRpb24uY3BwIFwKKwlEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTU2Vzc2lvbkRlc2NyaXB0aW9uLmggXAogCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNTaGFkb3dSb290LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U1NoYWRvd1Jvb3QuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NoYXJlZFdvcmtlckNv
bnRleHQuY3BwIFwKQEAgLTY1OCw3ICs2NjYsMTAgQEAgZG9tX2JpbmRpbmdfaWRscyArPSBcCiAJ
JChXZWJDb3JlKS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uQ2FsbGJhY2suaWRsIFwKIAkk
KFdlYkNvcmUpL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvci5pZGwgXAogCSQoV2Vi
Q29yZSkvTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaWRsIFwKKwkk
KFdlYkNvcmUpL01vZHVsZXMvbWVkaWFzdHJlYW0vRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uLmlk
bCBcCiAJJChXZWJDb3JlKS9Nb2R1bGVzL21lZGlhc3RyZWFtL0RPTVdpbmRvd01lZGlhU3RyZWFt
LmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL21lZGlhc3RyZWFtL0ljZUNhbGxiYWNrLmlkbCBc
CisJJChXZWJDb3JlKS9Nb2R1bGVzL21lZGlhc3RyZWFtL0ljZUNhbmRpZGF0ZS5pZGwgXAogCSQo
V2ViQ29yZSkvTW9kdWxlcy9tZWRpYXN0cmVhbS9Mb2NhbE1lZGlhU3RyZWFtLmlkbCBcCiAJJChX
ZWJDb3JlKS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmlkbCBcCiAJJChXZWJDb3Jl
KS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRXZlbnQuaWRsIFwKQEAgLTY3MCw2ICs2
ODEsNyBAQCBkb21fYmluZGluZ19pZGxzICs9IFwKIAkkKFdlYkNvcmUpL01vZHVsZXMvbWVkaWFz
dHJlYW0vTmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjay5pZGwgXAogCSQoV2ViQ29yZSkv
TW9kdWxlcy9tZWRpYXN0cmVhbS9OYXZpZ2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2FsbGJhY2suaWRs
IFwKIAkkKFdlYkNvcmUpL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uaWRsIFwK
KwkkKFdlYkNvcmUpL01vZHVsZXMvbWVkaWFzdHJlYW0vU2Vzc2lvbkRlc2NyaXB0aW9uLmlkbCBc
CiAJJChXZWJDb3JlKS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NpZ25hbGluZ0NhbGxiYWNrLmlkbCBc
CiAJJChXZWJDb3JlKS9jc3MvQ1NTQ2hhcnNldFJ1bGUuaWRsIFwKIAkkKFdlYkNvcmUpL2Nzcy9D
U1NGb250RmFjZVJ1bGUuaWRsIFwKQEAgLTEwMzEsNiArMTA0Myw4IEBAIHdlYmNvcmVfc291cmNl
cyArPSBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvUGFnZUdyb3VwSW5kZXhl
ZERhdGFiYXNlLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckNv
bnRleHRJbmRleGVkRGF0YWJhc2UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9Xb3JrZXJDb250ZXh0SW5kZXhlZERhdGFiYXNlLmggXAorCVNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb24uaCBc
CiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Mb2NhbE1lZGlhU3RyZWFtLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Mb2NhbE1lZGlhU3RyZWFt
LmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3Bw
IFwKQEAgLTEyNTksNiArMTI3Myw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGF0YVZpZXdDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RlZGljYXRlZFdvcmtlckNvbnRleHRDdXN0b20uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU9yaWVudGF0aW9uRXZlbnRDdXN0b20u
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpcmVjdG9yeUVudHJ5Q3VzdG9t
LmNwcCBcCkBAIC0xMzM2LDcgKzEzNTEsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAgXAotCVNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUGVlckNvbm5lY3Rpb25DdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuaCBcCiAJU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcCBcCkBAIC0zMzI0LDE0
ICszMzM4LDI1IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmggXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVy
LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0RlcHJlY2F0ZWRQZWVy
Q29ubmVjdGlvbkhhbmRsZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9JY2VDYW5kaWRhdGVCYXNlLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vSWNlQ2FuZGlkYXRlQmFzZS5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9JY2VPcHRpb25zLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vSWNlT3B0aW9ucy5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUhpbnRzLmNwcCBcCisJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFIaW50cy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNlbnRlci5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ29tcG9uZW50LmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJj
ZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlv
bkhhbmRsZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVy
Q29ubmVjdGlvbkhhbmRsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9QZWVyQ29ubmVjdGlvbkhhbmRsZXIuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9TZXNzaW9uRGVzY3JpcHRpb25CYXNl
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vU2Vzc2lvbkRlc2Ny
aXB0aW9uQmFzZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlci5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21vY2svRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9EZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2suaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9HZW9sb2NhdGlvbkNsaWVudE1vY2suY3Bw
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vRE9NV2lu
ZG93TWVkaWFTdHJlYW0uaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9E
T01XaW5kb3dNZWRpYVN0cmVhbS5pZGwKaW5kZXggODUwMTFhZTk2YjZkNTI1NTdiNzNmZDQyNGMy
N2ZkYzg0ZDZkZjk5ZS4uOGVhMmI4NmZmNDM0ZDIwZDYzMmJjZGEyZTMxYWVkY2JkZWE4MGQ5ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9ET01XaW5kb3dN
ZWRpYVN0cmVhbS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9E
T01XaW5kb3dNZWRpYVN0cmVhbS5pZGwKQEAgLTMwLDYgKzMwLDcgQEAgbW9kdWxlIHdpbmRvdyB7
CiAgICAgICAgIENvbmRpdGlvbmFsPU1FRElBX1NUUkVBTSwKICAgICAgICAgU3VwcGxlbWVudGFs
PURPTVdpbmRvdwogICAgIF0gRE9NV2luZG93TWVkaWFTdHJlYW0geworICAgICAgICBhdHRyaWJ1
dGUgW1Y4RW5hYmxlZEF0UnVudGltZV0gRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uQ29uc3RydWN0
b3Igd2Via2l0RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uOwogICAgICAgICBhdHRyaWJ1dGUgW1Y4
RW5hYmxlZEF0UnVudGltZV0gUGVlckNvbm5lY3Rpb25Db25zdHJ1Y3RvciB3ZWJraXRQZWVyQ29u
bmVjdGlvbjsKICAgICAgICAgYXR0cmlidXRlIE1lZGlhU3RyZWFtRXZlbnRDb25zdHJ1Y3RvciBN
ZWRpYVN0cmVhbUV2ZW50OwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL0RlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0RlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbi5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOWQwNDY5MDQ1NzQ1YzE5Yzk1ZjQzY2RmYTZkNjcwOTY3YzVhMTExZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vRGVwcmVjYXRl
ZFBlZXJDb25uZWN0aW9uLmNwcApAQCAtMCwwICsxLDM3NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbi5oIgor
CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
KyNpbmNsdWRlICJNZWRpYVN0cmVhbUV2ZW50LmgiCisjaW5jbHVkZSAiTWVzc2FnZUV2ZW50Lmgi
CisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxEZXByZWNhdGVk
UGVlckNvbm5lY3Rpb24+IERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlv
biwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxsYmFjaz4gc2lnbmFsaW5nQ2FsbGJhY2spCit7Cisg
ICAgUmVmUHRyPERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IGFkb3B0UmVm
KG5ldyBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb24oY29udGV4dCwgc2VydmVyQ29uZmlndXJhdGlv
biwgc2lnbmFsaW5nQ2FsbGJhY2spKTsKKyAgICBjb25uZWN0aW9uLT5zZXRQZW5kaW5nQWN0aXZp
dHkoY29ubmVjdGlvbi5nZXQoKSk7CisgICAgY29ubmVjdGlvbi0+c2NoZWR1bGVJbml0aWFsTmVn
b3RpYXRpb24oKTsKKyAgICBjb25uZWN0aW9uLT5zdXNwZW5kSWZOZWVkZWQoKTsKKworICAgIHJl
dHVybiBjb25uZWN0aW9uLnJlbGVhc2UoKTsKK30KKworRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9u
OjpEZXByZWNhdGVkUGVlckNvbm5lY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGlu
Z0NhbGxiYWNrPiBzaWduYWxpbmdDYWxsYmFjaykKKyAgICA6IEFjdGl2ZURPTU9iamVjdChjb250
ZXh0LCB0aGlzKQorICAgICwgbV9zaWduYWxpbmdDYWxsYmFjayhzaWduYWxpbmdDYWxsYmFjaykK
KyAgICAsIG1fcmVhZHlTdGF0ZShORVcpCisgICAgLCBtX2ljZVN0YXJ0ZWQoZmFsc2UpCisgICAg
LCBtX2xvY2FsU3RyZWFtcyhNZWRpYVN0cmVhbUxpc3Q6OmNyZWF0ZSgpKQorICAgICwgbV9yZW1v
dGVTdHJlYW1zKE1lZGlhU3RyZWFtTGlzdDo6Y3JlYXRlKCkpCisgICAgLCBtX2luaXRpYWxOZWdv
dGlhdGlvblRpbWVyKHRoaXMsICZEZXByZWNhdGVkUGVlckNvbm5lY3Rpb246OmluaXRpYWxOZWdv
dGlhdGlvblRpbWVyRmlyZWQpCisgICAgLCBtX3N0cmVhbUNoYW5nZVRpbWVyKHRoaXMsICZEZXBy
ZWNhdGVkUGVlckNvbm5lY3Rpb246OnN0cmVhbUNoYW5nZVRpbWVyRmlyZWQpCisgICAgLCBtX3Jl
YWR5U3RhdGVDaGFuZ2VUaW1lcih0aGlzLCAmRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uOjpyZWFk
eVN0YXRlQ2hhbmdlVGltZXJGaXJlZCkKKyAgICAsIG1fcGVlckhhbmRsZXIoRGVwcmVjYXRlZFBl
ZXJDb25uZWN0aW9uSGFuZGxlcjo6Y3JlYXRlKHRoaXMsIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNv
bnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpKQoreworfQorCitEZXByZWNhdGVk
UGVlckNvbm5lY3Rpb246On5EZXByZWNhdGVkUGVlckNvbm5lY3Rpb24oKQoreworfQorCit2b2lk
IERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbjo6cHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAobV9yZWFkeVN0
YXRlID09IENMT1NFRCkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtZXNzYWdlLnN0YXJ0c1dpdGgoIlNEUFxuIikp
CisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBzZHAgPSBtZXNzYWdlLnN1YnN0cmluZyg0
KTsKKworICAgIGlmIChtX2ljZVN0YXJ0ZWQpIHsKKyAgICAgICAgaWYgKG1fcGVlckhhbmRsZXIp
CisgICAgICAgICAgICBtX3BlZXJIYW5kbGVyLT5wcm9jZXNzU0RQKHNkcCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAobV9wZWVySGFuZGxlcikKKyAgICAgICAgbV9wZWVySGFu
ZGxlci0+aGFuZGxlSW5pdGlhbE9mZmVyKHNkcCk7CisKKyAgICBlbnN1cmVTdHJlYW1DaGFuZ2VT
Y2hlZHVsZWQoKTsKKyAgICBtX2ljZVN0YXJ0ZWQgPSB0cnVlOworICAgIHNjaGVkdWxlUmVhZHlT
dGF0ZUNoYW5nZShORUdPVElBVElORyk7Cit9CisKK0RlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbjo6
UmVhZHlTdGF0ZSBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb246OnJlYWR5U3RhdGUoKSBjb25zdAor
eworICAgIHJldHVybiBtX3JlYWR5U3RhdGU7Cit9CisKK3ZvaWQgRGVwcmVjYXRlZFBlZXJDb25u
ZWN0aW9uOjpzZW5kKGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBDTE9TRUQpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NU
QVRFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENTdHJpbmcgZGF0YSA9IHRl
eHQudXRmOCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGRhdGEubGVuZ3RoKCk7CisKKyAgICBp
ZiAobGVuZ3RoID4gNTA0KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcGVlckhhbmRsZXIpCisgICAgICAgIG1f
cGVlckhhbmRsZXItPnNlbmREYXRhU3RyZWFtTWVzc2FnZShkYXRhLmRhdGEoKSwgbGVuZ3RoKTsK
K30KKwordm9pZCBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb246OmFkZFN0cmVhbShQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtPiBwcnBTdHJlYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFJlZlB0
cjxNZWRpYVN0cmVhbT4gc3RyZWFtID0gcHJwU3RyZWFtOworICAgIGlmICghc3RyZWFtKSB7Cisg
ICAgICAgIGVjID0gIFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBDTE9TRUQpIHsKKyAgICAgICAgZWMgPSBJTlZBTElE
X1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2xvY2FsU3Ry
ZWFtcy0+Y29udGFpbnMoc3RyZWFtLmdldCgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9s
b2NhbFN0cmVhbXMtPmFwcGVuZChzdHJlYW0pOworCisgICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9y
KiBzdHJlYW1EZXNjcmlwdG9yID0gc3RyZWFtLT5kZXNjcmlwdG9yKCk7CisgICAgc2l6ZV90IGkg
PSBtX3BlbmRpbmdSZW1vdmVTdHJlYW1zLmZpbmQoc3RyZWFtRGVzY3JpcHRvcik7CisgICAgaWYg
KGkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgbV9wZW5kaW5nUmVtb3ZlU3RyZWFtcy5yZW1vdmUo
aSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3BlbmRpbmdBZGRTdHJlYW1zLmFw
cGVuZChzdHJlYW1EZXNjcmlwdG9yKTsKKyAgICBpZiAobV9pY2VTdGFydGVkKQorICAgICAgICBl
bnN1cmVTdHJlYW1DaGFuZ2VTY2hlZHVsZWQoKTsKK30KKwordm9pZCBEZXByZWNhdGVkUGVlckNv
bm5lY3Rpb246OnJlbW92ZVN0cmVhbShNZWRpYVN0cmVhbSogc3RyZWFtLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IENMT1NFRCkgeworICAgICAgICBlYyA9
IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFz
dHJlYW0pIHsKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICghbV9sb2NhbFN0cmVhbXMtPmNvbnRhaW5zKHN0cmVhbSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fbG9jYWxTdHJlYW1zLT5yZW1vdmUoc3RyZWFtKTsKKwor
ICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFtRGVzY3JpcHRvciA9IHN0cmVhbS0+ZGVz
Y3JpcHRvcigpOworICAgIHNpemVfdCBpID0gbV9wZW5kaW5nQWRkU3RyZWFtcy5maW5kKHN0cmVh
bURlc2NyaXB0b3IpOworICAgIGlmIChpICE9IG5vdEZvdW5kKSB7CisgICAgICAgIG1fcGVuZGlu
Z0FkZFN0cmVhbXMucmVtb3ZlKGkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9w
ZW5kaW5nUmVtb3ZlU3RyZWFtcy5hcHBlbmQoc3RyZWFtRGVzY3JpcHRvcik7CisgICAgaWYgKG1f
aWNlU3RhcnRlZCkKKyAgICAgICAgZW5zdXJlU3RyZWFtQ2hhbmdlU2NoZWR1bGVkKCk7Cit9CisK
K01lZGlhU3RyZWFtTGlzdCogRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uOjpsb2NhbFN0cmVhbXMo
KSBjb25zdAoreworICAgIHJldHVybiBtX2xvY2FsU3RyZWFtcy5nZXQoKTsKK30KKworTWVkaWFT
dHJlYW1MaXN0KiBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb246OnJlbW90ZVN0cmVhbXMoKSBjb25z
dAoreworICAgIHJldHVybiBtX3JlbW90ZVN0cmVhbXMuZ2V0KCk7Cit9CisKK3ZvaWQgRGVwcmVj
YXRlZFBlZXJDb25uZWN0aW9uOjpjbG9zZShFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAo
bV9yZWFkeVN0YXRlID09IENMT1NFRCkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJS
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RvcCgpOworfQorCit2b2lkIERlcHJl
Y2F0ZWRQZWVyQ29ubmVjdGlvbjo6ZGlkQ29tcGxldGVJQ0VQcm9jZXNzaW5nKCkKK3sKKyAgICBB
U1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAg
Y2hhbmdlUmVhZHlTdGF0ZShBQ1RJVkUpOworfQorCit2b2lkIERlcHJlY2F0ZWRQZWVyQ29ubmVj
dGlvbjo6ZGlkR2VuZXJhdGVTRFAoY29uc3QgU3RyaW5nJiBzZHApCit7CisgICAgQVNTRVJUKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIG1fc2lnbmFs
aW5nQ2FsbGJhY2stPmhhbmRsZUV2ZW50KCJTRFBcbiIgKyBzZHAsIHRoaXMpOworfQorCit2b2lk
IERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZURhdGFTdHJlYW1NZXNzYWdlKGNv
bnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSA9IFN0cmluZzo6ZnJvbVVURjgoZGF0YSwgbGVuZ3RoKTsKKyAgICBkaXNwYXRjaEV2ZW50
KE1lc3NhZ2VFdmVudDo6Y3JlYXRlKFBhc3NPd25QdHI8TWVzc2FnZVBvcnRBcnJheT4oKSwgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUobWVzc2FnZSkpKTsKK30KKwordm9pZCBEZXByZWNh
dGVkUGVlckNvbm5lY3Rpb246OmRpZEFkZFJlbW90ZVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcj4gc3RyZWFtRGVzY3JpcHRvcikKK3sKKyAgICBBU1NFUlQoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisKKyAgICBpZiAobV9yZWFkeVN0
YXRlID09IENMT1NFRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPE1lZGlhU3RyZWFt
PiBzdHJlYW0gPSBNZWRpYVN0cmVhbTo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwg
c3RyZWFtRGVzY3JpcHRvcik7CisgICAgbV9yZW1vdGVTdHJlYW1zLT5hcHBlbmQoc3RyZWFtKTsK
KworICAgIGRpc3BhdGNoRXZlbnQoTWVkaWFTdHJlYW1FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5hZGRzdHJlYW1FdmVudCwgZmFsc2UsIGZhbHNlLCBzdHJlYW0ucmVsZWFzZSgpKSk7Cit9CisK
K3ZvaWQgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uOjpkaWRSZW1vdmVSZW1vdGVTdHJlYW0oTWVk
aWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW1EZXNjcmlwdG9yKQoreworICAgIEFTU0VSVChzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBBU1NFUlQoc3Ry
ZWFtRGVzY3JpcHRvci0+b3duZXIoKSk7CisKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVh
bSA9IHN0YXRpY19jYXN0PE1lZGlhU3RyZWFtKj4oc3RyZWFtRGVzY3JpcHRvci0+b3duZXIoKSk7
CisgICAgc3RyZWFtLT5zdHJlYW1FbmRlZCgpOworCisgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBD
TE9TRUQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3JlbW90ZVN0cmVhbXMtPmNv
bnRhaW5zKHN0cmVhbS5nZXQoKSkpOworICAgIG1fcmVtb3RlU3RyZWFtcy0+cmVtb3ZlKHN0cmVh
bS5nZXQoKSk7CisKKyAgICBkaXNwYXRjaEV2ZW50KE1lZGlhU3RyZWFtRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkucmVtb3Zlc3RyZWFtRXZlbnQsIGZhbHNlLCBmYWxzZSwgc3RyZWFtLnJlbGVh
c2UoKSkpOworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlv
bjo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRl
cmZhY2VGb3JEZXByZWNhdGVkUGVlckNvbm5lY3Rpb247Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOworfQorCit2b2lkIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbjo6c3RvcCgpCit7Cisg
ICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBDTE9TRUQpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
aW5pdGlhbE5lZ290aWF0aW9uVGltZXIuc3RvcCgpOworICAgIG1fc3RyZWFtQ2hhbmdlVGltZXIu
c3RvcCgpOworICAgIG1fcmVhZHlTdGF0ZUNoYW5nZVRpbWVyLnN0b3AoKTsKKworICAgIGlmICht
X3BlZXJIYW5kbGVyKQorICAgICAgICBtX3BlZXJIYW5kbGVyLT5zdG9wKCk7CisKKyAgICB1bnNl
dFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBtX3BlZXJIYW5kbGVyLmNsZWFyKCk7CisKKyAg
ICBjaGFuZ2VSZWFkeVN0YXRlKENMT1NFRCk7Cit9CisKK0V2ZW50VGFyZ2V0RGF0YSogRGVwcmVj
YXRlZFBlZXJDb25uZWN0aW9uOjpldmVudFRhcmdldERhdGEoKQoreworICAgIHJldHVybiAmbV9l
dmVudFRhcmdldERhdGE7Cit9CisKK0V2ZW50VGFyZ2V0RGF0YSogRGVwcmVjYXRlZFBlZXJDb25u
ZWN0aW9uOjplbnN1cmVFdmVudFRhcmdldERhdGEoKQoreworICAgIHJldHVybiAmbV9ldmVudFRh
cmdldERhdGE7Cit9CisKK3ZvaWQgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uOjpzY2hlZHVsZUlu
aXRpYWxOZWdvdGlhdGlvbigpCit7CisgICAgQVNTRVJUKCFtX2luaXRpYWxOZWdvdGlhdGlvblRp
bWVyLmlzQWN0aXZlKCkpOworCisgICAgbV9pbml0aWFsTmVnb3RpYXRpb25UaW1lci5zdGFydE9u
ZVNob3QoMCk7Cit9CisKK3ZvaWQgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uOjppbml0aWFsTmVn
b3RpYXRpb25UaW1lckZpcmVkKFRpbWVyPERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbj4qIHRpbWVy
KQoreworICAgIEFTU0VSVF9VTlVTRUQodGltZXIsIHRpbWVyID09ICZtX2luaXRpYWxOZWdvdGlh
dGlvblRpbWVyKTsKKworICAgIGlmIChtX2ljZVN0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciBwZW5kaW5nQWRkU3RyZWFtczsKKyAgICBt
X3BlbmRpbmdBZGRTdHJlYW1zLnN3YXAocGVuZGluZ0FkZFN0cmVhbXMpOworICAgIGlmIChtX3Bl
ZXJIYW5kbGVyKQorICAgICAgICBtX3BlZXJIYW5kbGVyLT5wcm9kdWNlSW5pdGlhbE9mZmVyKHBl
bmRpbmdBZGRTdHJlYW1zKTsKKworICAgIG1faWNlU3RhcnRlZCA9IHRydWU7CisKKyAgICBjaGFu
Z2VSZWFkeVN0YXRlKE5FR09USUFUSU5HKTsKK30KKwordm9pZCBEZXByZWNhdGVkUGVlckNvbm5l
Y3Rpb246OmVuc3VyZVN0cmVhbUNoYW5nZVNjaGVkdWxlZCgpCit7CisgICAgaWYgKCFtX3N0cmVh
bUNoYW5nZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fc3RyZWFtQ2hhbmdlVGltZXIuc3Rh
cnRPbmVTaG90KDApOworfQorCit2b2lkIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbjo6c3RyZWFt
Q2hhbmdlVGltZXJGaXJlZChUaW1lcjxEZXByZWNhdGVkUGVlckNvbm5lY3Rpb24+KiB0aW1lcikK
K3sKKyAgICBBU1NFUlRfVU5VU0VEKHRpbWVyLCB0aW1lciA9PSAmbV9zdHJlYW1DaGFuZ2VUaW1l
cik7CisKKyAgICBpZiAoIW1fcGVuZGluZ0FkZFN0cmVhbXMuaXNFbXB0eSgpICYmICFtX3BlbmRp
bmdSZW1vdmVTdHJlYW1zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTWVkaWFT
dHJlYW1EZXNjcmlwdG9yVmVjdG9yIHBlbmRpbmdBZGRTdHJlYW1zOworICAgIE1lZGlhU3RyZWFt
RGVzY3JpcHRvclZlY3RvciBwZW5kaW5nUmVtb3ZlU3RyZWFtczsKKworICAgIG1fcGVuZGluZ0Fk
ZFN0cmVhbXMuc3dhcChwZW5kaW5nQWRkU3RyZWFtcyk7CisgICAgbV9wZW5kaW5nUmVtb3ZlU3Ry
ZWFtcy5zd2FwKHBlbmRpbmdSZW1vdmVTdHJlYW1zKTsKKworICAgIGlmIChtX3BlZXJIYW5kbGVy
KQorICAgICAgICBtX3BlZXJIYW5kbGVyLT5wcm9jZXNzUGVuZGluZ1N0cmVhbXMocGVuZGluZ0Fk
ZFN0cmVhbXMsIHBlbmRpbmdSZW1vdmVTdHJlYW1zKTsKKworICAgIGlmICghcGVuZGluZ0FkZFN0
cmVhbXMuaXNFbXB0eSgpKQorICAgICAgICBjaGFuZ2VSZWFkeVN0YXRlKE5FR09USUFUSU5HKTsK
K30KKwordm9pZCBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb246OnNjaGVkdWxlUmVhZHlTdGF0ZUNo
YW5nZShSZWFkeVN0YXRlIHJlYWR5U3RhdGUpCit7CisgICAgbV9wZW5kaW5nUmVhZHlTdGF0ZXMu
YXBwZW5kKHJlYWR5U3RhdGUpOworICAgIGlmICghbV9yZWFkeVN0YXRlQ2hhbmdlVGltZXIuaXNB
Y3RpdmUoKSkKKyAgICAgICAgbV9yZWFkeVN0YXRlQ2hhbmdlVGltZXIuc3RhcnRPbmVTaG90KDAp
OworfQorCit2b2lkIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbjo6cmVhZHlTdGF0ZUNoYW5nZVRp
bWVyRmlyZWQoVGltZXI8RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uPiogdGltZXIpCit7CisgICAg
QVNTRVJUX1VOVVNFRCh0aW1lciwgdGltZXIgPT0gJm1fcmVhZHlTdGF0ZUNoYW5nZVRpbWVyKTsK
KworICAgIFZlY3RvcjxSZWFkeVN0YXRlPiBwZW5kaW5nUmVhZHlTdGF0ZXM7CisgICAgbV9wZW5k
aW5nUmVhZHlTdGF0ZXMuc3dhcChwZW5kaW5nUmVhZHlTdGF0ZXMpOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwZW5kaW5nUmVhZHlTdGF0ZXMuc2l6ZSgpOyBpKyspCisgICAgICAgIGNo
YW5nZVJlYWR5U3RhdGUocGVuZGluZ1JlYWR5U3RhdGVzW2ldKTsKK30KKwordm9pZCBEZXByZWNh
dGVkUGVlckNvbm5lY3Rpb246OmNoYW5nZVJlYWR5U3RhdGUoUmVhZHlTdGF0ZSByZWFkeVN0YXRl
KQoreworICAgIGlmIChyZWFkeVN0YXRlID09IG1fcmVhZHlTdGF0ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9yZWFkeVN0YXRlID0gcmVhZHlTdGF0ZTsKKworICAgIHN3aXRjaCAobV9yZWFk
eVN0YXRlKSB7CisgICAgY2FzZSBORVc6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIE5FR09USUFUSU5HOgorICAgICAgICBkaXNwYXRjaEV2
ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbm5lY3RpbmdFdmVudCwgZmFsc2UsIGZh
bHNlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQUNUSVZFOgorICAgICAgICBkaXNwYXRj
aEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLm9wZW5FdmVudCwgZmFsc2UsIGZhbHNl
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0xPU0VEOgorICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0YXRl
Y2hhbmdlRXZlbnQsIGZhbHNlLCBmYWxzZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9u
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDQ1Mjg0OGI3YjI3OTRmYWUyMGRmNTllMDY4MmQ3OTRjYTEzYzRjNQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vRGVw
cmVjYXRlZFBlZXJDb25uZWN0aW9uLmgKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uX2gKKyNkZWZpbmUgRGVwcmVjYXRlZFBl
ZXJDb25uZWN0aW9uX2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJB
Y3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5k
bGVyLmgiCisjaW5jbHVkZSAiRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5o
IgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQmFzZS5oIgor
I2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1MaXN0LmgiCisj
aW5jbHVkZSAiU2lnbmFsaW5nQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKy8vIE5vdGU6CisvLyBTRFAgc3RhbmRzIGZvciBTZXNzaW9uIERlc2Ny
aXB0aW9uIFByb3RvY29sLCB3aGljaCBpcyBpbnRlbmRlZCBmb3IgZGVzY3JpYmluZworLy8gbXVs
dGltZWRpYSBzZXNzaW9ucyBmb3IgdGhlIHB1cnBvc2VzIG9mIHNlc3Npb24gYW5ub3VuY2VtZW50
LCBzZXNzaW9uCisvLyBpbnZpdGF0aW9uLCBhbmQgb3RoZXIgZm9ybXMgb2YgbXVsdGltZWRpYSBz
ZXNzaW9uIGluaXRpYXRpb24uCisvLworLy8gTW9yZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQg
aGVyZToKKy8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ1NjYKKy8vIGh0dHA6Ly9l
bi53aWtpcGVkaWEub3JnL3dpa2kvU2Vzc2lvbl9EZXNjcmlwdGlvbl9Qcm90b2NvbAorCitjbGFz
cyBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxEZXByZWNhdGVk
UGVlckNvbm5lY3Rpb24+LCBwdWJsaWMgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckNs
aWVudCwgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEZXByZWNhdGVkUGVlckNvbm5lY3Rpb24+IGNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0
aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNrPik7CisgICAgfkRlcHJlY2F0ZWRQZWVy
Q29ubmVjdGlvbigpOworCisgICAgdm9pZCBwcm9jZXNzU2lnbmFsaW5nTWVzc2FnZShjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIFJlYWR5U3RhdGUgcmVhZHlT
dGF0ZSgpIGNvbnN0OworCisgICAgdm9pZCBzZW5kKGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZvaWQgYWRkU3RyZWFtKGNvbnN0IFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW0+LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCByZW1vdmVTdHJlYW0oTWVkaWFTdHJlYW0q
LCBFeGNlcHRpb25Db2RlJik7CisgICAgTWVkaWFTdHJlYW1MaXN0KiBsb2NhbFN0cmVhbXMoKSBj
b25zdDsKKyAgICBNZWRpYVN0cmVhbUxpc3QqIHJlbW90ZVN0cmVhbXMoKSBjb25zdDsKKyAgICB2
b2lkIGNsb3NlKEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRf
TElTVEVORVIoY29ubmVjdGluZyk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5F
UihvcGVuKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKG1lc3NhZ2UpOwor
ICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoc3RhdGVjaGFuZ2UpOworICAgIERF
RklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYWRkc3RyZWFtKTsKKyAgICBERUZJTkVfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKHJlbW92ZXN0cmVhbSk7CisKKyAgICAvLyBQZWVyQ29ubmVj
dGlvbkhhbmRsZXJDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVJQ0VQcm9jZXNz
aW5nKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEdlbmVyYXRlU0RQKGNvbnN0IFN0cmluZyYgc2Rw
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNo
YXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRSZW1vdGVT
dHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+KTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVtb3ZlUmVtb3RlU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvciopOworICAgIHZp
cnR1YWwgdm9pZCBkaWRDaGFuZ2VTdGF0ZShSZWFkeVN0YXRlIHN0YXRlKSB7IGNoYW5nZVJlYWR5
U3RhdGUoc3RhdGUpOyB9CisKKyAgICAvLyBFdmVudFRhcmdldAorICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CisKKyAgICAv
LyBBY3RpdmVET01PYmplY3QKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOworCisgICAgdXNpbmcg
UmVmQ291bnRlZDxEZXByZWNhdGVkUGVlckNvbm5lY3Rpb24+OjpyZWY7CisgICAgdXNpbmcgUmVm
Q291bnRlZDxEZXByZWNhdGVkUGVlckNvbm5lY3Rpb24+OjpkZXJlZjsKKworcHJpdmF0ZToKKyAg
ICBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxsYmFj
az4pOworCisgICAgLy8gRXZlbnRUYXJnZXQgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCBF
dmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOworICAgIHZpcnR1YWwgRXZlbnRUYXJn
ZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVmRXZl
bnRUYXJnZXQoKSB7IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQo
KSB7IGRlcmVmKCk7IH0KKworICAgIHZvaWQgc2NoZWR1bGVJbml0aWFsTmVnb3RpYXRpb24oKTsK
KyAgICB2b2lkIGluaXRpYWxOZWdvdGlhdGlvblRpbWVyRmlyZWQoVGltZXI8RGVwcmVjYXRlZFBl
ZXJDb25uZWN0aW9uPiopOworICAgIHZvaWQgZW5zdXJlU3RyZWFtQ2hhbmdlU2NoZWR1bGVkKCk7
CisgICAgdm9pZCBzdHJlYW1DaGFuZ2VUaW1lckZpcmVkKFRpbWVyPERlcHJlY2F0ZWRQZWVyQ29u
bmVjdGlvbj4qKTsKKyAgICB2b2lkIHNjaGVkdWxlUmVhZHlTdGF0ZUNoYW5nZShSZWFkeVN0YXRl
KTsKKyAgICB2b2lkIHJlYWR5U3RhdGVDaGFuZ2VUaW1lckZpcmVkKFRpbWVyPERlcHJlY2F0ZWRQ
ZWVyQ29ubmVjdGlvbj4qKTsKKworICAgIHZvaWQgY2hhbmdlUmVhZHlTdGF0ZShSZWFkeVN0YXRl
KTsKKworICAgIFJlZlB0cjxTaWduYWxpbmdDYWxsYmFjaz4gbV9zaWduYWxpbmdDYWxsYmFjazsK
KworICAgIFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOworICAgIGJvb2wgbV9pY2VTdGFydGVkOwor
CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtTGlzdD4gbV9sb2NhbFN0cmVhbXM7CisgICAgUmVmUHRy
PE1lZGlhU3RyZWFtTGlzdD4gbV9yZW1vdGVTdHJlYW1zOworCisgICAgLy8gRXZlbnRUYXJnZXQg
aW1wbGVtZW50YXRpb24uCisgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOwor
CisgICAgVGltZXI8RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uPiBtX2luaXRpYWxOZWdvdGlhdGlv
blRpbWVyOworICAgIFRpbWVyPERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbj4gbV9zdHJlYW1DaGFu
Z2VUaW1lcjsKKyAgICBUaW1lcjxEZXByZWNhdGVkUGVlckNvbm5lY3Rpb24+IG1fcmVhZHlTdGF0
ZUNoYW5nZVRpbWVyOworCisgICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yIG1fcGVuZGlu
Z0FkZFN0cmVhbXM7CisgICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yIG1fcGVuZGluZ1Jl
bW92ZVN0cmVhbXM7CisgICAgVmVjdG9yPFJlYWR5U3RhdGU+IG1fcGVuZGluZ1JlYWR5U3RhdGVz
OworCisgICAgT3duUHRyPERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXI+IG1fcGVlckhh
bmRsZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
TUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8gRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vRGVwcmVjYXRlZFBl
ZXJDb25uZWN0aW9uLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vRGVw
cmVjYXRlZFBlZXJDb25uZWN0aW9uLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMWQ5ZDUxZjUxN2UyZmY3NDk3
YjRkZTE2YWYzNzczMWNiZmE5NjAyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb24uaWRsCkBAIC0wLDAg
KzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBwMnAgeworCisgICAgaW50ZXJmYWNlIFsK
KyAgICAgICAgQ29uZGl0aW9uYWw9TUVESUFfU1RSRUFNLAorICAgICAgICBBY3RpdmVET01PYmpl
Y3QsCisgICAgICAgIENvbnN0cnVjdG9yUGFyYW1ldGVycz0yLAorICAgICAgICBDb25zdHJ1Y3Rv
cihpbiBET01TdHJpbmcgc2VydmVyQ29uZmlndXJhdGlvbiwgaW4gW0NhbGxiYWNrXSBTaWduYWxp
bmdDYWxsYmFjayBzaWduYWxpbmdDYWxsYmFjayksCisgICAgICAgIENhbGxXaXRoPVNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQsCisgICAgICAgIEpTQ3VzdG9tQ29uc3RydWN0b3IsCisgICAgICAgIEV2
ZW50VGFyZ2V0CisgICAgXSBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb24geworICAgICAgICB2b2lk
IHByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKGluIERPTVN0cmluZyBtZXNzYWdlKQorICAgICAgICAg
ICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
TkVXID0gMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTkVHT1RJQVRJTkcgPSAxOwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBBQ1RJVkUgPSAyOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBDTE9TRUQgPSAzOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5z
aWduZWQgc2hvcnQgcmVhZHlTdGF0ZTsKKworICAgICAgICB2b2lkIHNlbmQoaW4gRE9NU3RyaW5n
IHRleHQpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCBhZGRTdHJlYW0oaW4gTWVkaWFTdHJlYW0gc3RyZWFtKQorICAg
ICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgcmVtb3ZlU3RyZWFtKGluIE1lZGlhU3RyZWFtIHN0cmVhbSkKKyAgICAgICAgICAg
IHJhaXNlcyhET01FeGNlcHRpb24pOworCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBNZWRp
YVN0cmVhbUxpc3QgbG9jYWxTdHJlYW1zOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgTWVk
aWFTdHJlYW1MaXN0IHJlbW90ZVN0cmVhbXM7CisKKyAgICAgICAgdm9pZCBjbG9zZSgpCisgICAg
ICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRM
aXN0ZW5lciBvbmNvbm5lY3Rpbmc7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9u
b3BlbjsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25tZXNzYWdlOworICAgICAg
ICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbnN0YXRlY2hhbmdlOworICAgICAgICBhdHRyaWJ1
dGUgRXZlbnRMaXN0ZW5lciBvbmFkZHN0cmVhbTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlz
dGVuZXIgb25yZW1vdmVzdHJlYW07CisKKyAgICAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNl
CisgICAgICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gdXNlQ2FwdHVy
ZSk7CisgICAgICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVu
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIGJvb2xl
YW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVudCBl
dmVudCkKKyAgICAgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7CisgICAgfTsKKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9JY2VDYWxsYmFj
ay5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9JY2VDYWxsYmFjay5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmY4ZWU4MzQ2Yjc0YTM1N2I0MWI4MDY4M2VhZTQwNjAxYTNmYjY2NGMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0ljZUNhbGxi
YWNrLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1
dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSWNlQ2FsbGJhY2tfaAorI2Rl
ZmluZSBJY2VDYWxsYmFja19oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJY2VD
YW5kaWRhdGU7CitjbGFzcyBQZWVyQ29ubmVjdGlvbjsKKworY2xhc3MgSWNlQ2FsbGJhY2sgOiBw
dWJsaWMgUmVmQ291bnRlZDxJY2VDYWxsYmFjaz4geworcHVibGljOgorICAgIHZpcnR1YWwgfklj
ZUNhbGxiYWNrKCkgeyB9CisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KEljZUNhbmRpZGF0
ZSosIGJvb2wgbW9yZVRvRm9sbG93LCBQZWVyQ29ubmVjdGlvbiopID0gMDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNl
bmRpZiAvLyBJY2VDYWxsYmFja19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL0ljZUNhbGxiYWNrLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vSWNlQ2FsbGJhY2suaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiM2QwZmQ3Njc2ZTY1YTI3MDI2
ZDEzYjY3ZTJlZTZlNDA2MzgzMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL0ljZUNhbGxiYWNrLmlkbApAQCAtMCwwICsxLDQwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
ICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworbW9kdWxlIHAycCB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1N
RURJQV9TVFJFQU0sCisgICAgICAgIENhbGxiYWNrCisgICAgXSBJY2VDYWxsYmFjayB7CisgICAg
ICAgIGJvb2xlYW4gaGFuZGxlRXZlbnQoaW4gSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSwgaW4gYm9v
bGVhbiBtb3JlVG9Gb2xsb3csIGluIFBlZXJDb25uZWN0aW9uIHNvdXJjZSk7CisgICAgfTsKKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9JY2VDYW5k
aWRhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9JY2VDYW5kaWRh
dGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjAwOTU3YTFlOGUwMTNhZTEyNWViN2Q0MTVlODdjNmRhODg3MmNj
MjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L0ljZUNhbmRpZGF0ZS5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24u
CisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJJY2VDYW5kaWRh
dGUuaCIKKworI2luY2x1ZGUgIkljZUNhbmRpZGF0ZUJhc2UuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitQYXNzUmVmUHRyPEljZUNhbmRpZGF0ZT4gSWNlQ2FuZGlkYXRlOjpjcmVhdGUoY29u
c3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgU3RyaW5nJiBjYW5kaWRhdGVMaW5lKQoreworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSWNlQ2FuZGlkYXRlKEljZUNhbmRpZGF0ZUJhc2U6OmNyZWF0ZShs
YWJlbCwgY2FuZGlkYXRlTGluZSkpKTsKK30KKworUGFzc1JlZlB0cjxJY2VDYW5kaWRhdGU+IElj
ZUNhbmRpZGF0ZTo6Y3JlYXRlKFBhc3NSZWZQdHI8SWNlQ2FuZGlkYXRlQmFzZT4gYmFzZSkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEljZUNhbmRpZGF0ZShiYXNlKSk7Cit9CisKK0ljZUNh
bmRpZGF0ZTo6SWNlQ2FuZGlkYXRlKFBhc3NSZWZQdHI8SWNlQ2FuZGlkYXRlQmFzZT4gYmFzZSkK
KyAgICA6IG1fYmFzZShiYXNlKQoreworfQorCitJY2VDYW5kaWRhdGU6On5JY2VDYW5kaWRhdGUo
KQoreworfQorCitTdHJpbmcgSWNlQ2FuZGlkYXRlOjpsYWJlbCgpCit7CisgICAgcmV0dXJuIG1f
YmFzZS0+bGFiZWwoKTsKK30KKworU3RyaW5nIEljZUNhbmRpZGF0ZTo6Y2FuZGlkYXRlTGluZSgp
Cit7CisgICAgcmV0dXJuIG1fYmFzZS0+Y2FuZGlkYXRlTGluZSgpOworfQorCitTdHJpbmcgSWNl
Q2FuZGlkYXRlOjp0b1NkcCgpCit7CisgICAgcmV0dXJuIG1fYmFzZS0+dG9TZHAoKTsKK30KKwor
SWNlQ2FuZGlkYXRlQmFzZSogSWNlQ2FuZGlkYXRlOjpiYXNlKCkKK3sKKyAgICByZXR1cm4gbV9i
YXNlLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9JY2VDYW5kaWRhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vSWNlQ2FuZGlkYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGRjYTkwY2JjMzY1ZGRlNDJhMGVjN2JmZGQ5
ZWI4NTNhMGQ1YTY3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vSWNlQ2FuZGlkYXRlLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0
cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgSWNlQ2FuZGlkYXRlX2gKKyNkZWZpbmUgSWNlQ2FuZGlkYXRlX2gKKworI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEljZUNhbmRp
ZGF0ZUJhc2U7CisKK2NsYXNzIEljZUNhbmRpZGF0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEljZUNh
bmRpZGF0ZT4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEljZUNhbmRpZGF0ZT4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFN0cmluZyYgY2FuZGlkYXRlTGluZSk7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SWNlQ2FuZGlkYXRlPiBjcmVhdGUoUGFzc1JlZlB0cjxJ
Y2VDYW5kaWRhdGVCYXNlPik7CisgICAgdmlydHVhbCB+SWNlQ2FuZGlkYXRlKCk7CisKKyAgICBT
dHJpbmcgbGFiZWwoKTsKKyAgICBTdHJpbmcgY2FuZGlkYXRlTGluZSgpOworCisgICAgU3RyaW5n
IHRvU2RwKCk7CisKKyAgICBJY2VDYW5kaWRhdGVCYXNlKiBiYXNlKCk7CisKK3ByaXZhdGU6Cisg
ICAgSWNlQ2FuZGlkYXRlKFBhc3NSZWZQdHI8SWNlQ2FuZGlkYXRlQmFzZT4pOworCisgICAgUmVm
UHRyPEljZUNhbmRpZGF0ZUJhc2U+IG1fYmFzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBJY2VDYW5k
aWRhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9J
Y2VDYW5kaWRhdGUuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9JY2VD
YW5kaWRhdGUuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlNTZmNTRlN2ViNTQ5ODJjMjllOTFjNjBjMzM0Mjcw
OWFlZTViZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL0ljZUNhbmRpZGF0ZS5pZGwKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmli
dXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBw
MnAgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9TUVESUFfU1RSRUFN
LAorICAgICAgICBDb25zdHJ1Y3RvcihpbiBET01TdHJpbmcgbGFiZWwsIGluIERPTVN0cmluZyBj
YW5kaWRhdGVMaW5lKQorICAgIF0gSWNlQ2FuZGlkYXRlIHsKKyAgICAgICAgLy8gdGhlIG09IGxp
bmUgdGhpcyBjYW5kaWRhdGUgaXMgYXNzb2NpYXRlZCB3aXRoCisgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBET01TdHJpbmcgbGFiZWw7CisKKyAgICAgICAgLy8gY3JlYXRlcyBhIFNEUC1pemVk
IGZvcm0gb2YgdGhpcyBjYW5kaWRhdGUKKyAgICAgICAgRE9NU3RyaW5nIHRvU2RwKCk7CisgICAg
fTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUhpbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFI
aW50cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzRmYmUxNmQ4MTVjODZiYWRlYWM2MDFmZTYxMzQ1NTVlMzkz
ZGE0YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFIaW50cy5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24u
CisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJNZWRpYUhpbnRz
LmgiCisKKyNpbmNsdWRlICJNZWRpYUhpbnRzQmFzZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1Bhc3NSZWZQdHI8TWVkaWFIaW50cz4gTWVkaWFIaW50czo6Y3JlYXRlKGJvb2wgYXVkaW8s
IGJvb2wgdmlkZW8pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYUhpbnRzKE1lZGlh
SGludHNCYXNlOjpjcmVhdGUoYXVkaW8sIHZpZGVvKSkpOworfQorCitNZWRpYUhpbnRzOjpNZWRp
YUhpbnRzKFBhc3NSZWZQdHI8TWVkaWFIaW50c0Jhc2U+IGJhc2UpCisgICAgOiBtX2Jhc2UoYmFz
ZSkKK3sKK30KKworTWVkaWFIaW50czo6fk1lZGlhSGludHMoKQoreworfQorCitib29sIE1lZGlh
SGludHM6OmF1ZGlvKCkKK3sKKyAgICByZXR1cm4gbV9iYXNlLT5hdWRpbygpOworfQorCit2b2lk
IE1lZGlhSGludHM6OnNldEF1ZGlvKGJvb2wgYXVkaW8pCit7CisgICAgbV9iYXNlLT5zZXRBdWRp
byhhdWRpbyk7Cit9CisKK2Jvb2wgTWVkaWFIaW50czo6dmlkZW8oKQoreworICAgIHJldHVybiBt
X2Jhc2UtPnZpZGVvKCk7Cit9CisKK3ZvaWQgTWVkaWFIaW50czo6c2V0VmlkZW8oYm9vbCB2aWRl
bykKK3sKKyAgICBtX2Jhc2UtPnNldFZpZGVvKHZpZGVvKTsKK30KKworTWVkaWFIaW50c0Jhc2Uq
IE1lZGlhSGludHM6OmJhc2UoKQoreworICAgIHJldHVybiBtX2Jhc2UuZ2V0KCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhSGludHMu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFIaW50cy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjM1YmZmNjBhYzgzNjlmNmY5ODQ0MDYxMmNjOGQ2N2EyNWUyMzU3MzQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhSGludHMu
aApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
CisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNZWRpYUhpbnRzX2gKKyNkZWZpbmUg
TWVkaWFIaW50c19oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNZWRpYUhpbnRzQmFz
ZTsKKworY2xhc3MgTWVkaWFIaW50cyA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhSGludHM+IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUhpbnRzPiBjcmVhdGUoYm9vbCBh
dWRpbywgYm9vbCB2aWRlbyk7CisgICAgdmlydHVhbCB+TWVkaWFIaW50cygpOworCisgICAgYm9v
bCBhdWRpbygpOworICAgIHZvaWQgc2V0QXVkaW8oYm9vbCk7CisKKyAgICBib29sIHZpZGVvKCk7
CisgICAgdm9pZCBzZXRWaWRlbyhib29sKTsKKworICAgIE1lZGlhSGludHNCYXNlKiBiYXNlKCk7
CisKKyBwcml2YXRlOgorICAgIE1lZGlhSGludHMoUGFzc1JlZlB0cjxNZWRpYUhpbnRzQmFzZT4p
OworCisgICAgUmVmUHRyPE1lZGlhSGludHNCYXNlPiBtX2Jhc2U7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjZW5kaWYg
Ly8gTWVkaWFIaW50c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhSGludHMuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9NZWRpYUhpbnRzLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjI2N2Q4OGJlMzE1ZDgyY2IxNDQ3MjQxYWYy
NzQ0NDk1OTNiN2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYUhpbnRzLmlkbApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxl
IHAycCB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1NRURJQV9TVFJF
QU0sCisgICAgICAgIENvbnN0cnVjdG9yKGluIGJvb2xlYW4gYXVkaW8sIGluIGJvb2xlYW4gdmlk
ZW8pCisgICAgXSBNZWRpYUhpbnRzIHsKKyAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gYXVkaW87
CisgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuIHZpZGVvOworICAgIH07CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5jcHAK
aW5kZXggNGRkM2JmMGRhMjVjY2I0MzE3NDNlZjc4Zjg4MGVlMTc5N2ZlYWRkMS4uNTgzZGVmYjI2
NmY1NTJhMzhhZjFkMjZmMDMxYjRiOTdkNGRhZmQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5jcHAKQEAgLTEsNjEgKzEs
NjggQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMK
KyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
UGVlckNvbm5lY3Rpb24uaCIKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKKyNpbmNsdWRl
ICJQZWVyQ29ubmVjdGlvbi5oIgorCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1
ZGUgIkljZUNhbGxiYWNrLmgiCisjaW5jbHVkZSAiSWNlQ2FuZGlkYXRlLmgiCisjaW5jbHVkZSAi
SWNlQ2FuZGlkYXRlQmFzZS5oIgorI2luY2x1ZGUgIkljZU9wdGlvbnMuaCIKKyNpbmNsdWRlICJN
ZWRpYUhpbnRzLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1FdmVudC5oIgogI2luY2x1ZGUgIk1l
c3NhZ2VFdmVudC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlNlc3Npb25EZXNjcmlwdGlvbi5oIgor
I2luY2x1ZGUgIlNlc3Npb25EZXNjcmlwdGlvbkJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1QYXNzUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmln
dXJhdGlvbiwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxsYmFjaz4gc2lnbmFsaW5nQ2FsbGJhY2sp
CitQYXNzUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJh
dGlvbiwgUGFzc1JlZlB0cjxJY2VDYWxsYmFjaz4gaWNlQ2FsbGJhY2spCiB7Ci0gICAgUmVmUHRy
PFBlZXJDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gYWRvcHRSZWYobmV3IFBlZXJDb25uZWN0aW9u
KGNvbnRleHQsIHNlcnZlckNvbmZpZ3VyYXRpb24sIHNpZ25hbGluZ0NhbGxiYWNrKSk7Ci0gICAg
Y29ubmVjdGlvbi0+c2V0UGVuZGluZ0FjdGl2aXR5KGNvbm5lY3Rpb24uZ2V0KCkpOwotICAgIGNv
bm5lY3Rpb24tPnNjaGVkdWxlSW5pdGlhbE5lZ290aWF0aW9uKCk7Ci0gICAgY29ubmVjdGlvbi0+
c3VzcGVuZElmTmVlZGVkKCk7Ci0KLSAgICByZXR1cm4gY29ubmVjdGlvbi5yZWxlYXNlKCk7Cisg
ICAgUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbiA9IGFkb3B0UmVmKG5ldyBQ
ZWVyQ29ubmVjdGlvbihjb250ZXh0LCBzZXJ2ZXJDb25maWd1cmF0aW9uLCBpY2VDYWxsYmFjaykp
OworICAgIHBlZXJDb25uZWN0aW9uLT5zdXNwZW5kSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gcGVl
ckNvbm5lY3Rpb24ucmVsZWFzZSgpOwogfQogCi1QZWVyQ29ubmVjdGlvbjo6UGVlckNvbm5lY3Rp
b24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJD
b25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNrPiBzaWduYWxpbmdDYWxs
YmFjaykKK1BlZXJDb25uZWN0aW9uOjpQZWVyQ29ubmVjdGlvbihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQ
dHI8SWNlQ2FsbGJhY2s+IGljZUNhbGxiYWNrKQogICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRl
eHQsIHRoaXMpCi0gICAgLCBtX3NpZ25hbGluZ0NhbGxiYWNrKHNpZ25hbGluZ0NhbGxiYWNrKQor
ICAgICwgbV9pY2VDYWxsYmFjayhpY2VDYWxsYmFjaykKICAgICAsIG1fcmVhZHlTdGF0ZShORVcp
Ci0gICAgLCBtX2ljZVN0YXJ0ZWQoZmFsc2UpCisgICAgLCBtX2ljZVN0YXRlKElDRV9DTE9TRUQp
CiAgICAgLCBtX2xvY2FsU3RyZWFtcyhNZWRpYVN0cmVhbUxpc3Q6OmNyZWF0ZSgpKQogICAgICwg
bV9yZW1vdGVTdHJlYW1zKE1lZGlhU3RyZWFtTGlzdDo6Y3JlYXRlKCkpCi0gICAgLCBtX2luaXRp
YWxOZWdvdGlhdGlvblRpbWVyKHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6aW5pdGlhbE5lZ290aWF0
aW9uVGltZXJGaXJlZCkKLSAgICAsIG1fc3RyZWFtQ2hhbmdlVGltZXIodGhpcywgJlBlZXJDb25u
ZWN0aW9uOjpzdHJlYW1DaGFuZ2VUaW1lckZpcmVkKQotICAgICwgbV9yZWFkeVN0YXRlQ2hhbmdl
VGltZXIodGhpcywgJlBlZXJDb25uZWN0aW9uOjpyZWFkeVN0YXRlQ2hhbmdlVGltZXJGaXJlZCkK
ICAgICAsIG1fcGVlckhhbmRsZXIoUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpjcmVhdGUodGhpcywg
c2VydmVyQ29uZmlndXJhdGlvbiwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmco
KSkpCiB7CiB9CkBAIC02NCw1NCArNzEsMTgyIEBAIFBlZXJDb25uZWN0aW9uOjp+UGVlckNvbm5l
Y3Rpb24oKQogewogfQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpwcm9jZXNzU2lnbmFsaW5nTWVz
c2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQorYm9vbCBQZWVy
Q29ubmVjdGlvbjo6aGFzTG9jYWxBdWRpb1RyYWNrKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fbG9jYWxTdHJlYW1zLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIE1lZGlhU3Ry
ZWFtKiBjdXJyID0gbV9sb2NhbFN0cmVhbXMtPml0ZW0oaSk7CisgICAgICAgIGlmIChjdXJyLT5h
dWRpb1RyYWNrcygpLT5sZW5ndGgoKSA+IDApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBlZXJDb25uZWN0aW9uOjpoYXNMb2Nh
bFZpZGVvVHJhY2soKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9sb2NhbFN0cmVh
bXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgTWVkaWFTdHJlYW0qIGN1cnIgPSBtX2xvY2Fs
U3RyZWFtcy0+aXRlbShpKTsKKyAgICAgICAgaWYgKGN1cnItPnZpZGVvVHJhY2tzKCktPmxlbmd0
aCgpID4gMCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK1Bhc3NSZWZQdHI8TWVkaWFIaW50cz4gUGVlckNvbm5lY3Rpb246OnBhcnNlTWVk
aWFIaW50cyhjb25zdCBTdHJpbmcmIG1lZGlhSGludHMpCit7CisgICAgVmVjdG9yPFN0cmluZz4g
aGludHNMaXN0OworICAgIG1lZGlhSGludHMuc3BsaXQoIiwiLCBoaW50c0xpc3QpOworICAgIGJv
b2wgYXVkaW8gPSBoYXNMb2NhbEF1ZGlvVHJhY2soKTsKKyAgICBib29sIHZpZGVvID0gaGFzTG9j
YWxWaWRlb1RyYWNrKCk7CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6aXRlcmF0b3IgaSA9IGhp
bnRzTGlzdC5iZWdpbigpOyBpICE9IGhpbnRzTGlzdC5lbmQoKTsgKytpKSB7CisgICAgICAgIGlm
ICgqaSA9PSAiYXVkaW8iKQorICAgICAgICAgICAgYXVkaW8gPSB0cnVlOworICAgICAgICBlbHNl
IGlmICgqaSA9PSAibm9fYXVkaW8iKQorICAgICAgICAgICAgYXVkaW8gPSBmYWxzZTsKKyAgICAg
ICAgZWxzZSBpZiAoKmkgPT0gInZpZGVvIikKKyAgICAgICAgICAgIHZpZGVvID0gdHJ1ZTsKKyAg
ICAgICAgZWxzZSBpZiAoKmkgPT0gIm5vX3ZpZGVvIikKKyAgICAgICAgICAgIHZpZGVvID0gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIE1lZGlhSGludHM6OmNyZWF0ZShhdWRpbywgdmlkZW8p
OworfQorCitQYXNzUmVmUHRyPFNlc3Npb25EZXNjcmlwdGlvbj4gUGVlckNvbm5lY3Rpb246OmNy
ZWF0ZU9mZmVyKCkKK3sKKyAgICByZXR1cm4gY3JlYXRlT2ZmZXIoIiIpOworfQorCitQYXNzUmVm
UHRyPFNlc3Npb25EZXNjcmlwdGlvbj4gUGVlckNvbm5lY3Rpb246OmNyZWF0ZU9mZmVyKGNvbnN0
IFN0cmluZyYgbWVkaWFIaW50c1N0cmluZykKK3sKKyAgICBSZWZQdHI8TWVkaWFIaW50cz4gbWVk
aWFIaW50cyA9IHBhcnNlTWVkaWFIaW50cyhtZWRpYUhpbnRzU3RyaW5nKTsKKyAgICByZXR1cm4g
U2Vzc2lvbkRlc2NyaXB0aW9uOjpjcmVhdGUobV9wZWVySGFuZGxlci0+Y3JlYXRlT2ZmZXIobWVk
aWFIaW50cy5yZWxlYXNlKCkpKTsKK30KKworUGFzc1JlZlB0cjxTZXNzaW9uRGVzY3JpcHRpb24+
IFBlZXJDb25uZWN0aW9uOjpjcmVhdGVBbnN3ZXIoY29uc3QgU3RyaW5nJiBvZmZlcikKK3sKKyAg
ICByZXR1cm4gY3JlYXRlQW5zd2VyKG9mZmVyLCAiIik7Cit9CisKK1Bhc3NSZWZQdHI8U2Vzc2lv
bkRlc2NyaXB0aW9uPiBQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlQW5zd2VyKGNvbnN0IFN0cmluZyYg
b2ZmZXIsIGNvbnN0IFN0cmluZyYgbWVkaWFIaW50c1N0cmluZykKK3sKKyAgICBSZWZQdHI8TWVk
aWFIaW50cz4gbWVkaWFIaW50cyA9IHBhcnNlTWVkaWFIaW50cyhtZWRpYUhpbnRzU3RyaW5nKTsK
KyAgICByZXR1cm4gU2Vzc2lvbkRlc2NyaXB0aW9uOjpjcmVhdGUobV9wZWVySGFuZGxlci0+Y3Jl
YXRlQW5zd2VyKG9mZmVyLCBtZWRpYUhpbnRzLnJlbGVhc2UoKSkpOworfQorCit2b2lkIFBlZXJD
b25uZWN0aW9uOjpzZXRMb2NhbERlc2NyaXB0aW9uKGludCBhY3Rpb24sIFBhc3NSZWZQdHI8U2Vz
c2lvbkRlc2NyaXB0aW9uPiBzZXNzaW9uRGVzY3JpcHRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gQ0xPU0VEKSB7CiAgICAgICAgIGVjID0gSU5WQUxJ
RF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIW1lc3NhZ2Uu
c3RhcnRzV2l0aCgiU0RQXG4iKSkKKyAgICBzd2l0Y2ggKGFjdGlvbikgeworICAgIGNhc2UgU0RQ
X09GRkVSOgorICAgIGNhc2UgU0RQX1BSQU5TV0VSOgorICAgIGNhc2UgU0RQX0FOU1dFUjoKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAg
ICAgICByZXR1cm47CisgICAgfQogCi0gICAgU3RyaW5nIHNkcCA9IG1lc3NhZ2Uuc3Vic3RyaW5n
KDQpOworICAgIGlmICghc2Vzc2lvbkRlc2NyaXB0aW9uKSB7CisgICAgICAgIGVjID0gVFlQRV9N
SVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIHZhbGlkID0g
bV9wZWVySGFuZGxlci0+c2V0TG9jYWxEZXNjcmlwdGlvbihhY3Rpb24sIHNlc3Npb25EZXNjcmlw
dGlvbi0+YmFzZSgpKTsKKyAgICBpZiAoIXZhbGlkKQorICAgICAgICBlYyA9IFNZTlRBWF9FUlI7
Cit9CiAKLSAgICBpZiAobV9pY2VTdGFydGVkKSB7Ci0gICAgICAgIGlmIChtX3BlZXJIYW5kbGVy
KQotICAgICAgICAgICAgbV9wZWVySGFuZGxlci0+cHJvY2Vzc1NEUChzZHApOwordm9pZCBQZWVy
Q29ubmVjdGlvbjo6c2V0UmVtb3RlRGVzY3JpcHRpb24oaW50IGFjdGlvbiwgUGFzc1JlZlB0cjxT
ZXNzaW9uRGVzY3JpcHRpb24+IHNlc3Npb25EZXNjcmlwdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBDTE9TRUQpIHsKKyAgICAgICAgZWMgPSBJTlZB
TElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3BlZXJI
YW5kbGVyKQotICAgICAgICBtX3BlZXJIYW5kbGVyLT5oYW5kbGVJbml0aWFsT2ZmZXIoc2RwKTsK
KyAgICBzd2l0Y2ggKGFjdGlvbikgeworICAgIGNhc2UgU0RQX09GRkVSOgorICAgIGNhc2UgU0RQ
X1BSQU5TV0VSOgorICAgIGNhc2UgU0RQX0FOU1dFUjoKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFzZXNzaW9uRGVzY3JpcHRpb24pIHsKKyAgICAgICAgZWMgPSBUWVBFX01JU01B
VENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGVuc3VyZVN0cmVhbUNoYW5n
ZVNjaGVkdWxlZCgpOwotICAgIG1faWNlU3RhcnRlZCA9IHRydWU7Ci0gICAgc2NoZWR1bGVSZWFk
eVN0YXRlQ2hhbmdlKE5FR09USUFUSU5HKTsKKyAgICBib29sIHZhbGlkID0gbV9wZWVySGFuZGxl
ci0+c2V0UmVtb3RlRGVzY3JpcHRpb24oYWN0aW9uLCBzZXNzaW9uRGVzY3JpcHRpb24tPmJhc2Uo
KSk7CisgICAgaWYgKCF2YWxpZCkKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogfQogCi1QZWVy
Q29ubmVjdGlvbjo6UmVhZHlTdGF0ZSBQZWVyQ29ubmVjdGlvbjo6cmVhZHlTdGF0ZSgpIGNvbnN0
CitTZXNzaW9uRGVzY3JpcHRpb24qIFBlZXJDb25uZWN0aW9uOjpsb2NhbERlc2NyaXB0aW9uKCkK
IHsKLSAgICByZXR1cm4gbV9yZWFkeVN0YXRlOworICAgIHJldHVybiBTZXNzaW9uRGVzY3JpcHRp
b246OmNyZWF0ZShtX3BlZXJIYW5kbGVyLT5sb2NhbERlc2NyaXB0aW9uKCkpLmdldCgpOwogfQog
Ci12b2lkIFBlZXJDb25uZWN0aW9uOjpzZW5kKGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9u
Q29kZSYgZWMpCitTZXNzaW9uRGVzY3JpcHRpb24qIFBlZXJDb25uZWN0aW9uOjpyZW1vdGVEZXNj
cmlwdGlvbigpCit7CisgICAgcmV0dXJuIFNlc3Npb25EZXNjcmlwdGlvbjo6Y3JlYXRlKG1fcGVl
ckhhbmRsZXItPmxvY2FsRGVzY3JpcHRpb24oKSkuZ2V0KCk7Cit9CisKK3ZvaWQgUGVlckNvbm5l
Y3Rpb246OnN0YXJ0SWNlKEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHN0YXJ0SWNlKCIiLCBl
Yyk7Cit9CisKK3ZvaWQgUGVlckNvbm5lY3Rpb246OnN0YXJ0SWNlKGNvbnN0IFN0cmluZyYgb3B0
aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBDTE9T
RUQpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIENTdHJpbmcgZGF0YSA9IHRleHQudXRmOCgpOwotICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGRhdGEubGVuZ3RoKCk7CisgICAgSWNlT3B0aW9uczo6VXNlQ2FuZGlkYXRlc09wdGlv
biBvcHRpb247CiAKLSAgICBpZiAobGVuZ3RoID4gNTA0KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJ
RF9BQ0NFU1NfRVJSOworICAgIGlmIChvcHRpb25zID09ICIiIHx8IG9wdGlvbnMgPT0gImFsbCIp
CisgICAgICAgIG9wdGlvbiA9IEljZU9wdGlvbnM6OkFMTDsKKyAgICBlbHNlIGlmIChvcHRpb25z
ID09ICJub19yZWxheSIpCisgICAgICAgIG9wdGlvbiA9IEljZU9wdGlvbnM6Ok5PX1JFTEFZOwor
ICAgIGVsc2UgaWYgKG9wdGlvbnMgPT0gIm9ubHlfcmVsYXkiKQorICAgICAgICBvcHRpb24gPSBJ
Y2VPcHRpb25zOjpPTkxZX1JFTEFZOworICAgIGVsc2UgeworICAgICAgICBlYyA9IFRZUEVfTUlT
TUFUQ0hfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fcGVlckhhbmRs
ZXIpCi0gICAgICAgIG1fcGVlckhhbmRsZXItPnNlbmREYXRhU3RyZWFtTWVzc2FnZShkYXRhLmRh
dGEoKSwgbGVuZ3RoKTsKKyAgICBib29sIHZhbGlkID0gbV9wZWVySGFuZGxlci0+c3RhcnRJY2Uo
SWNlT3B0aW9uczo6Y3JlYXRlKG9wdGlvbikpOworICAgIGlmICghdmFsaWQpCisgICAgICAgIGVj
ID0gU1lOVEFYX0VSUjsKK30KKwordm9pZCBQZWVyQ29ubmVjdGlvbjo6cHJvY2Vzc0ljZU1lc3Nh
Z2UoUGFzc1JlZlB0cjxJY2VDYW5kaWRhdGU+IGljZUNhbmRpZGF0ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBDTE9TRUQpIHsKKyAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wgdmFs
aWQgPSBtX3BlZXJIYW5kbGVyLT5wcm9jZXNzSWNlTWVzc2FnZShpY2VDYW5kaWRhdGUtPmJhc2Uo
KSk7CisgICAgaWYgKCF2YWxpZCkKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworfQorCitQZWVy
Q29ubmVjdGlvbjo6UmVhZHlTdGF0ZSBQZWVyQ29ubmVjdGlvbjo6cmVhZHlTdGF0ZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKK30KKworUGVlckNvbm5lY3Rpb246OkljZVN0
YXRlIFBlZXJDb25uZWN0aW9uOjppY2VTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faWNl
U3RhdGU7CiB9CiAKIHZvaWQgUGVlckNvbm5lY3Rpb246OmFkZFN0cmVhbShQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtPiBwcnBTdHJlYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTMyLDE2ICsyNjcs
NyBAQCB2b2lkIFBlZXJDb25uZWN0aW9uOjphZGRTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVh
bT4gcHJwU3RyZWFtLCBFeGNlcHRpb25Db2RlJgogCiAgICAgbV9sb2NhbFN0cmVhbXMtPmFwcGVu
ZChzdHJlYW0pOwogCi0gICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW1EZXNjcmlwdG9y
ID0gc3RyZWFtLT5kZXNjcmlwdG9yKCk7Ci0gICAgc2l6ZV90IGkgPSBtX3BlbmRpbmdSZW1vdmVT
dHJlYW1zLmZpbmQoc3RyZWFtRGVzY3JpcHRvcik7Ci0gICAgaWYgKGkgIT0gbm90Rm91bmQpIHsK
LSAgICAgICAgbV9wZW5kaW5nUmVtb3ZlU3RyZWFtcy5yZW1vdmUoaSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBtX3BlbmRpbmdBZGRTdHJlYW1zLmFwcGVuZChzdHJlYW1EZXNjcmlw
dG9yKTsKLSAgICBpZiAobV9pY2VTdGFydGVkKQotICAgICAgICBlbnN1cmVTdHJlYW1DaGFuZ2VT
Y2hlZHVsZWQoKTsKKyAgICBtX3BlZXJIYW5kbGVyLT5hZGRTdHJlYW0oc3RyZWFtLT5kZXNjcmlw
dG9yKCkpOwogfQogCiB2b2lkIFBlZXJDb25uZWN0aW9uOjpyZW1vdmVTdHJlYW0oTWVkaWFTdHJl
YW0qIHN0cmVhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xNjEsMTYgKzI4Nyw3IEBAIHZvaWQg
UGVlckNvbm5lY3Rpb246OnJlbW92ZVN0cmVhbShNZWRpYVN0cmVhbSogc3RyZWFtLCBFeGNlcHRp
b25Db2RlJiBlYykKIAogICAgIG1fbG9jYWxTdHJlYW1zLT5yZW1vdmUoc3RyZWFtKTsKIAotICAg
IE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFtRGVzY3JpcHRvciA9IHN0cmVhbS0+ZGVzY3Jp
cHRvcigpOwotICAgIHNpemVfdCBpID0gbV9wZW5kaW5nQWRkU3RyZWFtcy5maW5kKHN0cmVhbURl
c2NyaXB0b3IpOwotICAgIGlmIChpICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgIG1fcGVuZGluZ0Fk
ZFN0cmVhbXMucmVtb3ZlKGkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9wZW5k
aW5nUmVtb3ZlU3RyZWFtcy5hcHBlbmQoc3RyZWFtRGVzY3JpcHRvcik7Ci0gICAgaWYgKG1faWNl
U3RhcnRlZCkKLSAgICAgICAgZW5zdXJlU3RyZWFtQ2hhbmdlU2NoZWR1bGVkKCk7CisgICAgbV9w
ZWVySGFuZGxlci0+cmVtb3ZlU3RyZWFtKHN0cmVhbS0+ZGVzY3JpcHRvcigpKTsKIH0KIAogTWVk
aWFTdHJlYW1MaXN0KiBQZWVyQ29ubmVjdGlvbjo6bG9jYWxTdHJlYW1zKCkgY29uc3QKQEAgLTE5
MywyMyArMzEwLDIzIEBAIHZvaWQgUGVlckNvbm5lY3Rpb246OmNsb3NlKEV4Y2VwdGlvbkNvZGUm
IGVjKQogICAgIHN0b3AoKTsKIH0KIAotdm9pZCBQZWVyQ29ubmVjdGlvbjo6ZGlkQ29tcGxldGVJ
Q0VQcm9jZXNzaW5nKCkKK3ZvaWQgUGVlckNvbm5lY3Rpb246OmRpZEdlbmVyYXRlSWNlQ2FuZGlk
YXRlKFBhc3NSZWZQdHI8SWNlQ2FuZGlkYXRlQmFzZT4gaWNlQ2FuZGlkYXRlLCBib29sIG1vcmVU
b0ZvbGxvdykKIHsKICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRl
eHRUaHJlYWQoKSk7Ci0gICAgY2hhbmdlUmVhZHlTdGF0ZShBQ1RJVkUpOworICAgIFJlZlB0cjxJ
Y2VDYW5kaWRhdGU+IGNhbmRpZGF0ZTsKKyAgICBtX2ljZUNhbGxiYWNrLT5oYW5kbGVFdmVudChj
YW5kaWRhdGUuZ2V0KCksIG1vcmVUb0ZvbGxvdywgdGhpcyk7CiB9CiAKLXZvaWQgUGVlckNvbm5l
Y3Rpb246OmRpZEdlbmVyYXRlU0RQKGNvbnN0IFN0cmluZyYgc2RwKQordm9pZCBQZWVyQ29ubmVj
dGlvbjo6ZGlkQ2hhbmdlUmVhZHlTdGF0ZSh1aW50MzJfdCBuZXdTdGF0ZSkKIHsKICAgICBBU1NF
UlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgbV9z
aWduYWxpbmdDYWxsYmFjay0+aGFuZGxlRXZlbnQoIlNEUFxuIiArIHNkcCwgdGhpcyk7CisgICAg
Y2hhbmdlUmVhZHlTdGF0ZShzdGF0aWNfY2FzdDxSZWFkeVN0YXRlPihuZXdTdGF0ZSkpOwogfQog
Ci12b2lkIFBlZXJDb25uZWN0aW9uOjpkaWRSZWNlaXZlRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3Qg
Y2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3ZvaWQgUGVlckNvbm5lY3Rpb246OmRpZENoYW5n
ZUljZVN0YXRlKHVpbnQzMl90IG5ld1N0YXRlKQogewogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UgPSBTdHJpbmc6OmZyb21VVEY4KGRhdGEsIGxlbmd0aCk7Ci0gICAgZGlzcGF0Y2hFdmVudChN
ZXNzYWdlRXZlbnQ6OmNyZWF0ZShQYXNzT3duUHRyPE1lc3NhZ2VQb3J0QXJyYXk+KCksIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKG1lc3NhZ2UpKSk7CisgICAgY2hhbmdlSWNlU3RhdGUo
c3RhdGljX2Nhc3Q8SWNlU3RhdGU+KG5ld1N0YXRlKSk7CiB9CiAKIHZvaWQgUGVlckNvbm5lY3Rp
b246OmRpZEFkZFJlbW90ZVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4g
c3RyZWFtRGVzY3JpcHRvcikKQEAgLTI1MiwyMiArMzY5LDIyIEBAIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIFBlZXJDb25uZWN0aW9uOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKICAg
ICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiB9CiAK
K2Jvb2wgUGVlckNvbm5lY3Rpb246OmNhblN1c3BlbmQoKSBjb25zdAoreworICAgIHJldHVybiB0
cnVlOworfQorCiB2b2lkIFBlZXJDb25uZWN0aW9uOjpzdG9wKCkKIHsKICAgICBpZiAobV9yZWFk
eVN0YXRlID09IENMT1NFRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9pbml0aWFsTmVnb3Rp
YXRpb25UaW1lci5zdG9wKCk7Ci0gICAgbV9zdHJlYW1DaGFuZ2VUaW1lci5zdG9wKCk7Ci0gICAg
bV9yZWFkeVN0YXRlQ2hhbmdlVGltZXIuc3RvcCgpOwotCiAgICAgaWYgKG1fcGVlckhhbmRsZXIp
CiAgICAgICAgIG1fcGVlckhhbmRsZXItPnN0b3AoKTsKLQotICAgIHVuc2V0UGVuZGluZ0FjdGl2
aXR5KHRoaXMpOwogICAgIG1fcGVlckhhbmRsZXIuY2xlYXIoKTsKIAogICAgIGNoYW5nZVJlYWR5
U3RhdGUoQ0xPU0VEKTsKKyAgICBjaGFuZ2VJY2VTdGF0ZShJQ0VfQ0xPU0VEKTsKIH0KIAogRXZl
bnRUYXJnZXREYXRhKiBQZWVyQ29ubmVjdGlvbjo6ZXZlbnRUYXJnZXREYXRhKCkKQEAgLTI4MCw3
NCArMzk3LDYgQEAgRXZlbnRUYXJnZXREYXRhKiBQZWVyQ29ubmVjdGlvbjo6ZW5zdXJlRXZlbnRU
YXJnZXREYXRhKCkKICAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwogfQogCi12b2lkIFBl
ZXJDb25uZWN0aW9uOjpzY2hlZHVsZUluaXRpYWxOZWdvdGlhdGlvbigpCi17Ci0gICAgQVNTRVJU
KCFtX2luaXRpYWxOZWdvdGlhdGlvblRpbWVyLmlzQWN0aXZlKCkpOwotCi0gICAgbV9pbml0aWFs
TmVnb3RpYXRpb25UaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgUGVlckNvbm5lY3Rp
b246OmluaXRpYWxOZWdvdGlhdGlvblRpbWVyRmlyZWQoVGltZXI8UGVlckNvbm5lY3Rpb24+KiB0
aW1lcikKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHRpbWVyLCB0aW1lciA9PSAmbV9pbml0aWFsTmVn
b3RpYXRpb25UaW1lcik7Ci0KLSAgICBpZiAobV9pY2VTdGFydGVkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3IgcGVuZGluZ0FkZFN0cmVhbXM7Ci0g
ICAgbV9wZW5kaW5nQWRkU3RyZWFtcy5zd2FwKHBlbmRpbmdBZGRTdHJlYW1zKTsKLSAgICBpZiAo
bV9wZWVySGFuZGxlcikKLSAgICAgICAgbV9wZWVySGFuZGxlci0+cHJvZHVjZUluaXRpYWxPZmZl
cihwZW5kaW5nQWRkU3RyZWFtcyk7Ci0KLSAgICBtX2ljZVN0YXJ0ZWQgPSB0cnVlOwotCi0gICAg
Y2hhbmdlUmVhZHlTdGF0ZShORUdPVElBVElORyk7Ci19Ci0KLXZvaWQgUGVlckNvbm5lY3Rpb246
OmVuc3VyZVN0cmVhbUNoYW5nZVNjaGVkdWxlZCgpCi17Ci0gICAgaWYgKCFtX3N0cmVhbUNoYW5n
ZVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fc3RyZWFtQ2hhbmdlVGltZXIuc3RhcnRPbmVT
aG90KDApOwotfQotCi12b2lkIFBlZXJDb25uZWN0aW9uOjpzdHJlYW1DaGFuZ2VUaW1lckZpcmVk
KFRpbWVyPFBlZXJDb25uZWN0aW9uPiogdGltZXIpCi17Ci0gICAgQVNTRVJUX1VOVVNFRCh0aW1l
ciwgdGltZXIgPT0gJm1fc3RyZWFtQ2hhbmdlVGltZXIpOwotCi0gICAgaWYgKCFtX3BlbmRpbmdB
ZGRTdHJlYW1zLmlzRW1wdHkoKSAmJiAhbV9wZW5kaW5nUmVtb3ZlU3RyZWFtcy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciBwZW5k
aW5nQWRkU3RyZWFtczsKLSAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3IgcGVuZGluZ1Jl
bW92ZVN0cmVhbXM7Ci0KLSAgICBtX3BlbmRpbmdBZGRTdHJlYW1zLnN3YXAocGVuZGluZ0FkZFN0
cmVhbXMpOwotICAgIG1fcGVuZGluZ1JlbW92ZVN0cmVhbXMuc3dhcChwZW5kaW5nUmVtb3ZlU3Ry
ZWFtcyk7Ci0KLSAgICBpZiAobV9wZWVySGFuZGxlcikKLSAgICAgICAgbV9wZWVySGFuZGxlci0+
cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKHBlbmRpbmdBZGRTdHJlYW1zLCBwZW5kaW5nUmVtb3ZlU3Ry
ZWFtcyk7Ci0KLSAgICBpZiAoIXBlbmRpbmdBZGRTdHJlYW1zLmlzRW1wdHkoKSkKLSAgICAgICAg
Y2hhbmdlUmVhZHlTdGF0ZShORUdPVElBVElORyk7Ci19Ci0KLXZvaWQgUGVlckNvbm5lY3Rpb246
OnNjaGVkdWxlUmVhZHlTdGF0ZUNoYW5nZShSZWFkeVN0YXRlIHJlYWR5U3RhdGUpCi17Ci0gICAg
bV9wZW5kaW5nUmVhZHlTdGF0ZXMuYXBwZW5kKHJlYWR5U3RhdGUpOwotICAgIGlmICghbV9yZWFk
eVN0YXRlQ2hhbmdlVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9yZWFkeVN0YXRlQ2hhbmdl
VGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lkIFBlZXJDb25uZWN0aW9uOjpyZWFkeVN0
YXRlQ2hhbmdlVGltZXJGaXJlZChUaW1lcjxQZWVyQ29ubmVjdGlvbj4qIHRpbWVyKQotewotICAg
IEFTU0VSVF9VTlVTRUQodGltZXIsIHRpbWVyID09ICZtX3JlYWR5U3RhdGVDaGFuZ2VUaW1lcik7
Ci0KLSAgICBWZWN0b3I8UmVhZHlTdGF0ZT4gcGVuZGluZ1JlYWR5U3RhdGVzOwotICAgIG1fcGVu
ZGluZ1JlYWR5U3RhdGVzLnN3YXAocGVuZGluZ1JlYWR5U3RhdGVzKTsKLQotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcGVuZGluZ1JlYWR5U3RhdGVzLnNpemUoKTsgaSsrKQotICAgICAgICBj
aGFuZ2VSZWFkeVN0YXRlKHBlbmRpbmdSZWFkeVN0YXRlc1tpXSk7Ci19Ci0KIHZvaWQgUGVlckNv
bm5lY3Rpb246OmNoYW5nZVJlYWR5U3RhdGUoUmVhZHlTdGF0ZSByZWFkeVN0YXRlKQogewogICAg
IGlmIChyZWFkeVN0YXRlID09IG1fcmVhZHlTdGF0ZSkKQEAgLTM2Nyw2ICs0MTYsMzMgQEAgdm9p
ZCBQZWVyQ29ubmVjdGlvbjo6Y2hhbmdlUmVhZHlTdGF0ZShSZWFkeVN0YXRlIHJlYWR5U3RhdGUp
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ0xPU0VEOgogICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdGF0
ZWNoYW5nZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKK30KKwordm9pZCBQZWVyQ29ubmVjdGlvbjo6
Y2hhbmdlSWNlU3RhdGUoSWNlU3RhdGUgaWNlU3RhdGUpCit7CisgICAgaWYgKGljZVN0YXRlID09
IG1faWNlU3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1faWNlU3RhdGUgPSBpY2VTdGF0
ZTsKKworICAgIHN3aXRjaCAobV9pY2VTdGF0ZSkgeworICAgIGNhc2UgSUNFX0dBVEhFUklORzoK
KyAgICBjYXNlIElDRV9XQUlUSU5HOgorICAgIGNhc2UgSUNFX0NIRUNLSU5HOgorICAgIGNhc2Ug
SUNFX0NPTk5FQ1RFRDoKKyAgICBjYXNlIElDRV9DT01QTEVURUQ6CisgICAgY2FzZSBJQ0VfRkFJ
TEVEOgorICAgIGNhc2UgSUNFX0NMT1NFRDoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAog
ICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3RhdGVjaGFuZ2VF
dmVudCwgZmFsc2UsIGZhbHNlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uLmgKaW5kZXggZmQyZjJmYjJkNDI4MjZiNjM2MDAxNTU2
YjM2YjNhYWU3M2JmNWMyNC4uMDM0MjFkMWQyN2FkNmNkMGEwMjE5OTUwNGZlNWNiMGU0YzAwNzc5
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29u
bmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNv
bm5lY3Rpb24uaApAQCAtMSwyNiArMSwzMSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEVy
aWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmli
dXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYg
UGVlckNvbm5lY3Rpb25faApAQCAtMzEsMTcgKzM2LDIwIEBACiAjaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25C
YXNlLmgiCisjaW5jbHVkZSAiSWNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbS5o
IgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtTGlzdC5oIgogI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9u
SGFuZGxlci5oIgogI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oIgotI2lu
Y2x1ZGUgIlNpZ25hbGluZ0NhbGxiYWNrLmgiCisjaW5jbHVkZSAiU2Vzc2lvbkRlc2NyaXB0aW9u
LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBNZWRp
YUhpbnRzOworCiAvLyBOb3RlOgogLy8gU0RQIHN0YW5kcyBmb3IgU2Vzc2lvbiBEZXNjcmlwdGlv
biBQcm90b2NvbCwgd2hpY2ggaXMgaW50ZW5kZWQgZm9yIGRlc2NyaWJpbmcKIC8vIG11bHRpbWVk
aWEgc2Vzc2lvbnMgZm9yIHRoZSBwdXJwb3NlcyBvZiBzZXNzaW9uIGFubm91bmNlbWVudCwgc2Vz
c2lvbgpAQCAtNTMsODIgKzYxLDEwNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBl
ZXJDb25uZWN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8UGVlckNvbm5lY3Rpb24+LCBwdWJsaWMg
UGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50LCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBB
Y3RpdmVET01PYmplY3QgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBlZXJDb25u
ZWN0aW9uPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgc2Vy
dmVyQ29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxsYmFjaz4pOworICAgIGVu
dW0gUmVhZHlTdGF0ZSB7CisgICAgICAgIE5FVyA9IDAsCisgICAgICAgIE5FR09USUFUSU5HID0g
MSwKKyAgICAgICAgQUNUSVZFID0gMiwKKyAgICAgICAgQ0xPU0VEID0gMworICAgIH07CisKKyAg
ICBlbnVtIEFjdGlvbiB7CisgICAgICAgIFNEUF9PRkZFUiA9IDB4MTAwLAorICAgICAgICBTRFBf
UFJBTlNXRVIgPSAweDIwMCwKKyAgICAgICAgU0RQX0FOU1dFUiA9IDB4MzAwCisgICAgfTsKKwor
ICAgIGVudW0gSWNlU3RhdGUgeworICAgICAgICBJQ0VfR0FUSEVSSU5HID0gMHgxMDAsCisgICAg
ICAgIElDRV9XQUlUSU5HID0gMHgyMDAsCisgICAgICAgIElDRV9DSEVDS0lORyA9IDB4MzAwLAor
ICAgICAgICBJQ0VfQ09OTkVDVEVEID0gMHg0MDAsCisgICAgICAgIElDRV9DT01QTEVURUQgPSAw
eDUwMCwKKyAgICAgICAgSUNFX0ZBSUxFRCA9IDB4NjAwLAorICAgICAgICBJQ0VfQ0xPU0VEID0g
MHg3MDAKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGVlckNvbm5lY3Rpb24+IGNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1
cmF0aW9uLCBQYXNzUmVmUHRyPEljZUNhbGxiYWNrPik7CiAgICAgflBlZXJDb25uZWN0aW9uKCk7
CiAKLSAgICB2b2lkIHByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8U2Vzc2lvbkRlc2NyaXB0aW9uPiBj
cmVhdGVPZmZlcigpOworICAgIFBhc3NSZWZQdHI8U2Vzc2lvbkRlc2NyaXB0aW9uPiBjcmVhdGVP
ZmZlcihjb25zdCBTdHJpbmcmIG1lZGlhSGludHMpOworICAgIFBhc3NSZWZQdHI8U2Vzc2lvbkRl
c2NyaXB0aW9uPiBjcmVhdGVBbnN3ZXIoY29uc3QgU3RyaW5nJiBvZmZlcik7CisgICAgUGFzc1Jl
ZlB0cjxTZXNzaW9uRGVzY3JpcHRpb24+IGNyZWF0ZUFuc3dlcihjb25zdCBTdHJpbmcmIG9mZmVy
LCBjb25zdCBTdHJpbmcmIG1lZGlhSGludHMpOworCisgICAgdm9pZCBzZXRMb2NhbERlc2NyaXB0
aW9uKGludCBhY3Rpb24sIFBhc3NSZWZQdHI8U2Vzc2lvbkRlc2NyaXB0aW9uPiwgRXhjZXB0aW9u
Q29kZSYpOworICAgIHZvaWQgc2V0UmVtb3RlRGVzY3JpcHRpb24oaW50IGFjdGlvbiwgUGFzc1Jl
ZlB0cjxTZXNzaW9uRGVzY3JpcHRpb24+LCBFeGNlcHRpb25Db2RlJik7CisgICAgU2Vzc2lvbkRl
c2NyaXB0aW9uKiBsb2NhbERlc2NyaXB0aW9uKCk7CisgICAgU2Vzc2lvbkRlc2NyaXB0aW9uKiBy
ZW1vdGVEZXNjcmlwdGlvbigpOwogCisgICAgdm9pZCBzdGFydEljZShFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCBzdGFydEljZShjb25zdCBTdHJpbmcmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2b2lkIHByb2Nlc3NJY2VNZXNzYWdlKFBhc3NSZWZQdHI8SWNlQ2FuZGlkYXRlPiwg
RXhjZXB0aW9uQ29kZSYpOworCisgICAgSWNlU3RhdGUgaWNlU3RhdGUoKSBjb25zdDsKICAgICBS
ZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsKIAotICAgIHZvaWQgc2VuZChjb25zdCBTdHJp
bmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGFkZFN0cmVhbShjb25zdCBQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgcmVtb3ZlU3Ry
ZWFtKE1lZGlhU3RyZWFtKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIE1lZGlhU3RyZWFtTGlzdCog
bG9jYWxTdHJlYW1zKCkgY29uc3Q7CiAgICAgTWVkaWFTdHJlYW1MaXN0KiByZW1vdGVTdHJlYW1z
KCkgY29uc3Q7CisKICAgICB2b2lkIGNsb3NlKEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIERFRklO
RV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoY29ubmVjdGluZyk7CiAgICAgREVGSU5FX0FUVFJJ
QlVURV9FVkVOVF9MSVNURU5FUihvcGVuKTsKLSAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJ
U1RFTkVSKG1lc3NhZ2UpOwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoc3Rh
dGVjaGFuZ2UpOwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYWRkc3RyZWFt
KTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHJlbW92ZXN0cmVhbSk7CiAK
ICAgICAvLyBQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgZGlk
Q29tcGxldGVJQ0VQcm9jZXNzaW5nKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEdlbmVyYXRlU0RQ
KGNvbnN0IFN0cmluZyYgc2RwKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGFTdHJl
YW1NZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOworICAgIHZpcnR1YWwg
dm9pZCBkaWRHZW5lcmF0ZUljZUNhbmRpZGF0ZShQYXNzUmVmUHRyPEljZUNhbmRpZGF0ZUJhc2U+
LCBib29sIG1vcmVUb0ZvbGxvdyk7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVJlYWR5U3Rh
dGUodWludDMyX3Qgc3RhdGUpOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VJY2VTdGF0ZSh1
aW50MzJfdCBzdGF0ZSk7CiAgICAgdmlydHVhbCB2b2lkIGRpZEFkZFJlbW90ZVN0cmVhbShQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4pOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZW1v
dmVSZW1vdGVTdHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlwdG9yKik7Ci0gICAgdmlydHVhbCB2b2lk
IGRpZENoYW5nZVN0YXRlKFJlYWR5U3RhdGUgc3RhdGUpIHsgY2hhbmdlUmVhZHlTdGF0ZShzdGF0
ZSk7IH0KIAogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKIAogICAgIC8vIEFjdGl2ZURP
TU9iamVjdAorICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIHN0b3AoKTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8UGVlckNvbm5lY3Rpb24+Ojpy
ZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDxQZWVyQ29ubmVjdGlvbj46OmRlcmVmOwogCiBwcml2
YXRlOgotICAgIFBlZXJDb25uZWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBT
dHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+
KTsKKyAgICBQZWVyQ29ubmVjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3Ry
aW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPEljZUNhbGxiYWNrPik7CiAKICAg
ICAvLyBFdmVudFRhcmdldCBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0
RGF0YSogZXZlbnRUYXJnZXREYXRhKCk7CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVu
c3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgp
IHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYo
KTsgfQotCi0gICAgdm9pZCBzY2hlZHVsZUluaXRpYWxOZWdvdGlhdGlvbigpOwotICAgIHZvaWQg
aW5pdGlhbE5lZ290aWF0aW9uVGltZXJGaXJlZChUaW1lcjxQZWVyQ29ubmVjdGlvbj4qKTsKLSAg
ICB2b2lkIGVuc3VyZVN0cmVhbUNoYW5nZVNjaGVkdWxlZCgpOwotICAgIHZvaWQgc3RyZWFtQ2hh
bmdlVGltZXJGaXJlZChUaW1lcjxQZWVyQ29ubmVjdGlvbj4qKTsKLSAgICB2b2lkIHNjaGVkdWxl
UmVhZHlTdGF0ZUNoYW5nZShSZWFkeVN0YXRlKTsKLSAgICB2b2lkIHJlYWR5U3RhdGVDaGFuZ2VU
aW1lckZpcmVkKFRpbWVyPFBlZXJDb25uZWN0aW9uPiopOworICAgIEV2ZW50VGFyZ2V0RGF0YSBt
X2V2ZW50VGFyZ2V0RGF0YTsKIAogICAgIHZvaWQgY2hhbmdlUmVhZHlTdGF0ZShSZWFkeVN0YXRl
KTsKKyAgICB2b2lkIGNoYW5nZUljZVN0YXRlKEljZVN0YXRlKTsKKyAgICBib29sIGhhc0xvY2Fs
QXVkaW9UcmFjaygpOworICAgIGJvb2wgaGFzTG9jYWxWaWRlb1RyYWNrKCk7CisgICAgUGFzc1Jl
ZlB0cjxNZWRpYUhpbnRzPiBwYXJzZU1lZGlhSGludHMoY29uc3QgU3RyaW5nJiBtZWRpYUhpbnRz
U3RyaW5nKTsKIAotICAgIFJlZlB0cjxTaWduYWxpbmdDYWxsYmFjaz4gbV9zaWduYWxpbmdDYWxs
YmFjazsKKyAgICBSZWZQdHI8SWNlQ2FsbGJhY2s+IG1faWNlQ2FsbGJhY2s7CiAKICAgICBSZWFk
eVN0YXRlIG1fcmVhZHlTdGF0ZTsKLSAgICBib29sIG1faWNlU3RhcnRlZDsKKyAgICBJY2VTdGF0
ZSBtX2ljZVN0YXRlOwogCiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtTGlzdD4gbV9sb2NhbFN0cmVh
bXM7CiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtTGlzdD4gbV9yZW1vdGVTdHJlYW1zOwogCi0gICAg
Ly8gRXZlbnRUYXJnZXQgaW1wbGVtZW50YXRpb24uCi0gICAgRXZlbnRUYXJnZXREYXRhIG1fZXZl
bnRUYXJnZXREYXRhOwotCi0gICAgVGltZXI8UGVlckNvbm5lY3Rpb24+IG1faW5pdGlhbE5lZ290
aWF0aW9uVGltZXI7Ci0gICAgVGltZXI8UGVlckNvbm5lY3Rpb24+IG1fc3RyZWFtQ2hhbmdlVGlt
ZXI7Ci0gICAgVGltZXI8UGVlckNvbm5lY3Rpb24+IG1fcmVhZHlTdGF0ZUNoYW5nZVRpbWVyOwot
Ci0gICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yIG1fcGVuZGluZ0FkZFN0cmVhbXM7Ci0g
ICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yIG1fcGVuZGluZ1JlbW92ZVN0cmVhbXM7Ci0g
ICAgVmVjdG9yPFJlYWR5U3RhdGU+IG1fcGVuZGluZ1JlYWR5U3RhdGVzOwotCiAgICAgT3duUHRy
PFBlZXJDb25uZWN0aW9uSGFuZGxlcj4gbV9wZWVySGFuZGxlcjsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uaWRsIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5pZGwKaW5k
ZXggNzU0M2EwZGJjZTNjN2I1NWFiNDUwMDk0YmZjNjg3ZTgzMWQ3MDgxNi4uZTViZjY3YWQwMmE1
YTZlNDhiNDI1MzcyNDgwZDE2NDZhZTgyOGM0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5pZGwKQEAgLTEsMjUgKzEsMzEg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAq
ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCiBtb2R1bGUgcDJwIHsKQEAgLTI3LDIyICszMyw1OCBAQCBt
b2R1bGUgcDJwIHsKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD1NRURJQV9T
VFJFQU0sCiAgICAgICAgIEFjdGl2ZURPTU9iamVjdCwKLSAgICAgICAgQ29uc3RydWN0b3IoaW4g
RE9NU3RyaW5nIHNlcnZlckNvbmZpZ3VyYXRpb24sIGluIFtDYWxsYmFja10gU2lnbmFsaW5nQ2Fs
bGJhY2sgc2lnbmFsaW5nQ2FsbGJhY2spLAorICAgICAgICBDb25zdHJ1Y3RvcihpbiBET01TdHJp
bmcgc2VydmVyQ29uZmlndXJhdGlvbiwgaW4gW0NhbGxiYWNrXSBJY2VDYWxsYmFjayBpY2VDYWxs
YmFjayksCiAgICAgICAgIENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsCi0gICAgICAg
IEpTQ3VzdG9tQ29uc3RydWN0b3IsCiAgICAgICAgIEV2ZW50VGFyZ2V0CiAgICAgXSBQZWVyQ29u
bmVjdGlvbiB7Ci0gICAgICAgIHZvaWQgcHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UoaW4gRE9NU3Ry
aW5nIG1lc3NhZ2UpCisgICAgICAgIC8vIENyZWF0ZXMgYSBibG9iIG9mIFNEUCB0byBiZSBwcm92
aWRlZCBhcyBhbiBvZmZlci4KKyAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uIGNyZWF0ZU9mZmVy
KGluIFtPcHRpb25hbF0gRE9NU3RyaW5nIGhpbnRzKTsKKworICAgICAgICAvLyBDcmVhdGVzIGEg
YmxvYiBvZiBTRFAgdG8gYmUgcHJvdmlkZWQgYXMgYW4gYW5zd2VyLgorICAgICAgICBTZXNzaW9u
RGVzY3JpcHRpb24gY3JlYXRlQW5zd2VyKGluIERPTVN0cmluZyBvZmZlciwgaW4gW09wdGlvbmFs
XSBET01TdHJpbmcgaGludHMpOworCisgICAgICAgIC8vIEFjdGlvbnMsIGZvciBzZXRMb2NhbERl
c2NyaXB0aW9uL3NldFJlbW90ZURlc2NyaXB0aW9uLgorICAgICAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCBTRFBfT0ZGRVIgPSAweDEwMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgU0RQ
X1BSQU5TV0VSID0gMHgyMDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNEUF9BTlNX
RVIgPSAweDMwMDsKKworICAgICAgICAvLyBTZXRzIHRoZSBsb2NhbCBzZXNzaW9uIGRlc2NyaXB0
aW9uLgorICAgICAgICB2b2lkIHNldExvY2FsRGVzY3JpcHRpb24oaW4gdW5zaWduZWQgc2hvcnQg
YWN0aW9uLCBpbiBTZXNzaW9uRGVzY3JpcHRpb24gZGVzYykKKyAgICAgICAgICAgIHJhaXNlcyhE
T01FeGNlcHRpb24pOworCisgICAgICAgIC8vIFNldHMgdGhlIHJlbW90ZSBzZXNzaW9uIGRlc2Ny
aXB0aW9uLgorICAgICAgICB2b2lkIHNldFJlbW90ZURlc2NyaXB0aW9uKGluIHVuc2lnbmVkIHNo
b3J0IGFjdGlvbiwgaW4gU2Vzc2lvbkRlc2NyaXB0aW9uIGRlc2MpCiAgICAgICAgICAgICByYWlz
ZXMoRE9NRXhjZXB0aW9uKTsKIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBjdXJyZW50IGxvY2Fs
IHNlc3Npb24gZGVzY3JpcHRpb24uCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTZXNzaW9u
RGVzY3JpcHRpb24gbG9jYWxEZXNjcmlwdGlvbjsKKworICAgICAgICAvLyBSZXR1cm5zIHRoZSBj
dXJyZW50IHJlbW90ZSBzZXNzaW9uIGRlc2NyaXB0aW9uLgorICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgU2Vzc2lvbkRlc2NyaXB0aW9uIHJlbW90ZURlc2NyaXB0aW9uOworCiAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IE5FVyA9IDA7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
IE5FR09USUFUSU5HID0gMTsKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQUNUSVZFID0g
MjsKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ0xPU0VEID0gMzsKICAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IHJlYWR5U3RhdGU7CiAKLSAgICAgICAgdm9p
ZCBzZW5kKGluIERPTVN0cmluZyB0ZXh0KQorICAgICAgICAvLyBTdGFydHMgSUNFIGNvbm5lY3Rp
b24vaGFuZHNoYWtpbmcuCisgICAgICAgIHZvaWQgc3RhcnRJY2UoaW4gW09wdGlvbmFsXSBET01T
dHJpbmcgb3B0aW9ucykKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworCisgICAg
ICAgIC8vIFByb2Nlc3NlcyByZWNlaXZlZCBJQ0UgaW5mb3JtYXRpb24uCisgICAgICAgIHZvaWQg
cHJvY2Vzc0ljZU1lc3NhZ2UoaW4gSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSkKICAgICAgICAgICAg
IHJhaXNlcyhET01FeGNlcHRpb24pOworCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IElD
RV9HQVRIRVJJTkcgPSAweDEwMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgSUNFX1dB
SVRJTkcgPSAweDIwMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgSUNFX0NIRUNLSU5H
ID0gMHgzMDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IElDRV9DT05ORUNURUQgPSAw
eDQwMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgSUNFX0NPTVBMRVRFRCA9IDB4NTAw
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBJQ0VfRkFJTEVEID0gMHg2MDA7CisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IElDRV9DTE9TRUQgPSAweDcwMDsKKyAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IGljZVN0YXRlOworCiAgICAgICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIHZvaWQgYWRkU3RyZWFtKGluIE1lZGlhU3RyZWFtIHN0cmVhbSkKICAg
ICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkIHJlbW92ZVN0cmVhbShpbiBNZWRpYVN0cmVhbSBzdHJlYW0pCkBAIC01Niw3ICs5
OCw2IEBAIG1vZHVsZSBwMnAgewogCiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9u
Y29ubmVjdGluZzsKICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25vcGVuOwotICAg
ICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbm1lc3NhZ2U7CiAgICAgICAgIGF0dHJpYnV0
ZSBFdmVudExpc3RlbmVyIG9uc3RhdGVjaGFuZ2U7CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExp
c3RlbmVyIG9uYWRkc3RyZWFtOwogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbnJl
bW92ZXN0cmVhbTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vU2Vzc2lvbkRlc2NyaXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vU2Vzc2lvbkRlc2NyaXB0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YjQ1NjNmNDA0NjRlYzAw
YTJmYWEzOWZjNjJkODg0YTM1MzBhZWNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TZXNzaW9uRGVzY3JpcHRpb24uY3BwCkBAIC0wLDAgKzEs
ODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
ICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwor
ICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKQorCisjaW5jbHVkZSAiU2Vzc2lvbkRlc2NyaXB0aW9uLmgiCisKKyNpbmNsdWRlICJJY2VD
YW5kaWRhdGUuaCIKKyNpbmNsdWRlICJJY2VDYW5kaWRhdGVCYXNlLmgiCisjaW5jbHVkZSAiTWVk
aWFTdHJlYW1DZW50ZXIuaCIKKyNpbmNsdWRlICJTZXNzaW9uRGVzY3JpcHRpb25CYXNlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxTZXNzaW9uRGVzY3JpcHRpb24+IFNl
c3Npb25EZXNjcmlwdGlvbjo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgc2RwKQoreworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKFNlc3Npb25EZXNjcmlwdGlvbkJhc2U6
OmNyZWF0ZShzZHApKSk7Cit9CisKK1Bhc3NSZWZQdHI8U2Vzc2lvbkRlc2NyaXB0aW9uPiBTZXNz
aW9uRGVzY3JpcHRpb246OmNyZWF0ZShQYXNzUmVmUHRyPFNlc3Npb25EZXNjcmlwdGlvbkJhc2U+
IGJhc2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXNzaW9uRGVzY3JpcHRpb24oYmFz
ZSkpOworfQorCitTZXNzaW9uRGVzY3JpcHRpb246OlNlc3Npb25EZXNjcmlwdGlvbihQYXNzUmVm
UHRyPFNlc3Npb25EZXNjcmlwdGlvbkJhc2U+IGJhc2UpCisgICAgOiBtX2Jhc2UoYmFzZSkKK3sK
K30KKworU2Vzc2lvbkRlc2NyaXB0aW9uOjp+U2Vzc2lvbkRlc2NyaXB0aW9uKCkKK3sKK30KKwor
dm9pZCBTZXNzaW9uRGVzY3JpcHRpb246OmFkZENhbmRpZGF0ZShQYXNzUmVmUHRyPEljZUNhbmRp
ZGF0ZT4gY2FuZGlkYXRlKQoreworICAgIG1fYmFzZS0+YWRkQ2FuZGlkYXRlKGNhbmRpZGF0ZS0+
YmFzZSgpKTsKK30KKworU3RyaW5nIFNlc3Npb25EZXNjcmlwdGlvbjo6dG9TZHAoKQoreworICAg
IHJldHVybiBtX2Jhc2UtPnRvU2RwKCk7Cit9CisKK1Nlc3Npb25EZXNjcmlwdGlvbkJhc2UqIFNl
c3Npb25EZXNjcmlwdGlvbjo6YmFzZSgpCit7CisgICAgcmV0dXJuIG1fYmFzZS5nZXQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU2Vzc2lv
bkRlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1Nlc3Np
b25EZXNjcmlwdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1ZjI4ZjAzYTlhOGIzMjdkNTI2NzYxNjU1ZGM0
OTY5OGNjMTlhZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1Nlc3Npb25EZXNjcmlwdGlvbi5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAg
ZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFNlc3Npb25EZXNjcmlwdGlvbl9oCisjZGVmaW5lIFNlc3Npb25EZXNjcmlwdGlvbl9o
CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEljZUNhbmRpZGF0ZTsKK2Ns
YXNzIFNlc3Npb25EZXNjcmlwdGlvbkJhc2U7CisKK2NsYXNzIFNlc3Npb25EZXNjcmlwdGlvbiA6
IHB1YmxpYyBSZWZDb3VudGVkPFNlc3Npb25EZXNjcmlwdGlvbj4geworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNlc3Npb25EZXNjcmlwdGlvbj4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
c2RwKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXNzaW9uRGVzY3JpcHRpb24+IGNyZWF0ZShQ
YXNzUmVmUHRyPFNlc3Npb25EZXNjcmlwdGlvbkJhc2U+KTsKKyAgICB2aXJ0dWFsIH5TZXNzaW9u
RGVzY3JpcHRpb24oKTsKKworICAgIHZvaWQgYWRkQ2FuZGlkYXRlKFBhc3NSZWZQdHI8SWNlQ2Fu
ZGlkYXRlPik7CisgICAgU3RyaW5nIHRvU2RwKCk7CisKKyAgICBTZXNzaW9uRGVzY3JpcHRpb25C
YXNlKiBiYXNlKCk7CisKK3ByaXZhdGU6CisgICAgU2Vzc2lvbkRlc2NyaXB0aW9uKFBhc3NSZWZQ
dHI8U2Vzc2lvbkRlc2NyaXB0aW9uQmFzZT4pOworCisgICAgUmVmUHRyPFNlc3Npb25EZXNjcmlw
dGlvbkJhc2U+IG1fYmFzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBTZXNzaW9uRGVzY3JpcHRpb25f
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TZXNzaW9u
RGVzY3JpcHRpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TZXNz
aW9uRGVzY3JpcHRpb24uaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI5MjMxOGM4ZTFjMzcyMjRhNDc3OGE5MWVk
MGMyZGRjY2YxNjUyYTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwKQEAgLTAsMCArMSw0NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKK21vZHVsZSBwMnAgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9
TUVESUFfU1RSRUFNLAorICAgICAgICBDb25zdHJ1Y3RvcihpbiBET01TdHJpbmcgc2RwKQorICAg
IF0gU2Vzc2lvbkRlc2NyaXB0aW9uIHsKKyAgICAgICAgLy8gYWRkcyB0aGUgc3BlY2lmaWVkIGNh
bmRpZGF0ZSB0byB0aGUgZGVzY3JpcHRpb24KKyAgICAgICAgdm9pZCBhZGRDYW5kaWRhdGUoaW4g
SWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSk7CisKKyAgICAgICAgLy8gc2VyaWFsaXplcyB0aGUgZGVz
Y3JpcHRpb24gdG8gU0RQCisgICAgICAgIERPTVN0cmluZyB0b1NkcCgpOworICAgIH07CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU2lnbmFsaW5n
Q2FsbGJhY2suaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU2lnbmFsaW5n
Q2FsbGJhY2suaAppbmRleCBhNGEzMGU3MTI2NzU0YTUxYzMyOGIyODc0NzYyNjBhYmQ4ZmM0Yjgx
Li42NWFhNjJhNmY1ZWYyOTAwZmQ5NjRmZDkzYjg1MWIwZTJkMzBkYmQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NpZ25hbGluZ0NhbGxiYWNrLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TaWduYWxpbmdDYWxsYmFjay5o
CkBAIC0zMSwxMiArMzEsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBQZWVy
Q29ubmVjdGlvbjsKK2NsYXNzIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbjsKIAogY2xhc3MgU2ln
bmFsaW5nQ2FsbGJhY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxTaWduYWxpbmdDYWxsYmFjaz4gewog
cHVibGljOgogICAgIHZpcnR1YWwgflNpZ25hbGluZ0NhbGxiYWNrKCkgeyB9Ci0gICAgdmlydHVh
bCBib29sIGhhbmRsZUV2ZW50KGNvbnN0IFN0cmluZyYsIFBlZXJDb25uZWN0aW9uKikgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChjb25zdCBTdHJpbmcmLCBEZXByZWNhdGVkUGVl
ckNvbm5lY3Rpb24qKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NpZ25hbGluZ0NhbGxiYWNr
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU2lnbmFsaW5nQ2FsbGJh
Y2suaWRsCmluZGV4IGUyZTBjZWJkMjZjODEyMGMyMWQzN2VkY2Q5ODEzYTA2ZGQ5MjA0MGQuLjY5
ZTRiOTJmNGE4ODc3OTJjNWYxZTUyYzExNmEyMWM1NWE0ZjZkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU2lnbmFsaW5nQ2FsbGJhY2suaWRsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU2lnbmFsaW5nQ2FsbGJhY2suaWRs
CkBAIC0yOCw3ICsyOCw3IEBAIG1vZHVsZSBwMnAgewogICAgICAgICBDb25kaXRpb25hbD1NRURJ
QV9TVFJFQU0sCiAgICAgICAgIENhbGxiYWNrCiAgICAgXSBTaWduYWxpbmdDYWxsYmFjayB7Ci0g
ICAgICAgIGJvb2xlYW4gaGFuZGxlRXZlbnQoaW4gRE9NU3RyaW5nIG1lc3NhZ2UsIGluIFBlZXJD
b25uZWN0aW9uIHNvdXJjZSk7CisgICAgICAgIGJvb2xlYW4gaGFuZGxlRXZlbnQoaW4gRE9NU3Ry
aW5nIG1lc3NhZ2UsIGluIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbiBzb3VyY2UpOwogICAgIH07
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAwNmI5ZjYxMjZiM2Q5MGVhZmMwZmM2NzdhNmFjOTk2
YmY3YWQwNzdhLi43ZmM5NDk3MGYxNDNmZWRiNTUzY2I4NTE3M2E2ZDY3YjA5OGMyMDVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCkBAIC00MTUsMTMgKzQxNSwyNCBAQAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21h
Yy9XZWJDb3JlVmlldy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvV2ViRm9udENhY2hl
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL21lZGlhc3RyZWFtL0RlcHJlY2F0ZWRQZWVyQ29u
bmVjdGlvbkhhbmRsZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vbWVkaWFzdHJlYW0vRGVw
cmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9JY2VDYW5kaWRhdGVCYXNlLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vbWVkaWFzdHJlYW0vSWNlQ2FuZGlkYXRlQmFzZS5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9JY2VPcHRpb25zLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
bWVkaWFzdHJlYW0vSWNlT3B0aW9ucy5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYUhpbnRzLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vbWVkaWFzdHJlYW0v
TWVkaWFIaW50cy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbUNlbnRlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtQ2VudGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtQ29tcG9uZW50LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtRGVzY3JpcHRvci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9NZWRpYVN0cmVhbVNvdXJjZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9QZWVyQ29ubmVjdGlvbkhhbmRsZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9QZWVyQ29ubmVjdGlvbkhhbmRsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
bWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50LmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL21lZGlhc3RyZWFtL1Nlc3Npb25EZXNjcmlwdGlvbkJhc2UuY3BwJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9tZWRpYXN0cmVhbS9TZXNzaW9uRGVzY3JpcHRpb25CYXNlLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL21vY2svRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL21vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNl
LmgnLApAQCAtNzQ5LDcgKzc2MCwxMCBAQAogICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9J
bnRlbnQuaWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2Fs
bGJhY2suaWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvTmF2aWdhdG9ySW50ZW50
cy5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvbWVkaWFzdHJlYW0vRGVwcmVjYXRlZFBlZXJD
b25uZWN0aW9uLmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9tZWRpYXN0cmVhbS9ET01XaW5k
b3dNZWRpYVN0cmVhbS5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvbWVkaWFzdHJlYW0vSWNl
Q2FsbGJhY2suaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL21lZGlhc3RyZWFtL0ljZUNhbmRp
ZGF0ZS5pZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvbWVkaWFzdHJlYW0vTG9jYWxNZWRpYVN0
cmVhbS5pZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0u
aWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRXZlbnQu
aWRsJywKQEAgLTc2MSw2ICs3NzUsNyBAQAogICAgICAgICAgICAgJ01vZHVsZXMvbWVkaWFzdHJl
YW0vTmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjay5pZGwnLAogICAgICAgICAgICAgJ01v
ZHVsZXMvbWVkaWFzdHJlYW0vTmF2aWdhdG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxiYWNrLmlkbCcs
CiAgICAgICAgICAgICAnTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5pZGwnLAor
ICAgICAgICAgICAgJ01vZHVsZXMvbWVkaWFzdHJlYW0vU2Vzc2lvbkRlc2NyaXB0aW9uLmlkbCcs
CiAgICAgICAgICAgICAnTW9kdWxlcy9tZWRpYXN0cmVhbS9TaWduYWxpbmdDYWxsYmFjay5pZGwn
LAogICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL0RPTVdpbmRvd1NwZWVjaC5pZGwnLAogICAg
ICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmUuaWRs
JywKQEAgLTEzNzksNiArMTM5NCwxMSBAQAogICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9J
bnRlbnRSZXN1bHRDYWxsYmFjay5oJywKICAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvTmF2
aWdhdG9ySW50ZW50cy5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9OYXZpZ2F0
b3JJbnRlbnRzLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvbWVkaWFzdHJlYW0vRGVwcmVjYXRl
ZFBlZXJDb25uZWN0aW9uLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9tZWRpYXN0cmVhbS9E
ZXByZWNhdGVkUGVlckNvbm5lY3Rpb24uaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9tZWRpYXN0
cmVhbS9JY2VDYWxsYmFjay5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL21lZGlhc3RyZWFtL0lj
ZUNhbmRpZGF0ZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvbWVkaWFzdHJlYW0vSWNlQ2Fu
ZGlkYXRlLmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvbWVkaWFzdHJlYW0vTG9jYWxNZWRpYVN0
cmVhbS5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvbWVkaWFzdHJlYW0vTG9jYWxNZWRpYVN0
cmVhbS5oJywKICAgICAgICAgICAgICdNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNw
cCcsCkBAIC0xNDAwLDEwICsxNDIwLDEyIEBACiAgICAgICAgICAgICAnTW9kdWxlcy9tZWRpYXN0
cmVhbS9OYXZpZ2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2FsbGJhY2suaCcsCiAgICAgICAgICAgICAn
TW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbi5jcHAnLAogICAgICAgICAgICAgJ01v
ZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb24uaCcsCisgICAgICAgICAgICAnTW9kdWxl
cy9tZWRpYXN0cmVhbS9TZXNzaW9uRGVzY3JpcHRpb24uY3BwJywKKyAgICAgICAgICAgICdNb2R1
bGVzL21lZGlhc3RyZWFtL1Nlc3Npb25EZXNjcmlwdGlvbi5oJywKICAgICAgICAgICAgICdNb2R1
bGVzL21lZGlhc3RyZWFtL1NpZ25hbGluZ0NhbGxiYWNrLmgnLAogICAgICAgICAgICAgJ01vZHVs
ZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhQ2xpZW50LmgnLAotICAgICAgICAgICAgJ01vZHVsZXMv
bWVkaWFzdHJlYW0vVXNlck1lZGlhQ29udHJvbGxlci5oJywKICAgICAgICAgICAgICdNb2R1bGVz
L21lZGlhc3RyZWFtL1VzZXJNZWRpYUNvbnRyb2xsZXIuY3BwJywKKyAgICAgICAgICAgICdNb2R1
bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAnTW9k
dWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmNwcCcsCiAgICAgICAgICAgICAnTW9k
dWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFSZXF1ZXN0LmgnLAogICAgICAgICAgICAgJ01vZHVs
ZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmUuY3BwJywKQEAgLTE2ODIsNiAr
MTcwNCw3IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvanMvSlNEYXRhVmlld0N1c3RvbS5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHAnLAorICAg
ICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uQ3VzdG9tLmNw
cCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNEZXNrdG9wTm90aWZpY2F0aW9uc0N1c3Rv
bS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRDdXN0
b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0RldmljZU9yaWVudGF0aW9uRXZl
bnRDdXN0b20uY3BwJywKQEAgLTE3NjIsNyArMTc4NSw2IEBACiAgICAgICAgICAgICAnYmluZGlu
Z3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMv
SlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU05v
ZGVMaXN0Q3VzdG9tLmNwcCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvanMvSlNQZWVyQ29ubmVj
dGlvbkN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVu
dEZ1bmN0aW9ucy5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVu
dEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uQ3VzdG9tLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
ZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCmluZGV4IDQ1M2IxMjE0MTJhZTdjNThh
MGZmNTViODY4NDA2ZDkyYzdhMjAzMmEuLjY5ZWZmZmVmOTZkMmZiN2Y3MWU4N2Y4YTYxYTNhYjc0
ZDNlMjExNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVu
dGltZUVuYWJsZWRGZWF0dXJlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVy
aWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCkBAIC0xNzcsNiArMTc3LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBib29sIG1lZGlhU3RyZWFtRW5hYmxlZCgpIHsgcmV0dXJuIGlzTWVkaWFTdHJl
YW1FbmFibGVkOyB9CiAgICAgc3RhdGljIHZvaWQgc2V0TWVkaWFTdHJlYW1FbmFibGVkKGJvb2wg
aXNFbmFibGVkKSB7IGlzTWVkaWFTdHJlYW1FbmFibGVkID0gaXNFbmFibGVkOyB9CiAgICAgc3Rh
dGljIGJvb2wgd2Via2l0R2V0VXNlck1lZGlhRW5hYmxlZCgpIHsgcmV0dXJuIGlzTWVkaWFTdHJl
YW1FbmFibGVkOyB9CisgICAgc3RhdGljIGJvb2wgd2Via2l0RGVwcmVjYXRlZFBlZXJDb25uZWN0
aW9uRW5hYmxlZCgpIHsgcmV0dXJuIGlzTWVkaWFTdHJlYW1FbmFibGVkOyB9CiAgICAgc3RhdGlj
IGJvb2wgd2Via2l0UGVlckNvbm5lY3Rpb25FbmFibGVkKCkgeyByZXR1cm4gaXNNZWRpYVN0cmVh
bUVuYWJsZWQ7IH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTQ5ODZjMzljOGU0MDkwN2IzMDI3ZTg1OTI1MjdhOGFkOTBjYzI1ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVwcmVjYXRlZFBlZXJDb25u
ZWN0aW9uQ3VzdG9tLmNwcApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiSlNE
ZXByZWNhdGVkUGVlckNvbm5lY3Rpb24uaCIKKworI2luY2x1ZGUgIkNhbGxiYWNrRnVuY3Rpb24u
aCIKKyNpbmNsdWRlICJEZXByZWNhdGVkUGVlckNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJKU1Np
Z25hbGluZ0NhbGxiYWNrLmgiCisjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorCit1c2luZyBu
YW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSlNEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25Db25zdHJ1Y3Rvcjo6Y29uc3Ry
dWN0SlNEZXByZWNhdGVkUGVlckNvbm5lY3Rpb24oRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpT
RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uQ29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBzdGF0
aWNfY2FzdDxKU0RlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkNvbnN0cnVjdG9yKj4oZXhlYy0+Y2Fs
bGVlKCkpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBqc0NvbnN0cnVj
dG9yLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJE
ZXByZWNhdGVkUGVlckNvbm5lY3Rpb24gY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBp
cyB1bmF2YWlsYWJsZSIpKTsKKworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAi
Tm90IGVub3VnaCBhcmd1bWVudHMiKSk7CisKKyAgICBTdHJpbmcgc2VydmVyQ29uZmlndXJhdGlv
biA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworCisgICAgUmVmUHRyPFNpZ25hbGluZ0NhbGxi
YWNrPiBzaWduYWxpbmdDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTU2ln
bmFsaW5nQ2FsbGJhY2s+KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgZXhlYy0+YXJndW1lbnQoMSkpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOworCisgICAgUmVmUHRyPERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbj4gcGVlckNvbm5l
Y3Rpb24gPSBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb246OmNyZWF0ZShjb250ZXh0LCBzZXJ2ZXJD
b25maWd1cmF0aW9uLCBzaWduYWxpbmdDYWxsYmFjay5yZWxlYXNlKCkpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoQ1JFQVRFX0RPTV9XUkFQUEVSKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmds
b2JhbE9iamVjdCgpLCBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb24sIHBlZXJDb25uZWN0aW9uLmdl
dCgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShN
RURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Bl
ZXJDb25uZWN0aW9uQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVl
ckNvbm5lY3Rpb25DdXN0b20uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjM3
ZjkxNTk1ZTg0OWY4NDI4ZWMyYTNmOWJiNGIxODhhN2Q4ZDc3Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UGVlckNvbm5lY3Rpb25DdXN0b20uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwot
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKLQotI2luY2x1ZGUgIkpTUGVlckNvbm5lY3Rpb24uaCIKLQotI2luY2x1ZGUgIkNhbGxi
YWNrRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJKU1NpZ25hbGluZ0NhbGxiYWNrLmgiCi0jaW5jbHVk
ZSAiUGVlckNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBKU0M7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBKU1BlZXJDb25uZWN0aW9uQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTUGVl
ckNvbm5lY3Rpb24oRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTUGVlckNvbm5lY3Rpb25Db25z
dHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTUGVlckNvbm5lY3Rpb25Db25z
dHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0ID0ganNDb25zdHJ1Y3Rvci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlm
ICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSZWZl
cmVuY2VFcnJvcihleGVjLCAiUGVlckNvbm5lY3Rpb24gY29uc3RydWN0b3IgYXNzb2NpYXRlZCBk
b2N1bWVudCBpcyB1bmF2YWlsYWJsZSIpKTsKLQotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPCAyKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7Ci0KLSAgICBTdHJpbmcgc2VydmVyQ29u
ZmlndXJhdGlvbiA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwotCi0gICAgUmVmUHRyPFNpZ25h
bGluZ0NhbGxiYWNrPiBzaWduYWxpbmdDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxi
YWNrPEpTU2lnbmFsaW5nQ2FsbGJhY2s+KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgZXhlYy0+YXJndW1lbnQoMSkpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOwotCi0gICAgUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVj
dGlvbiA9IFBlZXJDb25uZWN0aW9uOjpjcmVhdGUoY29udGV4dCwgc2VydmVyQ29uZmlndXJhdGlv
biwgc2lnbmFsaW5nQ2FsbGJhY2sucmVsZWFzZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKENSRUFURV9ET01fV1JBUFBFUihleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3Qo
KSwgUGVlckNvbm5lY3Rpb24sIHBlZXJDb25uZWN0aW9uLmdldCgpKSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudFRhcmdldC5oCmluZGV4IGJhZGU0NDRmNTNiOTY4YjMzNmIxOWNkNTQzYWQ2YzU0NWQ1
Njg4OGYuLmYzODdlNDI3M2VlMjZhMjA2YjZkNzk5OTFkZTMyZDlkYjU1ZTJhNmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudFRhcmdldC5oCkBAIC02MCw3ICs2MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBNZXNzYWdlUG9ydDsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIE5vdGlm
aWNhdGlvbjsKLSAgICBjbGFzcyBQZWVyQ29ubmVjdGlvbjsKICAgICBjbGFzcyBTVkdFbGVtZW50
SW5zdGFuY2U7CiAgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAgICBjbGFzcyBT
aGFyZWRXb3JrZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXRG
YWN0b3J5LmluIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0RmFjdG9yeS5pbgppbmRl
eCA3ODM5NmJkM2M4NDgxNmUxYTVmZDNmZDNkYWNmNTI4M2VjOWQ2OWQwLi40YjRjNmFiY2M4YjNm
YzZkYzkyZGJiYTc5MjUyYTQ2OTk0MjcwMDNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRUYXJnZXRGYWN0b3J5LmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRh
cmdldEZhY3RvcnkuaW4KQEAgLTQsNiArNCw3IEBAIEF1ZGlvQ29udGV4dCBjb25kaXRpb25hbD1X
RUJfQVVESU8KIERlZGljYXRlZFdvcmtlckNvbnRleHQgY29uZGl0aW9uYWw9V09SS0VSUwogRE9N
QXBwbGljYXRpb25DYWNoZQogRE9NV2luZG93CitEZXByZWNhdGVkUGVlckNvbm5lY3Rpb24gY29u
ZGl0aW9uYWw9TUVESUFfU1RSRUFNCiBFdmVudFNvdXJjZQogRmlsZVJlYWRlciBjb25kaXRpb25h
bD1CTE9CCiBGaWxlV3JpdGVyIGNvbmRpdGlvbmFsPUZJTEVfU1lTVEVNCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9EZXByZWNhdGVkUGVlckNvbm5lY3Rp
b25IYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9EZXByZWNh
dGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmUzNGRlNTZkZGRiMGYyNmM3
ZWZlMDgzMjUzOWY4ODA4NmQzZWJlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL0RlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaApA
QCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICog
ICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFu
ZGxlcl9oCisjZGVmaW5lIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJfaAorCisjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIk1lZGlhU3RyZWFtRGVzY3JpcHRvci5o
IgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudDsKKworI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQorY2xhc3MgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFs
OworI2VuZGlmCisKK2NsYXNzIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXIgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXIpOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXI+IGNyZWF0ZShEZXByZWNhdGVkUGVl
ckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0
aW9uLCBjb25zdCBTdHJpbmcmIHVzZXJuYW1lKTsKKyAgICB+RGVwcmVjYXRlZFBlZXJDb25uZWN0
aW9uSGFuZGxlcigpOworCisgICAgdm9pZCBwcm9kdWNlSW5pdGlhbE9mZmVyKGNvbnN0IE1lZGlh
U3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMpOworICAgIHZvaWQgaGFu
ZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmluZyYgc2RwKTsKKyAgICB2b2lkIHByb2Nlc3NTRFAo
Y29uc3QgU3RyaW5nJiBzZHApOworICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdTdHJlYW1zKGNvbnN0
IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMsIGNvbnN0IE1l
ZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ1JlbW92ZVN0cmVhbXMpOworICAgIHZv
aWQgc2VuZERhdGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgp
OworCisgICAgdm9pZCBzdG9wKCk7CisKK3ByaXZhdGU6CisgICAgRGVwcmVjYXRlZFBlZXJDb25u
ZWN0aW9uSGFuZGxlcihEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KiwgY29u
c3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBjb25zdCBTdHJpbmcmIHVzZXJuYW1lKTsK
KworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIE93blB0cjxEZXByZWNhdGVkUGVlckNvbm5l
Y3Rpb25IYW5kbGVySW50ZXJuYWw+IG1fcHJpdmF0ZTsKKyNlbGlmIFVTRShHU1RSRUFNRVIpCisg
ICAgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCogbV9jbGllbnQ7CisjZW5k
aWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TVFJFQU0pCisKKyNlbmRpZiAvLyBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0RlcHJlY2F0
ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL0RlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44NmM3ZjA5ZWEwMmQyNzJkMzBiNTIyNTJhNzI0MmE1ZjM4YmEzMzg4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vRGVwcmVjYXRl
ZFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBk
aXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUg
bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudF9oCisjZGVmaW5lIERlcHJl
Y2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnRfaAorCisjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yOworCitjbGFzcyBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lIGFuZCB2YWx1ZXMgb2YgdGhlIGVudW0gbXVzdCBtYXRj
aCB0aGUgY29ycmVzc3BvbmRpbmcgY29uc3RhbnRzIGluIHRoZSBQZWVyQ29ubmVjdGlvbi5pZGwg
ZmlsZS4KKyAgICBlbnVtIFJlYWR5U3RhdGUgeworICAgICAgICBORVcgPSAwLAorICAgICAgICBO
RUdPVElBVElORyA9IDEsCisgICAgICAgIEFDVElWRSA9IDIsCisgICAgICAgIENMT1NFRCA9IDMK
KyAgICB9OworCisgICAgdmlydHVhbCB+RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckNs
aWVudCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlSUNFUHJvY2Vzc2luZygp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkR2VuZXJhdGVTRFAoY29uc3QgU3RyaW5nJiBzZHAp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGFTdHJlYW1NZXNzYWdlKGNvbnN0
IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQWRk
UmVtb3RlU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkaWRSZW1vdmVSZW1vdGVTdHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlwdG9y
KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VTdGF0ZShSZWFkeVN0YXRlKSA9IDA7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFf
U1RSRUFNKQorCisjZW5kaWYgLy8gRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVu
dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9JY2VD
YW5kaWRhdGVCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0lj
ZUNhbmRpZGF0ZUJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2MGRhMjA4NjhhNTQ4ZDczYTQ4MjU1ZjAz
MGVmMGY1ZGM4NmQ2NGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9JY2VDYW5kaWRhdGVCYXNlLmNwcApAQCAtMCwwICsxLDYzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
ICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2lu
Y2x1ZGUgIkljZUNhbmRpZGF0ZUJhc2UuaCIKKworI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2VudGVy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxJY2VDYW5kaWRhdGVCYXNl
PiBJY2VDYW5kaWRhdGVCYXNlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgU3Ry
aW5nJiBjYW5kaWRhdGVMaW5lKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSWNlQ2FuZGlk
YXRlQmFzZShsYWJlbCwgY2FuZGlkYXRlTGluZSkpOworfQorCitJY2VDYW5kaWRhdGVCYXNlOjpJ
Y2VDYW5kaWRhdGVCYXNlKGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFN0cmluZyYgY2FuZGlk
YXRlTGluZSkKKyAgICA6IG1fbGFiZWwobGFiZWwpCisgICAgLCBtX2NhbmRpZGF0ZUxpbmUoY2Fu
ZGlkYXRlTGluZSkKK3sKK30KKworSWNlQ2FuZGlkYXRlQmFzZTo6fkljZUNhbmRpZGF0ZUJhc2Uo
KQoreworfQorCitTdHJpbmcgSWNlQ2FuZGlkYXRlQmFzZTo6dG9TZHAoKQoreworICAgIHJldHVy
biBNZWRpYVN0cmVhbUNlbnRlcjo6aW5zdGFuY2UoKS5kb0NvbnN0cnVjdFNkcCh0aGlzKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0ljZUNh
bmRpZGF0ZUJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0ljZUNh
bmRpZGF0ZUJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MThjOWVmMzhmMmI4Njk1MDkxMjlmZGI3ZTNmODUw
NjhlOTMxYjhiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vSWNlQ2FuZGlkYXRlQmFzZS5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlz
dHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEljZUNhbmRpZGF0ZUJhc2VfaAorI2RlZmluZSBJY2VDYW5kaWRhdGVCYXNlX2gKKworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSWNlQ2FuZGlkYXRlQmFzZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPEljZUNhbmRpZGF0ZUJhc2U+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJY2VDYW5kaWRhdGVCYXNlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBsYWJlbCwgY29u
c3QgU3RyaW5nJiBjYW5kaWRhdGVMaW5lKTsKKyAgICB2aXJ0dWFsIH5JY2VDYW5kaWRhdGVCYXNl
KCk7CisKKyAgICBTdHJpbmcgbGFiZWwoKSB7IHJldHVybiBtX2xhYmVsOyB9CisgICAgU3RyaW5n
IGNhbmRpZGF0ZUxpbmUoKSB7IHJldHVybiBtX2NhbmRpZGF0ZUxpbmU7IH0KKworICAgIFN0cmlu
ZyB0b1NkcCgpOworCitwcml2YXRlOgorICAgIEljZUNhbmRpZGF0ZUJhc2UoY29uc3QgU3RyaW5n
JiBsYWJlbCwgY29uc3QgU3RyaW5nJiBjYW5kaWRhdGVMaW5lKTsKKworICAgIFN0cmluZyBtX2xh
YmVsOworICAgIFN0cmluZyBtX2NhbmRpZGF0ZUxpbmU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8gSWNl
Q2FuZGlkYXRlQmFzZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9JY2VPcHRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL0ljZU9wdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVlM2QyOWViYzgxM2RmYTUwNDIyOTE4ZGNj
ZmEzMjIzODQwMTgyOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9JY2VPcHRpb25zLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUg
IkljZU9wdGlvbnMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPEljZU9w
dGlvbnM+IEljZU9wdGlvbnM6OmNyZWF0ZShVc2VDYW5kaWRhdGVzT3B0aW9uIHVzZUNhbmRpZGF0
ZXMpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJY2VPcHRpb25zKHVzZUNhbmRpZGF0ZXMp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElB
X1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L0ljZU9wdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL0ljZU9w
dGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wMzkwNWFkNjU0YTNlNGJjNjhmYjNkYjcwZDM4YmUyMTljYTk1
MTkyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vSWNlT3B0aW9ucy5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgor
ICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEljZU9wdGlv
bnNfaAorI2RlZmluZSBJY2VPcHRpb25zX2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisK
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSWNlT3B0aW9ucyA6IHB1YmxpYyBSZWZD
b3VudGVkPEljZU9wdGlvbnM+IHsKK3B1YmxpYzoKKyAgICBlbnVtIFVzZUNhbmRpZGF0ZXNPcHRp
b24geworICAgICAgICBBTEwsCisgICAgICAgIE5PX1JFTEFZLAorICAgICAgICBPTkxZX1JFTEFZ
LAorICAgIH07CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJY2VPcHRpb25zPiBjcmVhdGUoVXNl
Q2FuZGlkYXRlc09wdGlvbik7CisgICAgdmlydHVhbCB+SWNlT3B0aW9ucygpIHsgfQorCisgICAg
VXNlQ2FuZGlkYXRlc09wdGlvbiB1c2VDYW5kaWRhdGVzKCkgeyByZXR1cm4gbV91c2VDYW5kaWRh
dGVzOyB9CisKKyBwcml2YXRlOgorICAgIEljZU9wdGlvbnMoVXNlQ2FuZGlkYXRlc09wdGlvbiB1
c2VDYW5kaWRhdGVzKSA6IG1fdXNlQ2FuZGlkYXRlcyh1c2VDYW5kaWRhdGVzKSB7IH0KKworICAg
IFVzZUNhbmRpZGF0ZXNPcHRpb24gbV91c2VDYW5kaWRhdGVzOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8v
IEljZU9wdGlvbnNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vTWVkaWFIaW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9NZWRpYUhpbnRzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YmM1Njk1ZDhjY2I2ZWRmNTk5ZjlhNjliNDg3
YWRlYjcyNjE3YTUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFIaW50cy5jcHAKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0
cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJN
ZWRpYUhpbnRzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxNZWRpYUhp
bnRzPiBNZWRpYUhpbnRzOjpjcmVhdGUoYm9vbCBhdWRpbywgYm9vbCB2aWRlbykKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhSGludHMoYXVkaW8sIHZpZGVvKSk7Cit9CisKK2Jvb2wg
TWVkaWFIaW50czo6YXVkaW8oKQoreworICAgIHJldHVybiBtX2F1ZGlvOworfQorCitib29sIE1l
ZGlhSGludHM6OnZpZGVvKCkKK3sKKyAgICByZXR1cm4gbV92aWRlbzsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhSGludHMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhSGludHMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42NDU1ZWI2ZGQ2MWI3YjVmYjMxZWQ3NTVkZjkyZjM5NDkzMDI0YTAwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFIaW50cy5oCkBA
IC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAq
ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1lZGlhSGludHNfaAorI2RlZmluZSBNZWRp
YUhpbnRzX2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgTWVkaWFIaW50cyA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhSGludHM+
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUhpbnRzPiBjcmVhdGUoYm9v
bCBhdWRpbywgYm9vbCB2aWRlbyk7CisgICAgdmlydHVhbCB+TWVkaWFIaW50cygpIHsgfQorCisg
ICAgYm9vbCBhdWRpbygpOworICAgIGJvb2wgdmlkZW8oKTsKKworIHByaXZhdGU6CisgICAgTWVk
aWFIaW50cyhib29sIGF1ZGlvLCBib29sIHZpZGVvKSA6IG1fYXVkaW8oYXVkaW8pLCBtX3ZpZGVv
KHZpZGVvKSB7IH0KKworICAgIGJvb2wgbV9hdWRpbzsKKyAgICBib29sIG1fdmlkZW87Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFN
KQorCisjZW5kaWYgLy8gTWVkaWFIaW50c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNlbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNlbnRlci5jcHAKaW5kZXggYWJjY2Y1
YjliYzNiOTU3OWQzYjhiNTJjNjAyYmNlMjNhMmRlODAxNC4uNDRmODk3ZDhhMmQxMzkyMmM3Mzcz
NWM2YTc3OTgzNDZmMmU3ZTQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmNwcApAQCAtODUsNiArODUsMTYg
QEAgdm9pZCBNZWRpYVN0cmVhbUNlbnRlcjo6ZGlkQ29uc3RydWN0TWVkaWFTdHJlYW0oTWVkaWFT
dHJlYW1EZXNjcmlwdG9yKikKIHsKIH0KIAorU3RyaW5nIE1lZGlhU3RyZWFtQ2VudGVyOjpkb0Nv
bnN0cnVjdFNkcChJY2VDYW5kaWRhdGUqKQoreworICAgIHJldHVybiAiIjsKK30KKworU3RyaW5n
IE1lZGlhU3RyZWFtQ2VudGVyOjpkb0NvbnN0cnVjdFNkcChTZXNzaW9uRGVzY3JpcHRvciopCit7
CisgICAgcmV0dXJuICIiOworfQorCiAjZW5kaWYgLy8gIVBMQVRGT1JNKENIUk9NSVVNKQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNlbnRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIuaAppbmRleCBhMzdkNjZhMjZjNzY1MWJj
ZGJhMWM3Yzg3ZmM0YzJhYzBhOGY2MTg5Li43YjhjYjAwMDRlMTcwNGM0ZTIwYzhkZTcwZTY4ZTI3
NjI5ZjdmMmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9NZWRpYVN0cmVhbUNlbnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDggKzQzLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIE1lZGlhU3RyZWFtQ2VudGVySW50ZXJuYWw7CiAjZW5kaWYKIAorY2xhc3MgSWNl
Q2FuZGlkYXRlQmFzZTsKIGNsYXNzIE1lZGlhU3RyZWFtQ29tcG9uZW50OwogY2xhc3MgTWVkaWFT
dHJlYW1EZXNjcmlwdG9yOworY2xhc3MgU2Vzc2lvbkRlc2NyaXB0aW9uQmFzZTsKIAogY2xhc3Mg
TWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0
cmVhbVNvdXJjZXNRdWVyeUNsaWVudD4gewogcHVibGljOgpAQCAtNzQsNiArNzcsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBkaWRTdG9wTG9jYWxNZWRpYVN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0
b3IqKTsKICAgICB2b2lkIGRpZENvbnN0cnVjdE1lZGlhU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3Jp
cHRvciopOwogCisgICAgU3RyaW5nIGRvQ29uc3RydWN0U2RwKEljZUNhbmRpZGF0ZUJhc2UqKTsK
KyAgICBTdHJpbmcgZG9Db25zdHJ1Y3RTZHAoU2Vzc2lvbkRlc2NyaXB0aW9uQmFzZSopOworCiAg
ICAgLy8gQ2FsbHMgZnJvbSB0aGUgcGxhdGZvcm0gdG8gdXBkYXRlIHRoZSBET00gb2JqZWN0cwog
ICAgIHZvaWQgZW5kTG9jYWxNZWRpYVN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3IqKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlckNvbm5l
Y3Rpb25IYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1Bl
ZXJDb25uZWN0aW9uSGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2ZjNDQ4NjNkMjVkMWQyNzY0Y2M1
N2I3ZDEzNTczYzQ1NTM1OWQ4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uSGFuZGxlci5jcHAKQEAgLTAsMCArMSwx
MTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEFCLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAg
ICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisg
KiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCisKKyNpbmNsdWRlICJQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaCIKKworI2luY2x1ZGUgIklj
ZUNhbmRpZGF0ZUJhc2UuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKKyNp
bmNsdWRlICJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaCIKKyNpbmNsdWRlICJTZXNzaW9u
RGVzY3JpcHRpb25CYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRHVtbXkgaW1w
bGVtZW50YXRpb25zIGJlbG93IGZvciBwb3J0cyB0aGF0IGJ1aWxkIHdpdGggTUVESUFfU1RSRUFN
IGVuYWJsZWQgYnkgZGVmYXVsdC4KKworUGFzc093blB0cjxQZWVyQ29ubmVjdGlvbkhhbmRsZXI+
IFBlZXJDb25uZWN0aW9uSGFuZGxlcjo6Y3JlYXRlKFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVu
dCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0IFN0cmlu
ZyYgdXNlcm5hbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQZWVyQ29ubmVjdGlvbkhh
bmRsZXIoY2xpZW50LCBzZXJ2ZXJDb25maWd1cmF0aW9uLCB1c2VybmFtZSkpOworfQorCitQZWVy
Q29ubmVjdGlvbkhhbmRsZXI6OlBlZXJDb25uZWN0aW9uSGFuZGxlcihQZWVyQ29ubmVjdGlvbkhh
bmRsZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKKyAgICA6
IG1fY2xpZW50KGNsaWVudCkKK3sKK30KKworUGVlckNvbm5lY3Rpb25IYW5kbGVyOjp+UGVlckNv
bm5lY3Rpb25IYW5kbGVyKCkKK3sKK30KKworUGFzc1JlZlB0cjxTZXNzaW9uRGVzY3JpcHRpb25C
YXNlPiBQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OmNyZWF0ZU9mZmVyKFBhc3NSZWZQdHI8TWVkaWFI
aW50cz4pCit7CisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8U2Vzc2lvbkRlc2NyaXB0
aW9uQmFzZT4gUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpjcmVhdGVBbnN3ZXIoY29uc3QgU3RyaW5n
JiBvZmZlciwgUGFzc1JlZlB0cjxNZWRpYUhpbnRzPikKK3sKKyAgICByZXR1cm4gMDsKK30KKwor
Ym9vbCBQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnNldExvY2FsRGVzY3JpcHRpb24oaW50IGFjdGlv
biwgUGFzc1JlZlB0cjxTZXNzaW9uRGVzY3JpcHRpb25CYXNlPikKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpzZXRSZW1vdGVEZXNjcmlwdGlv
bihpbnQgYWN0aW9uLCBQYXNzUmVmUHRyPFNlc3Npb25EZXNjcmlwdGlvbkJhc2U+KQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworUGFzc1JlZlB0cjxTZXNzaW9uRGVzY3JpcHRpb25CYXNlPiBQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXI6OmxvY2FsRGVzY3JpcHRpb24oKQoreworICAgIHJldHVybiAw
OworfQorCitQYXNzUmVmUHRyPFNlc3Npb25EZXNjcmlwdGlvbkJhc2U+IFBlZXJDb25uZWN0aW9u
SGFuZGxlcjo6cmVtb3RlRGVzY3JpcHRpb24oKQoreworICAgIHJldHVybiAwOworfQorCitib29s
IFBlZXJDb25uZWN0aW9uSGFuZGxlcjo6c3RhcnRJY2UoUGFzc1JlZlB0cjxJY2VPcHRpb25zPikK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpw
cm9jZXNzSWNlTWVzc2FnZShQYXNzUmVmUHRyPEljZUNhbmRpZGF0ZUJhc2U+KQoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OmFkZFN0cmVhbShQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4pCit7Cit9CisKK3ZvaWQgUGVlckNvbm5l
Y3Rpb25IYW5kbGVyOjpyZW1vdmVTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0
b3I+KQoreworfQorCit2b2lkIFBlZXJDb25uZWN0aW9uSGFuZGxlcjo6c3RvcCgpCit7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVyQ29u
bmVjdGlvbkhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1Bl
ZXJDb25uZWN0aW9uSGFuZGxlci5oCmluZGV4IGZhMjJjZjRjN2NhNDI4MDU1Mjk5M2U0MjNlYWJl
Y2Q4NzNkZjFhYzUuLjNkNWVhZDExOTNlYmE3NGI5MGJjMTgyYjk5MmNkZDg0MzcyNGVjYjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0
aW9uSGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1Bl
ZXJDb25uZWN0aW9uSGFuZGxlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMSw3ICsxMSw3IEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKICAqICAgIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
ICAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24g
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwogICogICAg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGlzCiAgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KICAqCkBAIC00MCwxMSArNDAsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBJY2VDYW5kaWRhdGVCYXNlOworY2xhc3MgSWNlT3B0aW9uczsKK2NsYXNzIE1lZGlhSGlu
dHM7CiBjbGFzcyBQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQ7Ci0KLSNpZiBQTEFURk9STShD
SFJPTUlVTSkKLWNsYXNzIFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOwotI2VuZGlmCitj
bGFzcyBTZXNzaW9uRGVzY3JpcHRpb25CYXNlOwogCiBjbGFzcyBQZWVyQ29ubmVjdGlvbkhhbmRs
ZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBlZXJDb25uZWN0aW9uSGFuZGxlcik7CkBA
IC01MywyMiArNTMsMjIgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPFBlZXJDb25u
ZWN0aW9uSGFuZGxlcj4gY3JlYXRlKFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCosIGNvbnN0
IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgY29uc3QgU3RyaW5nJiB1c2VybmFtZSk7CiAg
ICAgflBlZXJDb25uZWN0aW9uSGFuZGxlcigpOwogCi0gICAgdm9pZCBwcm9kdWNlSW5pdGlhbE9m
ZmVyKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMp
OwotICAgIHZvaWQgaGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmluZyYgc2RwKTsKLSAgICB2
b2lkIHByb2Nlc3NTRFAoY29uc3QgU3RyaW5nJiBzZHApOwotICAgIHZvaWQgcHJvY2Vzc1BlbmRp
bmdTdHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0
cmVhbXMsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ1JlbW92ZVN0
cmVhbXMpOwotICAgIHZvaWQgc2VuZERhdGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEs
IHNpemVfdCBsZW5ndGgpOwotCisgICAgUGFzc1JlZlB0cjxTZXNzaW9uRGVzY3JpcHRpb25CYXNl
PiBjcmVhdGVPZmZlcihQYXNzUmVmUHRyPE1lZGlhSGludHM+KTsKKyAgICBQYXNzUmVmUHRyPFNl
c3Npb25EZXNjcmlwdGlvbkJhc2U+IGNyZWF0ZUFuc3dlcihjb25zdCBTdHJpbmcmIG9mZmVyLCBQ
YXNzUmVmUHRyPE1lZGlhSGludHM+KTsKKyAgICBib29sIHNldExvY2FsRGVzY3JpcHRpb24oaW50
IGFjdGlvbiwgUGFzc1JlZlB0cjxTZXNzaW9uRGVzY3JpcHRpb25CYXNlPik7CisgICAgYm9vbCBz
ZXRSZW1vdGVEZXNjcmlwdGlvbihpbnQgYWN0aW9uLCBQYXNzUmVmUHRyPFNlc3Npb25EZXNjcmlw
dGlvbkJhc2U+KTsKKyAgICBQYXNzUmVmUHRyPFNlc3Npb25EZXNjcmlwdGlvbkJhc2U+IGxvY2Fs
RGVzY3JpcHRpb24oKTsKKyAgICBQYXNzUmVmUHRyPFNlc3Npb25EZXNjcmlwdGlvbkJhc2U+IHJl
bW90ZURlc2NyaXB0aW9uKCk7CisgICAgYm9vbCBzdGFydEljZShQYXNzUmVmUHRyPEljZU9wdGlv
bnM+KTsKKyAgICBib29sIHByb2Nlc3NJY2VNZXNzYWdlKFBhc3NSZWZQdHI8SWNlQ2FuZGlkYXRl
QmFzZT4pOworICAgIHZvaWQgYWRkU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlw
dG9yPik7CisgICAgdm9pZCByZW1vdmVTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2Ny
aXB0b3I+KTsKICAgICB2b2lkIHN0b3AoKTsKIAogcHJpdmF0ZToKICAgICBQZWVyQ29ubmVjdGlv
bkhhbmRsZXIoUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiBzZXJ2
ZXJDb25maWd1cmF0aW9uLCBjb25zdCBTdHJpbmcmIHVzZXJuYW1lKTsKIAotI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQotICAgIE93blB0cjxQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbD4gbV9w
cml2YXRlOwotI2VsaWYgVVNFKEdTVFJFQU1FUikKICAgICBQZWVyQ29ubmVjdGlvbkhhbmRsZXJD
bGllbnQqIG1fY2xpZW50OwotI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVyQ29ubmVj
dGlvbkhhbmRsZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L1BlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oCmluZGV4IGU2N2VmM2E1NTg0MDNhOWI4NWQ3
NGFkZTcxMjQ1MzgzYTYyYzY4N2UuLjU3ODY2NjQ4YWI3MWNiMjk1OWNjZmU5YWQxMzliODk0NDE2
MzU3NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1Bl
ZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgQUIuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSw3ICsxMSw3IEBACiAgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKICAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKICAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhl
IG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAz
LiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNv
bnRyaWJ1dG9ycwogICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCiAgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCkBAIC0zOCwyNiArMzgsMTggQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitjbGFzcyBJY2VDYW5kaWRhdGVCYXNlOwogY2xhc3MgTWVkaWFTdHJl
YW1EZXNjcmlwdG9yOwogCiBjbGFzcyBQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQgewogcHVi
bGljOgotICAgIC8vIE5hbWUgYW5kIHZhbHVlcyBvZiB0aGUgZW51bSBtdXN0IG1hdGNoIHRoZSBj
b3JyZXNzcG9uZGluZyBjb25zdGFudHMgaW4gdGhlIFBlZXJDb25uZWN0aW9uLmlkbCBmaWxlLgot
ICAgIGVudW0gUmVhZHlTdGF0ZSB7Ci0gICAgICAgIE5FVyA9IDAsCi0gICAgICAgIE5FR09USUFU
SU5HID0gMSwKLSAgICAgICAgQUNUSVZFID0gMiwKLSAgICAgICAgQ0xPU0VEID0gMwotICAgIH07
Ci0KICAgICB2aXJ0dWFsIH5QZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQoKSB7IH0KIAotICAg
IHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZUlDRVByb2Nlc3NpbmcoKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGRpZEdlbmVyYXRlU0RQKGNvbnN0IFN0cmluZyYgc2RwKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVEYXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiBkYXRhLCBzaXpl
X3QgbGVuZ3RoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZEdlbmVyYXRlSWNlQ2FuZGlkYXRl
KFBhc3NSZWZQdHI8SWNlQ2FuZGlkYXRlQmFzZT4sIGJvb2wgbW9yZVRvRm9sbG93KSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVJlYWR5U3RhdGUodWludDMyX3Qgc3RhdGUpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlSWNlU3RhdGUodWludDMyX3Qgc3RhdGUpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkUmVtb3RlU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1EZXNjcmlwdG9yPikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZW1vdmVSZW1vdGVTdHJl
YW0oTWVkaWFTdHJlYW1EZXNjcmlwdG9yKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFu
Z2VTdGF0ZShSZWFkeVN0YXRlKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9TZXNzaW9uRGVz
Y3JpcHRpb25CYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1Nl
c3Npb25EZXNjcmlwdGlvbkJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlNzA1YjA0OWVlYTJkZmJmYjgw
YWYyYmUxOGNmMzZkMDFmYTE3MjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9TZXNzaW9uRGVzY3JpcHRpb25CYXNlLmNwcApAQCAtMCwwICsx
LDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
ICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMK
KyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKKworI2luY2x1ZGUgIlNlc3Npb25EZXNjcmlwdGlvbkJhc2UuaCIKKworI2luY2x1ZGUg
IkljZUNhbmRpZGF0ZUJhc2UuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbUNlbnRlci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8U2Vzc2lvbkRlc2NyaXB0aW9uQmFzZT4g
U2Vzc2lvbkRlc2NyaXB0aW9uQmFzZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgc2RwKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uQmFzZShzZHApKTsKK30KKwor
U2Vzc2lvbkRlc2NyaXB0aW9uQmFzZTo6U2Vzc2lvbkRlc2NyaXB0aW9uQmFzZShjb25zdCBTdHJp
bmcmIHNkcCkKKyAgICA6IG1faW5pdGlhbFNkcChzZHApCit7Cit9CisKK1Nlc3Npb25EZXNjcmlw
dGlvbkJhc2U6On5TZXNzaW9uRGVzY3JpcHRpb25CYXNlKCkKK3sKK30KKwordm9pZCBTZXNzaW9u
RGVzY3JpcHRpb25CYXNlOjphZGRDYW5kaWRhdGUoUGFzc1JlZlB0cjxJY2VDYW5kaWRhdGVCYXNl
PiBjYW5kaWRhdGUpCit7CisgICAgbV9jYW5kaWRhdGVzLmFwcGVuZChjYW5kaWRhdGUpOworfQor
CitTdHJpbmcgU2Vzc2lvbkRlc2NyaXB0aW9uQmFzZTo6dG9TZHAoKQoreworICAgIHJldHVybiBN
ZWRpYVN0cmVhbUNlbnRlcjo6aW5zdGFuY2UoKS5kb0NvbnN0cnVjdFNkcCh0aGlzKTsKK30KKwor
c2l6ZV90IFNlc3Npb25EZXNjcmlwdGlvbkJhc2U6Om51bWJlck9mQWRkZWRDYW5kaWRhdGVzKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9jYW5kaWRhdGVzLnNpemUoKTsKK30KKworSWNlQ2FuZGlk
YXRlQmFzZSogU2Vzc2lvbkRlc2NyaXB0aW9uQmFzZTo6Y2FuZGlkYXRlKHNpemVfdCBpbmRleCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9jYW5kaWRhdGVzW2luZGV4XS5nZXQoKTsKK30KKworU3Ry
aW5nIFNlc3Npb25EZXNjcmlwdGlvbkJhc2U6OmluaXRpYWxTZHAoKQoreworICAgIHJldHVybiBt
X2luaXRpYWxTZHA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9TZXNzaW9uRGVzY3JpcHRpb25CYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9TZXNzaW9uRGVzY3JpcHRpb25CYXNlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTkz
Nzk5MjUzOTg4MDA0ZDA1NTI0MWMzMmE1MzczNGNhNDJlMzIxOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1Nlc3Npb25EZXNjcmlwdGlvbkJh
c2UuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0
b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTZXNzaW9uRGVzY3JpcHRpb25C
YXNlX2gKKyNkZWZpbmUgU2Vzc2lvbkRlc2NyaXB0aW9uQmFzZV9oCisKKyNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEljZUNhbmRpZGF0ZUJhc2U7CisKK2NsYXNzIFNlc3Npb25E
ZXNjcmlwdGlvbkJhc2UgOiBwdWJsaWMgUmVmQ291bnRlZDxTZXNzaW9uRGVzY3JpcHRpb25CYXNl
PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2Vzc2lvbkRlc2NyaXB0aW9uQmFz
ZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgc2RwKTsKKyAgICB2aXJ0dWFsIH5TZXNzaW9uRGVzY3Jp
cHRpb25CYXNlKCk7CisKKyAgICB2b2lkIGFkZENhbmRpZGF0ZShQYXNzUmVmUHRyPEljZUNhbmRp
ZGF0ZUJhc2U+KTsKKyAgICBTdHJpbmcgdG9TZHAoKTsKKworICAgIHNpemVfdCBudW1iZXJPZkFk
ZGVkQ2FuZGlkYXRlcygpIGNvbnN0OworICAgIEljZUNhbmRpZGF0ZUJhc2UqIGNhbmRpZGF0ZShz
aXplX3QgaW5kZXgpIGNvbnN0OworICAgIFN0cmluZyBpbml0aWFsU2RwKCk7CisKK3ByaXZhdGU6
CisgICAgU2Vzc2lvbkRlc2NyaXB0aW9uQmFzZShjb25zdCBTdHJpbmcmIHNkcCk7CisKKyAgICBT
dHJpbmcgbV9pbml0aWFsU2RwOworICAgIFZlY3RvcjxSZWZQdHI8SWNlQ2FuZGlkYXRlQmFzZT4g
PiBtX2NhbmRpZGF0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8gU2Vzc2lvbkRlc2NyaXB0aW9uQmFz
ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9u
SGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDZlM2Q1ODY2MzdjNGQ3YzMwZTE1MzY3MTI1MzBlNGNm
MjA2M2I1OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyLmNwcApAQCAt
MCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCisKKyNpbmNsdWRlICJEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgi
CisKKyNpbmNsdWRlICJEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxEZXByZWNhdGVkUGVlckNvbm5lY3Rp
b25IYW5kbGVyPiBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpjcmVhdGUoRGVwcmVj
YXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHNl
cnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0IFN0cmluZyYgdXNlcm5hbWUpCit7CisgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyKGNsaWVudCwgc2Vy
dmVyQ29uZmlndXJhdGlvbiwgdXNlcm5hbWUpKTsKK30KKworLy8gRW1wdHkgaW1wbGVtZW50YXRp
b25zIGZvciBwb3J0cyB0aGF0IGJ1aWxkIHdpdGggTUVESUFfU1RSRUFNIGVuYWJsZWQgYnkgZGVm
YXVsdC4KK0RlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OkRlcHJlY2F0ZWRQZWVyQ29u
bmVjdGlvbkhhbmRsZXIoRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCosIGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7Cit9CisKK0RlcHJlY2F0ZWRQZWVyQ29ubmVj
dGlvbkhhbmRsZXI6On5EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyKCkKK3sKK30KKwor
dm9pZCBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpwcm9kdWNlSW5pdGlhbE9mZmVy
KGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYpCit7Cit9CisKK3ZvaWQgRGVwcmVj
YXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlcjo6aGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmlu
ZyYpCit7Cit9CisKK3ZvaWQgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlcjo6cHJvY2Vz
c1NEUChjb25zdCBTdHJpbmcmKQoreworfQorCit2b2lkIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlv
bkhhbmRsZXI6OnByb2Nlc3NQZW5kaW5nU3RyZWFtcyhjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0
b3JWZWN0b3ImLCBjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImKQoreworfQorCit2
b2lkIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnNlbmREYXRhU3RyZWFtTWVzc2Fn
ZShjb25zdCBjaGFyKiwgc2l6ZV90KQoreworfQorCit2b2lkIERlcHJlY2F0ZWRQZWVyQ29ubmVj
dGlvbkhhbmRsZXI6OnN0b3AoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1BlZXJDb25uZWN0aW9uSGFuZGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUGVlckNvbm5l
Y3Rpb25IYW5kbGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzcxMjkzNDEy
ZGUyMmIzZTNjMzgzY2MzMWExZDRiMDdhNTUyZjJjZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvUGVlckNvbm5lY3Rpb25IYW5kbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5h
bWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKLQotI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uSGFuZGxlci5oIgotCi0jaW5jbHVk
ZSAiUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotUGFzc093blB0cjxQZWVyQ29ubmVjdGlvbkhhbmRsZXI+IFBlZXJDb25uZWN0aW9uSGFuZGxl
cjo6Y3JlYXRlKFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJp
bmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0IFN0cmluZyYgdXNlcm5hbWUpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBQZWVyQ29ubmVjdGlvbkhhbmRsZXIoY2xpZW50LCBzZXJ2ZXJD
b25maWd1cmF0aW9uLCB1c2VybmFtZSkpOwotfQotCi0vLyBFbXB0eSBpbXBsZW1lbnRhdGlvbnMg
Zm9yIHBvcnRzIHRoYXQgYnVpbGQgd2l0aCBNRURJQV9TVFJFQU0gZW5hYmxlZCBieSBkZWZhdWx0
LgotUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpQZWVyQ29ubmVjdGlvbkhhbmRsZXIoUGVlckNvbm5l
Y3Rpb25IYW5kbGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKLXsKLX0K
LQotUGVlckNvbm5lY3Rpb25IYW5kbGVyOjp+UGVlckNvbm5lY3Rpb25IYW5kbGVyKCkKLXsKLX0K
LQotdm9pZCBQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnByb2R1Y2VJbml0aWFsT2ZmZXIoY29uc3Qg
TWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJikKLXsKLX0KLQotdm9pZCBQZWVyQ29ubmVjdGlv
bkhhbmRsZXI6OmhhbmRsZUluaXRpYWxPZmZlcihjb25zdCBTdHJpbmcmKQotewotfQotCi12b2lk
IFBlZXJDb25uZWN0aW9uSGFuZGxlcjo6cHJvY2Vzc1NEUChjb25zdCBTdHJpbmcmKQotewotfQot
Ci12b2lkIFBlZXJDb25uZWN0aW9uSGFuZGxlcjo6cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKGNvbnN0
IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRv
clZlY3RvciYpCi17Ci19Ci0KLXZvaWQgUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpzZW5kRGF0YVN0
cmVhbU1lc3NhZ2UoY29uc3QgY2hhciosIHNpemVfdCkKLXsKLX0KLQotdm9pZCBQZWVyQ29ubmVj
dGlvbkhhbmRsZXI6OnN0b3AoKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmlu
ZGV4IDFlMWE0MTY2NWU3OWRkMmNhNWQzOGFkZWQ2OTU4NTE5ZTE1NzQxNDMuLjJhZmU3YmI2MmUz
MTMwNWE2YjlkMDEzYWMwYmY5OTcwMmMwZTdiMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXAKQEAgLTkxLDEyICs5MSwxMiBAQAogICAgICAgICAgICAgICAgICdXRUJLSVRfSU1QTEVNRU5U
QVRJT049MScsCiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCisgICAg
ICAgICAgICAgICAgJ2JyaWRnZS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyLmNwcCcs
CisgICAgICAgICAgICAgICAgJ2JyaWRnZS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVy
SW50ZXJuYWwuY3BwJywKKyAgICAgICAgICAgICAgICAnYnJpZGdlL0RlcHJlY2F0ZWRQZWVyQ29u
bmVjdGlvbkhhbmRsZXJJbnRlcm5hbC5oJywKICAgICAgICAgICAgICAgICAnYnJpZGdlL01lZGlh
U3RyZWFtQ2VudGVyLmNwcCcsCiAgICAgICAgICAgICAgICAgJ2JyaWRnZS9NZWRpYVN0cmVhbUNl
bnRlckludGVybmFsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ2JyaWRnZS9NZWRpYVN0cmVhbUNl
bnRlckludGVybmFsLmgnLAotICAgICAgICAgICAgICAgICdicmlkZ2UvUGVlckNvbm5lY3Rpb25I
YW5kbGVyLmNwcCcsCi0gICAgICAgICAgICAgICAgJ2JyaWRnZS9QZWVyQ29ubmVjdGlvbkhhbmRs
ZXJJbnRlcm5hbC5jcHAnLAotICAgICAgICAgICAgICAgICdicmlkZ2UvUGVlckNvbm5lY3Rpb25I
YW5kbGVySW50ZXJuYWwuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJBY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkFjY2Vzc2liaWxpdHlS
b2xlLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvRGVwcmVj
YXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2Jy
aWRnZS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMGQ1
ZjE3ZTM5NTc5ZWJjNjczMGRjNTliYTVjYmMyY2I5MGE5NzY0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFu
ZGxlci5jcHAKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5k
bGVyLmgiCisKKyNpbmNsdWRlICJEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50
LmgiCisjaW5jbHVkZSAiRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxEZXByZWNhdGVkUGVlckNvbm5l
Y3Rpb25IYW5kbGVyPiBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpjcmVhdGUoRGVw
cmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcm
IHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0IFN0cmluZyYgdXNlcm5hbWUpCit7CisgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyKGNsaWVudCwg
c2VydmVyQ29uZmlndXJhdGlvbiwgdXNlcm5hbWUpKTsKK30KKworRGVwcmVjYXRlZFBlZXJDb25u
ZWN0aW9uSGFuZGxlcjo6RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlcihEZXByZWNhdGVk
UGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgc2VydmVy
Q29uZmlndXJhdGlvbiwgY29uc3QgU3RyaW5nJiB1c2VybmFtZSkKKyAgICA6IG1fcHJpdmF0ZShh
ZG9wdFB0cihuZXcgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsKGNsaWVu
dCwgc2VydmVyQ29uZmlndXJhdGlvbiwgdXNlcm5hbWUpKSkKK3sKK30KKworRGVwcmVjYXRlZFBl
ZXJDb25uZWN0aW9uSGFuZGxlcjo6fkRlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXIoKQor
eworfQorCit2b2lkIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnByb2R1Y2VJbml0
aWFsT2ZmZXIoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nQWRkU3Ry
ZWFtcykKK3sKKyAgICBtX3ByaXZhdGUtPnByb2R1Y2VJbml0aWFsT2ZmZXIocGVuZGluZ0FkZFN0
cmVhbXMpOworfQorCit2b2lkIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OmhhbmRs
ZUluaXRpYWxPZmZlcihjb25zdCBTdHJpbmcmIHNkcCkKK3sKKyAgICBtX3ByaXZhdGUtPmhhbmRs
ZUluaXRpYWxPZmZlcihzZHApOworfQorCit2b2lkIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhh
bmRsZXI6OnByb2Nlc3NTRFAoY29uc3QgU3RyaW5nJiBzZHApCit7CisgICAgbV9wcml2YXRlLT5w
cm9jZXNzU0RQKHNkcCk7Cit9CisKK3ZvaWQgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxl
cjo6cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3Rv
ciYgcGVuZGluZ0FkZFN0cmVhbXMsIGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYg
cGVuZGluZ1JlbW92ZVN0cmVhbXMpCit7CisgICAgbV9wcml2YXRlLT5wcm9jZXNzUGVuZGluZ1N0
cmVhbXMocGVuZGluZ0FkZFN0cmVhbXMsIHBlbmRpbmdSZW1vdmVTdHJlYW1zKTsKK30KKwordm9p
ZCBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpzZW5kRGF0YVN0cmVhbU1lc3NhZ2Uo
Y29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBtX3ByaXZhdGUtPnNlbmRE
YXRhU3RyZWFtTWVzc2FnZShkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIERlcHJlY2F0ZWRQZWVy
Q29ubmVjdGlvbkhhbmRsZXI6OnN0b3AoKQoreworICAgIG1fcHJpdmF0ZS0+c3RvcCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFN
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvRGVwcmVjYXRlZFBl
ZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
YnJpZGdlL0RlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNzU5NTA3M2I1NmY1ZGE3OTlhM2EwOWE5YjkxODY5YWFkYjhiYWZjZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL0RlcHJlY2F0ZWRQZWVyQ29u
bmVjdGlvbkhhbmRsZXJJbnRlcm5hbC5jcHAKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiRGVwcmVjYXRl
ZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsLmgiCisKKyNpbmNsdWRlICJEZXByZWNhdGVk
UGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKKyNpbmNsdWRlICJXZWJLaXQuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQbGF0Zm9y
bVN1cHBvcnQuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJNZWRpYVN0cmVhbURlc2NyaXB0b3Iu
aCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaCIKKyNpbmNs
dWRlICJwbGF0Zm9ybS9XZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaCIKKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RlcHJlY2F0ZWRQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6RGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFu
ZGxlckludGVybmFsKERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQqIGNsaWVu
dCwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBjb25zdCBTdHJpbmcmIHVzZXJu
YW1lKQorICAgIDogbV9jbGllbnQoY2xpZW50KQoreworICAgIEFTU0VSVChtX2NsaWVudCk7Cisg
ICAgbV93ZWJIYW5kbGVyID0gYWRvcHRQdHIoV2ViS2l0Ojp3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQo
KS0+Y3JlYXRlUGVlckNvbm5lY3Rpb25IYW5kbGVyKHRoaXMpKTsKKyAgICAvLyBGSVhNRTogV2hl
biB0aGVyZSBpcyBzb21lIGVycm9yIHJlcG9ydGluZyBhdmFsaWFibGUgaW4gdGhlIFBlZXJDb25u
ZWN0aW9uIG9iamVjdCByZXBvcnQKKyAgICAvLyBpZiB3ZSBkaWRuJ3QgZ2V0IGEgV2ViUGVlckNv
bm5lY3Rpb25IYW5kbGVyIGluc3RhbmNlLgorCisgICAgaWYgKG1fd2ViSGFuZGxlcikgeworICAg
ICAgICAvLyBEdWFsIGNhbGxzIGR1ZSB0byBBUEkgY2hhbmdlCisgICAgICAgIG1fd2ViSGFuZGxl
ci0+aW5pdGlhbGl6ZShzZXJ2ZXJDb25maWd1cmF0aW9uLCB1c2VybmFtZSk7CisKKyAgICAgICAg
Ly8gREVQUkVDQVRFRAorICAgICAgICBtX3dlYkhhbmRsZXItPmluaXRpYWxpemUoc2VydmVyQ29u
ZmlndXJhdGlvbiwgU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcodXNlcm5hbWUpKTsK
KyAgICB9Cit9CisKK0RlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6fkRl
cHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbCgpCit7Cit9CisKK3ZvaWQgRGVw
cmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpwcm9kdWNlSW5pdGlhbE9mZmVy
KGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0cmVhbXMpCit7
CisgICAgaWYgKG1fd2ViSGFuZGxlcikKKyAgICAgICAgbV93ZWJIYW5kbGVyLT5wcm9kdWNlSW5p
dGlhbE9mZmVyKHBlbmRpbmdBZGRTdHJlYW1zKTsKK30KKwordm9pZCBEZXByZWNhdGVkUGVlckNv
bm5lY3Rpb25IYW5kbGVySW50ZXJuYWw6OmhhbmRsZUluaXRpYWxPZmZlcihjb25zdCBTdHJpbmcm
IHNkcCkKK3sKKyAgICBpZiAobV93ZWJIYW5kbGVyKQorICAgICAgICBtX3dlYkhhbmRsZXItPmhh
bmRsZUluaXRpYWxPZmZlcihzZHApOworfQorCit2b2lkIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlv
bkhhbmRsZXJJbnRlcm5hbDo6cHJvY2Vzc1NEUChjb25zdCBTdHJpbmcmIHNkcCkKK3sKKyAgICBp
ZiAobV93ZWJIYW5kbGVyKQorICAgICAgICBtX3dlYkhhbmRsZXItPnByb2Nlc3NTRFAoc2RwKTsK
K30KKwordm9pZCBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWw6OnByb2Nl
c3NQZW5kaW5nU3RyZWFtcyhjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRp
bmdBZGRTdHJlYW1zLCBjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdS
ZW1vdmVTdHJlYW1zKQoreworICAgIGlmIChtX3dlYkhhbmRsZXIpCisgICAgICAgIG1fd2ViSGFu
ZGxlci0+cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKHBlbmRpbmdBZGRTdHJlYW1zLCBwZW5kaW5nUmVt
b3ZlU3RyZWFtcyk7Cit9CisKK3ZvaWQgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlcklu
dGVybmFsOjpzZW5kRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxl
bmd0aCkKK3sKKyAgICBpZiAobV93ZWJIYW5kbGVyKQorICAgICAgICBtX3dlYkhhbmRsZXItPnNl
bmREYXRhU3RyZWFtTWVzc2FnZShkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIERlcHJlY2F0ZWRQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6c3RvcCgpCit7CisgICAgaWYgKG1fd2ViSGFu
ZGxlcikKKyAgICAgICAgbV93ZWJIYW5kbGVyLT5zdG9wKCk7Cit9CisKK3ZvaWQgRGVwcmVjYXRl
ZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpkaWRDb21wbGV0ZUlDRVByb2Nlc3Npbmco
KQoreworICAgIGlmIChtX3dlYkhhbmRsZXIpCisgICAgICAgIG1fY2xpZW50LT5kaWRDb21wbGV0
ZUlDRVByb2Nlc3NpbmcoKTsKK30KKwordm9pZCBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5k
bGVySW50ZXJuYWw6OmRpZEdlbmVyYXRlU0RQKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBzZHAp
Cit7CisgICAgaWYgKG1fd2ViSGFuZGxlcikKKyAgICAgICAgbV9jbGllbnQtPmRpZEdlbmVyYXRl
U0RQKHNkcCk7Cit9CisKK3ZvaWQgRGVwcmVjYXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVy
bmFsOjpkaWRSZWNlaXZlRGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90
IGxlbmd0aCkKK3sKKyAgICBpZiAobV93ZWJIYW5kbGVyKQorICAgICAgICBtX2NsaWVudC0+ZGlk
UmVjZWl2ZURhdGFTdHJlYW1NZXNzYWdlKGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgRGVwcmVj
YXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpkaWRBZGRSZW1vdGVTdHJlYW0oY29u
c3QgV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImIHdlYk1lZGlhU3RyZWFtRGVzY3Jp
cHRvcikKK3sKKyAgICBpZiAobV93ZWJIYW5kbGVyKQorICAgICAgICBtX2NsaWVudC0+ZGlkQWRk
UmVtb3RlU3RyZWFtKHdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgRGVwcmVj
YXRlZFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpkaWRSZW1vdmVSZW1vdGVTdHJlYW0o
Y29uc3QgV2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImIHdlYk1lZGlhU3RyZWFtRGVz
Y3JpcHRvcikKK3sKKyAgICBpZiAobV93ZWJIYW5kbGVyKQorICAgICAgICBtX2NsaWVudC0+ZGlk
UmVtb3ZlUmVtb3RlU3RyZWFtKHdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcik7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9EZXByZWNhdGVkUGVlckNvbm5l
Y3Rpb25IYW5kbGVySW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vYnJpZGdlL0Rl
cHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3ZmFi
N2Y3MzA4MTJkMGZlMjQ3NzliYmZiZmU0ZTZkNDU2NTYwOWIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9EZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5k
bGVySW50ZXJuYWwuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEZXByZWNhdGVkUGVlckNvbm5l
Y3Rpb25IYW5kbGVySW50ZXJuYWxfaAorI2RlZmluZSBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25I
YW5kbGVySW50ZXJuYWxfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUg
Ik1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlBlZXJDb25u
ZWN0aW9uSGFuZGxlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBlZXJDb25uZWN0aW9uSGFuZGxlcjsKK2NsYXNz
IFdlYlN0cmluZzsKK2NsYXNzIFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcjsKK30KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xp
ZW50OworCitjbGFzcyBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwgOiBw
dWJsaWMgV2ViS2l0OjpXZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQgeworcHVibGljOgor
ICAgIERlcHJlY2F0ZWRQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbChEZXByZWNhdGVkUGVl
ckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0
aW9uLCBjb25zdCBTdHJpbmcmIHVzZXJuYW1lKTsKKyAgICB+RGVwcmVjYXRlZFBlZXJDb25uZWN0
aW9uSGFuZGxlckludGVybmFsKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJvZHVjZUluaXRpYWxP
ZmZlcihjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1z
KTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmluZyYgc2Rw
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1NEUChjb25zdCBTdHJpbmcmIHNkcCk7CisgICAg
dmlydHVhbCB2b2lkIHByb2Nlc3NQZW5kaW5nU3RyZWFtcyhjb25zdCBNZWRpYVN0cmVhbURlc2Ny
aXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zLCBjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0
b3JWZWN0b3ImIHBlbmRpbmdSZW1vdmVTdHJlYW1zKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VuZERh
dGFTdHJlYW1NZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOworICAgIHZp
cnR1YWwgdm9pZCBzdG9wKCk7CisKKyAgICAvLyBXZWJLaXQ6OldlYlBlZXJDb25uZWN0aW9uSGFu
ZGxlckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVJ
Q0VQcm9jZXNzaW5nKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEdlbmVyYXRlU0RQKGNvbnN0IFdl
YktpdDo6V2ViU3RyaW5nJiBzZHApOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YVN0
cmVhbU1lc3NhZ2UoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7CisgICAgdmlydHVh
bCB2b2lkIGRpZEFkZFJlbW90ZVN0cmVhbShjb25zdCBXZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVz
Y3JpcHRvciYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZW1vdmVSZW1vdGVTdHJlYW0oY29uc3Qg
V2ViS2l0OjpXZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImKTsKKworcHJpdmF0ZToKKyAgICBPd25Q
dHI8V2ViS2l0OjpXZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXI+IG1fd2ViSGFuZGxlcjsKKyAgICBE
ZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KiBtX2NsaWVudDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisK
KyNlbmRpZiAvLyBEZXByZWNhdGVkUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWxfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvTWVkaWFTdHJlYW1DZW50ZXIu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvTWVkaWFTdHJlYW1DZW50ZXIuY3Bw
CmluZGV4IDk5ZjYzNmQ1MzY2YTFjMTRkMzZkYTJkNTdkZThmODdlMjg2Y2EzOTguLjRiNzBhYTcx
Mjg2NDE0ZGZiYTJmOGMxZGZjMWY0NzQwZGZiNjY5NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vYnJpZGdlL01lZGlhU3RyZWFtQ2VudGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL2JyaWRnZS9NZWRpYVN0cmVhbUNlbnRlci5jcHAKQEAgLTY5LDYgKzY5LDE2
IEBAIHZvaWQgTWVkaWFTdHJlYW1DZW50ZXI6OmRpZENvbnN0cnVjdE1lZGlhU3RyZWFtKE1lZGlh
U3RyZWFtRGVzY3JpcHRvciogc3RyZWFtKQogICAgIG1fcHJpdmF0ZS0+ZGlkQ29uc3RydWN0TWVk
aWFTdHJlYW0oc3RyZWFtKTsKIH0KIAorU3RyaW5nIE1lZGlhU3RyZWFtQ2VudGVyOjpkb0NvbnN0
cnVjdFNkcChJY2VDYW5kaWRhdGVCYXNlKiBpY2VDYW5kaWRhdGUpCit7CisgICAgcmV0dXJuICIi
OworfQorCitTdHJpbmcgTWVkaWFTdHJlYW1DZW50ZXI6OmRvQ29uc3RydWN0U2RwKFNlc3Npb25E
ZXNjcmlwdGlvbkJhc2UqIHNlc3Npb25EZXNjcmlwdGlvbikKK3sKKyAgICByZXR1cm4gIiI7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9QZWVyQ29ubmVj
dGlvbkhhbmRsZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9icmlkZ2UvUGVlckNvbm5l
Y3Rpb25IYW5kbGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5YjJkNDZj
YzJjNDcwNDdkZTdmYmQyYmRhMjMyNmIxZGRkZjk4NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9QZWVy
Q29ubmVjdGlvbkhhbmRsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNpbmNsdWRlICJQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXIuaCIKLQotI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uSGFuZGxl
ckNsaWVudC5oIgotI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc093blB0cjxQZWVyQ29ubmVjdGlvbkhhbmRsZXI+
IFBlZXJDb25uZWN0aW9uSGFuZGxlcjo6Y3JlYXRlKFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVu
dCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnN0IFN0cmlu
ZyYgdXNlcm5hbWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQZWVyQ29ubmVjdGlvbkhh
bmRsZXIoY2xpZW50LCBzZXJ2ZXJDb25maWd1cmF0aW9uLCB1c2VybmFtZSkpOwotfQotCi1QZWVy
Q29ubmVjdGlvbkhhbmRsZXI6OlBlZXJDb25uZWN0aW9uSGFuZGxlcihQZWVyQ29ubmVjdGlvbkhh
bmRsZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBj
b25zdCBTdHJpbmcmIHVzZXJuYW1lKQotICAgIDogbV9wcml2YXRlKGFkb3B0UHRyKG5ldyBQZWVy
Q29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbChjbGllbnQsIHNlcnZlckNvbmZpZ3VyYXRpb24sIHVz
ZXJuYW1lKSkpCi17Ci19Ci0KLVBlZXJDb25uZWN0aW9uSGFuZGxlcjo6flBlZXJDb25uZWN0aW9u
SGFuZGxlcigpCi17Ci19Ci0KLXZvaWQgUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpwcm9kdWNlSW5p
dGlhbE9mZmVyKGNvbnN0IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciYgcGVuZGluZ0FkZFN0
cmVhbXMpCi17Ci0gICAgbV9wcml2YXRlLT5wcm9kdWNlSW5pdGlhbE9mZmVyKHBlbmRpbmdBZGRT
dHJlYW1zKTsKLX0KLQotdm9pZCBQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OmhhbmRsZUluaXRpYWxP
ZmZlcihjb25zdCBTdHJpbmcmIHNkcCkKLXsKLSAgICBtX3ByaXZhdGUtPmhhbmRsZUluaXRpYWxP
ZmZlcihzZHApOwotfQotCi12b2lkIFBlZXJDb25uZWN0aW9uSGFuZGxlcjo6cHJvY2Vzc1NEUChj
b25zdCBTdHJpbmcmIHNkcCkKLXsKLSAgICBtX3ByaXZhdGUtPnByb2Nlc3NTRFAoc2RwKTsKLX0K
LQotdm9pZCBQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnByb2Nlc3NQZW5kaW5nU3RyZWFtcyhjb25z
dCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zLCBjb25zdCBN
ZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdSZW1vdmVTdHJlYW1zKQotewotICAg
IG1fcHJpdmF0ZS0+cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKHBlbmRpbmdBZGRTdHJlYW1zLCBwZW5k
aW5nUmVtb3ZlU3RyZWFtcyk7Ci19Ci0KLXZvaWQgUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpzZW5k
RGF0YVN0cmVhbU1lc3NhZ2UoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKLXsKLSAg
ICBtX3ByaXZhdGUtPnNlbmREYXRhU3RyZWFtTWVzc2FnZShkYXRhLCBsZW5ndGgpOwotfQotCi12
b2lkIFBlZXJDb25uZWN0aW9uSGFuZGxlcjo6c3RvcCgpCi17Ci0gICAgbV9wcml2YXRlLT5zdG9w
KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9QZWVy
Q29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2Jy
aWRnZS9QZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGQ4ZjYxZjdmMGJiYzA3YWU0ZmQwYzg5YTdhNTQzODc1YzFlMmY5NjYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9icmlkZ2UvUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJu
YWwuaCIKLQotI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5oIgotI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAicGxh
dGZvcm0vV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViUGVlckNvbm5lY3Rp
b25IYW5kbGVyLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVy
Q2xpZW50LmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1QZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6UGVlckNvbm5lY3Rpb25IYW5k
bGVySW50ZXJuYWwoUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0
cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgY29uc3QgU3RyaW5nJiB1c2VybmFtZSkKLSAgICA6
IG1fY2xpZW50KGNsaWVudCkKLXsKLSAgICBBU1NFUlQobV9jbGllbnQpOwotICAgIG1fd2ViSGFu
ZGxlciA9IGFkb3B0UHRyKFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNyZWF0ZVBl
ZXJDb25uZWN0aW9uSGFuZGxlcih0aGlzKSk7Ci0gICAgLy8gRklYTUU6IFdoZW4gdGhlcmUgaXMg
c29tZSBlcnJvciByZXBvcnRpbmcgYXZhbGlhYmxlIGluIHRoZSBQZWVyQ29ubmVjdGlvbiBvYmpl
Y3QgcmVwb3J0Ci0gICAgLy8gaWYgd2UgZGlkbid0IGdldCBhIFdlYlBlZXJDb25uZWN0aW9uSGFu
ZGxlciBpbnN0YW5jZS4KLQotICAgIGlmIChtX3dlYkhhbmRsZXIpIHsKLSAgICAgICAgLy8gRHVh
bCBjYWxscyBkdWUgdG8gQVBJIGNoYW5nZQotICAgICAgICBtX3dlYkhhbmRsZXItPmluaXRpYWxp
emUoc2VydmVyQ29uZmlndXJhdGlvbiwgdXNlcm5hbWUpOwotCi0gICAgICAgIC8vIERFUFJFQ0FU
RUQKLSAgICAgICAgbV93ZWJIYW5kbGVyLT5pbml0aWFsaXplKHNlcnZlckNvbmZpZ3VyYXRpb24s
IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKHVzZXJuYW1lKSk7Ci0gICAgfQotfQot
Ci1QZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6flBlZXJDb25uZWN0aW9uSGFuZGxlcklu
dGVybmFsKCkKLXsKLX0KLQotdm9pZCBQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6cHJv
ZHVjZUluaXRpYWxPZmZlcihjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRp
bmdBZGRTdHJlYW1zKQotewotICAgIGlmIChtX3dlYkhhbmRsZXIpCi0gICAgICAgIG1fd2ViSGFu
ZGxlci0+cHJvZHVjZUluaXRpYWxPZmZlcihwZW5kaW5nQWRkU3RyZWFtcyk7Ci19Ci0KLXZvaWQg
UGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWw6OmhhbmRsZUluaXRpYWxPZmZlcihjb25zdCBT
dHJpbmcmIHNkcCkKLXsKLSAgICBpZiAobV93ZWJIYW5kbGVyKQotICAgICAgICBtX3dlYkhhbmRs
ZXItPmhhbmRsZUluaXRpYWxPZmZlcihzZHApOwotfQotCi12b2lkIFBlZXJDb25uZWN0aW9uSGFu
ZGxlckludGVybmFsOjpwcm9jZXNzU0RQKGNvbnN0IFN0cmluZyYgc2RwKQotewotICAgIGlmICht
X3dlYkhhbmRsZXIpCi0gICAgICAgIG1fd2ViSGFuZGxlci0+cHJvY2Vzc1NEUChzZHApOwotfQot
Ci12b2lkIFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpwcm9jZXNzUGVuZGluZ1N0cmVh
bXMoY29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nQWRkU3RyZWFtcywg
Y29uc3QgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yJiBwZW5kaW5nUmVtb3ZlU3RyZWFtcykK
LXsKLSAgICBpZiAobV93ZWJIYW5kbGVyKQotICAgICAgICBtX3dlYkhhbmRsZXItPnByb2Nlc3NQ
ZW5kaW5nU3RyZWFtcyhwZW5kaW5nQWRkU3RyZWFtcywgcGVuZGluZ1JlbW92ZVN0cmVhbXMpOwot
fQotCi12b2lkIFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpzZW5kRGF0YVN0cmVhbU1l
c3NhZ2UoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBpZiAobV93ZWJI
YW5kbGVyKQotICAgICAgICBtX3dlYkhhbmRsZXItPnNlbmREYXRhU3RyZWFtTWVzc2FnZShkYXRh
LCBsZW5ndGgpOwotfQotCi12b2lkIFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsOjpzdG9w
KCkKLXsKLSAgICBpZiAobV93ZWJIYW5kbGVyKQotICAgICAgICBtX3dlYkhhbmRsZXItPnN0b3Ao
KTsKLX0KLQotdm9pZCBQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbDo6ZGlkQ29tcGxldGVJ
Q0VQcm9jZXNzaW5nKCkKLXsKLSAgICBpZiAobV93ZWJIYW5kbGVyKQotICAgICAgICBtX2NsaWVu
dC0+ZGlkQ29tcGxldGVJQ0VQcm9jZXNzaW5nKCk7Ci19Ci0KLXZvaWQgUGVlckNvbm5lY3Rpb25I
YW5kbGVySW50ZXJuYWw6OmRpZEdlbmVyYXRlU0RQKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBz
ZHApCi17Ci0gICAgaWYgKG1fd2ViSGFuZGxlcikKLSAgICAgICAgbV9jbGllbnQtPmRpZEdlbmVy
YXRlU0RQKHNkcCk7Ci19Ci0KLXZvaWQgUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWw6OmRp
ZFJlY2VpdmVEYXRhU3RyZWFtTWVzc2FnZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3Ro
KQotewotICAgIGlmIChtX3dlYkhhbmRsZXIpCi0gICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZl
RGF0YVN0cmVhbU1lc3NhZ2UoZGF0YSwgbGVuZ3RoKTsKLX0KLQotdm9pZCBQZWVyQ29ubmVjdGlv
bkhhbmRsZXJJbnRlcm5hbDo6ZGlkQWRkUmVtb3RlU3RyZWFtKGNvbnN0IFdlYktpdDo6V2ViTWVk
aWFTdHJlYW1EZXNjcmlwdG9yJiB3ZWJNZWRpYVN0cmVhbURlc2NyaXB0b3IpCi17Ci0gICAgaWYg
KG1fd2ViSGFuZGxlcikKLSAgICAgICAgbV9jbGllbnQtPmRpZEFkZFJlbW90ZVN0cmVhbSh3ZWJN
ZWRpYVN0cmVhbURlc2NyaXB0b3IpOwotfQotCi12b2lkIFBlZXJDb25uZWN0aW9uSGFuZGxlcklu
dGVybmFsOjpkaWRSZW1vdmVSZW1vdGVTdHJlYW0oY29uc3QgV2ViS2l0OjpXZWJNZWRpYVN0cmVh
bURlc2NyaXB0b3ImIHdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcikKLXsKLSAgICBpZiAobV93ZWJI
YW5kbGVyKQotICAgICAgICBtX2NsaWVudC0+ZGlkUmVtb3ZlUmVtb3RlU3RyZWFtKHdlYk1lZGlh
U3RyZWFtRGVzY3JpcHRvcik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL2JyaWRnZS9QZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbC5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9icmlkZ2UvUGVlckNvbm5lY3Rpb25IYW5kbGVySW50ZXJuYWwuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE3ZmQ5NmI1YjVjNzFmOWFiOWMwYTNlMWVlY2ZjYjdh
ZjUwY2FiMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL2JyaWRnZS9QZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5h
bC5oCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGVlckNvbm5lY3Rpb25I
YW5kbGVySW50ZXJuYWxfaAotI2RlZmluZSBQZWVyQ29ubmVjdGlvbkhhbmRsZXJJbnRlcm5hbF9o
Ci0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNj
cmlwdG9yLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xp
ZW50LmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotY2xhc3MgV2ViUGVlckNvbm5lY3Rpb25IYW5kbGVyOwotY2xhc3MgV2ViU3RyaW5nOwotY2xh
c3MgV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIFBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudDsKLQotY2xhc3MgUGVlckNvbm5lY3Rp
b25IYW5kbGVySW50ZXJuYWwgOiBwdWJsaWMgV2ViS2l0OjpXZWJQZWVyQ29ubmVjdGlvbkhhbmRs
ZXJDbGllbnQgewotcHVibGljOgotICAgIFBlZXJDb25uZWN0aW9uSGFuZGxlckludGVybmFsKFBl
ZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCosIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJh
dGlvbiwgY29uc3QgU3RyaW5nJiB1c2VybmFtZSk7Ci0gICAgflBlZXJDb25uZWN0aW9uSGFuZGxl
ckludGVybmFsKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcHJvZHVjZUluaXRpYWxPZmZlcihjb25z
dCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3ImIHBlbmRpbmdBZGRTdHJlYW1zKTsKLSAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlSW5pdGlhbE9mZmVyKGNvbnN0IFN0cmluZyYgc2RwKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcHJvY2Vzc1NEUChjb25zdCBTdHJpbmcmIHNkcCk7Ci0gICAgdmlydHVhbCB2
b2lkIHByb2Nlc3NQZW5kaW5nU3RyZWFtcyhjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0
b3ImIHBlbmRpbmdBZGRTdHJlYW1zLCBjb25zdCBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3Im
IHBlbmRpbmdSZW1vdmVTdHJlYW1zKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2VuZERhdGFTdHJlYW1N
ZXNzYWdlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOwotICAgIHZpcnR1YWwgdm9p
ZCBzdG9wKCk7Ci0KLSAgICAvLyBXZWJLaXQ6OldlYlBlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVu
dCBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVJQ0VQcm9jZXNz
aW5nKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEdlbmVyYXRlU0RQKGNvbnN0IFdlYktpdDo6V2Vi
U3RyaW5nJiBzZHApOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YVN0cmVhbU1lc3Nh
Z2UoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZEFkZFJlbW90ZVN0cmVhbShjb25zdCBXZWJLaXQ6OldlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYp
OwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZW1vdmVSZW1vdGVTdHJlYW0oY29uc3QgV2ViS2l0OjpX
ZWJNZWRpYVN0cmVhbURlc2NyaXB0b3ImKTsKLQotcHJpdmF0ZToKLSAgICBPd25QdHI8V2ViS2l0
OjpXZWJQZWVyQ29ubmVjdGlvbkhhbmRsZXI+IG1fd2ViSGFuZGxlcjsKLSAgICBQZWVyQ29ubmVj
dGlvbkhhbmRsZXJDbGllbnQqIG1fY2xpZW50OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2VuZGlmIC8vIFBlZXJDb25u
ZWN0aW9uSGFuZGxlckludGVybmFsX2gKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1Nzc1ZmY1MzM2ZDMzYTdjOWQ1ZWZkMWIy
MDUxM2FmNGFiNWRkZGQyLi45YjIzZTcwYjNhNTYxYWM3M2VjZTNkMjFhNjVhMWMxYzU1YWRiZjgx
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMDMtMDggIFRvbW15IFdpZGVuZmx5Y2h0ICA8
dG9tbXl3QGdvb2dsZS5jb20+CisKKyAgICAgICAgTWVkaWFTdHJlYW0gQVBJOiBDaGFuZ2UgdGhl
IFBlZXJDb25uZWN0aW9uIHRvIHVzZSBKU0VQIGluc3RlYWQgb2YgUk9BUAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA1ODkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGRlcHJlY2F0ZXMg
dGhlIGN1cnJlbnQgUGVlcmNvbm5lY3Rpb24gYnkgcmVuYW1pbmcgaXQgdG8KKyAgICAgICAgRGVw
cmVjYXRlZFBlZXJDb25uZWN0aW9uIGFuZCBhZGRzIGEgbmV3IFBlZXJDb25uZWN0aW9uIGltcGxl
bWVudGF0aW9uIGJhc2VkIG9uOgorICAgICAgICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9k
cmFmdC1pZXRmLXJ0Y3dlYi1qc2VwLTAwCisKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL3Bl
ZXJjb25uZWN0aW9uLUF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvbWVk
aWFzdHJlYW0vc2NyaXB0LXRlc3RzL0F0dHJpYnV0ZXMuanM6CisKIDIwMTItMDMtMDggIFNoaW55
YSBLYXdhbmFrYSAgPHNoaW55YWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIDxzaGFkb3c+IHNo
b3VsZCBiZSByZW5kZXJlZCBjb3JyZWN0bHkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L21lZGlhc3RyZWFtL3BlZXJjb25uZWN0aW9uLUF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9wZWVyY29ubmVjdGlvbi1BdHRyaWJ1dGVzLWV4cGVj
dGVkLnR4dAppbmRleCBiNjVjZjJiZjUyZjNhOTFkODk3NDc2YTI1MDI4MTNhNTQwYjRmYWYwLi4z
OWI3OGVmZTU3NTNmNjg4MTllYjU5MGZjNWUxYjAwNDZhNjAyMzJkIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL3BlZXJjb25uZWN0aW9uLUF0dHJpYnV0ZXMtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vcGVlcmNvbm5lY3Rpb24t
QXR0cmlidXRlcy1leHBlY3RlZC50eHQKQEAgLTEsNCArMSw0IEBACi1UZXN0cyBQZWVyVG9QZWVy
Q29ubmVjdGlvbiByZWxhdGVkIEF0dHJpYnV0ZXMgYWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cudzMu
b3JnL1RSL3dlYnJ0Yy8KK1Rlc3RzIFBlZXJDb25uZWN0aW9uIHJlbGF0ZWQgQXR0cmlidXRlcyBh
Y2NvcmRpbmcgdG8gaHR0cDovL3d3dy53My5vcmcvVFIvd2VicnRjLwogCiBPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCiAKQEAgLTYsMjAgKzYsMTcgQEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUK
IFBBU1MgdHlwZW9mIHBjLmFkZFN0cmVhbSA9PSAnZnVuY3Rpb24nIGlzIHRydWUKIFBBU1MgdHlw
ZW9mIHBjLnJlbW92ZVN0cmVhbSA9PSAnZnVuY3Rpb24nIGlzIHRydWUKIFBBU1MgdHlwZW9mIHBj
LmNsb3NlID09ICdmdW5jdGlvbicgaXMgdHJ1ZQotUEFTUyBwYy5ORVcgPT0wIGlzIHRydWUKK1BB
U1MgcGMuTkVXID09IDAgaXMgdHJ1ZQogUEFTUyBwYy5ORUdPVElBVElORyA9PSAxIGlzIHRydWUK
IFBBU1MgcGMuQUNUSVZFID09IDIgaXMgdHJ1ZQogUEFTUyBwYy5DTE9TRUQgPT0gMyBpcyB0cnVl
Ci1GQUlMIHBjLklDRV9HQVRIRVJJTkcgPT0gMHgxMDAgIHNob3VsZCBiZSB0cnVlLiBXYXMgZmFs
c2UuCi1GQUlMIHBjLklDRV9XQUlUSU5HID09IDB4MjAwIHNob3VsZCBiZSB0cnVlLiBXYXMgZmFs
c2UuCi1GQUlMIHBjLklDRV9DSEVDS0lORyA9PSAweDMwMCBzaG91bGQgYmUgdHJ1ZS4gV2FzIGZh
bHNlLgotRkFJTCBwYy5JQ0VfQ09OTkVDVEVEID09IDB4NDAwIHNob3VsZCBiZSB0cnVlLiBXYXMg
ZmFsc2UuCi1GQUlMIHBjLklDRV9DT01QTEVURUQgPT0gMHg1MDAgc2hvdWxkIGJlIHRydWUuIFdh
cyBmYWxzZS4KLUZBSUwgcGMuSUNFX0ZBSUxFRCA9PSAweDYwMCBzaG91bGQgYmUgdHJ1ZS4gV2Fz
IGZhbHNlLgotRkFJTCBwYy5JQ0VfQ0xPU0VEID09IDB4NzAwIHNob3VsZCBiZSB0cnVlLiBXYXMg
ZmFsc2UuCi1GQUlMIHBjLlNEUF9JRExFID09IDB4MTAwMCBzaG91bGQgYmUgdHJ1ZS4gV2FzIGZh
bHNlLgotRkFJTCBwYy5TRFBfV0FJVElORyA9PSAweDIwMDAgc2hvdWxkIGJlIHRydWUuIFdhcyBm
YWxzZS4KLUZBSUwgcGMuU0RQX0dMQVJFID09MHgzMDAwIHNob3VsZCBiZSB0cnVlLiBXYXMgZmFs
c2UuCitQQVNTIHBjLklDRV9HQVRIRVJJTkcgPT0gMHgxMDAgIGlzIHRydWUKK1BBU1MgcGMuSUNF
X1dBSVRJTkcgPT0gMHgyMDAgaXMgdHJ1ZQorUEFTUyBwYy5JQ0VfQ0hFQ0tJTkcgPT0gMHgzMDAg
aXMgdHJ1ZQorUEFTUyBwYy5JQ0VfQ09OTkVDVEVEID09IDB4NDAwIGlzIHRydWUKK1BBU1MgcGMu
SUNFX0NPTVBMRVRFRCA9PSAweDUwMCBpcyB0cnVlCitQQVNTIHBjLklDRV9GQUlMRUQgPT0gMHg2
MDAgaXMgdHJ1ZQorUEFTUyBwYy5JQ0VfQ0xPU0VEID09IDB4NzAwIGlzIHRydWUKIFBBU1MgdHlw
ZW9mIHBjLmxvY2FsU3RyZWFtcyA9PSAnb2JqZWN0JyBpcyB0cnVlCiBQQVNTIHR5cGVvZiBwYy5y
ZW1vdGVTdHJlYW1zID09ICdvYmplY3QnIGlzIHRydWUKIFBBU1MgdHlwZW9mIHBjLm9uYWRkc3Ry
ZWFtID09ICdvYmplY3QnIGlzIHRydWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVk
aWFzdHJlYW0vc2NyaXB0LXRlc3RzL0F0dHJpYnV0ZXMuanMgYi9MYXlvdXRUZXN0cy9mYXN0L21l
ZGlhc3RyZWFtL3NjcmlwdC10ZXN0cy9BdHRyaWJ1dGVzLmpzCmluZGV4IGQ4NDQyYWNhMjMwZjIy
OTNiMDI5YTQwN2ZiYWI1YmJlNjg1OTBiYzYuLmZiMDU4NjhiZTg1ZjczZWYyYjQyNGU0NzQzNTI5
Y2IzYzhiZGY1MjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vc2Ny
aXB0LXRlc3RzL0F0dHJpYnV0ZXMuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVh
bS9zY3JpcHQtdGVzdHMvQXR0cmlidXRlcy5qcwpAQCAtMSwxMDYgKzEsMzUgQEAKLWRlc2NyaXB0
aW9uKCJUZXN0cyBQZWVyVG9QZWVyQ29ubmVjdGlvbiByZWxhdGVkIEF0dHJpYnV0ZXMgYWNjb3Jk
aW5nIHRvIGh0dHA6Ly93d3cudzMub3JnL1RSL3dlYnJ0Yy8iKTsKLXZhciBzdHJlYW07Ci1mdW5j
dGlvbiBzaG91bGROb3RUaHJvdyhleHByZXNzaW9uKQotewotICB0cnkgewotICAgIGV2YWwoZXhw
cmVzc2lvbik7Ci0gICAgdGVzdFBhc3NlZChleHByZXNzaW9uICsgIiBkaWQgbm90IHRocm93IGV4
Y2VwdGlvbi4iKTsKLSAgfSBjYXRjaChlKSB7Ci0gICAgdGVzdEZhaWxlZChleHByZXNzaW9uICsg
IiBzaG91bGQgbm90IHRocm93IGV4Y2VwdGlvbi4gVGhyZXcgZXhjZXB0aW9uICIgKyBlKTsKLSAg
fQotfQorZGVzY3JpcHRpb24oIlRlc3RzIFBlZXJDb25uZWN0aW9uIHJlbGF0ZWQgQXR0cmlidXRl
cyBhY2NvcmRpbmcgdG8gaHR0cDovL3d3dy53My5vcmcvVFIvd2VicnRjLyIpOwogCi1mdW5jdGlv
biB0ZXN0KGV4cHJlc3Npb24sIGV4cHJlc3Npb25TaG91bGRUaHJvdywgZXhwZWN0ZWRFeGNlcHRp
b24pIHsKLSAgICBpZiAoZXhwcmVzc2lvblNob3VsZFRocm93KSB7Ci0gICAgICAgIGlmIChleHBl
Y3RlZEV4Y2VwdGlvbikKLSAgICAgICAgICAgIHNob3VsZFRocm93KGV4cHJlc3Npb24sICcoZnVu
Y3Rpb24oKSB7IHJldHVybiAiJyArIGV4cGVjdGVkRXhjZXB0aW9uICsgJyI7IH0pKCk7Jyk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNob3VsZFRocm93KGV4cHJlc3Npb24sICcoZnVuY3Rp
b24oKSB7IHJldHVybiAiVHlwZUVycm9yOiBUeXBlIGVycm9yIjsgfSkoKTsnKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBzaG91bGROb3RUaHJvdyhleHByZXNzaW9uKTsKLSAgICB9Ci19Ci1mdW5j
dGlvbiBzaG91bGRCZUEoX2EsIF9iLCBxdWlldCkKLXsKLSAgaWYgKHR5cGVvZiBfYSAhPSAic3Ry
aW5nIiB8fCB0eXBlb2YgX2IgIT0gInN0cmluZyIpCi0gICAgZGVidWcoIldBUk46IHNob3VsZEJl
KCkgZXhwZWN0cyBzdHJpbmcgYXJndW1lbnRzIik7Ci0gIHZhciBleGNlcHRpb247Ci0gIHZhciBf
YXY7Ci0gIHRyeSB7Ci0gICAgIF9hdiA9IGV2YWwoX2EpOwotICB9IGNhdGNoIChlKSB7Ci0gICAg
IGV4Y2VwdGlvbiA9IGU7Ci0gIH0KLSAgdmFyIF9idiA9IGV2YWwoX2IpOworcGMgPSBuZXcgd2Vi
a2l0UGVlckNvbm5lY3Rpb24oIlNUVU4gTk9ORSIsIGZ1bmN0aW9uKCkge30pOwogCi0gIGlmIChl
eGNlcHRpb24pCi0gICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlICIgKyBfYnYgKyAiLiBU
aHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbik7Ci0gIGVsc2UgaWYgKGlzUmVzdWx0Q29ycmVj
dChfYXYsIF9idikpIHsKLSAgICBpZiAoIXF1aWV0KSB7Ci0gICAgICAgIHRlc3RQYXNzZWQoX2Eg
KyAiIGlzICIgKyBfYik7Ci0gICAgfQotICB9IGVsc2UgaWYgKHR5cGVvZihfYXYpID09IHR5cGVv
ZihfYnYpKQotICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSAiICsgX2J2ICsgIi4gV2Fz
ICIgKyBzdHJpbmdpZnkoX2F2KSArICIuIik7Ci0gIGVsc2UKLSAgICB0ZXN0RmFpbGVkKF9hICsg
IiBzaG91bGQgYmUgIiArIF9idiArICIgKG9mIHR5cGUgIiArIHR5cGVvZiBfYnYgKyAiKS4gV2Fz
ICIgKyBfYXYgKyAiIChvZiB0eXBlICIgKyB0eXBlb2YgX2F2ICsgIikuIik7Ci19Ci0KLWZ1bmN0
aW9uIHNob3VsZEJlVHJ1ZUEoX2EpIHsgc2hvdWxkQmVBKF9hLCAidHJ1ZSIpOyB9Ci0KLXZhciB0
b1N0cmluZ0Vycm9yID0gbmV3IEVycm9yKCd0b1N0cmluZyB0aHJldyBleGNlcHRpb24nKTsKLXZh
ciBub3RTdXBwb3J0ZWRFcnJvciA9IG5ldyBFcnJvcignTk9UX1NVUFBPUlRFRF9FUlI6IERPTSBF
eGNlcHRpb24gOScpOwotdmFyIGVtcHR5RnVuY3Rpb24gPSBmdW5jdGlvbigpIHt9OwotCi0KLWZ1
bmN0aW9uIE9iamVjdFRocm93aW5nRXhjZXB0aW9uKCkge307Ci1PYmplY3RUaHJvd2luZ0V4Y2Vw
dGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKLSAgICB0aHJvdyB0b1N0cmlu
Z0Vycm9yOwotfQotdmFyIG9iamVjdFRocm93aW5nRXhjZXB0aW9uID0gbmV3IE9iamVjdFRocm93
aW5nRXhjZXB0aW9uKCk7Ci0KLQotbmF2aWdhdG9yLndlYmtpdEdldFVzZXJNZWRpYSgidmlkZW8i
LCBnb3RTdHJlYW0sIGdvdFN0cmVhbUZhaWxlZCk7Ci1mdW5jdGlvbiBnb3RTdHJlYW0ocykgewot
c3RyZWFtID0gczsKLX0KLQotZnVuY3Rpb24gZ290U3RyZWFtRmFpbGVkKGVycm9yKSB7Ci0gIGFs
ZXJ0KCJGYWlsZWQgdG8gZ2V0IGFjY2VzcyB0byB3ZWJjYW0uIEVycm9yIGNvZGUgd2FzICIgKyBl
cnJvci5jb2RlKTsKLX0KLQotCi12YXIgcGM9bmV3IHdlYmtpdFBlZXJDb25uZWN0aW9uKCJTVFVO
IE5PTkUiLCBlbXB0eUZ1bmN0aW9uKTsKIC8vbWV0aG9kCi1zaG91bGRCZVRydWVBKCJ0eXBlb2Yg
cGMuYWRkU3RyZWFtID09ICdmdW5jdGlvbiciKTsKLXNob3VsZEJlVHJ1ZUEoInR5cGVvZiBwYy5y
ZW1vdmVTdHJlYW0gPT0gJ2Z1bmN0aW9uJyIpOwotc2hvdWxkQmVUcnVlQSgidHlwZW9mIHBjLmNs
b3NlID09ICdmdW5jdGlvbiciKTsKLQotLy9wZWVyY29ubmVjdGlvbiByZWFkeVN0YXRlIAotc2hv
dWxkQmVUcnVlQSgicGMuTkVXID09MCIpOwotc2hvdWxkQmVUcnVlQSgicGMuTkVHT1RJQVRJTkcg
PT0gMSIpOwotc2hvdWxkQmVUcnVlQSgicGMuQUNUSVZFID09IDIiKTsKLXNob3VsZEJlVHJ1ZUEo
InBjLkNMT1NFRCA9PSAzIik7Ci0KLS8vaWNlU3RhdGUgYW5kIFNEUCBzdGF0ZQotc2hvdWxkQmVU
cnVlQSgicGMuSUNFX0dBVEhFUklORyA9PSAweDEwMCAiKTsKLXNob3VsZEJlVHJ1ZUEoInBjLklD
RV9XQUlUSU5HID09IDB4MjAwIik7Ci1zaG91bGRCZVRydWVBKCJwYy5JQ0VfQ0hFQ0tJTkcgPT0g
MHgzMDAiKTsKLXNob3VsZEJlVHJ1ZUEoInBjLklDRV9DT05ORUNURUQgPT0gMHg0MDAiKTsKLXNo
b3VsZEJlVHJ1ZUEoInBjLklDRV9DT01QTEVURUQgPT0gMHg1MDAiKTsKLXNob3VsZEJlVHJ1ZUEo
InBjLklDRV9GQUlMRUQgPT0gMHg2MDAiKTsKLXNob3VsZEJlVHJ1ZUEoInBjLklDRV9DTE9TRUQg
PT0gMHg3MDAiKTsKLXNob3VsZEJlVHJ1ZUEoInBjLlNEUF9JRExFID09IDB4MTAwMCIpOwotc2hv
dWxkQmVUcnVlQSgicGMuU0RQX1dBSVRJTkcgPT0gMHgyMDAwIik7Ci1zaG91bGRCZVRydWVBKCJw
Yy5TRFBfR0xBUkUgPT0weDMwMDAiKTsKK3Nob3VsZEJlVHJ1ZSgidHlwZW9mIHBjLmFkZFN0cmVh
bSA9PSAnZnVuY3Rpb24nIik7CitzaG91bGRCZVRydWUoInR5cGVvZiBwYy5yZW1vdmVTdHJlYW0g
PT0gJ2Z1bmN0aW9uJyIpOworc2hvdWxkQmVUcnVlKCJ0eXBlb2YgcGMuY2xvc2UgPT0gJ2Z1bmN0
aW9uJyIpOworCisvL3BlZXJjb25uZWN0aW9uIHJlYWR5U3RhdGUKK3Nob3VsZEJlVHJ1ZSgicGMu
TkVXID09IDAiKTsKK3Nob3VsZEJlVHJ1ZSgicGMuTkVHT1RJQVRJTkcgPT0gMSIpOworc2hvdWxk
QmVUcnVlKCJwYy5BQ1RJVkUgPT0gMiIpOworc2hvdWxkQmVUcnVlKCJwYy5DTE9TRUQgPT0gMyIp
OworCisvL2ljZVN0YXRlCitzaG91bGRCZVRydWUoInBjLklDRV9HQVRIRVJJTkcgPT0gMHgxMDAg
Iik7CitzaG91bGRCZVRydWUoInBjLklDRV9XQUlUSU5HID09IDB4MjAwIik7CitzaG91bGRCZVRy
dWUoInBjLklDRV9DSEVDS0lORyA9PSAweDMwMCIpOworc2hvdWxkQmVUcnVlKCJwYy5JQ0VfQ09O
TkVDVEVEID09IDB4NDAwIik7CitzaG91bGRCZVRydWUoInBjLklDRV9DT01QTEVURUQgPT0gMHg1
MDAiKTsKK3Nob3VsZEJlVHJ1ZSgicGMuSUNFX0ZBSUxFRCA9PSAweDYwMCIpOworc2hvdWxkQmVU
cnVlKCJwYy5JQ0VfQ0xPU0VEID09IDB4NzAwIik7CiAKIC8vTWVkaWFTdHJlYW1bXSBhdHRyaWJ1
dGUKLXNob3VsZEJlVHJ1ZUEoInR5cGVvZiBwYy5sb2NhbFN0cmVhbXMgPT0gJ29iamVjdCciKTsK
LXNob3VsZEJlVHJ1ZUEoInR5cGVvZiBwYy5yZW1vdGVTdHJlYW1zID09ICdvYmplY3QnIik7Citz
aG91bGRCZVRydWUoInR5cGVvZiBwYy5sb2NhbFN0cmVhbXMgPT0gJ29iamVjdCciKTsKK3Nob3Vs
ZEJlVHJ1ZSgidHlwZW9mIHBjLnJlbW90ZVN0cmVhbXMgPT0gJ29iamVjdCciKTsKIAogLy9jYWxs
YmFjayBmdW5jdGlvbiBkZWZpbml0aW9uIAotc2hvdWxkQmVUcnVlQSgidHlwZW9mIHBjLm9uYWRk
c3RyZWFtID09ICdvYmplY3QnIik7Ci1zaG91bGRCZVRydWVBKCJ0eXBlb2YgcGMub25yZW1vdmVz
dHJlYW0gPT0gJ29iamVjdCciKTsKLXNob3VsZEJlVHJ1ZUEoInR5cGVvZiBwYy5vbmNvbm5lY3Rp
bmcgPT0gJ29iamVjdCciKTsKLXNob3VsZEJlVHJ1ZUEoInR5cGVvZiBwYy5vbm9wZW4gPT0gJ29i
amVjdCciKTsKK3Nob3VsZEJlVHJ1ZSgidHlwZW9mIHBjLm9uYWRkc3RyZWFtID09ICdvYmplY3Qn
Iik7CitzaG91bGRCZVRydWUoInR5cGVvZiBwYy5vbnJlbW92ZXN0cmVhbSA9PSAnb2JqZWN0JyIp
Oworc2hvdWxkQmVUcnVlKCJ0eXBlb2YgcGMub25jb25uZWN0aW5nID09ICdvYmplY3QnIik7Citz
aG91bGRCZVRydWUoInR5cGVvZiBwYy5vbm9wZW4gPT0gJ29iamVjdCciKTsKIAogd2luZG93Lmpz
VGVzdElzQXN5bmMgPSBmYWxzZTsK
</data>
<flag name="review"
          id="133925"
          type_id="1"
          status="-"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="133926"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
      

    </bug>

</bugzilla>