<?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>110303</bug_id>
          
          <creation_ts>2013-02-19 22:05:28 -0800</creation_ts>
          <short_desc>webdatabase: Rename DatabaseBackend to DatabaseBackendBase</short_desc>
          <delta_ts>2013-02-20 09:59:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jamesr</cc>
    
    <cc>levin+threading</cc>
    
    <cc>michaeln</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>837144</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-19 22:05:28 -0800</bug_when>
    <thetext>Renaming DatabaseBackend to DatabaseBackendBase.  This makes it consistent with the frontend DatabaseBase.  Similarly, we should rename DatabaseBackendAsync to DatabaseBackend to parallel its frontend Database, but we&apos;ll do this part in another bug.

This patch is purely cosmetic.  Apart from cleaning up #include in DatabaseBase.h, there are no other changes that are not purely due to the rename.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837152</commentid>
    <comment_count>1</comment_count>
      <attachid>189241</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-19 22:13:08 -0800</bug_when>
    <thetext>Created attachment 189241
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837154</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-19 22:15:49 -0800</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837158</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-19 22:17:21 -0800</bug_when>
    <thetext>Attachment 189241 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/Modules/webdatabase/AbstractDatabaseServer.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/Database.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/Database.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackend.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackend.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackendAsync.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackendAsync.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackendBase.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackendBase.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackendSync.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackendSync.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBase.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseManager.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseManager.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseServer.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseServer.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseSync.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseSync.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseTracker.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/OriginQuotaManager.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/OriginQuotaManager.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionClient.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionClient.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/chromium/DatabaseObserver.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/chromium/DatabaseTrackerChromium.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/chromium/SQLTransactionClientChromium.cpp&apos;, u&apos;Source/WebCore/Target.pri&apos;, u&apos;Source/WebCore/WebCore.gypi&apos;, u&apos;Source/WebCore/WebCore.vcproj/WebCore.vcproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebKit/chromium/ChangeLog&apos;, u&apos;Source/WebKit/chromium/public/WebDatabase.h&apos;, u&apos;Source/WebKit/chromium/src/DatabaseObserver.cpp&apos;, u&apos;Source/WebKit/chromium/src/WebDatabase.cpp&apos;]&quot; exit_code: 1
Source/WebCore/Modules/webdatabase/DatabaseBackendBase.h:81:  The parameter name &quot;permissions&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 38 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837523</commentid>
    <comment_count>4</comment_count>
      <attachid>189241</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-02-20 09:40:06 -0800</bug_when>
    <thetext>Comment on attachment 189241
the patch.

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837529</commentid>
    <comment_count>5</comment_count>
      <attachid>189241</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-02-20 09:55:30 -0800</bug_when>
    <thetext>Comment on attachment 189241
the patch.

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837530</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-20 09:59:40 -0800</bug_when>
    <thetext>Landed in r143471: &lt;http://trac.webkit.org/changeset/143471&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189241</attachid>
            <date>2013-02-19 22:13:08 -0800</date>
            <delta_ts>2013-02-20 09:55:30 -0800</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-110303.patch</filename>
            <type>text/plain</type>
            <size>146534</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MzQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MSBAQAorMjAxMy0wMi0xOSAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIERhdGFiYXNlQmFja2Vu
ZCB0byBEYXRhYmFzZUJhY2tlbmRCYXNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzAzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlIHRvIG1h
a2UgdGhlIG5hbWluZyBjb25zaXN0ZW50IHdpdGgKKyAgICAgICAgdGhlIGZyb250LWVuZCBEYXRh
YmFzZUJhc2UuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2VTZXJ2ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnZlcnNpb24pOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaDoKKyAgICAgICAgKERhdGFiYXNlKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZC5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZEFzeW5jOjpEYXRhYmFzZUJhY2tl
bmRBc3luYyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmRBc3luYzo6cGVyZm9y
bU9wZW5BbmRWZXJpZnkpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VC
YWNrZW5kQXN5bmMuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFj
a2VuZEJhc2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlQmFja2VuZC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tl
bmRCYXNlOjpkYXRhYmFzZUluZm9UYWJsZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VCYWNrZW5kQmFzZTo6RGF0YWJhc2VCYWNrZW5kQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZUJhY2tlbmRCYXNlOjp+RGF0YWJhc2VCYWNrZW5kQmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZUJhY2tlbmRCYXNlOjpjbG9zZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlQmFja2VuZEJhc2U6OnZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RG9u
ZUNyZWF0aW5nRGF0YWJhc2VPbkV4aXRDYWxsZXI6OkRvbmVDcmVhdGluZ0RhdGFiYXNlT25FeGl0
Q2FsbGVyKToKKyAgICAgICAgKERvbmVDcmVhdGluZ0RhdGFiYXNlT25FeGl0Q2FsbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZEJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZEJhc2U6OnNlY3VyaXR5T3JpZ2lu
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZEJhc2U6OnN0cmluZ0lkZW50aWZp
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kQmFzZTo6ZGlzcGxheU5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kQmFzZTo6ZXN0aW1hdGVkU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmRCYXNlOjpmaWxlTmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmRCYXNlOjpkZXRhaWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlQmFja2VuZEJhc2U6OmdldFZlcnNpb25Gcm9tRGF0YWJhc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kQmFzZTo6c2V0VmVyc2lvbkluRGF0YWJhc2Up
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kQmFzZTo6c2V0RXhwZWN0ZWRWZXJz
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZEJhc2U6OmdldENhY2hlZFZl
cnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kQmFzZTo6c2V0Q2FjaGVk
VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmRCYXNlOjpnZXRBY3R1
YWxWZXJzaW9uRm9yVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNr
ZW5kQmFzZTo6ZGlzYWJsZUF1dGhvcml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VC
YWNrZW5kQmFzZTo6ZW5hYmxlQXV0aG9yaXplcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZUJhY2tlbmRCYXNlOjpzZXRBdXRob3JpemVyUmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VCYWNrZW5kQmFzZTo6c2V0QXV0aG9yaXplclBlcm1pc3Npb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZEJhc2U6Omxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2Up
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kQmFzZTo6bGFzdEFjdGlvbldhc0lu
c2VydCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmRCYXNlOjpyZXNldERlbGV0
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kQmFzZTo6aGFkRGVsZXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmRCYXNlOjpyZXNldEF1dGhvcml6ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kQmFzZTo6bWF4aW11bVNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kQmFzZTo6aW5jcmVtZW50YWxWYWN1dW1J
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmRCYXNlOjppbnRlcnJ1
cHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kQmFzZTo6aXNJbnRlcnJ1cHRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmRCYXNlOjpyZXBvcnRPcGVuRGF0
YWJhc2VSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kQmFzZTo6cmVw
b3J0Q2hhbmdlVmVyc2lvblJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tl
bmRCYXNlOjpyZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlQmFja2VuZEJhc2U6OnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZEJhc2U6OnJlcG9ydEV4ZWN1dGVTdGF0ZW1l
bnRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kQmFzZTo6cmVwb3J0
VmFjdXVtRGF0YWJhc2VSZXN1bHQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VCYWNrZW5kQmFzZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZC5oLgorICAgICAgICAoRGF0YWJhc2VCYWNrZW5kQmFz
ZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRTeW5jLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZFN5bmM6OkRhdGFiYXNlQmFja2Vu
ZFN5bmMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kU3lu
Yy5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYXNlLmg6CisgICAg
ICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjpvcGVuRGF0YWJhc2VCYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlU3luYyk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZU1hbmFnZXI6OmdldE1heFNpemVGb3JEYXRhYmFzZSk6CisgICAgICAgICogTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuaDoKKyAgICAgICAgKERhdGFiYXNlTWFu
YWdlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVNlcnZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVNlcnZlcjo6b3BlbkRhdGFiYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlU2VydmVyOjpjcmVhdGVEYXRhYmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVNlcnZlcjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNlKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmg6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VTeW5jOjpjcmVhdGUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VT
eW5jLmg6CisgICAgICAgIChEYXRhYmFzZVN5bmMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
VHJhY2tlcjo6ZGF0YWJhc2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZVRyYWNrZXI6OmRvbmVDcmVhdGluZ0RhdGFiYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlVHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlRmlsZSk6CisgICAgICAgICogTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuaDoKKyAgICAgICAgKERhdGFiYXNlVHJhY2tlcik6
CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5RdW90YU1hbmFnZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6T3JpZ2luUXVvdGFNYW5hZ2VyOjptYXJrRGF0YWJhc2UpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmg6CisgICAgICAg
IChPcmlnaW5RdW90YU1hbmFnZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
VHJhbnNhY3Rpb25DbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25D
bGllbnQ6OmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1FM
VHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4ZWN1dGVTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4Y2VlZFF1b3RhKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xpZW50Lmg6CisgICAgICAgIChTUUxUcmFu
c2FjdGlvbkNsaWVudCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9E
YXRhYmFzZU9ic2VydmVyLmg6CisgICAgICAgIChEYXRhYmFzZU9ic2VydmVyKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmeURhdGFiYXNlT2JzZXJ2ZXJPbkNsb3NlVGFzazo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmeURhdGFiYXNlT2JzZXJ2ZXJPbkNsb3NlVGFz
azo6Tm90aWZ5RGF0YWJhc2VPYnNlcnZlck9uQ2xvc2VUYXNrKToKKyAgICAgICAgKE5vdGlmeURh
dGFiYXNlT2JzZXJ2ZXJPbkNsb3NlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6OnJlbW92ZU9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6OnByZXBhcmVUb09wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVRyYWNrZXI6OmZhaWxlZFRvT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVHJhY2tlcjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlVHJhY2tlcjo6Q2xvc2VPbmVEYXRhYmFzZUltbWVkaWF0ZWx5VGFzazo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6Q2xvc2VPbmVEYXRhYmFzZUltbWVk
aWF0ZWx5VGFzazo6Q2xvc2VPbmVEYXRhYmFzZUltbWVkaWF0ZWx5VGFzayk6CisgICAgICAgIChE
YXRhYmFzZVRyYWNrZXI6OkNsb3NlT25lRGF0YWJhc2VJbW1lZGlhdGVseVRhc2spOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpjbG9zZU9uZURhdGFiYXNlSW1tZWRpYXRlbHkp
OgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vU1FMVHJhbnNhY3Rpb25D
bGllbnRDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZnlEYXRhYmFzZUNoYW5n
ZWRUYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZ5RGF0YWJhc2VDaGFuZ2Vk
VGFzazo6Tm90aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzayk6CisgICAgICAgIChOb3RpZnlEYXRhYmFz
ZUNoYW5nZWRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ2xpZW50Ojpk
aWRDb21taXRXcml0ZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0
aW9uQ2xpZW50OjpkaWRFeGVjdXRlU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRy
YW5zYWN0aW9uQ2xpZW50OjpkaWRFeGNlZWRRdW90YSk6CisgICAgICAgICogVGFyZ2V0LnByaToK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAg
ICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDEzLTAyLTE5ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIENsYXJpZnkgaXNJ
bldpbmRvdyB2cy4gaXNWaXNpYmxlIHBhdGggdGhyb3VnaCB0byBSZW5kZXJMYXllckNvbXBvc2l0
b3IKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTM5LDggKzkzOSw4IEBA
IHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRvd1dl
YkRhdGFiYXNlLmNwcAogICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCiAgICAg
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCi0gICAgTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuY3BwCiAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZUJhY2tlbmRBc3luYy5jcHAKKyAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
QmFja2VuZEJhc2UuY3BwCiAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRD
b250ZXh0LmNwcAogICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kU3luYy5j
cHAKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFzZS5jcHAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjExMSwxMCArMjExMSwx
MCBAQCB3ZWJjb3JlX21vZHVsZXNfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VBdXRob3JpemVyLmggXAotCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuaCBcCisJU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRCYXNlLmNwcCBcCisJ
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRCYXNlLmgg
XAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQ29u
dGV4dC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VC
YWNrZW5kQ29udGV4dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlQmFja2VuZFN5bmMuY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTQzNDI2
KQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMzMsNyAr
MzMsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRvd1dl
YkRhdGFiYXNlLmNwcCBcCiAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAgXAog
ICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcCBcCi0gICAgTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuY3BwIFwKKyAgICBNb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlQmFja2VuZEJhc2UuY3BwIFwKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlQ29udGV4dC5jcHAgXAogICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VT
ZXJ2ZXIuY3BwIFwKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5jcHAgXApA
QCAtMTQ2NCw4ICsxNDY0LDggQEAgSEVBREVSUyArPSBcCiAgICAgTW9kdWxlcy93ZWJkYXRhYmFz
ZS9ET01XaW5kb3dXZWJEYXRhYmFzZS5oIFwKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlQXV0aG9yaXplci5oIFwKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmggXAot
ICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmggXAogICAgIE1vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuaCBcCisgICAgTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZUJhY2tlbmRCYXNlLmggXAogICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VCYWNrZW5kQ29udGV4dC5oIFwKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
QmFja2VuZFN5bmMuaCBcCiAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhc2UuaCBc
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTk5MiwxMCArOTkyLDEwIEBACiAgICAg
ICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAnLAogICAgICAgICAgICAg
J01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcCcsCiAgICAgICAgICAg
ICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUF1dGhvcml6ZXIuaCcsCi0gICAgICAgICAg
ICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuY3BwJywKLSAgICAgICAgICAg
ICdNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZC5oJywKICAgICAgICAgICAgICdN
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmNwcCcsCiAgICAgICAgICAg
ICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5oJywKKyAgICAgICAg
ICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEJhc2UuY3BwJywKKyAgICAg
ICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEJhc2UuaCcsCiAgICAg
ICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRDb250ZXh0LmNwcCcs
CiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRDb250ZXh0
LmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kU3lu
Yy5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFj
dERhdGFiYXNlU2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlU2VydmVyLmgJKHJldmlzaW9uIDE0MzQyNikKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNlcnZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgRGF0YWJhc2VCYWNrZW5kOworY2xhc3MgRGF0YWJhc2VCYWNrZW5kQmFzZTsK
IGNsYXNzIERhdGFiYXNlQmFja2VuZENvbnRleHQ7CiBjbGFzcyBEYXRhYmFzZU1hbmFnZXJDbGll
bnQ7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKQEAgLTU3LDcgKzU3LDkgQEAgcHVibGljOgogICAg
ICAgICBSZXRyeU9wZW5EYXRhYmFzZQogICAgIH07CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
RGF0YWJhc2VCYWNrZW5kPiBvcGVuRGF0YWJhc2UoUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRl
eHQ+JiwgRGF0YWJhc2VUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhw
ZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3Im
LCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgT3BlbkF0dGVtcHQgPSBGaXJzdFRyeVRvT3BlbkRhdGFi
YXNlKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZEJhc2U+IG9w
ZW5EYXRhYmFzZShSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mLCBEYXRhYmFzZVR5cGUs
CisgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNp
b24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSwKKyAgICAgICAgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYs
IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBPcGVuQXR0ZW1wdCA9IEZpcnN0VHJ5VG9PcGVuRGF0YWJh
c2UpID0gMDsKIAogI2lmICFQTEFURk9STShDSFJPTUlVTSkKICAgICB2aXJ0dWFsIGJvb2wgaGFz
RW50cnlGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKSA9IDA7CkBAIC04MCw3ICs4Miw3IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBpbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0
KGNvbnN0IERhdGFiYXNlQmFja2VuZENvbnRleHQqKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHVuc2ln
bmVkIGxvbmcgbG9uZyBnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgRGF0YWJhc2VCYWNrZW5k
KikgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIGdldE1heFNpemVGb3JEYXRh
YmFzZShjb25zdCBEYXRhYmFzZUJhY2tlbmRCYXNlKikgPSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAg
QWJzdHJhY3REYXRhYmFzZVNlcnZlcigpIHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDE0MzQyNikKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NSw3ICs2NSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0
cjxEYXRhYmFzZT4gRGF0YWJhc2U6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IGJhY2tlbmQpCitQYXNzUmVmUHRyPERhdGFiYXNlPiBE
YXRhYmFzZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPERhdGFi
YXNlQmFja2VuZEJhc2U+IGJhY2tlbmQpCiB7CiAgICAgLy8gRklYTUU6IEN1cnJlbnRseSwgd2Un
cmUgb25seSBzaW11bGF0aW5nIHRoZSBiYWNrZW5kIGJ5IHJldHVybiB0aGUKICAgICAvLyBmcm9u
dGVuZCBkYXRhYmFzZSBhcyBpdHMgb3duIHRoZSBiYWNrZW5kLiBXaGVuIHdlIHNwbGl0IHRoZSAy
IGFwYXJ0LApAQCAtMTM3LDcgKzEzNyw3IEBAIFN0cmluZyBEYXRhYmFzZTo6dmVyc2lvbigpIGNv
bnN0CiB7CiAgICAgaWYgKG1fZGVsZXRlZCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IHJldHVybiBEYXRhYmFzZUJhY2tlbmQ6OnZlcnNpb24oKTsKKyAgICByZXR1cm4gRGF0YWJhc2VC
YWNrZW5kQmFzZTo6dmVyc2lvbigpOwogfQogCiB2b2lkIERhdGFiYXNlOjptYXJrQXNEZWxldGVk
QW5kQ2xvc2UoKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2UuaAkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHBy
aXZhdGU6CiAgICAgRGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0Piwg
Y29uc3QgU3RyaW5nJiBuYW1lLAogICAgICAgICBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lv
biwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXpl
KTsKICAgICBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZEFzeW5jPiBiYWNrZW5kKCk7Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2U+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxE
YXRhYmFzZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPERhdGFi
YXNlQmFja2VuZEJhc2U+KTsKIAogICAgIHZvaWQgcnVuVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxT
UUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2s+LAogICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNr
LCBib29sIHJlYWRPbmx5LCBjb25zdCBDaGFuZ2VWZXJzaW9uRGF0YSogPSAwKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFj
a2VuZC5jcHAJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NTkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kLmgiCi0K
LSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRGF0YWJhc2VBdXRob3JpemVy
LmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oIgotI2luY2x1ZGUgIkRhdGFi
YXNlQmFzZS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlQ29udGV4dC5oIgotI2luY2x1ZGUgIkRhdGFi
YXNlTWFuYWdlci5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgotI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU1FMaXRlU3Rh
dGVtZW50LmgiCi0jaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotI2lmIFBMQVRG
T1JNKENIUk9NSVVNKQotI2luY2x1ZGUgIkRhdGFiYXNlT2JzZXJ2ZXIuaCIgLy8gRm9yIGVycm9y
IHJlcG9ydGluZy4KLSNlbmRpZgotCi0vLyBSZWdpc3RlcmluZyAib3BlbmVkIiBkYXRhYmFzZXMg
d2l0aCB0aGUgRGF0YWJhc2VUcmFja2VyCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBUaGUgRGF0YWJhc2VUcmFja2VyIG1haW50
YWlucyBhIGxpc3Qgb2YgZGF0YWJhc2VzIHRoYXQgaGF2ZSBiZWVuCi0vLyAib3BlbmVkIiBzbyB0
aGF0IHRoZSBjbGllbnQgY2FuIGNhbGwgaW50ZXJydXB0IG9yIGRlbGV0ZSBvbiBldmVyeSBkYXRh
YmFzZQotLy8gYXNzb2NpYXRlZCB3aXRoIGEgRGF0YWJhc2VCYWNrZW5kQ29udGV4dC4KLS8vCi0v
LyBXZSB3aWxsIG9ubHkgY2FsbCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZSgpIHRv
IGFkZCB0aGUgZGF0YWJhc2UKLS8vIHRvIHRoZSB0cmFja2VyIGFzIG9wZW5lZCB3aGVuIHdlJ3Zl
IHN1Y2NlZWRlZCBpbiBvcGVuaW5nIHRoZSBkYXRhYmFzZSwKLS8vIGFuZCB3aWxsIHNldCBtX29w
ZW5lZCB0byB0cnVlLiBTaW1pbGFybHksIHdlIG9ubHkgY2FsbAotLy8gRGF0YWJhc2VUcmFja2Vy
OjpyZW1vdmVPcGVuRGF0YWJhc2UoKSB0byByZW1vdmUgdGhlIGRhdGFiYXNlIGZyb20gdGhlCi0v
LyB0cmFja2VyIHdoZW4gd2Ugc2V0IG1fb3BlbmVkIHRvIGZhbHNlIGluIGNsb3NlRGF0YWJhc2Uo
KS4gVGhpcyBzZXRzIHVwCi0vLyBhIHNpbXBsZSBzeW1tZXRyeSBiZXR3ZWVuIG9wZW4gYW5kIGNs
b3NlIG9wZXJhdGlvbnMsIGFuZCBhIGRpcmVjdAotLy8gY29ycmVsYXRpb24gdG8gYWRkaW5nIGFu
ZCByZW1vdmluZyBkYXRhYmFzZXMgZnJvbSB0aGUgdHJhY2tlcidzIGxpc3QsCi0vLyB0aHVzIGVu
c3VyaW5nIHRoYXQgd2UgaGF2ZSBhIGNvcnJlY3QgbGlzdCBmb3IgdGhlIGludGVycnVwdCBhbmQK
LS8vIGRlbGV0ZSBvcGVyYXRpb25zIHRvIHdvcmsgb24uCi0vLwotLy8gVGhlIG9ubHkgZGF0YWJh
c2VzIGluc3RhbmNlcyBub3QgdHJhY2tlZCBieSB0aGUgdHJhY2tlcidzIG9wZW4gZGF0YWJhc2UK
LS8vIGxpc3QgYXJlIHRoZSBvbmVzIHRoYXQgaGF2ZSBub3QgYmVlbiBhZGRlZCB5ZXQsIG9yIHRo
ZSBvbmVzIHRoYXQgd2UKLS8vIGF0dGVtcHRlZCBhbiBvcGVuIG9uIGJ1dCBmYWlsZWQgdG8uIFN1
Y2ggaW5zdGFuY2VzIG9ubHkgZXhpc3QgaW4gdGhlCi0vLyBEYXRhYmFzZVNlcnZlcidzIGZhY3Rv
cnkgbWV0aG9kcyBmb3IgY3JlYXRpbmcgRGF0YWJhc2VCYWNrZW5kcy4KLS8vCi0vLyBUaGUgZmFj
dG9yeSBtZXRob2RzIHdpbGwgZWl0aGVyIGNhbGwgb3BlbkFuZFZlcmlmeVZlcnNpb24oKSBvcgot
Ly8gcGVyZm9ybU9wZW5BbmRWZXJpZnkoKS4gVGhlc2UgbWV0aG9kcyB3aWxsIGFkZCB0aGUgbmV3
bHkgaW5zdGFudGlhdGVkCi0vLyBEYXRhYmFzZUJhY2tlbmQgaWYgdGhleSBzdWNjZWVkIGluIG9w
ZW5pbmcgdGhlIHJlcXVlc3RlZCBkYXRhYmFzZS4KLS8vIEluIHRoZSBjYXNlIG9mIGZhaWx1cmUg
dG8gb3BlbiB0aGUgZGF0YWJhc2UsIHRoZSBmYWN0b3J5IG1ldGhvZHMgd2lsbAotLy8gc2ltcGx5
IGRpc2NhcmQgdGhlIG5ld2x5IGluc3RhbnRpYXRlZCBEYXRhYmFzZUJhY2tlbmQgd2hlbiB0aGV5
IHJldHVybi4KLS8vIFRoZSByZWYgY291bnRpbmcgbWVjaGFuaW1zIHdpbGwgYXV0b21hdGljYWxs
eSBkZXN0cnVjdCB0aGUgdW4tYWRkZWQKLS8vIChhbmQgdW4tcmV0dXJuZWQpIGRhdGFiYXNlcyBp
bnN0YW5jZXMuCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IGNoYXIgdmVy
c2lvbktleVtdID0gIldlYktpdERhdGFiYXNlVmVyc2lvbktleSI7Ci1zdGF0aWMgY29uc3QgY2hh
ciBpbmZvVGFibGVOYW1lW10gPSAiX19XZWJLaXREYXRhYmFzZUluZm9UYWJsZV9fIjsKLQotc3Rh
dGljIFN0cmluZyBmb3JtYXRFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogbWVzc2FnZSwgaW50IHNx
bGl0ZUVycm9yQ29kZSwgY29uc3QgY2hhciogc3FsaXRlRXJyb3JNZXNzYWdlKQotewotICAgIHJl
dHVybiBTdHJpbmc6OmZvcm1hdCgiJXMgKCVkICVzKSIsIG1lc3NhZ2UsIHNxbGl0ZUVycm9yQ29k
ZSwgc3FsaXRlRXJyb3JNZXNzYWdlKTsKLX0KLQotc3RhdGljIGJvb2wgcmV0cmlldmVUZXh0UmVz
dWx0RnJvbURhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwg
U3RyaW5nJiByZXN1bHRTdHJpbmcpCi17Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChk
YiwgcXVlcnkpOwotICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwotCi0gICAg
aWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICBMT0dfRVJST1IoIkVycm9yICgl
aSkgcHJlcGFyaW5nIHN0YXRlbWVudCB0byByZWFkIHRleHQgcmVzdWx0IGZyb20gZGF0YWJhc2Ug
KCVzKSIsIHJlc3VsdCwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLSAgICBpZiAocmVz
dWx0ID09IFNRTFJlc3VsdFJvdykgewotICAgICAgICByZXN1bHRTdHJpbmcgPSBzdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCgwKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChy
ZXN1bHQgPT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAgICByZXN1bHRTdHJpbmcgPSBTdHJpbmco
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgTE9HX0VSUk9SKCJFcnJvciAo
JWkpIHJlYWRpbmcgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMpIiwgcmVzdWx0LCBxdWVy
eS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBz
ZXRUZXh0VmFsdWVJbkRhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBx
dWVyeSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KGRiLCBxdWVyeSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7Ci0K
LSAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFzZSAoJXMpIiwg
cXVlcnkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHZhbHVlKTsKLQotICAgIHJlc3VsdCA9IHN0YXRlbWVu
dC5zdGVwKCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7Ci0gICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIHN0ZXAgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFz
ZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIEZJWE1FOiBtb3ZlIGFsbCBndWlkLXJl
bGF0ZWQgZnVuY3Rpb25zIHRvIGEgRGF0YWJhc2VWZXJzaW9uVHJhY2tlciBjbGFzcy4KLXN0YXRp
YyBNdXRleCYgZ3VpZE11dGV4KCkKLXsKLSAgICBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMo
TXV0ZXgmLCBtdXRleCA9ICpuZXcgTXV0ZXgpOwotICAgIHJldHVybiBtdXRleDsKLX0KLQotdHlw
ZWRlZiBIYXNoTWFwPERhdGFiYXNlR3VpZCwgU3RyaW5nPiBHdWlkVmVyc2lvbk1hcDsKLXN0YXRp
YyBHdWlkVmVyc2lvbk1hcCYgZ3VpZFRvVmVyc2lvbk1hcCgpCi17Ci0gICAgLy8gRW5zdXJlIHRo
ZSB0aGUgbXV0ZXggaXMgbG9ja2VkLgotICAgIEFTU0VSVCghZ3VpZE11dGV4KCkudHJ5TG9jaygp
KTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEd1aWRWZXJzaW9uTWFwLCBtYXAsICgpKTsKLSAg
ICByZXR1cm4gbWFwOwotfQotCi0vLyBOT1RFOiBDYWxsZXIgbXVzdCBsb2NrIGd1aWRNdXRleCgp
Lgotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKERhdGFiYXNlR3VpZCBn
dWlkLCBTdHJpbmcgbmV3VmVyc2lvbikKLXsKLSAgICAvLyBFbnN1cmUgdGhlIHRoZSBtdXRleCBp
cyBsb2NrZWQuCi0gICAgQVNTRVJUKCFndWlkTXV0ZXgoKS50cnlMb2NrKCkpOwotCi0gICAgLy8g
Tm90ZTogSXQgaXMgbm90IHNhZmUgdG8gcHV0IGFuIGVtcHR5IHN0cmluZyBpbnRvIHRoZSBndWlk
VG9WZXJzaW9uTWFwKCkgbWFwLgotICAgIC8vIFRoYXQncyBiZWNhdXNlIHRoZSBtYXAgaXMgY3Jv
c3MtdGhyZWFkLCBidXQgZW1wdHkgc3RyaW5ncyBhcmUgcGVyLXRocmVhZC4KLSAgICAvLyBUaGUg
Y29weSgpIGZ1bmN0aW9uIG1ha2VzIGEgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHlvdSBjYW4gdXNl
IG9uIHRoZSBjdXJyZW50Ci0gICAgLy8gdGhyZWFkLCBidXQgd2UgbmVlZCBhIHN0cmluZyB3ZSBj
YW4ga2VlcCBpbiBhIGNyb3NzLXRocmVhZCBkYXRhIHN0cnVjdHVyZS4KLSAgICAvLyBGSVhNRTog
VGhpcyBpcyBhIHF1aXRlLWF3a3dhcmQgcmVzdHJpY3Rpb24gdG8gaGF2ZSB0byBwcm9ncmFtIHdp
dGguCi0KLSAgICAvLyBNYXAgbnVsbCBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nIChzZWUgY29tbWVu
dCBhYm92ZSkuCi0gICAgZ3VpZFRvVmVyc2lvbk1hcCgpLnNldChndWlkLCBuZXdWZXJzaW9uLmlz
RW1wdHkoKSA/IFN0cmluZygpIDogbmV3VmVyc2lvbi5pc29sYXRlZENvcHkoKSk7Ci19Ci0KLXR5
cGVkZWYgSGFzaE1hcDxEYXRhYmFzZUd1aWQsIEhhc2hTZXQ8RGF0YWJhc2VCYWNrZW5kKj4qPiBH
dWlkRGF0YWJhc2VNYXA7Ci1zdGF0aWMgR3VpZERhdGFiYXNlTWFwJiBndWlkVG9EYXRhYmFzZU1h
cCgpCi17Ci0gICAgLy8gRW5zdXJlIHRoZSB0aGUgbXV0ZXggaXMgbG9ja2VkLgotICAgIEFTU0VS
VCghZ3VpZE11dGV4KCkudHJ5TG9jaygpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEd1aWRE
YXRhYmFzZU1hcCwgbWFwLCAoKSk7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotc3RhdGljIERhdGFi
YXNlR3VpZCBndWlkRm9yT3JpZ2luQW5kTmFtZShjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBuYW1lKQotewotICAgIC8vIEVuc3VyZSB0aGUgdGhlIG11dGV4IGlzIGxvY2tlZC4K
LSAgICBBU1NFUlQoIWd1aWRNdXRleCgpLnRyeUxvY2soKSk7Ci0KLSAgICBTdHJpbmcgc3RyaW5n
SUQgPSBvcmlnaW4gKyAiLyIgKyBuYW1lOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
aW50PiBJREd1aWRNYXA7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChJREd1aWRNYXAsIHN0cmlu
Z0lkZW50aWZpZXJUb0dVSURNYXAsICgpKTsKLSAgICBEYXRhYmFzZUd1aWQgZ3VpZCA9IHN0cmlu
Z0lkZW50aWZpZXJUb0dVSURNYXAuZ2V0KHN0cmluZ0lEKTsKLSAgICBpZiAoIWd1aWQpIHsKLSAg
ICAgICAgc3RhdGljIGludCBjdXJyZW50TmV3R1VJRCA9IDE7Ci0gICAgICAgIGd1aWQgPSBjdXJy
ZW50TmV3R1VJRCsrOwotICAgICAgICBzdHJpbmdJZGVudGlmaWVyVG9HVUlETWFwLnNldChzdHJp
bmdJRCwgZ3VpZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGd1aWQ7Ci19Ci0KLS8vIHN0YXRpYwot
Y29uc3QgY2hhciogRGF0YWJhc2VCYWNrZW5kOjpkYXRhYmFzZUluZm9UYWJsZU5hbWUoKQotewot
ICAgIHJldHVybiBpbmZvVGFibGVOYW1lOwotfQotCi1EYXRhYmFzZUJhY2tlbmQ6OkRhdGFiYXNl
QmFja2VuZChQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+IGRhdGFiYXNlQ29udGV4
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKLSAg
ICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUs
IERhdGFiYXNlVHlwZSBkYXRhYmFzZVR5cGUpCi0gICAgOiBtX2RhdGFiYXNlQ29udGV4dChkYXRh
YmFzZUNvbnRleHQpCi0gICAgLCBtX25hbWUobmFtZS5pc29sYXRlZENvcHkoKSkKLSAgICAsIG1f
ZXhwZWN0ZWRWZXJzaW9uKGV4cGVjdGVkVmVyc2lvbi5pc29sYXRlZENvcHkoKSkKLSAgICAsIG1f
ZGlzcGxheU5hbWUoZGlzcGxheU5hbWUuaXNvbGF0ZWRDb3B5KCkpCi0gICAgLCBtX2VzdGltYXRl
ZFNpemUoZXN0aW1hdGVkU2l6ZSkKLSAgICAsIG1fZ3VpZCgwKQotICAgICwgbV9vcGVuZWQoZmFs
c2UpCi0gICAgLCBtX25ldyhmYWxzZSkKLSAgICAsIG1faXNTeW5jRGF0YWJhc2UoZGF0YWJhc2VU
eXBlID09IERhdGFiYXNlVHlwZTo6U3luYykKLXsKLSAgICBtX2NvbnRleHRUaHJlYWRTZWN1cml0
eU9yaWdpbiA9IG1fZGF0YWJhc2VDb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5pc29sYXRlZENv
cHkoKTsKLQotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyID0gRGF0YWJhc2VBdXRob3JpemVyOjpj
cmVhdGUoaW5mb1RhYmxlTmFtZSk7Ci0KLSAgICBpZiAobV9uYW1lLmlzTnVsbCgpKQotICAgICAg
ICBtX25hbWUgPSAiIjsKLQotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRN
dXRleCgpKTsKLSAgICAgICAgbV9ndWlkID0gZ3VpZEZvck9yaWdpbkFuZE5hbWUoc2VjdXJpdHlP
cmlnaW4oKS0+dG9TdHJpbmcoKSwgbmFtZSk7Ci0gICAgICAgIEhhc2hTZXQ8RGF0YWJhc2VCYWNr
ZW5kKj4qIGhhc2hTZXQgPSBndWlkVG9EYXRhYmFzZU1hcCgpLmdldChtX2d1aWQpOwotICAgICAg
ICBpZiAoIWhhc2hTZXQpIHsKLSAgICAgICAgICAgIGhhc2hTZXQgPSBuZXcgSGFzaFNldDxEYXRh
YmFzZUJhY2tlbmQqPjsKLSAgICAgICAgICAgIGd1aWRUb0RhdGFiYXNlTWFwKCkuc2V0KG1fZ3Vp
ZCwgaGFzaFNldCk7Ci0gICAgICAgIH0KLQotICAgICAgICBoYXNoU2V0LT5hZGQodGhpcyk7Ci0g
ICAgfQotCi0gICAgbV9maWxlbmFtZSA9IERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmZ1bGxQ
YXRoRm9yRGF0YWJhc2Uoc2VjdXJpdHlPcmlnaW4oKSwgbV9uYW1lKTsKLX0KLQotRGF0YWJhc2VC
YWNrZW5kOjp+RGF0YWJhc2VCYWNrZW5kKCkKLXsKLSAgICAvLyBTUUxpdGUgaXMgIm11bHRpLXRo
cmVhZCBzYWZlIiwgYnV0IGVhY2ggZGF0YWJhc2UgaGFuZGxlIGNhbiBvbmx5IGJlIHVzZWQKLSAg
ICAvLyBvbiBhIHNpbmdsZSB0aHJlYWQgYXQgYSB0aW1lLgotICAgIC8vCi0gICAgLy8gRm9yIERh
dGFiYXNlQmFja2VuZEFzeW5jLCB3ZSBvcGVuIHRoZSBTUUxpdGUgZGF0YWJhc2Ugb24gdGhlIERh
dGFiYXNlVGhyZWFkLAotICAgIC8vIGFuZCBoZW5jZSB3ZSBzaG91bGQgYWxzbyBjbG9zZSBpdCBv
biB0aGF0IHNhbWUgdGhyZWFkLiBUaGlzIG1lYW5zIHRoYXQgdGhlCi0gICAgLy8gU1FMaXRlIGRh
dGFiYXNlIG5lZWQgdG8gYmUgY2xvc2VkIGJ5IGFub3RoZXIgbWVjaGFuaXNtIChzZWUKLSAgICAv
LyBEYXRhYmFzZUNvbnRleHQ6OnN0b3BEYXRhYmFzZXMoKSkuIEJ5IHRoZSB0aW1lIHdlIGdldCBo
ZXJlLCB0aGUgU1FMaXRlCi0gICAgLy8gZGF0YWJhc2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVu
IGNsb3NlZC4KLQotICAgIEFTU0VSVCghbV9vcGVuZWQpOwotfQotCi12b2lkIERhdGFiYXNlQmFj
a2VuZDo6Y2xvc2VEYXRhYmFzZSgpCi17Ci0gICAgaWYgKCFtX29wZW5lZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwotICAgIG1fb3BlbmVkID0gZmFs
c2U7Ci0gICAgLy8gU2VlIGNvbW1lbnQgYXQgdGhlIHRvcCB0aGlzIGZpbGUgcmVnYXJkaW5nIGNh
bGxpbmcgcmVtb3ZlT3BlbkRhdGFiYXNlKCkuCi0gICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2Vy
KCkucmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMpOwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKGd1aWRNdXRleCgpKTsKLQotICAgICAgICBIYXNoU2V0PERhdGFiYXNlQmFja2VuZCo+
KiBoYXNoU2V0ID0gZ3VpZFRvRGF0YWJhc2VNYXAoKS5nZXQobV9ndWlkKTsKLSAgICAgICAgQVNT
RVJUKGhhc2hTZXQpOwotICAgICAgICBBU1NFUlQoaGFzaFNldC0+Y29udGFpbnModGhpcykpOwot
ICAgICAgICBoYXNoU2V0LT5yZW1vdmUodGhpcyk7Ci0gICAgICAgIGlmIChoYXNoU2V0LT5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIGd1aWRUb0RhdGFiYXNlTWFwKCkucmVtb3ZlKG1fZ3VpZCk7
Ci0gICAgICAgICAgICBkZWxldGUgaGFzaFNldDsKLSAgICAgICAgICAgIGd1aWRUb1ZlcnNpb25N
YXAoKS5yZW1vdmUobV9ndWlkKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotU3RyaW5nIERhdGFi
YXNlQmFja2VuZDo6dmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgLy8gTm90ZTogSW4gbXVsdGktcHJv
Y2VzcyBicm93c2VycyB0aGUgY2FjaGVkIHZhbHVlIG1heSBiZSBhY2N1cmF0ZSwgYnV0IHdlIGNh
bm5vdCByZWFkIHRoZQotICAgIC8vIGFjdHVhbCB2ZXJzaW9uIGZyb20gdGhlIGRhdGFiYXNlIHdp
dGhvdXQgcG90ZW50aWFsbHkgaW5kdWNpbmcgYSBkZWFkbG9jay4KLSAgICAvLyBGSVhNRTogQWRk
IGFuIGFzeW5jIHZlcnNpb24gZ2V0dGVyIHRvIHRoZSBEYXRhYmFzZUFQSS4KLSAgICByZXR1cm4g
Z2V0Q2FjaGVkVmVyc2lvbigpOwotfQotCi1jbGFzcyBEb25lQ3JlYXRpbmdEYXRhYmFzZU9uRXhp
dENhbGxlciB7Ci1wdWJsaWM6Ci0gICAgRG9uZUNyZWF0aW5nRGF0YWJhc2VPbkV4aXRDYWxsZXIo
RGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZSkKLSAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNl
KQotICAgICAgICAsIG1fb3BlblN1Y2NlZWRlZChmYWxzZSkKLSAgICB7Ci0gICAgfQotICAgIH5E
b25lQ3JlYXRpbmdEYXRhYmFzZU9uRXhpdENhbGxlcigpCi0gICAgewotI2lmICFQTEFURk9STShD
SFJPTUlVTSkKLSAgICAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZG9uZUNyZWF0aW5n
RGF0YWJhc2UobV9kYXRhYmFzZSk7Ci0jZWxzZQotICAgICAgICBpZiAoIW1fb3BlblN1Y2NlZWRl
ZCkKLSAgICAgICAgICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmZhaWxlZFRvT3BlbkRh
dGFiYXNlKG1fZGF0YWJhc2UpOwotI2VuZGlmICAgICAgICAgICAgCi0gICAgfQotCi0gICAgdm9p
ZCBzZXRPcGVuU3VjY2VlZGVkKCkgeyBtX29wZW5TdWNjZWVkZWQgPSB0cnVlOyB9Ci0KLXByaXZh
dGU6Ci0gICAgRGF0YWJhc2VCYWNrZW5kKiBtX2RhdGFiYXNlOwotICAgIGJvb2wgbV9vcGVuU3Vj
Y2VlZGVkOwotfTsKLQotYm9vbCBEYXRhYmFzZUJhY2tlbmQ6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5
KGJvb2wgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImIGVycm9y
LCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKLXsKLSAgICBEb25lQ3JlYXRpbmdEYXRhYmFzZU9uRXhp
dENhbGxlciBvbkV4aXRDYWxsZXIodGhpcyk7Ci0gICAgQVNTRVJUKGVycm9yTWVzc2FnZS5pc0Vt
cHR5KCkpOwotICAgIEFTU0VSVChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpOb25lKTsgLy8gQmV0
dGVyIG5vdCBoYXZlIGFueSBlcnJvcnMgYWxyZWFkeS4KLSAgICBlcnJvciA9IERhdGFiYXNlRXJy
b3I6OkludmFsaWREYXRhYmFzZVN0YXRlOyAvLyBQcmVzdW1lZCBmYWlsdXJlLiBXZSdsbCBjbGVh
ciBpdCBpZiB3ZSBzdWNjZWVkIGJlbG93LgotCi0gICAgY29uc3QgaW50IG1heFNxbGl0ZUJ1c3lX
YWl0VGltZSA9IDMwMDAwOwotCi0gICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLm9wZW4obV9maWxl
bmFtZSwgdHJ1ZSkpIHsKLSAgICAgICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDEsIElOVkFM
SURfU1RBVEVfRVJSLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpKTsKLSAgICAgICAgZXJy
b3JNZXNzYWdlID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSIs
IG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICghbV9zcWxpdGVE
YXRhYmFzZS50dXJuT25JbmNyZW1lbnRhbEF1dG9WYWN1dW0oKSkKLSAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gdHVybiBvbiBpbmNyZW1lbnRhbCBhdXRvLXZhY3V1bSAoJWQgJXMpIiwgbV9z
cWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7Ci0KLSAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEJ1c3lUaW1lb3V0KG1heFNxbGl0ZUJ1c3lX
YWl0VGltZSk7Ci0KLSAgICBTdHJpbmcgY3VycmVudFZlcnNpb247Ci0gICAgewotICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwotCi0gICAgICAgIEd1aWRWZXJzaW9uTWFw
OjppdGVyYXRvciBlbnRyeSA9IGd1aWRUb1ZlcnNpb25NYXAoKS5maW5kKG1fZ3VpZCk7Ci0gICAg
ICAgIGlmIChlbnRyeSAhPSBndWlkVG9WZXJzaW9uTWFwKCkuZW5kKCkpIHsKLSAgICAgICAgICAg
IC8vIE1hcCBudWxsIHN0cmluZyB0byBlbXB0eSBzdHJpbmcgKHNlZSB1cGRhdGVHdWlkVmVyc2lv
bk1hcCgpKS4KLSAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gZW50cnktPnZhbHVlLmlzTnVs
bCgpID8gZW1wdHlTdHJpbmcoKSA6IGVudHJ5LT52YWx1ZS5pc29sYXRlZENvcHkoKTsKLSAgICAg
ICAgICAgIExPRyhTdG9yYWdlQVBJLCAiQ3VycmVudCBjYWNoZWQgdmVyc2lvbiBmb3IgZ3VpZCAl
aSBpcyAlcyIsIG1fZ3VpZCwgY3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCkpOwotCi0jaWYg
UExBVEZPUk0oQ0hST01JVU0pCi0gICAgICAgICAgICAvLyBOb3RlOiBJbiBtdWx0aS1wcm9jZXNz
IGJyb3dzZXJzIHRoZSBjYWNoZWQgdmFsdWUgbWF5IGJlIGluYWNjdXJhdGUsIGJ1dAotICAgICAg
ICAgICAgLy8gd2UgY2Fubm90IHJlYWQgdGhlIGFjdHVhbCB2ZXJzaW9uIGZyb20gdGhlIGRhdGFi
YXNlIHdpdGhvdXQgcG90ZW50aWFsbHkKLSAgICAgICAgICAgIC8vIGluZHVjaW5nIGEgZm9ybSBv
ZiBkZWFkbG9jaywgYSBidXN5dGltZW91dCBlcnJvciB3aGVuIHRyeWluZyB0bwotICAgICAgICAg
ICAgLy8gYWNjZXNzIHRoZSBkYXRhYmFzZS4gU28gd2UnbGwgdXNlIHRoZSBjYWNoZWQgdmFsdWUg
aWYgd2UncmUgdW5hYmxlIHRvIHJlYWQKLSAgICAgICAgICAgIC8vIHRoZSB2YWx1ZSBmcm9tIHRo
ZSBkYXRhYmFzZSBmaWxlIHdpdGhvdXQgd2FpdGluZy4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBB
ZGQgYW4gYXN5bmMgb3BlbkRhdGFiYXNlIG1ldGhvZCB0byB0aGUgRGF0YWJhc2VBUEkuCi0gICAg
ICAgICAgICBjb25zdCBpbnQgbm9TcWxpdGVCdXN5V2FpdFRpbWUgPSAwOwotICAgICAgICAgICAg
bV9zcWxpdGVEYXRhYmFzZS5zZXRCdXN5VGltZW91dChub1NxbGl0ZUJ1c3lXYWl0VGltZSk7Ci0g
ICAgICAgICAgICBTdHJpbmcgdmVyc2lvbkZyb21EYXRhYmFzZTsKLSAgICAgICAgICAgIGlmIChn
ZXRWZXJzaW9uRnJvbURhdGFiYXNlKHZlcnNpb25Gcm9tRGF0YWJhc2UsIGZhbHNlKSkgewotICAg
ICAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gdmVyc2lvbkZyb21EYXRhYmFzZTsKLSAgICAg
ICAgICAgICAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcChtX2d1aWQsIGN1cnJlbnRWZXJzaW9uKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QnVzeVRpbWVv
dXQobWF4U3FsaXRlQnVzeVdhaXRUaW1lKTsKLSNlbmRpZgotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJObyBjYWNoZWQgdmVyc2lvbiBmb3IgZ3VpZCAlaSIs
IG1fZ3VpZCk7Ci0KLSAgICAgICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1f
c3FsaXRlRGF0YWJhc2UpOwotICAgICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKLSAgICAg
ICAgICAgIGlmICghdHJhbnNhY3Rpb24uaW5Qcm9ncmVzcygpKSB7Ci0gICAgICAgICAgICAgICAg
cmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDIsIElOVkFMSURfU1RBVEVfRVJSLCBtX3NxbGl0ZURh
dGFiYXNlLmxhc3RFcnJvcigpKTsKLSAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBmb3Jt
YXRFcnJvck1lc3NhZ2UoInVuYWJsZSB0byBvcGVuIGRhdGFiYXNlLCBmYWlsZWQgdG8gc3RhcnQg
dHJhbnNhY3Rpb24iLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpLCBtX3NxbGl0ZURhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNs
b3NlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBTdHJpbmcgdGFibGVOYW1lKGluZm9UYWJsZU5hbWUpOwotICAgICAgICAgICAg
aWYgKCFtX3NxbGl0ZURhdGFiYXNlLnRhYmxlRXhpc3RzKHRhYmxlTmFtZSkpIHsKLSAgICAgICAg
ICAgICAgICBtX25ldyA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fc3FsaXRlRGF0
YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSAiICsgdGFibGVOYW1lICsgIiAoa2V5
IFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFD
RSx2YWx1ZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpOyIpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdCgzLCBJTlZBTElEX1NUQVRFX0VSUiwg
bV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVycm9y
TWVzc2FnZSA9IGZvcm1hdEVycm9yTWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZh
aWxlZCB0byBjcmVhdGUgJ2luZm8nIHRhYmxlIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3Io
KSwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICAgICAgICAg
IHRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0
YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWdldFZlcnNpb25Gcm9tRGF0YWJh
c2UoY3VycmVudFZlcnNpb24sIGZhbHNlKSkgewotICAgICAgICAgICAgICAgIHJlcG9ydE9wZW5E
YXRhYmFzZVJlc3VsdCg0LCBJTlZBTElEX1NUQVRFX0VSUiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0
RXJyb3IoKSk7Ci0gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZm9ybWF0RXJyb3JNZXNz
YWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSwgZmFpbGVkIHRvIHJlYWQgY3VycmVudCB2ZXJz
aW9uIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ucm9sbGJhY2soKTsKLSAg
ICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY3VycmVudFZl
cnNpb24ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlJldHJp
ZXZlZCBjdXJyZW50IHZlcnNpb24gJXMgZnJvbSBkYXRhYmFzZSAlcyIsIGN1cnJlbnRWZXJzaW9u
LmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIW1fbmV3IHx8IHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFi
YXNlKSB7Ci0gICAgICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTZXR0aW5nIHZlcnNpb24g
JXMgaW4gZGF0YWJhc2UgJXMgdGhhdCB3YXMganVzdCBjcmVhdGVkIiwgbV9leHBlY3RlZFZlcnNp
b24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwot
ICAgICAgICAgICAgICAgIGlmICghc2V0VmVyc2lvbkluRGF0YWJhc2UobV9leHBlY3RlZFZlcnNp
b24sIGZhbHNlKSkgewotICAgICAgICAgICAgICAgICAgICByZXBvcnRPcGVuRGF0YWJhc2VSZXN1
bHQoNSwgSU5WQUxJRF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCkpOwot
ICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UoInVu
YWJsZSB0byBvcGVuIGRhdGFiYXNlLCBmYWlsZWQgdG8gd3JpdGUgY3VycmVudCB2ZXJzaW9uIiwg
bV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBj
dXJyZW50VmVyc2lvbiA9IG1fZXhwZWN0ZWRWZXJzaW9uOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgdXBkYXRlR3VpZFZlcnNpb25NYXAobV9ndWlkLCBjdXJyZW50VmVyc2lvbik7Ci0gICAg
ICAgICAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChjdXJyZW50VmVyc2lvbi5pc051bGwoKSkgewotICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkRh
dGFiYXNlICVzIGRvZXMgbm90IGhhdmUgaXRzIHZlcnNpb24gc2V0IiwgZGF0YWJhc2VEZWJ1Z05h
bWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIGN1cnJlbnRWZXJzaW9uID0gIiI7Ci0gICAg
fQotCi0gICAgLy8gSWYgdGhlIGV4cGVjdGVkIHZlcnNpb24gaXNuJ3QgdGhlIGVtcHR5IHN0cmlu
ZywgZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgZGF0YWJhc2UgdmVyc2lvbiB3ZSBoYXZlIG1hdGNo
ZXMgdGhhdCB2ZXJzaW9uLiBPdGhlcndpc2UsIHNldCBhbiBleGNlcHRpb24uCi0gICAgLy8gSWYg
dGhlIGV4cGVjdGVkIHZlcnNpb24gaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiB3ZSBhbHdheXMg
cmV0dXJuIHdpdGggd2hhdGV2ZXIgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2Ugd2UgaGF2ZS4KLSAg
ICBpZiAoKCFtX25ldyB8fCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSkgJiYgbV9leHBl
Y3RlZFZlcnNpb24ubGVuZ3RoKCkgJiYgbV9leHBlY3RlZFZlcnNpb24gIT0gY3VycmVudFZlcnNp
b24pIHsKLSAgICAgICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDYsIElOVkFMSURfU1RBVEVf
RVJSLCAwKTsKLSAgICAgICAgZXJyb3JNZXNzYWdlID0gInVuYWJsZSB0byBvcGVuIGRhdGFiYXNl
LCB2ZXJzaW9uIG1pc21hdGNoLCAnIiArIG1fZXhwZWN0ZWRWZXJzaW9uICsgIicgZG9lcyBub3Qg
bWF0Y2ggdGhlIGN1cnJlbnRWZXJzaW9uIG9mICciICsgY3VycmVudFZlcnNpb24gKyAiJyI7Ci0g
ICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7Ci0gICAgbV9zcWxpdGVE
YXRhYmFzZS5zZXRBdXRob3JpemVyKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLQotICAgIC8vIFNl
ZSBjb21tZW50IGF0IHRoZSB0b3AgdGhpcyBmaWxlIHJlZ2FyZGluZyBjYWxsaW5nIGFkZE9wZW5E
YXRhYmFzZSgpLgotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmFkZE9wZW5EYXRhYmFz
ZSh0aGlzKTsKLSAgICBtX29wZW5lZCA9IHRydWU7Ci0KLSAgICAvLyBEZWNsYXJlIHN1Y2Nlc3M6
Ci0gICAgZXJyb3IgPSBEYXRhYmFzZUVycm9yOjpOb25lOyAvLyBDbGVhciB0aGUgcHJlc3VtZWQg
ZXJyb3IgZnJvbSBhYm92ZS4KLSAgICBvbkV4aXRDYWxsZXIuc2V0T3BlblN1Y2NlZWRlZCgpOwot
Ci0gICAgaWYgKG1fbmV3ICYmICFzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSkKLSAgICAg
ICAgbV9leHBlY3RlZFZlcnNpb24gPSAiIjsgLy8gVGhlIGNhbGxlciBwcm92aWRlZCBhIGNyZWF0
aW9uQ2FsbGJhY2sgd2hpY2ggd2lsbCBzZXQgdGhlIGV4cGVjdGVkIHZlcnNpb24uCi0KLSAgICBy
ZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoMCwgLTEsIDApOyAvLyBPSwotICAgIHJldHVybiB0cnVl
OwotfQotCi1TZWN1cml0eU9yaWdpbiogRGF0YWJhc2VCYWNrZW5kOjpzZWN1cml0eU9yaWdpbigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luLmdldCgp
OwotfQotCi1TdHJpbmcgRGF0YWJhc2VCYWNrZW5kOjpzdHJpbmdJZGVudGlmaWVyKCkgY29uc3QK
LXsKLSAgICAvLyBSZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2Fm
ZXR5Ci0gICAgcmV0dXJuIG1fbmFtZS5pc29sYXRlZENvcHkoKTsKLX0KLQotU3RyaW5nIERhdGFi
YXNlQmFja2VuZDo6ZGlzcGxheU5hbWUoKSBjb25zdAotewotICAgIC8vIFJldHVybiBhIGRlZXAg
Y29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVhZCBzYWZldHkKLSAgICByZXR1cm4gbV9kaXNwbGF5
TmFtZS5pc29sYXRlZENvcHkoKTsKLX0KLQotdW5zaWduZWQgbG9uZyBEYXRhYmFzZUJhY2tlbmQ6
OmVzdGltYXRlZFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtX2VzdGltYXRlZFNpemU7Ci19
Ci0KLVN0cmluZyBEYXRhYmFzZUJhY2tlbmQ6OmZpbGVOYW1lKCkgY29uc3QKLXsKLSAgICAvLyBS
ZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5Ci0gICAgcmV0
dXJuIG1fZmlsZW5hbWUuaXNvbGF0ZWRDb3B5KCk7Ci19Ci0KLURhdGFiYXNlRGV0YWlscyBEYXRh
YmFzZUJhY2tlbmQ6OmRldGFpbHMoKSBjb25zdAotewotICAgIHJldHVybiBEYXRhYmFzZURldGFp
bHMoc3RyaW5nSWRlbnRpZmllcigpLCBkaXNwbGF5TmFtZSgpLCBlc3RpbWF0ZWRTaXplKCksIDAp
OwotfQotCi1ib29sIERhdGFiYXNlQmFja2VuZDo6Z2V0VmVyc2lvbkZyb21EYXRhYmFzZShTdHJp
bmcmIHZlcnNpb24sIGJvb2wgc2hvdWxkQ2FjaGVWZXJzaW9uKQotewotICAgIFN0cmluZyBxdWVy
eShTdHJpbmcoIlNFTEVDVCB2YWx1ZSBGUk9NICIpICsgaW5mb1RhYmxlTmFtZSArICAiIFdIRVJF
IGtleSA9ICciICsgdmVyc2lvbktleSArICInOyIpOwotCi0gICAgbV9kYXRhYmFzZUF1dGhvcml6
ZXItPmRpc2FibGUoKTsKLQotICAgIGJvb2wgcmVzdWx0ID0gcmV0cmlldmVUZXh0UmVzdWx0RnJv
bURhdGFiYXNlKG1fc3FsaXRlRGF0YWJhc2UsIHF1ZXJ5LCB2ZXJzaW9uKTsKLSAgICBpZiAocmVz
dWx0KSB7Ci0gICAgICAgIGlmIChzaG91bGRDYWNoZVZlcnNpb24pCi0gICAgICAgICAgICBzZXRD
YWNoZWRWZXJzaW9uKHZlcnNpb24pOwotICAgIH0gZWxzZQotICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byByZXRyaWV2ZSB2ZXJzaW9uIGZyb20gZGF0YWJhc2UgJXMiLCBkYXRhYmFzZURlYnVn
TmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLQotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFi
bGUoKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgRGF0YWJhc2VCYWNrZW5kOjpz
ZXRWZXJzaW9uSW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIHZlcnNpb24sIGJvb2wgc2hvdWxkQ2Fj
aGVWZXJzaW9uKQotewotICAgIC8vIFRoZSBJTlNFUlQgd2lsbCByZXBsYWNlIGFuIGV4aXN0aW5n
IGVudHJ5IGZvciB0aGUgZGF0YWJhc2Ugd2l0aCB0aGUgbmV3IHZlcnNpb24gbnVtYmVyLCBkdWUg
dG8gdGhlIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFCi0gICAgLy8gY2xhdXNlIGluIHRoZSBD
UkVBVEUgc3RhdGVtZW50IChzZWUgRGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkpLgot
ICAgIFN0cmluZyBxdWVyeShTdHJpbmcoIklOU0VSVCBJTlRPICIpICsgaW5mb1RhYmxlTmFtZSAr
ICAiIChrZXksIHZhbHVlKSBWQUxVRVMgKCciICsgdmVyc2lvbktleSArICInLCA/KTsiKTsKLQot
ICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxlKCk7Ci0KLSAgICBib29sIHJlc3VsdCA9
IHNldFRleHRWYWx1ZUluRGF0YWJhc2UobV9zcWxpdGVEYXRhYmFzZSwgcXVlcnksIHZlcnNpb24p
OwotICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgaWYgKHNob3VsZENhY2hlVmVyc2lvbikKLSAg
ICAgICAgICAgIHNldENhY2hlZFZlcnNpb24odmVyc2lvbik7Ci0gICAgfSBlbHNlCi0gICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIHNldCB2ZXJzaW9uICVzIGluIGRhdGFiYXNlICglcykiLCB2
ZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0KLSAgICBtX2Rh
dGFiYXNlQXV0aG9yaXplci0+ZW5hYmxlKCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12
b2lkIERhdGFiYXNlQmFja2VuZDo6c2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVy
c2lvbikKLXsKLSAgICBtX2V4cGVjdGVkVmVyc2lvbiA9IHZlcnNpb24uaXNvbGF0ZWRDb3B5KCk7
Ci19Ci0KLVN0cmluZyBEYXRhYmFzZUJhY2tlbmQ6OmdldENhY2hlZFZlcnNpb24oKSBjb25zdAot
ewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0gICAgcmV0dXJuIGd1aWRU
b1ZlcnNpb25NYXAoKS5nZXQobV9ndWlkKS5pc29sYXRlZENvcHkoKTsKLX0KLQotdm9pZCBEYXRh
YmFzZUJhY2tlbmQ6OnNldENhY2hlZFZlcnNpb24oY29uc3QgU3RyaW5nJiBhY3R1YWxWZXJzaW9u
KQotewotICAgIC8vIFVwZGF0ZSB0aGUgaW4gbWVtb3J5IGRhdGFiYXNlIHZlcnNpb24gbWFwLgot
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0gICAgdXBkYXRlR3VpZFZlcnNp
b25NYXAobV9ndWlkLCBhY3R1YWxWZXJzaW9uKTsKLX0KLQotYm9vbCBEYXRhYmFzZUJhY2tlbmQ6
OmdldEFjdHVhbFZlcnNpb25Gb3JUcmFuc2FjdGlvbihTdHJpbmcgJmFjdHVhbFZlcnNpb24pCi17
Ci0gICAgQVNTRVJUKG1fc3FsaXRlRGF0YWJhc2UudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwot
I2lmIFBMQVRGT1JNKENIUk9NSVVNKQotICAgIC8vIE5vdGU6IEluIG11bHRpLXByb2Nlc3MgYnJv
d3NlcnMgdGhlIGNhY2hlZCB2YWx1ZSBtYXkgYmUgaW5hY2N1cmF0ZS4KLSAgICAvLyBTbyB3ZSBy
ZXRyaWV2ZSB0aGUgdmFsdWUgZnJvbSB0aGUgZGF0YWJhc2UgYW5kIHVwZGF0ZSB0aGUgY2FjaGVk
IHZhbHVlIGhlcmUuCi0gICAgcmV0dXJuIGdldFZlcnNpb25Gcm9tRGF0YWJhc2UoYWN0dWFsVmVy
c2lvbiwgdHJ1ZSk7Ci0jZWxzZQotICAgIGFjdHVhbFZlcnNpb24gPSBnZXRDYWNoZWRWZXJzaW9u
KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmQ6
OmRpc2FibGVBdXRob3JpemVyKCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIp
OwotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxlKCk7Ci19Ci0KLXZvaWQgRGF0YWJh
c2VCYWNrZW5kOjplbmFibGVBdXRob3JpemVyKCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1
dGhvcml6ZXIpOwotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKLX0KLQotdm9p
ZCBEYXRhYmFzZUJhY2tlbmQ6OnNldEF1dGhvcml6ZXJSZWFkT25seSgpCi17Ci0gICAgQVNTRVJU
KG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+c2V0UmVh
ZE9ubHkoKTsKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmQ6OnNldEF1dGhvcml6ZXJQZXJtaXNz
aW9ucyhpbnQgcGVybWlzc2lvbnMpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVy
KTsKLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+c2V0UGVybWlzc2lvbnMocGVybWlzc2lvbnMp
OwotfQotCi1ib29sIERhdGFiYXNlQmFja2VuZDo6bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgp
Ci17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICByZXR1cm4gbV9kYXRh
YmFzZUF1dGhvcml6ZXItPmxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKTsKLX0KLQotYm9vbCBE
YXRhYmFzZUJhY2tlbmQ6Omxhc3RBY3Rpb25XYXNJbnNlcnQoKQotewotICAgIEFTU0VSVChtX2Rh
dGFiYXNlQXV0aG9yaXplcik7Ci0gICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5sYXN0
QWN0aW9uV2FzSW5zZXJ0KCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kOjpyZXNldERlbGV0
ZXMoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7Ci0gICAgbV9kYXRhYmFz
ZUF1dGhvcml6ZXItPnJlc2V0RGVsZXRlcygpOwotfQotCi1ib29sIERhdGFiYXNlQmFja2VuZDo6
aGFkRGVsZXRlcygpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBy
ZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmhhZERlbGV0ZXMoKTsKLX0KLQotdm9pZCBEYXRh
YmFzZUJhY2tlbmQ6OnJlc2V0QXV0aG9yaXplcigpCi17Ci0gICAgaWYgKG1fZGF0YWJhc2VBdXRo
b3JpemVyKQotICAgICAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXQoKTsKLX0KLQotdW5z
aWduZWQgbG9uZyBsb25nIERhdGFiYXNlQmFja2VuZDo6bWF4aW11bVNpemUoKSBjb25zdAotewot
ICAgIHJldHVybiBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5nZXRNYXhTaXplRm9yRGF0YWJh
c2UodGhpcyk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kOjppbmNyZW1lbnRhbFZhY3V1bUlm
TmVlZGVkKCkKLXsKLSAgICBpbnQ2NF90IGZyZWVTcGFjZVNpemUgPSBtX3NxbGl0ZURhdGFiYXNl
LmZyZWVTcGFjZVNpemUoKTsKLSAgICBpbnQ2NF90IHRvdGFsU2l6ZSA9IG1fc3FsaXRlRGF0YWJh
c2UudG90YWxTaXplKCk7Ci0gICAgaWYgKHRvdGFsU2l6ZSA8PSAxMCAqIGZyZWVTcGFjZVNpemUp
IHsKLSAgICAgICAgaW50IHJlc3VsdCA9IG1fc3FsaXRlRGF0YWJhc2UucnVuSW5jcmVtZW50YWxW
YWN1dW1Db21tYW5kKCk7Ci0gICAgICAgIHJlcG9ydFZhY3V1bURhdGFiYXNlUmVzdWx0KHJlc3Vs
dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0T2spCi0gICAgICAgICAgICBtX2Zy
b250ZW5kLT5sb2dFcnJvck1lc3NhZ2UoZm9ybWF0RXJyb3JNZXNzYWdlKCJlcnJvciB2YWN1dW1p
bmcgZGF0YWJhc2UiLCByZXN1bHQsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpKTsK
LSAgICB9Ci19Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kOjppbnRlcnJ1cHQoKQotewotICAgIG1f
c3FsaXRlRGF0YWJhc2UuaW50ZXJydXB0KCk7Ci19Ci0KLWJvb2wgRGF0YWJhc2VCYWNrZW5kOjpp
c0ludGVycnVwdGVkKCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9zcWxpdGVEYXRhYmFz
ZS5kYXRhYmFzZU11dGV4KCkpOwotICAgIHJldHVybiBtX3NxbGl0ZURhdGFiYXNlLmlzSW50ZXJy
dXB0ZWQoKTsKLX0KLQotI2lmIFBMQVRGT1JNKENIUk9NSVVNKQotLy8gVGhlc2UgYXJlIHVzZWQg
dG8gZ2VuZXJhdGUgaGlzdG9ncmFtcyBvZiBlcnJvcnMgc2VlbiB3aXRoIHdlYnNxbC4KLS8vIFNl
ZSBhYm91dDpoaXN0b2dyYW1zIGluIGNocm9taXVtLgotdm9pZCBEYXRhYmFzZUJhY2tlbmQ6OnJl
cG9ydE9wZW5EYXRhYmFzZVJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2Rl
LCBpbnQgc3FsaXRlRXJyb3JDb2RlKQotewotICAgIERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydE9w
ZW5EYXRhYmFzZVJlc3VsdCh0aGlzLCBlcnJvclNpdGUsIHdlYlNxbEVycm9yQ29kZSwgc3FsaXRl
RXJyb3JDb2RlKTsKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmQ6OnJlcG9ydENoYW5nZVZlcnNp
b25SZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVy
cm9yQ29kZSkKLXsKLSAgICBEYXRhYmFzZU9ic2VydmVyOjpyZXBvcnRDaGFuZ2VWZXJzaW9uUmVz
dWx0KHRoaXMsIGVycm9yU2l0ZSwgd2ViU3FsRXJyb3JDb2RlLCBzcWxpdGVFcnJvckNvZGUpOwot
fQotCi12b2lkIERhdGFiYXNlQmFja2VuZDo6cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdChp
bnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKQot
ewotICAgIERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQodGhp
cywgZXJyb3JTaXRlLCB3ZWJTcWxFcnJvckNvZGUsIHNxbGl0ZUVycm9yQ29kZSk7Ci19Ci0KLXZv
aWQgRGF0YWJhc2VCYWNrZW5kOjpyZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdChpbnQgZXJy
b3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKQotewotICAg
IERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KHRoaXMsIGVy
cm9yU2l0ZSwgd2ViU3FsRXJyb3JDb2RlLCBzcWxpdGVFcnJvckNvZGUpOwotfQotCi12b2lkIERh
dGFiYXNlQmFja2VuZDo6cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdChpbnQgZXJyb3JTaXRl
LCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKQotewotICAgIERhdGFi
YXNlT2JzZXJ2ZXI6OnJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQodGhpcywgZXJyb3JTaXRl
LCB3ZWJTcWxFcnJvckNvZGUsIHNxbGl0ZUVycm9yQ29kZSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VC
YWNrZW5kOjpyZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3VsdChpbnQgc3FsaXRlRXJyb3JDb2RlKQot
ewotICAgIERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydFZhY3V1bURhdGFiYXNlUmVzdWx0KHRoaXMs
IHNxbGl0ZUVycm9yQ29kZSk7Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShDSFJPTUlVTSkKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZUJhY2tlbmQuaAkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNjcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIERhdGFiYXNlQmFja2VuZF9oCi0jZGVmaW5lIERhdGFiYXNlQmFja2Vu
ZF9oCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRGF0YWJhc2VCYXNp
Y1R5cGVzLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCi0jaW5jbHVkZSAiRGF0YWJh
c2VFcnJvci5oIgotI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCi0jaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNh
ZmVSZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiAh
TE9HX0RJU0FCTEVEIHx8ICFFUlJPUl9ESVNBQkxFRAotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEYXRhYmFzZUF1dGhv
cml6ZXI7Ci1jbGFzcyBEYXRhYmFzZUJhY2tlbmRDb250ZXh0OwotY2xhc3MgRGF0YWJhc2VCYXNl
OwotY2xhc3MgU2VjdXJpdHlPcmlnaW47Ci0KLWNsYXNzIERhdGFiYXNlQmFja2VuZCA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEYXRhYmFzZUJhY2tlbmQ+IHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5EYXRhYmFzZUJhY2tlbmQoKTsKLQotICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24o
KSBjb25zdDsKLQotICAgIGJvb2wgb3BlbmVkKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuZWQ7IH0K
LSAgICBib29sIGlzTmV3KCkgY29uc3QgeyByZXR1cm4gbV9uZXc7IH0KLSAgICBib29sIGlzU3lu
Y0RhdGFiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9pc1N5bmNEYXRhYmFzZTsgfQotCi0gICAgdmly
dHVhbCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKLSAgICB2aXJ0dWFs
IFN0cmluZyBzdHJpbmdJZGVudGlmaWVyKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgZGlz
cGxheU5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBEYXRhYmFzZURldGFpbHMgZGV0YWlscygpIGNvbnN0OwotICAgIFNRTGl0ZURhdGFiYXNl
JiBzcWxpdGVEYXRhYmFzZSgpIHsgcmV0dXJuIG1fc3FsaXRlRGF0YWJhc2U7IH0KLQotICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSgpIGNvbnN0OwotICAgIHZvaWQgaW5jcmVtZW50
YWxWYWN1dW1JZk5lZWRlZCgpOwotICAgIHZvaWQgaW50ZXJydXB0KCk7Ci0gICAgYm9vbCBpc0lu
dGVycnVwdGVkKCk7Ci0KLSAgICB2b2lkIGRpc2FibGVBdXRob3JpemVyKCk7Ci0gICAgdm9pZCBl
bmFibGVBdXRob3JpemVyKCk7Ci0gICAgdm9pZCBzZXRBdXRob3JpemVyUmVhZE9ubHkoKTsKLSAg
ICB2b2lkIHNldEF1dGhvcml6ZXJQZXJtaXNzaW9ucyhpbnQgcGVybWlzc2lvbnMpOwotICAgIGJv
b2wgbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpOwotICAgIGJvb2wgbGFzdEFjdGlvbldhc0lu
c2VydCgpOwotICAgIHZvaWQgcmVzZXREZWxldGVzKCk7Ci0gICAgYm9vbCBoYWREZWxldGVzKCk7
Ci0gICAgdm9pZCByZXNldEF1dGhvcml6ZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBtYXJrQXNE
ZWxldGVkQW5kQ2xvc2UoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlSW1tZWRpYXRlbHko
KSA9IDA7Ci0KLSAgICBEYXRhYmFzZUJhY2tlbmRDb250ZXh0KiBkYXRhYmFzZUNvbnRleHQoKSBj
b25zdCB7IHJldHVybiBtX2RhdGFiYXNlQ29udGV4dC5nZXQoKTsgfQotICAgIHZvaWQgc2V0RnJv
bnRlbmQoRGF0YWJhc2VCYXNlKiBmcm9udGVuZCkgeyBtX2Zyb250ZW5kID0gZnJvbnRlbmQ7IH0K
LQotcHJvdGVjdGVkOgotICAgIGZyaWVuZCBjbGFzcyBDaGFuZ2VWZXJzaW9uV3JhcHBlcjsKLSAg
ICBmcmllbmQgY2xhc3MgU1FMU3RhdGVtZW50QmFja2VuZDsKLSAgICBmcmllbmQgY2xhc3MgU1FM
U3RhdGVtZW50U3luYzsKLSAgICBmcmllbmQgY2xhc3MgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOwot
ICAgIGZyaWVuZCBjbGFzcyBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jOwotCi0gICAgRGF0YWJh
c2VCYWNrZW5kKFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4sIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCi0gICAgICAgIGNvbnN0IFN0
cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VU
eXBlKTsKLQotICAgIHZvaWQgY2xvc2VEYXRhYmFzZSgpOwotCi0gICAgdmlydHVhbCBib29sIG9w
ZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNl
RXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwZXJm
b3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRh
YmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwotCi0gICAgYm9vbCBnZXRWZXJzaW9u
RnJvbURhdGFiYXNlKFN0cmluZyYgdmVyc2lvbiwgYm9vbCBzaG91bGRDYWNoZVZlcnNpb24gPSB0
cnVlKTsKLSAgICBib29sIHNldFZlcnNpb25JbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgdmVyc2lv
biwgYm9vbCBzaG91bGRDYWNoZVZlcnNpb24gPSB0cnVlKTsKLSAgICB2b2lkIHNldEV4cGVjdGVk
VmVyc2lvbihjb25zdCBTdHJpbmcmKTsKLSAgICBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZXhwZWN0ZWRWZXJzaW9uOyB9Ci0gICAgU3RyaW5nIGdldENh
Y2hlZFZlcnNpb24oKWNvbnN0OwotICAgIHZvaWQgc2V0Q2FjaGVkVmVyc2lvbihjb25zdCBTdHJp
bmcmKTsKLSAgICBib29sIGdldEFjdHVhbFZlcnNpb25Gb3JUcmFuc2FjdGlvbihTdHJpbmcmIHZl
cnNpb24pOwotCi0jaWYgUExBVEZPUk0oQ0hST01JVU0pCi0gICAgdm9pZCByZXBvcnRPcGVuRGF0
YWJhc2VSZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0
ZUVycm9yQ29kZSk7Ci0gICAgdm9pZCByZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0KGludCBlcnJv
clNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOwotICAgIHZv
aWQgcmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3Fs
RXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsKLSAgICB2b2lkIHJlcG9ydENvbW1pdFRy
YW5zYWN0aW9uUmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBz
cWxpdGVFcnJvckNvZGUpOwotICAgIHZvaWQgcmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdChp
bnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsK
LSAgICB2b2lkIHJlcG9ydFZhY3V1bURhdGFiYXNlUmVzdWx0KGludCBzcWxpdGVFcnJvckNvZGUp
OwotI2Vsc2UKLSAgICB2b2lkIHJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdChpbnQsIGludCwgaW50
KSB7IH0KLSAgICB2b2lkIHJlcG9ydENoYW5nZVZlcnNpb25SZXN1bHQoaW50LCBpbnQsIGludCkg
eyB9Ci0gICAgdm9pZCByZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KGludCwgaW50LCBpbnQp
IHsgfQotICAgIHZvaWQgcmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoaW50LCBpbnQsIGlu
dCkgeyB9Ci0gICAgdm9pZCByZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KGludCwgaW50LCBp
bnQpIHsgfQotICAgIHZvaWQgcmVwb3J0VmFjdXVtRGF0YWJhc2VSZXN1bHQoaW50KSB7IH0KLSNl
bmRpZgotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpOwot
Ci0gICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdp
bjsKLSAgICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4gbV9kYXRhYmFzZUNvbnRleHQ7
IC8vIEFzc29jaWF0ZWQgd2l0aCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCi0KLSAgICBTdHJp
bmcgbV9uYW1lOwotICAgIFN0cmluZyBtX2V4cGVjdGVkVmVyc2lvbjsKLSAgICBTdHJpbmcgbV9k
aXNwbGF5TmFtZTsKLSAgICB1bnNpZ25lZCBsb25nIG1fZXN0aW1hdGVkU2l6ZTsKLSAgICBTdHJp
bmcgbV9maWxlbmFtZTsKLQotICAgIERhdGFiYXNlQmFzZSogbV9mcm9udGVuZDsKLQotI2lmICFM
T0dfRElTQUJMRUQgfHwgIUVSUk9SX0RJU0FCTEVECi0gICAgU3RyaW5nIGRhdGFiYXNlRGVidWdO
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4tPnRvU3Ry
aW5nKCkgKyAiOjoiICsgbV9uYW1lOyB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBEYXRhYmFz
ZUd1aWQgbV9ndWlkOwotICAgIGJvb2wgbV9vcGVuZWQ7Ci0gICAgYm9vbCBtX25ldzsKLSAgICBj
b25zdCBib29sIG1faXNTeW5jRGF0YWJhc2U7Ci0KLSAgICBTUUxpdGVEYXRhYmFzZSBtX3NxbGl0
ZURhdGFiYXNlOwotCi0gICAgUmVmUHRyPERhdGFiYXNlQXV0aG9yaXplcj4gbV9kYXRhYmFzZUF1
dGhvcml6ZXI7Ci0KLSAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VTZXJ2ZXI7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0j
ZW5kaWYgLy8gRGF0YWJhc2VCYWNrZW5kX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwCShy
ZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlQmFja2VuZEFzeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBEYXRhYmFzZUJhY2tlbmRBc3luYzo6RGF0YWJhc2VCYWNr
ZW5kQXN5bmMoUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiBkYXRhYmFzZUNvbnRl
eHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNv
bnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKLSAg
ICA6IERhdGFiYXNlQmFja2VuZChkYXRhYmFzZUNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lv
biwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIERhdGFiYXNlVHlwZTo6QXN5bmMpCisgICAg
OiBEYXRhYmFzZUJhY2tlbmRCYXNlKGRhdGFiYXNlQ29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJz
aW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VUeXBlOjpBc3luYykKICAg
ICAsIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzKGZhbHNlKQogICAgICwgbV9pc1RyYW5zYWN0aW9u
UXVldWVFbmFibGVkKHRydWUpCiB7CkBAIC02OCw3ICs2OCw3IEBAIGJvb2wgRGF0YWJhc2VCYWNr
ZW5kQXN5bmM6Om9wZW5BbmRWZXJpZnkKIAogYm9vbCBEYXRhYmFzZUJhY2tlbmRBc3luYzo6cGVy
Zm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VF
cnJvciYgZXJyb3IsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewotICAgIGlmIChEYXRhYmFzZUJh
Y2tlbmQ6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBlcnJv
ciwgZXJyb3JNZXNzYWdlKSkgeworICAgIGlmIChEYXRhYmFzZUJhY2tlbmRCYXNlOjpwZXJmb3Jt
T3BlbkFuZFZlcmlmeShzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVzc2Fn
ZSkpIHsKICAgICAgICAgaWYgKGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpKQog
ICAgICAgICAgICAgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERh
dGFiYXNlT3Blbih0aGlzKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuaAkocmV2aXNpb24gMTQz
NDI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tl
bmRBc3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kLmgiCisjaW5jbHVkZSAi
RGF0YWJhc2VCYWNrZW5kQmFzZS5oIgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIFNRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3I7CiAvLyBEYXRhYmFzZUJhY2tlbmRBc3luYyB0byBkbyBzbyBiZWZv
cmUgdGhlIHByb3BlciBiYWNrZW5kIHNwbGl0IGlzCiAvLyBhdmFpbGFibGUuIFRoaXMgc2hvdWxk
IGJlIHJlcGxhY2VkIHdpdGggdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBsYXRlci4KIAotY2xh
c3MgRGF0YWJhc2VCYWNrZW5kQXN5bmMgOiBwdWJsaWMgRGF0YWJhc2VCYWNrZW5kIHsKK2NsYXNz
IERhdGFiYXNlQmFja2VuZEFzeW5jIDogcHVibGljIERhdGFiYXNlQmFja2VuZEJhc2UgewogcHVi
bGljOgogICAgIERhdGFiYXNlQmFja2VuZEFzeW5jKFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5k
Q29udGV4dD4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNp
b24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VC
YWNrZW5kQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRCYXNlLmNwcAkocmV2aXNpb24gMTQzNDI2KQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZC5jcHA6MTQz
NDI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tl
bmRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoU1FMX0RB
VEFCQVNFKQorCisjaW5jbHVkZSAiRGF0YWJhc2VBdXRob3JpemVyLmgiCisjaW5jbHVkZSAiRGF0
YWJhc2VCYWNrZW5kQ29udGV4dC5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQmFzZS5oIgorI2luY2x1
ZGUgIkRhdGFiYXNlQ29udGV4dC5oIgorI2luY2x1ZGUgIkRhdGFiYXNlTWFuYWdlci5oIgorI2lu
Y2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNp
bmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCisjaW5jbHVk
ZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2lu
Y2x1ZGUgIkRhdGFiYXNlT2JzZXJ2ZXIuaCIgLy8gRm9yIGVycm9yIHJlcG9ydGluZy4KKyNlbmRp
ZgorCisvLyBSZWdpc3RlcmluZyAib3BlbmVkIiBkYXRhYmFzZXMgd2l0aCB0aGUgRGF0YWJhc2VU
cmFja2VyCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CisvLyBUaGUgRGF0YWJhc2VUcmFja2VyIG1haW50YWlucyBhIGxpc3Qgb2YgZGF0
YWJhc2VzIHRoYXQgaGF2ZSBiZWVuCisvLyAib3BlbmVkIiBzbyB0aGF0IHRoZSBjbGllbnQgY2Fu
IGNhbGwgaW50ZXJydXB0IG9yIGRlbGV0ZSBvbiBldmVyeSBkYXRhYmFzZQorLy8gYXNzb2NpYXRl
ZCB3aXRoIGEgRGF0YWJhc2VCYWNrZW5kQ29udGV4dC4KKy8vCisvLyBXZSB3aWxsIG9ubHkgY2Fs
bCBEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZSgpIHRvIGFkZCB0aGUgZGF0YWJhc2UK
Ky8vIHRvIHRoZSB0cmFja2VyIGFzIG9wZW5lZCB3aGVuIHdlJ3ZlIHN1Y2NlZWRlZCBpbiBvcGVu
aW5nIHRoZSBkYXRhYmFzZSwKKy8vIGFuZCB3aWxsIHNldCBtX29wZW5lZCB0byB0cnVlLiBTaW1p
bGFybHksIHdlIG9ubHkgY2FsbAorLy8gRGF0YWJhc2VUcmFja2VyOjpyZW1vdmVPcGVuRGF0YWJh
c2UoKSB0byByZW1vdmUgdGhlIGRhdGFiYXNlIGZyb20gdGhlCisvLyB0cmFja2VyIHdoZW4gd2Ug
c2V0IG1fb3BlbmVkIHRvIGZhbHNlIGluIGNsb3NlRGF0YWJhc2UoKS4gVGhpcyBzZXRzIHVwCisv
LyBhIHNpbXBsZSBzeW1tZXRyeSBiZXR3ZWVuIG9wZW4gYW5kIGNsb3NlIG9wZXJhdGlvbnMsIGFu
ZCBhIGRpcmVjdAorLy8gY29ycmVsYXRpb24gdG8gYWRkaW5nIGFuZCByZW1vdmluZyBkYXRhYmFz
ZXMgZnJvbSB0aGUgdHJhY2tlcidzIGxpc3QsCisvLyB0aHVzIGVuc3VyaW5nIHRoYXQgd2UgaGF2
ZSBhIGNvcnJlY3QgbGlzdCBmb3IgdGhlIGludGVycnVwdCBhbmQKKy8vIGRlbGV0ZSBvcGVyYXRp
b25zIHRvIHdvcmsgb24uCisvLworLy8gVGhlIG9ubHkgZGF0YWJhc2VzIGluc3RhbmNlcyBub3Qg
dHJhY2tlZCBieSB0aGUgdHJhY2tlcidzIG9wZW4gZGF0YWJhc2UKKy8vIGxpc3QgYXJlIHRoZSBv
bmVzIHRoYXQgaGF2ZSBub3QgYmVlbiBhZGRlZCB5ZXQsIG9yIHRoZSBvbmVzIHRoYXQgd2UKKy8v
IGF0dGVtcHRlZCBhbiBvcGVuIG9uIGJ1dCBmYWlsZWQgdG8uIFN1Y2ggaW5zdGFuY2VzIG9ubHkg
ZXhpc3QgaW4gdGhlCisvLyBEYXRhYmFzZVNlcnZlcidzIGZhY3RvcnkgbWV0aG9kcyBmb3IgY3Jl
YXRpbmcgRGF0YWJhc2VCYWNrZW5kcy4KKy8vCisvLyBUaGUgZmFjdG9yeSBtZXRob2RzIHdpbGwg
ZWl0aGVyIGNhbGwgb3BlbkFuZFZlcmlmeVZlcnNpb24oKSBvcgorLy8gcGVyZm9ybU9wZW5BbmRW
ZXJpZnkoKS4gVGhlc2UgbWV0aG9kcyB3aWxsIGFkZCB0aGUgbmV3bHkgaW5zdGFudGlhdGVkCisv
LyBEYXRhYmFzZUJhY2tlbmQgaWYgdGhleSBzdWNjZWVkIGluIG9wZW5pbmcgdGhlIHJlcXVlc3Rl
ZCBkYXRhYmFzZS4KKy8vIEluIHRoZSBjYXNlIG9mIGZhaWx1cmUgdG8gb3BlbiB0aGUgZGF0YWJh
c2UsIHRoZSBmYWN0b3J5IG1ldGhvZHMgd2lsbAorLy8gc2ltcGx5IGRpc2NhcmQgdGhlIG5ld2x5
IGluc3RhbnRpYXRlZCBEYXRhYmFzZUJhY2tlbmQgd2hlbiB0aGV5IHJldHVybi4KKy8vIFRoZSBy
ZWYgY291bnRpbmcgbWVjaGFuaW1zIHdpbGwgYXV0b21hdGljYWxseSBkZXN0cnVjdCB0aGUgdW4t
YWRkZWQKKy8vIChhbmQgdW4tcmV0dXJuZWQpIGRhdGFiYXNlcyBpbnN0YW5jZXMuCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbktleVtdID0gIldlYktp
dERhdGFiYXNlVmVyc2lvbktleSI7CitzdGF0aWMgY29uc3QgY2hhciBpbmZvVGFibGVOYW1lW10g
PSAiX19XZWJLaXREYXRhYmFzZUluZm9UYWJsZV9fIjsKKworc3RhdGljIFN0cmluZyBmb3JtYXRF
cnJvck1lc3NhZ2UoY29uc3QgY2hhciogbWVzc2FnZSwgaW50IHNxbGl0ZUVycm9yQ29kZSwgY29u
c3QgY2hhciogc3FsaXRlRXJyb3JNZXNzYWdlKQoreworICAgIHJldHVybiBTdHJpbmc6OmZvcm1h
dCgiJXMgKCVkICVzKSIsIG1lc3NhZ2UsIHNxbGl0ZUVycm9yQ29kZSwgc3FsaXRlRXJyb3JNZXNz
YWdlKTsKK30KKworc3RhdGljIGJvb2wgcmV0cmlldmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKFNR
TGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgU3RyaW5nJiByZXN1bHRTdHJp
bmcpCit7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYiwgcXVlcnkpOworICAgIGlu
dCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOworCisgICAgaWYgKHJlc3VsdCAhPSBTUUxS
ZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1IoIkVycm9yICglaSkgcHJlcGFyaW5nIHN0YXRl
bWVudCB0byByZWFkIHRleHQgcmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwgcXVl
cnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJv
dykgeworICAgICAgICByZXN1bHRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0
RG9uZSkgeworICAgICAgICByZXN1bHRTdHJpbmcgPSBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgTE9HX0VSUk9SKCJFcnJvciAoJWkpIHJlYWRpbmcgdGV4dCBy
ZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMpIiwgcmVzdWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBzZXRUZXh0VmFsdWVJbkRhdGFi
YXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRiLCBxdWVyeSk7Cisg
ICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7CisKKyAgICBpZiAocmVzdWx0ICE9
IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3Rh
dGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFzZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRh
KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RhdGVtZW50LmJpbmRU
ZXh0KDEsIHZhbHVlKTsKKworICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgaWYg
KHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IHN0ZXAgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFzZSAoJXMpIiwgcXVlcnkuYXNj
aWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKKy8vIEZJWE1FOiBtb3ZlIGFsbCBndWlkLXJlbGF0ZWQgZnVuY3Rpb25zIHRv
IGEgRGF0YWJhc2VWZXJzaW9uVHJhY2tlciBjbGFzcy4KK3N0YXRpYyBNdXRleCYgZ3VpZE11dGV4
KCkKK3sKKyAgICBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMoTXV0ZXgmLCBtdXRleCA9ICpu
ZXcgTXV0ZXgpOworICAgIHJldHVybiBtdXRleDsKK30KKwordHlwZWRlZiBIYXNoTWFwPERhdGFi
YXNlR3VpZCwgU3RyaW5nPiBHdWlkVmVyc2lvbk1hcDsKK3N0YXRpYyBHdWlkVmVyc2lvbk1hcCYg
Z3VpZFRvVmVyc2lvbk1hcCgpCit7CisgICAgLy8gRW5zdXJlIHRoZSB0aGUgbXV0ZXggaXMgbG9j
a2VkLgorICAgIEFTU0VSVCghZ3VpZE11dGV4KCkudHJ5TG9jaygpKTsKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEd1aWRWZXJzaW9uTWFwLCBtYXAsICgpKTsKKyAgICByZXR1cm4gbWFwOworfQor
CisvLyBOT1RFOiBDYWxsZXIgbXVzdCBsb2NrIGd1aWRNdXRleCgpLgorc3RhdGljIGlubGluZSB2
b2lkIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKERhdGFiYXNlR3VpZCBndWlkLCBTdHJpbmcgbmV3VmVy
c2lvbikKK3sKKyAgICAvLyBFbnN1cmUgdGhlIHRoZSBtdXRleCBpcyBsb2NrZWQuCisgICAgQVNT
RVJUKCFndWlkTXV0ZXgoKS50cnlMb2NrKCkpOworCisgICAgLy8gTm90ZTogSXQgaXMgbm90IHNh
ZmUgdG8gcHV0IGFuIGVtcHR5IHN0cmluZyBpbnRvIHRoZSBndWlkVG9WZXJzaW9uTWFwKCkgbWFw
LgorICAgIC8vIFRoYXQncyBiZWNhdXNlIHRoZSBtYXAgaXMgY3Jvc3MtdGhyZWFkLCBidXQgZW1w
dHkgc3RyaW5ncyBhcmUgcGVyLXRocmVhZC4KKyAgICAvLyBUaGUgY29weSgpIGZ1bmN0aW9uIG1h
a2VzIGEgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHlvdSBjYW4gdXNlIG9uIHRoZSBjdXJyZW50Cisg
ICAgLy8gdGhyZWFkLCBidXQgd2UgbmVlZCBhIHN0cmluZyB3ZSBjYW4ga2VlcCBpbiBhIGNyb3Nz
LXRocmVhZCBkYXRhIHN0cnVjdHVyZS4KKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHF1aXRlLWF3
a3dhcmQgcmVzdHJpY3Rpb24gdG8gaGF2ZSB0byBwcm9ncmFtIHdpdGguCisKKyAgICAvLyBNYXAg
bnVsbCBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nIChzZWUgY29tbWVudCBhYm92ZSkuCisgICAgZ3Vp
ZFRvVmVyc2lvbk1hcCgpLnNldChndWlkLCBuZXdWZXJzaW9uLmlzRW1wdHkoKSA/IFN0cmluZygp
IDogbmV3VmVyc2lvbi5pc29sYXRlZENvcHkoKSk7Cit9CisKK3R5cGVkZWYgSGFzaE1hcDxEYXRh
YmFzZUd1aWQsIEhhc2hTZXQ8RGF0YWJhc2VCYWNrZW5kKj4qPiBHdWlkRGF0YWJhc2VNYXA7Citz
dGF0aWMgR3VpZERhdGFiYXNlTWFwJiBndWlkVG9EYXRhYmFzZU1hcCgpCit7CisgICAgLy8gRW5z
dXJlIHRoZSB0aGUgbXV0ZXggaXMgbG9ja2VkLgorICAgIEFTU0VSVCghZ3VpZE11dGV4KCkudHJ5
TG9jaygpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEd1aWREYXRhYmFzZU1hcCwgbWFwLCAo
KSk7CisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIERhdGFiYXNlR3VpZCBndWlkRm9yT3Jp
Z2luQW5kTmFtZShjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKQorewor
ICAgIC8vIEVuc3VyZSB0aGUgdGhlIG11dGV4IGlzIGxvY2tlZC4KKyAgICBBU1NFUlQoIWd1aWRN
dXRleCgpLnRyeUxvY2soKSk7CisKKyAgICBTdHJpbmcgc3RyaW5nSUQgPSBvcmlnaW4gKyAiLyIg
KyBuYW1lOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgaW50PiBJREd1aWRNYXA7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChJREd1aWRNYXAsIHN0cmluZ0lkZW50aWZpZXJUb0dVSURN
YXAsICgpKTsKKyAgICBEYXRhYmFzZUd1aWQgZ3VpZCA9IHN0cmluZ0lkZW50aWZpZXJUb0dVSURN
YXAuZ2V0KHN0cmluZ0lEKTsKKyAgICBpZiAoIWd1aWQpIHsKKyAgICAgICAgc3RhdGljIGludCBj
dXJyZW50TmV3R1VJRCA9IDE7CisgICAgICAgIGd1aWQgPSBjdXJyZW50TmV3R1VJRCsrOworICAg
ICAgICBzdHJpbmdJZGVudGlmaWVyVG9HVUlETWFwLnNldChzdHJpbmdJRCwgZ3VpZCk7CisgICAg
fQorCisgICAgcmV0dXJuIGd1aWQ7Cit9CisKKy8vIHN0YXRpYworY29uc3QgY2hhciogRGF0YWJh
c2VCYWNrZW5kOjpkYXRhYmFzZUluZm9UYWJsZU5hbWUoKQoreworICAgIHJldHVybiBpbmZvVGFi
bGVOYW1lOworfQorCitEYXRhYmFzZUJhY2tlbmQ6OkRhdGFiYXNlQmFja2VuZChQYXNzUmVmUHRy
PERhdGFiYXNlQmFja2VuZENvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKKyAgICBjb25zdCBTdHJpbmcmIGRp
c3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNlVHlwZSBkYXRh
YmFzZVR5cGUpCisgICAgOiBtX2RhdGFiYXNlQ29udGV4dChkYXRhYmFzZUNvbnRleHQpCisgICAg
LCBtX25hbWUobmFtZS5pc29sYXRlZENvcHkoKSkKKyAgICAsIG1fZXhwZWN0ZWRWZXJzaW9uKGV4
cGVjdGVkVmVyc2lvbi5pc29sYXRlZENvcHkoKSkKKyAgICAsIG1fZGlzcGxheU5hbWUoZGlzcGxh
eU5hbWUuaXNvbGF0ZWRDb3B5KCkpCisgICAgLCBtX2VzdGltYXRlZFNpemUoZXN0aW1hdGVkU2l6
ZSkKKyAgICAsIG1fZ3VpZCgwKQorICAgICwgbV9vcGVuZWQoZmFsc2UpCisgICAgLCBtX25ldyhm
YWxzZSkKKyAgICAsIG1faXNTeW5jRGF0YWJhc2UoZGF0YWJhc2VUeXBlID09IERhdGFiYXNlVHlw
ZTo6U3luYykKK3sKKyAgICBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbiA9IG1fZGF0YWJh
c2VDb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5pc29sYXRlZENvcHkoKTsKKworICAgIG1fZGF0
YWJhc2VBdXRob3JpemVyID0gRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGUoaW5mb1RhYmxlTmFt
ZSk7CisKKyAgICBpZiAobV9uYW1lLmlzTnVsbCgpKQorICAgICAgICBtX25hbWUgPSAiIjsKKwor
ICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKKyAgICAgICAg
bV9ndWlkID0gZ3VpZEZvck9yaWdpbkFuZE5hbWUoc2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmco
KSwgbmFtZSk7CisgICAgICAgIEhhc2hTZXQ8RGF0YWJhc2VCYWNrZW5kKj4qIGhhc2hTZXQgPSBn
dWlkVG9EYXRhYmFzZU1hcCgpLmdldChtX2d1aWQpOworICAgICAgICBpZiAoIWhhc2hTZXQpIHsK
KyAgICAgICAgICAgIGhhc2hTZXQgPSBuZXcgSGFzaFNldDxEYXRhYmFzZUJhY2tlbmQqPjsKKyAg
ICAgICAgICAgIGd1aWRUb0RhdGFiYXNlTWFwKCkuc2V0KG1fZ3VpZCwgaGFzaFNldCk7CisgICAg
ICAgIH0KKworICAgICAgICBoYXNoU2V0LT5hZGQodGhpcyk7CisgICAgfQorCisgICAgbV9maWxl
bmFtZSA9IERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmZ1bGxQYXRoRm9yRGF0YWJhc2Uoc2Vj
dXJpdHlPcmlnaW4oKSwgbV9uYW1lKTsKK30KKworRGF0YWJhc2VCYWNrZW5kOjp+RGF0YWJhc2VC
YWNrZW5kKCkKK3sKKyAgICAvLyBTUUxpdGUgaXMgIm11bHRpLXRocmVhZCBzYWZlIiwgYnV0IGVh
Y2ggZGF0YWJhc2UgaGFuZGxlIGNhbiBvbmx5IGJlIHVzZWQKKyAgICAvLyBvbiBhIHNpbmdsZSB0
aHJlYWQgYXQgYSB0aW1lLgorICAgIC8vCisgICAgLy8gRm9yIERhdGFiYXNlQmFja2VuZEFzeW5j
LCB3ZSBvcGVuIHRoZSBTUUxpdGUgZGF0YWJhc2Ugb24gdGhlIERhdGFiYXNlVGhyZWFkLAorICAg
IC8vIGFuZCBoZW5jZSB3ZSBzaG91bGQgYWxzbyBjbG9zZSBpdCBvbiB0aGF0IHNhbWUgdGhyZWFk
LiBUaGlzIG1lYW5zIHRoYXQgdGhlCisgICAgLy8gU1FMaXRlIGRhdGFiYXNlIG5lZWQgdG8gYmUg
Y2xvc2VkIGJ5IGFub3RoZXIgbWVjaGFuaXNtIChzZWUKKyAgICAvLyBEYXRhYmFzZUNvbnRleHQ6
OnN0b3BEYXRhYmFzZXMoKSkuIEJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLCB0aGUgU1FMaXRlCisg
ICAgLy8gZGF0YWJhc2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGNsb3NlZC4KKworICAgIEFT
U0VSVCghbV9vcGVuZWQpOworfQorCit2b2lkIERhdGFiYXNlQmFja2VuZDo6Y2xvc2VEYXRhYmFz
ZSgpCit7CisgICAgaWYgKCFtX29wZW5lZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zcWxp
dGVEYXRhYmFzZS5jbG9zZSgpOworICAgIG1fb3BlbmVkID0gZmFsc2U7CisgICAgLy8gU2VlIGNv
bW1lbnQgYXQgdGhlIHRvcCB0aGlzIGZpbGUgcmVnYXJkaW5nIGNhbGxpbmcgcmVtb3ZlT3BlbkRh
dGFiYXNlKCkuCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFi
YXNlKHRoaXMpOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgp
KTsKKworICAgICAgICBIYXNoU2V0PERhdGFiYXNlQmFja2VuZCo+KiBoYXNoU2V0ID0gZ3VpZFRv
RGF0YWJhc2VNYXAoKS5nZXQobV9ndWlkKTsKKyAgICAgICAgQVNTRVJUKGhhc2hTZXQpOworICAg
ICAgICBBU1NFUlQoaGFzaFNldC0+Y29udGFpbnModGhpcykpOworICAgICAgICBoYXNoU2V0LT5y
ZW1vdmUodGhpcyk7CisgICAgICAgIGlmIChoYXNoU2V0LT5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIGd1aWRUb0RhdGFiYXNlTWFwKCkucmVtb3ZlKG1fZ3VpZCk7CisgICAgICAgICAgICBkZWxl
dGUgaGFzaFNldDsKKyAgICAgICAgICAgIGd1aWRUb1ZlcnNpb25NYXAoKS5yZW1vdmUobV9ndWlk
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworU3RyaW5nIERhdGFiYXNlQmFja2VuZDo6dmVyc2lv
bigpIGNvbnN0Cit7CisgICAgLy8gTm90ZTogSW4gbXVsdGktcHJvY2VzcyBicm93c2VycyB0aGUg
Y2FjaGVkIHZhbHVlIG1heSBiZSBhY2N1cmF0ZSwgYnV0IHdlIGNhbm5vdCByZWFkIHRoZQorICAg
IC8vIGFjdHVhbCB2ZXJzaW9uIGZyb20gdGhlIGRhdGFiYXNlIHdpdGhvdXQgcG90ZW50aWFsbHkg
aW5kdWNpbmcgYSBkZWFkbG9jay4KKyAgICAvLyBGSVhNRTogQWRkIGFuIGFzeW5jIHZlcnNpb24g
Z2V0dGVyIHRvIHRoZSBEYXRhYmFzZUFQSS4KKyAgICByZXR1cm4gZ2V0Q2FjaGVkVmVyc2lvbigp
OworfQorCitjbGFzcyBEb25lQ3JlYXRpbmdEYXRhYmFzZU9uRXhpdENhbGxlciB7CitwdWJsaWM6
CisgICAgRG9uZUNyZWF0aW5nRGF0YWJhc2VPbkV4aXRDYWxsZXIoRGF0YWJhc2VCYWNrZW5kKiBk
YXRhYmFzZSkKKyAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgICAgICAsIG1fb3Bl
blN1Y2NlZWRlZChmYWxzZSkKKyAgICB7CisgICAgfQorICAgIH5Eb25lQ3JlYXRpbmdEYXRhYmFz
ZU9uRXhpdENhbGxlcigpCisgICAgeworI2lmICFQTEFURk9STShDSFJPTUlVTSkKKyAgICAgICAg
RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZG9uZUNyZWF0aW5nRGF0YWJhc2UobV9kYXRhYmFz
ZSk7CisjZWxzZQorICAgICAgICBpZiAoIW1fb3BlblN1Y2NlZWRlZCkKKyAgICAgICAgICAgIERh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmZhaWxlZFRvT3BlbkRhdGFiYXNlKG1fZGF0YWJhc2Up
OworI2VuZGlmICAgICAgICAgICAgCisgICAgfQorCisgICAgdm9pZCBzZXRPcGVuU3VjY2VlZGVk
KCkgeyBtX29wZW5TdWNjZWVkZWQgPSB0cnVlOyB9CisKK3ByaXZhdGU6CisgICAgRGF0YWJhc2VC
YWNrZW5kKiBtX2RhdGFiYXNlOworICAgIGJvb2wgbV9vcGVuU3VjY2VlZGVkOworfTsKKworYm9v
bCBEYXRhYmFzZUJhY2tlbmQ6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2hvdWxkU2V0VmVy
c2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImIGVycm9yLCBTdHJpbmcmIGVycm9yTWVz
c2FnZSkKK3sKKyAgICBEb25lQ3JlYXRpbmdEYXRhYmFzZU9uRXhpdENhbGxlciBvbkV4aXRDYWxs
ZXIodGhpcyk7CisgICAgQVNTRVJUKGVycm9yTWVzc2FnZS5pc0VtcHR5KCkpOworICAgIEFTU0VS
VChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpOb25lKTsgLy8gQmV0dGVyIG5vdCBoYXZlIGFueSBl
cnJvcnMgYWxyZWFkeS4KKyAgICBlcnJvciA9IERhdGFiYXNlRXJyb3I6OkludmFsaWREYXRhYmFz
ZVN0YXRlOyAvLyBQcmVzdW1lZCBmYWlsdXJlLiBXZSdsbCBjbGVhciBpdCBpZiB3ZSBzdWNjZWVk
IGJlbG93LgorCisgICAgY29uc3QgaW50IG1heFNxbGl0ZUJ1c3lXYWl0VGltZSA9IDMwMDAwOwor
CisgICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLm9wZW4obV9maWxlbmFtZSwgdHJ1ZSkpIHsKKyAg
ICAgICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDEsIElOVkFMSURfU1RBVEVfRVJSLCBtX3Nx
bGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpKTsKKyAgICAgICAgZXJyb3JNZXNzYWdlID0gZm9ybWF0
RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSIsIG1fc3FsaXRlRGF0YWJhc2Uu
bGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS50dXJuT25JbmNy
ZW1lbnRhbEF1dG9WYWN1dW0oKSkKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gdHVybiBv
biBpbmNyZW1lbnRhbCBhdXRvLXZhY3V1bSAoJWQgJXMpIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0
RXJyb3IoKSwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisKKyAgICBtX3NxbGl0
ZURhdGFiYXNlLnNldEJ1c3lUaW1lb3V0KG1heFNxbGl0ZUJ1c3lXYWl0VGltZSk7CisKKyAgICBT
dHJpbmcgY3VycmVudFZlcnNpb247CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
Z3VpZE11dGV4KCkpOworCisgICAgICAgIEd1aWRWZXJzaW9uTWFwOjppdGVyYXRvciBlbnRyeSA9
IGd1aWRUb1ZlcnNpb25NYXAoKS5maW5kKG1fZ3VpZCk7CisgICAgICAgIGlmIChlbnRyeSAhPSBn
dWlkVG9WZXJzaW9uTWFwKCkuZW5kKCkpIHsKKyAgICAgICAgICAgIC8vIE1hcCBudWxsIHN0cmlu
ZyB0byBlbXB0eSBzdHJpbmcgKHNlZSB1cGRhdGVHdWlkVmVyc2lvbk1hcCgpKS4KKyAgICAgICAg
ICAgIGN1cnJlbnRWZXJzaW9uID0gZW50cnktPnZhbHVlLmlzTnVsbCgpID8gZW1wdHlTdHJpbmco
KSA6IGVudHJ5LT52YWx1ZS5pc29sYXRlZENvcHkoKTsKKyAgICAgICAgICAgIExPRyhTdG9yYWdl
QVBJLCAiQ3VycmVudCBjYWNoZWQgdmVyc2lvbiBmb3IgZ3VpZCAlaSBpcyAlcyIsIG1fZ3VpZCwg
Y3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCkpOworCisjaWYgUExBVEZPUk0oQ0hST01JVU0p
CisgICAgICAgICAgICAvLyBOb3RlOiBJbiBtdWx0aS1wcm9jZXNzIGJyb3dzZXJzIHRoZSBjYWNo
ZWQgdmFsdWUgbWF5IGJlIGluYWNjdXJhdGUsIGJ1dAorICAgICAgICAgICAgLy8gd2UgY2Fubm90
IHJlYWQgdGhlIGFjdHVhbCB2ZXJzaW9uIGZyb20gdGhlIGRhdGFiYXNlIHdpdGhvdXQgcG90ZW50
aWFsbHkKKyAgICAgICAgICAgIC8vIGluZHVjaW5nIGEgZm9ybSBvZiBkZWFkbG9jaywgYSBidXN5
dGltZW91dCBlcnJvciB3aGVuIHRyeWluZyB0bworICAgICAgICAgICAgLy8gYWNjZXNzIHRoZSBk
YXRhYmFzZS4gU28gd2UnbGwgdXNlIHRoZSBjYWNoZWQgdmFsdWUgaWYgd2UncmUgdW5hYmxlIHRv
IHJlYWQKKyAgICAgICAgICAgIC8vIHRoZSB2YWx1ZSBmcm9tIHRoZSBkYXRhYmFzZSBmaWxlIHdp
dGhvdXQgd2FpdGluZy4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgYW4gYXN5bmMgb3BlbkRh
dGFiYXNlIG1ldGhvZCB0byB0aGUgRGF0YWJhc2VBUEkuCisgICAgICAgICAgICBjb25zdCBpbnQg
bm9TcWxpdGVCdXN5V2FpdFRpbWUgPSAwOworICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5z
ZXRCdXN5VGltZW91dChub1NxbGl0ZUJ1c3lXYWl0VGltZSk7CisgICAgICAgICAgICBTdHJpbmcg
dmVyc2lvbkZyb21EYXRhYmFzZTsKKyAgICAgICAgICAgIGlmIChnZXRWZXJzaW9uRnJvbURhdGFi
YXNlKHZlcnNpb25Gcm9tRGF0YWJhc2UsIGZhbHNlKSkgeworICAgICAgICAgICAgICAgIGN1cnJl
bnRWZXJzaW9uID0gdmVyc2lvbkZyb21EYXRhYmFzZTsKKyAgICAgICAgICAgICAgICB1cGRhdGVH
dWlkVmVyc2lvbk1hcChtX2d1aWQsIGN1cnJlbnRWZXJzaW9uKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QnVzeVRpbWVvdXQobWF4U3FsaXRlQnVzeVdh
aXRUaW1lKTsKKyNlbmRpZgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTE9HKFN0b3Jh
Z2VBUEksICJObyBjYWNoZWQgdmVyc2lvbiBmb3IgZ3VpZCAlaSIsIG1fZ3VpZCk7CisKKyAgICAg
ICAgICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fc3FsaXRlRGF0YWJhc2UpOwor
ICAgICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICAgICAgICAgIGlmICghdHJhbnNh
Y3Rpb24uaW5Qcm9ncmVzcygpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0T3BlbkRhdGFiYXNl
UmVzdWx0KDIsIElOVkFMSURfU1RBVEVfRVJSLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigp
KTsKKyAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UoInVu
YWJsZSB0byBvcGVuIGRhdGFiYXNlLCBmYWlsZWQgdG8gc3RhcnQgdHJhbnNhY3Rpb24iLCBtX3Nx
bGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdHJpbmcg
dGFibGVOYW1lKGluZm9UYWJsZU5hbWUpOworICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURhdGFi
YXNlLnRhYmxlRXhpc3RzKHRhYmxlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICBtX25ldyA9IHRy
dWU7CisKKyAgICAgICAgICAgICAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UuZXhlY3V0ZUNvbW1h
bmQoIkNSRUFURSBUQUJMRSAiICsgdGFibGVOYW1lICsgIiAoa2V5IFRFWFQgTk9UIE5VTEwgT04g
Q09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSx2YWx1ZSBURVhUIE5PVCBO
VUxMIE9OIENPTkZMSUNUIEZBSUwpOyIpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydE9w
ZW5EYXRhYmFzZVJlc3VsdCgzLCBJTlZBTElEX1NUQVRFX0VSUiwgbV9zcWxpdGVEYXRhYmFzZS5s
YXN0RXJyb3IoKSk7CisgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGZvcm1hdEVy
cm9yTWVzc2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0byBjcmVhdGUgJ2lu
Zm8nIHRhYmxlIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLnJvbGxi
YWNrKCk7CisgICAgICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIWdldFZlcnNpb25Gcm9tRGF0YWJhc2UoY3VycmVudFZlcnNpb24s
IGZhbHNlKSkgeworICAgICAgICAgICAgICAgIHJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdCg0LCBJ
TlZBTElEX1NUQVRFX0VSUiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSk7CisgICAgICAg
ICAgICAgICAgZXJyb3JNZXNzYWdlID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3Bl
biBkYXRhYmFzZSwgZmFpbGVkIHRvIHJlYWQgY3VycmVudCB2ZXJzaW9uIiwgbV9zcWxpdGVEYXRh
YmFzZS5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgICAgICAgICAgdHJhbnNhY3Rpb24ucm9sbGJhY2soKTsKKyAgICAgICAgICAgICAgICBtX3Nx
bGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY3VycmVudFZlcnNpb24ubGVuZ3RoKCkpIHsK
KyAgICAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlJldHJpZXZlZCBjdXJyZW50IHZlcnNp
b24gJXMgZnJvbSBkYXRhYmFzZSAlcyIsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBk
YXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIW1fbmV3IHx8IHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlKSB7CisgICAgICAgICAg
ICAgICAgTE9HKFN0b3JhZ2VBUEksICJTZXR0aW5nIHZlcnNpb24gJXMgaW4gZGF0YWJhc2UgJXMg
dGhhdCB3YXMganVzdCBjcmVhdGVkIiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCks
IGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgIGlm
ICghc2V0VmVyc2lvbkluRGF0YWJhc2UobV9leHBlY3RlZFZlcnNpb24sIGZhbHNlKSkgeworICAg
ICAgICAgICAgICAgICAgICByZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoNSwgSU5WQUxJRF9TVEFU
RV9FUlIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yKCkpOworICAgICAgICAgICAgICAgICAg
ICBlcnJvck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UoInVuYWJsZSB0byBvcGVuIGRhdGFi
YXNlLCBmYWlsZWQgdG8gd3JpdGUgY3VycmVudCB2ZXJzaW9uIiwgbV9zcWxpdGVEYXRhYmFzZS5s
YXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAg
ICAgICAgICAgIHRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgICAgIG1f
c3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IG1f
ZXhwZWN0ZWRWZXJzaW9uOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdXBkYXRlR3VpZFZl
cnNpb25NYXAobV9ndWlkLCBjdXJyZW50VmVyc2lvbik7CisgICAgICAgICAgICB0cmFuc2FjdGlv
bi5jb21taXQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjdXJyZW50VmVyc2lvbi5p
c051bGwoKSkgeworICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkRhdGFiYXNlICVzIGRvZXMgbm90
IGhhdmUgaXRzIHZlcnNpb24gc2V0IiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEo
KSk7CisgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gIiI7CisgICAgfQorCisgICAgLy8gSWYgdGhl
IGV4cGVjdGVkIHZlcnNpb24gaXNuJ3QgdGhlIGVtcHR5IHN0cmluZywgZW5zdXJlIHRoYXQgdGhl
IGN1cnJlbnQgZGF0YWJhc2UgdmVyc2lvbiB3ZSBoYXZlIG1hdGNoZXMgdGhhdCB2ZXJzaW9uLiBP
dGhlcndpc2UsIHNldCBhbiBleGNlcHRpb24uCisgICAgLy8gSWYgdGhlIGV4cGVjdGVkIHZlcnNp
b24gaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiB3ZSBhbHdheXMgcmV0dXJuIHdpdGggd2hhdGV2
ZXIgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2Ugd2UgaGF2ZS4KKyAgICBpZiAoKCFtX25ldyB8fCBz
aG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSkgJiYgbV9leHBlY3RlZFZlcnNpb24ubGVuZ3Ro
KCkgJiYgbV9leHBlY3RlZFZlcnNpb24gIT0gY3VycmVudFZlcnNpb24pIHsKKyAgICAgICAgcmVw
b3J0T3BlbkRhdGFiYXNlUmVzdWx0KDYsIElOVkFMSURfU1RBVEVfRVJSLCAwKTsKKyAgICAgICAg
ZXJyb3JNZXNzYWdlID0gInVuYWJsZSB0byBvcGVuIGRhdGFiYXNlLCB2ZXJzaW9uIG1pc21hdGNo
LCAnIiArIG1fZXhwZWN0ZWRWZXJzaW9uICsgIicgZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnRW
ZXJzaW9uIG9mICciICsgY3VycmVudFZlcnNpb24gKyAiJyI7CisgICAgICAgIG1fc3FsaXRlRGF0
YWJhc2UuY2xvc2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEFTU0VS
VChtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgbV9zcWxpdGVEYXRhYmFzZS5zZXRBdXRob3Jp
emVyKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKworICAgIC8vIFNlZSBjb21tZW50IGF0IHRoZSB0
b3AgdGhpcyBmaWxlIHJlZ2FyZGluZyBjYWxsaW5nIGFkZE9wZW5EYXRhYmFzZSgpLgorICAgIERh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmFkZE9wZW5EYXRhYmFzZSh0aGlzKTsKKyAgICBtX29w
ZW5lZCA9IHRydWU7CisKKyAgICAvLyBEZWNsYXJlIHN1Y2Nlc3M6CisgICAgZXJyb3IgPSBEYXRh
YmFzZUVycm9yOjpOb25lOyAvLyBDbGVhciB0aGUgcHJlc3VtZWQgZXJyb3IgZnJvbSBhYm92ZS4K
KyAgICBvbkV4aXRDYWxsZXIuc2V0T3BlblN1Y2NlZWRlZCgpOworCisgICAgaWYgKG1fbmV3ICYm
ICFzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSkKKyAgICAgICAgbV9leHBlY3RlZFZlcnNp
b24gPSAiIjsgLy8gVGhlIGNhbGxlciBwcm92aWRlZCBhIGNyZWF0aW9uQ2FsbGJhY2sgd2hpY2gg
d2lsbCBzZXQgdGhlIGV4cGVjdGVkIHZlcnNpb24uCisKKyAgICByZXBvcnRPcGVuRGF0YWJhc2VS
ZXN1bHQoMCwgLTEsIDApOyAvLyBPSworICAgIHJldHVybiB0cnVlOworfQorCitTZWN1cml0eU9y
aWdpbiogRGF0YWJhc2VCYWNrZW5kOjpzZWN1cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luLmdldCgpOworfQorCitTdHJpbmcgRGF0
YWJhc2VCYWNrZW5kOjpzdHJpbmdJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICAvLyBSZXR1cm4g
YSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5CisgICAgcmV0dXJuIG1f
bmFtZS5pc29sYXRlZENvcHkoKTsKK30KKworU3RyaW5nIERhdGFiYXNlQmFja2VuZDo6ZGlzcGxh
eU5hbWUoKSBjb25zdAoreworICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50
aW5nIHRocmVhZCBzYWZldHkKKyAgICByZXR1cm4gbV9kaXNwbGF5TmFtZS5pc29sYXRlZENvcHko
KTsKK30KKwordW5zaWduZWQgbG9uZyBEYXRhYmFzZUJhY2tlbmQ6OmVzdGltYXRlZFNpemUoKSBj
b25zdAoreworICAgIHJldHVybiBtX2VzdGltYXRlZFNpemU7Cit9CisKK1N0cmluZyBEYXRhYmFz
ZUJhY2tlbmQ6OmZpbGVOYW1lKCkgY29uc3QKK3sKKyAgICAvLyBSZXR1cm4gYSBkZWVwIGNvcHkg
Zm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5CisgICAgcmV0dXJuIG1fZmlsZW5hbWUuaXNv
bGF0ZWRDb3B5KCk7Cit9CisKK0RhdGFiYXNlRGV0YWlscyBEYXRhYmFzZUJhY2tlbmQ6OmRldGFp
bHMoKSBjb25zdAoreworICAgIHJldHVybiBEYXRhYmFzZURldGFpbHMoc3RyaW5nSWRlbnRpZmll
cigpLCBkaXNwbGF5TmFtZSgpLCBlc3RpbWF0ZWRTaXplKCksIDApOworfQorCitib29sIERhdGFi
YXNlQmFja2VuZDo6Z2V0VmVyc2lvbkZyb21EYXRhYmFzZShTdHJpbmcmIHZlcnNpb24sIGJvb2wg
c2hvdWxkQ2FjaGVWZXJzaW9uKQoreworICAgIFN0cmluZyBxdWVyeShTdHJpbmcoIlNFTEVDVCB2
YWx1ZSBGUk9NICIpICsgaW5mb1RhYmxlTmFtZSArICAiIFdIRVJFIGtleSA9ICciICsgdmVyc2lv
bktleSArICInOyIpOworCisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKKwor
ICAgIGJvb2wgcmVzdWx0ID0gcmV0cmlldmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKG1fc3FsaXRl
RGF0YWJhc2UsIHF1ZXJ5LCB2ZXJzaW9uKTsKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIGlm
IChzaG91bGRDYWNoZVZlcnNpb24pCisgICAgICAgICAgICBzZXRDYWNoZWRWZXJzaW9uKHZlcnNp
b24pOworICAgIH0gZWxzZQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSB2
ZXJzaW9uIGZyb20gZGF0YWJhc2UgJXMiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0
YSgpKTsKKworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2Jvb2wgRGF0YWJhc2VCYWNrZW5kOjpzZXRWZXJzaW9uSW5EYXRhYmFz
ZShjb25zdCBTdHJpbmcmIHZlcnNpb24sIGJvb2wgc2hvdWxkQ2FjaGVWZXJzaW9uKQoreworICAg
IC8vIFRoZSBJTlNFUlQgd2lsbCByZXBsYWNlIGFuIGV4aXN0aW5nIGVudHJ5IGZvciB0aGUgZGF0
YWJhc2Ugd2l0aCB0aGUgbmV3IHZlcnNpb24gbnVtYmVyLCBkdWUgdG8gdGhlIFVOSVFVRSBPTiBD
T05GTElDVCBSRVBMQUNFCisgICAgLy8gY2xhdXNlIGluIHRoZSBDUkVBVEUgc3RhdGVtZW50IChz
ZWUgRGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkpLgorICAgIFN0cmluZyBxdWVyeShT
dHJpbmcoIklOU0VSVCBJTlRPICIpICsgaW5mb1RhYmxlTmFtZSArICAiIChrZXksIHZhbHVlKSBW
QUxVRVMgKCciICsgdmVyc2lvbktleSArICInLCA/KTsiKTsKKworICAgIG1fZGF0YWJhc2VBdXRo
b3JpemVyLT5kaXNhYmxlKCk7CisKKyAgICBib29sIHJlc3VsdCA9IHNldFRleHRWYWx1ZUluRGF0
YWJhc2UobV9zcWxpdGVEYXRhYmFzZSwgcXVlcnksIHZlcnNpb24pOworICAgIGlmIChyZXN1bHQp
IHsKKyAgICAgICAgaWYgKHNob3VsZENhY2hlVmVyc2lvbikKKyAgICAgICAgICAgIHNldENhY2hl
ZFZlcnNpb24odmVyc2lvbik7CisgICAgfSBlbHNlCisgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHNldCB2ZXJzaW9uICVzIGluIGRhdGFiYXNlICglcykiLCB2ZXJzaW9uLmFzY2lpKCkuZGF0
YSgpLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+
ZW5hYmxlKCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIERhdGFiYXNlQmFja2Vu
ZDo6c2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK3sKKyAgICBtX2V4
cGVjdGVkVmVyc2lvbiA9IHZlcnNpb24uaXNvbGF0ZWRDb3B5KCk7Cit9CisKK1N0cmluZyBEYXRh
YmFzZUJhY2tlbmQ6OmdldENhY2hlZFZlcnNpb24oKSBjb25zdAoreworICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihndWlkTXV0ZXgoKSk7CisgICAgcmV0dXJuIGd1aWRUb1ZlcnNpb25NYXAoKS5nZXQo
bV9ndWlkKS5pc29sYXRlZENvcHkoKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmQ6OnNldENh
Y2hlZFZlcnNpb24oY29uc3QgU3RyaW5nJiBhY3R1YWxWZXJzaW9uKQoreworICAgIC8vIFVwZGF0
ZSB0aGUgaW4gbWVtb3J5IGRhdGFiYXNlIHZlcnNpb24gbWFwLgorICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihndWlkTXV0ZXgoKSk7CisgICAgdXBkYXRlR3VpZFZlcnNpb25NYXAobV9ndWlkLCBhY3R1
YWxWZXJzaW9uKTsKK30KKworYm9vbCBEYXRhYmFzZUJhY2tlbmQ6OmdldEFjdHVhbFZlcnNpb25G
b3JUcmFuc2FjdGlvbihTdHJpbmcgJmFjdHVhbFZlcnNpb24pCit7CisgICAgQVNTRVJUKG1fc3Fs
aXRlRGF0YWJhc2UudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworI2lmIFBMQVRGT1JNKENIUk9N
SVVNKQorICAgIC8vIE5vdGU6IEluIG11bHRpLXByb2Nlc3MgYnJvd3NlcnMgdGhlIGNhY2hlZCB2
YWx1ZSBtYXkgYmUgaW5hY2N1cmF0ZS4KKyAgICAvLyBTbyB3ZSByZXRyaWV2ZSB0aGUgdmFsdWUg
ZnJvbSB0aGUgZGF0YWJhc2UgYW5kIHVwZGF0ZSB0aGUgY2FjaGVkIHZhbHVlIGhlcmUuCisgICAg
cmV0dXJuIGdldFZlcnNpb25Gcm9tRGF0YWJhc2UoYWN0dWFsVmVyc2lvbiwgdHJ1ZSk7CisjZWxz
ZQorICAgIGFjdHVhbFZlcnNpb24gPSBnZXRDYWNoZWRWZXJzaW9uKCk7CisgICAgcmV0dXJuIHRy
dWU7CisjZW5kaWYKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmQ6OmRpc2FibGVBdXRob3JpemVy
KCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fZGF0YWJhc2VB
dXRob3JpemVyLT5kaXNhYmxlKCk7Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kOjplbmFibGVB
dXRob3JpemVyKCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1f
ZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmQ6
OnNldEF1dGhvcml6ZXJSZWFkT25seSgpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3Jp
emVyKTsKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+c2V0UmVhZE9ubHkoKTsKK30KKwordm9p
ZCBEYXRhYmFzZUJhY2tlbmQ6OnNldEF1dGhvcml6ZXJQZXJtaXNzaW9ucyhpbnQgcGVybWlzc2lv
bnMpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX2RhdGFiYXNl
QXV0aG9yaXplci0+c2V0UGVybWlzc2lvbnMocGVybWlzc2lvbnMpOworfQorCitib29sIERhdGFi
YXNlQmFja2VuZDo6bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpCit7CisgICAgQVNTRVJUKG1f
ZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmxh
c3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKTsKK30KKworYm9vbCBEYXRhYmFzZUJhY2tlbmQ6Omxh
c3RBY3Rpb25XYXNJbnNlcnQoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7
CisgICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5sYXN0QWN0aW9uV2FzSW5zZXJ0KCk7
Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kOjpyZXNldERlbGV0ZXMoKQoreworICAgIEFTU0VS
VChtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0
RGVsZXRlcygpOworfQorCitib29sIERhdGFiYXNlQmFja2VuZDo6aGFkRGVsZXRlcygpCit7Cisg
ICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICByZXR1cm4gbV9kYXRhYmFzZUF1
dGhvcml6ZXItPmhhZERlbGV0ZXMoKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmQ6OnJlc2V0
QXV0aG9yaXplcigpCit7CisgICAgaWYgKG1fZGF0YWJhc2VBdXRob3JpemVyKQorICAgICAgICBt
X2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXQoKTsKK30KKwordW5zaWduZWQgbG9uZyBsb25nIERh
dGFiYXNlQmFja2VuZDo6bWF4aW11bVNpemUoKSBjb25zdAoreworICAgIHJldHVybiBEYXRhYmFz
ZU1hbmFnZXI6Om1hbmFnZXIoKS5nZXRNYXhTaXplRm9yRGF0YWJhc2UodGhpcyk7Cit9CisKK3Zv
aWQgRGF0YWJhc2VCYWNrZW5kOjppbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCkKK3sKKyAgICBp
bnQ2NF90IGZyZWVTcGFjZVNpemUgPSBtX3NxbGl0ZURhdGFiYXNlLmZyZWVTcGFjZVNpemUoKTsK
KyAgICBpbnQ2NF90IHRvdGFsU2l6ZSA9IG1fc3FsaXRlRGF0YWJhc2UudG90YWxTaXplKCk7Cisg
ICAgaWYgKHRvdGFsU2l6ZSA8PSAxMCAqIGZyZWVTcGFjZVNpemUpIHsKKyAgICAgICAgaW50IHJl
c3VsdCA9IG1fc3FsaXRlRGF0YWJhc2UucnVuSW5jcmVtZW50YWxWYWN1dW1Db21tYW5kKCk7Cisg
ICAgICAgIHJlcG9ydFZhY3V1bURhdGFiYXNlUmVzdWx0KHJlc3VsdCk7CisgICAgICAgIGlmIChy
ZXN1bHQgIT0gU1FMUmVzdWx0T2spCisgICAgICAgICAgICBtX2Zyb250ZW5kLT5sb2dFcnJvck1l
c3NhZ2UoZm9ybWF0RXJyb3JNZXNzYWdlKCJlcnJvciB2YWN1dW1pbmcgZGF0YWJhc2UiLCByZXN1
bHQsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpKTsKKyAgICB9Cit9CisKK3ZvaWQg
RGF0YWJhc2VCYWNrZW5kOjppbnRlcnJ1cHQoKQoreworICAgIG1fc3FsaXRlRGF0YWJhc2UuaW50
ZXJydXB0KCk7Cit9CisKK2Jvb2wgRGF0YWJhc2VCYWNrZW5kOjppc0ludGVycnVwdGVkKCkKK3sK
KyAgICBNdXRleExvY2tlciBsb2NrZXIobV9zcWxpdGVEYXRhYmFzZS5kYXRhYmFzZU11dGV4KCkp
OworICAgIHJldHVybiBtX3NxbGl0ZURhdGFiYXNlLmlzSW50ZXJydXB0ZWQoKTsKK30KKworI2lm
IFBMQVRGT1JNKENIUk9NSVVNKQorLy8gVGhlc2UgYXJlIHVzZWQgdG8gZ2VuZXJhdGUgaGlzdG9n
cmFtcyBvZiBlcnJvcnMgc2VlbiB3aXRoIHdlYnNxbC4KKy8vIFNlZSBhYm91dDpoaXN0b2dyYW1z
IGluIGNocm9taXVtLgordm9pZCBEYXRhYmFzZUJhY2tlbmQ6OnJlcG9ydE9wZW5EYXRhYmFzZVJl
c3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JD
b2RlKQoreworICAgIERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdCh0
aGlzLCBlcnJvclNpdGUsIHdlYlNxbEVycm9yQ29kZSwgc3FsaXRlRXJyb3JDb2RlKTsKK30KKwor
dm9pZCBEYXRhYmFzZUJhY2tlbmQ6OnJlcG9ydENoYW5nZVZlcnNpb25SZXN1bHQoaW50IGVycm9y
U2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSkKK3sKKyAgICBE
YXRhYmFzZU9ic2VydmVyOjpyZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0KHRoaXMsIGVycm9yU2l0
ZSwgd2ViU3FsRXJyb3JDb2RlLCBzcWxpdGVFcnJvckNvZGUpOworfQorCit2b2lkIERhdGFiYXNl
QmFja2VuZDo6cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQg
d2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKQoreworICAgIERhdGFiYXNlT2Jz
ZXJ2ZXI6OnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQodGhpcywgZXJyb3JTaXRlLCB3ZWJT
cWxFcnJvckNvZGUsIHNxbGl0ZUVycm9yQ29kZSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5k
OjpyZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3Fs
RXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKQoreworICAgIERhdGFiYXNlT2JzZXJ2ZXI6
OnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KHRoaXMsIGVycm9yU2l0ZSwgd2ViU3FsRXJy
b3JDb2RlLCBzcWxpdGVFcnJvckNvZGUpOworfQorCit2b2lkIERhdGFiYXNlQmFja2VuZDo6cmVw
b3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JD
b2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKQoreworICAgIERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9y
dEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQodGhpcywgZXJyb3JTaXRlLCB3ZWJTcWxFcnJvckNvZGUs
IHNxbGl0ZUVycm9yQ29kZSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kOjpyZXBvcnRWYWN1
dW1EYXRhYmFzZVJlc3VsdChpbnQgc3FsaXRlRXJyb3JDb2RlKQoreworICAgIERhdGFiYXNlT2Jz
ZXJ2ZXI6OnJlcG9ydFZhY3V1bURhdGFiYXNlUmVzdWx0KHRoaXMsIHNxbGl0ZUVycm9yQ29kZSk7
Cit9CisKKyNlbmRpZiAvLyBQTEFURk9STShDSFJPTUlVTSkKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRC
YXNlLmNwcAkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyAr
MjgsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEYXRhYmFzZUJh
Y2tlbmQuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRCYXNlLmgiCiAKICNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQogCkBAIC03NCwxMyArNzQsMTMgQEAKIC8vIFRoZSBvbmx5IGRhdGFiYXNl
cyBpbnN0YW5jZXMgbm90IHRyYWNrZWQgYnkgdGhlIHRyYWNrZXIncyBvcGVuIGRhdGFiYXNlCiAv
LyBsaXN0IGFyZSB0aGUgb25lcyB0aGF0IGhhdmUgbm90IGJlZW4gYWRkZWQgeWV0LCBvciB0aGUg
b25lcyB0aGF0IHdlCiAvLyBhdHRlbXB0ZWQgYW4gb3BlbiBvbiBidXQgZmFpbGVkIHRvLiBTdWNo
IGluc3RhbmNlcyBvbmx5IGV4aXN0IGluIHRoZQotLy8gRGF0YWJhc2VTZXJ2ZXIncyBmYWN0b3J5
IG1ldGhvZHMgZm9yIGNyZWF0aW5nIERhdGFiYXNlQmFja2VuZHMuCisvLyBEYXRhYmFzZVNlcnZl
cidzIGZhY3RvcnkgbWV0aG9kcyBmb3IgY3JlYXRpbmcgZGF0YWJhc2UgYmFja2VuZHMuCiAvLwog
Ly8gVGhlIGZhY3RvcnkgbWV0aG9kcyB3aWxsIGVpdGhlciBjYWxsIG9wZW5BbmRWZXJpZnlWZXJz
aW9uKCkgb3IKIC8vIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkuIFRoZXNlIG1ldGhvZHMgd2lsbCBh
ZGQgdGhlIG5ld2x5IGluc3RhbnRpYXRlZAotLy8gRGF0YWJhc2VCYWNrZW5kIGlmIHRoZXkgc3Vj
Y2VlZCBpbiBvcGVuaW5nIHRoZSByZXF1ZXN0ZWQgZGF0YWJhc2UuCisvLyBkYXRhYmFzZSBiYWNr
ZW5kIGlmIHRoZXkgc3VjY2VlZCBpbiBvcGVuaW5nIHRoZSByZXF1ZXN0ZWQgZGF0YWJhc2UuCiAv
LyBJbiB0aGUgY2FzZSBvZiBmYWlsdXJlIHRvIG9wZW4gdGhlIGRhdGFiYXNlLCB0aGUgZmFjdG9y
eSBtZXRob2RzIHdpbGwKLS8vIHNpbXBseSBkaXNjYXJkIHRoZSBuZXdseSBpbnN0YW50aWF0ZWQg
RGF0YWJhc2VCYWNrZW5kIHdoZW4gdGhleSByZXR1cm4uCisvLyBzaW1wbHkgZGlzY2FyZCB0aGUg
bmV3bHkgaW5zdGFudGlhdGVkIGRhdGFiYXNlIGJhY2tlbmQgd2hlbiB0aGV5IHJldHVybi4KIC8v
IFRoZSByZWYgY291bnRpbmcgbWVjaGFuaW1zIHdpbGwgYXV0b21hdGljYWxseSBkZXN0cnVjdCB0
aGUgdW4tYWRkZWQKIC8vIChhbmQgdW4tcmV0dXJuZWQpIGRhdGFiYXNlcyBpbnN0YW5jZXMuCiAK
QEAgLTE3MSw3ICsxNzEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlR3VpZFZlcnNpb25N
YXAoCiAgICAgZ3VpZFRvVmVyc2lvbk1hcCgpLnNldChndWlkLCBuZXdWZXJzaW9uLmlzRW1wdHko
KSA/IFN0cmluZygpIDogbmV3VmVyc2lvbi5pc29sYXRlZENvcHkoKSk7CiB9CiAKLXR5cGVkZWYg
SGFzaE1hcDxEYXRhYmFzZUd1aWQsIEhhc2hTZXQ8RGF0YWJhc2VCYWNrZW5kKj4qPiBHdWlkRGF0
YWJhc2VNYXA7Cit0eXBlZGVmIEhhc2hNYXA8RGF0YWJhc2VHdWlkLCBIYXNoU2V0PERhdGFiYXNl
QmFja2VuZEJhc2UqPio+IEd1aWREYXRhYmFzZU1hcDsKIHN0YXRpYyBHdWlkRGF0YWJhc2VNYXAm
IGd1aWRUb0RhdGFiYXNlTWFwKCkKIHsKICAgICAvLyBFbnN1cmUgdGhlIHRoZSBtdXRleCBpcyBs
b2NrZWQuCkBAIC0yMDAsMTMgKzIwMCwxMyBAQCBzdGF0aWMgRGF0YWJhc2VHdWlkIGd1aWRGb3JP
cmlnaW5BbmROYW1lCiB9CiAKIC8vIHN0YXRpYwotY29uc3QgY2hhciogRGF0YWJhc2VCYWNrZW5k
OjpkYXRhYmFzZUluZm9UYWJsZU5hbWUoKQorY29uc3QgY2hhciogRGF0YWJhc2VCYWNrZW5kQmFz
ZTo6ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkKIHsKICAgICByZXR1cm4gaW5mb1RhYmxlTmFtZTsK
IH0KIAotRGF0YWJhc2VCYWNrZW5kOjpEYXRhYmFzZUJhY2tlbmQoUGFzc1JlZlB0cjxEYXRhYmFz
ZUJhY2tlbmRDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCi0gICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBEYXRhYmFzZVR5cGUgZGF0YWJhc2VUeXBl
KQorRGF0YWJhc2VCYWNrZW5kQmFzZTo6RGF0YWJhc2VCYWNrZW5kQmFzZShQYXNzUmVmUHRyPERh
dGFiYXNlQmFja2VuZENvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1l
LAorICAgIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3Bs
YXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIERhdGFiYXNlVHlwZSBkYXRhYmFz
ZVR5cGUpCiAgICAgOiBtX2RhdGFiYXNlQ29udGV4dChkYXRhYmFzZUNvbnRleHQpCiAgICAgLCBt
X25hbWUobmFtZS5pc29sYXRlZENvcHkoKSkKICAgICAsIG1fZXhwZWN0ZWRWZXJzaW9uKGV4cGVj
dGVkVmVyc2lvbi5pc29sYXRlZENvcHkoKSkKQEAgLTIyNyw5ICsyMjcsOSBAQCBEYXRhYmFzZUJh
Y2tlbmQ6OkRhdGFiYXNlQmFja2VuZChQYXNzUmVmCiAgICAgewogICAgICAgICBNdXRleExvY2tl
ciBsb2NrZXIoZ3VpZE11dGV4KCkpOwogICAgICAgICBtX2d1aWQgPSBndWlkRm9yT3JpZ2luQW5k
TmFtZShzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBuYW1lKTsKLSAgICAgICAgSGFzaFNl
dDxEYXRhYmFzZUJhY2tlbmQqPiogaGFzaFNldCA9IGd1aWRUb0RhdGFiYXNlTWFwKCkuZ2V0KG1f
Z3VpZCk7CisgICAgICAgIEhhc2hTZXQ8RGF0YWJhc2VCYWNrZW5kQmFzZSo+KiBoYXNoU2V0ID0g
Z3VpZFRvRGF0YWJhc2VNYXAoKS5nZXQobV9ndWlkKTsKICAgICAgICAgaWYgKCFoYXNoU2V0KSB7
Ci0gICAgICAgICAgICBoYXNoU2V0ID0gbmV3IEhhc2hTZXQ8RGF0YWJhc2VCYWNrZW5kKj47Cisg
ICAgICAgICAgICBoYXNoU2V0ID0gbmV3IEhhc2hTZXQ8RGF0YWJhc2VCYWNrZW5kQmFzZSo+Owog
ICAgICAgICAgICAgZ3VpZFRvRGF0YWJhc2VNYXAoKS5zZXQobV9ndWlkLCBoYXNoU2V0KTsKICAg
ICAgICAgfQogCkBAIC0yMzksNyArMjM5LDcgQEAgRGF0YWJhc2VCYWNrZW5kOjpEYXRhYmFzZUJh
Y2tlbmQoUGFzc1JlZgogICAgIG1fZmlsZW5hbWUgPSBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIo
KS5mdWxsUGF0aEZvckRhdGFiYXNlKHNlY3VyaXR5T3JpZ2luKCksIG1fbmFtZSk7CiB9CiAKLURh
dGFiYXNlQmFja2VuZDo6fkRhdGFiYXNlQmFja2VuZCgpCitEYXRhYmFzZUJhY2tlbmRCYXNlOjp+
RGF0YWJhc2VCYWNrZW5kQmFzZSgpCiB7CiAgICAgLy8gU1FMaXRlIGlzICJtdWx0aS10aHJlYWQg
c2FmZSIsIGJ1dCBlYWNoIGRhdGFiYXNlIGhhbmRsZSBjYW4gb25seSBiZSB1c2VkCiAgICAgLy8g
b24gYSBzaW5nbGUgdGhyZWFkIGF0IGEgdGltZS4KQEAgLTI1Myw3ICsyNTMsNyBAQCBEYXRhYmFz
ZUJhY2tlbmQ6On5EYXRhYmFzZUJhY2tlbmQoKQogICAgIEFTU0VSVCghbV9vcGVuZWQpOwogfQog
Ci12b2lkIERhdGFiYXNlQmFja2VuZDo6Y2xvc2VEYXRhYmFzZSgpCit2b2lkIERhdGFiYXNlQmFj
a2VuZEJhc2U6OmNsb3NlRGF0YWJhc2UoKQogewogICAgIGlmICghbV9vcGVuZWQpCiAgICAgICAg
IHJldHVybjsKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIERhdGFiYXNlQmFja2VuZDo6Y2xvc2VE
YXRhYmFzZSgpCiAgICAgewogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkp
OwogCi0gICAgICAgIEhhc2hTZXQ8RGF0YWJhc2VCYWNrZW5kKj4qIGhhc2hTZXQgPSBndWlkVG9E
YXRhYmFzZU1hcCgpLmdldChtX2d1aWQpOworICAgICAgICBIYXNoU2V0PERhdGFiYXNlQmFja2Vu
ZEJhc2UqPiogaGFzaFNldCA9IGd1aWRUb0RhdGFiYXNlTWFwKCkuZ2V0KG1fZ3VpZCk7CiAgICAg
ICAgIEFTU0VSVChoYXNoU2V0KTsKICAgICAgICAgQVNTRVJUKGhhc2hTZXQtPmNvbnRhaW5zKHRo
aXMpKTsKICAgICAgICAgaGFzaFNldC0+cmVtb3ZlKHRoaXMpOwpAQCAtMjc3LDcgKzI3Nyw3IEBA
IHZvaWQgRGF0YWJhc2VCYWNrZW5kOjpjbG9zZURhdGFiYXNlKCkKICAgICB9CiB9CiAKLVN0cmlu
ZyBEYXRhYmFzZUJhY2tlbmQ6OnZlcnNpb24oKSBjb25zdAorU3RyaW5nIERhdGFiYXNlQmFja2Vu
ZEJhc2U6OnZlcnNpb24oKSBjb25zdAogewogICAgIC8vIE5vdGU6IEluIG11bHRpLXByb2Nlc3Mg
YnJvd3NlcnMgdGhlIGNhY2hlZCB2YWx1ZSBtYXkgYmUgYWNjdXJhdGUsIGJ1dCB3ZSBjYW5ub3Qg
cmVhZCB0aGUKICAgICAvLyBhY3R1YWwgdmVyc2lvbiBmcm9tIHRoZSBkYXRhYmFzZSB3aXRob3V0
IHBvdGVudGlhbGx5IGluZHVjaW5nIGEgZGVhZGxvY2suCkBAIC0yODcsNyArMjg3LDcgQEAgU3Ry
aW5nIERhdGFiYXNlQmFja2VuZDo6dmVyc2lvbigpIGNvbnN0CiAKIGNsYXNzIERvbmVDcmVhdGlu
Z0RhdGFiYXNlT25FeGl0Q2FsbGVyIHsKIHB1YmxpYzoKLSAgICBEb25lQ3JlYXRpbmdEYXRhYmFz
ZU9uRXhpdENhbGxlcihEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQorICAgIERvbmVDcmVhdGlu
Z0RhdGFiYXNlT25FeGl0Q2FsbGVyKERhdGFiYXNlQmFja2VuZEJhc2UqIGRhdGFiYXNlKQogICAg
ICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCiAgICAgICAgICwgbV9vcGVuU3VjY2VlZGVkKGZh
bHNlKQogICAgIHsKQEAgLTMwNSwxMSArMzA1LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE9w
ZW5TdWNjZWVkZWQoKSB7IG1fb3BlblN1Y2NlZWRlZCA9IHRydWU7IH0KIAogcHJpdmF0ZToKLSAg
ICBEYXRhYmFzZUJhY2tlbmQqIG1fZGF0YWJhc2U7CisgICAgRGF0YWJhc2VCYWNrZW5kQmFzZSog
bV9kYXRhYmFzZTsKICAgICBib29sIG1fb3BlblN1Y2NlZWRlZDsKIH07CiAKLWJvb2wgRGF0YWJh
c2VCYWNrZW5kOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiBlcnJvciwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiti
b29sIERhdGFiYXNlQmFja2VuZEJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2hvdWxk
U2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImIGVycm9yLCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSkKIHsKICAgICBEb25lQ3JlYXRpbmdEYXRhYmFzZU9uRXhpdENhbGxlciBvbkV4
aXRDYWxsZXIodGhpcyk7CiAgICAgQVNTRVJUKGVycm9yTWVzc2FnZS5pc0VtcHR5KCkpOwpAQCAt
NDM1LDQwICs0MzUsNDAgQEAgYm9vbCBEYXRhYmFzZUJhY2tlbmQ6OnBlcmZvcm1PcGVuQW5kVmVy
aQogICAgIHJldHVybiB0cnVlOwogfQogCi1TZWN1cml0eU9yaWdpbiogRGF0YWJhc2VCYWNrZW5k
OjpzZWN1cml0eU9yaWdpbigpIGNvbnN0CitTZWN1cml0eU9yaWdpbiogRGF0YWJhc2VCYWNrZW5k
QmFzZTo6c2VjdXJpdHlPcmlnaW4oKSBjb25zdAogewogICAgIHJldHVybiBtX2NvbnRleHRUaHJl
YWRTZWN1cml0eU9yaWdpbi5nZXQoKTsKIH0KIAotU3RyaW5nIERhdGFiYXNlQmFja2VuZDo6c3Ry
aW5nSWRlbnRpZmllcigpIGNvbnN0CitTdHJpbmcgRGF0YWJhc2VCYWNrZW5kQmFzZTo6c3RyaW5n
SWRlbnRpZmllcigpIGNvbnN0CiB7CiAgICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYg
Y291bnRpbmcgdGhyZWFkIHNhZmV0eQogICAgIHJldHVybiBtX25hbWUuaXNvbGF0ZWRDb3B5KCk7
CiB9CiAKLVN0cmluZyBEYXRhYmFzZUJhY2tlbmQ6OmRpc3BsYXlOYW1lKCkgY29uc3QKK1N0cmlu
ZyBEYXRhYmFzZUJhY2tlbmRCYXNlOjpkaXNwbGF5TmFtZSgpIGNvbnN0CiB7CiAgICAgLy8gUmV0
dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcgdGhyZWFkIHNhZmV0eQogICAgIHJldHVy
biBtX2Rpc3BsYXlOYW1lLmlzb2xhdGVkQ29weSgpOwogfQogCi11bnNpZ25lZCBsb25nIERhdGFi
YXNlQmFja2VuZDo6ZXN0aW1hdGVkU2l6ZSgpIGNvbnN0Cit1bnNpZ25lZCBsb25nIERhdGFiYXNl
QmFja2VuZEJhc2U6OmVzdGltYXRlZFNpemUoKSBjb25zdAogewogICAgIHJldHVybiBtX2VzdGlt
YXRlZFNpemU7CiB9CiAKLVN0cmluZyBEYXRhYmFzZUJhY2tlbmQ6OmZpbGVOYW1lKCkgY29uc3QK
K1N0cmluZyBEYXRhYmFzZUJhY2tlbmRCYXNlOjpmaWxlTmFtZSgpIGNvbnN0CiB7CiAgICAgLy8g
UmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcgdGhyZWFkIHNhZmV0eQogICAgIHJl
dHVybiBtX2ZpbGVuYW1lLmlzb2xhdGVkQ29weSgpOwogfQogCi1EYXRhYmFzZURldGFpbHMgRGF0
YWJhc2VCYWNrZW5kOjpkZXRhaWxzKCkgY29uc3QKK0RhdGFiYXNlRGV0YWlscyBEYXRhYmFzZUJh
Y2tlbmRCYXNlOjpkZXRhaWxzKCkgY29uc3QKIHsKICAgICByZXR1cm4gRGF0YWJhc2VEZXRhaWxz
KHN0cmluZ0lkZW50aWZpZXIoKSwgZGlzcGxheU5hbWUoKSwgZXN0aW1hdGVkU2l6ZSgpLCAwKTsK
IH0KIAotYm9vbCBEYXRhYmFzZUJhY2tlbmQ6OmdldFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5n
JiB2ZXJzaW9uLCBib29sIHNob3VsZENhY2hlVmVyc2lvbikKK2Jvb2wgRGF0YWJhc2VCYWNrZW5k
QmFzZTo6Z2V0VmVyc2lvbkZyb21EYXRhYmFzZShTdHJpbmcmIHZlcnNpb24sIGJvb2wgc2hvdWxk
Q2FjaGVWZXJzaW9uKQogewogICAgIFN0cmluZyBxdWVyeShTdHJpbmcoIlNFTEVDVCB2YWx1ZSBG
Uk9NICIpICsgaW5mb1RhYmxlTmFtZSArICAiIFdIRVJFIGtleSA9ICciICsgdmVyc2lvbktleSAr
ICInOyIpOwogCkBAIC00ODYsNyArNDg2LDcgQEAgYm9vbCBEYXRhYmFzZUJhY2tlbmQ6OmdldFZl
cnNpb25Gcm9tRGF0YQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgRGF0YWJhc2VCYWNr
ZW5kOjpzZXRWZXJzaW9uSW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIHZlcnNpb24sIGJvb2wgc2hv
dWxkQ2FjaGVWZXJzaW9uKQorYm9vbCBEYXRhYmFzZUJhY2tlbmRCYXNlOjpzZXRWZXJzaW9uSW5E
YXRhYmFzZShjb25zdCBTdHJpbmcmIHZlcnNpb24sIGJvb2wgc2hvdWxkQ2FjaGVWZXJzaW9uKQog
ewogICAgIC8vIFRoZSBJTlNFUlQgd2lsbCByZXBsYWNlIGFuIGV4aXN0aW5nIGVudHJ5IGZvciB0
aGUgZGF0YWJhc2Ugd2l0aCB0aGUgbmV3IHZlcnNpb24gbnVtYmVyLCBkdWUgdG8gdGhlIFVOSVFV
RSBPTiBDT05GTElDVCBSRVBMQUNFCiAgICAgLy8gY2xhdXNlIGluIHRoZSBDUkVBVEUgc3RhdGVt
ZW50IChzZWUgRGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkpLgpAQCAtNTA2LDI1ICs1
MDYsMjUgQEAgYm9vbCBEYXRhYmFzZUJhY2tlbmQ6OnNldFZlcnNpb25JbkRhdGFiYQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kOjpzZXRFeHBlY3RlZFZlcnNp
b24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQordm9pZCBEYXRhYmFzZUJhY2tlbmRCYXNlOjpzZXRF
eHBlY3RlZFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQogewogICAgIG1fZXhwZWN0ZWRW
ZXJzaW9uID0gdmVyc2lvbi5pc29sYXRlZENvcHkoKTsKIH0KIAotU3RyaW5nIERhdGFiYXNlQmFj
a2VuZDo6Z2V0Q2FjaGVkVmVyc2lvbigpIGNvbnN0CitTdHJpbmcgRGF0YWJhc2VCYWNrZW5kQmFz
ZTo6Z2V0Q2FjaGVkVmVyc2lvbigpIGNvbnN0CiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1
aWRNdXRleCgpKTsKICAgICByZXR1cm4gZ3VpZFRvVmVyc2lvbk1hcCgpLmdldChtX2d1aWQpLmlz
b2xhdGVkQ29weSgpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZDo6c2V0Q2FjaGVkVmVyc2lv
bihjb25zdCBTdHJpbmcmIGFjdHVhbFZlcnNpb24pCit2b2lkIERhdGFiYXNlQmFja2VuZEJhc2U6
OnNldENhY2hlZFZlcnNpb24oY29uc3QgU3RyaW5nJiBhY3R1YWxWZXJzaW9uKQogewogICAgIC8v
IFVwZGF0ZSB0aGUgaW4gbWVtb3J5IGRhdGFiYXNlIHZlcnNpb24gbWFwLgogICAgIE11dGV4TG9j
a2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7CiAgICAgdXBkYXRlR3VpZFZlcnNpb25NYXAobV9ndWlk
LCBhY3R1YWxWZXJzaW9uKTsKIH0KIAotYm9vbCBEYXRhYmFzZUJhY2tlbmQ6OmdldEFjdHVhbFZl
cnNpb25Gb3JUcmFuc2FjdGlvbihTdHJpbmcgJmFjdHVhbFZlcnNpb24pCitib29sIERhdGFiYXNl
QmFja2VuZEJhc2U6OmdldEFjdHVhbFZlcnNpb25Gb3JUcmFuc2FjdGlvbihTdHJpbmcgJmFjdHVh
bFZlcnNpb24pCiB7CiAgICAgQVNTRVJUKG1fc3FsaXRlRGF0YWJhc2UudHJhbnNhY3Rpb25JblBy
b2dyZXNzKCkpOwogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQpAQCAtNTM3LDY2ICs1MzcsNjYgQEAg
Ym9vbCBEYXRhYmFzZUJhY2tlbmQ6OmdldEFjdHVhbFZlcnNpb25GbwogI2VuZGlmCiB9CiAKLXZv
aWQgRGF0YWJhc2VCYWNrZW5kOjpkaXNhYmxlQXV0aG9yaXplcigpCit2b2lkIERhdGFiYXNlQmFj
a2VuZEJhc2U6OmRpc2FibGVBdXRob3JpemVyKCkKIHsKICAgICBBU1NFUlQobV9kYXRhYmFzZUF1
dGhvcml6ZXIpOwogICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxlKCk7CiB9CiAKLXZv
aWQgRGF0YWJhc2VCYWNrZW5kOjplbmFibGVBdXRob3JpemVyKCkKK3ZvaWQgRGF0YWJhc2VCYWNr
ZW5kQmFzZTo6ZW5hYmxlQXV0aG9yaXplcigpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRo
b3JpemVyKTsKICAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZW5hYmxlKCk7CiB9CiAKLXZvaWQg
RGF0YWJhc2VCYWNrZW5kOjpzZXRBdXRob3JpemVyUmVhZE9ubHkoKQordm9pZCBEYXRhYmFzZUJh
Y2tlbmRCYXNlOjpzZXRBdXRob3JpemVyUmVhZE9ubHkoKQogewogICAgIEFTU0VSVChtX2RhdGFi
YXNlQXV0aG9yaXplcik7CiAgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnNldFJlYWRPbmx5KCk7
CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kOjpzZXRBdXRob3JpemVyUGVybWlzc2lvbnMoaW50
IHBlcm1pc3Npb25zKQordm9pZCBEYXRhYmFzZUJhY2tlbmRCYXNlOjpzZXRBdXRob3JpemVyUGVy
bWlzc2lvbnMoaW50IHBlcm1pc3Npb25zKQogewogICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9y
aXplcik7CiAgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnNldFBlcm1pc3Npb25zKHBlcm1pc3Np
b25zKTsKIH0KIAotYm9vbCBEYXRhYmFzZUJhY2tlbmQ6Omxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJh
c2UoKQorYm9vbCBEYXRhYmFzZUJhY2tlbmRCYXNlOjpsYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNl
KCkKIHsKICAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwogICAgIHJldHVybiBtX2Rh
dGFiYXNlQXV0aG9yaXplci0+bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpOwogfQogCi1ib29s
IERhdGFiYXNlQmFja2VuZDo6bGFzdEFjdGlvbldhc0luc2VydCgpCitib29sIERhdGFiYXNlQmFj
a2VuZEJhc2U6Omxhc3RBY3Rpb25XYXNJbnNlcnQoKQogewogICAgIEFTU0VSVChtX2RhdGFiYXNl
QXV0aG9yaXplcik7CiAgICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5sYXN0QWN0aW9u
V2FzSW5zZXJ0KCk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kOjpyZXNldERlbGV0ZXMoKQor
dm9pZCBEYXRhYmFzZUJhY2tlbmRCYXNlOjpyZXNldERlbGV0ZXMoKQogewogICAgIEFTU0VSVCht
X2RhdGFiYXNlQXV0aG9yaXplcik7CiAgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0RGVs
ZXRlcygpOwogfQogCi1ib29sIERhdGFiYXNlQmFja2VuZDo6aGFkRGVsZXRlcygpCitib29sIERh
dGFiYXNlQmFja2VuZEJhc2U6OmhhZERlbGV0ZXMoKQogewogICAgIEFTU0VSVChtX2RhdGFiYXNl
QXV0aG9yaXplcik7CiAgICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5oYWREZWxldGVz
KCk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kOjpyZXNldEF1dGhvcml6ZXIoKQordm9pZCBE
YXRhYmFzZUJhY2tlbmRCYXNlOjpyZXNldEF1dGhvcml6ZXIoKQogewogICAgIGlmIChtX2RhdGFi
YXNlQXV0aG9yaXplcikKICAgICAgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0KCk7CiB9
CiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZUJhY2tlbmQ6Om1heGltdW1TaXplKCkgY29u
c3QKK3Vuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZUJhY2tlbmRCYXNlOjptYXhpbXVtU2l6ZSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIERhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmdldE1heFNp
emVGb3JEYXRhYmFzZSh0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmQ6OmluY3JlbWVu
dGFsVmFjdXVtSWZOZWVkZWQoKQordm9pZCBEYXRhYmFzZUJhY2tlbmRCYXNlOjppbmNyZW1lbnRh
bFZhY3V1bUlmTmVlZGVkKCkKIHsKICAgICBpbnQ2NF90IGZyZWVTcGFjZVNpemUgPSBtX3NxbGl0
ZURhdGFiYXNlLmZyZWVTcGFjZVNpemUoKTsKICAgICBpbnQ2NF90IHRvdGFsU2l6ZSA9IG1fc3Fs
aXRlRGF0YWJhc2UudG90YWxTaXplKCk7CkBAIC02MDgsMTIgKzYwOCwxMiBAQCB2b2lkIERhdGFi
YXNlQmFja2VuZDo6aW5jcmVtZW50YWxWYWN1dW1JCiAgICAgfQogfQogCi12b2lkIERhdGFiYXNl
QmFja2VuZDo6aW50ZXJydXB0KCkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kQmFzZTo6aW50ZXJydXB0
KCkKIHsKICAgICBtX3NxbGl0ZURhdGFiYXNlLmludGVycnVwdCgpOwogfQogCi1ib29sIERhdGFi
YXNlQmFja2VuZDo6aXNJbnRlcnJ1cHRlZCgpCitib29sIERhdGFiYXNlQmFja2VuZEJhc2U6Omlz
SW50ZXJydXB0ZWQoKQogewogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3NxbGl0ZURhdGFiYXNl
LmRhdGFiYXNlTXV0ZXgoKSk7CiAgICAgcmV0dXJuIG1fc3FsaXRlRGF0YWJhc2UuaXNJbnRlcnJ1
cHRlZCgpOwpAQCAtNjIyLDMyICs2MjIsMzIgQEAgYm9vbCBEYXRhYmFzZUJhY2tlbmQ6OmlzSW50
ZXJydXB0ZWQoKQogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQogLy8gVGhlc2UgYXJlIHVzZWQgdG8g
Z2VuZXJhdGUgaGlzdG9ncmFtcyBvZiBlcnJvcnMgc2VlbiB3aXRoIHdlYnNxbC4KIC8vIFNlZSBh
Ym91dDpoaXN0b2dyYW1zIGluIGNocm9taXVtLgotdm9pZCBEYXRhYmFzZUJhY2tlbmQ6OnJlcG9y
dE9wZW5EYXRhYmFzZVJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBp
bnQgc3FsaXRlRXJyb3JDb2RlKQordm9pZCBEYXRhYmFzZUJhY2tlbmRCYXNlOjpyZXBvcnRPcGVu
RGF0YWJhc2VSZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNx
bGl0ZUVycm9yQ29kZSkKIHsKICAgICBEYXRhYmFzZU9ic2VydmVyOjpyZXBvcnRPcGVuRGF0YWJh
c2VSZXN1bHQodGhpcywgZXJyb3JTaXRlLCB3ZWJTcWxFcnJvckNvZGUsIHNxbGl0ZUVycm9yQ29k
ZSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kOjpyZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0
KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUp
Cit2b2lkIERhdGFiYXNlQmFja2VuZEJhc2U6OnJlcG9ydENoYW5nZVZlcnNpb25SZXN1bHQoaW50
IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSkKIHsK
ICAgICBEYXRhYmFzZU9ic2VydmVyOjpyZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0KHRoaXMsIGVy
cm9yU2l0ZSwgd2ViU3FsRXJyb3JDb2RlLCBzcWxpdGVFcnJvckNvZGUpOwogfQogCi12b2lkIERh
dGFiYXNlQmFja2VuZDo6cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdChpbnQgZXJyb3JTaXRl
LCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKQordm9pZCBEYXRhYmFz
ZUJhY2tlbmRCYXNlOjpyZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KGludCBlcnJvclNpdGUs
IGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpCiB7CiAgICAgRGF0YWJh
c2VPYnNlcnZlcjo6cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdCh0aGlzLCBlcnJvclNpdGUs
IHdlYlNxbEVycm9yQ29kZSwgc3FsaXRlRXJyb3JDb2RlKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJh
Y2tlbmQ6OnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3
ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpCit2b2lkIERhdGFiYXNlQmFja2Vu
ZEJhc2U6OnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3
ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpCiB7CiAgICAgRGF0YWJhc2VPYnNl
cnZlcjo6cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQodGhpcywgZXJyb3JTaXRlLCB3ZWJT
cWxFcnJvckNvZGUsIHNxbGl0ZUVycm9yQ29kZSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5k
OjpyZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxF
cnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpCit2b2lkIERhdGFiYXNlQmFja2VuZEJhc2U6
OnJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVy
cm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSkKIHsKICAgICBEYXRhYmFzZU9ic2VydmVyOjpy
ZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KHRoaXMsIGVycm9yU2l0ZSwgd2ViU3FsRXJyb3JD
b2RlLCBzcWxpdGVFcnJvckNvZGUpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZDo6cmVwb3J0
VmFjdXVtRGF0YWJhc2VSZXN1bHQoaW50IHNxbGl0ZUVycm9yQ29kZSkKK3ZvaWQgRGF0YWJhc2VC
YWNrZW5kQmFzZTo6cmVwb3J0VmFjdXVtRGF0YWJhc2VSZXN1bHQoaW50IHNxbGl0ZUVycm9yQ29k
ZSkKIHsKICAgICBEYXRhYmFzZU9ic2VydmVyOjpyZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3VsdCh0
aGlzLCBzcWxpdGVFcnJvckNvZGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRCYXNlLmgJKHJldmlzaW9u
IDE0MzQyNikJKGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZUJhY2tlbmQuaDoxNDM0MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlQmFja2VuZEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIERhdGFiYXNlQmFja2VuZF9oCisjZGVmaW5lIERhdGFiYXNlQmFja2VuZF9oCisKKyNp
ZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiRGF0YWJhc2VCYXNpY1R5cGVzLmgi
CisjaW5jbHVkZSAiRGF0YWJhc2VEZXRhaWxzLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VFcnJvci5o
IgorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiAhTE9HX0RJU0FC
TEVEIHx8ICFFUlJPUl9ESVNBQkxFRAorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRhYmFzZUF1dGhvcml6ZXI7Citj
bGFzcyBEYXRhYmFzZUJhY2tlbmRDb250ZXh0OworY2xhc3MgRGF0YWJhc2VCYXNlOworY2xhc3Mg
U2VjdXJpdHlPcmlnaW47CisKK2NsYXNzIERhdGFiYXNlQmFja2VuZCA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxEYXRhYmFzZUJhY2tlbmQ+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5E
YXRhYmFzZUJhY2tlbmQoKTsKKworICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBjb25zdDsK
KworICAgIGJvb2wgb3BlbmVkKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuZWQ7IH0KKyAgICBib29s
IGlzTmV3KCkgY29uc3QgeyByZXR1cm4gbV9uZXc7IH0KKyAgICBib29sIGlzU3luY0RhdGFiYXNl
KCkgY29uc3QgeyByZXR1cm4gbV9pc1N5bmNEYXRhYmFzZTsgfQorCisgICAgdmlydHVhbCBTZWN1
cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBz
dHJpbmdJZGVudGlmaWVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgZGlzcGxheU5hbWUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBEYXRh
YmFzZURldGFpbHMgZGV0YWlscygpIGNvbnN0OworICAgIFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVE
YXRhYmFzZSgpIHsgcmV0dXJuIG1fc3FsaXRlRGF0YWJhc2U7IH0KKworICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyBtYXhpbXVtU2l6ZSgpIGNvbnN0OworICAgIHZvaWQgaW5jcmVtZW50YWxWYWN1dW1J
Zk5lZWRlZCgpOworICAgIHZvaWQgaW50ZXJydXB0KCk7CisgICAgYm9vbCBpc0ludGVycnVwdGVk
KCk7CisKKyAgICB2b2lkIGRpc2FibGVBdXRob3JpemVyKCk7CisgICAgdm9pZCBlbmFibGVBdXRo
b3JpemVyKCk7CisgICAgdm9pZCBzZXRBdXRob3JpemVyUmVhZE9ubHkoKTsKKyAgICB2b2lkIHNl
dEF1dGhvcml6ZXJQZXJtaXNzaW9ucyhpbnQgcGVybWlzc2lvbnMpOworICAgIGJvb2wgbGFzdEFj
dGlvbkNoYW5nZWREYXRhYmFzZSgpOworICAgIGJvb2wgbGFzdEFjdGlvbldhc0luc2VydCgpOwor
ICAgIHZvaWQgcmVzZXREZWxldGVzKCk7CisgICAgYm9vbCBoYWREZWxldGVzKCk7CisgICAgdm9p
ZCByZXNldEF1dGhvcml6ZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBtYXJrQXNEZWxldGVkQW5k
Q2xvc2UoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlSW1tZWRpYXRlbHkoKSA9IDA7CisK
KyAgICBEYXRhYmFzZUJhY2tlbmRDb250ZXh0KiBkYXRhYmFzZUNvbnRleHQoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGFiYXNlQ29udGV4dC5nZXQoKTsgfQorICAgIHZvaWQgc2V0RnJvbnRlbmQoRGF0
YWJhc2VCYXNlKiBmcm9udGVuZCkgeyBtX2Zyb250ZW5kID0gZnJvbnRlbmQ7IH0KKworcHJvdGVj
dGVkOgorICAgIGZyaWVuZCBjbGFzcyBDaGFuZ2VWZXJzaW9uV3JhcHBlcjsKKyAgICBmcmllbmQg
Y2xhc3MgU1FMU3RhdGVtZW50QmFja2VuZDsKKyAgICBmcmllbmQgY2xhc3MgU1FMU3RhdGVtZW50
U3luYzsKKyAgICBmcmllbmQgY2xhc3MgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOworICAgIGZyaWVu
ZCBjbGFzcyBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jOworCisgICAgRGF0YWJhc2VCYWNrZW5k
KFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4sIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCisgICAgICAgIGNvbnN0IFN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VUeXBlKTsKKwor
ICAgIHZvaWQgY2xvc2VEYXRhYmFzZSgpOworCisgICAgdmlydHVhbCBib29sIG9wZW5BbmRWZXJp
ZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBT
dHJpbmcmIGVycm9yTWVzc2FnZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFu
ZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9y
JiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOworCisgICAgYm9vbCBnZXRWZXJzaW9uRnJvbURhdGFi
YXNlKFN0cmluZyYgdmVyc2lvbiwgYm9vbCBzaG91bGRDYWNoZVZlcnNpb24gPSB0cnVlKTsKKyAg
ICBib29sIHNldFZlcnNpb25JbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgYm9vbCBz
aG91bGRDYWNoZVZlcnNpb24gPSB0cnVlKTsKKyAgICB2b2lkIHNldEV4cGVjdGVkVmVyc2lvbihj
b25zdCBTdHJpbmcmKTsKKyAgICBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbigpIGNvbnN0
IHsgcmV0dXJuIG1fZXhwZWN0ZWRWZXJzaW9uOyB9CisgICAgU3RyaW5nIGdldENhY2hlZFZlcnNp
b24oKWNvbnN0OworICAgIHZvaWQgc2V0Q2FjaGVkVmVyc2lvbihjb25zdCBTdHJpbmcmKTsKKyAg
ICBib29sIGdldEFjdHVhbFZlcnNpb25Gb3JUcmFuc2FjdGlvbihTdHJpbmcmIHZlcnNpb24pOwor
CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgdm9pZCByZXBvcnRPcGVuRGF0YWJhc2VSZXN1
bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29k
ZSk7CisgICAgdm9pZCByZXBvcnRDaGFuZ2VWZXJzaW9uUmVzdWx0KGludCBlcnJvclNpdGUsIGlu
dCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOworICAgIHZvaWQgcmVwb3J0
U3RhcnRUcmFuc2FjdGlvblJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2Rl
LCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsKKyAgICB2b2lkIHJlcG9ydENvbW1pdFRyYW5zYWN0aW9u
UmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJv
ckNvZGUpOworICAgIHZvaWQgcmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdChpbnQgZXJyb3JT
aXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsKKyAgICB2b2lk
IHJlcG9ydFZhY3V1bURhdGFiYXNlUmVzdWx0KGludCBzcWxpdGVFcnJvckNvZGUpOworI2Vsc2UK
KyAgICB2b2lkIHJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdChpbnQsIGludCwgaW50KSB7IH0KKyAg
ICB2b2lkIHJlcG9ydENoYW5nZVZlcnNpb25SZXN1bHQoaW50LCBpbnQsIGludCkgeyB9CisgICAg
dm9pZCByZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KGludCwgaW50LCBpbnQpIHsgfQorICAg
IHZvaWQgcmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoaW50LCBpbnQsIGludCkgeyB9Cisg
ICAgdm9pZCByZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KGludCwgaW50LCBpbnQpIHsgfQor
ICAgIHZvaWQgcmVwb3J0VmFjdXVtRGF0YWJhc2VSZXN1bHQoaW50KSB7IH0KKyNlbmRpZgorCisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpOworCisgICAgUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbjsKKyAgICBS
ZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4gbV9kYXRhYmFzZUNvbnRleHQ7IC8vIEFzc29j
aWF0ZWQgd2l0aCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisKKyAgICBTdHJpbmcgbV9uYW1l
OworICAgIFN0cmluZyBtX2V4cGVjdGVkVmVyc2lvbjsKKyAgICBTdHJpbmcgbV9kaXNwbGF5TmFt
ZTsKKyAgICB1bnNpZ25lZCBsb25nIG1fZXN0aW1hdGVkU2l6ZTsKKyAgICBTdHJpbmcgbV9maWxl
bmFtZTsKKworICAgIERhdGFiYXNlQmFzZSogbV9mcm9udGVuZDsKKworI2lmICFMT0dfRElTQUJM
RUQgfHwgIUVSUk9SX0RJU0FCTEVECisgICAgU3RyaW5nIGRhdGFiYXNlRGVidWdOYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4tPnRvU3RyaW5nKCkgKyAi
OjoiICsgbV9uYW1lOyB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBEYXRhYmFzZUd1aWQgbV9n
dWlkOworICAgIGJvb2wgbV9vcGVuZWQ7CisgICAgYm9vbCBtX25ldzsKKyAgICBjb25zdCBib29s
IG1faXNTeW5jRGF0YWJhc2U7CisKKyAgICBTUUxpdGVEYXRhYmFzZSBtX3NxbGl0ZURhdGFiYXNl
OworCisgICAgUmVmUHRyPERhdGFiYXNlQXV0aG9yaXplcj4gbV9kYXRhYmFzZUF1dGhvcml6ZXI7
CisKKyAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VTZXJ2ZXI7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjZW5kaWYgLy8g
RGF0YWJhc2VCYWNrZW5kX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VCYWNrZW5kQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQmFzZS5oCShyZXZpc2lvbiAxNDM0MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEJh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
Ci0jaWZuZGVmIERhdGFiYXNlQmFja2VuZF9oCi0jZGVmaW5lIERhdGFiYXNlQmFja2VuZF9oCisj
aWZuZGVmIERhdGFiYXNlQmFja2VuZEJhc2VfaAorI2RlZmluZSBEYXRhYmFzZUJhY2tlbmRCYXNl
X2gKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKQEAgLTUyLDkgKzUyLDkgQEAgY2xhc3Mg
RGF0YWJhc2VCYWNrZW5kQ29udGV4dDsKIGNsYXNzIERhdGFiYXNlQmFzZTsKIGNsYXNzIFNlY3Vy
aXR5T3JpZ2luOwogCi1jbGFzcyBEYXRhYmFzZUJhY2tlbmQgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8RGF0YWJhc2VCYWNrZW5kPiB7CitjbGFzcyBEYXRhYmFzZUJhY2tlbmRCYXNlIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERhdGFiYXNlQmFja2VuZEJhc2U+IHsKIHB1Ymxp
YzoKLSAgICB2aXJ0dWFsIH5EYXRhYmFzZUJhY2tlbmQoKTsKKyAgICB2aXJ0dWFsIH5EYXRhYmFz
ZUJhY2tlbmRCYXNlKCk7CiAKICAgICB2aXJ0dWFsIFN0cmluZyB2ZXJzaW9uKCkgY29uc3Q7CiAK
QEAgLTk4LDcgKzk4LDcgQEAgcHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyBTUUxUcmFuc2Fj
dGlvbkJhY2tlbmQ7CiAgICAgZnJpZW5kIGNsYXNzIFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmM7
CiAKLSAgICBEYXRhYmFzZUJhY2tlbmQoUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0
PiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKKyAg
ICBEYXRhYmFzZUJhY2tlbmRCYXNlKFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4s
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCiAgICAg
ICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSwgRGF0YWJhc2VUeXBlKTsKIAogICAgIHZvaWQgY2xvc2VEYXRhYmFzZSgpOwpAQCAtMTY0LDQg
KzE2NCw0IEBAIHByaXZhdGU6CiAKICNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCi0j
ZW5kaWYgLy8gRGF0YWJhc2VCYWNrZW5kX2gKKyNlbmRpZiAvLyBEYXRhYmFzZUJhY2tlbmRCYXNl
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNr
ZW5kU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZUJhY2tlbmRTeW5jLmNwcAkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRTeW5jLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBEYXRh
YmFzZUJhY2tlbmRTeW5jOjpEYXRhYmFzZUJhY2tlbmRTeW5jKFBhc3NSZWZQdHI8RGF0YWJhc2VC
YWNrZW5kQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNp
Z25lZCBsb25nIGVzdGltYXRlZFNpemUpCi0gICAgOiBEYXRhYmFzZUJhY2tlbmQoZGF0YWJhc2VD
b250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXpl
LCBEYXRhYmFzZVR5cGU6OlN5bmMpCisgICAgOiBEYXRhYmFzZUJhY2tlbmRCYXNlKGRhdGFiYXNl
Q29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6
ZSwgRGF0YWJhc2VUeXBlOjpTeW5jKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZFN5bmMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZFN5bmMuaAkocmV2
aXNpb24gMTQzNDI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZUJhY2tlbmRTeW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lm
IEVOQUJMRShTUUxfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmQuaCIKKyNp
bmNsdWRlICJEYXRhYmFzZUJhY2tlbmRCYXNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgRGF0
YWJhc2VTZXJ2ZXI7CiAvLyBEYXRhYmFzZUJhY2tlbmRTeW5jIHRvIGRvIHNvIGJlZm9yZSB0aGUg
cHJvcGVyIGJhY2tlbmQgc3BsaXQgaXMKIC8vIGF2YWlsYWJsZS4gVGhpcyBzaG91bGQgYmUgcmVw
bGFjZWQgd2l0aCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGxhdGVyLgogCi1jbGFzcyBEYXRh
YmFzZUJhY2tlbmRTeW5jIDogcHVibGljIERhdGFiYXNlQmFja2VuZCB7CitjbGFzcyBEYXRhYmFz
ZUJhY2tlbmRTeW5jIDogcHVibGljIERhdGFiYXNlQmFja2VuZEJhc2UgewogcHVibGljOgogICAg
IHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZFN5bmMoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFzZS5oCShyZXZpc2lvbiAxNDM0
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoU1FMX0RBVEFC
QVNFKQogCi0jaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAko
cmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBACiAKICNp
bmNsdWRlICJBYnN0cmFjdERhdGFiYXNlU2VydmVyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIK
LSNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmQuaCIKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRB
c3luYy5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZEJhc2UuaCIKICNpbmNsdWRlICJEYXRh
YmFzZUJhY2tlbmRDb250ZXh0LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kU3luYy5oIgog
I2luY2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKQEAgLTIyNyw3ICsyMjcsNyBAQCBzdGF0aWMg
dm9pZCBsb2dPcGVuRGF0YWJhc2VFcnJvcihTY3JpcHRFCiAgICAgICAgIGNvbnRleHQtPnNlY3Vy
aXR5T3JpZ2luKCktPnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogfQogCi1QYXNzUmVmUHRy
PERhdGFiYXNlQmFja2VuZD4gRGF0YWJhc2VNYW5hZ2VyOjpvcGVuRGF0YWJhc2VCYWNrZW5kKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCitQYXNzUmVmUHRyPERhdGFiYXNlQmFja2Vu
ZEJhc2U+IERhdGFiYXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlQmFja2VuZChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LAogICAgIERhdGFiYXNlVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3Bs
YXlOYW1lLAogICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgYm9vbCBzZXRWZXJzaW9u
SW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYgZXJyb3IsIFN0cmluZyYgZXJyb3JNZXNzYWdl
KQogewpAQCAtMjM2LDcgKzIzNiw3IEBAIFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBEYXRh
YmFzZU1hbmEKICAgICBSZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQgPSBk
YXRhYmFzZUNvbnRleHRGb3IoY29udGV4dCk7CiAgICAgUmVmUHRyPERhdGFiYXNlQmFja2VuZENv
bnRleHQ+IGJhY2tlbmRDb250ZXh0ID0gZGF0YWJhc2VDb250ZXh0LT5iYWNrZW5kKCk7CiAKLSAg
ICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBiYWNrZW5kID0gbV9zZXJ2ZXItPm9wZW5EYXRhYmFz
ZShiYWNrZW5kQ29udGV4dCwgdHlwZSwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLAorICAgIFJlZlB0
cjxEYXRhYmFzZUJhY2tlbmRCYXNlPiBiYWNrZW5kID0gbV9zZXJ2ZXItPm9wZW5EYXRhYmFzZShi
YWNrZW5kQ29udGV4dCwgdHlwZSwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICBkaXNw
bGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVycm9yLCBl
cnJvck1lc3NhZ2UpOwogCiAgICAgaWYgKCFiYWNrZW5kKSB7CkBAIC0yOTcsNyArMjk3LDcgQEAg
UGFzc1JlZlB0cjxEYXRhYmFzZT4gRGF0YWJhc2VNYW5hZ2VyOjpvcAogCiAgICAgYm9vbCBzZXRW
ZXJzaW9uSW5OZXdEYXRhYmFzZSA9ICFjcmVhdGlvbkNhbGxiYWNrOwogICAgIFN0cmluZyBlcnJv
ck1lc3NhZ2U7Ci0gICAgUmVmUHRyPERhdGFiYXNlQmFja2VuZD4gYmFja2VuZCA9IG9wZW5EYXRh
YmFzZUJhY2tlbmQoY29udGV4dCwgRGF0YWJhc2VUeXBlOjpBc3luYywgbmFtZSwKKyAgICBSZWZQ
dHI8RGF0YWJhc2VCYWNrZW5kQmFzZT4gYmFja2VuZCA9IG9wZW5EYXRhYmFzZUJhY2tlbmQoY29u
dGV4dCwgRGF0YWJhc2VUeXBlOjpBc3luYywgbmFtZSwKICAgICAgICAgZXhwZWN0ZWRWZXJzaW9u
LCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGVy
cm9yLCBlcnJvck1lc3NhZ2UpOwogICAgIGlmICghYmFja2VuZCkKICAgICAgICAgcmV0dXJuIDA7
CkBAIC0zMjYsNyArMzI2LDcgQEAgUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IERhdGFiYXNlTWFu
YWdlcgogCiAgICAgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSA9ICFjcmVhdGlvbkNhbGxi
YWNrOwogICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgUmVmUHRyPERhdGFiYXNlQmFja2Vu
ZD4gYmFja2VuZCA9IG9wZW5EYXRhYmFzZUJhY2tlbmQoY29udGV4dCwgRGF0YWJhc2VUeXBlOjpT
eW5jLCBuYW1lLAorICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRCYXNlPiBiYWNrZW5kID0gb3Bl
bkRhdGFiYXNlQmFja2VuZChjb250ZXh0LCBEYXRhYmFzZVR5cGU6OlN5bmMsIG5hbWUsCiAgICAg
ICAgIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIHNldFZlcnNp
b25Jbk5ld0RhdGFiYXNlLCBlcnJvciwgZXJyb3JNZXNzYWdlKTsKICAgICBpZiAoIWJhY2tlbmQp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtNDI4LDcgKzQyOCw3IEBAIHZvaWQgRGF0YWJhc2VNYW5h
Z2VyOjppbnRlcnJ1cHRBbGxEYXRhYmEKICAgICAgICAgbV9zZXJ2ZXItPmludGVycnVwdEFsbERh
dGFiYXNlc0ZvckNvbnRleHQoZGF0YWJhc2VDb250ZXh0LT5iYWNrZW5kKCkuZ2V0KCkpOwogfQog
Ci11bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VNYW5hZ2VyOjpnZXRNYXhTaXplRm9yRGF0YWJh
c2UoY29uc3QgRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZSkKK3Vuc2lnbmVkIGxvbmcgbG9uZyBE
YXRhYmFzZU1hbmFnZXI6OmdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBEYXRhYmFzZUJhY2tl
bmRCYXNlKiBkYXRhYmFzZSkKIHsKICAgICByZXR1cm4gbV9zZXJ2ZXItPmdldE1heFNpemVGb3JE
YXRhYmFzZShkYXRhYmFzZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgJKHJldmlzaW9uIDE0MzQyNikKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBBYnN0cmFjdERhdGFiYXNlU2VydmVyOwogY2xhc3MgRGF0YWJhc2U7Ci1jbGFzcyBEYXRhYmFz
ZUJhY2tlbmQ7CitjbGFzcyBEYXRhYmFzZUJhY2tlbmRCYXNlOwogY2xhc3MgRGF0YWJhc2VDYWxs
YmFjazsKIGNsYXNzIERhdGFiYXNlQ29udGV4dDsKIGNsYXNzIERhdGFiYXNlTWFuYWdlckNsaWVu
dDsKQEAgLTExMCw3ICsxMTAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGludGVycnVwdEFsbERh
dGFiYXNlc0ZvckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCi0gICAgdW5zaWdu
ZWQgbG9uZyBsb25nIGdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBEYXRhYmFzZUJhY2tlbmQq
KTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IERh
dGFiYXNlQmFja2VuZEJhc2UqKTsKIAogcHJpdmF0ZToKICAgICBEYXRhYmFzZU1hbmFnZXIoKTsK
QEAgLTEyMCw3ICsxMjAsNyBAQCBwcml2YXRlOgogICAgIC8vIGl0IGFscmVhZHkgZXhpc3QgcHJl
dmlvdXNseS4gT3RoZXJ3aXNlLCBpdCByZXR1cm5zIDAuCiAgICAgUGFzc1JlZlB0cjxEYXRhYmFz
ZUNvbnRleHQ+IGV4aXN0aW5nRGF0YWJhc2VDb250ZXh0Rm9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqKTsKIAotICAgIFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBvcGVuRGF0YWJhc2VCYWNr
ZW5kKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLAorICAgIFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNr
ZW5kQmFzZT4gb3BlbkRhdGFiYXNlQmFja2VuZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKICAg
ICAgICAgRGF0YWJhc2VUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhw
ZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLAogICAgICAgICB1bnNpZ25l
ZCBsb25nIGVzdGltYXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFi
YXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuY3BwCShyZXZp
c2lvbiAxNDM0MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDEyICsxNDAsMTIgQEAgdm9pZCBE
YXRhYmFzZVNlcnZlcjo6aW50ZXJydXB0QWxsRGF0YWJhcwogICAgIERhdGFiYXNlVHJhY2tlcjo6
dHJhY2tlcigpLmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29udGV4dCk7CiB9CiAK
LVBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBEYXRhYmFzZVNlcnZlcjo6b3BlbkRhdGFiYXNl
KFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiYgYmFja2VuZENvbnRleHQsCitQYXNzUmVm
UHRyPERhdGFiYXNlQmFja2VuZEJhc2U+IERhdGFiYXNlU2VydmVyOjpvcGVuRGF0YWJhc2UoUmVm
UHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+JiBiYWNrZW5kQ29udGV4dCwKICAgICBEYXRhYmFz
ZVR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVy
c2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKICAgICB1bnNpZ25lZCBsb25nIGVzdGlt
YXRlZFNpemUsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3IgJmVy
cm9yLCBTdHJpbmcmIGVycm9yTWVzc2FnZSwKICAgICBPcGVuQXR0ZW1wdCBhdHRlbXB0KQogewot
ICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IGRhdGFiYXNlOworICAgIFJlZlB0cjxEYXRhYmFz
ZUJhY2tlbmRCYXNlPiBkYXRhYmFzZTsKICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsgLy8gTWFr
ZSBzb21lIG9sZGVyIGNvbXBpbGVycyBoYXBweS4KICAgICAKICAgICBzd2l0Y2ggKGF0dGVtcHQp
IHsKQEAgLTE2MSwxMSArMTYxLDExIEBAIFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBEYXRh
YmFzZVNlcnYKICAgICByZXR1cm4gZGF0YWJhc2UucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRy
PERhdGFiYXNlQmFja2VuZD4gRGF0YWJhc2VTZXJ2ZXI6OmNyZWF0ZURhdGFiYXNlKFJlZlB0cjxE
YXRhYmFzZUJhY2tlbmRDb250ZXh0PiYgYmFja2VuZENvbnRleHQsCitQYXNzUmVmUHRyPERhdGFi
YXNlQmFja2VuZEJhc2U+IERhdGFiYXNlU2VydmVyOjpjcmVhdGVEYXRhYmFzZShSZWZQdHI8RGF0
YWJhc2VCYWNrZW5kQ29udGV4dD4mIGJhY2tlbmRDb250ZXh0LAogICAgIERhdGFiYXNlVHlwZSB0
eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBj
b25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLAogICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYgZXJyb3IsIFN0
cmluZyYgZXJyb3JNZXNzYWdlKQogewotICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IGRhdGFi
YXNlOworICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRCYXNlPiBkYXRhYmFzZTsKICAgICBzd2l0
Y2ggKHR5cGUpIHsKICAgICBjYXNlIERhdGFiYXNlVHlwZTo6QXN5bmM6CiAgICAgICAgIGRhdGFi
YXNlID0gYWRvcHRSZWYobmV3IERhdGFiYXNlKGJhY2tlbmRDb250ZXh0LCBuYW1lLCBleHBlY3Rl
ZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSk7CkBAIC0xODEsNyArMTgxLDcg
QEAgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IERhdGFiYXNlU2VydgogICAgIHJldHVybiBk
YXRhYmFzZS5yZWxlYXNlKCk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVNlcnZl
cjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2Up
Cit1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VTZXJ2ZXI6OmdldE1heFNpemVGb3JEYXRhYmFz
ZShjb25zdCBEYXRhYmFzZUJhY2tlbmRCYXNlKiBkYXRhYmFzZSkKIHsKICAgICByZXR1cm4gRGF0
YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGRhdGFiYXNlKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlU2VydmVyLmgJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyAr
NDUsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFN0cmluZyBmdWxsUGF0aEZvckRhdGFiYXNl
KFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlmRG9lc05v
dEV4aXN0KTsKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IG9wZW5E
YXRhYmFzZShSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mLCBEYXRhYmFzZVR5cGUsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0
cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgYm9vbCBzZXRW
ZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNzYWdl
LCBPcGVuQXR0ZW1wdCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZEJh
c2U+IG9wZW5EYXRhYmFzZShSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mLCBEYXRhYmFz
ZVR5cGUsCisgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3Rl
ZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1h
dGVkU2l6ZSwKKyAgICAgICAgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VF
cnJvciYsIFN0cmluZyYgZXJyb3JNZXNzYWdlLCBPcGVuQXR0ZW1wdCk7CiAKICNpZiAhUExBVEZP
Uk0oQ0hST01JVU0pCiAgICAgdmlydHVhbCBib29sIGhhc0VudHJ5Rm9yT3JpZ2luKFNlY3VyaXR5
T3JpZ2luKik7CkBAIC02OCwxMCArNzAsMTIgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IGludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoY29uc3QgRGF0YWJhc2VCYWNrZW5kQ29u
dGV4dCopOwogCi0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRh
dGFiYXNlKGNvbnN0IERhdGFiYXNlQmFja2VuZCopOworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9u
ZyBsb25nIGdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBEYXRhYmFzZUJhY2tlbmRCYXNlKik7
CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiBj
cmVhdGVEYXRhYmFzZShSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4mLCBEYXRhYmFzZVR5
cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNv
bnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgYm9v
bCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JN
ZXNzYWdlKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQmFzZT4gY3Jl
YXRlRGF0YWJhc2UoUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+JiwgRGF0YWJhc2VUeXBl
LAorICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJz
aW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNp
emUsCisgICAgICAgIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlRXJyb3Im
LCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVN5bmMuY3BwCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gRGF0
YWJhc2VTeW5jOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8RGF0
YWJhc2VCYWNrZW5kPiBiYWNrZW5kKQorUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IERhdGFiYXNl
U3luYzo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPERhdGFiYXNl
QmFja2VuZEJhc2U+IGJhY2tlbmQpCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGFiYXNl
U3luYyo+KGJhY2tlbmQuZ2V0KCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5oCShyZXZpc2lvbiAxNDM0MjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU3luYy5oCSh3b3JraW5n
IGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHByaXZhdGU6CiAgICAgRGF0YWJhc2VTeW5jKFBhc3NS
ZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4dD4sIGNvbnN0IFN0cmluZyYgbmFtZSwKICAgICAg
ICAgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5h
bWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAgUGFzc1JlZlB0cjxEYXRhYmFz
ZUJhY2tlbmRTeW5jPiBiYWNrZW5kKCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VT
eW5jPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8RGF0YWJhc2VC
YWNrZW5kPik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBjcmVhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQmFzZT4pOwog
CiAgICAgdm9pZCBydW5UcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0Nh
bGxiYWNrPiwgYm9vbCByZWFkT25seSwgRXhjZXB0aW9uQ29kZSYpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIu
Y3BwCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlVHJhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMzLDcgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNo
cm9tZUNsaWVudC5oIgotI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZC5oIgorI2luY2x1ZGUgIkRh
dGFiYXNlQmFja2VuZEJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiRGF0YWJhc2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VNYW5hZ2Vy
Q2xpZW50LmgiCkBAIC0yODMsNyArMjgzLDcgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0Vu
dHJ5Rm9yRGF0YWJhcwogICAgIHJldHVybiBzdGF0ZW1lbnQuc3RlcCgpID09IFNRTFJlc3VsdFJv
dzsKIH0KIAotdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6Z2V0TWF4U2l6ZUZv
ckRhdGFiYXNlKGNvbnN0IERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2UpCit1bnNpZ25lZCBsb25n
IGxvbmcgRGF0YWJhc2VUcmFja2VyOjpnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgRGF0YWJh
c2VCYWNrZW5kQmFzZSogZGF0YWJhc2UpCiB7CiAgICAgLy8gVGhlIG1heGltdW0gc2l6ZSBmb3Ig
YSBkYXRhYmFzZSBpcyB0aGUgZnVsbCBxdW90YSBmb3IgaXRzIG9yaWdpbiwgbWludXMgdGhlIGN1
cnJlbnQgdXNhZ2Ugd2l0aGluIHRoZSBvcmlnaW4sCiAgICAgLy8gcGx1cyB0aGUgY3VycmVudCB1
c2FnZSBvZiB0aGUgZ2l2ZW4gZGF0YWJhc2UKQEAgLTI5Myw3ICsyOTMsNyBAQCB1bnNpZ25lZCBs
b25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpnZXRNCiAgICAgcmV0dXJuIHF1b3RhRm9yT3JpZ2lu
Tm9Mb2NrKG9yaWdpbikgLSBvcmlnaW5RdW90YU1hbmFnZXIoKS5kaXNrVXNhZ2Uob3JpZ2luKSAr
IFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUoZGF0YWJhc2UtPmZpbGVOYW1l
KCkpOwogfQogCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VDaGFuZ2VkKERhdGFiYXNl
QmFja2VuZCogZGF0YWJhc2UpCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VDaGFuZ2Vk
KERhdGFiYXNlQmFja2VuZEJhc2UqIGRhdGFiYXNlKQogewogICAgIExvY2tlcjxPcmlnaW5RdW90
YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmlnaW5RdW90YU1hbmFnZXIoKSk7CiAgICAg
b3JpZ2luUXVvdGFNYW5hZ2VyKCkubWFya0RhdGFiYXNlKGRhdGFiYXNlKTsKQEAgLTMwMSw3ICsz
MDEsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VDaGFuZ2VkKERhCiAKIHZvaWQg
RGF0YWJhc2VUcmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IERh
dGFiYXNlQmFja2VuZENvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxEYXRh
YmFzZUJhY2tlbmQ+ID4gb3BlbkRhdGFiYXNlczsKKyAgICBWZWN0b3I8UmVmUHRyPERhdGFiYXNl
QmFja2VuZEJhc2U+ID4gb3BlbkRhdGFiYXNlczsKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2Vy
IG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7CiAKQEAgLTMyMyw4
ICszMjMsOCBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhCiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBWZWN0b3I8UmVmUHRyPERhdGFiYXNlQmFja2VuZD4gPjo6Y29u
c3RfaXRlcmF0b3Igb3BlbkRhdGFiYXNlc0VuZEl0ID0gb3BlbkRhdGFiYXNlcy5lbmQoKTsKLSAg
ICBmb3IgKFZlY3RvcjxSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPiA+Ojpjb25zdF9pdGVyYXRvciBv
cGVuRGF0YWJhc2VzSXQgPSBvcGVuRGF0YWJhc2VzLmJlZ2luKCk7IG9wZW5EYXRhYmFzZXNJdCAh
PSBvcGVuRGF0YWJhc2VzRW5kSXQ7ICsrb3BlbkRhdGFiYXNlc0l0KQorICAgIFZlY3RvcjxSZWZQ
dHI8RGF0YWJhc2VCYWNrZW5kQmFzZT4gPjo6Y29uc3RfaXRlcmF0b3Igb3BlbkRhdGFiYXNlc0Vu
ZEl0ID0gb3BlbkRhdGFiYXNlcy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxSZWZQdHI8RGF0YWJh
c2VCYWNrZW5kQmFzZT4gPjo6Y29uc3RfaXRlcmF0b3Igb3BlbkRhdGFiYXNlc0l0ID0gb3BlbkRh
dGFiYXNlcy5iZWdpbigpOyBvcGVuRGF0YWJhc2VzSXQgIT0gb3BlbkRhdGFiYXNlc0VuZEl0OyAr
K29wZW5EYXRhYmFzZXNJdCkKICAgICAgICAgKCpvcGVuRGF0YWJhc2VzSXQpLT5pbnRlcnJ1cHQo
KTsKIH0KIApAQCAtNTYyLDEzICs1NjIsMTMgQEAgdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNl
VHJhY2tlcjo6dXNhZwogICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZp
bGVTaXplKHBhdGgpOwogfQogCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6ZG9uZUNyZWF0aW5nRGF0
YWJhc2UoRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZSkKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjpk
b25lQ3JlYXRpbmdEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmRCYXNlKiBkYXRhYmFzZSkKIHsKICAg
ICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKICAgICBkb25lQ3Jl
YXRpbmdEYXRhYmFzZShkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSwgZGF0YWJhc2UtPnN0cmlu
Z0lkZW50aWZpZXIoKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJh
c2UoRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZSkKK3ZvaWQgRGF0YWJhc2VUcmFja2VyOjphZGRP
cGVuRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kQmFzZSogZGF0YWJhc2UpCiB7CiAgICAgaWYgKCFk
YXRhYmFzZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjA0LDcgKzYwNCw3IEBAIHZvaWQgRGF0YWJh
c2VUcmFja2VyOjphZGRPcGVuRGF0YWJhc2UoRGEKICAgICB9CiB9CiAKLXZvaWQgRGF0YWJhc2VU
cmFja2VyOjpyZW1vdmVPcGVuRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZSkKK3Zv
aWQgRGF0YWJhc2VUcmFja2VyOjpyZW1vdmVPcGVuRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kQmFz
ZSogZGF0YWJhc2UpCiB7CiAgICAgaWYgKCFkYXRhYmFzZSkKICAgICAgICAgcmV0dXJuOwpAQCAt
NjUxLDcgKzY1MSw3IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpyZW1vdmVPcGVuRGF0YWJhc2UK
ICAgICB9CiB9CiAKLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpnZXRPcGVuRGF0YWJhc2VzKFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgSGFzaFNldDxSZWZQdHI8RGF0
YWJhc2VCYWNrZW5kPiA+KiBkYXRhYmFzZXMpCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6Z2V0T3Bl
bkRhdGFiYXNlcyhTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhh
c2hTZXQ8UmVmUHRyPERhdGFiYXNlQmFja2VuZEJhc2U+ID4qIGRhdGFiYXNlcykKIHsKICAgICBN
dXRleExvY2tlciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwog
ICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXApCkBAIC0xMDc3LDcgKzEwNzcsNyBAQCBib29sIERh
dGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlCiAgICAgfQogI2VuZGlmCiAKLSAgICBW
ZWN0b3I8UmVmUHRyPERhdGFiYXNlQmFja2VuZD4gPiBkZWxldGVkRGF0YWJhc2VzOworICAgIFZl
Y3RvcjxSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQmFzZT4gPiBkZWxldGVkRGF0YWJhc2VzOwogCiAg
ICAgLy8gTWFrZSBzdXJlIG5vdCB0byBob2xkIHRoZSBhbnkgbG9ja3Mgd2hlbiBjYWxsaW5nCiAg
ICAgLy8gRGF0YWJhc2U6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpLCBzaW5jZSB0aGF0IGNhbiBj
YXVzZSBhIGRlYWRsb2NrCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlVHJhY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmgJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBEYXRhYmFzZUJhY2tlbmQ7CitjbGFzcyBEYXRhYmFzZUJhY2tlbmRCYXNlOwogY2xh
c3MgRGF0YWJhc2VCYWNrZW5kQ29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCkBAIC03
NSwxMiArNzUsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RGF0YWJhc2VEZXRhaWxzKFNlY3Vy
aXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1l
LCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwogICAgIFN0cmluZyBmdWxsUGF0aEZvckRh
dGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGNyZWF0ZUlm
RG9lc05vdEV4aXN0ID0gdHJ1ZSk7CiAKLSAgICB2b2lkIGFkZE9wZW5EYXRhYmFzZShEYXRhYmFz
ZUJhY2tlbmQqKTsKLSAgICB2b2lkIHJlbW92ZU9wZW5EYXRhYmFzZShEYXRhYmFzZUJhY2tlbmQq
KTsKLSAgICB2b2lkIGdldE9wZW5EYXRhYmFzZXMoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJp
bmcmIG5hbWUsIEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNlQmFja2VuZD4gPiogZGF0YWJhc2VzKTsK
KyAgICB2b2lkIGFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZUJhY2tlbmRCYXNlKik7CisgICAgdm9p
ZCByZW1vdmVPcGVuRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kQmFzZSopOworICAgIHZvaWQgZ2V0
T3BlbkRhdGFiYXNlcyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgSGFzaFNl
dDxSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQmFzZT4gPiogZGF0YWJhc2VzKTsKIAotICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyBnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgRGF0YWJhc2VCYWNrZW5k
Kik7Ci0gICAgdm9pZCBkYXRhYmFzZUNoYW5nZWQoRGF0YWJhc2VCYWNrZW5kKik7CisgICAgdW5z
aWduZWQgbG9uZyBsb25nIGdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBEYXRhYmFzZUJhY2tl
bmRCYXNlKik7CisgICAgdm9pZCBkYXRhYmFzZUNoYW5nZWQoRGF0YWJhc2VCYWNrZW5kQmFzZSop
OwogCiAgICAgdm9pZCBpbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IERhdGFi
YXNlQmFja2VuZENvbnRleHQqKTsKIApAQCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaGFzRW50cnlGb3JPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKTsKIAotICAgIHZvaWQgZG9u
ZUNyZWF0aW5nRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kKik7CisgICAgdm9pZCBkb25lQ3JlYXRp
bmdEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmRCYXNlKik7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBo
YXNFbnRyeUZvck9yaWdpbk5vTG9jayhTZWN1cml0eU9yaWdpbiogb3JpZ2luKTsKQEAgLTE0MSw3
ICsxNDEsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBkZWxldGVEYXRhYmFzZUZpbGUoU2VjdXJp
dHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgdHlwZWRlZiBIYXNoU2V0PERh
dGFiYXNlQmFja2VuZCo+IERhdGFiYXNlU2V0OworICAgIHR5cGVkZWYgSGFzaFNldDxEYXRhYmFz
ZUJhY2tlbmRCYXNlKj4gRGF0YWJhc2VTZXQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
RGF0YWJhc2VTZXQqPiBEYXRhYmFzZU5hbWVNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0
cjxTZWN1cml0eU9yaWdpbj4sIERhdGFiYXNlTmFtZU1hcCo+IERhdGFiYXNlT3JpZ2luTWFwOwog
CkBAIC0xODQsMTYgKzE4NCwxNiBAQCBwcml2YXRlOgogcHVibGljOgogICAgIHZvaWQgY2xvc2VE
YXRhYmFzZXNJbW1lZGlhdGVseShjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgbmFtZSk7CiAKLSAgICB2b2lkIHByZXBhcmVUb09wZW5EYXRhYmFzZShEYXRhYmFz
ZUJhY2tlbmQqKTsKLSAgICB2b2lkIGZhaWxlZFRvT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2Vu
ZCopOworICAgIHZvaWQgcHJlcGFyZVRvT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2VuZEJhc2Uq
KTsKKyAgICB2b2lkIGZhaWxlZFRvT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2VuZEJhc2UqKTsK
IAogcHJpdmF0ZToKLSAgICB0eXBlZGVmIEhhc2hTZXQ8RGF0YWJhc2VCYWNrZW5kKj4gRGF0YWJh
c2VTZXQ7CisgICAgdHlwZWRlZiBIYXNoU2V0PERhdGFiYXNlQmFja2VuZEJhc2UqPiBEYXRhYmFz
ZVNldDsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBEYXRhYmFzZVNldCo+IERhdGFiYXNl
TmFtZU1hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBEYXRhYmFzZU5hbWVNYXAqPiBE
YXRhYmFzZU9yaWdpbk1hcDsKICAgICBjbGFzcyBDbG9zZU9uZURhdGFiYXNlSW1tZWRpYXRlbHlU
YXNrOwogCi0gICAgdm9pZCBjbG9zZU9uZURhdGFiYXNlSW1tZWRpYXRlbHkoY29uc3QgU3RyaW5n
JiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUsIERhdGFiYXNlQmFja2VuZCop
OworICAgIHZvaWQgY2xvc2VPbmVEYXRhYmFzZUltbWVkaWF0ZWx5KGNvbnN0IFN0cmluZyYgb3Jp
Z2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1lLCBEYXRhYmFzZUJhY2tlbmRCYXNlKik7
CiAKICAgICBNdXRleCBtX29wZW5EYXRhYmFzZU1hcEd1YXJkOwogICAgIG11dGFibGUgT3duUHRy
PERhdGFiYXNlT3JpZ2luTWFwPiBtX29wZW5EYXRhYmFzZU1hcDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblF1b3RhTWFuYWdl
ci5jcHAJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
NyBAQAogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIkRhdGFiYXNlQmFj
a2VuZC5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZEJhc2UuaCIKICNpbmNsdWRlICJPcmln
aW5Vc2FnZVJlY29yZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMTIsNyArMTEyLDcg
QEAgdm9pZCBPcmlnaW5RdW90YU1hbmFnZXI6OnJlbW92ZU9yaWdpbihTZQogICAgIH0KIH0KIAot
dm9pZCBPcmlnaW5RdW90YU1hbmFnZXI6Om1hcmtEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmQqIGRh
dGFiYXNlKQordm9pZCBPcmlnaW5RdW90YU1hbmFnZXI6Om1hcmtEYXRhYmFzZShEYXRhYmFzZUJh
Y2tlbmRCYXNlKiBkYXRhYmFzZSkKIHsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIEFTU0VS
VChtX3VzYWdlUmVjb3JkR3VhcmRMb2NrZWQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9PcmlnaW5RdW90YU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblF1b3RhTWFuYWdlci5oCShyZXZpc2lv
biAxNDM0MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblF1
b3RhTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgRGF0YWJhc2VCYWNrZW5kOworY2xhc3MgRGF0YWJhc2VCYWNr
ZW5kQmFzZTsKIGNsYXNzIE9yaWdpblVzYWdlUmVjb3JkOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47
CiAKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlRGF0YWJhc2UoU2Vj
dXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcik7CiAgICAgdm9p
ZCByZW1vdmVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKTsKIAotICAgIHZvaWQgbWFya0RhdGFiYXNl
KERhdGFiYXNlQmFja2VuZCopOyAvLyBNYXJrIGRpcnRpbmVzcyBvZiBhIHNwZWNpZmljIGRhdGFi
YXNlLgorICAgIHZvaWQgbWFya0RhdGFiYXNlKERhdGFiYXNlQmFja2VuZEJhc2UqKTsgLy8gTWFy
ayBkaXJ0aW5lc3Mgb2YgYSBzcGVjaWZpYyBkYXRhYmFzZS4KICAgICB1bnNpZ25lZCBsb25nIGxv
bmcgZGlza1VzYWdlKFNlY3VyaXR5T3JpZ2luKikgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRy
YW5zYWN0aW9uQ2xpZW50LmNwcAkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKLSNpbmNs
dWRlICJEYXRhYmFzZUJhY2tlbmQuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRCYXNlLmgi
CiAjaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oIgogI2luY2x1ZGUgIkRhdGFiYXNl
TWFuYWdlci5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgpAQCAtNDIsMTggKzQyLDE4
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6
ZGlkQ29tbWl0V3JpdGVUcmFuc2FjdGlvbihEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQordm9p
ZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkQ29tbWl0V3JpdGVUcmFuc2FjdGlvbihEYXRhYmFz
ZUJhY2tlbmRCYXNlKiBkYXRhYmFzZSkKIHsKICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIo
KS5zY2hlZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZCgKICAgICAgICAgZGF0YWJhc2UtPnNlY3Vy
aXR5T3JpZ2luKCksIGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkpOwogfQogCi12b2lkIFNR
TFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRFeGVjdXRlU3RhdGVtZW50KERhdGFiYXNlQmFja2VuZCog
ZGF0YWJhc2UpCit2b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRFeGVjdXRlU3RhdGVtZW50
KERhdGFiYXNlQmFja2VuZEJhc2UqIGRhdGFiYXNlKQogewogICAgIERhdGFiYXNlVHJhY2tlcjo6
dHJhY2tlcigpLmRhdGFiYXNlQ2hhbmdlZChkYXRhYmFzZSk7CiB9CiAKLWJvb2wgU1FMVHJhbnNh
Y3Rpb25DbGllbnQ6OmRpZEV4Y2VlZFF1b3RhKERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2UpCiti
b29sIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRFeGNlZWRRdW90YShEYXRhYmFzZUJhY2tlbmRC
YXNlKiBkYXRhYmFzZSkKIHsKICAgICBBU1NFUlQoZGF0YWJhc2UtPmRhdGFiYXNlQ29udGV4dCgp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICB1bnNp
Z25lZCBsb25nIGxvbmcgY3VycmVudFF1b3RhID0gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCku
cXVvdGFGb3JPcmlnaW4oZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rp
b25DbGllbnQuaAkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3
ICszOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRGF0YWJhc2VCYWNrZW5k
OworY2xhc3MgRGF0YWJhc2VCYWNrZW5kQmFzZTsKIAogLy8gQSBjbGllbnQgdG8gdGhlIFNRTFRy
YW5zYWN0aW9uIGNsYXNzLiBBbGxvd3MgU1FMVHJhbnNhY3Rpb24gdG8gbm90aWZ5IGludGVyZXN0
ZWQKIC8vIHBhcnRpZXMgdGhhdCBjZXJ0YWluIHRoaW5ncyBoYXZlIGhhcHBlbmVkIGluIGEgdHJh
bnNhY3Rpb24uCkBAIC00Niw5ICs0Niw5IEBAIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ2xpZW50IHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTUUxUcmFuc2FjdGlvbkNsaWVudCk7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFNRTFRyYW5zYWN0aW9uQ2xpZW50KCkgeyB9
Ci0gICAgdm9pZCBkaWRDb21taXRXcml0ZVRyYW5zYWN0aW9uKERhdGFiYXNlQmFja2VuZCopOwot
ICAgIHZvaWQgZGlkRXhlY3V0ZVN0YXRlbWVudChEYXRhYmFzZUJhY2tlbmQqKTsKLSAgICBib29s
IGRpZEV4Y2VlZFF1b3RhKERhdGFiYXNlQmFja2VuZCopOworICAgIHZvaWQgZGlkQ29tbWl0V3Jp
dGVUcmFuc2FjdGlvbihEYXRhYmFzZUJhY2tlbmRCYXNlKik7CisgICAgdm9pZCBkaWRFeGVjdXRl
U3RhdGVtZW50KERhdGFiYXNlQmFja2VuZEJhc2UqKTsKKyAgICBib29sIGRpZEV4Y2VlZFF1b3Rh
KERhdGFiYXNlQmFja2VuZEJhc2UqKTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VPYnNlcnZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VP
YnNlcnZlci5oCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlT2JzZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERhdGFiYXNlQmFj
a2VuZDsKK2NsYXNzIERhdGFiYXNlQmFja2VuZEJhc2U7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OwogCiAvLyBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjbGFzcyBpcyBpbiB0aGUg
V2ViS2l0IEFQSSAoQ2hyb21pdW0gc291cmNlIHRyZWUpCkBAIC00NSwxNiArNDUsMTYgQEAgY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIERhdGFiYXNlT2JzZXJ2ZXIgewogcHVi
bGljOgogICAgIHN0YXRpYyBib29sIGNhbkVzdGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBsb25nKTsK
LSAgICBzdGF0aWMgdm9pZCBkYXRhYmFzZU9wZW5lZChEYXRhYmFzZUJhY2tlbmQqKTsKLSAgICBz
dGF0aWMgdm9pZCBkYXRhYmFzZU1vZGlmaWVkKERhdGFiYXNlQmFja2VuZCopOwotICAgIHN0YXRp
YyB2b2lkIGRhdGFiYXNlQ2xvc2VkKERhdGFiYXNlQmFja2VuZCopOwotCi0gICAgc3RhdGljIHZv
aWQgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KERhdGFiYXNlQmFja2VuZCosIGludCBjYWxsc2l0
ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7Ci0gICAgc3RhdGlj
IHZvaWQgcmVwb3J0Q2hhbmdlVmVyc2lvblJlc3VsdChEYXRhYmFzZUJhY2tlbmQqLCBpbnQgY2Fs
bHNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOwotICAgIHN0
YXRpYyB2b2lkIHJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoRGF0YWJhc2VCYWNrZW5kKiwg
aW50IGNhbGxzaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsK
LSAgICBzdGF0aWMgdm9pZCByZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdChEYXRhYmFzZUJh
Y2tlbmQqLCBpbnQgY2FsbHNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJv
ckNvZGUpOwotICAgIHN0YXRpYyB2b2lkIHJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQoRGF0
YWJhc2VCYWNrZW5kKiwgaW50IGNhbGxzaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3Fs
aXRlRXJyb3JDb2RlKTsKLSAgICBzdGF0aWMgdm9pZCByZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3Vs
dChEYXRhYmFzZUJhY2tlbmQqLCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsKKyAgICBzdGF0aWMgdm9p
ZCBkYXRhYmFzZU9wZW5lZChEYXRhYmFzZUJhY2tlbmRCYXNlKik7CisgICAgc3RhdGljIHZvaWQg
ZGF0YWJhc2VNb2RpZmllZChEYXRhYmFzZUJhY2tlbmRCYXNlKik7CisgICAgc3RhdGljIHZvaWQg
ZGF0YWJhc2VDbG9zZWQoRGF0YWJhc2VCYWNrZW5kQmFzZSopOworCisgICAgc3RhdGljIHZvaWQg
cmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KERhdGFiYXNlQmFja2VuZEJhc2UqLCBpbnQgY2FsbHNp
dGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOworICAgIHN0YXRp
YyB2b2lkIHJlcG9ydENoYW5nZVZlcnNpb25SZXN1bHQoRGF0YWJhc2VCYWNrZW5kQmFzZSosIGlu
dCBjYWxsc2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7Cisg
ICAgc3RhdGljIHZvaWQgcmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdChEYXRhYmFzZUJhY2tl
bmRCYXNlKiwgaW50IGNhbGxzaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJy
b3JDb2RlKTsKKyAgICBzdGF0aWMgdm9pZCByZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdChE
YXRhYmFzZUJhY2tlbmRCYXNlKiwgaW50IGNhbGxzaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBp
bnQgc3FsaXRlRXJyb3JDb2RlKTsKKyAgICBzdGF0aWMgdm9pZCByZXBvcnRFeGVjdXRlU3RhdGVt
ZW50UmVzdWx0KERhdGFiYXNlQmFja2VuZEJhc2UqLCBpbnQgY2FsbHNpdGUsIGludCB3ZWJTcWxF
cnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOworICAgIHN0YXRpYyB2b2lkIHJlcG9ydFZh
Y3V1bURhdGFiYXNlUmVzdWx0KERhdGFiYXNlQmFja2VuZEJhc2UqLCBpbnQgc3FsaXRlRXJyb3JD
b2RlKTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
Y2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hy
b21pdW0uY3BwCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAotI2lu
Y2x1ZGUgIkRhdGFiYXNlQmFja2VuZC5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZEJhc2Uu
aCIKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgiCiAjaW5jbHVkZSAiRGF0YWJh
c2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIlF1b3RhVHJhY2tlci5oIgpAQCAtODMsNyArODMsNyBA
QCBTdHJpbmcgRGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0aEZvckRhdGFiCiAgICAgcmV0dXJuIG9y
aWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyAiLyIgKyBuYW1lICsgIiMiOwogfQogCi12b2lk
IERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2VuZCogZGF0YWJh
c2UpCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2Vu
ZEJhc2UqIGRhdGFiYXNlKQogewogICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2so
bV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7CiAgICAgaWYgKCFtX29wZW5EYXRhYmFzZU1hcCkKQEAg
LTEwOCw3ICsxMDgsNyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKERh
CiAKIGNsYXNzIE5vdGlmeURhdGFiYXNlT2JzZXJ2ZXJPbkNsb3NlVGFzayA6IHB1YmxpYyBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0
cjxOb3RpZnlEYXRhYmFzZU9ic2VydmVyT25DbG9zZVRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPERh
dGFiYXNlQmFja2VuZD4gZGF0YWJhc2UpCisgICAgc3RhdGljIFBhc3NPd25QdHI8Tm90aWZ5RGF0
YWJhc2VPYnNlcnZlck9uQ2xvc2VUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tl
bmRCYXNlPiBkYXRhYmFzZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTm90
aWZ5RGF0YWJhc2VPYnNlcnZlck9uQ2xvc2VUYXNrKGRhdGFiYXNlKSk7CiAgICAgfQpAQCAtMTI0
LDE1ICsxMjQsMTUgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBOb3RpZnlEYXRh
YmFzZU9ic2VydmVyT25DbG9zZVRhc2soUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IGRhdGFi
YXNlKQorICAgIE5vdGlmeURhdGFiYXNlT2JzZXJ2ZXJPbkNsb3NlVGFzayhQYXNzUmVmUHRyPERh
dGFiYXNlQmFja2VuZEJhc2U+IGRhdGFiYXNlKQogICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJh
c2UpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IG1fZGF0YWJh
c2U7CisgICAgUmVmUHRyPERhdGFiYXNlQmFja2VuZEJhc2U+IG1fZGF0YWJhc2U7CiB9OwogCi12
b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2VuZCog
ZGF0YWJhc2UpCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFi
YXNlQmFja2VuZEJhc2UqIGRhdGFiYXNlKQogewogICAgIFN0cmluZyBvcmlnaW5JZGVudGlmaWVy
ID0gZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCktPmRhdGFiYXNlSWRlbnRpZmllcigpOwogICAg
IE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7
CkBAIC0xNjcsMTMgKzE2NywxMyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRh
dGFiYXNlCiAgICAgICAgIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlQ2xvc2VkKGRhdGFiYXNl
KTsKIH0KIAotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnByZXBhcmVUb09wZW5EYXRhYmFzZShEYXRh
YmFzZUJhY2tlbmQqIGRhdGFiYXNlKQordm9pZCBEYXRhYmFzZVRyYWNrZXI6OnByZXBhcmVUb09w
ZW5EYXRhYmFzZShEYXRhYmFzZUJhY2tlbmRCYXNlKiBkYXRhYmFzZSkKIHsKICAgICBBU1NFUlQo
ZGF0YWJhc2UtPmRhdGFiYXNlQ29udGV4dCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlz
Q29udGV4dFRocmVhZCgpKTsKICAgICBEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFzZU9wZW5lZChk
YXRhYmFzZSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpmYWlsZWRUb09wZW5EYXRhYmFz
ZShEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQordm9pZCBEYXRhYmFzZVRyYWNrZXI6OmZhaWxl
ZFRvT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2VuZEJhc2UqIGRhdGFiYXNlKQogewogICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBkYXRhYmFzZS0+
ZGF0YWJhc2VDb250ZXh0KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKQpAQCAtMTgyLDcgKzE4Miw3
IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpmYWlsZWRUb09wZW5EYXRhYmEKICAgICAgICAgRGF0
YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VDbG9zZWQoZGF0YWJhc2UpOwogfQogCi11bnNpZ25lZCBs
b25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgRGF0
YWJhc2VCYWNrZW5kKiBkYXRhYmFzZSkKK3Vuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNr
ZXI6OmdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBEYXRhYmFzZUJhY2tlbmRCYXNlKiBkYXRh
YmFzZSkKIHsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc3BhY2VBdmFpbGFibGUgPSAwOwogICAg
IHVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhYmFzZVNpemUgPSAwOwpAQCAtMjE2LDcgKzIxNiw3IEBA
IHZvaWQgRGF0YWJhc2VUcmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmEKIAogY2xhc3MgRGF0YWJh
c2VUcmFja2VyOjpDbG9zZU9uZURhdGFiYXNlSW1tZWRpYXRlbHlUYXNrIDogcHVibGljIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PENsb3NlT25lRGF0YWJhc2VJbW1lZGlhdGVseVRhc2s+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG9y
aWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgRGF0YWJhc2VCYWNrZW5kKiBkYXRh
YmFzZSkKKyAgICBzdGF0aWMgUGFzc093blB0cjxDbG9zZU9uZURhdGFiYXNlSW1tZWRpYXRlbHlU
YXNrPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IG5hbWUsIERhdGFiYXNlQmFja2VuZEJhc2UqIGRhdGFiYXNlKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDbG9zZU9uZURhdGFiYXNlSW1tZWRpYXRlbHlUYXNrKG9yaWdpbklk
ZW50aWZpZXIsIG5hbWUsIGRhdGFiYXNlKSk7CiAgICAgfQpAQCAtMjI3LDcgKzIyNyw3IEBAIHB1
YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ2xvc2VPbmVEYXRhYmFzZUltbWVkaWF0ZWx5
VGFzayhjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwg
RGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZSkKKyAgICBDbG9zZU9uZURhdGFiYXNlSW1tZWRpYXRl
bHlUYXNrKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1l
LCBEYXRhYmFzZUJhY2tlbmRCYXNlKiBkYXRhYmFzZSkKICAgICAgICAgOiBtX29yaWdpbklkZW50
aWZpZXIob3JpZ2luSWRlbnRpZmllci5pc29sYXRlZENvcHkoKSkKICAgICAgICAgLCBtX25hbWUo
bmFtZS5pc29sYXRlZENvcHkoKSkKICAgICAgICAgLCBtX2RhdGFiYXNlKGRhdGFiYXNlKQpAQCAt
MjM2LDcgKzIzNiw3IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgbV9vcmlnaW5JZGVudGlmaWVy
OwogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgRGF0YWJhc2VCYWNrZW5kKiBtX2RhdGFiYXNlOyAv
LyBJbnRlbnRpb25hbGx5IGEgcmF3IHBvaW50ZXIuCisgICAgRGF0YWJhc2VCYWNrZW5kQmFzZSog
bV9kYXRhYmFzZTsgLy8gSW50ZW50aW9uYWxseSBhIHJhdyBwb2ludGVyLgogfTsKIAogdm9pZCBE
YXRhYmFzZVRyYWNrZXI6OmNsb3NlRGF0YWJhc2VzSW1tZWRpYXRlbHkoY29uc3QgU3RyaW5nJiBv
cmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUpIHsKQEAgLTI1OSw3ICsyNTksNyBA
QCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6Y2xvc2VEYXRhYmFzZXNJbW1lCiAgICAgICAgICgqaXQp
LT5kYXRhYmFzZUNvbnRleHQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayhD
bG9zZU9uZURhdGFiYXNlSW1tZWRpYXRlbHlUYXNrOjpjcmVhdGUob3JpZ2luSWRlbnRpZmllciwg
bmFtZSwgKml0KSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpjbG9zZU9uZURhdGFiYXNl
SW1tZWRpYXRlbHkoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IG5hbWUsIERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2UpCit2b2lkIERhdGFiYXNlVHJhY2tlcjo6
Y2xvc2VPbmVEYXRhYmFzZUltbWVkaWF0ZWx5KGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBuYW1lLCBEYXRhYmFzZUJhY2tlbmRCYXNlKiBkYXRhYmFzZSkKIHsK
ICAgICAvLyBGaXJzdCB3ZSBoYXZlIHRvIGNvbmZpcm0gdGhlICdkYXRhYmFzZScgaXMgc3RpbGwg
aW4gb3VyIGNvbGxlY3Rpb24uCiAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9jaHJvbWl1bS9TUUxUcmFuc2FjdGlvbkNsaWVudENocm9taXVtLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1NR
TFRyYW5zYWN0aW9uQ2xpZW50Q2hyb21pdW0uY3BwCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1NRTFRyYW5zYWN0aW9uQ2xp
ZW50Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAKICNpZiBF
TkFCTEUoU1FMX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kLmgiCisjaW5j
bHVkZSAiRGF0YWJhc2VCYWNrZW5kQmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZENv
bnRleHQuaCIKICNpbmNsdWRlICJEYXRhYmFzZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIE5vdGlmeURhdGFiYXNlQ2hhbmdlZFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Tm90aWZ5
RGF0YWJhc2VDaGFuZ2VkVGFzaz4gY3JlYXRlKERhdGFiYXNlQmFja2VuZCAqZGF0YWJhc2UpCisg
ICAgc3RhdGljIFBhc3NPd25QdHI8Tm90aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzaz4gY3JlYXRlKERh
dGFiYXNlQmFja2VuZEJhc2UgKmRhdGFiYXNlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBOb3RpZnlEYXRhYmFzZUNoYW5nZWRUYXNrKGRhdGFiYXNlKSk7CiAgICAgfQpAQCAt
NTMsMTUgKzUzLDE1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgTm90aWZ5RGF0
YWJhc2VDaGFuZ2VkVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZD4gZGF0YWJhc2UpCisg
ICAgTm90aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZEJh
c2U+IGRhdGFiYXNlKQogICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCiAgICAgewogICAg
IH0KIAotICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmQ+IG1fZGF0YWJhc2U7CisgICAgUmVmUHRy
PERhdGFiYXNlQmFja2VuZEJhc2U+IG1fZGF0YWJhc2U7CiB9OwogCi12b2lkIFNRTFRyYW5zYWN0
aW9uQ2xpZW50OjpkaWRDb21taXRXcml0ZVRyYW5zYWN0aW9uKERhdGFiYXNlQmFja2VuZCogZGF0
YWJhc2UpCit2b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRDb21taXRXcml0ZVRyYW5zYWN0
aW9uKERhdGFiYXNlQmFja2VuZEJhc2UqIGRhdGFiYXNlKQogewogICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBkYXRhYmFzZS0+ZGF0YWJhc2VDb250
ZXh0KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKSB7CkBAIC03MiwxMyArNzIsMTMgQEAgdm9pZCBT
UUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkQ29tbWl0V3JpdAogICAgIFdlYkNvcmU6OkRhdGFiYXNl
T2JzZXJ2ZXI6OmRhdGFiYXNlTW9kaWZpZWQoZGF0YWJhc2UpOwogfQogCi12b2lkIFNRTFRyYW5z
YWN0aW9uQ2xpZW50OjpkaWRFeGVjdXRlU3RhdGVtZW50KERhdGFiYXNlQmFja2VuZCogZGF0YWJh
c2UpCit2b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRFeGVjdXRlU3RhdGVtZW50KERhdGFi
YXNlQmFja2VuZEJhc2UqIGRhdGFiYXNlKQogewogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxl
ZCBhZnRlciBleGVjdXRpbmcgZXZlcnkgc3RhdGVtZW50IHRoYXQgY2hhbmdlcyB0aGUgREIuCiAg
ICAgLy8gQ2hyb21pdW0gZG9lc24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IHRoYXQgcG9pbnQu
CiB9CiAKLWJvb2wgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4Y2VlZFF1b3RhKERhdGFiYXNl
QmFja2VuZCogZGF0YWJhc2UpCitib29sIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRFeGNlZWRR
dW90YShEYXRhYmFzZUJhY2tlbmRCYXNlKiBkYXRhYmFzZSkKIHsKICAgICAvLyBDaHJvbWl1bSBk
b2VzIG5vdCBhbGxvdyB1c2VycyB0byBtYW51YWxseSBjaGFuZ2UgdGhlIHF1b3RhIGZvciBhbiBv
cmlnaW4gKGZvciBub3csIGF0IGxlYXN0KS4KICAgICAvLyBEb24ndCBkbyBhbnl0aGluZy4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZp
c2lvbiAxNDM0MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjU0MTQsMTkgKzI1NDE0LDE5IEBACiAJCQkJCT4KIAkJ
CQk8L0ZpbGU+CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRh
dGFiYXNlXERhdGFiYXNlQmFja2VuZC5jcHAiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxl
c1x3ZWJkYXRhYmFzZVxEYXRhYmFzZUJhY2tlbmRBc3luYy5jcHAiCiAJCQkJCT4KIAkJCQk8L0Zp
bGU+CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNl
XERhdGFiYXNlQmFja2VuZC5oIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0
YWJhc2VcRGF0YWJhc2VCYWNrZW5kQXN5bmMuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8
RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VC
YWNrZW5kQXN5bmMuY3BwIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0YWJh
c2VcRGF0YWJhc2VCYWNrZW5kQmFzZS5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZp
bGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXERhdGFiYXNlQmFj
a2VuZEFzeW5jLmgiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxE
YXRhYmFzZUJhY2tlbmRCYXNlLmgiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagko
cmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTg1NSw4ICsxODU1LDggQEAKICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcQ2hhbmdlVmVyc2lvbldyYXBw
ZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFz
ZVxEYXRhYmFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdl
YmRhdGFiYXNlXERhdGFiYXNlQXV0aG9yaXplci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXERhdGFiYXNlQmFja2VuZC5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXERhdGFiYXNlQmFja2Vu
ZEFzeW5jLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0
YWJhc2VcRGF0YWJhc2VCYWNrZW5kQmFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXERhdGFiYXNlQmFja2VuZENvbnRleHQuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxEYXRhYmFzZUJh
Y2tlbmRTeW5jLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2Vi
ZGF0YWJhc2VcRGF0YWJhc2VCYXNlLmNwcCIgLz4KQEAgLTY0MjQsOCArNjQyNCw4IEBACiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXENoYW5nZVZlcnNpb25X
cmFwcGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFi
YXNlXERhdGFiYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdl
YmRhdGFiYXNlXERhdGFiYXNlQXV0aG9yaXplci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxEYXRhYmFzZUJhY2tlbmQuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VCYWNrZW5kQXN5
bmMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2Vc
RGF0YWJhc2VCYWNrZW5kQmFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9k
dWxlc1x3ZWJkYXRhYmFzZVxEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXERhdGFiYXNlQmFja2VuZFN5bmMu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0
YWJhc2VCYXNlLmgiIC8+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2Vi
Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxNDM0MjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMJKHdv
cmtpbmcgY29weSkKQEAgLTE4MzYsMTAgKzE4MzYsMTAgQEAKICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VBdXRob3JpemVyLmNwcCI+CiAgICAg
ICA8RmlsdGVyPk1vZHVsZXNcd2ViZGF0YWJhc2U8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VC
YWNrZW5kLmNwcCI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFi
YXNlXERhdGFiYXNlQmFja2VuZEFzeW5jLmNwcCI+CiAgICAgICA8RmlsdGVyPk1vZHVsZXNcd2Vi
ZGF0YWJhc2U8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwIj4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VCYWNr
ZW5kQmFzZS5jcHAiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+
CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdl
YmRhdGFiYXNlXERhdGFiYXNlQmFja2VuZENvbnRleHQuY3BwIj4KQEAgLTg1MDIsMTAgKzg1MDIs
MTAgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0
YWJhc2VBdXRob3JpemVyLmgiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9G
aWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1
bGVzXHdlYmRhdGFiYXNlXERhdGFiYXNlQmFja2VuZC5oIj4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VCYWNrZW5kQXN5bmMuaCI+CiAgICAg
ICA8RmlsdGVyPk1vZHVsZXNcd2ViZGF0YWJhc2U8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VC
YWNrZW5kQXN5bmMuaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRh
dGFiYXNlXERhdGFiYXNlQmFja2VuZEJhc2UuaCI+CiAgICAgICA8RmlsdGVyPk1vZHVsZXNcd2Vi
ZGF0YWJhc2U8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oIj4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzcwOCw4ICszNzA4LDggQEAKIAkJ
OTdCMzhFMjcxNTFDNDI3MTAwNDYyMkU5IC8qIERPTVdpbmRvd05vdGlmaWNhdGlvbnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QjM4RTI0MTUxQzQy
NjQwMDQ2MjJFOSAvKiBET01XaW5kb3dOb3RpZmljYXRpb25zLmggKi87IH07CiAJCTk3QjM4RTI4
MTUxQzQyNzMwMDQ2MjJFOSAvKiBET01XaW5kb3dOb3RpZmljYXRpb25zLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QjM4RTIzMTUxQzQyNjQwMDQ2
MjJFOSAvKiBET01XaW5kb3dOb3RpZmljYXRpb25zLmNwcCAqLzsgfTsKIAkJOTdCOEZGRDExNkFF
N0Y5NjAwMzgzODhEIC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QjhGRkNGMTZBRTdGOTIw
MDM4Mzg4RCAvKiBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmggKi87IH07Ci0JCTk3
QkM2OURBMTUwNUYwNzYwMDFCNzRBQyAvKiBEYXRhYmFzZUJhY2tlbmQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RDYxNTA1RjA3NjAwMUI3
NEFDIC8qIERhdGFiYXNlQmFja2VuZC5jcHAgKi87IH07Ci0JCTk3QkM2OURCMTUwNUYwNzYwMDFC
NzRBQyAvKiBEYXRhYmFzZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3QkM2OUQ3MTUwNUYwNzYwMDFCNzRBQyAvKiBEYXRhYmFzZUJhY2tl
bmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk5
N0JDNjlEQTE1MDVGMDc2MDAxQjc0QUMgLyogRGF0YWJhc2VCYWNrZW5kQmFzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNjlENjE1MDVGMDc2
MDAxQjc0QUMgLyogRGF0YWJhc2VCYWNrZW5kQmFzZS5jcHAgKi87IH07CisJCTk3QkM2OURCMTUw
NUYwNzYwMDFCNzRBQyAvKiBEYXRhYmFzZUJhY2tlbmRCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNjlENzE1MDVGMDc2MDAxQjc0QUMgLyog
RGF0YWJhc2VCYWNrZW5kQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTk3QkM2OURDMTUwNUYwNzYwMDFCNzRBQyAvKiBDaGFuZ2VWZXJzaW9u
V3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5N0JDNjlEODE1MDVGMDc2MDAxQjc0QUMgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwICov
OyB9OwogCQk5N0JDNjlERDE1MDVGMDc2MDAxQjc0QUMgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OUQ5
MTUwNUYwNzYwMDFCNzRBQyAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oICovOyB9OwogCQk5N0JD
NkEyMDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5REUxNTA1RjA4MTAwMUI3NEFDIC8qIERh
dGFiYXNlLmNwcCAqLzsgfTsKQEAgLTExMTc5LDggKzExMTc5LDggQEAKIAkJOTdCMzhFMjQxNTFD
NDI2NDAwNDYyMkU5IC8qIERPTVdpbmRvd05vdGlmaWNhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gRE9NV2luZG93Tm90aWZpY2F0aW9ucy5oOyBwYXRoID0gTW9kdWxl
cy9ub3RpZmljYXRpb25zL0RPTVdpbmRvd05vdGlmaWNhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTdCMzhFMjUxNTFDNDI2NDAwNDYyMkU5IC8qIERPTVdpbmRvd05vdGlm
aWNhdGlvbnMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IERPTVdpbmRvd05vdGlmaWNhdGlv
bnMuaWRsOyBwYXRoID0gTW9kdWxlcy9ub3RpZmljYXRpb25zL0RPTVdpbmRvd05vdGlmaWNhdGlv
bnMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0I4RkZDRjE2QUU3RjkyMDAz
ODM4OEQgLyogQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3QkM2OUQ2MTUwNUYwNzYwMDFCNzRBQyAvKiBE
YXRhYmFzZUJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
RGF0YWJhc2VCYWNrZW5kLmNwcDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VC
YWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTdCQzY5RDcxNTA1RjA3
NjAwMUI3NEFDIC8qIERhdGFiYXNlQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBEYXRhYmFzZUJhY2tlbmQuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3QkM2OUQ2MTUw
NUYwNzYwMDFCNzRBQyAvKiBEYXRhYmFzZUJhY2tlbmRCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERhdGFiYXNlQmFja2VuZEJhc2UuY3BwOyBwYXRoID0gTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTdCQzY5RDcxNTA1RjA3NjAwMUI3NEFDIC8qIERhdGFiYXNlQmFja2Vu
ZEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGF0YWJhc2VCYWNrZW5k
QmFzZS5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRCYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QkM2OUQ4MTUwNUYwNzYwMDFCNzRBQyAv
KiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBDaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFi
YXNlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTdCQzY5RDkxNTA1RjA3NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENoYW5nZVZlcnNpb25XcmFwcGVyLmg7IHBh
dGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QkM2OURFMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEYXRhYmFzZS5jcHA7
IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE4NjczLDEwICsxODY3MywxMCBAQAogCQkJCTk3QkM2OUUwMTUwNUYw
ODEwMDFCNzRBQyAvKiBEYXRhYmFzZS5pZGwgKi8sCiAJCQkJOTdCQzY5RTExNTA1RjA4MTAwMUI3
NEFDIC8qIERhdGFiYXNlQXV0aG9yaXplci5jcHAgKi8sCiAJCQkJOTdCQzY5RTIxNTA1RjA4MTAw
MUI3NEFDIC8qIERhdGFiYXNlQXV0aG9yaXplci5oICovLAotCQkJCTk3QkM2OUQ2MTUwNUYwNzYw
MDFCNzRBQyAvKiBEYXRhYmFzZUJhY2tlbmQuY3BwICovLAotCQkJCTk3QkM2OUQ3MTUwNUYwNzYw
MDFCNzRBQyAvKiBEYXRhYmFzZUJhY2tlbmQuaCAqLywKIAkJCQlGRTE2Q0ZDRjE2OUQxREVDMDBE
M0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwICovLAogCQkJCUZFMTZDRkQwMTY5RDFE
RUMwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmRBc3luYy5oICovLAorCQkJCTk3QkM2OUQ2MTUw
NUYwNzYwMDFCNzRBQyAvKiBEYXRhYmFzZUJhY2tlbmRCYXNlLmNwcCAqLywKKwkJCQk5N0JDNjlE
NzE1MDVGMDc2MDAxQjc0QUMgLyogRGF0YWJhc2VCYWNrZW5kQmFzZS5oICovLAogCQkJCUZFNkY2
QUFEMTY5RTA1NzUwMEZDMzBBMiAvKiBEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmNwcCAqLywKIAkJ
CQlGRTZGNkFBRTE2OUUwNTc1MDBGQzMwQTIgLyogRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oICov
LAogCQkJCUZFMTZDRkQxMTY5RDFERUMwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmRTeW5jLmNw
cCAqLywKQEAgLTIzNTU1LDggKzIzNTU1LDggQEAKIAkJCQlBODBFNkQwQjBBMTk4OUNBMDA3RkI4
QzUgLyogRGFzaGJvYXJkUmVnaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNkEyMTE1MDVG
MDgxMDAxQjc0QUMgLyogRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTI0MTUw
NUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUF1dGhvcml6ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTk3QkM2OURCMTUwNUYwNzYwMDFCNzRBQyAvKiBEYXRhYmFzZUJhY2tlbmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZFMTZDRkQ0MTY5RDFERUQwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmRBc3lu
Yy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTdCQzY5REIxNTA1RjA3NjAwMUI3NEFDIC8qIERhdGFi
YXNlQmFja2VuZEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNkY2QUIwMTY5RTA1NzUwMEZD
MzBBMiAvKiBEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTE2
Q0ZENjE2OUQxREVEMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kU3luYy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkVCQzVGMzIxNkJEMENDMzAwNjU5QkQzIC8qIERhdGFiYXNlQmFzZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yNzIyOSw4ICsyNzIyOSw4IEBACiAJCQkJQTI5NTMyQ0YxNURENUUxNzAw
NDY5RUJDIC8qIEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTdCQzZBMjAxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTk3QkM2QTIzMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUF1dGhvcml6ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTdCQzY5REExNTA1RjA3NjAwMUI3NEFDIC8qIERhdGFi
YXNlQmFja2VuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTE2Q0ZEMzE2OUQxREVEMDBEM0Ew
QzcgLyogRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTdCQzY5
REExNTA1RjA3NjAwMUI3NEFDIC8qIERhdGFiYXNlQmFja2VuZEJhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRkU2RjZBQUYxNjlFMDU3NTAwRkMzMEEyIC8qIERhdGFiYXNlQmFja2VuZENvbnRl
eHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUxNkNGRDUxNjlEMURFRDAwRDNBMEM3IC8qIERh
dGFiYXNlQmFja2VuZFN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVCQzVGMzExNkJEMEND
MzAwNjU5QkQzIC8qIERhdGFiYXNlQmFzZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDM0MjkpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDEzLTAy
LTE5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgRGF0
YWJhc2VCYWNrZW5kIHRvIERhdGFiYXNlQmFja2VuZEJhc2UuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAzMDMuCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViRGF0YWJhc2UuaDoKKyAg
ICAgICAgKFdlYkRhdGFiYXNlKToKKyAgICAgICAgKiBzcmMvRGF0YWJhc2VPYnNlcnZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFzZU9wZW5lZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFzZU1vZGlmaWVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlQ2xvc2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU9ic2VydmVyOjpyZXBvcnRDaGFuZ2VWZXJzaW9u
UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydFN0YXJ0
VHJhbnNhY3Rpb25SZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VPYnNlcnZlcjo6
cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VPYnNlcnZlcjo6cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdCk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZU9ic2VydmVyOjpyZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3VsdCk6CisgICAg
ICAgICogc3JjL1dlYkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YWJhc2U6
OldlYkRhdGFiYXNlKToKKwogMjAxMy0wMi0xOSAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE0MzM4MiBhbmQg
cjE0MzQwMS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRhdGFiYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGF0YWJh
c2UuaAkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUg
Ii4uLy4uLy4uL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJDb21tb24uaCIKICNpbmNsdWRl
ICJXZWJTZWN1cml0eU9yaWdpbi5oIgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIERhdGFi
YXNlQmFja2VuZDsgfQorbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBEYXRhYmFzZUJhY2tlbmRC
YXNlOyB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC02MywxMiArNjMsMTIgQEAgcHVibGlj
OgogICAgICAgICBjb25zdCBXZWJTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYlN0
cmluZyYgZGF0YWJhc2VOYW1lKTsKIAogI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotICAgIFdl
YkRhdGFiYXNlKGNvbnN0IFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZCopOworICAgIFdlYkRhdGFi
YXNlKGNvbnN0IFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZEJhc2UqKTsKICNlbmRpZgogCiBwcml2
YXRlOgogICAgIFdlYkRhdGFiYXNlKCkgeyB9Ci0gICAgY29uc3QgV2ViQ29yZTo6RGF0YWJhc2VC
YWNrZW5kKiBtX2RhdGFiYXNlOworICAgIGNvbnN0IFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZEJh
c2UqIG1fZGF0YWJhc2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCShyZXZpc2lv
biAxNDM0MjYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9EYXRhYmFzZU9ic2VydmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiAjaW5jbHVkZSAiQ3Jvc3NU
aHJlYWRDb3BpZXIuaCIKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKLSNpbmNsdWRlICJE
YXRhYmFzZUJhY2tlbmQuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRCYXNlLmgiCiAjaW5j
bHVkZSAiRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgpAQCAtMTc4LDUwICsxNzgsNTAgQEAg
Ym9vbCBEYXRhYmFzZU9ic2VydmVyOjpjYW5Fc3RhYmxpc2hEYXRhYgogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlT3BlbmVkKERhdGFiYXNlQmFj
a2VuZCogZGF0YWJhc2UpCit2b2lkIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlT3BlbmVkKERh
dGFiYXNlQmFja2VuZEJhc2UqIGRhdGFiYXNlKQogewogICAgIEFTU0VSVChkYXRhYmFzZS0+ZGF0
YWJhc2VDb250ZXh0KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFk
KCkpOwogICAgIFdlYkRhdGFiYXNlOjpvYnNlcnZlcigpLT5kYXRhYmFzZU9wZW5lZChXZWJEYXRh
YmFzZShkYXRhYmFzZSkpOwogfQogCi12b2lkIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlTW9k
aWZpZWQoRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZSkKK3ZvaWQgRGF0YWJhc2VPYnNlcnZlcjo6
ZGF0YWJhc2VNb2RpZmllZChEYXRhYmFzZUJhY2tlbmRCYXNlKiBkYXRhYmFzZSkKIHsKICAgICBB
U1NFUlQoZGF0YWJhc2UtPmRhdGFiYXNlQ29udGV4dCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBXZWJEYXRhYmFzZTo6b2JzZXJ2ZXIoKS0+ZGF0
YWJhc2VNb2RpZmllZChXZWJEYXRhYmFzZShkYXRhYmFzZSkpOwogfQogCi12b2lkIERhdGFiYXNl
T2JzZXJ2ZXI6OmRhdGFiYXNlQ2xvc2VkKERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2UpCit2b2lk
IERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlQ2xvc2VkKERhdGFiYXNlQmFja2VuZEJhc2UqIGRh
dGFiYXNlKQogewogICAgIEFTU0VSVChkYXRhYmFzZS0+ZGF0YWJhc2VDb250ZXh0KCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwogICAgIFdlYkRhdGFiYXNl
OjpvYnNlcnZlcigpLT5kYXRhYmFzZUNsb3NlZChXZWJEYXRhYmFzZShkYXRhYmFzZSkpOwogfQog
Ci12b2lkIERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdChEYXRhYmFz
ZUJhY2tlbmQqIGRhdGFiYXNlLCBpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBp
bnQgc3FsaXRlRXJyb3JDb2RlKQordm9pZCBEYXRhYmFzZU9ic2VydmVyOjpyZXBvcnRPcGVuRGF0
YWJhc2VSZXN1bHQoRGF0YWJhc2VCYWNrZW5kQmFzZSogZGF0YWJhc2UsIGludCBlcnJvclNpdGUs
IGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpCiB7CiAgICAgV2ViRGF0
YWJhc2U6Om9ic2VydmVyKCktPnJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdChXZWJEYXRhYmFzZShk
YXRhYmFzZSksIGVycm9yU2l0ZSwgd2ViU3FsRXJyb3JDb2RlLCBzcWxpdGVFcnJvckNvZGUpOwog
fQogCi12b2lkIERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydENoYW5nZVZlcnNpb25SZXN1bHQoRGF0
YWJhc2VCYWNrZW5kKiBkYXRhYmFzZSwgaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29k
ZSwgaW50IHNxbGl0ZUVycm9yQ29kZSkKK3ZvaWQgRGF0YWJhc2VPYnNlcnZlcjo6cmVwb3J0Q2hh
bmdlVmVyc2lvblJlc3VsdChEYXRhYmFzZUJhY2tlbmRCYXNlKiBkYXRhYmFzZSwgaW50IGVycm9y
U2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSkKIHsKICAgICBX
ZWJEYXRhYmFzZTo6b2JzZXJ2ZXIoKS0+cmVwb3J0Q2hhbmdlVmVyc2lvblJlc3VsdChXZWJEYXRh
YmFzZShkYXRhYmFzZSksIGVycm9yU2l0ZSwgd2ViU3FsRXJyb3JDb2RlLCBzcWxpdGVFcnJvckNv
ZGUpOwogfQogCi12b2lkIERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25S
ZXN1bHQoRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZSwgaW50IGVycm9yU2l0ZSwgaW50IHdlYlNx
bEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSkKK3ZvaWQgRGF0YWJhc2VPYnNlcnZlcjo6
cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdChEYXRhYmFzZUJhY2tlbmRCYXNlKiBkYXRhYmFz
ZSwgaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29k
ZSkKIHsKICAgICBXZWJEYXRhYmFzZTo6b2JzZXJ2ZXIoKS0+cmVwb3J0U3RhcnRUcmFuc2FjdGlv
blJlc3VsdChXZWJEYXRhYmFzZShkYXRhYmFzZSksIGVycm9yU2l0ZSwgd2ViU3FsRXJyb3JDb2Rl
LCBzcWxpdGVFcnJvckNvZGUpOwogfQogCi12b2lkIERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydENv
bW1pdFRyYW5zYWN0aW9uUmVzdWx0KERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2UsIGludCBlcnJv
clNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpCit2b2lkIERh
dGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KERhdGFiYXNlQmFj
a2VuZEJhc2UqIGRhdGFiYXNlLCBpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBp
bnQgc3FsaXRlRXJyb3JDb2RlKQogewogICAgIFdlYkRhdGFiYXNlOjpvYnNlcnZlcigpLT5yZXBv
cnRDb21taXRUcmFuc2FjdGlvblJlc3VsdChXZWJEYXRhYmFzZShkYXRhYmFzZSksIGVycm9yU2l0
ZSwgd2ViU3FsRXJyb3JDb2RlLCBzcWxpdGVFcnJvckNvZGUpOwogfQogCi12b2lkIERhdGFiYXNl
T2JzZXJ2ZXI6OnJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQoRGF0YWJhc2VCYWNrZW5kKiBk
YXRhYmFzZSwgaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVy
cm9yQ29kZSkKK3ZvaWQgRGF0YWJhc2VPYnNlcnZlcjo6cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJl
c3VsdChEYXRhYmFzZUJhY2tlbmRCYXNlKiBkYXRhYmFzZSwgaW50IGVycm9yU2l0ZSwgaW50IHdl
YlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSkKIHsKICAgICBXZWJEYXRhYmFzZTo6
b2JzZXJ2ZXIoKS0+cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdChXZWJEYXRhYmFzZShkYXRh
YmFzZSksIGVycm9yU2l0ZSwgd2ViU3FsRXJyb3JDb2RlLCBzcWxpdGVFcnJvckNvZGUpOwogfQog
Ci12b2lkIERhdGFiYXNlT2JzZXJ2ZXI6OnJlcG9ydFZhY3V1bURhdGFiYXNlUmVzdWx0KERhdGFi
YXNlQmFja2VuZCogZGF0YWJhc2UsIGludCBzcWxpdGVFcnJvckNvZGUpCit2b2lkIERhdGFiYXNl
T2JzZXJ2ZXI6OnJlcG9ydFZhY3V1bURhdGFiYXNlUmVzdWx0KERhdGFiYXNlQmFja2VuZEJhc2Uq
IGRhdGFiYXNlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKQogewogICAgIFdlYkRhdGFiYXNlOjpvYnNl
cnZlcigpLT5yZXBvcnRWYWN1dW1EYXRhYmFzZVJlc3VsdChXZWJEYXRhYmFzZShkYXRhYmFzZSks
IHNxbGl0ZUVycm9yQ29kZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJEYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJEYXRhYmFzZS5oIgogCi0jaW5jbHVk
ZSAiRGF0YWJhc2VCYWNrZW5kLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kQmFzZS5oIgog
I2luY2x1ZGUgIkRhdGFiYXNlTWFuYWdlci5oIgogI2luY2x1ZGUgIlF1b3RhVHJhY2tlci5oIgog
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBAIC00Miw3ICs0Miw3IEBACiAKICNpZiAhRU5B
QkxFKFNRTF9EQVRBQkFTRSkKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIERhdGFiYXNlQmFj
a2VuZCB7CitjbGFzcyBEYXRhYmFzZUJhY2tlbmRCYXNlIHsKIHB1YmxpYzoKICAgICBTdHJpbmcg
c3RyaW5nSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9CiAgICAgU3RyaW5n
IGRpc3BsYXlOYW1lKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KQEAgLTEyNyw3ICsxMjcs
NyBAQCB2b2lkIFdlYkRhdGFiYXNlOjpjbG9zZURhdGFiYXNlSW1tZWRpYXRlCiAjZW5kaWYKIH0K
IAotV2ViRGF0YWJhc2U6OldlYkRhdGFiYXNlKGNvbnN0IERhdGFiYXNlQmFja2VuZCogZGF0YWJh
c2UpCitXZWJEYXRhYmFzZTo6V2ViRGF0YWJhc2UoY29uc3QgRGF0YWJhc2VCYWNrZW5kQmFzZSog
ZGF0YWJhc2UpCiAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQogewogfQo=
</data>
<flag name="review"
          id="209583"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>